Web3j

web3j 和 rinkeby 的 nonce 錯誤太低

  • February 26, 2019

由於低隨機數錯誤,我在測試網上的應用程序突然停止工作。原始碼沒有變化。我的應用程序通過 infura 連接到網路。任何想法這裡可能有什麼問題。

java.lang.RuntimeException: Error processing transaction request: nonce too low
57879         at org.web3j.tx.TransactionManager.processResponse(TransactionManager.java:67) ~[core-3.3.1.jar!/:na]
57880         at org.web3j.tx.TransactionManager.executeTransaction(TransactionManager.java:51) ~[core-3.3.1.jar!/:na]
57881         at org.web3j.tx.ManagedTransaction.send(ManagedTransaction.java:83) ~[core-3.3.1.jar!/:na]
57882         at org.web3j.tx.Transfer.send(Transfer.java:65) ~[core-3.3.1.jar!/:na]
57883         at org.web3j.tx.Transfer.lambda$sendFunds$2(Transfer.java:97) ~[core-3.3.1.jar!/:na]
57884         at org.web3j.protocol.core.RemoteCall.send(RemoteCall.java:30) ~[core-3.3.1.jar!/:na]
57885         at bitmovio.service.blockchain.manager.WalletManager.makeExternalPaymentForRecurringWithdrawl(WalletManager.java:1331) [classes!/:1.0-SNAPSHOT]
57886         at bitmovio.service.blockchain.manager.WalletManager.settleMonthlyRecurringWithdrawl(WalletManager.java:1162) [classes!/:1.0-SNAPSHOT]
57887         at bitmovio.service.blockchain.manager.WalletManager$$FastClassBySpringCGLIB$$76b35353.invoke(<generated>) [classes!/:1.0-SNAPSHOT]
57888         at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) [spring-core-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]
57889         at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:746) [spring-aop-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]
57890         at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) [spring-aop-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]
57891         at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport

您在交易中提供的隨機數已經在區塊鏈上用於該地址。

每個乙太坊地址都有一個從零開始的隨機數,每次新交易增加一。

當您在建構交易時給出隨機數時,它與乙太坊區塊鏈本身的地址不匹配。

解決方案是從區塊鏈同步隨機數,並在創建交易時始終使用下一個免費隨機數。

這對你來說是如何發生的還不清楚,因為這個問題沒有任何原始碼給出你試圖做的事情的上下文。

FastRawTransactionManager將初始化為最新確認的 nonce。並且只會在該實例發送新事務時增加隨機數。

如果另一個實例發送一個新事務,nonce 將不會被更新。您必須明確呼叫resetNonceor setNonce

也可能是您的應用程序正在重新啟動並且有待處理的事務。並且隨機數初始化不正確。

引用自:https://ethereum.stackexchange.com/questions/67648