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

相关文章

来自专栏区块链入门

第二课 如何实现以太坊最简智能合约“Hello World”的运行

如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇。 就先学习任何编程语言一样,入门的第一个程序都是Hello World...

1024
来自专栏区块链入门

【财务安全】如何使用imToken钱包进行离线签名

注: 使用你的联网手机是热钱包, 用来观察钱包, 未联网手机作为冷钱包用作离线签名授权

932
来自专栏极客编程

使用truffle部署以太坊智能合约到区块链

truffle是以太坊(ethereum)开发智能合约(smart contract)过程中最受欢迎的框架,本教程来安装构建一个基本的Truffle项目并部署一...

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

以太坊多节点私有链部署

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

3694
来自专栏极客编程

如何用Python和Flask框架开发以太坊智能合约

将数据存储在数据库中是任何软件应用程序不可或缺的一部分。无论如何控制该数据库都有一个该数据的主控。区块链技术将数据存储到区块链网络内的区块中。因此,只要某个节点...

1633
来自专栏jouypub

通过web3.js与以太坊智能合约交互

  web3.js是以太坊提供的一个NodeJs库,封装了一些和以太坊交互的常用对象、函数。主要包括版本、账号、交易、合约等信息的获取和调用。本文主要介绍通过w...

2966
来自专栏祥云无界

imtoken钱包的使用教程

为了方便大家使用imtoken钱包,在这里将imtoken钱包使用教程详细的给大家展示出来。钱包使用很简单,但是需要大家多熟悉。还有文章中有红色字体提示的内容为...

3.1K31
来自专栏互联网大杂烩

Hyperledger Fabric交易流程

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

1573
来自专栏CDA数据分析师

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

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

1482
来自专栏区块链源码分析

比特币源码分析之一:总览

本文主要讲解比特币源码,下一篇文章会介绍比特币交易是如何通过非对称加密机制来完成安全交易的,欢迎大家互动留下问题和希望讲解的题目。

91817

扫码关注云+社区

领取腾讯云代金券