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

溫馨提示×

溫馨提示×

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

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

怎么在CKB上實現用戶自定義Token

發布時間:2021-12-17 17:30:17 來源:億速云 閱讀:130 作者:柒染 欄目:互聯網科技

本篇文章給大家分享的是有關怎么在CKB上實現用戶自定義Token,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

CKB 的交易與合約模型

因為 CKB 與以太坊的編程模型完全不同,因此有必要在開始之前向大家介紹一下 CKB 的交易與合約模型。

怎么在CKB上實現用戶自定義Token

首先 CKB 的交易模型是 UTXO 結構,每一筆交易會銷毀一部分 Cells,生成一部分新的 Cells,Cells 是 CKB 網絡上最小的結構單位。

CKB 的交易模型是和比特幣類似的,但是在此基礎上進行了擴展,在比特幣上的銷毀和生成規則是確定的,而 CKB 的核心進步點在于 CKB 上的腳本是用戶可以自定義的。

比如說,我們現在在 CKB 上用的簽名算法是 SECP256K1,這個和比特幣,以太坊使用的簽名算法是一致的,但是在比特幣和以太坊上這個簽名算法是寫在節點里面的,是無法更改的,而在 CKB 上不存在原生的簽名算法,如果你想在 CKB 上實現另一種簽名算法 SECP256R1,你只需要自己編寫關于 SECP256R1 的腳本,然后寫入 Lock Script 就可以實現了,而在以太坊上需要實現這一功能必須經過硬分叉。而在 CKB 上簽名算法是隨時可替換的。

CKB 另一個較大的進步在于,在比特幣上轉賬前后的余額必須一致,這一等式是固化在節點內的,因此比特幣上只有原生的 BTC,無法實現其他的 UDT。而這一點在 CKB 上也是可以自定義的,也就是 CKB 內的 Type Script,也就是說用戶可以在此基礎上進行額外的轉賬規則的開發。比如用戶可以自定義 Type Script 中的某一個字段在轉賬前后的余額必須一致,這實際上就可以在 CKB 上實現新的 UDT,因為這里面 Type Script 指定的對象可以不再局限于原生的 CKB Token,而可以是任意一種新創建的 UDT。

怎么在CKB上實現用戶自定義Token

另外 CKB 和以太坊的設計模式是完全不同的。在以太坊上合約重點關注的是行為的意圖,而不是行為的結果,相反的在 CKB 上,我們重點關注的是行為的結果。以太坊上的合約交互采用的是接口對接口的方式,而 CKB 的 Script 交互采用的是狀態對狀態的方式。

ERC20 回顧與分析

這邊我們再回顧一下 ERC20 的內容,經過分析,我們會發現 ERC20 是存在非常多問題的:

怎么在CKB上實現用戶自定義Token 常見 ERC20 合約提供的方法和事件

  • ERC20 僅定義了接口,未統一實現。你每創建一個新的 ERC20,都需部署一個新的合約,而用戶很難一個個去了解每一個合約。另外由于每個新的合約都是開發者重新創建的,這導致很多的 ERC20 合約或故意或無意地出現了安全問題。

  • ERC20 接口中用戶的行為是耦合的。比如其中的 totalSupply,mint,burn 是管理員的行為;而 balanceOf,approve,transfer 是普通用戶的行為,而 allowance,transferFrom 則是授權用戶的行為。我們可以看到這一個 ERC20 的合約內至少耦合了三種用戶的行為,是相對混亂的。

  • ERC20 中的邏輯和數據是耦合的。合約的實現邏輯和用戶地址下擁有的金額數據都是在這個合約內的,正因為這種耦合,因此以太坊上無法進行統一實現。

怎么在CKB上實現用戶自定義Token

CKB 上實現 UDT 的設計思路:

  • 邏輯與狀態分離,使用統一的業務代碼。安全將得到極大的保障。

  • 用戶行為、管理員行為、授權行為分離。

  • 僅提供最核心的 UDT 功能。指提供最核心的 UDT 功能,保障開發者對 UDT 靈活性的需求。

  • 采用面向狀態,注重行為結果的設計模式,去定義 UDT 的行為。

最小化的 UDT

最小化 UDT 最核心的兩大功能:一個是發幣,這里需要定義 UDT 的基本信息,并保持 UDT 唯一性;另一個是轉賬,保證 UDT 前后的一致性。

發幣:Create Action

怎么在CKB上實現用戶自定義Token

Input Cells :填入 Cells,銷毀這部分 CKB 的狀態。可以是大家目前正在持有的 CKB,也可以是正在使用中的 CKB 等等。

Output Cells:這邊包括兩部分,一個是 UDT_ID_CELL 用來描述這個 UDT 的邏輯規則、基本信息和唯一性。另一個是 UDT_BALANCE_CELL 用來描述這個 UDT 的余額,保證轉賬前后的一致性。

UDT_ID_CELL 這邊主要包含幾個內容:

  • Type Script:用于存放 UDT 創建的邏輯規則,和 UUID 用于描述這個 UDT 的唯一性;

  • Lock Script:簡單而言就是簽名算法,解釋誰可以解開這個 Cell;

  • Data:用于存放 UDT 的定義數據。創建者信息,創建 UDT 數量,小數點尾數等等。

UDT_BALANCE_CELL 這邊主要包含幾個內容:

  • Type Script:用于存放 UDT 轉賬的邏輯規則,和 UUID 用于描述這個 UDT 的唯一性;

  • Lock Script:簡單而言就是簽名算法,解釋誰可以解開這個 Cell;

  • Data:用于表示 UDT 的余額。

轉賬:Transfer Action

怎么在CKB上實現用戶自定義Token

UDT 的轉賬會相對容易,銷毀一部分 UDT,生成一部分新的 UDT 即可實現轉賬。

Input Cells : 放入一部分 UDT_BALANCE_CELL(s) 作為 Input。

Output Cells : 放入一部分 UDT_BALANCE_CELL(s) 作為 Output。

擴展 Minimal UDT

上面我們實現的是最小化 UDT,只設計了發幣和轉賬這兩個最基礎的功能。那對于其他的復雜的功能要如何實現呢?

增發/銷毀:Mint/Burn Action

怎么在CKB上實現用戶自定義Token

對于 UDT 的管理員,他可能需要對 UDT 進行一些增發和銷毀的操作。這里就需要對于我們上面創建的 UDT_ID_CELL 進行一些修改。

Input Cells :

  • 輸入 UDT_ID_CELL,當然只有之前 UDT_ID_CELL 中 Lock Script 規定的管理員才可以進行這樣的操作,不是誰都可以進行這樣的操作的。

  • (optional) UDT_BALANCE_CELL:如果是銷毀,就在這里輸入需要銷毀的 UDT 的地址和 UDT 數量。

Output Cells:

  • 輸出新的 UDT_ID_CELL,這是規則發生更改后,新生成的 UDT_ID_CELL;

  • (optional) UDT_BALANCE_CELL:如果是增發,就在這里輸入增發的 UDT 需要發送到的地址和 UDT 數量。

授權:Approve/Transfer_from

怎么在CKB上實現用戶自定義Token

那么如何實現授權行為呢?一樣的我們可以在最小 UDT 方案上進行擴展。

Action Approve

Input Cells : 輸入UDT_BALANCE_CELL

Output Cells: 輸出新的UDT_BALANCE_CELL_WITH_APPROVE,這是中間狀態,表示這個 Cell 處于授權中的狀態;

  • Lock:UDT_APPROVE_LOCK:這是一個 Script,其中寫入了授權的邏輯規則

    • 授權方信息:授權方的公鑰

    • 被授權方信息:被授權方的公鑰

    • 授權金額

這邊的 UDT_APPROVE_LOCK 可以實現兩種邏輯,一個是授權方可以用自己的私鑰解開這個 Cell,使用其中的 UDT 金額;另一個是被授權方可以在授權金額的額度內,使用被授權方的私鑰將這個 Cell 解開,使用其中的 UDT 金額。

Action Transfer_from

被授權方可以調用 Transfer_from,使用其中授權金額范圍內的 UDT。

Input Cells : 輸入 UDT_BALANCE_CELL_WITH_APPROVE

Output Cells: 輸出新的 UDT_BALANCE_CELL_WITH_APPROVE,可能授權金額沒有完全使用,這是找零; 輸出 UDT_BALANCE_CELL,這是被授權方轉出的 UDT 部分。

注意:UDT_BALANCE_CELL_WITH_APPROVE 中的被授權方的信息,可以是 Lock Script 也可以是 Type Script。所以這里的被授權方可以是一個地址,也可以是 N 個地址,也可以是另一個合約。

怎么在CKB上實現用戶自定義Token

以上就是怎么在CKB上實現用戶自定義Token,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

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

AI

炉霍县| 西充县| 兴仁县| 富民县| 武宣县| 九龙坡区| 郑州市| 团风县| 乡城县| 寻乌县| 安化县| 兰西县| 嘉兴市| 东丽区| 潼关县| 建平县| 西安市| 积石山| 花垣县| 蒙自县| 全椒县| 普安县| 新津县| 景洪市| 台江县| 长寿区| 祁阳县| 霍邱县| 松江区| 绩溪县| 广德县| 沙河市| 格尔木市| 白河县| 绍兴县| 兴和县| 通渭县| 淅川县| 山东省| 武威市| 赤壁市|