以太坊nonce值问题分析

    钱包开发过程中遇到nonce值的问题,目前钱包交易只支持一笔交易确认之后,才会发送第二笔交易,否则发送的时候会提示nonce值太低了。

    造成这种现象的原因很简单,直接使用了eth_getTransactionCount接口,对于txpool的处理也不是很完美,几乎就是忽略了,所以发送第二笔交易的时候,导致nonce值和第一笔相同,提示了nonce值太低了。

     这里多说一下,parity节点,提供了一个parity_nextNonce接口,可以同时返回已经确认和pending交易的nonce值,相比上一个接口好一些,其实一个样,为什么这么说呢?咱们接着分析。

     像区块链这种分布式系统,要做到nonce值精确维护几乎是不可能的,最主要的一个原因就是——分布式。你可以想象一下,如果某个用户,他把自己的以太坊地址倒入了多个钱包,然后在多个钱包里同时发送交易,怎么办?首先这几笔交易肯定nonce有相同的,相同的nonce就只有一笔交易会成功;这个时候,如果你使用的接口是直接从链上获取的还好,(但是这由决定了你发送交易只能等上一笔交易确定之后,才发送第二笔)。如果你是自己维护的,估计问题可能就会严重很多,好一点的情况nonce太低,交易发送失败,更甚之,nonce值太高,让用户发再发送一笔交易填充遗漏的nonce吗?

     说实话虽然对目前的设计感觉不太满意,但是也没有找到更好的办法去解决;如果你有好的方法可以和我说一下,谢谢啦,欢迎讨论

猜你喜欢

转载自blog.csdn.net/xq723310/article/details/81505161
今日推荐