TON Chain 智能合约开发课程:从网站源码角度探索创建 NFT
在EVM和TON Chain上开发NFT的技术差异
对于DApp开发者来讲,发行FT或NFT一般是基本需要。因此,我选择NFT作为基础知识学习的起点。第一,让大家比较在EVM技术栈和TON Chain上开发NFT有什么区别。

在EVM中,NFT一般使用ERC|721标准。ERC|721概念了不可分割的加密货币,每一个资产都是唯一的,并且可以附带元数据,如图片链接或其他属性。下面是一个容易见到的ERC|721接口示例。与FT不同,转账接口需要指定tokenID而不是数目,这保证了每一个NFT资产的唯一性。为了支持更多属性,一般会为每一个tokenID记录metadata,这是一个外链,存储NFT的可扩展数据。
在Solidity或面向对象编程中,开发如此的智能合约相对容易。仅需概念合约需要的数据种类,如一些重要的映射关系(mapping),并达成修改数据的逻辑即可。

然而,在TON Chain上状况有所不同,重要原因有两点:
第一,TON中的数据存储是基于Cell达成的,同一账户的Cell通过有向无环图来管理。这种设计意味着无限增长的数据可能致使高昂的查看本钱和合约死锁问题。

第二,为了提高并发性能,TON舍弃了串行实行构造,使用了Actor模型,支持并行实行。这致使智能合约之间只能通过异步内部消息进行调用,无论是状况修改还是只读操作,都需遵循这一原则。开发者还需考虑处置数据回滚的方法,以应付异步调用可能带来的实行失败。

虽然在上一篇文章中已经详细讨论了这类技术差异,本文期望聚焦于智能合约开发,因此不再详细展开其他技术差异。总之,以上两点设计原则致使TON智能合约开发与EVM有着显著不同。

在明确了构造后,下面需要解决核心功能需要。在TON中,NFT合约需要设计映射关系(mapping),如owners,用于存储每一个tokenID对应的NFT所有者地址,决定NFT的所有权。为了防止无限增长的数据结构,官方建议使用主从合约模式,通过创建子合约管理每一个key对应的数据,并通过主合约管理全局参数,如NFT名字、符号、总提供量等。

设计完构造后,下面要考虑怎么样处置核心功能需要。因为用了主从合约模式,需要明确主合约和子合约承载的功能,并设计内部消息交互步骤。除此之外,也需仔细考虑内部调用失败后的数据回滚逻辑。即便是简单的NFT开发,也需要进行类似的验证。

从网站源码学习TON智能合约开发
TON选择了一种静态种类语言Func作为智能合约开发语言,像C语言。下面让大家从网站源码学习怎么样开发TON智能合约。我选择了TON官方文档中的NFT示例来进行解说,感兴趣的读者可以查阅。本例中,我将展示怎么样达成一个简单的TON NFT合约。第一,让大家看看合约结构,共包含两个主要功能合约和三个必要的库。
这两个主要功能合约遵循上述原则进行设计。第一,让大家来看看主合约nft|collection的代码:
这里第一介绍了怎么样在TON智能合约中达成数据持久化存储。大家了解,在Solidity中,EVM会依据数据种类自动处置智能合约的状况变量,一般情况下,智能合约的状况变量将在实行结束后依据最新值自动持久化存储。但在Func中,开发者需要自己达成这类逻辑。这种似于C或C++需要开发者考虑GC过程,而其他新开发语言一般会自动处置这部分逻辑。下面,让大家来看看代码。第一导入必要的库,然后第一个函数load|data用于读取持久化存储的数据。它第一通过get|data返回持久化合约存储的cell,这是通过stdlib.fc标准库达成的。一些函数可以视为系统函数来用。

load|data函数返回cell种类,这是TVM中的cell种类。大家已经了解,TON区块链中所有些持久化数据都存储在cell树中。每一个cell最多有1023位任意数据和最多四个对其他cell的引用。cell在基于堆栈的TVM中用作内存。cell中存储的是经过紧编码后的数据,要想获得其中具体的明文数据,需要将cell转换为slice种类。cell可以通过begin|parse函数转换为slice种类,然后可以从slice加载数据位和对其他cell的引用来获得cell中的数据。注意,代码第15行的调用方法是func中的一种语法糖,可以直接调用第一个函数返回值的第二个函数。最后,按数据持久化顺序加载相应的数据。注意,这与Solidity中不同,不是基于hashmap调用的。因此,调用顺序不可乱。
在save|data函数中,逻辑类似,但这是一个反向过程。这引入了下一个要点,一个新的种类builder,这是cell构建器的种类。数据位和对其他cell的引用可以存储在builder中,然后builder可以最后化为新cell。第一通过标准函数begin|cell创建一个builder,然后通过store有关函数存储有关函数。注意,前文中调用顺序与此处存储顺序需要维持一致。最后,通过最外层的set|data,完成对该cell的持久化存储。
下面让大家看看业务有关函数,第一需要介绍怎么样通过合约创建新的合约。大家了解,在TON中,智能合约之间的调用是通过发送内部消息的方法达成的。这是通过一个名为send|raw|message的函数来达成的。注意,第一个参数是message编码后的cell,第二个参数是标识位,用于指明该
上一篇:SOL自概念添加互联网参数指南
下一篇:没有了
免责声明:
1.本文内容综合整理自互联网,观点仅代表作者本人,不代表本站立场。
2.资讯内容不构成投资建议,投资者应独立决策并自行承担风险。









