简介
nonce值的存在主要是因为它是基于account的,不同于基于utxo的比特币。nonce值主要用来防止重放攻击。
- 外部账户每发送一笔交易nonce加一。
- 合约账户每创建一个合约nonce加一。而合约调用其他合约属于内部调用,因此nonce值不变。
nonce使用的几条规则
- 当nonce太小(小于之前已经有交易使用的nonce值),交易会被直接拒绝。
- 当nonce太大,交易会一直处于队列之中,这也就是导致我们上面描述的问题的原因;
- 当发送一个比较大的nonce值,然后补齐开始nonce到那个值之间的nonce,那么交易依旧可以被执行。
- 当交易处于queue中时停止geth客户端,那么交易queue中的交易会被清除掉。