Skip to content

將區塊加入新的隨機數欄位, 可以達成去中心化運行

接下來,我們在區塊中新增一個隨機數欄位,稱為 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 欄位中輸入不同的數字吧! 我稍後會公布答案。

606a7d8f59c0652729f5c51394fc2c103f592a11ec24977911b2a59a115090a8

0000000000000000000000000000000000000000000000000000000000000000

找到了嗎? 如果輸入 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 吧

e531ef0f962409170917abf9de3287afec23dd1c42c9e1fea66c5feab99e8f7c

0000000000000000000000000000000000000000000000000000000000000000

讓每個區塊的生成都需要不斷嘗試隨機數,有什麼好處?

區塊的生成過程,需要不斷嘗試不同的隨機數(Nonce),直到找到一個能夠符合「前面有三個0」條件的區塊。

這樣的機制會使得區塊生成具有一定的難度,而這正是區塊鏈實現去中心化特性的關鍵。

試想一下,有三台不同的電腦同時在嘗試以隨機數 Nonce 來尋找符合「前面有三個0」條件的區塊。

誰也不知道哪一台電腦會最先幸運的找到新區塊 這意味著區塊的生成權力將分散到這三台電腦之間。

當其中一台電腦成功找到符合條件的區塊時,便會通知其他電腦,

接著,其它電腦會將新區塊內容進行Hash驗算, 確認是否有符合「前面有三個0」的條件, 一旦驗算通過,就是合法區塊。