ERC6551 관련 미디움 이 링크를 보고 ERC6551을 테스트해보고 있었습니다.
이 글을 보고 TBA의 주소를 확인해서 NFT의 소유권을 이전해보는 부분을 테스트 하고 있었는데
Gas잔액부족이라는 오류가 발생하더라구요…
Credentials credentials = Credentials.create("0x07f2066d045c19f72479cf3079a8161244bb3a9d0899a3487b6ec00c13596360"); // Token 0번 Owner (Baobab)
TransactionManager transactionManager = new RawTransactionManager(web3j, credentials);
// 가스 가격 조회
EthGasPrice gas = web3j.ethGasPrice().send();
BigInteger gasPrice = gas.getGasPrice();
// 최신 블록의 평균 가스 한도 조회
EthBlock.Block block = web3j.ethGetBlockByNumber(DefaultBlockParameterName.LATEST, false).send().getBlock();
BigInteger gasLimit = block.getGasLimit().divide(BigInteger.valueOf(block.getTransactions().size()));
// 총 가스비 계산
BigInteger totalGas = gasPrice.multiply(BigInteger.TWO);
log.info("========== gasPrice : {} / totalGas : {}", gasPrice, totalGas);
// ContractGasProvider gasProvider = new StaticGasProvider(gasPrice, BigInteger.valueOf(5_000_000));
ContractGasProvider gasProvider = new StaticGasProvider(gasPrice, totalGas);
ERC6551Account erc6551Account = ERC6551Account.load(
// tokenBoundAccountAddress,
ERC6551AccountAddress,
web3j,
transactionManager,
gasProvider
);
Function function = new Function(
"transferFrom",
Arrays.asList(new Address(tokenBoundAccountAddress), new Address(receiverAddress), new Uint256(tokenId)),
Collections.emptyList()
);
String encodedFunction = FunctionEncoder.encode(function);
byte[] data = Numeric.hexStringToByteArray(encodedFunction);
TransactionReceipt receipt = erc6551Account.execute(receiverAddress, tokenAmount, data, BigInteger.ZERO, BigInteger.ZERO).send();
위 소스처럼 web3j로 제가 Baobab에 배포한 ERC6551컨트랙트의 execute함수를 실행했었습니다.
그때 오류가 insufficient funds of the sender for value
이렇게 sender에 잔액부족이 노출되는데 sender는 credentials의 address 아닌가요?