以太坊交易中的nonce和confirmation

Posted mutourend

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以太坊交易中的nonce和confirmation相关的知识,希望对你有一定的参考价值。

1. 以太坊交易中的nonce及其价值

1.1 以太坊交易中的nonce值

在以太坊中,每笔交易都有一个nonce值,该nonce值代表的是从该交易发起地址发出的交易数。(当存在使用同一地址从多个客户端发起交易时,客户端需从链上同步nonce值。具体也可参见chainlink中的同步机制。)
在英文中,nonce表示的仅可使用一次的数字。
在密码学中,nonce为以随机或伪随机方式产生的一次性使用的数字,用于保护主密码传输安全,防止重放攻击。

当你发送交易时,需对该nonce值增加1。
符合以下规则的交易可认为是有效交易:

  • 交易必须是有序的。不可能 具有nonce 1的交易 在 具有nonce 0的交易 之前被挖出。
  • nonce值是连续的,不存在跳跃的情况。若不存在具有nonce 0和nonce 1的交易,则不可能挖出具有nonce 2的交易。

1.2 以太坊交易中nonce值的价值

由于以太坊交易中nonce值代表了交易的顺序,因此可防止双花。
当双花交易确实发生时,则通常需遵循以下流程:

  • 交易由某一方发起;
  • 等待交易注册;
  • 需从该笔交易中收集某些信息;
  • 此时有另一笔交易以更高的gas费快速发起;
  • 第二笔交易被优先挖出,从而使第一笔交易失效。

这也是为何交易所要等待一定数量的confirmation之后才允许你对新存入的资金进行交易。
而对于以太坊来说,以上流程不可能成立。因为在以太坊中,第二笔交易(如具有nonce 3)不可能在第一笔交易(比如具有nonce 2)之前被挖出。

2. 区块链中交易的confirmation

区块链中一笔交易的confirmation,意味着该笔交易已验证且已通过挖矿等方式添加到了区块链中。
当一笔交易被挖出,其即被包含在区块链中了,其得到了1个confirmation。

不同的区块链平台其挖出区块的时间各不相同,该时间称为blocktime。
在Bitcoin中,平均每10分钟挖出一个新的区块。当有一个新的区块之后,现有区块链中的每笔交易都额外增加了一个confirmation。当交易被reverse或双花时,confirmation数量会减少。

对于incoming交易,通常需要一定数量的confirmation。当某笔交易的confirmation数量达到一定值之后,可认为该笔交易已接收。

不同平台所需的confirmation和相应的预估时间如下:
在这里插入图片描述

参考资料

[1] What Are Blockchain Confirmations and Why Do They Matter?
[2] Why is my transaction “pending”?
[3] Block time and confirmation time
[4] How many confirms is considered ‘safe’ in Ethereum?
[5] What are the differences (and relationship) between the steps used to (1) validate a transaction and (2) confirm a block?
[6] What number of confirmations is considered secure in Ethereum?
[7] What is a Block Confirmation on Ethereum?
[8] What is the required number of confirmations?
[9] What is a Nonce?

以上是关于以太坊交易中的nonce和confirmation的主要内容,如果未能解决你的问题,请参考以下文章

以太坊nonce详解

怎样批量发送以太坊ETH?

以太坊开发如何开发一个编译以太坊智能合约并且发布的平台

以太坊上交易异常Pending的处理方法

区块链 以太坊 交易中 r,s,v 是什么 作用

以太坊中的账户交易Gas和区块Gas Limit等概念