精通比特币 挖矿与共识 这篇文章清楚地解释了以太坊的nonce

入门知识 2周前 (09-14) 13次浏览 0个评论

接上一篇文章:一篇文章解释了以太坊的gas,

我们今天要讨论的是以太坊的 nonce。做过钱包开发的同学应该都知道nonce是一个非常关键的参数。对于普通用户来说,各种钱包已经为我们解决了这个问题,所以我们不需要太在意,但是在一些特殊情况下,比如有一笔转账,但是转账比较急,如果有足够的这个时候nonce知道了,就可以轻松解决了。所以,我们有必要专门讲一下nonce。

nonce的含义

按照上面提到的gas原理,我们追溯nonce的T-1层原理,追溯源头,先看比特币中的nonce。

关于比特币中nonce的讨论,在区块链领域必读书籍《精通比特币》的第十章挖矿与共识中进行了非常详细的讨论。简单来说,在挖矿过程中,为了计算出满足要求的hash值(前N个都是0,N取决于难度系数),矿工不断替换nonce做hash运算因此,nonce主要用于挖矿

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

nonce 是一个可选参数。待处理的事务可以被覆盖。但是nonce在交易中的意义是什么?一句话:防止双花,即防止同一地址的一笔钱被花两次。

这个结论提出了两个问题:

nonce 机制如何防止双花?比特币交易中有随机数吗?如何不,以及如何防止双重支出? nonce 机制如何防止双花?

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

以下是 nonce 使用的一些规则:

●当nonce太小(小于上一次交易使用的nonce值)时,直接拒绝交易。

●当nonce太大时,事务会一直在队列中,这就是我们上面描述的问题的原因;

● 当发送一个更大的nonce值,然后在起始nonce和那个值之间填充nonce时,交易仍然可以执行。

因此,在以太坊的交易中,对于每一个地址,都严格按照nonce递增。 nonce 值不重复也不跳跃。只等上一笔交易成功再开始下一笔交易,可以很好的防止双花问题。

比特币交易中是否存在随机数?如何不,以及如何防止双重支出?

比特币没有随机数。比特币交易基于 UTXO 模型,以太坊基于 Balance 模型。一个帐户在以太坊中有多少资金直接存储在世界状态中。比特币的 UTXO 模型并非如此。他根据账本中未使用的记录,一点一点地计算出来。详细讨论请参考《 Bitcoin》一书。两者不同的账户模式决定采用不同的模式来处理双花问题。其背后的设计原则不容忽视。

使用 nonce 解决待解决的问题

了解了nonce的基本原理后,当我们看到地址上有一笔交易由于某种原因一直处于pending状态时,我们就不会束手无策了。根据我的经验,有两种情况:

交易过低精通比特币 挖矿与共识,被矿工嫌弃,一直无法打包。交易发起太快,余额还不够打包。

解决方法很简单:找到待处理事务的nonce值,重新发起一个事务,设置相同的nonce。世界上支持这种操作的钱包不多,imToken 也没有这么高级的设置。幸运的是,我知道有这样的需要。在我个人做的钱包的高级转账设置中,用户可以设置nonce精通比特币 挖矿与共识,如下图:

挖矿网Ethos中文站简单易用的挖矿系统,为挖矿产业提供教程软件以及矿机测评交易信息等,挖矿网各种数字货币挖矿收益对比计算,挖矿网介绍挖矿的工具,以及矿场的最新消息等。http://www.ethospool.com/

喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址