游乐游手机版
首页/web3.0/文章详情

TON链NFT开发教程:源码解析

时间:2025-05-19 10:18
在EVM和TON Chain上开发NFT的主要区别在于数据存储和智能合约架构。EVM使用ERC-721标准,TON Chain则基于Cell和主从合约架构开发NFT。

在EVM和TON Chain上开发NFT的区别

对于DApp开发者来说,发行一个FT或NFT通常是最基本的需求。我以此为学习入口,来探讨在EVM和TON Chain上开发NFT的区别。在EVM中,NFT通常会选择继承ERC-721标准。这个标准定义了不可分割且具有唯一性的加密资产类型,而每个资产都通过一个唯一的tokenId来标识。为了承载更多的属性,每个tokenId通常会有一个metadata链接,用于保存NFT的其他可扩展数据,例如PFP图片的链接和某些属性名称等。对于熟悉Solidity或面向对象编程的开发者来说,实现这样一个智能合约并不难,只要定义好合约中需要的数据类型和相应的修改逻辑即可实现一个NFT。

大家都在用的虚拟币交易平台推荐:

然而,在TON Chain上,情况就大不相同了。TON的数据存储基于Cell实现,且同一个账户的Cell通过有向无环图来管理。这就导致了需要持久化存储的数据不能无边界地增长,因为数据深度的增加会导致查询成本过高,甚至可能导致合约陷入死锁问题。此外,为了追求高并发性能,TON采用了Actor模型,这意味着智能合约之间只能通过发送内部消息的方式进行异步调用,无论是状态修改还是只读类型的调用都需要遵循这个原则,同时还需要考虑异步调用失败后的数据回滚问题。

基于上述设计原则,TON中智能合约的开发与EVM大不相同。在TON中,NFT的开发需要采用主从合约的架构,每个NFT都是一个独立的子合约,保存了所有者地址、metadata等数据,而主合约则管理全局数据,如NFT名称、符号和总供应量等。在明确了架构后,需要解决核心功能的需求,明确哪些功能由主合约承载,哪些由子合约承载,并通过内部信息沟通,同时考虑执行错误时的数据回滚逻辑。

TON 项目开发教程(一):源码角度看如何在 TON Chain 上创建一个NFT

从源码学习开发TON智能合约

TON选择了名为Func的静态类型语言来开发智能合约,让我们通过源码来学习如何在TON上开发智能合约。我选择了TON官方文档中的NFT示例进行介绍。合约结构分为两个功能合约和三个必要的库。主合约nft-collection的代码展示了如何在TON智能合约中持久化存储数据。在Solidity中,数据的持久化存储由EVM自动处理,但在Func中,开发者需要自己实现相应的处理逻辑,这有点类似于C和C++需要考虑GC的过程。

让我们看下代码,load_data函数用于读取持久化存储的数据,通过get_data返回持久化合约存储的cell。cell类型在TON区块链中用于存储所有持久数据,每个cell最多有1023位任意数据和最多四个对其他cell的引用。cell可以通过begin_parse函数转换为slice类型,然后从slice加载数据位和对其他cell的引用。save_data函数则是一个反向过程,通过begin_cell创建一个builder,并依次存储相关数据,最后通过end_cell完成新cell构建,并通过set_data完成持久化存储。

接下来是业务相关函数,首先介绍如何通过合约创建新的合约。在TON中,智能合约之间的调用是通过发送内部消息的方式实现的,通过send_raw_message函数实现。该函数的第一个参数是message编码后的cell,第二个参数是标识位,用于表明该交易的执行方式。TON中有不同的内部消息发送的执行方式,包括3种消息Modes和3种消息Flags。deploy_nft_item函数用于创建或铸造新的NFT实例,通过send_raw_message发送内部消息,并选择了flag 1的发送标识位,仅将编码中指定的fee作为本次执行的gas fee。

TON选择了一种名为TL-B的二进制语言来描述消息的执行方式,通过设置不同的标记位来实现特定功能的内部消息。StateInit的编码规则对应了calculate_nft_item_state_init函数,包含新合约的源码和初始化数据。TON中,所有未生成的智能合约可以预先计算其生成后的地址,通过workchain标识位与stateinit的哈希值拼接而成。calculate_nft_item_address函数即为预先计算新合约地址的函数。

send_royalty_params函数是对只读请求的内部消息的响应,在TON中内部消息不仅包含可能会修改数据的操作,只读操作也需要通过这种方式实现。TON中智能合约只有两个统一的入口,recv_internal和recv_external,开发者需要在函数内部根据需求,采用类似switch的方式根据message指定的不同标记位来响应不同的请求。通过throw_unless函数抛出异常,类似于Solidity中的require函数,用于权限检查等逻辑判断。

最后,为了使代码结构更清晰,提供了一系列帮助获取持久化信息的辅助函数,开发者可以参考这种结构来开发自己的智能合约。

TON 项目开发教程(一):源码角度看如何在 TON Chain 上创建一个NFT

TON 项目开发教程(一):源码角度看如何在 TON Chain 上创建一个NFT

TON 项目开发教程(一):源码角度看如何在 TON Chain 上创建一个NFT

TON 项目开发教程(一):源码角度看如何在 TON Chain 上创建一个NFT

TON 项目开发教程(一):源码角度看如何在 TON Chain 上创建一个NFT

TON 项目开发教程(一):源码角度看如何在 TON Chain 上创建一个NFT

TON 项目开发教程(一):源码角度看如何在 TON Chain 上创建一个NFT

TON生态的DApp开发真是一件有趣的事情,与EVM的开发范式有很大差异。我会通过一系列文章来介绍如何在TON Chain中开发DApp,与大家共同学习,把握这波机会。也欢迎大家在Twitter上与我互动,碰撞一些新的有趣的DApp创意,一起开发。

来源:https://www.php.cn/faq/843420.html
上一篇SKL币涨幅预测:市场趋势与SKALE网络发展 下一篇BEL币详解:购买平台及价格分析
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
HAPI币交易平台及今日最新行情
web3.0 · 2026-06-30

HAPI币交易平台及今日最新行情

HAPI代币的持有者扮演着DeFi安全关键仲裁者角色,有权决定预言机选择及项目发展方向,从而有效保障DeFi生态的安全与稳定运行。目前该代币价格约为114 69元,已在Gate io、KuCoin、MEXC、Uniswap、Hotbit、AscendEX及PancakeSwap等七家主流交易平台上市流通,受到投资者关注。

WSG币在哪里买?今日行情与平台推荐
web3.0 · 2026-06-30

WSG币在哪里买?今日行情与平台推荐

WSG币是边玩边赚生态原生代币,已上线Gate io、MEXC等9家交易所,价格实时波动,历史参考价约0 0000000022美元。投资前务必核实平台流动性及下架风险。

区块链合约地址能转出币吗?查询方法详解
web3.0 · 2026-06-30

区块链合约地址能转出币吗?查询方法详解

区块链合约地址无法直接转出代币,因智能合约没有私钥,转账需依赖内部代码逻辑并满足预设条件。查询合约地址可通过区块链浏览器或项目官网,以UNI代币为例,在Etherscan搜索即可获得具体地址。

BAFE币购买平台指南:支持交易的交易所汇总
web3.0 · 2026-06-30

BAFE币购买平台指南:支持交易的交易所汇总

BAFE币项目方销毁团队份额实现公平启动,交易自动生成流动性并锁入PancakeSwap池,持币用户通过静态反射获被动奖励。目前仅上线HOTBIT和BKEX两家交易所,价格波动极大,需自行评估风险。

Kaiko报告:SOL与BONK暴涨,比特币流动性远不及FTX时期
web3.0 · 2026-06-30

Kaiko报告:SOL与BONK暴涨,比特币流动性远不及FTX时期

SOL和BONK大幅上涨,BONK上线Coinbase后单周涨40%,全年涨幅近3000%。比特币流动性远低于FTX崩溃前,交易量与订单深度不及去年10月一半。年底比特币价格平均较当年高点回落39%,今年仅回调4 8%。美联储加息周期或近尾声,市场对明年3月降息预期升至67%。