區塊鏈聽起來玄之又玄,但其原理其實並不難懂(難的地方在執行細節和各種算法),作為非業內人士,如果被各種術語弄得頭昏腦脹而不去理解什麼是區塊鏈的話,你就要吃大虧了。讓一連四集的區塊鏈奇談為你撥開雲霧見青天。
上回提到,為了鼓勵大家幫忙確認交易,所有幫忙確認的電腦都會得到手續費和額外獎金作為報酬,手續費由想要記新帳的電腦支付,而額外獎金則由系統支付。額外獎金是得到大家同意由系統創造出來的錢,而為了防止購買力下降(錢愈來愈多),所以這 100 台電腦一早達成了共識,額外獎金會愈來愈少,到最後會變成 0 。系統𥚃面所有的錢永遠不會超過 2100 萬元。
所謂有錢使得鬼推磨,自從有手續費和額外獎金後,大家變得非常踴躍,交易亦愈來愈多。慢慢地又出問題了,隨著帳簿愈來愈長,檢查帳簿變得愈來愈難了,試想想,如果 100 台電腦都各自驗證交易的真確性並更新自己的帳簿,萬一中間不小心寫錯了而又沒有即時被發現,久而久之錯誤便會漸漸累積,到最後各自的帳簿都不一樣!
這時,電腦們意識到問題的嚴重性,它們馬上開會討論對策。
終於,它們想到了一個解決方案,把交易紀錄變成一條相連的鏈,每一則交易都需要記下上一則紀錄的鎖鑰,交易紀錄都長成這樣子:
第一則交易
- 0 <- 上一則紀錄的鎖鑰,由於這是第一則紀錄,所以沒有鎖鑰
- 1 號電腦向 2 號電腦支付了 100 元
- 2017-04-01 17:24:07
- 5 號電腦確認
第二則交易
- 2178 <- 上一則紀錄的鎖鑰,按上一則紀錄的內容計算
- 14 號電腦向 7 號電腦支付了 75 元
- 2017-04-01 17:35:12
- 61 號電腦確認
第三則交易
- 4421
- 1 號電腦向 2 號電腦支付了 100 元
- 2017-04-01 17:24:07
- 6 號電腦確認
看懂了鎖鑰是怎樣來的嗎?電腦們設計了一條算式,只要把上一則交易紀錄的所有數字加起來就是鎖鑰,以第二則交易為例,對應上一則紀錄的鎖鑰為 2178 (0+1+2+100+2017+4+1+17+24+7+5) 。假若 8 號電腦在紀錄第二則交易時出錯了,把支付的金額由 75 元記錄為 57 元,當需要記錄第三則交易時,它便會發現自己計算的鎖鑰和大家的都不一樣,這時 8 號電腦就可以馬上發現錯誤了。
上面的加法算式是為了方便大家理解,電腦們用的是複雜很多的算式,算式的設計確保了每一則紀錄都有一條對應的鎖鑰,不論是內容上的改動,還是次序上的更變都會產生一條完全不同的鎖鑰。這條鎖鑰很難計算,亦很花時間,但卻很容易驗算。詳情可以查看(雜湊演算法/哈希函數 hash function)
用鎖鑰串連起來的鏈狀結構有幾個好處,首先是防止出錯,因為鎖鑰是獨一無二並按上一則紀錄來計算的,所以只要發現鎖鑰不一樣就能知道之前有紀錄出錯了,而不需要逐一核對。
更重要的是防止有人修改之前的紀錄,因為當有二個版本不一樣的帳簿時,所有電腦都會默認最長的帳簿為正確的帳簿(因為紀錄最完整)。乍聽之下,這條規則很奇怪,因為要偽造一本最長的帳簿好像也沒有多難,事實是:
非常難!
帳簿的交易紀錄由鎖鑰串連,鎖鑰很難計算,亦很花時間,假設要 10 分鐘才能找出鎖鑰。
再以上面的交易紀錄為例,現在 33 號電腦使壞心眼,想要把「1 號電腦向 2 號電腦支付了 100 元」改為「1 號電腦向 33 號電腦支付了 100 元」,這時,33 號電腦必須從新計算第二則交易紀錄的鎖鑰,由於第二則交易紀錄的鎖鑰又會影響第三則交易紀錄的鎖鑰,33 號電腦又須從新計算,這過程一共花了 20 分鐘。問題是正常的交易還在進行,20 分鐘後正確的帳簿都已經有五則交易紀錄了,33 號電腦的帳簿不可能成為最長的帳簿。
有讀者可能會問,是否真的有很難計算但卻很容易驗算的鎖鑰?當然有,請看看這一條 (2178 X A + (1 + 2 + 2017) X B ) / (16871 X C ) = 0.5 而鎖鑰就是 ABC 的解,請不要嘗試算出答案,答案 A = 9, B = 7, C = 4
而這一本用鎖鑰串連起來的帳簿,就是所謂的區塊鏈!
從此,這 100 台電腦便開始過著幸福快樂的日子!我知道讀者們還有一些疑問,下一篇的區塊鏈奇談將會一次過為大家掃除迷霧。