Skip to content

幻灯片演示

  • 为什么需要一个新的代币程序?
  • 扩展功能是什么?
  • 我怎样才能通过常见问题解答激发你的兴趣?

为什么

  • SPL 代币程序已经经过实战测试且运行良好
  • ...但它需要更多的协议级功能,而不影响现有代币
  • 让我们部署一个新的、独立的代币程序
  • ...尽管现在已经不是2022年了!

等等,你确定吗?

  • 采用一个独立的代币程序是棘手的
  • ...但对生态系统极为有价值
  • 从1到2很难,但从2到N就容易多了

你知道现在是2023年吗?

是的。


好的...它是如何工作的?

  • Token-2022是Token的超集:结构和指令具有相同的ABI
  • 在铸币和账户上选择加入扩展功能
  • 新数据写在第165字节之后

酷,但我能使用这个吗?

  • 可以!所有网络上都有用于测试
  • solana 工具版本 >= 1.14.17
  • @solana/spl-token 版本 >= 0.3
  • spl-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 的分支

我有点不知所措

没问题,我们已经完成了,这里是链接:

谢谢你的聆听!