為了增加觸及:大家在下方留言你的 Polygon 地址,前 5 位可以免費獲得最近我同學做的 NFT 空投(Bakajohn)!
Proof Of Work 是一種區塊鏈結點們取得共識的過程,在一筆交易於鏈上發起時並不會馬上完成,而是會進入一種未完成的 Pending 狀態,這時候交易會被存在 MemPool 中等待礦工的打包與驗證。打包交易時礦工會挑出手續費最優渥的交易,確認其簽名正確和合法,最後才開始解 POW(隨意猜想 Nonce 然後計算 Hash(pre-block-hash | Tx | nonce)
,當 Hash 結果小於 targetNum 時代表挖礦成功),過程之中系統可以藉由調整 Hash Function 來調整挖礦難度。
雖然 PoW 即將從以太坊上消失,但我覺得這仍然是一個了解區塊鏈原理和 Nonce 的好機會,所以仍選擇在 2.0 上線之際介紹 PoW!
除了 PoW 還有大家知道以太坊即將進入的 PoS 和其他共識機制,以及礦工除了從 PoW 中獲利之外,其實還可以從 MEV 部分探討礦工獲利!但關於 ETH2.0 的 PoS、其他共識機制、MEV 等主題可能都會讓這次系列文篇幅變得過大,希望大家可以關注我的 Medium,未來可能也會提到相關的內容!
Proof-Of-Work 中的 Nonce 即為在每個 block 中的隨機數,長度為 32-bit (4-byte),被用來證明 "Proof of Work" 已經被滿足了。他可以是一個數學題目的結果,但理論上需要跟運算技巧無關而是一個必須重複嘗試(窮舉)的值。
我們可以先來看看 Bitcoin 之中的 PoW 是如何運作的,待會再來比較跟 Ethereum 的差別。
當然這邊的難度不代表我們可以精準判斷一個礦工算了這個 hash 幾次,只能判斷「機率」為多少
在比特幣系統裡面有一些規則來維持系統穩定及安全,例如:最長鏈原則、10 min 內只能有一個礦工打包成功、所有節點會接收成功區塊的廣播並自行驗證一次等。此外打包成功的獎勵每產出 21 萬個區塊(每四年)減半一次,最原始是 50 顆比特幣作為獎勵,2021 年以後獎勵為 6.25 顆。
已知一個區塊構造中有一個 Block Header,他儲存了 Version + Previous Block Hash + Merkle Root + Timestamp + Difficulty Bits + Nonce 等元素。其中 Merkle Root 是我們沒有解釋過的,他其實就是將所有的交易當作 Merkle Tree 的葉子,將成一棵 Merkle Tree 之後把 Merkle Root 存到這,基本上就是一個元素子集合的哈希最終值。Merkle Tree 對有 CS 背景的朋友們應該非常熟悉,這邊就不介紹這個資料結構了。
Merkle Root 可以做為 Merkle Proof 被提交之後的 Verify 值,也就是當你想要證明一個交易在這個區塊中,你只需要把這筆交易的資訊 + 他的 Merkle Proof 丟進 Verify()
,看結果是否與 Merkle Root 相同即可。
區塊難度是在每一個節點中獨立發生的,為了要讓新區塊的產生速度都維持在每十分鐘一塊每 2016 個區塊區塊難度會自動調整一次,NewDifficulty = OldDifficulty * ( Past2016TotalConsumeTime / 2016)
。
而目標值的計算則為:Target = 0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF / NowDifficulty
基本上以太坊之中的 PoW 和 Bitcoin 相差無幾,需要注意的是 nonce 這個詞在 account 和 contract 都有,我們之前也有提過了。
最後歡迎大家拍打餵食大學生
0x2b83c71A59b926137D3E1f37EF20394d0495d72d