Appearance
幻灯片演示
- 为什么需要一个新的代币程序?
- 扩展功能是什么?
- 我怎样才能通过常见问题解答激发你的兴趣?
为什么
- SPL 代币程序已经经过实战测试且运行良好
- ...但它需要更多的协议级功能,而不影响现有代币
- 让我们部署一个新的、独立的代币程序
- ...尽管现在已经不是2022年了!
等等,你确定吗?
- 采用一个独立的代币程序是棘手的
- ...但对生态系统极为有价值
- 从1到2很难,但从2到N就容易多了
你知道现在是2023年吗?
是的。
好的...它是如何工作的?
- Token-2022是Token的超集:结构和指令具有相同的ABI
- 在铸币和账户上选择加入扩展功能
- 新数据写在第165字节之后
酷,但我能使用这个吗?
- 可以!所有网络上都有用于测试
solana
工具版本 >= 1.14.17@solana/spl-token
版本 >= 0.3spl-token-cli
版本 >= 2.2
谁在支持它?
基础支持已经到位。
- RPC Token-2022
- Anchor
- 钱包
- DeFi协议
- 代币元数据
太好了!安全吗?
- 进行了4次审计
- 在开发中功能完成后再进行一次审计
- 目前还可以升级
- 官方推荐在主网1.17版本后使用(约2024年1月)
- 在1.18版本中增加更多零知识证明(ZK)功能(约2024年5月)
- 大约在那之后6个月可能会被冻结
我很好奇:账户的扩展功能是什么?
- 保密转账
- CPI保护
- 转账时必须添加备注
- 不可变的所有权
不错,铸币的扩展功能是什么?
- 保密转账
- 转账费用
- 关闭铸币
- 带息代币
- 不可转让代币
- 默认账户状态
- 永久委托
- 转账触发器
- 元数据指针 + 元数据
- 组指针 + 组内容
哇,那真是太多了!
确实如此。
我不明白它们是用来做什么的
让我们通过一个游戏来学习吧!
- 描述一个代币设计
- 思考如何使用Token-2022来实现它
- 我来给出答案
提示:答案在CLI文档中,网址为 https://spl.solana.com/token-2022/extensions
问题1
我听说过压缩 NFT,那么我如何制作一个可以压缩、解压缩并且可以使用链下默克尔树重新压缩的代币?
回答1
创建一个带有关闭铸币权限扩展的铸造代币,这样当供应量为0时,你可以关闭并重新开启铸币账户。
问题2
我想发送我的代币,但不想让任何人知道我拥有多少或我转移了多少。
回答2
铸币时添加保密转账扩展!
虽然第一次存款是公开的,但转账金额通过零知识证明进行加密和验证。
- 过去需要更大的交易大小,但现在我们分拆了证明!
问题3
我运行一个质押池/借贷协议,我希望池中的代币数量随时间增加,以反映代币的价值。
回答3
铸造一个带有利息增值扩展的代币,并让协议在每个 epoch 更新利率。
问题4
我正在创建一个类似银行的支付系统,我希望为我的客户创建清晰的月度对账单。
我不希望他们因为不靠谱的协议而遭受损失。
回答4
强制要求所有客户代币账户在接收转账时添加备忘录。客户可以了解所有进入账户的资金的动机。
同时添加CPI保护扩展,强制dapp转账通过一个代理进行。
问题5
对于我的游戏,我只希望玩家持有我的代币,我不希望他们在交易所抛售。
回答5
铸造代币时使用默认账户状态扩展,并设置为冻结
状态。玩家必须通过你的程序或服务来解冻他们的账户。
问题6
我的DAO需要一个给理事会成员的特权代币。
我不希望他们出售或转移代币,如果他们行为不端,DAO必须能够收回代币。
回答6
铸造一个代币:
- 永久授权给DAO,这样它可以销毁任何代币
- 不可转让,因此成员无法转移它们
- 额外优势:不可转让保证了所有权的不变性
问题7
确实有很多新功能,但我只想编程我的自己的代币。
回答7
目前这是不可能的。我们需要开发一套接口并使所有人开始使用它们。
同时,你可以配置你的Token-2022 调用一个实现“转账触发器”接口的程序。
更多信息请访问 https://github.com/solana-labs/solana-program-library/tree/master/token/transfer-hook-interface
问题8
你提到了有关元数据的事情。这是否意味着将会有多个元数据程序?那听起来很混乱。
回答8
可能会这样!这就是为什么Token-2022中的“元数据指针”扩展可以指定哪个账户持有铸币的元数据。
为了安全,必须确保代币铸造和元数据相互指向。
问题9
我们不能直接将元数据放在铸造代币里吗?
回答9
可以的!使用正在开发中的“元数据”扩展,可以把所有东西都放在铸造代币里。
问题10
这些功能听起来很棒,但我已经有很多代币持有者了,我怎样才能把他们迁移到Token-2022上?
回答10
创建一个新的Token-2022铸币,并使用spl-token-upgrade
程序进行转换。
- 无状态协议与托管账户
- 向托管账户铸造新代币
- 协议销毁旧代币并发放新代币
有趣的事实:你可以在任何两个铸币之间使用这个方法!
问题11
嗨,同问题10,但我不想销毁代币。
回答11
没问题!正在开发中的token-wrap
程序允许你在任何两个铸币之间进行包装。
注意:默认的包装程序不添加扩展,但如果你想为你的代币添加扩展,可以分叉成一个新程序。
问题12
我有一个链上程序(智能合约),我怎样才能支持Token-2022?
回答12
太好了!如果你的指令只处理一种代币,那很简单。
如果你同时使用多个代币程序(例如交易),就比较复杂了,因为你的指令需要包括这两个程序。
更多文档和示例请访问https://spl.solana.com/token-2022/onchain。
问题 13
我在开发一个钱包,如何展示和转移 Token-2022 代币?
回答 13
很好!添加支持相当简单。
相关文档和示例请查看 https://spl.solana.com/token-2022/wallet
问题 14
为什么要添加元数据?
回答 14
- 使链上编程更加开放
- 大家一直在催促我们添加这功能
问题 15
如果我不想使用你们的元数据怎么办?
回答 15
- 没问题,可以使用你自己的元数据!
- “元数据指针”扩展允许你指向任何账户
- 你也可以在你的程序中实现“SPL 代币元数据接口”
安全加分:检查铸币和元数据是否互相指向!
问题 16
我可以只使用自己的代币程序吗?
回答 16
- 这是未来的趋势!与此同时,我们提供了转账触发器(Transfer Hooks)
- 使用转账钩子时,Token-2022 在所有关于你的代币铸造过程中调用你选择的程序
- 该程序必须实现
spl-transfer-hook-interface
- 随意使用
spl-transfer-hook-example
的分支
我有点不知所措
没问题,我们已经完成了,这里是链接:
- Token-2022: https://spl.solana.com/token-2022
- Token-upgrade: https://spl.solana.com/token-upgrade
- 元数据接口: https://docs.rs/crate/spl-token-metadata-interface/latest
- 转账触发器接口: https://docs.rs/crate/spl-transfer-hook-interface/latest
- 保密转账: https://github.com/solana-labs/solana-program-library/blob/master/token/zk-token-protocol-paper/part1.pdf
谢谢你的聆听!