【撰文:張庭瑜 / 製圖:黃巧秀】
通常講到區塊鏈技術,光是分散式帳本、智慧合約、去中心化應用程式這些專有名詞就讓人感到頭痛。但其實只要了解一點點密碼學、一點點程式概念,區塊鏈其實沒這麼難。
核心技術1:集結密碼學、P2P架構的公開帳本
想了解區塊鏈,必須從第一個應用「比特幣」開始談起。它解決了數位貨幣最根本的問題:如何讓大家信任帳本上記載的數字。
首先,比特幣採用的是P2P(peer-to-peer)網路架構,帳本是公開透明的,只要下載一個程式就能共同維護並存取這份帳本,當有新的交易紀錄,每個人的帳本都會一起更新,幫忙作證交易完成,因此不會有A已付錢給B、B卻說他沒收到的情況。
儘管大家都有帳本存取權,並不是人人都能隨意更改帳本。在比特幣中,每批交易只能有一個人負責記帳,為了獲得記帳權,共同維護帳本的人或電腦(又稱節點)必須比賽解出一個複雜的運算問題,最先解出的人就能獲得記帳權,這個過程也被稱作「挖礦」,而參與搶答的人就叫「礦工」。在記帳前,礦工會檢查這筆交易的發起人是否合法,也就是如果交易內容是從A帳戶轉100元到B帳戶,那必須先確認該筆交易是否由A發起。同時,礦工也會確認這筆資金過去是否沒被花過,避免重複花費。由於挖礦程式也是公開透明的,大家都認同並遵守這套遊戲規則,因此不會懷疑由此新增的交易資料。
在區塊鏈的架構裡,每批交易資訊都會被打包成「區塊」儲存在網路中,每個區塊會按照新增的時間順序串連起來,形成一條「鏈」。照理說,每個區塊後面只會接一個區塊,但如果一個區塊後面接了兩個區塊,就會「分叉」成兩條鏈,正常情況下,比較長的那條鏈會被保留,否則就會出現好幾種不同版本的帳本。
再談細一點,礦工挖礦時必須面對的那些運算,其實是出自密碼學的雜湊函數。教導密碼學和區塊鏈的台灣大學數學系兼任助理教授陳君明解釋,雜湊函數會把餵給它的東西打亂,很難預測結果,無論丟進去什麼內容,最後只會算出一個長度固定的雜湊值(hash)。
以比特幣為例,礦工把整包區塊內容丟進雜湊函數後,會算出256位元的雜湊值。其中,每個區塊有好幾個欄位,包含上個區塊的雜湊值、交易內容,唯一可以動的欄位稱作「隨機數」(nonce)。而礦工的工作就是不斷調整隨機數、放到雜湊函數中,直到算出的數字符合條件,才能把區塊接到鏈上,完成記帳。在比特幣的世界裡每十分鐘只能新增一個區塊,所以挖礦的人越多,計算難度也會越高。
不過挖礦需要耗費大量運算資源,大家為什麼願意投入?為了鼓勵更多人挖礦,比特幣結合激勵機制,成功挖到礦的人可獲得一筆固定的挖礦獎勵,和交易發起人提供的交易手續費。比特幣的挖礦獎勵每四年減半,從2009年的50顆,到現在只剩12.5顆,不過隨著交易量變大,礦工可獲得的交易手續費也變多。
除了挖礦,雜湊函數也被用來產生每筆交易的ID──相當於數位指紋,而這些ID又會和上個區塊的雜湊值合起來成為新區塊的雜湊值。由於只要內容稍有更動,算出來的雜湊值就會截然不同,其他礦工也會發現哪筆交易被篡改,並捨棄掉該交易。可以說是雜湊函數,造就了比特幣交易不可抹滅的特性。
核心技術2:用程式打造最有效力的契約:智慧合約
按照以太坊發明人布特林(Vitalik Buterin)的說法,智慧合約是一個可以自動控制數位資產的電腦程式,也可以把智慧合約想像成一台由程式碼編寫,而且能自動運行的自動販賣機,投下多少錢,相對應的物品就會掉出。例如,有兩個人打賭會不會下雨,如果氣象感測器偵測到下雨、並把結果傳給智慧合約,那智慧合約會自動把賭金轉給贏家。
智慧合約的好處,又或者說把合約寫在區塊鏈上的好處是:合約甲乙方可以不必以信任作為立約基礎,簡單說,就是不用在乎合約對象是否有信用,因為程式碼會強制執行合約內容。一旦合約被觸發,礦工就會開始執行合約內容,這過程是完全自動且無法干預,延續了區塊鏈的特性,因此合約內容很難被篡改、也幾乎不可能違約。
雖然貨幣是區塊鏈第一個應用,但區塊鏈能做的遠大於此,包含身分證、駕照等身分識別紀錄,以及專利、商標、著作權等無形資產,都能編碼成數位資產並在區塊鏈上登記,甚至就連汽車或房子這類的實體資產也能數位化。想像一下,把住宅鑰匙、飯店房卡、汽車鑰匙換成密碼學中的私鑰,擁有私鑰的人才能打開車門。
不過,區塊鏈和智慧合約畢竟是底層程式碼,要加上簡單明瞭的使用介面,才能成為能讓一般人使用的應用服務,像這樣基於區塊鏈打造的應用程式,就被稱作去中心化應用程式(Decentralized Application,DAPP),其中,以太坊提供一系列DAPP的開發模組,是區塊鏈應用百花齊放的重要推手。
《區塊鏈革命》一書指出,智慧合約就是像電腦程式的「if…then…」條件語,當預先編好的條件被觸發,智慧合約會執行相對應的合約條款。然而,過去因為「支付」這環節仍需人為介入,智慧合約一直難以實踐,因此,在比特幣這類基於區塊鏈的虛擬貨幣出現後,智慧合約的應用才向前邁進一大步。