亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

First-class Asset概念是什么

發布時間:2022-01-14 09:19:44 來源:億速云 閱讀:115 作者:iii 欄目:互聯網科技

這篇文章主要介紹“First-class Asset概念是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“First-class Asset概念是什么”文章能幫助大家解決問題。

First-class Asset

喜歡函數式編程的工程師應該很熟悉一個名詞:First-class Function,翻譯成中文應該叫“頭等函數”或者“一等函數”。First-class Function指的是一類編程語言,在這些語言中函數是一個完全獨立的概念:函數可以被當作值賦給一個變量,可以被當作參數傳遞給其他函數,也可以被當作返回值從其它函數傳出來。在這樣的語言中我們可以像操縱數據一樣操縱函數,所以在這些語言中函數和數據一樣是“一等公民”(First-class citizen)。First-class Function是函數式語言的一個關鍵特性,很多函數式編程的強大能力來源于此。

Nervos CKB使用Cell模型來構建整個共同知識庫的狀態。Cell模型是一個非常簡單但是與現有區塊鏈設計非常不同的狀態模型,我們在設計Cell模型的時候已經意識到,基于Cell模型的DApp將擁有一些非常不同的性質,就像函數式編程和面向對象編程會產生風格迥異的設計模式和程序特性一樣。在這篇文章中,我想闡述Cell模型可以支持的一種非常有趣的DApp設計模式,我們把它叫做First-class Asset,因為通過它我們可以將用戶自定義的加密資產變成區塊鏈中的“一等公民”。

狀態模型的快速入門

在Cell模型之前,各種區塊鏈使用的狀態模型基本上就是兩種:UTXO模型和Account模型。

使用UTXO模型的代表是比特幣。UTXO是未被花費的交易輸出(Unspent Transaction Output)的縮寫,一個UTXO可以簡單的理解為是一個比特幣,然而和一般的硬幣不同,每一個UTXO的面值都是不一樣的。每個UTXO中都通過一段鎖腳本(lock script)記錄了這枚硬幣的所有者是誰,同時保證只有所有者能夠花費這枚硬幣。每一個比特幣全節點都會維護當前所有UTXO的集合,這個集合我們就稱為比特幣賬本的當前狀態(即當前的賬本)。每一次比特幣轉賬都是一個從UTXO集合中刪除幾個硬幣(屬于付款方)然后又增加幾個新硬幣(屬于收款方和/或付款方)的過程。由于整個賬本狀態是基于UTXO這個最小單元構建的,我們把它叫做UTXO模型。

First-class Asset概念是什么

使用Account模型的代表是以太坊。Account就是賬戶,和銀行賬戶類似,代表了資產的所有者,賬戶里面最重要的數據是余額(Balance),記錄這個賬戶持有的以太幣的數量。賬戶是資產所有者的代表,所有者可以是人(對應外部賬戶)或者智能合約(對應合約賬戶),外部賬戶通過私鑰簽名來驗證資產所有權,合約賬戶的所有權通過合約代碼來確定,合約代碼和狀態都保存合約賬戶內部。外部賬戶要轉賬的時候,用戶在交易中指明轉賬數量,賬本中的付款方賬戶余額和收款方賬戶余額就會做相應的減少和增加。由于整個賬本狀態是基于賬戶(Account)這個最小單元構建的,我們把它叫做Account模型。

First-class Asset概念是什么

First-class Coin

UTXO模型和Account模型代表了構建賬本狀態的兩種思路。賬本是所有者與資產之間關系的集合。UTXO模型以資產為基礎建模,先構建出“硬幣”的概念,再給硬幣賦予所有者的屬性;Account模型以所有者為基礎建模,先構建出“賬戶”的概念,再給賬戶賦予余額的屬性。以哪種方式作為基礎模型決定了系統中的操作的基本對象是資產還是賬戶(所有者)。

所以我們說,硬幣(Coin)是UTXO模型中的First-class citizen,每一個UTXO都是一個具有獨立標識符的對象(Transaction ID + Output Index),coin是用戶直接操作的對象(用戶在構造的交易中包含utxo),賬戶是基于coin建立的上層概念(只存在于錢包中)。因此UTXO是First-class Coin。

First-class Asset概念是什么

在Account模型中,賬戶是First-class citizen,聚合在賬戶余額中的硬幣沒有獨立的標識符。賬戶是用戶直接操作的對象,資產的轉移是由賬戶作為用戶的代理實現的,這一點在接受方是合約賬戶時體現的最為明顯。在這樣的模型下,用戶定義加密資產(例如ERC20)更像是通過第三方記賬的方式,而非點對點的方式轉移,這個差異會將第三方(這里的第三方指的是托管加密資產的智能合約)引入資產轉移流程,增加智能合約的設計復雜度(我們可以把智能合約看作在資產轉移時會自動執行的邏輯)。為了降低這種復雜度,Account模型中的交易需要加入特殊的邏輯(value字段),但是這樣的特殊邏輯只有助于原生資產,同時造成對原生資產和用戶自定義資產的不同代碼路徑。對于這些問題,Kelvin Fitcher寫過一篇Looking at ownership in the EVM 5進行了很好的分析,在此不再贅述。

First-class Asset概念是什么

有了這些背景,我們應該更容易理解CKB的這一設計理念了:

有了Cell模型,我們能夠簡化設計,并在Nervos CKB上實現作為“一等公民”的用戶定義資產(User Defined Assets),簡稱 First-class Assets.

First-class Assets與UTXO一樣,具有獨立標識符,可以被用戶及腳本直接引用和操作。

First-class State

如何實現First-class Assets呢?

無論用何種方式,我們都需要記錄所有者和資產之間的關系。這些關系記錄,本質上是經過共識的狀態。要有First-class Assets, 必須先有First-class State,而這正是Cell模型的出發點。

Nervos CKB的名字來自于Common Knowledge Base(共同知識庫)的縮寫。我們之所以把Nervos網絡中的區塊鏈稱為“共同知識庫“,是因為它的責任是持續不斷的對網絡的共同狀態形成全球共識,換句話說,CKB是一個由全球共識維護的狀態庫。一個狀態庫的基本模型,很自然的是將整個狀態劃分為更小的狀態單元組織起來。這些更小的狀態單元,就是Cell。

由于Cell是一種狀態單元,有獨立的標識符(Transaction ID + Cell Output Index),可以被直接引用,作為參數傳遞給腳本,它是CKB中的“一等公民”,也就是說狀態是CKB中的“一等公民”。Cell不僅僅是一種First-class State,而且是最簡單的一種First-class State:一個Cell中只有Capacity,Data,Lock以及Type(可選,Type可以是一段代碼或者指向一個Code Cell的Reference)四個字段。如下圖所示,Cell的所有者可以直接更新Cell中保存的狀態,不需要經過任何中間方,而在Account模型中用戶只能通過合約代碼(賬戶中的code)來操作賬戶內的狀態,狀態實際上是托管在合約手中的。

First-class Asset概念是什么

值得指出的是,有了Cell,CKB實際上就獲得了一種有狀態的編程模型。一種普遍的觀點是,以太坊編程模型的表達能力來自圖靈完備的虛擬機,實際上通過賬戶使得智能合約能夠保存計算狀態是一個大過EVM的優點(圖靈不完備的語言也有很強大的表達能力 1)。CKB通過Cell和CKB-VM(Simple Yet Powerful! 這得另外寫一篇文章了)的組合實現了一種新的有狀態的智能合約編程模型。這個編程模型更加適合Layer 2,因為通過分析Layer 2協議的共同模式我們可以看到,協議層之間的交互對象應該是狀態對象(State Transaction)而不是事件對象(Event Transaction),Layer 1應該是一個狀態層而不是計算層。

CKB編程模型的另一個特點是,不區分數據(狀態)和代碼。這句話的意思是,與Account模型不同,合約的狀態和代碼都可以儲存在Cell的data字段中,保存代碼的Cell可以被其它Cell引用(因為它們是First-class State!),合約的狀態和代碼不需要綁定在一起,存放在一個地方。開發者可以通過一條簡單的指令把代碼Cell或者數據Cell的內容載入運行時內存,然后根據需要自行將其解釋為代碼執行或者數據來讀寫。

First-class Asset概念是什么

有了這些底層支持,我們就可以將一個合約的代碼和狀態分開保存在不同的地方:Code Cell的code (data)字段存放代碼,而State Cell的state (data)的字段則保存狀態;在State Cell中通過type ref引用Code Cell來建立對自身保存的state的業務邏輯約束,通過lock ref引用另外一個Code Cell來表達State Cell的所有權。每一個State Cell可以屬于不同的用戶,因此在Cell模型下獨立的用戶狀態是非常容易實現的模式(在Account模型下,合約狀態往往由多個用戶狀態混合構成,例如在一個ERC20合約中,Alice和Bob的Token余額都記錄在同一個合約的內部狀態里面)。

如果想對CKB-VM上的合約編寫有更多了解,請查看文章1和文章2

有了這樣一種編程模型,我們就能構造First-class Asset了。

First-class Asset

CKB中的用戶定義資產(User Defined Asset)可以這樣來構造:

  1. 設計資產定義合約(Asset Definition),規定資產的主要約束(例如總數量,發行者,交易前后數量不變等)。

  2. 保存合約代碼到Asset Definition Cell中。

  3. 在滿足發行權限的情況下,發行者發行資產,并將資產狀態保存在另外的State Cell中。State Cell的Type字段引用保存了資產定義的Code Cell,保證State Cell的變化受到資產定義的約束。

  4. Asset Cell的持有者可以通過更新Lock來改變Asset Cell的所有者。

First-class Asset概念是什么

可以看到,在這樣的設計中,用戶定義的資產是作為獨立對象存在于系統中的,每一份資產都是一個Cell,每一份資產都擁有自己的標識符。我們完全可以認為Asset Cell是UTXO的通用化版本。這樣的First-class Asset有如下優點:

  • Asset Cell可以被引用,可以直接作為其它合約的參數傳入。只要引用Asset Cell的input有正確的用戶授權,合約就可以正常的使用用戶的Asset Cell。

  • 資產定義與資產狀態分離。Asset Definition Cell的所有者是資產的發行者,而Asset Cell是屬于每個用戶的。Asset Cell的授權邏輯和業務邏輯分離,所有權完全由自己的lock決定,與Asset Definition的邏輯無關,這意味著First-class Asset不是托管在資產發行者、開發者或是資產定義合約的手中,而是真正完全屬于用戶的

  • 用戶的資產相互隔離,用戶資產狀態獨立。CKB的經濟模型關注狀態存儲激勵問題:用戶在區塊鏈上保存狀態不僅需要支付寫入費用,而且應該承擔與存儲時間成正比的存儲成本。如果用戶的資產狀態混合在一個地方保存(例如ERC20),這些狀態的存儲成本有誰來支付將是一個問題。(CKB Economics Paper正在努力寫作中…)

  • 只要Asset Definition Cell的lock邏輯允許,資產定義可以獨立更新。

上面的示意圖只是在CKB上實現 First-class Asset的一種方式。除了上面討論的方面,還有一些有趣的細節,例如,Asset Definition Cell是不是可以有屬于自己的狀態?Asset Definition Cell以及Asset Cell的capacity應該由誰來提供?對于這些問題,我們已經有了一些非常漂亮的想法。這些細節的設計、討論和實現是我們現在正在進行的工作。

Summary

Cell模型是一個高度抽象的模型,事實上,你不僅可以在Cell上實現First-class Asset,也可以在Cell上模擬Account. 通過這篇文章的介紹我們可以看出,Cell模型是一個不同于UTXO模型和Account模型的新設計。除了狀態模型的不同,CKB還將計算(也就是狀態生成)轉移到了鏈外,在鏈上只需要對狀態進行驗證的邏輯。獨特的狀態模型和計算驗證分離這兩點決定了CKB的編程模型上必然會出現新的DApp范式和設計模式。

關于“First-class Asset概念是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

潜山县| 南宫市| 始兴县| 左贡县| 满洲里市| 隆回县| 贵南县| 霸州市| 西藏| 双桥区| 辽源市| 玛多县| 阿荣旗| 噶尔县| 柳河县| 盐津县| 鄂尔多斯市| 双辽市| 郎溪县| 孝昌县| 博爱县| 通山县| 日喀则市| 石河子市| 大同县| 循化| 德惠市| 邓州市| 新建县| 康乐县| 青河县| 昌宁县| 基隆市| 安徽省| 泰来县| 突泉县| 建湖县| 通河县| 会东县| 吉林市| 炉霍县|