以太坊rpc接口调用之nonce

背景

我们在使用以太坊相关的json-rpc借口发送交易时,往往会出现这种现象:交易已经发送出去,也获得了交易的hash值。dev模式的geth也在正常挖矿,可是问题是交易却迟迟未被确认。会发生此种类型的接口如:

eth_sendTransaction
eth_sendRawTransaction

那么是什么原因导致此问题呢?今天就带大家了解一些导致此问题的原因。

问题追踪

除了上面的表象问题,我们还可以进步查询相应的问题信息。 (1)发生上面问题的情况往往是通过json api调用或其他通过rpc调用的方式,如果直接使用控制台(console)的命令来执行,是会被很快确认的。 (2)通过eth_getTransaction,命令我们会查询到上面的交易,但是交易的blocknumber使用为null; (3)通过txpool.content命名,我们会看到上面的交易处于queued队列中,却迟迟不会被处理。

导致以上现象的最终原因就是在发送交易时传递的nonce值不对。

nonce使用说明

为了防止交易的重播攻击,每笔交易必须有一个nonce随机数,针对每一个账户nonce都是从0开始,当nonce为0的交易处理完之后,才会处理nonce为1的交易,并依次加1的交易才会被处理。以下是nonce使用的几条规则:

  • 当nonce太小,交易会被直接拒绝。
  • 当nonce太大,交易会一直处于队列之中,这也就是导致我们上面描述的问题的原因;
  • 当发送一个比较大的nonce值,然后补齐开始nonce到那个值之间的nonce,那么交易依旧可以被执行。
  • 当交易处于queue中时停止geth客户端,那么交易queue中的交易会被清除掉。

了解了上面的内容,大家就可以去排查自己的交易是否是因为此原因导致未成功发送了。

后语

如有问题可以留言或私下联系。QQ技术交流群:659809063。Geth客户端API接口封装和智能合约调用的JAVA版本正在编写完善,有需要的朋友也可以联系。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏域名资讯

老域名新用的优缺点分析

其实大多数购买老域名来做新站的时候,大多数都是灰色项目,但也有不少的正规站点在利用老域名操作,但是如何说完全没有把控好老域名来做新站,那可能会有...

1745
来自专栏嵌入式程序猿

两年前就告诉过你CAN FD,你还记得吗?

一起来学习CAN FD(CAN with Flexible Data-Rate)

882
来自专栏VRPinea

AMD推出多款硬件与软件更新,为VR带来部分支持

近期AMD消息频出,让人眼花缭乱,光光在台北国际电脑展上,其就展示出了不少新品,如:Threadripper代32核、面向消费级显卡市场的RX Vega 56 ...

860
来自专栏Fred Liang

想法阶段

1072
来自专栏web开发

Node.js包管理器Yarn的入门介绍与安装

FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT. 就在前不久, Facebook 发布了新的 node.js ...

1776
来自专栏SEO

「知识」从另一个角度看待锚文本

2739
来自专栏知晓程序

生活中总是丢三落四?那你一定需要这个小程序

以前丢了东西,也不知道去哪里发布信息。要么挨家挨户去的问,要么去电线杠上贴寻找物品的信息,但是能找到的失物的机率渺茫。

963
来自专栏玉树芝兰

如何高效入门Github?

如今的编程,早已不是单打独斗的模式了。优秀的编程人员,甚至是初学者,都必须学会如何与他人高效协作。Github是编程协作中须要掌握的基础知识。如何尽快入门,少走...

632
来自专栏HTML5学堂

从“一滴水”映射整个“搜索引擎机制”

今天我们主要借这个机会说说搜索引擎的工作原理~ 小编2014年年底的时候,去三亚旅游,当时有一天,中午打算在住的旅店吃饭,于是打算叫KFC来吃。 打开百度,搜...

3347
来自专栏程序员互动联盟

【答疑解惑第二十讲】学习安卓可以从事哪些开发工作?

疑惑一 学习安卓可以从事哪些开发工作? 随着移动互联网的发展,越来越多的人加入到这个队伍中。安卓作为目前使用的最多的手机操作系统吸引着越来越多的人投入到安卓的...

3305

扫码关注云+社区