오전에 문의드렸던 내용으로 테스트 코드를 작성해서 테스트를 진행하고 있습니다.
// baobabWallet_3
String feePayerWallet = "0x9ad50";
try {
// 보내는 사람
SingleKeyring senderKeyring = KeyringFactory.createFromPrivateKey("0x15321");
Caver caver = setCaver(accessKey, secretAccessKey, chainId);
caver.wallet.add(senderKeyring);
// feepayer
String feePayerWalletFilePath = walletsRootPath + messageByLocaleService.getMessage("mcc.wallet." + feePayerWallet + ".path");
//Decrypt keystore.
ObjectMapper objectMapper = ObjectMapperFactory.getObjectMapper();
KeyStore keyStore = objectMapper.readValue(new File(feePayerWalletFilePath), KeyStore.class);
AbstractKeyring feePayerKeyring = KeyringFactory.decrypt(keyStore, "asdf1234!");
log.info("### feePayerKeyring : {}", feePayerKeyring.getAddress());
// 새로운 key 생성
List<String[]> newRoleBasedKeyList = caver.wallet.keyring.generateRoleBasedKeys(new int[]{1, 1, 1});
// 새로운 keyring 생성
RoleBasedKeyring newKeyring = caver.wallet.keyring.create(feePayerKeyring.getAddress(), newRoleBasedKeyList);
// account 인스턴스 생성
// BigInteger[][] optionWeight = {
// {},
// {},
// {},
// };
WeightedMultiSigOptions[] options = {
new WeightedMultiSigOptions(),
new WeightedMultiSigOptions(),
new WeightedMultiSigOptions(),
};
Account account = newKeyring.toAccount(Arrays.asList(options));
log.info("### account : {}", account);
// private key update 트랜잭션 생성
AccountUpdate accountUpdate = caver.transaction.accountUpdate.create(
TxPropertyBuilder.accountUpdate()
.setFrom(feePayerKeyring.getAddress())
.setAccount(account)
.setGas(BigInteger.valueOf(150000))
);
// 트랜잭션에 서명하기
caver.wallet.sign(feePayerKeyring.getAddress(), accountUpdate);
// 결과값 확인
Bytes32 sendResult = caver.rpc.klay.sendRawTransaction(accountUpdate).send();
String txHash = sendResult.getResult();
TransactionReceiptProcessor receiptProcessor = new PollingTransactionReceiptProcessor(caver, 1000, 15);
TransactionReceipt.TransactionReceiptData receiptData = receiptProcessor.waitForTransactionReceipt(txHash);
log.info(objectToString(receiptData));
} catch(Exception e) {
log.warn("{}", e);
}
위와 같이 작성하고 실행을 했는데 Failed to find keyring from wallet with address
이런 오류가 발생하여
발생한 위치를 보니 caver.wallet.sign(feePayerKeyring.getAddress(), accountUpdate);
부분에서 발생했습니다
디버깅을 했을 때 accountUpdate의 주소와 feePayerKeyring의 주소가 달라서 발생한 오류처럼 보여집니다.
미디움참고했습니다.
setAccount부분을 수정해줘야 할것 같은데 어떻게 수정해야할 지 몰라 문의드립니다.