안녕하세요.
비슷한 유형이나 이번에는 FeeDelegatedContractExecution 관련한 오류가 있습니다.
트랜잭션이 정상적으로 생성되지 않으며 아래와 같은 오류가 나옵니다.
{“jsonrpc”:“2.0”,“id”:4,“error”:{“code”:-32000,“message”:“not a program account (e.g., an account having code and storage)”}}
소스코드.
Contract contract = new Contract(caver, abi, contractAddress);
String[] privateKeyArray = new String[] {op1PrivateKey, op2PrivateKey};
MultipleKeyring multiSigKeyring = KeyringFactory.createWithMultipleKey(ownerAddress, privateKeyArray);
caver.wallet.add(multiSigKeyring);
SendOptions sendOptions = new SendOptions();
sendOptions.setFrom(multiSigKeyring.getAddress()); // executor address
sendOptions.setGas(BigInteger.valueOf(500000));
String encodedParams = contract.encodeABI("safeTransfer", new Address(toAddress), Convert.toPeb(amount, KLAY).toBigInteger());
FeeDelegatedSmartContractExecution feeDelegatedSmartContractExecution = new FeeDelegatedSmartContractExecution.Builder()
.setKlaytnCall(caver.rpc.klay)
.setFrom(sendOptions.getFrom())
.setTo(toAddress)
.setGas(sendOptions.getGas())
.setInput(encodedParams)
.setFeePayer(feePayer)
.build();
AbstractTransaction signed = caver.wallet.sign(multiSigKeyring.getAddress(), feeDelegatedSmartContractExecution);
String rlpEncoded = signed.getRLPEncoding();
System.out.println("rlpEncoded = " + rlpEncoded);
SingleKeyring feePayerKeyring = KeyringFactory.createWithSingleKey(feePayer, feePayerKey);
caver.wallet.add(feePayerKeyring);
FeeDelegatedSmartContractExecution decoded = FeeDelegatedSmartContractExecution.decode(rlpEncoded);
decoded.setFeePayer(feePayerKeyring.getAddress());
decoded.setKlaytnCall(caver.rpc.klay);
caver.wallet.signAsFeePayer(feePayerKeyring.getAddress(), decoded);
String rlpEncodedFinal = feeDelegatedSmartContractExecution.getRLPEncoding();
System.out.println("rlpEncodedFinal = " + rlpEncodedFinal);
Bytes32 sendResult = caver.rpc.klay.sendRawTransaction(decoded).send();
String txHash = sendResult.getResult();
System.out.println("txHash = " + txHash);
txHash가 null 로 나옵니다.
확인 부탁드립니다.