以太坊之nonce

1、nonce是什么
Number used once或Number once的缩写,在密码学中Nonce是一个只被使用一次的任意或非重复的随机数值,在加密技术中的初始向量和加密散列函数都发挥着重要作用,在各类验证协议的通信应用中确保验证信息不被重复使用以对抗重放攻击(Replay Attack)。在信息安全中,Nonce是一个在加密通信只能使用一次的数字。在认证协议中,它往往是一个随机或伪随机数,以避免重放攻击。Nonce也用于流密码以确保安全。如果需要使用相同的密钥加密一个以上的消息,就需要Nonce来确保不同的消息与该密钥加密的密钥流不同。

2、nonce有什么用
比特币的blockheader中的nonce用来进行工作量证明,通过nonce的递增来计算工作量进行挖矿
以太坊交易中nonce用来交易排序,交易校验,也是避免双花的一种手段。账号每次进行交易,nonce即加1,所以通过nonce即可获取某账号的总交易数。

3、在没有交易前,账号的初始nonce为0,那有交易后,节点启动后如何获取nonce?
txpool启动的时候,reset中设置pendingstate状态

4、发送交易后,什么时候增加了nonce?
发送交易时,交易校验通过后,promoteTx将pendingstate中的nonce加1
5、如果发送交易使用了过时的nonce,如何处理?
比较新老交易的gasprice,如果新交易的gasPrice比老交易的gasPrice大PriceBump倍(PriceBump可以配置),则添加新交易并删除老交易,否则报错。

6、如果发送交易使用了未来的nonce,如何处理?
如果新交易的nonce多大,则交易校验过后将交易放入queued队列,而不是pending队列。

7、哪些地方校验了nonce
交易在放到txpool之前校验交易的时候进行了nonce校验,nonce过小,根据新交易与老交易的gasPrice比较决定丢弃老交易还是新交易。nonce过大,将新交易放到queued队列,需要等到pendingnonce增长到交易nonce的时候,从queued中取出来放入pending中。
校验区块中的交易的时候,进行了nonce校验,nonce过大或者过小,当前块都入不了链,出现坏块。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章