2017 / 文章

區塊鏈可能沒那麼適合你

嗨,晚安!

恭喜比特幣站上 9500 美金。上週四、五、六連續 3 天的活動(12)非常充實,甚至有點資訊過載。不過很開心在活動上和好幾位讀者見面。這三天我最常被問到問題是:有沒有認識的區塊鏈工程師在找工作。這個領域大缺人才,提供你參考。


最近我比較常寫區塊鏈的商業應用,在區塊鏈愛好者大會上又聽到更多,我會在 12 月試營運的時候寫。今天的內容是站在應用的反方說話,也就是區塊鏈仍在進步中,因此不是把任何領域的痛點套上區塊鏈都能點石成金。

今天我會把區塊鏈(公共鏈)眼下有哪些待解決的難題寫出來,如果這些問題在你的領域是決定性因素,那麼你可能不適合使用區塊鏈。對一般讀者來說今天的內容可以幫助你衡量區塊鏈適合用在什麼領域,對開發者來說則是邀請你一起集思廣益有沒有什麼好解法。

區塊鏈無法確保資料正確性

我們都知道寫入區塊鏈的內容不可被篡改,但如何確保寫入的資料是正確無誤的,則是另外一個議題。

舉農產品生產履歷來說,原本生產履歷是為了讓消費者安心,能夠看到我手上這顆雞蛋從頭到尾經過哪些程序。但如果整個生產過程包含資料輸入都是人工作業,只有資料儲存和傳遞是使用區塊鏈,其實區塊鏈能彰顯的效益就只有一小部分。因為生產流程中,人被買通的風險會比駭客入侵生產履歷資料庫的風險大得多。

因此目前較能確保資料正確性的應用,會是原生的數位資料例如比特幣的發行,或可以被多方驗證的領域,例如飛機起降時間是否延誤或學生是否取得學校畢業證書。

區塊鏈確保安全,但不確保隱私

很多人會覺得區塊鏈「匿名公開(Public anonymous)」聽起來有點矛盾,其實只要加上主詞就會明確得多。區塊鏈上的「交易細節」是可以公開查閱,但「交易者」是匿名。

換句話說,我們可以從公開的帳本上看到 A 和 B 有一筆 10 以太幣的交易,但是卻不知道 A 和 B 究竟是誰,除非他們自己承認。

區塊鏈上的紀錄之所以需要公開被查閱,是因為公開才能方便記帳者驗證每一筆紀錄是否有重複花費的問題。然而,這樣雖然可以確保交易的安全性,但卻犧牲了交易的隱私,例如我舉過例子你可以試著把別人的錢包帳號貼到區塊鏈瀏覽器,你就可以看到這個錢包的交易金額、時間、對象。

目前的解決方法,是你可以自己去開一個私密社團(私有鏈),分別設定成員的檢視權限,只有獲得授權的人才能夠查閱交易內容。前幾篇我寫的區塊鏈應用,例如金融機構醫療旅宿都是採用私有鏈來確保資料隱私。

另一個隱私性的解決辦法,是以太坊最近啟用的零知識證明(Zero Knowledge Proof)機制。驗證者可以在不知道智慧合約詳細內容的情況下,也能驗證交易的正確性。但目前也只有以太坊的智慧合約,或 Zcash 有這樣的機制。

區塊鏈的運作效率仍在改進

區塊鏈運作效率不佳的精確說法是規模化(scalability)問題,因為區塊鏈要同時確保安全性、規模化、去中心化三種特色,這是個不容易克服的問題也因此目前有很多不同的解法。

之前舉臉書社團為例,說公共鏈就像公開社團。因為社團成員背景參差不齊,需要有管理機制來確認成員發言的真偽,因此公共鏈就採用共識機制(例如 PoW)來查核確認每一筆交易。當整個社團成員、發言者(發起交易者)越來越多時,也就拖慢了區塊鏈的運作效率。也就是說,目前的區塊鏈的安全性、去中心化都沒問題,但是規模化是個大問題。

例如比特幣的交易手續費太高,就是因為等待被驗證的交易非常多,但區塊鏈的處理速度仍然緩慢。因此交易者需要付更高的手續費給礦工,加快自己交易的驗證速度。擴增區塊容量(block size)是一個暫時加快區塊鏈運作速度的方法,我之前曾舉過 Uber 為例來解釋擴容問題

比特幣的擴增區塊容量問題,是為了提升比特幣區塊鏈每秒的交易數量。例如 8 月的比特幣硬分叉,就是 Bitcoin Cash 陣營將原本 1MB 的區塊容量擴增為 8MB。換句話說原本一台車只能搭 1 位乘客,有人提議全部換成可以搭乘 8 位乘客的廂型車,Uber 就能在全球服務更多的乘客。但是有的 Uber 司機不願意換成廂型車,因此 8 月起開廂型車的司機們脫離本來公司(區塊鏈),成立(分叉)了一間獨立的新公司叫做 Bitcoin Cash 提供相同的載客(加密貨幣)服務。

但是擴增容量並不能長久的解決問題,當交易量越多所需要的區塊容量越大,最後反而會犧牲了原本區塊鏈的去中心化設計。換句話說,當車子一次可以載數千人,那就不是 Uber 而是捷運系統了。因此,這不是一個好解法。

另一套加快區塊鏈處理速度的方法是進行的鏈下交易(off-blockchain),例如以太坊的雷電網路(Raiden Network)或比特幣的閃電網路(Lightning Network)。他們是把微型交易和一般交易分開處理,把微型交易先在區塊鏈外(off-chain)處理完,最後再跟原本的區塊鏈同步。

把兩種不同交易分開來的概念,你也可以用臉書來理解。比較短的狀態貼文和比較長的網誌在臉書上是不同的兩種功能,網誌需要不同的編輯介面,但兩者最後同樣都會被更新到動態牆上。實際運作機制我暫時先保留,不然這篇文章會太長。如果你有興趣,可以先參考這篇英文部落格貼文

但這個解法的問題是鏈下交易最後還是得回到區塊鏈上同步,當動態牆上已經滿載的時候,還是會有塞車問題。因此,上週以太坊創辦人 Vitalik Buterin 來台灣花最多時間解釋的,就是一套可以兼顧安全、規模、去中心化的解決辦法:分片(Sharding)技術。

以太坊 2.0:同時解決安全、效率、去中心化問題

Vitalik Buterin 說以太坊的運作效率在 3~5 年之後,就可以滿足多數應用場景的需求,就像是 VISA 現在每秒能處理數千筆交易一樣。同時具備很好的處理效率,且不需要犧牲區塊鏈現有的安全性、去中心化特性,那就是下一代的以太坊(Ethereum 2.0)。

Ethereum 2.0 是由零知識證明來改善以前的交易隱私問題,由 Casper(權益證明機制)解決目前工作量證明的過度耗電問題及中心化的問題,最後由分片技術來解決區塊鏈規模化(或稱運作效率)的問題。

分片的核心概念是平行的運行多個區塊鏈,但區塊鏈之間仍共用一套共識機制,也就是彼此互通來避免惡意竄改。簡化來說,目前以太坊的每位記帳者都有完整的區塊鏈帳本,而分片就是讓每一個記帳者分別只握有部分的區塊鏈帳本,例如我只有帳本的前 10 頁,藉由分工加快驗證速度。

但實際如何在多個區塊鏈同時運行的情況下還能使用同一套共識機制,我認為是開發者和以太坊基金會需要煩惱的技術問題,就不在這篇文章多說。

回到現實,無論是比特幣區塊鏈、以太坊目前的運作效率都還有待加強。今天我列舉了三個區塊鏈待解決的難題,以及這些難題的暫時解法。希望今天的內容會有助於你判斷區塊鏈目前適合用在什麼領域,以及還需要多久才能夠讓區塊鏈普及至各個行業應用。後天見。