怎么在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 合约提供的方法和事件

怎么在CKB上实现用户自定义Token

CKB 上实现 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 这边主要包含几个内容:

UDT_BALANCE_CELL 这边主要包含几个内容:

转账: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 :

Output Cells:

授权:Approve/Transfer_from

怎么在CKB上实现用户自定义Token

那么如何实现授权行为呢?一样的我们可以在最小 UDT 方案上进行扩展。

Action Approve

Input Cells : 输入UDT_BALANCE_CELL

Output Cells: 输出新的UDT_BALANCE_CELL_WITH_APPROVE,这是中间状态,表示这个 Cell 处于授权中的状态;

这边的 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,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

推荐阅读:
  1. djangorestframework-jwt 用户token认证
  2. 基于redis实现token验证用户是否登陆

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ckb token

上一篇:Nervos CKB 脚本编程中怎样在CKB上实现WebAssembly

下一篇:如何进行springboot配置templates直接访问的实现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》