最近我的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。
今天的文章关于ETH的NONCE分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/25304.html