关于ETH的NONCE

最近我的ETH交易里面出现了一种情况,交易虽然返回了hash,但是却迟迟未被确认,连在区块浏览器上也找不到对应的pending交易, 但是通过节点api调用hash获取记忆记录却有数据返回。这种情况问了人也查了资料,最后得出的结果是,交易可能在矿池,但是却没有被矿工打包。

于是想到了imtoken钱包的加速交易内容。

说到加速交易,不得不说的就是ETH交易内重要的一个内容, nonce
nonce是你这个地址里面产生的发起交易所携带的,目的是ETH防止双花, 如果你当前链上交易确认nocne为(例如)9,那么下一笔交易的nonce必须为10, 如果你大于10 发起了一笔11的交易,那么这笔交易是无法被完成的,除非你补全了中间的nonce为10的交易。

每一笔发起的交易都对应一个nonce。如果你的交易未被确认,或者说仍在矿池, 你可以通过指定nonce,修改GasPrice(加大),去发起一笔新的交易, 矿工会根据你的GasPrice哪个交易里的比较大,而去进行打包,如果说你第二次发起的GasPrice小于你第一笔的GasPrice,那么会报一个错误:
Unreplace xxxx(忘记了)——意思无法替代,因为GasPrice小于第一笔。

关于Nonce的保管:
可以调用节点的api:获取当前地址发起交易的nonce–eth_getTransactionCount 参数为地址,以及Pending或者lastest,选用pending就行, 就可以获取你当前地址的最大nonce数。 但是这种情况需要确保你中间的nonce没有中断过。

也可以自己保管nonce, 通过数据库之类的。—笔者就是通过数据库去保管自己主地址的nonce,在每一次发布成功的交易都做一次++操作,并且在数据库保存对当前这笔交易的nonce保管,以方便自己追踪当前交易的nonce。

原创文章 25 获赞 10 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42195162/article/details/105786548
ETH
今日推荐