標籤: 演算法

比特幣用區塊鏈解決了什麼問題?

“gold-colored Bitcoin” by Andre Francois on Unsplash

1. 比特幣想解決什麼問題?

整個區塊鏈革命起源於2008年中本聰(Satoshi Nakamoto)的一篇公開論文:《Bitcoin:A Peer-to-Peer Electronic Cash System》(比特幣:一個點對點的電子現金系統),它解決了一個長久以來難解的問題:在一個不依賴信任中心的環境下,完成點對點的現金轉帳。在2008年的金融環境,我們早已可透過銀行進行轉帳,即時地將現金由A帳戶轉到B帳戶,銀行會將A帳戶的錢扣掉,並同時將錢加到B帳戶上,整個過程沒有實體鈔票,全都是電子數位化處裡,這樣的數位資產轉移基本上都沒有問題,但若我們加了一個條件後,數位資產轉移的問題就難解了,這個條件就是:不依賴信任中心。也就是說:目前金融體系的現金轉帳之所以能夠完成,是架構在有雙方都信任的銀行在中間進行查核確認及帳務更新。一個 “不依賴信任中心” 的環境,我們也稱之為 “去中心化(Decentralized)的環境,所以簡單講,中本聰要解決的命題就是:在一個去中心化的環境,解決彼此信任的問題,以完成點對點的現金轉帳。最後中本聰很巧妙的用了區塊鏈來解決,所以區塊鏈的誕生,是為了解決去中心化的命題去中心化是區塊鏈場景中最核心的條件,雖非必要但大多數是如此。

中本聰要解決的命題就是:在一個去中心化的環境,解決彼此信任的問題,以完成點對點的現金轉帳。

2. 以雲梯車為例,談了解命題的重要性

在說明去中心化命題為何難解之前,我們先將區塊鏈視為解決此命題的一種特殊資料庫系統,對照一個日常生活的例子,來看看了解命題的重要性:

解決高樓救災 --> 雲梯車
(但不代表雲梯車只能解決高樓救災,例如:森林大火時,也可利用雲梯車從高處灑水。)

雲梯車是一種較昂貴的特殊消防車,一開始是為了解決高樓救災而生。

問題一:一個負責平房區救災的消防隊,會需要購置雲梯車嗎?

對照區塊鏈解決的命題:

解決去中心化命題 --> 區塊鏈
(但不代表區塊鏈只能解決去中心化的命題。)

區塊鏈可視為一種較複雜的特殊資料庫系統,一開始是為了解決去中心化命題而生。

問題二:在一個有雙方都信任的中心的環境下,會需要建區塊鏈嗎?

一般來說,這兩個問題的答案都是否定的。

車 --> 載人載物(例如:載消防隊員、載水)
消防車 --> 救災
雲梯車 --> 高樓救災

當然我們也可以不管有沒有高樓大廈,發生火災時就派雲梯車去,反正雲梯車也是一種消防車,甚至我們還可以說,雲梯車也是車,連派員去摘除民宅蜂窩時,也可派雲梯車載消防隊員去,也就是說雲梯車同時具備一般消防車及車的功能,若我們只將它當成一般消防車或車來用,也不是不行,但浪費且沒有必要。這點對照到區塊鏈:若我們只將區塊鏈當成一般資料庫來用,也不是不行,只是浪費且沒有必要。

其實光了解中本聰用區塊鏈解決了什麼問題,我們就可以否決一大半想使用區塊鏈的場景。先看看雲梯車的例子:

以一般消防車救災沒什麼問題,而只想用雲梯車取代一般消防車,這樣的場景多半是沒有必要的。(除非是預見未來平房會改建成高樓大廈)

對照區塊鏈是:

以現有資料庫系統運作沒什麼問題,而只想用區塊鏈取代現有資料庫系統,這樣的場景多半是沒有必要的。(除非是規畫未來會變成或結合去中心化的環境。)

雲梯車這個例子在後續文章還會提到,是希望藉由這個簡單的譬喻,協助大家判斷那些場景適合用區塊鏈;那些用區塊鏈的場景是真的有必要的;那些是為了用區塊鏈而區塊鏈,其實用到的只是區塊鏈做為一個資料庫系統本該有的基本功能。

3. 雙重支付(Double-spending)問題

“雙重支付” 是指一筆資產支付給兩個以上的人。前面提到我們在透過銀行轉帳,可以即時地將現金由A帳戶轉到B帳戶,是因為我們信任在中間運作的銀行,而銀行在這中間必須具備兩個重要的功能:

  1. 確認資產權:確認資產所有權和使用權,以避免資產被雙重支付
  2. 記帳:調整帳務

例如:我在A帳戶有100元,查帳時可以看到這 100 元的數字,若我透過銀行將這100元轉帳到B帳戶,銀行首先要確認我的帳戶有這100元(所有權)且當下可以使用(使用權),再將它從A帳戶中扣掉,並同時在B帳戶上加上這100元,這整個數位資產轉移就像一個純數字遊戲,之所以可以無誤的執行,是因為銀行可以確認我在轉帳的當下擁有資產權,才能針對這100元做資產轉移及帳務調整。因為數位化資產及流程是可以不斷複製的,不像實體資產,你有一張一百元鈔票,將它給了誰就是誰的,所以要確認數位化資產權(亦即避免數位化資產被雙重支付)是數位資產轉移一定要設法解決的問題。在中心化的環境下,銀行的存在就可以解決這個問題,但若沒有一個信任中心,要如何來確認資產權及記帳呢?又由誰來做擔任這樣的工作呢?中本聰的解答是:由全世界所有願意參與確認資產權及記帳的人來共同維護一個公開帳本,讓每個參與者都保有一份備份,並利用一個巧妙的共識機制來達成帳本的一致性,而這些 ”願意參與確認資產權及記帳的人” 就是所謂的 ”礦工”(miner)。礦工之所以願意參與,是因為有系統獎勵機制:大家來搶記帳權,搶到的人有新的比特幣以資獎勵。將經濟激勵放入整個體系,讓系統得以運作,這是中本聰的神妙之舉,非常令人讚嘆。

由全世界所有願意參與確認資產權及記帳的人來共同維護一個公開帳本,讓每個參與者都保有一份備份,並利用一個巧妙的共識機制來達成帳本的一致性,而這些 ”願意參與確認資產權及記帳的人” 就是所謂的 ”礦工”(miner)。

礦工之所以願意參與,是因為有系統獎勵機制:大家來搶記帳權,搶到的人有新的比特幣以資獎勵。

4. 比特幣共識機制的關鍵技術:工作量証明(PoW:Proof of Work)

我們避免提到太艱深的技術問題,但有一個名詞是需要特別說明一下,就是 ”共識機制”。共識機制是中本聰解決此命題的突破點,而比特幣共識機制的關鍵技術是 ”工作量証明”。“工作量証明” 最早是在一篇用它來解決垃圾電子郵件的論文中提出的,整個運作大致是:寄信者要先計算一個有一定難度的隨機數學題(這裡的 “難度” 並不是指題目本身很難,而是像猜樂透一樣要猜中很難),而收信者只接受有附上解答的郵件,也就是藉由增加發郵件的工作量來減少垃圾郵件。

舉例來說,我們可以用 ”找質數” 來當一個有一定難度的隨機數學題,例如:找出最接近 10^32 的質數(只能用純運算,不能用查表法),因為發信者一定要實際運算算出解答,才能成功讓這封信被對方收到,所以能解出來就證明他確實有在工作,而數學題的解答就是它的 ”工作量証明”。以往一秒就可以發出上萬封垃圾郵件,但要在每封郵件上附有 ”工作量証明”,就必須獨立對每封郵件進行額外的運算,發垃圾郵件的成本會提高許多,也因此可以減少垃圾郵件。但其實這樣的機制現今並未被大家所採用,而這篇論文之所以可能名傳千古,是因為中本聰發現可以用它來完成共識機制,它就成為解決幾十年來未解難題的最後一塊拼圖。

數學題的解答就是它的 ”工作量証明”

5. 挖礦 & 礦工

前面提到共識機制包含礦工爭取記帳權的競賽,參與這樣的競賽就是我們所稱的 “挖礦”(mining),得到記帳權(亦即 “挖到礦”)的礦工可以得到新的比特幣以資獎勵,那要怎樣來決定誰取得記帳權呢?中本聰就是用 ”工作量証明”,基本概念是:10分鐘進行一輪競賽,最先拿出工作量証明(即隨機數學題的解答)的礦工就是贏家,可以取得這輪記帳權及新比特幣獎勵。每輪的隨機數學題也設計的相當精巧,有以下3個特性:

  1. 解答非常隨機且沒有規律性,但基本上使用越多運算力越有機會解出。
  2. 要解題很難,但要驗證答案是否正確非常容易且快速,所以一旦有一位礦工提出其工作量証明(即宣稱其挖到礦),其他礦工可以很快的驗證其正確性,並達成共識以投入下一輪競賽。
  3. 題目的難度會適時調整,大約每兩周調整一次,以維持約每10分鐘能完成一輪競賽,亦即約每10分鐘就會有礦工成功挖到礦。

基本上礦工提供的運算力越多就越容易挖到礦,這就是我們常聽到的:擁有越大算力的礦工越有機會成為贏家。至於每一輪能取得的新比特幣獎勵,從2009年比特幣上線時的50元比特幣,約每 4年減半一次,目前(2018年)是12.5元比特幣。按這樣的減速,系統將在2140年後就沒有挖礦獎勵(但仍會有記帳的交易手續費),也就沒有新的比特幣產生,依此規則可得到比特幣最大的總量約2100萬,這也就是大家所說的:比特幣總量固定。中本聰做這樣的設計是有其背後的意義,這點我們將在之後的文章中再說明。

每10分鐘進行一輪競賽,最先拿出工作量証明(即隨機數學題的解答)的礦工就是贏家,可以取得這輪記帳權及新比特幣獎勵。

6. 共識機制演算法(Algorithm)

“演算法” 是解決特定問題的一序列明確步驟或程序,簡單講就是一個特定問題的具體解法,例如前面提到的 “工作量証明” 就是一個解決共識機制的方法,也就是一種 “共識機制演算法”。在 “工作量証明” 演算法中,礦工解題純粹只是為了證明自己有在工作(即為了提出 “工作量証明”),解出來的答案其實是沒有任何實際效用的,也就是挖比特幣所做的大量運算大多並不是為了確認身分(如驗證數位簽章)、記帳或計算金額等有意義的運算,這點在坊間很多文章都有所誤解,常認為挖礦是為了做複雜的加密保護等有意義的運算,而這樣的誤解會造成大家誤以為只要用了區塊鏈,大量耗能的運算好像就無法避免,事實上只要用不同的 “證明”(Proof)方式,也就是採用不同的 ”共識機制演算法”,是有機會達成不耗大量運算而完成共識機制的,例如 ”權益証明”(PoS:Proof of Stake)演算法,不同共識機制演算法的比較後續會再介紹。

7. 公開帳本:區塊鏈

中本聰利用 “工作量証明” 設計了一個共識機制,讓礦工參與每10分鐘一輪的爭取記帳權競賽,挖到礦的礦工會將其產生的新帳本(裡面包含此礦工於這段時間內收集到且確認過資產權的所有新交易資訊)組成一個 “區塊”(block),鏈結(chain)到原有的大帳本的後面,區塊中含有一些得以確保其順序及內容不被篡改的欄位,這樣一個個循序鏈結起來的公開帳本,就是一個我們所稱的 “區塊鏈”(block-chain)。

挖到礦的礦工會將其產生的新帳本(裡面包含此礦工於這段時間內收集到且確認過資產權的所有新交易資訊)組成一個 “區塊”(block),鏈結(chain)到原有的大帳本的後面,區塊中含有一些得以確保其順序及內容不被篡改的欄位,這樣一個個循序鏈結起來的公開帳本,就是一個我們所稱的 “區塊鏈”(block-chain)。

8. 腳本(Script)& 智能合約(Smart Contract)

前面提過礦工要負責 “確認資產權” 的工作,而有些資產權確認的場景是比較複雜的,例如:要兩個人都同意才能使用此資產,或此資產要鎖定7天後才會支付。如此彈性的資產權確認中本聰也考慮到了,他做了一個很前瞻的設計:將礦工要確認的工作,以 “腳本” (script)形式置於交易資訊中。我們可以這樣想:在交易資訊中塞了一段功能有限的小程式,讓礦工執行這段小程式來完成 “確認資產權” 的工作。比特幣這種 “將程式加入交易資料欄位” 的概念,也為區塊鏈開啟了另一番更為廣大的應用天地,以太坊(Ethereum)就是基於這樣的思路,將所謂的 “智能合約” 加入以太坊區塊鏈,關於以太坊及 “智能合約” 以後會再詳細說明,這裡我們可以簡單將 “智能合約” 視為一段可在區塊鏈上運行的程式。”程式” 賦予了區塊鏈生命,讓區塊鏈不再只是靜態的資訊儲存,而是一個可以依程式動態運作的有機體。


比特幣這種 “將程式加入交易資料欄位” 的概念,也為區塊鏈開啟了另一番更為廣大的應用天地,以太坊(Ethereum)就是基於這樣的思路,將所謂的 “智能合約” 加入以太坊區塊鏈

9. 去中心化應用程式(DAPP)

類似於Google的Android平台,程式帶來了平台上各種應用的可能性,讓平台提供的不只是系統的基本功能,還可讓所有開發者在這平台上撰寫各式各樣的應用程式(APP),而在以太坊上開發的應用程式稱為一個DAPP (Decentralized  APP)。以太坊這樣一個運行智能合約的平台,讓區塊鏈的發展得以從支付等金融領域,走向百花齊放的各行各業應用。

在以太坊上開發的應用程式稱為一個DAPP (Decentralized  APP)

10. 加密貨幣首次發行(ICO)

另外值得一提的是,以太坊也是所謂ICO(Initial Coin Offerings,加密貨幣首次發行)的平台,目前超過90%的ICO是在以太坊上進行的,後續我們會針對ICO做專文說明,我們現在只要有個概念:任何人都可以在以太坊上撰寫一些程式(即智能合約),將眾籌(群眾募資)相關規則寫成智能合約,透過以太坊上發行新的加密貨幣以換得創業資金(通常是比特幣或以太幣),這整個自動化募資過程就是ICO,類似於股票的IPO(Initial Public Offerings,股票首次公開發行),但過程簡單許多,募集時間也快很多,也因此成為許多新創公司募資的管道。然而近來ICO被過度濫用,惡質ICO項目充斥市面,造成新的金融亂象,後續我們會有專文教大家如何合理評估ICO項目,降低誤觸地雷的機會。

任何人都可以在以太坊上撰寫一些程式(即智能合約),將眾籌(群眾募資)相關規則寫成智能合約,透過以太坊上發行新的加密貨幣以換得創業資金(通常是比特幣或以太幣),這整個自動化募資過程就是ICO

11. 神秘的天才:中本聰

中本聰從未透露其真實身分,至今沒有人知道他的誰。據維基百科記載2009年,他發布了首個比特幣軟體,並正式啟動了比特幣金融系統。2010年,他逐漸淡出並將專案移交給比特幣社群的其他成員。… 2010年12月5日,在維基解密泄露美國外交電報事件期間,比特幣社群呼籲維基解密接受比特幣捐款以打破金融封鎖。中本聰表示堅決反對,認為比特幣還在搖籃中,禁不起衝突和爭議。七天後的12月12日,他在比特幣論壇中發表了最後一篇文章,提及了最新版本軟體中的一些小問題,隨後不再露面,電子郵件通訊也逐漸終止。自此中本聰便銷聲匿跡,媒體上時不時有關於他身分猜測的新聞,甚至有位澳洲商人自稱自己就是中本聰,然而以中本聰對加密學的了解及關注,以及區塊鏈精妙設計所透漏出來的博學多聞,要說中本聰不是位學者而是位商人,我還真不太相信。

12. 天才帶來新的希望

回到2008年,當人們對世界金融秩序感到失望甚至絕望的時候,就會有個天才蹦出來為大家帶來新的希望。比特幣所創造的不只是一種加密貨幣,而是對整個舊有金融政經體系的反撲,它已穩穩地運行了將近10年的時間,所衍生出來的區塊鏈應用也如火如荼地在各處開花,人們對新金融秩序的信心越亦充足。關於中本聰用比特幣解決了什麼問題?區塊鏈和比特幣帶給人類社會什麼影響?這牽涉範圍就大了,包含經濟政治社會及哲學等,而且見仁見智,有很多思考點及討論空間,也因此為大眾帶來了一些新的可能性,我們將在後續文章中提出一些看法,敬請期待,也歡迎有興趣的讀者一同參與交流討論。

13. 未提及的技術

本系列文章不描述技術細節,文中提到的技術以 “足以說明正確觀念” 為標準,提到的技術辭彙越少越好,若讀者需要了解技術細節,或想多知道一些技術名詞,建議購買幾本技術書籍有系統的學習,也可先參考以下兩篇文章,這兩篇是我看過少數講述清楚且觀念正確的文章,非常值得一讀。

  1. 區塊鏈兩大核心技術拆解:用一串程式碼打造出超級信賴機器
  2. 從門羅幣的硬分叉,看 Crypto 的算力平衡課題