Ethereum 以太坊临时管理。错误当前值太低

Ethereum 以太坊临时管理。错误当前值太低,ethereum,bitcoin,cryptocurrency,ether,Ethereum,Bitcoin,Cryptocurrency,Ether,我使用web3和提供商mainnet。我按合同做2笔交易。首先是approve方法,另一个事务是multitransfer。我在数据库中存储第二个签名。如果第一个事务成功,我将发送第二个事务/。第二个事务几乎总是错误nonce太低。如何解决这个问题根据我的理解,这里可能有两个问题(解决方案); 1) 您可能必须手动增加nonce,以便对多个传输操作进行气体估算。 2) 现在有些服务器速度非常慢,所以要么在执行第二个事务之前获取第一个事务的TransactionReceive(poll),以确保它

我使用web3和提供商mainnet。我按合同做2笔交易。首先是approve方法,另一个事务是multitransfer。我在数据库中存储第二个签名。如果第一个事务成功,我将发送第二个事务/。第二个事务几乎总是错误nonce太低。如何解决这个问题

根据我的理解,这里可能有两个问题(解决方案); 1) 您可能必须手动增加nonce,以便对多个传输操作进行气体估算。
2) 现在有些服务器速度非常慢,所以要么在执行第二个事务之前获取第一个事务的TransactionReceive(poll),以确保它已被挖掘。这样,您就可能拥有第二个事务的正确nonce。但是,如果您懒得这样做,则两个事务之间的延迟是合理的。

对于适当的临时管理,您有两种选择:

  • 使用web3.eth请求您的地址的交易数量已确认getTransactionCount(ethAddress),在处理下一个交易之前,递增、发送并等待收到。如果您需要高吞吐量,并且依赖于特定节点可用和同步,那么这将非常缓慢

  • 您可以在数据库级别维护自己的本地计数器。使用数据库的访问来处理可能的并发请求,并每次返回正确的值。您不希望将此计数器保留在内存中,因为如果应用程序崩溃或重新启动,这些计数器将丢失。这是非常有效的,因为您不需要节点,并且可以发送尽可能多的事务。如果出了问题。。。(nonce过低)重置为web3.eth.getTransactionCount(ethAddress)的值

重要提示:您可能想知道为什么不使用web3.eth.getTransactionCount(ethAddress,'pending')。这是因为“挂起”选项使得调用不可靠,因为节点很难在队列和内存池中拥有准确的事务数

以便更好地了解节点如何查看消息的nonce。请在此处检查此答案:


还有这个:

看,例如:我有两个签名,nonce是6和7。我将第一个签名发送到节点并等待挖掘。如果是地雷,我会再签名。没关系。但是在交易之间,如果有人从这个钱包里进行交易,那么这个交易也就变成了7号。出来吧,我有两个事务,没有相同的事务,因此我得到了错误
nonce-too-low