以太坊随机数管理。错误随机数太低

问题描述 投票:0回答:3

我使用 web3 和提供商主网。我通过合同进行了 2 笔交易。第一个是批准方法,另一个交易是多重转账。我将第二个签名存储在数据库中。如果第一笔交易成功,我发送第二笔交易/。第二笔交易几乎总是错误随机数太低。我该如何解决这个问题

ethereum bitcoin cryptocurrency ether
3个回答
12
投票

对于适当的随机数管理,您有2个选择:

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

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

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

为了更好地理解节点如何看待消息的随机数。在这里检查这个答案:

https://ethereum.stackexchange.com/questions/2808/what-happens-when-a-transaction-nonce-is-too-high/2809#2809

还有这个:

发送原始交易以太坊 infura nodejs npm


2
投票


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.