我使用web3和提供商主网。我按合同做了2笔交易。首先是批准方法,另一笔交易是多次转帐。我将第二个签名存储在数据库中。如果第一笔交易成功,则发送第二笔交易。第二笔交易几乎总是错误随机数太低。我该如何解决这个问题
答案 0 :(得分:0)
据我了解,这里可能有两个问题(解决方案); 1)您可能需要手动增加随机数以进行多次传输操作的气体估算。 2)最近有些服务器运行缓慢,因此您可以在执行第二笔交易之前先获取第一笔交易的transactionReceipt(poll),以确保已被开采。这样,您很可能就拥有第二次交易的现时权利。但是,如果您懒于执行此操作,则两次事务之间的合理延迟是合理的。
答案 1 :(得分:0)
对于适当的随机数管理,您有2个选择:
通过web3.eth请求
您在数据库级别维护自己的本地计数器永久。使用数据库的访问权限锁来处理可能的并发请求,并每次都返回正确的值。您不要将此计数器保留在内存中,因为如果您的应用程序崩溃或重新启动,它们将丢失。这非常有效,因为您不需要节点,并且可以发送尽可能多的交易。如果出现问题...(现在过低),请重置为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