原文標題:《JPM Coin 三部曲 (中) - 摩根大通爲何青睞 Quorum 區塊鏈 ?》
作者:MakerDAO 中國區負責人 潘超
來源:Moneyness 研究院

本篇聊一聊 JPM coin 背後的區塊鏈網絡 - Quorum,詳解其特點、共識機制,及其如何滿足傳統銀行業的商業需求。

Quorum 被認爲是「企業級以太坊」,從 2016 年起由摩根大通銀行啓動的開源項目。

相對於一般的區塊鏈,Quorum 有以下幾個特點:

  • 兼容以太坊合約
  • 准入系統,已知節點
  • 鏈下+鏈上隱私保護
  • 靈活支持多種共識機制
  • 高性能、速度快、抗分叉

以太坊的克隆

Quorum 之所以可以兼容以太坊的合約,其本身是以太坊客戶端 Go 語言版本 (go-ethereum) 的「克隆」,並根據 go-ethereum 發佈進行更新。這意味着所有在以太坊上跑的合約,包括如 Truffle 一樣的開發框架,都可以直接部署在 Quorum 上。

JPM Coin 背後的「企業級以太坊」Quorum 如何滿足傳統銀行業需求

但這不代表 Quorum 和以太坊網絡之間當下可以互通 (Interoperability)。Quorum 更多是一個聯盟鏈,不是所有人都可以隨意加入網絡。節點的加入與去除需要授權,並且是已知的身份。這個網絡裏沒有挖礦機制,也沒有原生代幣。儘管保留 Gas 本身,但是刪除了以太坊中 Gas 的定價,即 gasPrice = 0,轉賬時沒有礦工費。

注重隱私與監管友好

以太坊的特點是賬本公開透明,普通人打開一個以太坊瀏覽器,就可以查到每筆交易的全部信息。透明性對於公鏈是一個優點,到了傳統行業,卻成了無法匹配的痛點。對於金融業而言,數據的隱私非常重要,銀行不希望將自己的資產狀況和交易記錄公之於衆,更不願意這些數據被競爭者獲取。

保護隱私性是 Quorum 的核心功能之一,Quorum 將交易分爲公開交易與私人交易。

公開交易直接在主鏈節點間完成,與以太坊基本一致。

JPM Coin 背後的「企業級以太坊」Quorum 如何滿足傳統銀行業需求

而私人交易會放在鏈下獨立的服務器進行加密處理。Quorum 主鏈上只存儲加密後數據的哈希值,而私有交易的數據將存儲在鏈下,通過管理引擎(Tessera 和 Constellation)在節點間共享。只有交易的相關方(以及監管部門)才能看到交易的細節,非相關方無法獲取交易細節。

JPM Coin 背後的「企業級以太坊」Quorum 如何滿足傳統銀行業需求

主鏈中所有節點的狀態公開,達成絕對的狀態共識,而私有狀態數據庫的情況則不同,不保存全局狀態。如果你希望進行一筆私人交易,只需要在發起交易時添加一個 privateFor 的標籤,加入節點對象,這筆交易便可以在私有狀態數據庫中點對點進行。

不過這也會帶來一些問題:

1、一旦 privateFor 的節點列表確認發送,就無法添加新的節點到列表中。換句話說,如果對方事先不處於這筆交易鏈條的一環,就無法獲取之前發生的交易詳情。設想,對於某些交易,如果央行或者監管者一開始不在這個網絡中,後來決定加入,卻無法直接獲取之前的交易信息。
2、由於私有狀態數據庫是點對點進行,不同步全局狀態,這就帶來雙花的風險。

此外,將數據放在鏈下的服務器不可避免地帶來中心化和單點失敗的風險。

爲了解決鏈下隱私方案的缺陷,Quorum 在 2017 年與 Zcash 團隊合作,提供了一種鏈上的隱私方案,連接私有合約以及主鏈 — 合約的商業邏輯在私有合約內部達成一致,然後在主鏈上進行清算,並以零知識證明的方式使用 z-token 作爲保護隱私的橋樑。

JPM Coin 背後的「企業級以太坊」Quorum 如何滿足傳統銀行業需求

如何搭建隱私橋樑呢?z-contract 合約會生成與主鏈資產 1:1 的代幣資產 z-tokens。需要注意的是,z-contract 也在主鏈上運行,只是其資產是隱蔽資產 (Shielded Assets) 可以隱藏交易信息(發送方、接收方、資產數量等)。

對於一筆隱私交易,會按照以下步驟進行:

JPM Coin 背後的「企業級以太坊」Quorum 如何滿足傳統銀行業需求

1、賣方創建私人合約,規定合約的細則:包括資產金額、買賣方等。
2、買方接受合約,此時雙方在私人合約層達成一致。
3、私人合約通知買方付款。
4、買方將一部分資產從公開主鏈轉移到 z-contract 層,通過 z-tokens 完成隱蔽支付。
5、買方通知私人合約支付已經完成。
6、私人合約驗證支付已經完成,通知賣方轉移資產。
7、賣方同樣通過 z-contract 層的 z-tokens 完成隱祕轉移。
8、賣方通知私人合約轉移已經完成。
9、私人合約驗證轉移已經完成,此時交易完成最終結算。
10、其他節點只能看見公開賬本上的餘額,監管者可以查看 z-contract 層的 z-tokens 轉移。

通過增加一層平行的支付網絡,交易過程中無需暴露全部的信息,資產在鏈上清算避免雙花和中心化的風險。同時,也給監管者提供了便利。

靈活的共識機制 - 追求最終性 (Finality)

Quorum 可以支持三種共識機制,包括 PoA、RAFT 和 IBFT。

在介紹這幾種共識機制之前,我們發現 Quorum 並沒有支持最常見的 PoW (工作量證明) 或者 PoS (權益證明),爲何呢?

PoW 和 PoS 都屬於 Nakamoto Consensus,任何人都可以隨時加入和退出節點,這種共識機制通過節點之間某種公平的「投票」選擇記賬人,由於節點沒有身份,可以自由地創造,相互不信任,因此投票資源必須是稀缺性的。在 PoW 機制下,稀缺資源是物理算力,而在 PoS 下,這種資源是經濟權益。無需准入帶來了去中心化的制衡,但節點之間的「競爭」記賬不可避免地犧牲了速度與效率。

對於私有鏈和聯盟鏈,Nakamoto Consensus 並不合適。出於安全和隱私的考慮,私有鏈和聯盟鏈的節點之間必須相互許可,才能加入網絡。而相互許可的前提是每個節點都有固定的身份,這種身份讓節點之間成爲信任或者部分信任節點。基於部分信任或者完全信任節點,可以採用高性能的容錯分佈式系統 Byzantine Fault Tolerant (BFT),如 PoA 和 IBFT;或者容故障分佈式系統 Crash Fault Tolerant (CFT),如 RAFT。

PoA

PoA 的全稱是 Proof of Authority (權威證明)。PoA 基於一組有身份的節點,輪流進行記賬。換句話說,每個節點在用自己的身份和權威作爲擔保。每個區塊只需要一個簽名確認,這大大提高了出塊速度和每秒能夠吞吐的交易。

JPM Coin 背後的「企業級以太坊」Quorum 如何滿足傳統銀行業需求

雖然有中心化的風險,不過 PoA 的設計中爲了限制單個節點的權力,每個節點的簽名間隔需要大於 N (總節點數) / 2。

Quorum 在早期開發階段使用了 PoA 共識,但在正式進入生產階段卻剔除了 PoA,這又是出於什麼原因呢?

這就涉及到金融結算網絡最看重的另一個特性 - 最終性 (Finality),也可以說,抗分叉 (Non-forkable)。

JPM coin 要求抗分叉的前提,排除了其使用包括 PoW、PoS 和 PoA 的可能。

因爲在這幾種共識機制下,雖然區塊鏈按一致的規則檢驗和收錄區塊,但也會出現同時有多個相同高度的正確區塊產生。一般而言,全網會迅速歸集到最長的同一鏈上。但當涉及規則改變時,即網絡中存在遵守不同的規則的節點時,就會存在區塊鏈分叉且不能迅速回歸同一鏈的可能,也就是我們常說的「分叉」。

參考比特幣現金對比特幣分叉以及其自身的影響,你就可以理解作爲每天處理 6 萬億美金的摩根大通銀行,一定不希望這些交易因爲分叉而無效。

相對而言,Quorum 支持的另外兩種共識機制 : RAFT 和 IBFT 都是抗分叉的。

RAFT

RAFT 其實是一種已經廣爲使用的傳統分佈式一致性協議,應用在包括 Kubernetes, Docker Swarm 等容器集羣管理系統。RAFT 對於容故障、可信節點,並且需要更快出塊時間和最終性的封閉聯盟非常有效。

與以太坊相比,RAFT 也有自己的節點。相對於以太坊任何節點都可以出塊,RAFT 的節點分爲 Leader 、Follower 以及暫時的 Candidate。

JPM Coin 背後的「企業級以太坊」Quorum 如何滿足傳統銀行業需求

Leader 是負責生產區塊的唯一節點,Follower 監聽 Leader 的「心跳」,並收取 Leader 傳遞過來的區塊。

如果 Follower 在其週期內沒有收到 Leader 發來的心跳,則會認爲 Leader 已經死了。此時,沒有收到 Leader 心跳的 Follower 重新發起選舉,自己的身份從 Follower 改變爲 Candidate。它會給自己投一票,然後發送投票申請到其他 Follower,自己成爲 Leader。

接受心跳的目的是爲了抗系統故障,新的節點作爲 Leader 繼續出塊。

值得注意的是,當新的交易產生後, Leader 並不會馬上記錄到鏈上,而是等收到所有 Follower 的確認回執後,記錄並廣播一個執行的消息,之後所有收到執行消息的 Follower 纔會將區塊記錄在本地的鏈上。這樣就可以避免分叉,確保最終性。

RAFT 機制下的默認出塊時間間隔是 50 ms,而且只有在有交易發生時纔會出塊,大大節省了儲存空間。

但 RAFT 機制也有不足之處,要使其得以運轉的前提是全部節點是誠實的,RAFT 雖然可以容單點故障,但是不具備容錯,無法防止節點作惡和篡改歷史數據。

IBFT

IBFT,全稱 Istanbul Byzantine Fault Tolerance (伊斯坦布爾拜占庭容錯) 可以在抗分叉的基礎上,防止部分節點作惡。

拜占庭將軍問題是一個古老的關於容錯的一致性協議。想象拜占庭軍隊圍住一個敵方城市,拜占庭部隊分開駐紮在城外,每個部分僅由自己的將軍指揮。將軍們只能通過信使和其它將軍進行通信。在觀察了敵情之後,他們必須制定一個一致行動的計劃。結果表明:只要超過 2/3 的將軍忠誠時即可達成一致。

JPM Coin 背後的「企業級以太坊」Quorum 如何滿足傳統銀行業需求

IBFT 是一種實用拜占庭容錯算法,與 RAFT 完全相信 Leader 不同,IBFT 的前提是包容 1/3 不誠實節點,通過驗證者多輪投票,達到彼此一致後出塊。

出塊主要需要三個階段:預準備 (pre-prepare) 、準備 (prepare) 和確認 (commit)

JPM Coin 背後的「企業級以太坊」Quorum 如何滿足傳統銀行業需求

首先,從全網節點輪流選舉出一個主節點(Leader)負責生成區塊,主節點在收到交易請求後生成新區塊。

預準備(Pre-prepare):主節點向所有備份節點發送預準備消息,提議節點將從網絡收集到需放在新區塊內的多個交易排序後存入列表。

準備 (Prepare):所有備份節點接收到交易列表後,根據排序模擬執行這些交易。所有交易執行完後,廣播基於交易結果計算新區塊的哈希摘要。

確認 (Commit):如果一個節點收到的 2/3 個其它節點發來的摘要都和自己相同,就向全網廣播一條 commit 消息。

如果節點收到 2/3 條 commit 消息,即可提交新區塊及其交易到本地的區塊鏈和狀態數據庫,隨機進入下一輪區塊高度。

可以看到,每個區塊經過三個階段的驗證,即使 1/3 的節點出現故障或者作惡,也可以正常添加。如果主節點作惡,備份節點之間可以相互檢查,在衝突時提交一次 Round Change,選取新的主節點。

由於在每個區塊高度只有一個節點負責出塊,不會有分叉的風險。而且賬本不可篡改,試圖修改歷史紀錄需要獲取所有備份節點和主節點的私鑰。與 PoW 相比,IBFT 沒有競爭機制,出塊速度更快。

不過,IBFT 的劣勢也很明顯,多個驗證階段的結構下讓消息數量與節點數量成指數級增長,因此 IBFT 的節點數不能太多,通常用作企業級和政府的網絡。

綜合來看,節點准入、注重隱私、交易最終性、支持靈活的共識機制滿足不同商業場景下的需求,並且監管友好是傳統金融巨頭髮行加密貨幣看重的特點和條件。

雖然摩根大通對 Quorum 區塊鏈的建設和信息非常開放,但遺憾地是,官方並沒有公開 JPM coin 使用何種共識機制的信息。推斷來看,JPM coin 會根據不同的應用場景在 RAFT 和 IBFT 中選擇。如果所有的節點都是摩根銀行信任的夥伴,那麼 RAFT 是不二的選擇;如果只部分信任成員銀行,IBFT 將是最爲可行的方案。

這也意味着,至少在早期階段,JPM coin 的對象是相對封閉的聯盟。但摩根幣和一般用戶並不是沒有任何關係,摩根大通的清算網絡可以大大增加銀行之間的網絡效應,而且爲跨境支付提供了更加安全的合規信息交流協議。銀行本身效率的提升和成本的降低,對終端用戶來說無疑是一件好事。

更重要的是,摩根幣的推出是對以太坊 ,包括區塊鏈應用落地的一個巨大推動。從技術層面,兼容以太坊合約的 Quorum 網絡完全有可能在之後和已有的公共區塊鏈進行互通,在中心化與點對點的貨幣系統之間搭建橋樑。

回看《JPM Coin 三部曲 (上 ) - 深入理解摩根幣的運作》

來源鏈接:mp.weixin.qq.com