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

时间:2019-06-07 09:43:47

标签: ethereum bitcoin cryptocurrency ether

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

2 个答案:

答案 0 :(得分:0)

据我了解,这里可能有两个问题(解决方案); 1)您可能需要手动增加随机数以进行多次传输操作的气体估算。 2)最近有些服务器运行缓慢,因此您可以在执行第二笔交易之前先获取第一笔交易的transactionReceipt(poll),以确保已被开采。这样,您很可能就拥有第二次交易的现时权利。但是,如果您懒于执行此操作,则两次事务之间的合理延迟是合理的。

答案 1 :(得分:0)

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

  • 通过web3.eth请求 已确认 的交易编号。 getTransactionCount (ethAddress),递增,发送和等待之前的收据,然后再处理下一张。如果您需要具有高吞吐量,并且您依赖于特定节点可用并进行同步,则这非常慢。

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

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

为了更好地理解节点如何看待消息的现时。在这里检查答案:https://ethereum.stackexchange.com/questions/2808/what-happens-when-a-transaction-nonce-is-too-high/2809#2809

这也是:Send Raw Transaction Ethereum infura nodejs npm