作者overdoingism (做过头主义)
看板DigiCurrency
标题[Coin] 再请教ETH交易的nonce问题
时间Thu Jun 16 23:36:08 2022
根据这个网站说明:
https://gitchat.csdn.net/columnTopic/5b0e4011100ce52029ab6f40
以太坊中为了防止交易重播攻击,每笔 Transaction 都必须
有一个 Nonce 随机数。每个账户从同一个节点发起交易时的
Nonce 值都是从 0 开始,发送一笔 Transaction 後 Nonce
加 1,当 Nonce 为 0 的交易处理完之後,才会处理 Nonce
为 1 的交易,并以此类推。
以下是 Nonce 使用的规则:
当 Nonce 值小於之前 Transaction 的 Nonce 值时,
交易会被直接拒绝;
当 Nonce 值过大时,Transaction
会一直处於队列之中,等待执行;
假设账号 C 最後一笔 Transaction 的 Nonce 值为 10,此时
发送一笔 Nonce 值为 13 的 Transaction 至节点中。此笔
交易会一直处於队列中,不会立即打包上链。需要等待 Nonce
值为 11 和 12 的 Transaction 依次执行完後才会来处理这笔
Transaction。
=====
哇,我的老天,那这样不是代表一个帐户越使用,优先级别就越低了?
所以以太坊的用户交易次数多了,还要换钱包嘛?
这是不是我误会了什麽?
另外,这个 nonce 值正常人不可能去记他,
基本上要透过 Web3 API 去链上取得,
但在制作交易签名的时候这个值要预先填进去,
这是不是意味着 ETH 其实无法靠冷钱包做离线签名?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.169.11.110 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/DigiCurrency/M.1655393771.A.17F.html
1F:推 rand: nonce 是跟自己比 06/16 23:38
喔,这样就了解了
不过如果不取得nonce,没法离线签名了....
※ 编辑: overdoingism (118.169.11.110 台湾), 06/16/2022 23:41:24
2F:→ rand: nonce 本来就可以手动填 完全离线的状况就由自己去把 nonce 06/16 23:42
3F:→ rand: 填上去 06/16 23:42
4F:→ rand: 给太低的 nonce 会被拒绝 给太高要等前面的执行 06/16 23:43
5F:→ rand: 最常见的状况就是 fee 给太低了 06/16 23:51
6F:→ rand: 用另外一笔同 nonce 但 fee 比较高的交易把它取代掉 06/16 23:51
7F:→ DarkerDuck: 对啊,要取消交易就是填同一个nonce值的0值交易 06/17 00:09
8F:→ DarkerDuck: 你的离线签名是指sign message还是sign transaction? 06/17 00:10
9F:→ DarkerDuck: 假如是sign message用不到nonce值 06/17 00:13
10F:→ DarkerDuck: 假如真的要sign一个离线的transaction放很久的话 06/17 00:14
11F:→ DarkerDuck: 那就开一个account给它专用就不用管nonce值跳动 06/17 00:14
12F:→ overdoingism: sign transaction 06/17 00:17
13F:→ overdoingism: 了解 06/17 00:17
14F:推 MACD: 交易签名时不用填nonce,送出时会自动抓”确认”tx nonce 06/17 01:42
15F:→ MACD: 所以如果不是特殊操作重复送tx用比较大的gas price会盖过 06/17 01:42
16F:→ MACD: pending tx 06/17 01:42
17F:推 wlsh5701: 不用填nonce是因为在signTransaction的时候会自动抓吧? 06/17 02:05
18F:→ wlsh5701: 在对tx签名时里面没有nonce怪怪的 06/17 02:05
19F:嘘 JapaZPa4867: 答案文档和黄皮书里全都有 请认真阅读 06/17 05:12
20F:嘘 LinuxDapp: 请google 或是自己试 06/19 14:43