交易背書 - fabric交易併發的基礎

Hyperledger Fabric和其他許多區塊鏈的關鍵區別之一,就在於Fabric區塊鏈的交易執行過程:Fabric交易需要首先通過節點的背書,然後再進行交易排序,最後才利用有序交易進行賬本的更新。本文將介紹Hyperledger Fabric所採用的執行-排序-驗證這一三步交易模型的工作原理,以及引入背書環節對Hyperledger Fabric區塊鏈性能的有益作用。

Hyperledger Fabric相關開發教程:

1、交易的生命週期:Hyperledger Fabric vs. 其他區塊鏈

在其他區塊鏈平臺中,交易生命週期基本由如下環節構成:

  • 排序:交易有序加入賬本,然後擴散到所有節點
  • 執行:交易在所有節點上按順序依次執行並更新賬本

爲了讓所有節點保持一致的狀態,交易必須確定性執行,也就是說,無論何時何地,同樣的交易必須產生同樣的結果。這一要求對智能合約形成了很強的約束,也是智能合約通常需要使用領域特定語言(DSL)來開發的原因之一,因此使用像Java或Go這樣的通用開發語言基本上無法保證確定性。

在Hyperledger Fabric中,交易的聲明週期則有所不同:

  • 執行:交易(通過智能合約)以任意順序執行,甚至可以並行執行
  • 排序:當足夠數量的節點對交易結果達成一致,該交易就會 被加入賬本並擴散給所有節點。
  • 驗證:每個節點驗證並按順序執行交易,從而更新賬本

首先需要注意的一點是,交易的執行和對賬本的實際更新被拆分爲兩個環節,這一拆分帶來一些有益的作用:

  • 所有節點都需要更新賬本,因此所有節點都需要執行驗證步驟。 但並不是所有的節點都需要執行智能合約。Hyperledger Fabric 使用背書策略來定義哪些節點需要執行交易。這意味着指定的 鏈碼(智能合約)不必開放給所有的節點 —— 那些不在背書策略中 的節點不需要由訪問鏈碼的權限。
  • 交易可以在被排序之前先執行。這是的節點可以並行執行交易, 從而提高系統的吞吐量
  • 在Fabric的三步交易模型中,在交易被添加到賬本之前,其鏈碼 執行結果是顯式達成一致的,其他區塊鏈的兩步交易模型使用 確定性的鏈碼,本身就隱含了節點之間就智能合約的執行結果 達成一致。顯式達成一致可以讓Fabric使用非確定性的鏈碼,
    這也是爲什麼我們可以使用Go、Java和Node.js編寫Fabric鏈碼 的原因。

2、Hyperledger Fabric的交易背書策略

Hyperledger Fabric允許用戶自己定義鏈碼執行的策略。這些背書策略定義了在交易被加入賬本之前,哪些節點需要就交易結果達成一致。Fabric提供了一個小型的DSL來定義背書策略。下面展示了一些背書策略樣例:

  • 節點A、B、C和F都需要對類型爲T的交易進行背書
  • 通道中的大部分節點必須對類型爲U的交易進行背書
  • A、B、C、D、E、F、G中的至少3個節點必須對類型爲V的交易進行背書

背書策略並不保證正確的鏈碼安裝在正確的節點上。然而,背書和安裝鏈碼的確存在類似的機制,我們將在後續教程中介紹這一點。

3、Hypereledger Fabric交易背書的實現機制

到目前爲止,我們都是鬆散地使用交易(transaction)這一術語。在排序-執行模型中,鏈碼執行和賬本更新被合二爲一 —— 交易。在Fabric中,這兩個概念是分開的,因此交易本身也被拆分。

Fabric從交易提議(Transaction Proposal)開始。這是一個用來觸發鏈碼執行的數據包。交易提議被髮送給用於背書的節點。背書節點執行鏈碼,如果成功的話就生成一個實際的賬本交易。背書節點簽名建議並返回交易提議的響應,這是執行-排序-驗證模型中的執行步驟。

一旦交易提議的創建者收到足夠的可以滿足背書策略的簽名,它就可以將交易(以及簽名)提交以便添加到賬本中,這就是排序步驟。

4、結論

Hyperledger Fabric在區塊鏈交易方面採取了一個新穎的思路,將智能合約的執行與賬本的更新分開使它可以提高交易吞吐量,支持更細粒度的隱私控制,實現更靈活強大的智能合約。而這些特性得以實現的一個關鍵因素就是在交易加入賬本之前進行顯式地交易背書。


原文鏈接:Hyperledger Fabric交易背書的深入理解 - 匯智網

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章