这是 FunC 之旅的第三部分,其中我们将了解什么是代币、为什么需要标准以及 TON 中代币的标准是什么,我们将分析 Jetton 标准和 NFT 集合标准在顶层是如何工作的我们还将分析 Jetton 和 NFT 标准的实施示例中一些不明显的点。
旅程仍在继续,为了寻找新的机会,你偶然发现了一栋建筑,一座知识的圣殿……。预计会有很多问题,知识守护神殿将您带到代币部分。
代币
加密代币是某些网络中某些数字资产的记账单位。需要注意的是,代币通常并不意味着加密货币,而是分布在区块链上的记录,通过智能合约进行管理。智能合约包含代币持有者账户余额的价值,并且智能合约还提供将代币从一个账户转移到另一个账户的功能。
一切似乎都很简单,我们正在制作一个智能合约,可以以某种方式存储余额和转移代币。但如果每个人都发明一个轮子,那么钱包、游戏、分析平台等应用程序将很难与你的智能合约交互。
因此,区块链网络中有一些标准是与社区一起制定的。
创建自己的代币以便 TON 上的未来旅行者可以使用它们的想法让您再次想到监护人,您会问这样的问题:我在哪里可以看到标准?
TEP 和标准
区块链通常在 github 或具有必要机制的平台上有单独的页面,您可以在其中提出标准建议。
在 TON 中,这是一个 github 存储库。
重要的是,这些页面不是论坛或自由讨论区块链的地方,因此如果您想在此存储库中提供某些内容,请对您的帖子负责。
我们要查看的第一个标准是令牌元数据标准。对于钱包或市场等应用程序来说,能够自动检索信息以进行显示非常有用。令牌数据标准可以简化此过程并统一不同应用程序之间令牌显示的方式。
风险
由于代币是智能合约,其中可能存在错误或后门。因此,在使用智能合约之前值得研究一下。
你已经在 web3 上旅行了一天多了,你知道你已经听说过其他的代币,但 TON 存在明显的差异。
TON 中代币的差异
TON 中的代币智能合约架构与其他网络中的智能合约架构不同,因为 TON 是异步的,交互根据参与者模型进行,并且 TON 中的扩展基于分片的概念。
与其他网络标准的主要区别在于缺乏一个可以完成所有工作的智能合约。例如,如果你想发布一个 NFT 集合(我们稍后会更详细地讨论 NFT),那么每个元素将是一个单独的智能合约,并且整个集合也会有一个单独的智能合约。
示例:如果您发布包含 10 000 个项目的集合,那么您将部署 10,001 个智能合约。
您可能有一个问题——为什么选择这样的实现?
- 这样的方案使得天然气消耗量可预测成为可能
- 这样的方案无法扩展
完整的解释在NFT标准中 。
代币类型
代币的可能分类之一是按可替代性分类。
可替代代币是不独特的资产,可以轻松交换为相同类型的另一种资产。此类令牌的制作方式使得每个令牌都相当于下一个令牌。
TON 中可替代代币的标准是Jetton。
不可替代的代币是资产,其每个实例都是唯一的(特定的)并且不能被其他类似资产替代。不可替代的令牌是某种数字实体证书,能够通过某种机制转移证书。
TON 中可替代代币的标准是NFT Standard。
Jetton
因此,可替代代币的标准是 Jetton。
Jetton 标准代币应包含两种类型的智能合约:
- 主合同
- 合约钱包
每个 Jetton 都有一个主智能合约(我们称之为主合约),用于铸造新的 Jetton、计算总供应量并提供有关代币的一般信息。
有关每个用户拥有的代币数量的信息存储在称为 Jetton 钱包的智能合约中。
标准文档中有一个很好的例子:
如果您发布 Jetton,供应量为 3 个人拥有 200 个 Jetton,那么您需要部署 4 个合约:1 个 Jetton master 和 3 个 Jetton 钱包。
为了让大家更容易理解标准,我做了一个课程,不仅理解了标准,还理解了主合约和Jetton 钱包的实现示例。
NFT
NFT当然也有自己的标准。正如上面在 TON 中提到的,每个 NFT Item 和 NFT Collection 都是单独的智能合约。
NFT 看起来是一个记录 FunC 旅程的绝佳机会,但仍然存在一些问题:
- 如果智能合约中没有单个列表,如何获取内容的完整链接
- 如何获取 NFT 或 Token 智能合约的地址以及什么样的 StateInit 可以让你做到这一点
StateInit 技巧
考虑将智能合约部署到网络的过程。新智能合约的代码和数据被组合成一个StateInit结构体,计算并输出新智能合约的地址(等于这个StateInit结构体的哈希值),然后创建一条外部消息,其地址目的地等于到新智能合约的地址。该消息包含新智能合约的正确 StateInit 和重要的有效负载(使用正确的私钥签名)。
对于我们来说,这意味着我们可以从需要发送代币的地址中获取代币的智能合约地址。简单来说,使用地址和钱包代码,我们将收集钱包的StateInit,并从中获得我们需要的代币钱包的地址。
这是可能的,因为散列函数是确定性的,这意味着对于不同的输入数据将有不同的散列,而对于相同的输入数据散列函数将始终返回统一的散列。
NFT 物品内容
假设我们想要获取集合元素的地址及其内容,比如说图片的链接。一切看起来都很简单,我们拉取 Get 方法并获取信息。但按照 TON 中的 NFT 标准,这样我们不会得到完整的链接,而只是一部分,即所谓的单个元素内容。
要获取完整内容,您需要:
- 通过元素的get方法
get_nft_data()
- 检查元素是否已初始化(第 10 课中有更多相关内容,其中讨论了 NFT 标准)
- 如果元素被初始化,那么通过集合的 get-方法
get_nft_content(int index, cell individual_content)
,我们将获取单独元素的完整内容(完整地址)
,我们得到元素索引和单个内容,以及初始化标志
为了让大家更容易理解这个标准,我做了一个教学。
结论
在本系列文章中,FunC 之旅就结束了。我在我的频道中发布了新课程,我认为如果您打算开始在 TON 上进行开发,它们可以为您提供帮助。
本站所提供的所有资讯均仅供读者参考。这些资讯不代表任何投资建议、提供、邀请或推荐。读者在使用这些资讯时,应当考虑自己的个人需求、投资目标和财务状况。所有投资都伴随着一定的风险,在做出任何投资决策之前请多加留意。