何謂區塊鏈 BlockChain?

循例要先抛一下沒人看得懂的書包: 區塊鏈是一個去中心化的分散式數據庫

留意,是數據庫,不是帳本. 在比特幣的世界裏區塊鏈的確是帳本,但區塊鏈的應用面遠遠不止於比特幣。

沒有技術背境的人看不懂上面這句話很正常,就算有技術背境也不能夠一看就懂
下面會盡量避免使用術語來解釋區塊鏈。

要明白何謂去中心化,先要明白何謂中心化

現代的銀行體制就是中心化的結構最佳例子。
例如你跟朋友吃完飯,你先付款,然後朋友再付款給你。
隨非朋友付現金,否則朋友必須透過第三方才能付款給你. 第三方通常是銀行,或者各種P2P付款系統(e.g. PayMe,O!ePay)

銀行/PayMe/O!ePay就是中心,一旦這個中心壞掉,沒有人能透過這個中心付款給任何人,i.e. Single point of failure

再推一步,如果中心點受到惡意攻擊,例如黑客入侵匯豐的數據庫並刪除所有數據
還在還樓貸的人會很高興,因為匯豐連你欠多少錢都不知道了~
但在匯豐存有幾千萬的富豪就....
(在美國很火的電視劇Mr. Robot就是以此為背景: 如果全國最大的銀行數據庫被黑了,社會會變成怎樣?)

那麼比特幣的區塊鏈是如何做到去中心化呢?

答案: 人人手上都有一本帳簿

當我要轉帳100元到小明的帳戶,我會跟世界上每一個人說: 我現在要轉帳100元給小明啦,請你在你的帳本上寫下。

實際操作上我只是在網絡上廣播這個訊息,而且其他人收到這個訊息也會幫忙廣播這個訊息。
每一個人收到這個訊息後,都會將訊息寫到區塊上。
一個區塊最多能保存約1000條交易,如果保存太多交易的話,區塊會變得太大而增加傳輸區塊的時間。

很簡單吧!

聰明的讀者可能已經想到很多問題:
如果我戶口根本沒有100元?

為了讓所有人都可以很快的檢查一條交易是否有效,所有交易都必須表明,這次交易的input是源於哪一次交易的output
比如在下圖, ID-2000標明了資金來源是1000號的交易,在1000號交易中B從A手上得到$10
bitcoin block
所以在2000號交易中,B的確有$10可以轉帳給D

但是問題又來了,那麼1000號交易的資金來源是甚麼? 是780號啊...780號的來源是甚麼? 是130號啊....130號的來源是甚麼? 是1號啊...
1號來源是?
按照這種交易記錄方式,第1號交易的資金來源是甚麼? 無中生有啊?

對啊,就是無中生有。

什麼是比特幣礦工?

你願意跟世界上的每一個人說你轉帳給誰,不等於世界上每一個人都願意幫你寫下這條記錄。
你要別人幫你做事情,就必須要給人家一點獎勵!
在比特幣的世界裏,最快寫滿一個區塊(~1000交易)的人可以獲得一定數量的比特幣
這個人,又稱為礦工。 沒有人給他比特幣,只是因為他寫下了1000條交易,他就憑空生成了一堆比特幣給自己。
所以區塊裏記錄的,其實是1000條交易,加上一堆憑空生成的比特幣。

憑空生成比特幣的交易又稱為coinbase交易。

這種做法又帶起很多其他的問題...
寫交易誰不會? 全世界幾千萬人一齊寫,幾千萬人一齊說他寫好了,誰才是最快?
所以寫的同時要解一條算術題,而且算術題的內容是根據那個區塊內的1000條交易而定。
這條算術題特別之處在於,很難很難算得出答案,但是一但你找到答案,檢查答案非常容易。

給一個小學生都懂的例子
找出所有91的其中兩個因數(不包括1和91自己)...答案是7和13
要你自己想的話應該要想一會吧? 但只要我告訴你答案,你用計算機一算,馬上就知道我是正確的。
再給一個例子:
找出所有99999989237606677的其中兩個因數(不包括1和99999989237606677自己)
答案是16227731,316227767
明白了吧? 用人腦去算的話,算幾天幾夜也算不出來。 我給了答案你之後,就算沒有計算機,10分鐘左右你也能驗証答案。

在比特幣的世界裏,要算的那道題比上面既整數分解還要複雜很多倍!
就算用電腦去算也要算上幾天幾夜,所以才能分得出高下。
有興趣了解礦工在解的數學題是甚麼,小編將會在下篇文章講解。

又有一個問題: 如果礦工惡意寫下一條錯誤交易,例如沒有寫上資金來源的交易,又湊巧讓礦工找到答案,怎麼辦?
因為礦工找到答案後,會把1000條交易,coinbase交易連同答案發佈出去。
其他礦工會驗証這個區塊是否正確,如果不正確的話,其他礦工就會丟棄這個區塊,好像這個區塊從來沒出現過。

那麼原本的礦工就會失去從coinbase交易賺到的錢。
為了讓其他礦工接受區塊,為了讓其他礦工承認從coinbase交易賺到的錢,所有人都只好乖乖的守規舉,只發佈正確的區塊啦!

什麼是分叉(fork)?

雖然很難找出答案,兩個礦工同時找到答案的機會仍然存在,這時候就出現"分叉"(fork)的情況啦!
其實分叉也不是很特殊,幾乎每天都有分叉發生:

blockchian 原理

身在韓國的礦工A和身在加拿大礦工B同時向全世界宣佈他們找到的區塊和答案

區塊鏈

但網絡傳送訊息是有時延的,礦工A這一秒宣佈的事,遠在美國的其他礦工可能要等五六秒才收到
而身在日本的礦工可能等一秒已經收到。
礦工B側相反,其他美國礦工等一秒已經收到礦工B的消息,但是日本礦工可能要多等幾秒才知道。
於是美國礦工會基於礦工B的結果繼續挖礦,而日本礦工會基於礦工A的結果繼續挖礦!

區塊鏈挖礦

但世事不會這麼巧合,日本礦工找到下一個區塊C(基於區塊A)的同時,美國礦工應該不會又同時找到基於區塊B的下一個區塊吧!

日本礦工發佈他們的區塊的時候,美國礦工就會放棄他們原本基於區塊B的工作,甚至把區塊B都丟掉,轉為挖掘基於區塊A和C的下一個區塊!

blockchain 礦工

等等!
我還是有問題!
如果世界有太多的壞礦工? 怎辦?
不是說比特幣有限量的嗎? 為甚麼所有礦工都可以憑空生成比特幣?

慢慢來啊...博大精深的區塊鏈不是一兩千字就可以解釋完的...
這篇只是最初步的介紹,想了解多一點的話就要繼續閱讀本站的其他文章啊!


延伸閱讀