xyymeeth

@xyymeeth

Joined on Dec 4, 2024

  • 本文我们来学习 TON 合约升级,TON 的合约升级相比于 Solidity 的合约升级会简单很多。它不需要类似代理合约之类的东西,合约自身支持通过 set_code 方法将新的代码逻辑直接设置到当前地址。在 set_code 之后,合约地址不变,代码逻辑更新。 在前面几篇文章学习了 FunC 之后,我们的重点将会放在 FunC 上,因此本文我们会介绍 FunC 的合约升级。Tact 目前还不支持原生升级方案,需要结合 FunC 的 Native Function 来实现,这部分内容读者感兴趣的话可以自行学习理解。 合约升级实践 首先通过 npm create ton@latest 创建一个新的项目,第一个合约命名为 ContractV1,其内存变量布局如下: uint32 即只有一个 uint32 类型的变量。
     Like  Bookmark
  • 本文我们来学习如何使用 FunC 编写 TON 上的 Jetton 代币合约。在开始之前,希望读者已经阅读过之前的关于 Tact 编写 Jetton 的文章。其中介绍的一些 Jetton 特性,本文不再重复。 我们这里使用 TON 官方提供的 FunC 代码,来学习 Jetton 的编写。 代码分析 与 Tact 相同,FunC 的 Jetton 也遵守相同的架构,即每个 Jetton 都分为 Master 合约和用户独立的 Jetton 钱包合约。不过在 FunC 这边,Master 被称为 Minter 合约,这应该是历史命名习惯,大家了解即可。 官方代码中,主要包含下面这些文件: jetton-minter.fc
     Like  Bookmark
  • 上篇文章我们介绍了 FunC 的一些基础内容,这篇文章来学习如何使用 FunC 来发送消息。这部分内容有许多细节需要注意,因此值得单独写篇文章记录一下。 消息体代码模板 TON 的文档为我们提供了一个发送消息的模板代码: cell msg = begin_cell() .store_uint(0x18, 6) .store_slice(addr) .store_coins(amount) .store_uint(0, 1 + 4 + 4 + 64 + 32 + 1 + 1)
     Like  Bookmark
  • 本文我们来学习如何使用 FunC 编写 TON 合约。FunC 是 TON 官方支持的合约开发语言,TON 上的主流钱包、DEX 等合约都是使用 FunC 编写的。FunC 有点类似于 C 语言,并且和 Solidity 以及之前学习的 Tact 语言结构不同,学起来比较困难,但是熟练之后其实是比 Tact 更加方便的。由于 TON 采用的是 Cell 数据类型,FunC 对于 Cell 数据的处理相对于 Tact 更加简单易懂。这篇文章也会加入我在学习 FunC 过程中的一些理解和一些避坑点,希望能够帮助到大家更快掌握 FunC。在阅读本文之前,希望大家能先看看之前介绍 Tact 的文章,其中介绍了一些 TON 合约的特点,本文不再重复。 FunC 合约架构 首先来看看一个简单的 FunC 合约是什么架构: () recv_internal(int my_balance, int msg_value, cell in_msg_full, slice in_msg_body) impure { ;; code will be here } 这个方法就是 FunC 合约的入口,它包含四个参数:
     Like  Bookmark
  • 消息发送是 TON 合约之间交互的唯一方式,它的发送模式中包含 Mode 和 Flag。其中 Flag 的 +2,即 SendIgnoreErrors,我之前一直没有太理解它具体的作用究竟是什么,这几天深入研究了一下,终于是弄明白个大概,这里来总结一下。 Phases TON 的一个交易过程分为很多的阶段(phase),一笔交易最多包含下面 5 个 phase: Storage phase,计算合约租金相关 Credit phase,计算合约余额相关 Compute phase,执行合约代码,并生成一个操作序列等的集合 Action phase,执行一些动作,例如发送消息,更新合约代码等 Bounce phase,如果 compute phase 失败,则处理 bounce 相关工作
     Like  Bookmark
  • 本来我们来学习如何使用 Tact 编写 NFT 合约。在继续之前,建议先阅读上一篇关于编写 Jetton 的文章,有很多概念和细节我们在这篇文章就不再重复了。 NFT 架构 TON 上的 NFT 与 Jetton 相同,不能使用无界数据结构。Jetton 中存在大量的用户,因此需要将用户的数据部分独立拆分出来。NFT 中可能存在成千上万个 Item(即 TokenId),因此也需要将 NFT 的合约拆分。 NFT 的合约拆分成了如下两部分: Collection Item
     Like  Bookmark
  • 本文将介绍如何使用 Tact 编写 Jetton 代币合约。Jetton 可以理解为 TON 上的 ERC20 代币,前段时间很火的 NOT、CATI 等都是 Jetton 代币,虽然可以简单理解为 ERC20,但是由于 TON 是异步区块链的关系,Jetton 在实现逻辑上和 ERC20 有着巨大的差别。 无界数据结构(Unbounded data structures) 在 EVM 的 ERC20 代码中,用户的余额都是以 mapping 的数据结构存储在合约中的,合约中可以存储无限个用户的余额,即 Unbounded data structures。如果想要查询任何用户的余额,只需要调用合约的 balanceOf 方法即可。 但是,在 TON 中,由于底层架构的不同,这种无界数据结构无法实现。TON 采用了 Master - Wallet 的架构来实现 Jetton 代币。 Jetton 架构 Master 合约中存储了 Jetton 的核心信息,例如 totalSupply、name、symbol 等都位于 Jetton Master 合约中。
     Like  Bookmark
  • 本文我们来学习如何使用 Tact 开发 TON 合约。 Tact 合约架构 首先来看一个非常简单的 Counter 合约: contract Counter { // persistent state variable of type Int to hold the counter value val: Int as uint32;
     Like  Bookmark
  • 这篇文章开始,我准备开始写一个 TON 合约开发的系列文章,主要是想讲讲 TON 链上的合约开发,读者最好是有一些 Solidity 的合约开发基础,这样读起来比较容易。希望在大家读完这个系列的文章之后,能对 TON 的合约开发有一个大体的了解,并能够自己上手开发项目。 TON 合约开发语言 目前 TON 上的合约开发语言主要有下面四个: Fift,最底层的语言,类似汇编,一般不用学习。 FunC,官方支持的语言,目前 TON 链上主流的钱包,DEX 等都是由 FunC 编写。类似于 C 语言,上手难度稍高。 Tact,社区支持的语言,发展比较迅速,语法和文档都持续在更新。类似于 Solidity,上手容易,但目前还有一些功能可能还不太完善,例如不支持合约升级,Gas 较高等。 Tolk,官方最新推出的语言,宣称要在未来全面替代 FunC,对比 FunC 来说稍微简单一些。并且未来官方文档的所有合约示例应该都要改写为 Tolk。
     Like  Bookmark
  • Virtuals Protocol 是 Base 链上一个类似于 Pump.fun 的发币平台。这篇文章主要来讲讲 Virtuals 的合约代码,学习他们的整个发币流程和细节。 基本逻辑 与 Pump 类似,Virtuals 上发币也分两个阶段,分别是内盘和外盘。内盘是指在合约内的 Bonding Curve 曲线上进行交易的阶段。外盘是指在 DEX,例如 Uniswap 上交易的阶段。当内盘销售结束时(一般是达到某市值,或者是预设数量的 Token 已经售完),合约将自动在 DEX 上创建交易对,此时要交易该 Token 便只能在 DEX 中进行。 Virtuals 中发行的币在内盘阶段只能通过 VITRUAL Token 购买。在 DEX 阶段,一般也是的 VIRTUAL-TOKEN 的交易对。这段时间 Virtuals 比较火,因此 VITRUAL 需求量大,涨势很好。 内盘 内盘部分主要涉及下面这些合约:
     Like  Bookmark