web3j 4.8.4中调用Transfer.sendFundsEIP1559静态方法报错求助
解决web3j Transfer.sendFundsEIP1559静态方法调用报错问题
报错原因
你遇到的编译错误是因为sendFundsEIP1559是Transfer类的静态方法,静态方法必须通过类本身直接调用,不能用new出来的实例对象(比如你的testTransfer)去调用。
两种解决方案
结合你需要配置provider、chainId的需求,提供两种可行方案:
方案一:使用带TransactionManager的静态方法重载
如果你不想创建Transfer实例,可以直接调用带TransactionManager参数的静态方法重载,复用已配置好chainId的TransactionManager:
RemoteCall<TransactionReceipt> remoteCall = Transfer.sendFundsEIP1559( web3j, transactionManager, // 已配置chainId等参数的TransactionManager "0xc60e4Ae2EfE9B8f991E6967cF317Cc39c634ggb9", BigDecimal.valueOf(objTransfer.getTokens()), Convert.Unit.WEI, contractGasProvider.getGasLimit(FUNC_TRANSFER), contractGasProvider.getGasPrice(FUNC_TRANSFER), null);
方案二:调用Transfer实例的非静态方法
既然你已经创建了Transfer实例,直接调用其非静态的sendFundsEIP1559方法即可,该方法不需要再传入web3j和Credentials(实例初始化时已包含这些信息):
org.web3j.tx.Transfer testTransfer = new org.web3j.tx.Transfer(web3j, transactionManager); RemoteCall<TransactionReceipt> remoteCall = testTransfer.sendFundsEIP1559( "0xc60e4Ae2EfE9B8f991E6967cF317Cc39c634ggb9", BigDecimal.valueOf(objTransfer.getTokens()), Convert.Unit.WEI, contractGasProvider.getGasLimit(FUNC_TRANSFER), contractGasProvider.getGasPrice(FUNC_TRANSFER), null);
注意事项
- 确保你的
transactionManager已正确配置chainId(比如使用RawTransactionManager时,构造函数传入对应链的chainId参数),否则EIP1559转账可能失败。 - web3j 4.8.4版本中,Transfer类的实例方法与静态方法签名不同,调用时注意参数匹配。
内容的提问来源于stack exchange,提问作者dariusjvc
相关产品推荐
相关产品推荐

