跳到主要内容

免铸造 jetton 处理

简介

信息

读者应熟悉 支付处理部分jetton 处理 中描述的资产处理基本原则,以便清楚理解。

TON区块链生态系统推出了对Jetton标准的创新扩展,名为 Mintless Jettons

该扩展可实现去中心化的 Merkle-proof 空投,而无需传统的铸币过程。

概览

免铸造 jetton - 是 TON 区块链上标准 jetton 实现(TEP-74)的扩展(TEP-177TEP-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 发行商收取此项服务费用。

支持 dApp(DEX/借贷平台)中的免铸造 jetton

由于认领是在钱包应用程序中自动进行的,因此 dApp 不需要任何特定的逻辑。它们可以使用应用程序接口(如 Tonapi 或 Toncenter)显示还未领取的余额。

为提升用户体验,dApp 可检查用户用于连接 dApp 的钱包应用程序是否支持特定的免铸造 jetton。如果不支持,dApp 可从 jetton 应用程序接口获取空投证明和初始化数据,并将其添加到 dApp 端的 transfer 消息中。

部署 免铸造 jetton

部署 免铸造 jetton 涉及几个步骤:

  1. 准备默克尔树
  • 生成一棵 Merkle 树,其中包含所有空投接收者及其各自的金额。
  • 计算根 merkle_hash.
  1. 部署 Jetton 主合约:
  • merkle_hash 包含在合约存储中。
  • 确保合约符合扩展的 Jetton 标准;您可以使用 免铸造 Jetton 标准实施 作为范例。
  1. 提供默克尔证明:
  • 在链外托管默克尔树数据。
  • 实施自定义有效载荷 API,允许钱包获取必要的证明。
  1. 更新元数据:
  • 根据元数据标准,在令牌的元数据中添加 mintless_merkle_dump_uricustom_payload_api_uri
  1. 请求钱包支持:
  • 要求所需的钱包应用程序支持(索引)您的免铸造 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)

  1. 编译工具
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
  1. 运行检查
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)

  1. 编译程序
git clone https://github.com/tonkeeper/mintless-toolbox.git
cd mintless-toolbox
make
  1. 运行检查
./bin/mintless-cli dump <airdrop-filename>
  • 该实用程序读取空投文件,并以 address,amount,start_from,expire_at 格式将其转储到控制台。

通过审核 Merkle 树和合约数据,利益相关者可以验证空投和代币供应的完整性。

结论

免铸造 jetton 为 TON 区块链上的大规模代币空投提供了一种高效、可扩展的解决方案。通过扩展标准 Jetton 实现,它们降低了成本和区块链负载,同时保持了安全性和去中心化。在智能合约、钱包应用和 dApp 中支持 免铸造 Jettons 可确保用户获得无缝体验,并促进更广泛的应用。部署和审核免铸造 Jettons 需要仔细实施Merkle树并遵守扩展标准,从而为建立一个强大而透明的代币生态系统做出贡献。

另请参见