Erc6551 컨트랙트 관련해서 궁금한게 있습니다

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 아닌가요?

네 맞습니다.

다만 이전과 동일하게 gas에 gasPrice값이 들어가 있으므로, 잔액부족이 떴을 가능성이 높아보입니다.

ethEstimateGas 혹은 estimageGas API call 을 통해 gas 값을 유추하거나, 적당한 값을 gas로 하드코딩하는것이 좋아보입니다.