如何以 R3 Corda 實現實體資產的數位化流通

BSOS Tech
BSOS Taiwan
Published in
9 min readOct 4, 2021

隨著實體資產持續往數位流通的發展趨勢,不僅僅是資產資訊紀錄的數位化,資產本身的「憑證」及「交易」也往數位化邁進。資產數位化提供了更有效率的驗真及交易確認方式,可大幅提升風險掌控及流通效率,也有機會幫助更多的資產類型活化。

要實現此一目標,需要有一套可信的紀錄網絡,確保資產的唯一性、不可偽造並作為流通平台。分散式帳本技術的出現,提供了絕佳的技術手段。

這篇文章將以分散式帳本技術 — R3 Corda 為例,介紹在 R3 Corda 的架構下,如何實現資產及其交易的數位化。

本篇文章由 BSOS 工程師 Skeeter 研究及撰寫。

R3 Corda

  • Corda 是一個許可制的分散式帳本,最初是以服務監管式金融為藍圖而設計的。
  • Corda 網路中,參與者以節點表示;節點彼此之間互相已知,並且系統會拒絕未經授權的節點(即網路中不存在匿名的節點)。
  • Corda 網路還具備了扮演特定角色的節點,其中最主要是「公證人節點」;公證人節點被認為是值得信賴的第三方,為 Corda 敲定交易的流程提供特殊功能。
  • Corda 通信是基於無需廣播的 “Need to know” 點對點(P2P) 交易,非交易方甚至不會收到該交易存在的跡象。
  • Corda 網路是一個全連接圖,所有節點都可以向網路中任意其他節點傳送訊息/發起交易。

Corda 節點

如上圖,Corda 節點架構,最開發者來說最重要的部分就是紅框中的分散式應用程式(Cordapp)。其餘為各種基礎設施。

Cordapp 是業務流程的載體,一套完整的Cordapp,包含了數位化後資產的數據保存、資產流通/交易流程的確立、乃至於交易中雙方須遵循的合約/規定… 等等。

Cordapp 主要是由 「States」、「Contracts」以及「Flows」組成,接下來將一一介紹。

Cordapp 組件及運作原理

State

我們多次提及資產”數位化”,那 Corda 究竟是如何將資產轉換成數位化的數據並儲存的呢?

這便要提到 Corda 所設計的 — 狀態 (State)

(“Alice 有 10 美元。”) 是一種狀態。

假設 Alice 給 Bob 1 美元,那原本(“Alice 有 10 美元。”) 的狀態將會被

(“Alice 有 9 美元。”) 以及 (“Bob 有 1 美元。”)

這兩種新的狀態所取代。

這樣子的過程,我們如何以程式來表達呢?假設我們將這些狀態物件化,可以看到如下圖所示的程式化物件。

其中,左方被取代掉的舊狀態,Corda 內稱為 “已消耗狀態(Consumed State)”,右方新產生的狀態,則稱作 “未消耗狀態(Unconsumed State)”

State 是Corda 中資料儲存的基底。

Corda 的交易紀錄跟比特幣鏈一樣,採用的是 UTXO(Unspent Transaction Output) 模型。所謂的UTXO,便是以未花費的交易輸出(來自於之前的交易),作為之後交易的輸入使用,舉個例子:

如上圖中所示,假設 Alice 要給 Bob 8 BTC,在 UTXO 中流程會是這樣的:

1. 首先,Alice 必須持有足夠的 BTC,而這些 BTC 來自於之前的交易:

  • (Fred 持有 7 BTC)(Ted 持有 3 BTC),分別為Tx1 及Tx2 中的一筆未消費輸出。
  • Fred 及 Ted,分別將此兩筆未花費輸出作為Tx3 的輸入,交給Alice。於是在Tx3 交易中,Alice 獲得了兩筆未花費交易 — (Alice 持有 7 BTC)(Alice 持有 3 BTC)

2. 接下來 Alice 要將 8 BTC 交給 Bob:

  • Alice 在 Tx4 中,將 (Alice 持有7 BTC) 作為 Tx4 的輸入交給Bob。
  • 因為沒有剩餘剛好1 BTC 的未花費輸出,Alice 需要將 (Alice 持有3 BTC) 切分為兩筆,並且都作為Tx4 的輸入。(其中1 BTC 交給Bob,2 BTC 給自己)

3. 最後,在Tx4 中,Bob 獲得了 (Bob 持有7 BTC)(Bob 持有1 BTC) 兩個未花費輸出,可以在之後的交易中使用。

區塊鏈會在共識階段,檢視每筆交易中的所有輸出/輸入是否合法 — 同一筆未花費輸出,不可以做為多筆交易的輸入。 利用此機制來防止雙花的產生。

有了以上的理解,讓我們回到Corda。

Corda 上的Unconsumed States,即是UTXO 中的未花費輸出。

States 的異動歷史及最新狀態,儲存於資料庫中,在 Corda 內稱為 “保管庫(Vault)”。Vault 是對 States 相關的操作進行封裝;透過 Vault 服務所提供的介面,可以向資料庫中查詢這些 States。

在Corda 中,每一個節點(參與者),各自維護與自己相關的 States;所有節點所擁有的所有 States 的完整集合,便是分散式帳本的最終狀態。

Corda 的交易(Transaction)便是基於上述的架構實現:

  1. 首先有兩個states:
    <編號1> state(“Alice 有10 美元”) 以及 <編號7> state(“Bob 擁有元件”)
  2. 透過Tx1,Alice 以1 美元的價格向Bob 購買元件。
    該交易消耗了編號1 及編號7 兩個states,並產生了編號2、3、8 三個states。
  3. 產生出的新states 可以被於其他交易。

從圖中我們可以看出 Transaction 就是消耗 states, 並產生新的 states。其中購買是該次交易中的「指令(Command)」。

Corda Transaction 除了輸入、輸出及指令之外,也包含了其它與之相關的信息。其中比較重要的是簽名,Signers 是指令執行的參與者,可能會有多個。

比如在買賣元件的交易中,買賣雙方都必須簽名:

  • 轉移金額:Alice 須簽名;
  • 轉移元件:Bob 須簽名。

Contract

Corda 如何確保數位化資產交易的有效性?

如果將這個問題改成,“在真實世界中,交易要如何確保其法律有效性?”,那我相信答案呼之欲出,那就是 — 合約

與其他區塊鏈上的智能合約不同,Corda 是以服務監管式金融為藍圖而設計的分散式帳本,其合約設計理念亦以極力貼近真實世界合約為目標。

以一般商品買賣契約為例,合約通常記載了:甲乙方(買賣雙方)、銷售內容物、數量、議定價格、合約簽署時間,買賣雙方親筆簽名… 等等資訊。

Corda 合約亦是如此,在上一段,我們看到交易紀錄了上方所述的各項資訊;Corda 合約用於驗證交易的有效性,其輸入為一筆交易,對其內容進行驗證。

簡單來說,Corda 的合約:

  • 是一組用以驗證交易有效性的約束規則(條件) 集合;
  • Contract 與 State 成對 — 每一種 State 都有一紙合約進行約束;
  • Contract 中會明定該種 State 可以執行哪些操作(ex: 銷售提案/接受/拒絕),並且針對每種操作都會定義一組約束規則集合。

合約對於交易理由是沈默的,現金合約對於花費的理由並不關心,他所關心的是帳款以及確保現金無法被憑空創造或是銷毀。

有了State、Transaction、Contract,Corda 就具備了資產數據儲存及轉移的基本元素。

Workflow

現實世界的資產交易流程,往往是涉及多參與方的,可能會包含一連串的程序,Corda 是如何控制業務程序的呢?即 Corda 是如何確保流程的有效性?

這邊就得提到 Corda 所設計的 Flows 模型。

所謂的 Flow,指的即是業務流程,Flow 以程式的方式,定義了要完成業務流程,必須經過哪些階段(操作)、取得哪些人的簽名,類似 SOP。

Flow 通常具備發起方與回應方,以Alice 以1 美元向Bob 購買元件為例:

整個Flow 中會包含以下階段:

  1. Alice 準備好申購元件所需的元素,包含現金、要購買的元件型號(引用)…等等資料,經過合約驗證(ex: 現金合約驗證 Alice 確實擁有1 美元)、簽名後,向 Bob 發起提案。
  2. Bob 接收到 Alice 的提案後,檢視/審查該請求中的資料,並進行合約驗證(ex: Alice 確實有1 美元,Bob 確實擁有元件),並決定是否將元件販售給Alice。在對交易簽名後,向 Alice 進行答覆。
  3. 若雙方達成購買協議,會進行現金及元件的移轉(也會有相應的合約進行驗證)。
  4. 最終由公證人節點進行交易的敲定,並留下公證紀錄。

我們可以看到,在 Flow 中,將前面所提到的State、Transaction、Contract 等元素進行了整合及使用,形成了一個完整的業務流程,這就是一個完整的 Cordapp。

簡單來說,Flow 是:

  • 對業務流程的封裝。交易透過 Flow 進行處理及傳遞;
  • Flow 提供節點與節點之間交換資訊的通信能力;
  • 交易發起者稱 Initiator,交易的回應者稱 Responder,兩者之間互稱Counter Party。
  • 除了此兩者外,Corda 亦提供監管者監管交易的方式,即所謂的Observer。
  • 一個 Flow 可以包含多個 SubFlows:以購買交易為例,資金的轉移可以是一個 Flow,貨物(資產) 的轉移也是一個 Flow。

小結

本篇文章介紹 State、Transaction、Contract、Flow 構成了完整的 Cordapp;透過 Cordapps 的組合運用、交易節點共同的帳本紀錄,及公證節點的存證,R3 Corda 構築出可記錄並流通資產的數位價值網絡。

BSOS 是 R3 Corda 在台灣重要的技術夥伴,BSOS 的供應鏈金融 SaaS 產品亦支援 Corda 平台,歡迎對實體資產數位化有興趣朋友,與我們交流聯繫。

--

--

BSOS Tech
BSOS Taiwan

Dedicated to connecting real-world assets with crypto world and unlocking the value of supply chain finance