续上篇:一文讲清楚以太坊的gas,gasPrice,gasLimit

我们今天来讲讲以太坊的nonce。做过钱包开发的同学都应该知道,nonce是一个非常关键的参数。对于一般用户来说,各种钱包已经帮我们解决掉这个问题,所以不用怎么关注,但在一些特殊情况下,比如有一笔转账被pending住,但又着急转账,这个时候要是对nonce有足够的认识,就可以很轻松解决。所以,我们有必要专门讲一讲nonce。

nonce的意义

遵循上文讲gas的原则,我们追寻nonce的T-1层原理,并且追根溯源,先看看比特币中的nonce。

比特币中关于nonce的论述,在区块链领域必读书目《精通比特币》中第十章 挖矿和共识有非常详细的论述。简单来说,矿工在挖矿的过程中,为了算出符合要求的hash值(前面N个都是0, N取决于难度系数),不断地替换nonce,来做hash运算。所以,nonce主要用于挖矿。

以太坊的共识算法目前也采用POW,肯定有类似的机制。但在以太坊中,我们提及nonce,更多是说的交易的一个参数。我们看一个标准的以太坊交易参数:

nonce是一个可选参数。可以覆盖pending交易。但nonce在交易中存在意义是什么呢?一句话:防止双花,也就是防止同一地址的一笔钱被花两次。

这个结论会引出两个问题:

  1. nonce的机制如何能防止双花?
  2. 比特币交易中存在nonce吗?如何没有,它又是如何防止双花的?

nonce的机制如何能防止双花?

以太坊节点要求每笔交易必须有一个nonce数值。每一个账户从同一个节点发起交易时,这个nonce值从0开始计数,发送一笔nonce对应加1。当前面的nonce处理完成之后才会处理后面的nonce。注意这里的前提条件是相同的地址在相同的节点发送交易。

以下是nonce使用的几条规则:

● 当nonce太小(小于之前已经有交易使用的nonce值),交易会被直接拒绝。

● 当nonce太大,交易会一直处于队列之中,这也就是导致我们上面描述的问题的原因;

● 当发送一个比较大的nonce值,然后补齐开始nonce到那个值之间的nonce,那么交易依旧可以被执行。

所以,在以太坊的交易中,对于每一个地址的,是严格按照nonce往上递增的。nonce值不会重复,也不会跳跃。只有等上一笔交易成功之后,才开始下一笔,这样就能很好地防止双花问题。

比特币交易中存在nonce吗?如何没有,它又是如何防止双花的?

比特币的中不存在nonce。比特币的交易基于UTXO模型,以太坊基于Balance模型。以太坊中一个账户有多少钱,已经直接存储到世界状态肿。比特币的UTXO模型则不是这样。他是根据账本中未花费记录,一点点计算而来。具体论述可以参考《精通比特币》一书。二者不同的账户模型,决定了在处理双花的问题上,采取不同的模式。其背后的设计原理,不可不察。

利用nonce解决pending问题

我们明白nonce这基本原理之后,看到地址上有一笔交易因为某种原因被一直pending住,也就不会束手无策了。据我的经验,存在两种情况:

  1. 交易的gasPrice太低,遭到矿工的嫌弃,一直无法打包。
  2. 交易发起速度太快,余额依然不足,无法被打包。

解决办法很简单:把找到pending交易的nonce值,重新发起一笔交易,设定好同样的nonce就行。世面上支持这种操作的钱包不多,imToken都没有这种高级设置。幸好,我深知存在这种需求,在我亲自操刀的钱包中的高级转账设置中,可以让用户设置nonce,具体看下图:

一文讲清楚以太坊的nonce相关推荐

  1. 以太坊交易Nonce设置

    1 什么是nonce? 以太坊中的nonce有两个意义: 1.工作量证明:为了证明工作量的无意义的值,这是采矿的本质,这个值将决定采矿的难度, 2.账户的随机数:在一个账户中的防止多重交易的用途.例如 ...

  2. 以太坊2.0文档------以太坊2.0阶段(一)

    以太坊2.0阶段 由于以太坊2.0正在进行大量的研究和开发,这一页可能会自动过时.它是在尽力而为的基础上不断更新的.最近更新日期为2019年11月16日. 介绍 以太坊主网的升级,被称为Ethereu ...

  3. 一文讲明白以太坊上交易类型含义、作用、发展过程

    目录 以太坊链上上主要有3中交易类型 Txn Type: 0 (Legacy transactions, 遗留事务) EIP-2718议案 EIP-155复杂性看旧交易格式的现有问题 EIP-2718 ...

  4. 用户倒戈, 长篇推文开怼, “以太坊不值得”

    以太坊的走势如过山车,无论是跳票已久的「君士坦丁堡」升级,还是PoW像PoS的转变,都有意味着矿工的收益被不断挤压,最爆款的几款DApp日活也不足一千. 在这一背景下,著名科技网站Hackernews ...

  5. 以太坊钱包开发系列3 - 展示钱包信息及发起签名交易

    最新内容会更新在主站深入浅出区块链社区 原文链接:使用 ethers.js 开发以太坊 Web 钱包 3 - 展示钱包信息及发起签名交易) 以太坊去中心化网页钱包开发系列,将从零开始开发出一个可以实际 ...

  6. 作为程序员,错过这次和以太坊V神的面基,你可能会痛失1个亿!

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 参与文末以太坊大调查的核心开发者,有机会免费抽取5张价值599元的「2018以太坊技术及应用 ...

  7. 以太坊:过去、现在、未来

    一.以太坊的升级路线图 M2SVPS The Merge 在 The Merge 阶段,POW 共识机制将过度为 POS,信标链将合并在一起.为了便于理解,我们将以太坊结构简化为下图: 我们在这里先定 ...

  8. 以太坊合并升级全面解读:初级篇

    目录 完成以太坊升级要执行的步骤 重要事件节点 The Merge合并关键问题 ETH 2022上海 Proto-Danksharding 已完成的准备工作 合并(Merge)后带来的重大变化 1. ...

  9. 以太坊区块链长什么样?

    之前接触以太坊的时候,确实能搜到很多资料,还有一个看起来很丰富的 Homestead Documentation,但这些材料都太不接地气了,看完还是不知道以太坊区块链到底长什么样,因此整理了这篇说明, ...

最新文章

  1. java display html_css html布局之display属性_动力节点Java学院整理
  2. Android Studio查看代码行数和删除注释空行等
  3. Jenkins默认工作空间及更改默认工作空间
  4. 查看selenium python的api小记录
  5. gfi截图_GFI Backup Home Edition是Windows的免费数据备份实用程序
  6. R语言排序 -- sort() order() rank()
  7. xp正版验证补丁_实操web漏洞验证——IIS HTTP.sys 整数溢出漏洞
  8. Springboot2 Swagger3 集成
  9. 三维数组设置索引_python3三维数据结构 —— panel
  10. Sticky vs fixed
  11. Find Any File for Mac(本地文件搜索查找工具)
  12. VSS2005下载地址 VS6.0d下载地址(软件+我的教程)
  13. Badboy安装教程(含下载地址)
  14. SAS-配对设计资料秩和检验
  15. 芯片行业常用英文术语最详细总结(图文快速掌握)
  16. 账套恢复失败 文件服务器,用友T3恢复账套时提示:备份信息文件无效,恢复失败?...
  17. C++函数模板及隐式实例化、显式实例化、显式具体化、模板重载
  18. JDK的下载、安装、环境配置教程(2021年,win10、win11都可)
  19. 最新抖音X-Bogus、msToken、_signature、ttwid、webid分析(2023-04-12)
  20. 移动最小二乘实现点云插值(上采样 | 增采样)详细讲解❤️❤️❤️

热门文章

  1. 施密特正交化(Schmidt)
  2. 设计模式——代理模式(附代码示例)
  3. 【数值仿真】基于有限差分法的三维热传导matlab数值仿真(附代码)
  4. 百度对site语法的几种情况
  5. 基于Java实现的图片搜索系统
  6. 如何配置SQL AgentMail与SQL Mail收发邮件
  7. 【LINUX】libgd-GD库安装
  8. 学习笔记=《你不知道的JavaScript(上卷)第二部分》第一章:关于this
  9. 正交变换法中的A矩阵怎么求
  10. javascript 静态变量与实例变量