Мак*_*лет 5 bitcoin ethereum ether cryptocurrency
我使用 web3 和供应商主网。我按合同进行了 2 笔交易。首先是批准方法,另一笔交易是多次转账。我将第二个签名存储在数据库中。如果第一笔交易成功,我发送第二笔交易/。第二个事务几乎总是错误 nonce 太低`。我该如何解决这个问题
要进行适当的随机数管理,您有 2 个选择:
使用 web3.eth请求为您的地址确认的交易数量。getTransactionCount (ethAddress),在处理下一个之前增加,发送并等待接收。如果您需要高吞吐量并且依赖特定节点可用和同步,这会非常慢。
您维护自己的本地计数器坚持在数据库的级别。使用 DB 的访问锁来处理可能的并发请求并每次都返回正确的值。您不希望将此计数器保留在内存中,因为如果您的应用程序崩溃或重新启动,它们将会丢失。这是非常有效的,因为您不需要节点,并且您可以发送尽可能多的交易。如果出现问题......(nonce 太低)重置为 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
还有这个:发送原始交易 Ethereum infura nodejs npm
根据我的理解,这里可能有两个问题(解决方案);1) 您可能需要手动增加随机数以进行多重传输操作的气体估计。2)现在有些服务器非常慢,因此您要么在执行第二笔交易之前获取第一笔交易的 transactionReceipt(poll),以确保它已被挖掘。这样您就可能拥有第二笔交易的正确随机数。但是,如果您懒惰这样做,则只需在两个事务之间进行合理的延迟即可。
| 归档时间: |
|
| 查看次数: |
7678 次 |
| 最近记录: |