1. nonce 是什么?
A scalar value equal to the number of transactions sent from this address or, in the case of accounts with associated code, the number of contract-creations made by this account. – 以太坊黄皮书
以太坊所有的交易都是基于 account ,不同于基于 utxo 的比特币,因此需要对每次交易都按顺序记录,nonce值就是这个顺序,nonce 是交易原始地址的属性。它不存储在以太坊区块链上,而是通过计算从一个地址发送的交易数量来计。
nonce +1
每发起一笔交易,nonce就会加一。对于发起的解释:
- 1.外部账户(EOA)每发送一笔交易;
- 2.合约账户(Contract Wallet) 每创建一个合约
而转入交易、合约调用其他合约等属于内部调用,因此 nonce 值不变。
作用 1:交易顺序
假设您要发送两个值为 1 和 4 ETH 的交易,并希望它们被顺序打包。发送一笔交易后,你继续发送第二笔交易。
现在如果没有随机数,矿工将不可能知道您维护交易顺序的意图。
如果您的第一笔交易(1 ETH)的 nonce 为0(假设是新帐户),那么 4 ETH交易的 nonce 为 1。矿工即可按照 nonce 的顺序打包交易。
作用 2:防止重放攻击
假如转账时,没有 nonce,参数如下:
{
"gasPrice":"10000000000",
"to":"0xf4587a39edbb10b32952bcd656ba489f1a857450,
nonce详解:以太坊交易序列号与防重放攻击

本文详细解析了nonce在以太坊中的作用,包括交易顺序标识、防止重放攻击,以及如何使用nonce避免交易冲突和取消操作。学习如何正确处理nonce规则以提升交易效率和安全性。
最低0.47元/天 解锁文章
1420





