國泰金控終於發布第一個區塊鏈應用,首推電動車車聯網區塊鏈金融平臺
國泰金控數數發對外發表首個區塊鏈計畫「電動車車聯網區塊鏈金融平臺」,透過與電動車充電站服務平臺ChargeSmith與區塊鏈新創BSOS共同合作,採用超級帳本開發框架,要把電動車行車電腦資料上鏈,規劃先應用在集團旗下銀行與產險的業務場景。數數發區塊鏈團隊更首度揭露採用超級帳本自行建鏈的關鍵。
文/李靜宜 | 2020-06-04發表
早在2年前,國泰金控就開始發展區塊鏈技術,不過,在全球區塊鏈最火紅的這兩年間,國泰金遲遲沒有出手,直到最近,終於揭露了第一個區塊鏈應用,率先鎖定的就是電動車車聯網新型態應用。
國泰金控數位數據暨科技發展中心(簡稱數數發中心)近期對外發表第一個區塊鏈計畫「電動車車聯網區塊鏈金融平臺」,找來電動車充電站服務平臺宅電(ChargeSmith)與區塊鏈新創BSOS合作,採用超級帳本(Hyperledger Fabric)區塊鏈框架,要把電動車行車電腦資料上鏈。國泰金控計畫先用於銀行與產險業務場景,將規畫提供電動車車主融資申貸、保險理賠、個人化商品推薦等金融服務。
數數發中心區塊鏈技術發展科資深工程師楊俊書表示,目前鎖定特斯拉電動車的行車電腦資料,臺灣現有約8,000臺,7~8成車主會使用宅電充電站查詢App。國泰這個車聯網平臺,會在車主授權後取得電動車行車數據,包括開車時間、時段、時速、里程數、煞車、充電電池的電量、車門有沒有關好等駕駛行為,再將這些數據加密存證並上到部署在宅電公司的區塊鏈節點,再與國泰旗下子公司的其他區塊鏈節點同步資料。
在作法上,楊俊書解釋,特斯拉原本就建置了一個Data Hub平臺,會定期搜集每一臺特斯拉汽車的行車電腦資料,也對外釋出了官方開放API。數數發區塊鏈團隊自行寫了DApp與智能合約,而BSOS協助宅電建立節點,並確保資料來自特斯拉原廠的原始資料,車主授權後直接串接官方API後,將指定電動車行車電腦資料直接放入DApp,DApp再依據智能合約,將資料上鏈到宅電節點。這個作法的好處是,「可以將特斯拉電動車車主第一手行車電腦資料,直接上到國泰的區塊鏈。」他強調。
目前,國泰先找來4位特斯拉車主,進行為期3個月的PoC驗證,來證明整套資料流運作模式的可行性之後,就會開始大量招募電動車車主。同時,也透過PoC讓集團子公司了解運作模式,以利後續發展其他應用。國泰金控預估,正式服務將在今年底陸續上線。
靠排除法找出合適區塊鏈應用場景,國泰每次先問這3個問題
數數發中心早在2018年9月就先成立了區塊鏈小組,後來進一步轉為正式編制,成立了區塊鏈技術發展科,隸屬於數數發數位架構發展部,目前共有9名團隊成員。
成立初期,這個團隊花了很長的時間,先研究不同區塊鏈技術的底層架構,多方評估後最後決定採用超級帳本技術框架,而且決定要自行建鏈。2019下半年,區塊鏈團隊開始與金控旗下子公司合作,正式展開區塊鏈產品研發。
楊俊書表示,國泰區塊鏈團隊的目的是,要將區塊鏈價值落實應用到子公司,甚至是子公司的顧客。為了找出合適的應用場景,國泰後來發展出了一套排除法策略,「與子公司合作時,透過3個問題,先排除不需用區塊鏈的業務。」楊俊書解釋,一是,這個業務能否想出可以和哪一家公司分享資料?如果找不到可成為節點的合作夥伴,這個業務可能就不適合區塊鏈。第二個問題,即便有了分享資料的合作夥伴,還需評估雙方應用區塊鏈是不是有必要性?比如,這個資料分享若不透過區塊鏈便永遠拿不到,就有必要性。
找出了非用區塊鏈不可的場景還不夠,楊俊書強調,國泰區塊鏈應用的原則是個資不上鏈,還會詢問子公司是否同意這個作法?若對方也同意,區塊鏈團隊才會開始建鏈。他解釋,國泰未來可能需要做國際生意,若是合作對象是歐洲公司,就得遵循歐盟GDPR個資保護規範,就算在臺灣,也逐漸開始注重個資,為了避免外界對個資洩露的疑慮,國泰才決定個資不上鏈,只讓一些公開資料或半公開資料上鏈。
主流區塊鏈技術比較,採用超級帳本自行建鏈關鍵
楊俊書更回顧了1年前,數數發區塊鏈團隊在國際幾個主流區塊鏈底層架構,選擇超級帳本開發框架,並決定自行建鏈的關鍵原因。「因為,金融業最在意的是資料隱密性。」
他進一步指出,以太坊(Ethereum)是一般區塊鏈團隊採用的首選,因為以太坊的資料最多,很容易就能建立以太坊私有鏈。國泰區塊鏈團隊在去年做了一個物流鏈POC,就是在私有鏈上採用權威證明(Proof-of-Authority,PoA)共識演算法。而PoA共識的運作是有授權的節點,才有產生區塊鏈網路中下一個區塊的權限。
楊俊書透露,在以太坊私有鏈採用PoA共識機制雖然好用,不過,在資料的隱密性上有些麻煩。他解釋,所有參與方都在同一條鏈上,若要對部分參與方屏蔽資料時,需要另外開發屏蔽資料的功能。
不過,像超級帳本就採取許可制區塊鏈架構,能夠指定特定節點參與及共同維護運作,並預設提供Channel功能可確保資料隱密性。他提到,該功能像是資料通道的概念,比如,A、B、C、D四家參與方在同一鏈上,普遍性資料開放給所有人瀏覽,若A與B有一天想單獨做生意,不想讓其他兩家知道,就能用Channel功能建立一個通道,A與B雙方合作的特定生意的資料,只會在這個通道進行。而且,當第三家公司有一天要加入這場私下交易時,依然能看到過去A與B雙方的歷史資料。
「這樣隨時可加入新業務的彈性作法,可讓鏈上多家參與方未來能做的生意更為多樣化。」楊俊書說。
其實,摩根大通使用以太坊開發的Quorum區塊鏈平臺,也有類似通道的概念來確保資料隱密性,當其中兩家公司進行私下交易時,雙方可以透過一個private data小池區,來存取僅有彼此才能看到的資料。缺點是,雖然第三家公司後續也可以再加入該通道,但卻看不到原本兩家先前的歷史資料。
楊俊書指出,這也是為何他們選擇超級帳本的原因,因為曾合作的歷史資料,對金融業展開另一場合作來說至關重要,這是可供後續合作對象評估的一項指標。
他進一步比較,主打金融專屬設計的R3區塊鏈平臺,重頭到尾都採一對一通道,其實也可以做到資料隱密性。但,國泰考量到數位轉型不只要做子公司內部擁有的生意,未來更可能進一步與外部夥伴做生意來擴大生態圈,這時,R3一對一的通道設計,會導致通道數呈現指數性成長,會大大降低效率,或有管理平臺維運難度較高的問題。
國泰金控數數發中心區塊鏈團隊,選擇了超級帳本作為開發框架,主因是超級帳本有預設的Channel功能,能夠確保資料隱密性,且通道能彈性加入新參與方,並能瀏覽先前的歷史資料。(圖片來源/國泰金控提供)
自行建鏈踩過的坑,未來計畫建立自家的共識演算法
用了一整年超級帳本的數數發區塊鏈團隊,其實在剛開始建鏈時,也踩了不少坑。楊俊書舉例,超級帳本使用Kafka訊息佇列來進行共識演算法,對所有交易資訊進行排序。然而,他坦言,Kafka是一門新技術,仍有一些小臭蟲,有時太多資料要上鏈,可能會發生交易順序錯誤的問題。
或是,有時,鏈上四個節點,其中一個節點當機要重開時,得利用其他三個資料完成的節點,來回復資料,但曾發生過,回復後的資料版本,跟其他三個節點不同。楊俊書提到,這也跟交易順序有關,後來找出一些解方,比如為每個節點做備援,或是把某項元件跟節點拆開來運作,一旦有節點故障重啟時,就能透過正常運作的某項元件將資料同步回來。
他更透露,未來,國泰區塊鏈團隊也不一定堅持使用超級帳本,而更希望能建立自己的共識演算法,比如用開源的實用拜占庭容錯演算法(Practical Byzantine Fault Tolerance,PBFT)來修改。主要原因是,國泰現在有些業務場景,需要高速度交易或高安全性等不同需求,「若未來建立自家的共識演算法,只要修改底層,用共識演算法調參數,就能符合集團不同業務需求。」
國泰自建的區塊鏈,在架構也有不少長期發展的設計考量,例如,區塊鏈團隊也從一開始打造區塊鏈時,就遵循數數發的企業基礎架構與技術。楊俊書表示,例如建置超級帳本時就直接採用微服務,未來,若需要將區塊鏈變成一個基礎架構模組時,較容易整合到數數發的整套基礎架構中。
另外,國泰區塊鏈也採雲端原生(Cloud-Native)設計,國泰日後若需要與外部公司合作,可以直接在雲端部署對方所需的節點。不過,金融業上雲還有許多法遵考量和設計要求,數數發數位架構發展部的雲端團隊,也會來支援這個區塊鏈平臺的雲端架構與維運。
區塊鏈技術發展科另一位資深工程師李肇筌提到,他們使用Docker容器技術,將程式碼與執行環境打包成一個映像檔,只需要1到2天時間,就能快速在子公司或是外部公司建置一個區塊鏈節點。他提到,目前盡量採取容器化的方式來部署,後續處理問題較為方便。
國泰不只把區塊鏈作為發展數位金融的新興技術,更考慮把區塊鏈變成未來金融各領域可共用的架構,之後就能快速發展其他應用,只是目前尚未揭露太多細節。
電動車車聯網區塊鏈金融平臺先聚焦銀行、產險應用
最新發布的電動車車聯網區塊鏈金融平臺,未來應用將分為兩階段。楊俊書表示,第一階段是跟國泰產險與國泰世華銀行合作;第二階段則計畫找到更多節點,比如修車廠,透過修車廠的ERP,或是維修記錄的資料庫成為一個節點,再與國泰的節點同步資料。
在產險的應用,國泰產險可針對車主的行車習慣或駕駛行為,評估規畫發送行車安全提醒簡訊,或是推薦合適的個人化保險商品。同時,也正在研究當車主發生交通事故時,運用區塊鏈資料不可竄改的特性,優化理賠審核流程。
銀行的部分,目前則規畫用在融資申貸。楊俊書提到,比較簡單的應用是,未來當車主要用車體履歷申請融資時,國泰世華銀行的評估人員可透過區塊鏈來獲取車主行車資訊如里程數,以及維修記錄等來評估車況,像是用維修記錄判斷車子有無撞過,藉此減少車主與銀行一來一往的時間,加快核貸速度。不過,融資申貸這塊目前尚未設計完成,像是在融資額度的部分,因涉及審查單位,所以還要進行規畫。
國泰金控也透露,除了電動車車聯網區塊鏈金融平臺,目前,國泰產險與數數發中心也正透過技術架構重整中後臺,不久後就會推出全新的科技金融應用。
附圖:國泰金控推出電動車車聯網區塊鏈金融平臺,目前鎖定特斯拉電動車的行車電腦資料先進行3個月的POC,正式服務預計年底陸續上線。(圖片來源/ChargeSmith)
國泰金控2年前成立區塊鏈團隊,後來更在正式編制中設計了數數發數位架構發展部區塊鏈技術發展科,目前共有9名團隊成員。(攝影/洪政偉)
資料來源:https://www.ithome.com.tw/news/138049?fbclid=IwAR1WQhs37BNwHPNWaCu35pp0vdxa-sBWoXeXgMF-AN3Kaf2Xo2eZd7sd67g
拜占庭容錯 算法 在 動區動趨 BlockTempo - 由社群而生的區塊鏈媒體 - Media for Blockchain Facebook 的最讚貼文
#Polkadot #共識 #最終性
【區塊鏈共識與最終性簡史:從比特幣的 POW 到 Polkadot 的混合共識機制 】
區塊鏈的「早期時代」主要圍繞使用PoW 挖礦及使用最長鏈規則,來增強網路共識。後來為了用更節能的方式,開始嘗試使用 PoS 取代挖礦。過去的 PoS 鏈仍然使用最長鏈規則
然而,近年來的趨勢是將 #拜占庭容錯協議 也納入共識機制:而不使用最長鏈規則(Cosmos), 或者讓兩者共存(以太坊和Polkadot)...
(本文原作者來自 Polkadot )
-
★同場加映
❶12億比特幣賣壓牆擋在10,000美元;富爸爸作者: 比特幣三年內將達 75,000 美元
👉https://pse.is/RC9GB
❷J減半後算力下跌 41% ! FTX 推出「比特幣算力期貨」,以挖礦平均難度為基準
👉https://pse.is/SDNB3
-
✅ 即時新聞跟活動消息鎖定 #動區Telegram
https://t.me/blocktemponews
✅訂閱 #LINE 每日新聞精選:
https://line.me/R/ti/p/%40kgx9780p
✅加入 #facebook 社群 和我們一起討論學習區塊鏈:
https://www.facebook.com/groups/BlockTempo
拜占庭容錯 算法 在 Taipei Ethereum Meetup Facebook 的最佳貼文
📜 [專欄新文章] ELI5! 區塊鏈到底在幹嘛?
✍️ Juin Chiu
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
用生活化的例子輕鬆學會區塊鏈技術的重要概念
前言
我們熟知的世界正在慢慢地被區塊鏈技術瓦解與重建。不論背景,有愈來愈多人想對區塊鏈技術一探究竟,或許更進一步成為從業者、貢獻者或佈道者。
不幸的是,初學者若想學習區塊鏈技術,第一個問題可能會是高學習門檻,這是因為目前在各種主流平台上所流傳的區塊鏈知識或資源,都不免會大量使用艱澀的術語,長久以來便塑造出區塊鏈高大上的距離感,好似區塊鏈是只專屬於一小群駭客或者專業人士才能理解的技術。然而這是不準確的,事實上,區塊鏈技術中許多概念都能用一般常識理解,頂多只需要國小數學。
本文中,筆者將化繁為簡,試著把區塊鏈技術中的每個元素都使用生活化的例子比擬,讓區塊鏈愛好者與初學者不需用到密碼學/經濟學/資訊科學,也能領會區塊鏈技術的精髓之處。
本文將提及的概念如下:
什麼是帳本?
什麼是交易?
為什麼需要區塊?
有哪些共識機制?
區塊鏈安全嗎?
智能合約如何運作?
以下正文開始:
區塊鏈:一個公平的記錄系統
簡單來說,區塊鏈技術旨在打造一個去中心化的(Decentralized)狀態紀錄系統,更準確一點:區塊鏈技術旨在打造是一個追求真正「公平」的系統。
區塊鏈實現公平的關鍵在於:它完全仰賴自然法則運作,只透過一系列精細的規則就能保證系統的正確,這打破了人類社會一直以來的仰賴的中心化系統,使促成不平等的最大因素不復存在。
區塊鏈技術可以打造出具世界規模的去中心化運算平台,由數千甚至數萬個參與者共同維護狀態並提供計算資源。如果這個運算平台是應用在貨幣與資產的場景中,那麼這個平台可被稱為分散式帳本。
在接下來的段落,筆者將用一個例子展示一個極度精簡、只用紙跟筆的就可以運作的分散式帳本。在這個例子中,一群學生可以使用區塊鏈技術發行屬於他們自己的虛擬幣:「考卷幣」(Exam Paper Coin, EPC)。
考卷幣:使用區塊鏈技術發行的虛擬幣
考卷幣(EPC)是一種使用區塊鏈技術發行的虛擬幣,並存在於分散式帳本中。它的用途是為考卷加分,這將會吸引想考高分或者擔心被當的人學生持有。為什麼 EPC 只能被稱作虛擬幣,而不被稱作密碼貨幣?這是因為 EPC 的發行不會使用任何有關密碼學的技術,因此 EPC 嚴格來說不是密碼貨幣。
在分散式帳本被創建之初,沒有任何人擁有 EPC ,那麼 EPC 是怎麼「鑄造」與分配的?至少可以肯定的是,EPC 不能憑空產生,否則所有參與者就能不斷製造 EPC,使分散式帳本崩潰。事實上,EPC 的價值奠基於參與者的「付出」。
分散式帳本中最重要的角色非記帳者莫屬。每當記帳者成功完成工作,它便可以獲得固定數量的 EPC 作為報酬。於是,分散式帳本中的 EPC 便如此逐步地被鑄造出來。將 EPC 賦予具有貢獻的記帳者除了能夠公平分配 EPC,同時也是一種激勵機制(Incentivizing Mechanism),提供參與者維護帳本的動機。
那麼每個人所具有的 EPC 是怎麼記錄在帳本中的?
帳本: EPC 都要記錄下來
帳本即為依時間順序與特定格式記錄價值的系統。在分散式帳本中,每一批紀錄都會由某一個特定的「記帳者」維護,而記帳者會以特定的規則從所有的參與者中選出,因此分散式帳本是具有多個「記帳者」的系統。
為了確保能公平選出 EPC 的所有記帳者,分散式帳本不會使用任何記帳者的個人資訊,例如姓名、電話,做為帳本上的識別。記帳者可以自由地使用假名(Pseudonym)作為帳本上唯一的識別(Identifier),或者稱為地址(Address)。所以王小庭同學可以使用 Alice 這個假名,而且如果王小庭同學喜歡的話,他也可以同時使用 Bob 這個假名。
EPC 使用如下的格式記錄每個地址幣的數量:
Alice 100 EPCBob 0 EPCCharlie 0 EPCDavid 0 EPCEva 0 EPC
多數區塊鏈稱其識別為地址(Address),其為非對稱密碼學中公鑰(Public Key)的雜湊值(Hash)。地址具有統一的格式,例如以太坊的地址為長度 160 位元的 16 進位數字。
交易:把我的 EPC 轉移給別人
EPC 是可以轉移的,現在 Alice 可以將它持有的 100 EPC 中的 60 EPC 轉移給 Bob,以幫助 Bob 在下一次考試中免於被當。這樣的轉幣紀錄稱為交易(Transaction, Tx),可以如下表示:
Tx1
60 EPC, from [Alice] to [Bob]
而這筆交易會由 Alice 以上述格式記在紙條上,以 Tx1 表示。
簽章:讓參與者的所有動作都不可抵賴
EPC 的每個參與者的每個行為,例如交易,都必須附帶簽章(Signature),證明「這個動作確實是由我本人發起的」,簽署者不可抵賴,任何沒有附帶簽名的動作都是不被承認的。一個附帶簽名的交易紙條會像這樣:
Tx1
60 EPC, from [Alice] to [Bob], ALICE
簽章分為簽署(Sign)及驗證(Verify)兩個動作。驗證即是確認簽章是否確實是由行為發起者所簽署。在這個例子中,僅用一個簡單的驗證:若簽章與識別相符,則驗證成功。例如 Tx1 中,簽名 ALICE 確實與交易發起者 Alice 相符,因此驗證成功。
簽章就是區塊鏈的數位簽章(Digital Signature),其使用私鑰(Private Key)簽署,公鑰(Public Key)驗證,非常難以偽造。
訊息的散佈:怎麼讓所有參與者都收到訊息?
由於 Tx1 是由 Alice 發起的,因此 Alice 將於它自己的帳本記下這筆交易,接著 Alice 必須把這筆交易的內容也轉達所有的參與者,讓所有參與者皆具有所有的交易內容。
EPC 的參與者們不以口語,而是以傳紙條的方式互相交換訊息。紙條要如何有效率地傳播訊息給所有在教室中的參與者呢?可以使用「一傳十、十傳百」的策略。也就是:一次傳 10 張紙條給自己周圍的參與者,參與者收到後再抄寫 10 次後傳給周圍尚未收到該紀錄的其他參與者,逐步將訊息擴散致所有參與者。
這樣的傳播策略正如同流言被散佈的方式,因此也被稱為流言散佈協定(Gossip Protocol)。紙條傳播的網路就是對等網路(Peer-to-peer Network),紙條就是對等網路的封包(Packet)。關於對等網路的介紹,可以參考筆者日前的撰文:
隱私、區塊鏈與洋蔥路由
區塊:記錄一段時間內的交易順序
經過一段時間之後,每個 EPC 參與者手上都會有許多來自別的參與者的紙條,每張紙條都記載著不同的交易。在理想狀況下,如果所有參與者收到紙條的順序都相同,且每個參與者都收到了所有紙條,則所有參與者的帳本上的狀態,也就是餘額,都會相同。然而,若採用上述的訊息散佈策略,會發生兩種情況:每個參與者收到紙條的順序會不同,或者某些紙條可能會被遺漏。這些情況都會讓每個參與者的帳本產生差異,使帳本不可靠。而一個不可靠的帳本,不能作為貨幣發行的工具。
有沒有辦法能使所有 EPC 參與者用相同的交易順序記帳呢?這便是區塊鏈技術的奧秘之處。
為此,我們需要使用一個精心設計的結構:區塊(Block)。每個參與者皆會將一段時間內收到的交易紙條的編號,依照自己的順序寫在另一張紙條上,這張紙條就是區塊紙條,簡稱區塊,產出區塊的參與者則稱為區塊生產者。收到區塊紙條的其他參與者便會知道區塊生產者在這段時間內的交易順序。
為了要讓所有帳本都具有一致的狀態,EPC 的所有參與者必須要選出其中一個區塊作為所有參與者的共識(Consensus)。所有參與者都必須要遵照共識區塊的交易順序來更新自己的帳本,而這個區塊生產者就是記帳者。由於記帳者可以獲得報酬,因此在利益的驅使下,所有參與者都會努力生產區塊以爭取記帳權。
值得注意的是,每個區塊當中都會記錄前一個已達成共識的區塊的編號。例如接下來的範例,Bk15 的前一個已達成共識的區塊為 Bk3:
Bk15
Last Block: Bk3
Height: 15
Transactions:- Tx1- Tx5- Tx4- Tx10- Tx7- Tx13
Nonce: 1
Signature: CHARLIE
由於每個新的共識區塊都會指向前一個共識區塊,如此便會形成一條長鏈般的結構,已形成共識的區塊接成一條鏈,這就是區塊鏈(Blockchain)名稱的由來。
而當 EPC 參與者在收取共識的區塊後,將按照共識依序為每個交易內容進行帳本餘額的轉換。如此,所有的帳本都將具有一致的狀態。
依據特定輸入及轉換函數(Transition Function)執行狀態更新的系統,稱為狀態機複製(State Machine Replication)
摘要:濃縮紙條上的訊息
在介紹達成共識的方法前,筆者要先來介紹一個樸實無華但重要的概念:摘要(Digest),其顧名思義就是一段內容經過消化的產物。假設有一種摘要產生器,這個機器可以放入一張紙條,然後透過 3 個步驟計算出紙條的摘要。
摘要產生器將記載訊息的紙條切成一條一條固定寬度的細長條狀紙帶,如下圖:
2. 將這些紙帶依照順序接成一個長條紙帶。紙帶上有字跡的黑色部分與沒字跡的白色部分會出現不規則相間,測量每個黑色區塊之間相鄰的距離,如下圖:
3. 每段距離的數字相乘後的數字就是這個紙條的摘要(Digest)。
每個 EPC 參與者都會有一台摘要產生器,而它需要上緊發條才能開始工作,且每計算完一張紙條便須重新上一次發條。
摘要的計算雖然簡單,卻具有一些很有用的特性:
首先,摘要會隨著紙條內容的變動而更動。只要更動了任何一點紙條內容,例如區塊的交易順序,或者流水號(Nonce),都會使摘要改變。因此一個附上摘要的紙條,可以讓收到紙條的人在收到後再自行計算一次摘要並比對兩者,以驗證紙條的內容是否被修改過。因此,摘要是可驗證的(Verifiable)。
若想在不更動摘要的情況下同時變動紙條內容,只能不斷嘗試用不同內容產生摘要,直到發生碰撞(Collision) — 意即兩個不同內容的紙條出現相同摘要。
其次,摘要也是單向的:一個紙條很容易產出摘要,但摘要很難還原出原本的紙條內容。這也代表摘要是隨機且難以預測的,因此摘要可以作為一種亂數(Random Number)來源。
正式的區塊鏈使用更難預測且更不易碰撞的的密碼雜湊函數(Cryptograpgic Hash Function)產生訊息摘要。
理解關於區塊鏈技術的基本要件後,接下來就來看看區塊鏈技術的精妙之處:共識機制。
共識機制:如何達成共識?
在區塊鏈技術中,大致上有兩種方式可以產生共識:抽彩(Lottery)或表決(Vote),它們各自有不同特性,每一種分散式帳本都會使用其中之一作為共識機制。
抽彩
在抽彩機制中,唯有摘要小於門檻值的「合法」區塊才會被所有參與者收受。然而,區塊生產者無法預測摘要,且可驗證的摘要使區塊生產者難以作弊。因此若想生產數字小於門檻值的摘要,區塊生產者必須不斷改動區塊內容,例如流水號或者交易順序,直到找到摘要小於門檻值的區塊,就像抽彩一樣。只有合法的區塊才會被區塊生產者散佈給其他 EPC 參與者。
在這樣的規則下,可能會同時出現多個合法區塊。還記得區塊鏈中「鏈」的部分嗎?當收受多個低於門檻的區塊時,該選哪個區塊作為上一個區塊呢?這裡我們可以用一些簡單的規則來做抉擇:選擇合法區塊中高度(Height)最高的區塊,若高度一樣則選擇摘要數字較低的區塊。
區塊紙條的摘要就是正式區塊鏈中的區塊雜湊值。在正式的區塊鏈中,門檻值愈低,困難度(Difficulty)也愈高。區塊的選擇規則也稱為分岔選擇規則(Fork Choice Rule),使用可驗證的亂數作為共識的做法又稱為中本共識(Nakamoto Consensus)。
表決
有別於複雜的抽彩,表決機制相當直觀:所有參與者針對某個預先選出的領袖(Leader)的提案(Proposal),也就是區塊,進行投票。領袖是怎麼選出的?一個直覺的做法是按照假名的順序,按照 Alice / Bob / Charlie 的順序,所有參與者輪流擔任領袖。
所有參與者在收到提案後,可以選擇同意或反對這個區塊的內容,若同意的話,則將自己對提案的同意票記在紙條上,並將這個投票紙條散佈給所有其他參與者。若多數的參與者同意了提案,則所有參與者皆須認定該提案為共識。
然而,表決機制雖然直觀,卻不如抽彩具有可驗證性,參與者若想作弊則相對容易:例如,參與者可以重複投票,或者串通其他參與者一起不投票,以破壞帳本;另一方面,表決比抽彩來得有效率,因其不需要所有參與者都費功去製造可能將不被收受的區塊。
拜占庭錯誤(Byzantine Fault)特指這些不在預期內的行為,表決機制事實上也就是拜占庭容錯(Byzantine-fault-tolerant, BFT)演算法。PBFT 家族的協定是目前拜占庭容錯演算法的主流,然而其至多只能容忍不超過參與者總數一半的拜占庭錯誤。若想了解更多 PBFT 的細節,可以參考筆者日前的撰文:
若想搞懂區塊鏈就不能忽視的經典:PBFT
女巫:如何避免帳本被單一個體掌控?
上文提到:為了保證公平的記帳權,帳本上的識別都是假名,如上文提及,Alice 跟 Bob 實際上都是由同一個參與者王小庭所控制,其他參與者不僅難以得知,而且王小庭喜歡的話,他愛用幾個假名就用幾個假名 — 掌控多個假名的王小庭就成為了「女巫」(Sybil)。
不論是採取何種共識機制,女巫的存在都會破壞分散式帳本的安全性:
在抽彩機制中,如果多數的參與者皆由女巫控制,則女巫有很大的機會可以無視規則,不需抽彩便竄改帳本。
在表決機制中,如果由女巫控制的參與者可以集體進行不在預期內的行為,例如重複投票或者不投票。
因此,抵抗女巫對於分散式帳本的安全至關重要。對此,一個直覺的思路是:讓每個假名的行為都必須付出有限的資源,例如錢跟力。因此有兩種方式可以抵抗女巫:要嘛出錢,要嘛出力。
出力:在抽彩機制中,每個合法區塊的生產都必須附有低於門檻的摘要,而摘要的計算需要參與者出力不斷地重上發條。
出錢:在表決機制中,抵押一定數量 EPC 的參與者才能獲選為領袖被生產提案,且若違反規則,參與者的押金將會被沒收。
出力即是工作證明(Proof of Work, PoW);出錢即是權益證明(Proof of Stake, PoS),抵抗女巫的機制稱為抗女巫機制(Sybil-control Mechanism)。
合約:進行條件式的交易
回顧一下本文開頭所提:區塊鏈技術可以用來打造去中心化的運算平台,它可以用以記錄任何資訊,不止餘額,例如一段合約(Contract)。合約就是指一段會依據不同條件而達成不同執行結果的語句。例如:
CheckAndPay
給定 A、B 兩個假名,若 A 的餘額大於/等於 30 EPC,則 A 支付 20 EPC 給 B ,否則 A 不支付任何 EPC。
這個合約就可以被記錄在帳本中:
Alice 100 EPCBob 0 EPCCharlie 0 EPCDavid 0 EPCEva 0 EPCCheckAndPay "給定 A、B 兩個假名,若 A 的餘額大於/等於 30 EPC,則 A 支付 20 EPC 給 B ,否則 A 不支付任何 EPC。"
之後 Alice 就可以發起像這樣的交易:
Tx 99
CheckAndPay, {[Alice], [Bob]}, ALICE
如此,若 Alice 的 EPC 餘額不足 30 EPC 則不會支付 Bob。
觸發合約的 Tx 99 ,它的執行過程比較煩瑣:執行 Tx 99 的參與者首先會從帳本中尋找 CheckAndPay 的合約內容,並從 Tx 99 中取出合約需要的輸入:A 與 B,接著參與者再解讀合約的語句,依照條件進行帳本的狀態轉換。其中,為了使參與者能解讀合約,合約需用所有參與者皆能看懂的語言書寫。
合約又稱智能合約(Smart Contract)。正式的區塊鏈使用虛擬機(Virtual Machine)來解讀與執行合約。事實上,智能合約能做的事情非常多,這使具有智能合約功能的分散式帳本得以成為去中心化的運算平台,例如以太坊(Ethereum)。
總結: 分散式帳本究竟是一個怎樣的系統?
如果以上環節皆運作順利,那麼便能成功只用紙筆便發行了專由學生使用的貨幣。最後再次強調一次:這是一個為了便於使初學者掌握核心觀念而極度簡化的例子。正式運行的區塊鏈,例如以太坊,其實際運作遠遠複雜得多。
還有一些比較進階的概念,雖然礙於篇幅未在此文章提及,但部分主題筆者曾撰文介紹:
可擴展性(Scalability):第二層方案(Layer 2)與分片(Sharding)
隱私(Privacy)與匿名(Anonymity)
共識機制的安全性(Safety)與活躍性(Liveness)
最後,如果日後朋友/家人問起「什麼是區塊鏈」時,我想你會知道如何解釋了:)
ELI5! 區塊鏈到底在幹嘛? was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌