天天看點

基于以太坊的聯盟鍊?Quorum機制初探(上)目錄1. Quorum是什麼?2. Quorum的結構3. TransactionEND

導讀:摩根大通的Quorum平台是區塊鍊行業的關注熱點(Quorum是由摩根大通最初在去年秋季公布的一種基于以太坊的區塊鍊網絡),并且摩根大通近期與零币電子貨币公司(Zerocoin Electronic Coin Company)的合作更是引發熱議。有專家稱,這種将零知識密碼學與Quorum相結合的舉措,是區塊鍊行業的一大進步,因為這樣一來,以太坊将建構更适合的企業級解決方案,并推動區塊鍊的企業應用。而摩根大通也将通過這個平台擴大市場占有率,保證自己的前沿地位。

本文作者:UniZhu 編輯:KC

目錄

  1. Quorum是什麼?
  2. Quorum的結構
  3. 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機制初探(上)目錄1. Quorum是什麼?2. Quorum的結構3. TransactionEND

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

提供的。

兩者的差別可以參考下圖:

基于以太坊的聯盟鍊?Quorum機制初探(上)目錄1. Quorum是什麼?2. Quorum的結構3. TransactionEND

在以太坊中,每個節點都會維護一份本地的 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的詳細流程可以參考下圖:

基于以太坊的聯盟鍊?Quorum機制初探(上)目錄1. Quorum是什麼?2. Quorum的結構3. TransactionEND

在這個例子中,有一筆

Transaction AB

跟聯盟A和聯盟B相關,與聯盟C的節點無關。

注:每個Party都有自己的公鑰和私鑰,Party内所有成員都有這對公私鑰。
  1. DAPP 将 TX 發送給PartyA的節點。節點收到 TX 後将上文提到的

    privateFor

    字段的值設定為包含PartyA和PartyB的public key的數組:

    ["public_key_A", "public_key_B"]

  2. 節點将 TX 發送給其對應的 Transaction Manager。
  3. Transaction Manager 呼叫與其關聯的 Enclave,并要求 Enclave 加密這筆 TX。
  4. PartyA 的 Enclave 校驗擷取到的PartyA私鑰,如果确認通過則進行如下動作:

    i. 生成一個密鑰(symmetric key)。

    ii. 用上一步生成的symmetric key來加密 TX 的内容。

    iii. 用SHA3-512來擷取加密後的TX内容的hash值。

    iv. 将

    i

    生成的symmetric key用第一步中的public key數組的所有值加密,然後生成一個新的數組。新的數組的每個元素都是由

    i

    中的symmetric key用原來數組的public key加密生成:

    ["key_encrypted_by_publickey_A", "key_encrypted_by_publickey_B"]

    v. 将

    ii

    生成的加密TX,

    iii

    生成的hash值,

    iv

    生成的加密後的數組傳回給Transaction Manager。
  5. 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。
  6. PartyA的TX Manager收到成功回執後,将hash值傳回給其對應的Quorum節點。節點收到hash值後,用這個hash值來替換原來TX的交易内容。(參考 Transaction Processing 章節的第一張圖 )同時,将TX的

    V

    值設定為 37 或者 38。37或38就是Private Transaction的辨別。其他節點查詢後發現

    V

    的值為37或38時,就會認定其為Private Transaction。
  7. TX内容被替換後,TX就和Pbulic Transaction一樣被節點通過P2P方式廣播給整個網絡。
  8. 這條TX被某個區塊收錄到區塊資訊中。
  9. 節點收到帶這個TX的區塊後,發現這個TX的

    V

    值為37或38。然後這個TX就被認定為Private Transaction,并将此TX的内容(也就是替換後的hash值)傳給節點對應的Transaction Manager。
  10. 因為PartyC的節點不在這個Private TX的範圍内,是以其TX Manager無法在本地通過這個hash值找到對應的TX内容和symmetric key。然後TX Manager就會傳回其節點一個

    NotARecipient

    回執。PartyC的節點收到這個回執後就不會更新其本地的Private State。對于PartyB的節點,其TX Manager通過這個hash值找到了本地存儲的TX内容和symmetric key,但是由于這兩個東西是被加密存儲的,是以TX Manager将TX内容和symmetric key發送給其對應的 Enclave 進行解密。
  11. PartyB的Enclave收到TX Manger發來的資料後,用PartyB的私鑰Private Key來解密symmetric key。然後用解密後的symmetric key來解密TX的内容。解密完成後将正确的TX内容傳回給TX Manager。
  12. 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