在 corda ledger 系列教程 2 核心概念(上)–與比特幣類比 一文中,我們對 corda 系統的網絡(network)、賬本(ledger)、State 和交易(transaction)做了全方位的闡述,並在關鍵的地方和比特幣進行了對比分析,以提高大家對整個系統的感性認識。這堂課依舊採用對比和源代碼解析兩個方法結合的方式對 corda ledger 的剩餘概念進行闡述,希望給大家一個完整的印象,以便後面更深入的細節學習。還是那句話,理解和落筆之處難免會有錯誤和偏差,歡迎大家關注這個號並給我留言,我會拉你進大羣,和各個行業專家和優秀的工程師一起成長!

五、雙花攻擊(Double Spending)

在上一篇教程中,我們知道無論是比特幣中的幣,還是 corda ledger 中的 state,遵循的都是 UTXO 模型,即交易總是在消費某些幣(state)的同時,生成新的幣(state)。乍看之下這個模型很不起眼,甚至有點彆扭:我想知道我的餘額居然要把我所參與的交易遍歷一遍才能推算出來!但這其中其實有一個非常誘惑的地方,假設我發起了一筆交易,把我的 1 個比特幣轉給了 A 之後,立馬發起另一個交易,把這同一份比特幣轉給 B,如果整個比特幣網絡沒有辦法去判斷這兩筆交易的合法性,那我完全可以坐家裏不斷的發起這樣的交易來達到一些不爲人知的目的。這其實就是人們常說的雙重支付攻擊,在 corda ledger 中我們叫雙花問題。

六、鑄幣廠模型和全網驗證模型

解決雙花問題有兩個思路:

  1. 引入一個可信的中心化機構,讓其判斷交易的合法性。這個場景其實在生活中很常見,支付寶轉賬就是一個很好的例子:我通過支付寶將一筆錢轉賬給 A,支付寶一定會判斷一下我的賬戶還有沒有足夠的餘額(即轉賬行爲是否合法),判斷通過後支付寶會從我的賬戶將這筆錢扣除,並在 A 的賬戶將這筆錢增加,交易完成。所以很容易察覺出的是,支付寶始終掌握着記賬權,即我們這裏所說的可信的中心化機構,這樣的中心化機構擔任的職能往往和鑄幣廠類似,即發行貨幣和銷燬貨幣,所以這種模型又稱爲鑄幣廠模型。

  2. 但實際上我們知道比特幣系統是一個完全的去中心繫統,並不存在任何一個可信的中心化機構去保證整個系統不會遭受到雙重支付攻擊。言下之意,由於數據的完全冗餘,每一個節點都有判斷當前塊中的交易是否合法的條件。另外,這裏要強調的是,所謂的工作量證明 (Proof of Work),其實是一個隨機、公平的機制讓網絡中的某個節點獲得記賬權(以消耗計算資源爲代價,即人們常說的挖礦),隨後獲得記賬權的節點將挖出的塊全網廣播,並接受其他節點的驗證,從概率上說,一旦超過 50% 的算力認爲這個區塊(含有多筆交易)是合法的,那麼這個區塊就會被記下。也就說思路 1 中的中心化機構不存在了,取而代之的是網絡中的所有節點(記賬的細節遠比我這裏描述的複雜,有興趣的可以去了解一下比特幣記賬的細節,以及以太坊關於“叔塊”的概念,以達到全方位的認知)。

七、Notary

闡述完了“雙重支付攻擊”和解決這個問題的兩個思路,我們回過頭來看下 corda ledger 的設計。在 corda ledger 系列教程 2 核心概念(上)–與比特幣類比 中我們曾經提到過,corda ledger 在某種意義上是一個可信的網絡,甚至具備中心化的 CA 機構,這和比特幣假設的每個節點互不信任不同,因此,corda ledger 將“雙花問題”交給來一類角色爲 Notary 的節點去解決,從宏觀上看,我們完全可以將 Notary 看作鑄幣廠模型,但是細節上,由於 Notary 可以以集羣的形式存在於網絡中,並且支持多種共識算法(high-speed, high-trust 的 RAFT,low-speed, low-trust 的 BFT),因爲我們完全可以通過增加 notary 的數量,讓 corda ledger 中的節點之間變得不那麼“信任”和中心化,這其實是一種權衡,因爲完美的去中心化方案的確很難找到完美的姿勢落地於企業級項目。

八、Flow (工作流)和 Contract (智能合約)

Flow 的概念其實比較直觀,它其實擔負起將整個 corda ledger 的業務流程運轉起來的職責,包括並不限於:
  1. 負責現實世界和 corda ledger 中節點之間的交互(即暴露 rpc 請求供有權限的外部應用調用)負責 corda ledger 中節點和節點之間的交互(即我們常說的 p2p 通信)

  2. flow 通常位於 dapp 中,同時 corda ledger 中也內置了相當多的 flow 用於一些常見的自動化場景

    總之,我們可以認爲,dapp 的業務邏輯通常編碼在 flow 當中,等同於比特幣和以太坊的智能合約,而 corda ledger 中的智能合約則退化成簡單的驗證功能,供 flow 調用。

    到此爲止,corda ledger 的核心概念差不多結束了,希望大家可以認真的閱讀這兩篇文章,和比特幣進行對比的地方往往是核心中的核心,希望大家認真對待,有任何質疑和疑惑的地方,可以留言,私信我(微信號:891871898)或者在大羣討論。

非常感謝 :)