以太坊nonce值问题分析

探讨区块链钱包开发中Nonce值管理难题,特别是在并发交易时的挑战。分析了直接使用eth_getTransactionCount接口及parity_nextNonce接口的局限性,讨论了分布式系统下Nonce值精确维护的复杂性。

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

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

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

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0xKent

有钱的捧个钱场,没钱的捧个人场

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值