1. 程式人生 > >Corda 核心概念:共識 Consensus

Corda 核心概念:共識 Consensus

概要

  • 為了交易能夠被提交,transaction 必須要同時滿足有效性(validity) 和 唯一性(uniqueness)的共識
  • Validity consensus 需要 transaction 和 它的所有依賴都是合約有效(contractual validity)的,也就是都能通過 contract code 的驗證的
  • Uniqueness consensus 可以避免“雙花”

兩種型別的共識

判斷一個提議的交易是否是一次有效的賬本更新要達到兩種型別的共識:

  • 有效性共識(Validity Consensus):這給是交易的參與者在提供他們簽名之前去校驗的
  • 唯一性共識(Uniqueness Consensus) :這個只會被 notary service 去驗證

有效性共識 Validity Consensus

有效性共識是關於驗證下邊所描述的條件對於提交的 transaction 和生成該次 transaction 的 inputs 的交易鏈中的每次 transaction 都必須要滿足:

  • Transaction 中的 input 和 output 的 contracts 所接受
  • Transaction 得到了所有要求的簽名

僅僅檢查提議的交易本身資訊是不夠的。我們還需要檢查跟產生當前這個 transaction 的 inputs 有關的所有以前的 transaction 鏈。

這個被稱作 walking the chain。假設,例如網路中的一個節點提交了一個交換債券的一筆交易。我們只有瞭解下邊的情況才能確保這個債券的交換是有效的:

  • 這個債券應該是由中心銀行發行的,而且應該是在一次有效的發行交易中
  • 關於這個債券的後續交易記錄也應該都是有效的

確保兩點都滿足的唯一方式就是檢視整個交易鏈。我們可以用下圖表示:
檢視交易鏈
當確認一個提交的交易的時候,給定的一方可能沒有它需要驗證的交易鏈上的所有交易資訊。這種情況下,他可以向交易的提出方索要缺少的那部分交易。交易的提出方應該永遠會有整個的交易鏈資訊,因為他們應該在驗證之前的交易中已經獲取了相關的交易鏈資訊。

唯一性共識 Uniqueness consensus

設想一下 Bob 持有有效的由中央銀行發行的 $1,000,000 現金 state。Bob 可以建立兩個交易提案:

  • 一筆交易要跟 Charlie 用這 $1,000,000 交換 £800,000
  • 一筆交易要跟 Dan 用這 $1,000,000 交換 €900,000

這會是一個問題,因為儘管這兩筆交易都可以通過有效性共識,但是 Bob 確實現了一次“雙花 double spend” 他的美元來獲得了兩倍價值的 GBP 和 EUR。我們可以用下圖表示這個流程:
雙花的例子
為了避免這樣的問題發生,一個有效的交易提案同時也要滿足唯一性共識。唯一性共識要求一個 transaction 的 input 不能被任何其他的 transaction 消費掉過。

當一個交易中的一個或多個 inputs 已經被其他的交易消費掉的情況,通常被稱為雙花 double spend,那麼相關的交易應該被視為無效的交易。

唯一性共識是有 notaries 提供的。