導讀:摩根大通的Quorum平台是區塊鍊行業的關注熱點(Quorum是由摩根大通最初在去年秋季公布的一種基于以太坊的區塊鍊網絡),并且摩根大通近期與零币電子貨币公司(Zerocoin Electronic Coin Company)的合作更是引發熱議。有專家稱,這種将零知識密碼學與Quorum相結合的舉措,是區塊鍊行業的一大進步,因為這樣一來,以太坊将建構更适合的企業級解決方案,并推動區塊鍊的企業應用。而摩根大通也将通過這個平台擴大市場占有率,保證自己的前沿地位。
本文作者:UniZhu 編輯:KC
目錄
- Quorum是什麼?
- Quorum的結構
- Transaction
1. Quorum是什麼?
Quorum 是由 J.P.Morgan 推出的企業級分布式賬本平台。在以太坊的基礎上,Quorum額外提供了聯盟鍊的服務。在公有鍊方面,Quorum繼承了以太坊的協定及其用戶端Geth。
Quorum 和以太坊的主要差別:
- 提供了Transaction和Contract的私有化功能。
- 多種基于投票機制的共識方式。
- 網絡與節點的權限管理。
- 更高的性能。
Quorum 的主要元件:
- Quorum Node (節點)
- Constellation - Transaction Manager (用于私有Transaction的管理)
- Constellation - Enclave (用于加解密私有Transaction的資訊)
2. Quorum的結構
Quorum Node
Quorum 節點的設計主要沿襲以太坊的 geth。面對日益壯大的以太坊社群,Quorum 希望能借助以太坊越來越完善的節點設計。是以,未來每次 geth 的 release 版本 Quorum 都會針對性的做更新調整。
為了适配其企業級的聯盟鍊功能,Quorum 同時還對 geth 做了部分調整:
1. 用其自己實作的基于投票機制的共識方式 “QuorumChain” 來代替原來的 “Proof of work” 。
1. 在原來無限制的P2P傳輸方式上增加了權限功能。使得P2P傳輸隻能在互相允許的節點間傳輸。
1. 原來區塊中的 “global state root” 被替換成了 “global public state root”。
1. 原來的 state 存儲被分成了兩部分,分别存儲 public state 和 private state。
1. 修改區塊校驗邏輯使其能支援 private transaction。
1. Transaction 生成時支援 transaction 内容的替換。這個調整是為了能支援聯盟中的私有交易。(後面的 Transaction Processing 章節會提到)
Constellation
Constellation 子產品的主要職責是支援 private transaction。Constellation 由兩部分組成:Transaction Manager 和 Enclave。Transaction Manager 用來管理和傳遞私有消息,Enclave 用來對私有消息的加解密。
Transaction Manager
在一次私有交易中,Transaction Manager 會存儲私有交易的内容,并且會将這條私有交易内容與其他相關的 Transaction Manager 進行互動。同時它也會利用 Enclave 來加密或解密其收到的私有交易。
Enclave
在分布式賬本中,密碼學被廣泛的運用在交易真實性校驗,成員校驗,曆史資訊追溯等方面。為了能更有效率的處理消息的加密與解密,Quorum 将這個功能單獨拉出并命名為 Enclave 子產品。Enclave 和 Transaction Manager 是一對一的關系。
3. Transaction
在 Quorum 中有兩種交易類型,”Public Transaction” 和 “Privat Transaction”。在實際的交易中,這兩種類型都采用了以太坊的 Transaction 模型,但是又做了部分修改。Quorum 在原有的以太坊 tx 模型基礎上添加了一個新的 “privateFor” 字段。同時,針對一個 tx 類型的對象添加了一個新的方法 “IsPrivate”。用 “IsPrivate” 方法來判斷 tx 是 public 還是 private,用 “privateFor” 來記錄 tx 隻有誰能檢視。
Public Transaction
Public Transaction 的機理和以太坊一緻。TX 中的交易内容能被鍊上的所有人通路到。
Private Transaction
Private Transaction 雖然被叫做 “Private”,但是在全網上也會出現與其相關的交易。隻不過交易的明細隻有與此交易有關系的成員才能通路到。在全網上看到的交易内容是一段hash值,當你是交易的相關人員時,你就能利用這個hash值,然後通過 Transaction Manager 和 Enclave 來獲得這比交易的正确内容。這在 Transaction Processing 章節中會詳細介紹。
Transaction Processing
Public Transaction的處理流程和以太坊的 TX 流程一緻。TX 廣播全網後,被礦工打包到區塊中。節點收到區塊并校驗區塊中的 TX 資訊。然後根據 TX 資訊更新本地的 State。
Private Transaction也會将 TX 廣播至全網。但是它的 TX payload已經從原來的真實内容替換為一個hash值。這個hash值是由
Transaction Manager
提供的。
兩者的差別可以參考下圖:
在以太坊中,每個節點都會維護一份本地的 StateDB 來快速的查詢一些資訊。所有節點中的 StateDB 都會進行共識進而保證大家的資料一緻。在Quorum中,因為Private TX的存在,這種設計就會出現問題。由于隻有部分節點能接觸真實的資料,那就導緻了這部分節點的StateDB内容和其他節點會存在差異,最終無法達成共識。為了解決這個問題,Quorum将原來的StateDB分成兩部分,Public State 和 Private State。Public State會進行全網的共識,Private State則隻記錄 Private Transaction 相關的資訊。
Private Transaction Process Flow
Quorum中一個Private Transaction的詳細流程可以參考下圖:
在這個例子中,有一筆
Transaction AB
跟聯盟A和聯盟B相關,與聯盟C的節點無關。
注:每個Party都有自己的公鑰和私鑰,Party内所有成員都有這對公私鑰。
- DAPP 将 TX 發送給PartyA的節點。節點收到 TX 後将上文提到的
字段的值設定為包含PartyA和PartyB的public key的數組:privateFor
。["public_key_A", "public_key_B"]
- 節點将 TX 發送給其對應的 Transaction Manager。
- Transaction Manager 呼叫與其關聯的 Enclave,并要求 Enclave 加密這筆 TX。
-
PartyA 的 Enclave 校驗擷取到的PartyA私鑰,如果确認通過則進行如下動作:
i. 生成一個密鑰(symmetric key)。
ii. 用上一步生成的symmetric key來加密 TX 的内容。
iii. 用SHA3-512來擷取加密後的TX内容的hash值。
iv. 将
生成的symmetric key用第一步中的public key數組的所有值加密,然後生成一個新的數組。新的數組的每個元素都是由i
中的symmetric key用原來數組的public key加密生成:i
v. 将["key_encrypted_by_publickey_A", "key_encrypted_by_publickey_B"]
生成的加密TX,ii
生成的hash值,iii
生成的加密後的數組傳回給Transaction Manager。iv
- PartA的Transaction Manager會把加密後的TX以及加密後的symmetric key儲存到本地,并用從 Enclave 中擷取的 hash 值作為索引。另外Transaction Manager會把hash值,加密後的TX,public_key_B加密的symmetric key這三項通過HTTPS發送給PartyB的Transaction Manager。PartyB的Tx Manager收到資料後,同樣将加密後的TX和symmetric key儲存到本地,并用收到的hash值作為索引。處理完後,PartyB的TX manager發送一個成功的回執給PartyA的TX manager。
- PartyA的TX Manager收到成功回執後,将hash值傳回給其對應的Quorum節點。節點收到hash值後,用這個hash值來替換原來TX的交易内容。(參考 Transaction Processing 章節的第一張圖 )同時,将TX的
值設定為 37 或者 38。37或38就是Private Transaction的辨別。其他節點查詢後發現V
的值為37或38時,就會認定其為Private Transaction。V
- TX内容被替換後,TX就和Pbulic Transaction一樣被節點通過P2P方式廣播給整個網絡。
- 這條TX被某個區塊收錄到區塊資訊中。
- 節點收到帶這個TX的區塊後,發現這個TX的
值為37或38。然後這個TX就被認定為Private Transaction,并将此TX的内容(也就是替換後的hash值)傳給節點對應的Transaction Manager。V
- 因為PartyC的節點不在這個Private TX的範圍内,是以其TX Manager無法在本地通過這個hash值找到對應的TX内容和symmetric key。然後TX Manager就會傳回其節點一個
回執。PartyC的節點收到這個回執後就不會更新其本地的Private State。對于PartyB的節點,其TX Manager通過這個hash值找到了本地存儲的TX内容和symmetric key,但是由于這兩個東西是被加密存儲的,是以TX Manager将TX内容和symmetric key發送給其對應的 Enclave 進行解密。NotARecipient
- PartyB的Enclave收到TX Manger發來的資料後,用PartyB的私鑰Private Key來解密symmetric key。然後用解密後的symmetric key來解密TX的内容。解密完成後将正确的TX内容傳回給TX Manager。
- TX Manager收到解密的TX後通過EVM執行TX裡面的内容。執行完成後将執行結果傳回給Quorum節點,并更新Quorum節點的Private State。
END
後續内容:
- QuorumChain Consensus
- Raft Consensus
- Security & Network Permissioning
References:
Quorum Wiki
Quorum Github Main Page
Quorum Official Page