免铸造 jetton 处理
简介
TON区块链生态系统推出了对Jetton标准的创新扩展,名为 Mintless Jettons。
该扩展可实现去中心化的 Merkle-proof 空投,而无需传统的铸币过程。
概览
免铸造 jetton - 是 TON 区块链上标准 jetton 实现(TEP-74)的扩展(TEP-177 和 TEP-176)。
这种实现方式可以向数百万用户进行大规模、去中心化的空投,而不会产生大量成本或给区块链增加过多负载。
基本功能
- 可扩展性:在向大量用户分发代币时,传统的铸币过程可能会耗费大量资源和成本。
- 效率:通过利用默克尔树,免铸造 jetton 只存储代表所有空投数量的单一哈希值,从而降低了存储需求。
- 方便用户的空投:用户无需任何准备步骤(如提款或索赔),即可立即使用他们的空投--发送、交换等。它就是这么好用!
在链上协议中 支持 免铸造 jetton
由于免铸造 jetton是标准套币的延伸,因此不需要额外的步骤。只需像使用 USDT、NOT、Scale 或 STON 一样与它们互动即可。
在钱包应用中支持无 免铸造 jetton
钱包应用程序在增强用户对免铸造 jetton的体验方面发挥着重要作用:
- 显示未领取的Jettons: 钱包应该向用户展示他们根据Merkle树数据有资格领取的jettons。
- 自动领取过程:在发起向外转账时,钱包应自动在
transfer
信息的自定义有效载荷中包含必要的 Merkle 证明。
这可以通过以下两种方式实现
-
与 自定义有效载荷 API 中指定的链外 API 集成:
- 检查每个 jetton 是否是免铸造的。
- 如果是免铸造的,请检查钱包的主人是否已经认领。
- 如果还未认领,则从自定义负载 API 获取数据,并将链下余额添加到链上余额中。
- 在向外转账时,如果用户尚未领取空投,则从自定义有效载荷 API 获取自定义有效载荷和初始状态,并将其包含在发送至 jetton 钱包的
transfer
信息中。
-
自定义 API:
- 从 jetton 元数据中的
mintless_merkle_dump_uri
下载空投的树。 - 对其进行解析(见下文第 6 节),并通过应用程序接口提供解析结果。
- 从 jetton 元数据中的
支持免铸造领取(特别是空投树索引)并非钱包的强制性要求。预计钱包应用程序可能会向 jetton 发行商收取此项服务费用。
支持 dApp(DEX/借贷平台)中的免铸造 jetton
由于认领是在钱包应用程序中自动进行的,因此 dApp 不需要任何特定的逻辑。它们可以使用应用程序接口(如 Tonapi 或 Toncenter)显示还未领取的余额。
为提升用户体验,dApp 可检查用户用于连接 dApp 的钱包应用程序是否支持特定的免铸造 jetton。如果不支持,dApp 可从 jetton 应用程序接口获取空投证明和初始化数据,并将其添加到 dApp 端的 transfer
消息中。
部署 免铸造 jetton
部署 免铸造 jetton 涉及几个步骤:
- 准备默克尔树
- 生成一棵 Merkle 树,其中包含所有空投接收者及其各自的金额。
- 计算根
merkle_hash
.
- 部署 Jetton 主合约:
- 将
merkle_hash
包含在合约存储中。 - 确保合约符合扩展的 Jetton 标准;您可以使用 免铸造 Jetton 标准实施 作为范例。
- 提供默克尔证明:
- 在链外托管默克尔树数据。
- 实施自定义有效载荷 API,允许钱包获取必要的证明。
- 更新元数据:
- 根据元数据标准,在令牌的元数据中添加
mintless_merkle_dump_uri
和custom_payload_api_uri
。
- 请求钱包支持:
- 要求所需的钱包应用程序支持(索引)您的免铸造 Jetton。
按照这些步骤,您就可以部署一个用户可以在日常操作中无缝领取的免铸造 Jetton。
检索空投信息
审核空投和核实总供应量包括几个步骤。
访问默克尔数据集
- 首先从元数据中提供的
mintless_merkle_dump_uri
下载 Merkle 树数据。它可以存储在 TON 存储器、IPFS、Web 2.0 资源或其他方式中。该文件包含作为 BoC 文件的HashMap{address -> airdrop_data}
。空投数据 "包括领取金额、可领取开始时间的 Unix 时间戳(start_from
)和领取关闭的 Unix 时间戳(expired_at
)。
检查完整性
- 这可以通过比较免铸造默克尔转储 cell 哈希值和存储在 jetton minter中的哈希值来实现(后者可以通过 minter 合约的
get_mintless_airdrop_hashmap_root
获取方法在链上检索)。
核实余额
- 使用默克尔树来验证单个余额,并确保它们的总和与预期的总供应量一致。
工具
有几种实用程序可用于上述步骤。
mintless-proof-generator (from Core)
- 编译工具
git clone https://github.com/ton-blockchain/ton
cd ton
git checkout testnet
mkdir build && cd build
cmake ../
make mintless-proof-generator
- 编译后的文件保存为
build/crypto/mintless-proof-generator
。
- 运行检查:
build/crypto/mintless-proof-generator parse <input-boc> <output-file>
此实用程序将打印免铸造 Merkle dump cell 哈希值,并以 <address> <amount> <start_from> <expired_at>
格式(每行一个空投)将所有空投列表存储到 <output-file>
。
你还可以通过 mintless-proof-generator make_all_proofs <input-boc> <output-file>
命令生成所有默克尔证明(需要 custom_payload_api_uri
)。
mintless-toolbox (from Tonkeeper)
- 编译程序:
git clone https://github.com/tonkeeper/mintless-toolbox.git
cd mintless-toolbox
make
- 运行检查:
./bin/mintless-cli dump <airdrop-filename>
- 该实用程序读取空投文件,并以
address,amount,start_from,expire_at
格式将其转储到控制台。
通过审核 Merkle 树和合约数据,利益相关者可以验证空投和代币供应的完整性。
结论
免铸造 jetton 为 TON 区块链上的大规模代币空投提供了一种高效、可扩展的解决方案。通过扩展标准 Jetton 实现,它们降低了成本和区块链负载,同时保持了安全性和去中心化。在智能合约、钱包应用和 dApp 中支持 免铸造 Jettons 可确保用户获得无缝体验,并促进更广泛的应用。部署和审核免铸造 Jettons 需要仔细实施Merkle树并遵守扩展标准,从而为建立一个强大而透明的代币生态系统做出贡献。