Web3——TON 开发注意事项
2024/4/29大约 2 分钟
Web3——TON 开发注意事项
TON (The Open Network, 原名 Telegram Open Network) 最大的特点就是分片和异步。
核心特性
- 架构差异:由于异步架构,TVM(TON Virtual Machine)与以太坊虚拟机(EVM)不兼容。
- 地址生成:合约的地址由部署的字节码和初始数据(Initial Data)共同决定。
开发语言
开发 TON 合约主要有三种选择:
- Tact:简单易懂,会被编译成 FunC。适合快速上手。
- FunC:类 C 语言,官方主要支持的语言,功能强大。
- Fift:接近汇编语言,通常用于底层调试,一般不需要直接写。
⚠️ 开发避坑指南(注意事项)
- 数据分散:由于分片(Sharding),数据是分散存储的。很多时候需要开发者手动聚合链上信息。
- 竞争条件:异步调用容易导致合约的竞争条件(Race Condition),需要格外注意状态管理。
- 钱包即合约:在 TON 上,钱包本质上也是一个合约。同一个公钥可以部署多个钱包合约实例。
- Gas 机制:
- 不退款:如果合约执行发生错误,Gas 不会自动退还。
- 手动处理:在合约调用链的末端,通常需要手动处理剩余 Gas 的返还。
- 失败消耗:即使交易失败,Gas 依然会被消耗。
- 上限:单个合约单次执行可消耗的最大 Gas 费为 1 TON。
- 存储租金:合约在链上存储数据需要支付租金。
- 可升级性:合约代码是可以升级的。
- 精度:TON 的代币精度通常为 9 位小数。
示例代码
Jetton 代币合约示例:
https://github.com/TonoxDeFi/capped-fungible-token/tree/main