以太坊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 条评论
登录 后参与评论

相关文章

来自专栏CDA数据分析师

你的第一个智能合约「Hello World」,好像也不是很智能

在看过 我花了 99 个以太坊(Ethereum)来学智能合约开发(http://davidfnck.com/blockchain/ethereum-smart...

1232
来自专栏区块链大本营

10岁小表妹也能“吃透”Geth 客户端 !360秒,快速部署 ICO Token

接下来,你可以输入 geth –help 来检查 Geth 是否已安装成功。如果此时显示出一些帮助信息,你就可以进行下一步,创建一个新账户。

803
来自专栏丑胖侠

Drools决策表的使用

Drools 决策表的使用 决策表简介 引用官方的话 决策表是一个“精确而紧凑的”表示条件逻辑的方式,非常适合商业级别的规则。 目前决策表支持xls格...

31810
来自专栏专注于主流技术和业务

以太坊多节点私有链部署

https://g2ex.github.io/2017/09/12/ethereum-guidance/

1724
来自专栏汇智网教程

原 EOS智能合约开发入门

3926
来自专栏互联网大杂烩

Hyperledger Fabric交易流程

1.区块链数据,这是用文件系统存储在Committer节点上的。区块链中存储了Transaction的读写集。 2.为了检索区块链的方便,所以用LevelDB...

1273
来自专栏网站漏洞修补

网站漏洞修补针对区块链网站安全分析

目前移动互联网中,区块链的网站越来越多,在区块链安全上,很多都存在着网站漏洞,区块链的充值以及提现,会员账号的存储性XSS窃取漏洞,账号安全,等等关于这些区块链...

654
来自专栏区块链大本营

【手把手】如何在10分钟内搭建一个以太坊私有链?

4713
来自专栏深入浅出区块链技术

如何编写一个可升级的智能合约

区块链信任基础的数据不可修改的特性,让它传统应用程序有一个很大的不同的地方是一经发布于区块链上就无法修改(不能直接在原有的合约上直接修改再重新发布)。

1521
来自专栏极客编程

以太坊智能合约开发DApp应用示例

智能合约开发是以太坊的核心,学习过程主要是搭建以太坊开发环境和solidity语言的编程。本文不用任何以太坊Dapp框架,直接在ganache下开发智能合约。

1212

扫码关注云+社区