區塊鏈是一個每個字都看得懂,但是各種介紹文章卻讓人更加疑惑的技術。本文希望可以透過問答與比喻來解釋這個技術,讓大眾也可以理解區塊鏈與其他技術的區別與優勢。
雖然說區塊鏈有很多應用,不過讓我們先從金融系統開始講起。
首先要讓大家連續思考三個問題,第一個是:
你在銀行存了錢,為什麼不擔心錢被 A 走?
其中一個答案是政府從以前的經驗學習到銀行確實可能有這個問題,所以銀行是個國家高度監管的行業,開設與運作程序都有一定規範。因為我們「信任」國家在發生問題時會協助處理,所以我們可以安心地把錢存在裡面,需要時可以提領,不需擔心銀行會 A 我們的錢。
下個問題:
你把錢從富邦轉到台新,為什麼兩間不同的銀行可以互相轉帳?
錢要在兩間銀行間轉移需要兩邊的資訊系統可以互通,而且定時會需要有清算機制才知道互相欠對方銀行多少錢。但是每間銀行的資訊系統如果都要對接,一間間實作是很沒有效率的。
為了讓國內所有銀行都能跨行轉帳,有一間由財政部與公民營的金融機構合資成立的「財金公司」,由它負責整合、交換不同銀行之間的資訊系統才得以完成跨行轉帳,而因為這間公司由國家以及眾多銀行共同成立,由大家合資的方式來解決信任問題,讓這些銀行可以「信任」財金公司來處理跨行轉帳業務,如果不是受信任的中介機構來負責,每間銀行都會擔心會不會少算錢讓自己的銀行利益受損。
最後一個問題:
你要轉帳給美國的朋友,需要填什麼資訊?
參考台灣銀行申請書的「電子銀行服務申請書及約定書」,要填的資料有行名、銀行代號、地址與 SWIFT code。SWIFT 的全名是環球銀行金融電信協會 (Society for Worldwide Interbank Financial Telecommunication),這個代碼是由 SWIFT 國際合作組織所提供的國際銀行代碼,加入這個組織的銀行可以透過它所提供的服務來進行國際跨行轉帳。以我自己的經驗每次轉帳要花數天到數周的時間不等,其中還有可能會有二到三手的費用產生。網路上的一篇文章《國際匯款以及費用》講解了過程以及中間可能產生的費用。
加入 SWIFT 的銀行因為「信任」這個國際合作組織,所以可以做到跨國之前的資產轉移,而且雖然說做到了,但是費用跟時間的成本其實也都不低。
說到這邊大家應該多少感受到了,這些金融的服務都是建構在一層層的信任關係,個人信任銀行與國家,銀行之間信任中介組織,不論國內或跨國都相同。我們的金融系統是靠一層層的信任建構而成。
如果沒有這些信任關係,我們現在的金融系統是無法建立起如此方便的系統。但金融系統已經存在許多,目前的架構是在數十年前所訂定,隨著科技日新月異,如今我們已經有更多的技術與科技了。
那讓我們反過來問個問題:
如果不靠一層層的信任關係,以現在的科技要怎麼打造金融系統?
答案之一就是區塊鏈。
區塊鏈利用了這數十年來累積的科技,創造了一種不需要依靠層層信任關係就可以完成金融系統的科技。轉帳給另外一個人,中間是不需要信任一個特定的中介組織,這樣的技術類型稱為「去中心化」(Decentralized)。當然區塊鏈除了金融系統以外還可以做其他事情,不過今天讓我們先專注在解釋金融系統。
啟文要轉錢給馬克,該怎麼做?
上面有提到以前的金融系統都是由一層層的信任所打造,仔細想想,如果沒有這樣的信任關係,台北的啟文要把錢給高雄的馬克是非常困難的,那目前銀行跨行轉帳運作的方式是怎麼做的呢?
啟文要轉帳 5000 元給馬克的時候,涉及到兩個銀行以及一個中介組織。這個中介組織會負責轉送雙方的需求以及確認條件是否符合,比如說帳戶是否存在、轉出帳戶是否足額,轉帳結束後將雙方銀行的資產變動記錄下來,過一段時間後會清算每間銀行的資產變動。
那區塊鏈的作法是怎麼做呢?首先區塊鏈是去中心化的技術,代表沒有像中介組織一樣的角色,取而代之的是一台台獨立運作的電腦負責處理轉帳事務,這些電腦稱為節點 (Node) 或礦工 (Miner)。
銀行的中介組織一定要特定機構運作,但區塊鏈的節點則是所有人都可以自由的下載礦工軟體並且加入,而這些軟體都用相同的規則運作,這個共同的運作規則稱作共識機制 (Consensus)。這些礦工處理轉帳事務會有獎勵,這也是為什麼大家會想加入當礦工了。
而每礦工的電腦上都記錄了一模一樣的交易紀錄。
啟文在銀行開帳號的時候通常會需要附上一些文件證明如身分證等資料後才能開帳號,但是在區塊鏈上開帳號則不需要。「建立帳戶」按鈕壓下去,彈指間就會建立一組帳號。
這組帳號裡面有地址 (Address),類似銀行帳戶號碼;另外還有一把私密鑰匙 (Private Key),這個私密鑰匙功能好比是印章。要轉帳時則會用印章蓋在交易紀錄上,它的功能是讓礦工確認轉帳金額、帳號等內容是由你發出的。
當啟文要轉帳給馬克時,他會先建立一個轉帳表格,上面標註著轉帳金額與馬克的帳號,接著用自己的私密鑰匙在上面蓋章,然後把這轉帳請求交給任一個礦工(多個也行)就行了。
而網路上的礦工們剛開始的時候大家手上都會拿著一張空白的帳本。當一個礦工收到啟文的轉帳請求時,會先做些檢查比如說帳號是否存在,啟文的錢是否足夠等。確認完後就會把它在紀錄在自己那一頁空白的帳本裡。
不過因為這些轉帳資訊送給哪個礦工都可以,所以其實每個礦工的帳本裡面的蒐集到的轉帳資訊可能會來自不同的人,順序當然也不一樣,啟文的轉帳需求可能出現在節點 A,但是節點 B 可能就沒有收集到啟文的轉帳需求。
當礦工蒐集到許多轉帳需求直到一個帳本填滿時,此時礦工根據共識機制會開始爭取記帳權,爭取到這頁帳本記帳權的礦工會得到獎勵。
爭取記帳權的方式有些微複雜,主要是在密碼學技術當中有一些數學運算計算很複雜,但是驗算卻很簡單的運作方法,這邊讓我們用個比喻來讓事情容易理解一點,這個數學運算有點像是魔術方塊:解魔術方塊比較困難,但是完成後要驗證魔術方塊是否完成卻很簡單,只要看每一面是否顏色都同即可。而且這個魔術方塊非常難,平常魔術方塊是 3x3,你可以想像它是 1000 x 1000 的魔術方塊(甚至更難)。
當礦工蒐集滿一整頁的帳本後,此時根據這整頁的帳本的資訊,礦工的電腦裡會生成一個尚待解決的魔術方塊,至於上面的色塊怎麼排列是根據帳本裡面的轉帳需求計算出來的,因為礦工蒐集到的轉帳資訊都不同,所以每個礦工得到的魔術方塊的色塊排列都不一樣。
此時蒐集滿帳本的礦工都會開始解這個魔術方塊,但因為很困難的關係所以要花很多時間來解題。第一個解出來的礦工會把自己蒐集到的帳本明細,跟可驗證解題過程的證據發給其他礦工。其他礦工看到這個魔術方塊解題證據很快就可以驗證確實它已經解出來了。
其他的礦工很快的驗證過後,還沒解出來答案的礦工會放棄手邊的魔術方塊與正在計算的帳本。因為在實際上他不知道自己還要花多久才可以解出這個數學問題(雖然魔術方塊是可以評估解題的進度,但是區塊鏈的數學問題是無法評估進度的。這是魔術方塊比喻比較不恰當的地方)。
此時礦工們都會將驗證後的帳本納入自己的帳本記錄當中標示成「已確認」,並且重新建立一頁新的空白帳本,繼續往下一輪蒐集與計算。值得一提的是這頁已確認的帳本的摘要資訊會附在新一頁帳本的開頭,所以每頁帳本都是一頁頁連在一起的,看起來就像是一條鏈,在系統裡面每頁帳本稱之為一個區塊 (Block),這也就是為什麼稱之為區塊鏈 (Blockchain) 的原因。
此時這個礦工就會得到獎賞,舉例來說以太坊區塊鏈目前每 15 秒會產生一個新的區塊,每個區塊獎勵是 2 ETH,以當下 (2020/6/18) 的價格來看就是每 15 秒鐘就會有一個礦工得到 14,000 台幣。
由於礦工們會互相轉送最新的帳本資訊,所以啟文的交易紀錄也會慢慢的傳播開來,馬克的帳戶裡面也會多了 5000 元,最終整個區塊鏈網路都會有同一頁帳本,而且帳本之間串連的順序也都會一樣,而這也實現了不需要中介機構也可以做到金融系統的目的。
結語
區塊鏈技術對現有的金融系統來說是一個相當大的突破,這代表以往會需要中介機構來用信任關係做資訊交換的地方,利用區塊鏈都可以進一步的減少對中介機構的依賴。比如說銀行之間原本一定需要財金公司才有辦法有效率地做轉帳系統,但是如果使用區塊鏈就不會需要財金公司,甚至也不需要銀行。
不過因為台灣國內的金融系統發展已經相當成熟,其實一般民眾可能一時之間也感覺不出來區塊鏈的金融系統在平常生活有什麼用處。但如果你想要轉帳給美國的朋友時可能就會比較有感,如果透過國際轉帳最快也要三四天才會到帳,依我自己的經驗需要花費 300 元台幣以上,而且國際轉帳一定需要先行設定約定轉帳的國外帳號,從國外轉到台灣時銀行還可能會打電話給你確認來源之後才會放行。
以 Ethereum 區塊鏈為例,雖然交易費是浮動的但平常大概都是 1~5 元台幣之間,時間通常都是在一分鐘內可以完成。網路上有大量交易時時間跟成本都會隨之上升,但總體來說都比國際轉帳便宜快速許多。
講到這裡,希望讀者也對區塊鏈的金融系統有更深的理解了。而區塊鏈的應用不僅僅是在單純的轉帳功能,有許多跟信任相關的場景都可以應用區塊鏈技術來解決。往後如果有機會,再來用淺白的方式解釋其他區塊鏈應用。