將區塊加入新的隨機數欄位, 可以達成去中心化運行
接下來,我們在區塊中新增一個隨機數欄位,稱為 Nonce。
Nonce 會與 Previous Block Hash 以及 Data 一同計算出 Block Hash。
一旦 Nonce 發生變化,則計算出的 Block Hash 也會隨之改變。
現在,我宣布一個挑戰條件: 當 Data 為 "This book is good", 且 Previous Block Hash 為 "0000000000000000000000000000000000000000000000000000000000000000",
請找出一個隨機數 Nonce,使得計算出的 Block Hash 開頭為 0。
你唯一能做的,就是不斷嘗試不同的 Nonce 值,直到找到符合條件的 Block Hash。
試試看在Nonce 欄位中輸入不同的數字吧! 我稍後會公布答案。
找到了嗎? 如果輸入 132, 計算出來的 Block Hash為 079355a8fc30bc29eb29afe0cf21a878fb423840871ab968f5c6f6f8880e62b1
這 Block Hash 符合以 0 開頭的規則
你很可能找到其它的 Nonce 值, 也能使 Block Hash 以 0 開頭
例如 53, 91563, 都可以找到符合條件的 Block Hash
沒錯, 合法的 Nonce 的值可以有很多種, 只要能夠讓 Block Hash 以 0 開頭即可
而找到合法的 Nonce 的過程, 需要不斷的嘗試各種隨機數
像是比特幣系統就規定 Hash 開頭必須要有多個0, 才算是有效區塊
這個規則稱為難度, 難度越高, 表示要嘗試更多不同的 Nonce 值
以下為模擬一個難度為需要前面有 3 個 0 才有效的區塊鍊
點擊Find按鈕,測試看看要找幾次才會找到正確的 Nonce 吧
讓每個區塊的生成都需要不斷嘗試隨機數,有什麼好處?
區塊的生成過程,需要不斷嘗試不同的隨機數(Nonce),直到找到一個能夠符合「前面有三個0」條件的區塊。
這樣的機制會使得區塊生成具有一定的難度,而這正是區塊鏈實現去中心化特性的關鍵。
試想一下,有三台不同的電腦同時在嘗試以隨機數 Nonce 來尋找符合「前面有三個0」條件的區塊。
誰也不知道哪一台電腦會最先幸運的找到新區塊 這意味著區塊的生成權力將分散到這三台電腦之間。
當其中一台電腦成功找到符合條件的區塊時,便會通知其他電腦,
接著,其它電腦會將新區塊內容進行Hash驗算, 確認是否有符合「前面有三個0」的條件, 一旦驗算通過,就是合法區塊。