Error processing request:unknown transaction
这个问题应该发生在TransactionReceiptProcessor内部。
当调用web3j.ethGetTransactionReceipt(transactionHash).send()时内部会执行waitForTransactionReceipt。
你的节点可能还没有彻底准备好,无法给你提供一个有效的TransactionReceipt。
你可以通过手动构建交易来解决这个问题:
Web3j web3 = Web3j.build(new HttpService()); // defaults to http://localhost:8545/ Credentials credentials = WalletUtils.loadCredentials("password", "/path/to/walletfile");
// get the next available nonce EthGetTransactionCount ethGetTransactionCount = web3j.ethGetTransactionCount( address, DefaultBlockParameterName.LATEST).sendAsync().get(); BigInteger nonce = ethGetTransactionCount.getTransactionCount();
// create our transaction RawTransaction rawTransaction = RawTransaction.createEtherTransaction( nonce, , , , );
// sign & send our transaction byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials); String hexValue = Hex.toHexString(signedMessage); // FROM here you can get the tx hash. EthSendTransaction ethSendTransaction = web3j.ethSendRawTransaction(hexValue).send();
虽然可以使用自定义的交易管理器,但尽量尝试更改轮询的次数来增加获得txhash的概率。
public static final int DEFAULT_POLLING_ATTEMPTS_PER_TX_HASH = 40; public static final long DEFAULT_POLLING_FREQUENCY = 1000 * 15;
例如:
new Transfer(client, new ClientTransactionManager(client ,fromAddress, 100))
另外一个明确的方法:
val txManager = new RawTransactionManager(client,credentials,100,1000 * 15)
val transfer = new Transfer(client,txManager)
transfer.sendFunds(
walletAddress,
amount,
currency.convert)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。