區塊鏈技術概觀(一):讓我們從歷史文本說起

作者 | 發布日期 2017 年 08 月 01 日 9:00 | 分類 Fintech , 數位貨幣 , 科技教育 follow us in feedly

近 5 年來,水電工協會大概在幾個不同場合被要求講講區塊鏈,大都是因為比特幣的興起以及對特殊的生態系統行為感到好奇。就筆者的經驗而言,比特幣同時涉及貨幣及密碼學兩個很硬的學問,因此就算台下大都是醫生教授的場合,講得不夠好的話還是有多數聽眾無法理解。因此,當編輯部與筆者談時,筆者只能說貴刊運氣太好了,我們不榮譽會長綜合了很多失敗的經驗,一定可以讓讀者在這次產生:我終於成為區塊鏈專家的幻覺……呃,是快感才對。



數位貨幣的概念──以 Bitcoin 為例

在談起先進區塊鏈的始作俑者比特幣之前,我們先來談談數位貨幣的概念。我們平日使用的貨幣,都是由國家級造幣廠製作,有很好的防偽功能,同時也有軍警系統防止盜取、假鈔等問題,簡而言之,在傳統貨幣的角度看來,有國家的力量保證貨幣的信用力。當然也有失靈的時候,好比中央銀行做太爛導致失控通膨,或景氣快速反轉產生的通縮等系統性風險。撇開這些不談,傳統貨幣目前的安全性真的很高嗎?

思考一下我們現今的商業行為是否仍停留然在實體貨幣交換?恐怕大多數時候不是,而是在數位層面交換的!好比您把錢存進銀行,鈔票上又沒寫您的大名,銀行是如何管理的?當然不可能為您特別開一個保險箱鎖進去,而是全部收進銀行自己的口袋運用。

銀行收了您的錢,還可以再向中央銀行借款變成槓桿,總之您的錢早就混在一堆錢裡,連您自己都認不出來了,這怎麼辦呢?再說到好比信用卡這類工具,也沒有任何實體支付您的消費,就是簽個名而已,這樣子的金融體系已經存在數十年以上了!事實上,我們的貨幣交易行為甚至發行,早就混雜數位貨幣在其中了!有很多貨幣不是以鈔票形式存在,只是帳本上的數字而已。

銀行使用許多帳務法則記帳(如 Double Entry)及資訊安全、財務專家登記的每筆存款或支出,做成一個帳本,對銀行來說,內部又有一筆超大的流水帳。如果中間有一道被駭客刪了或改了,那麼帳務就大錯亂了。講到這裡聰明的讀者應該發現了,似乎數位貨幣不過就只是一個帳本而已……

去中心化、貨幣本身就有交易記錄的架構

比特幣之父中本聰發想數位貨幣時,就已經很確定把貨幣當成交易(transactions),每個數位貨幣就代表一次交易。和傳統體系的不同是,傳統上而言,貨幣的來源必須是中央銀行,但比特幣內容中沒有,且中本聰反對有個集中管理的中心,因為一旦有了全能的中心,駭客只要攻擊這中心就能造成系統癱瘓。

但如果沒有中央造幣,那麼如何發行、甚至確定每個交易所使用的貨幣都是合法來源而不是駭客憑空生出來的呢?比特幣的發行在每個區塊封裝起來時就順便產生了,放在區塊的第一筆交易中,稱為 coin base。這個 coin base 產生的貨幣數量一開始就寫在協議中,因此每個參與者都可自行驗證,如果產生區塊的人亂填一個數字,那麼這區塊就會認定為非法區塊被作廢,由另一位礦工產生的區塊取代。因此中本聰成功設計出一套去中心化的發行系統。

那麼使用者帳戶呢?使用者有多少貨幣或交易又該如何處理呢?比特幣的區塊講明了,也就只是歷史文本(感謝漫畫《海 X 王》提供的專有名詞),這個歷史文本中,詳細記錄了每筆交易,包括發行及一般交易,所以您一旦申請比特幣錢包地址後,進出紀錄都會記錄在歷史文本中,全世界每個連上比特幣系統的人都看得到。

所以您賺了多少錢、花了多少錢、剩餘多少錢,全世界的人都能幫您作證,這方法有好有壞,好處是只要沒拿到您的私人金鑰,您的錢不太可能憑空消失或轉走(證人太多了),壞處則是很多人都覺得比特幣很隱私,但其實一點也沒有,因為人人都看得到對方的錢包帳目。當然啦,因為錢包只是一串數字組合(就像 IP 位址,只是長多了),所以其他人未必能查到你是誰,不過總是線索明確就是。

▲ 比特幣的流水帳務歷史文本概觀。

餘額結算仰賴運算能力加速

另一個麻煩的壞處則是,歷史文本只有交易流水帳,所以您若想知道帳戶餘額(好比我們每筆交易送出去時,收到的挖礦機都必需驗證您是否真的還有這麼多錢可花),就必須把歷史文本從頭到尾掃瞄一次,撈出所有交易紀錄,然後加總一次才能算出最近的餘額。這個動作在帳務紀錄少時算簡單,但若比特幣未來太熱門,交易紀錄成億成兆,包準會出問題。不過中本聰賭的是到時電腦速度和儲存體速度會變更快,應該有辦法支撐。

為了安全快速的對帳機制,比特幣的交易紀錄有一套規則,以符合快速對帳的需求,我們直接看下圖的實際交易紀錄:

比特幣的交易當然不外乎是錢的轉移,由某甲轉多少到某乙的錢包地址,但是,某甲的比特幣之前可能是由某個交易得來的,好比一週前某甲由某丙手上得到 1 個比特幣,但他今天只要付 0.5 個比特幣出去。

為了對帳方便,這個交易的登記規則會直接把某丙轉來的 1 個比特幣丟進 input 欄位(等於把 1 個比特幣丟到桌上),然後在 output 欄位中把 0.5 個比特幣支付給某乙,再把 0.5 個比特幣退回給某甲,這樣在對帳時,就可以成對消去出入紀錄,更方便快速對帳。上圖中的交易由 1Jt5L9YPEuz12FvtFJWw2KEXdVSJC2rbz 這個帳號放了 6.9942BTC 到桌面,然後支付 2.7018BTC 給帳號 1GNCM5ATfaZZ8mcy61M19roTR8phrvAYcu,然後自己拿回 4.2923BTC。這兩個數字加起來不到 6.9942,因為中間有 0.0001BTC 是交易費用,會由找到解答的礦工拿走。

當然眼快的人已經發現了,比特幣的基本單位可以切得很小,都跑到小數點後 8 位去了。事實上這也是設計之初的考量。如前述,比特幣的發行寫在協議中,每隔 4 年發行量就減半一次,因此比特幣的發行總量有最大值,這樣的設計美其名是預防不合理通膨,但實際上會造成通縮。為了讓貨幣在通縮出現時仍可用,因此乾脆切到小數點後 8 位。

所謂的通縮就是貨幣本身愈來愈貴,因此如果最小交易單位可切成一億分之一,那麼就能在大漲時仍靈活對應現實世界需求。筆者從事金融研究多年,也很想知道這樣設計的通縮究竟在未來會產生什麼樣的效應,至少如果比特幣變成常用數位貨幣,它一定會愈來愈貴,因為參與用戶變多,錢卻沒有跟著變多,一般央行絕對不敢這樣做。在一般世界中,通縮會造成貨幣動性變差,也就是大家都莫名其妙地不敢花錢,最終仍會導致貨幣系統崩壞。

總結

比特幣是沒有傳統銀行帳戶結構的數位貨幣,只有一本從發行之初到現在的流水帳,由所有挖礦機共同維護,它的發行也不由中央機構發行,而是封裝流水帳進入區塊。由於發行是採取隨著區塊增加的共識型方式,因此在開始之初沒有什麼交易,系統也比較脆弱。

(首圖來源:Flickr/BTC Keychain CC BY 2.0)