6 月 18 日,Facebook 加密貨幣項目 Libra 發佈的白皮書引發了區塊鏈業內人士的普遍關注。Nervos 團隊及社區夥伴們也對 Libra 進行了大量的討論。git
Nervos 合夥人王博認爲:程序員
全部討論 Libra 是否是一個好貨幣,算不算貨幣以及 Facebook 搞的聯盟鏈是否是真區塊鏈的討論都搞錯了重點。Libra 白皮書第一句寫得很是清晰「... 爲十億人服務的金融基礎設施。」貨幣只是金融基礎設施的基礎。有了 Move 智能合約,有了用戶和基礎資產,Libra 上將誕生有史以來摩擦最小的金融服務。會有些什麼服務呢?餘額寶、花唄、借唄、工資理財,等等。區別是這些服務頗有多是由全球化的第三方提供的,並且他們之間能夠互相依賴:房貸能夠在鏈上被分割成小額理財出售給其餘用戶。如今,Open Banking 剛有了個概念,API Bank 剛有了文檔,針對它們的降維打擊就來了。github
區塊鏈發展到如今展示了兩個層面的獨特價值。一個是資產的去中心化發行,就是所謂的傳統公鏈價值。一個是金融的去中心化服務,它服務的對象能夠是傳統金融資產,好比貨幣,債券等。後者對世界的價值一點不比前者小。Libra 就是定位在後者的頭部公鏈。編程
Libra 定位在金融基礎設施,很準確頗有價值。它能夠大幅下降金融摩擦,爲用戶提供價值。segmentfault
Libra 其中的一個亮點是提到了「First-Class Resources」這個概念,在 Move 編程語言的白皮書中這樣寫道:「First-class Resources 是一個很是廣泛的概念,程序員可使用實現安全的數字資產(的發行),還能夠編寫正確的商業邏輯來包裝資產和實施訪問控制策略。」安全
First-class Resources 翻譯過來是「資源是一等公民」,在 Libra 中用戶能夠發行本身的資產,而且能夠被用戶及腳本直接引用和操做。ruby
而關於這個概念,實際上 Nervos 架構師 Jan 在去年的文章《First-class Asset》中已經對這個概念進行了深刻的分析。架構
區塊鏈上的底層模型設計,實際上就是分別以比特幣和以太坊爲表明的兩種模型:編程語言
而實際上兩者的差別千差萬別,表明了兩種思路。區塊鏈
以太坊的 Account 模型和銀行帳戶相似,在帳戶中記錄用戶的餘額。帳戶是用戶直接操做的對象,資產的轉移是由帳戶做爲用戶的代理實現。可是當須要對用戶定義的資產進行操做的時候,則須要引入第三方,即託管加密資產的智能合約執行資產轉移流程。
而比特幣的 UTXO 全名爲「Unspent Transaction Output」,每一個 UTXO 都是比特幣,UTXO 中都經過一段鎖定腳本(lock script)記錄這個比特幣的全部者,咱們能夠經過比特幣腳本對 UTXO 進行編程實現部分業務邏輯,比特幣就是一種「First-class Coin」。
而 Nervos CKB 中使用 Cell 模型進行構建,Cell 是一種通用化的 UTXO 模型,能夠存儲任意類型的數據,並在基於 RISC-V 指令集編寫的 CKB-VM 加持下,可以實現更多的商業邏輯。Cell 能夠被直接引用,做爲參數傳遞給腳本,Cell 的全部者能夠直接更新 Cell 中保存的狀態,不須要通過任何的第三方。
經過 Cell 模型能夠發行用戶定義資產(User Defined Asset),能夠這樣來構造:
實現 First-class 以後,最大的區別就是:用戶掌握全部權,可以對資產進行直接的操做,而不是如 Account 模型那樣調用合約帳戶進行間接操做。
特別是,在不一樣區塊鏈之間資產的遷移過程當中,咱們須要遷移的是資產而不是帳戶,這方面 Account 模型就受到了很大的阻力,好比知名的 Kelvin Fichter 提出的 EVM-On-Plasma 問題。
Asset Cell 能夠被引用,能夠直接做爲其它合約的參數傳入。只要引用 Asset Cell 的 input 有正確的用戶受權,合約就能夠正常的使用用戶的 Asset Cell。
資產定義與資產狀態分離。Asset Definition Cell 的全部者是資產的發行者,而 Asset Cell 是屬於每一個用戶的。Asset Cell 的受權邏輯和業務邏輯分離,全部權徹底由本身的 lock 決定,與 Asset Definition 的邏輯無關,這意味着 First-class Asset 不是託管在資產發行者、開發者或是資產定義合約的手中,而是真正徹底屬於用戶的。
用戶的資產相互隔離,用戶資產狀態獨立,對經濟設計問題帶來了解決方案。公鏈的經濟模型須要關注狀態存儲激勵問題,用戶在區塊鏈上保存狀態不只須要支付寫入費用,還應該承擔與存儲時間成正比的存儲成本。在以太坊提出的狀態租賃方案中,最大的痛點是針對用戶的資產狀態混合保存的合約(如 ERC-20)狀態租賃收取,而在 Cell 模型中,只要 Asset Definition Cell 的 lock 邏輯容許,資產定義能夠獨立更新。
除了經過 Cell 模型實現了 First-class Asset 之外,Nervos CKB 還將計算移到了鏈外,鏈上只須要對狀態進行驗證的邏輯。獨特的狀態模型和計算驗證分離,這兩點決定了將來在 Nervos CKB 上會出現新的、有趣的 DApp 範式。
從 CKB 白皮書完成到如今的一年半時間裏,咱們看到愈來愈多的人開始關注和討論 First-class State 和 First-class Asset 這兩種新的思路(雖然你們用的名詞各自都不同),這些進展讓咱們很是興奮。若是你有興趣對 First-class State 和 First-class Asset 進行更多的探討,或是在 CKB 的編程模型上有什麼有趣的想法,歡迎聯繫咱們討論:
https://talk.nervos.org
CKB 的代碼已經徹底開源,這篇文章介紹的內容在代碼中都已經實現。歡迎給咱們的代碼提出各類意見:
https://github.com/nervosnetw... (CKB 上用 Ruby 腳本編程的示例,理解 CKB 上編程模型的最佳入口)
https://github.com/nervosnetw...
https://github.com/nervosnetw...
文:Ryan