以太坊之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過大或者過小,當前塊都入不了鏈,出現壞塊。

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