What is nonce?

Yan Ru Su

BTC Nonce

用於 PoW 驗證,礦工需要找到ㄧ Nonce 值使得區塊經過 Hash 之後的值小於目前目標值。目標值由難度決定,簡單的理解為,區塊經過 Hash 後會得到 0x00f…,而礦工需要找到 Nonce 值讓前面的0的位數等於目前的難度。例如目前難度為2,礦工需要找到ㄧ Nonce 值使得區塊經過 Hash 之後得到00x43a…。然而「0的位數等於目前的難度」的範例僅適用於難度較低的時期。實際上是 Hash 的值小於目標值(target),該值會由目前難度決定。

ETH Nonce

用於交易計數器,確保交易不會重複發送以及確定交易順序,例如今天有10個 ETH ,你發送了6個 ETH 給地址A,接著又發送了 6 個 ETH 給地址 B,究竟哪個會被執行?

這個問題取決於你的交易順序,在發送交易時會有一個 Nonce 值用於宣告目前為第幾筆交易,以上面的例子為例,你先發送了 6 個 ETH 給地址A,這時 Nonce 為 1,接著又發送了6個 ETH 給地址B,Nonce 值為 2,節點會先執行 1,接著才執行 2。另外節點要確定收到目前 Nonce 值前面的所有交易才會執行該筆 Nonce 交易,例如,你想發送5筆交易,節點收到了 Nonce 值 1、2 以及 5 的交易,節點會依序執行 Nonce 值為1以及2的交易,而 Nonce 值為 5 的交易會直到 3 與 4 都執行完畢才會執行。

On this page
What is nonce?