What is nonce?
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 都執行完畢才會執行。