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,第二个参数是标识位,用于指明该

24小时热点

PayPal因交易消息下跌,Gap因财报大涨

币界网消息,据彭博社报道,PayPal(PYPL)股价因Ad ...

0

波兰奥委会主席因ZondaCrypto调查被控

币界网消息,波兰奥委会主席拉多斯瓦夫·皮耶谢维奇(Rados ...

0

雪佛龙等美国能源企业拟向委内瑞拉油田投资数十亿美元

币界网消息,雪佛龙(CVX.N)和其他美国能源企业正接近达成 ...

0

灰度GBTC相关地址向Coinbase转出340.45枚BTC,价值约2691.86万美元

币界网消息,灰度GBTC相关地址于8月28日21:47(北京 ...

0

哈里伯顿洽谈将设备引入委内瑞拉

币界网消息,知情人士透露,美国最大的油田服务公司之一哈里伯顿 ...

0

美国通胀连续65个月高于美联储目标,沃什面临政策抉择

币界网消息,美国通胀年率连续65个月高于美联储2%的目标,沃 ...

0

Grayscale Bitcoin Trust相关地址转出340.45枚BTC

币界网消息,据Arkham监测,8月28日21:47(UTC ...

0

Arthur Hayes:特朗普已无法左右比特币价格

币界网消息,Arthur Hayes在访谈中表示,美国总统特 ...

131

BitGo CEO表示通过Clarity Act并非终点

币界网消息,BitGo CEO表示,通过Clarity Ac ...

106

BTC期权未平仓量回升至55万枚,市场情绪转向积极

币界网消息,据A早期发行in数据显示,BTC期权未平仓量回升 ...

195

热点专题

谁在真正操控 ASTER 币?从项目方到资本,拆解背后的核心力量

回到核心问题:谁在真正操控 ASTER 币?答案是 —— 不 ... 置顶

85702

千元人民币能买多少 USDT?2025 年汇率、手续费与实操全解析

千元人民币买 USDT 的核心是 “盯汇率、选对渠道、避风险 ... 置顶

80428

黄金支持代币是什么?关键性答案抢先看

从目前的发展来看,黄金支持代币正处于快速成长阶段,随着监管政 ... 置顶

37891

BONK 是什么意思?关键性答案抢先看

从目前发展来看,BONK 具备成为 “Solana 生态标杆 ... 置顶

25237

纸钱包如何手工制作?安全无门槛的加密资产存储方案,新手也能学会

在记录私钥前,可对私钥进行 “简单加密”(仅本人能解密),即 ... 置顶

30876

以太坊生态的社交 DApp Lens 是什么?重塑用户数据主权的去中心化社交新选择

传统社交平台有中心化的内容审核团队,可快速删除垃圾广告、诈骗 ... 置顶

22414

国债代币化后在 Uniswap 建流动性池可行吗?RWA 落地的下一个万亿风口藏在这里

国债代币化后在 Uniswap 建流动性池,不是 “是否可行 ... 置顶

17559

Solana 的高 TPS 优势是什么?揭秘支撑其高性能生态的核心逻辑

Solana 的高 TPS 优势,是技术创新与生态需求结合的 ... 置顶

35477

Solana 程序的 Opcode 执行是什么?一文读懂 Solana 虚拟机的指令运行核心

Solana 程序的 Opcode 执行,看似是底层技术细节 ... 置顶

51175

中文交易对:激活 BNB 生态增长新引擎,从流动性到用户粘性的全方位赋能

中文交易对并非简单的 “语言转换”,而是 BNB 生态深耕中 ... 置顶

20384

比特派怎么买TRX?购买波场币新手指南

比特派是一款支持多链的数字钱包,其中就包括波场TRON(TR ...

162549

区块链圈小菜鸡

TRC20网络是什么意思?TRC20和ERC20的区别详解

TRC20是一种代币标准,运行在波场(TRON)区块链上。T ...

149093

树图链

什么是哈希?钱包哈希值在哪里查找?

哈希是一种通过特定算法将输入数据转换为固定长度输出的数据摘要 ...

145586

波场区块链浏览器

中值联空气币预警榜(2024年06月20日)

中值联空气币预警榜(2024年06月20日) 第一名 ...

134691

区块链网快讯

深度解析 Polygon 从 $MATIC 到 $POL 的升级改名:背后的意图与影响

以太坊扩容解决方案 Polygon(前称 Matic Net ...

132474

波场区块链浏览器

柬埔寨汇旺集团遭遇2962万USDT冻结事件详细分析

在加密货币市场的动荡背景下,柬埔寨汇旺集团(Huione)作 ...

129011

波场区块链浏览器

专访圆币科技CEO:港元稳定币的独特定位与未来展望

2023年7月18日,香港金融管理局公布了首批进入稳定币沙盒 ...

126134

波场区块链浏览器

比特币突破68000美元 8大加密货币重拾动能价格走势如何?

随着2024年比特币大会的进行,比特币价格成功回升至68,0 ...

105948

非小号

金本位制度是怎样的? 金本位制度的优缺点是什么?

金本位制度是一种货币制度,它以黄金作为货币价值的基础。根据这 ...

105283

波场区块链浏览器

Messari最新报告解析:AI x Crypto、SocialFi及比特币可编程性的加密故事

Messari发布的最新加密研究报告聚焦于AI、Social ...

99093

波场区块链浏览器