读者好,本系列文章将是 FunC 开发的指南。为了让您的路径清晰有效,我会给您一张地图和提示,您可以使用它们来完成课程,从而了解 FunC 并可能在 TON 上创建您自己的应用程序。
TON 生态系统已在地平线上可见,我们的旅程开始了。
TON 区块链智能合约
TON 网络由 TVM(TON 虚拟机)组成。智能合约是存储在区块链上的程序,在满足预定条件时运行。使用高级语言 FunC 在 TON 区块链上编写智能合约。FunC程序被编译成Fift汇编代码,为TVM生成相应的字节码。
任何开发者都可以创建智能合约,并通过支付网络费用将其发布到 TON 网络上。然后,任何用户都可以调用智能合约来执行他的代码,同样需要向网络支付费用。
因此,借助智能合约,开发者可以任意创建和部署复杂的用户应用程序和服务。
同样重要的是要注意,已发布的智能合约在网络上有一个地址。
当我们进入 TON 生态系统时,我们首先看到的是一片细胞的「森林」,为了找到它的用途并走得更远,你需要在 FunC 中处理数据类型、异常和函数。
TON 中的数据类型、函数和异常
TON 区块链中的所有持久数据都存储在单元树中。每个单元最多可包含 1023 位任意数据,以及最多 4 个对其他单元的引用。单元在基于堆栈的 TVM 中扮演着内存的角色。
FunC 程序本质上是函数声明/定义和全局变量声明的列表。任何函数声明或定义都以通用模式开头。模式如下:
[<forall declarator>] <return_type> <function_name>(<comma_separated_function_args>) <specifiers>
其中 [ ... ] 对应于可选条目。
TON 网络上的智能合约有两个预留的方法可以访问。
recv_internal()
在 TON 内部执行,例如,当任何合约引用我们的合约时recv_external()
当对合约的请求来自外部世界(即不是来自 TON)时执行
任何智能合约的一个重要部分是在出现问题时抛出异常。throw_if
条件基元和throw_unless
无条件基元都可以引发异常throw
。
为了让您能够理解一切,我开设了一个课程,您将在其中编写您的第一个智能合约并在实践中处理您刚刚阅读的信息。
链接到第一课。
恭喜,细胞森林已通过,但为了让其他人使用我们的路径,我们必须对其进行测试。
测试智能合约
你暂时因为思考测试而分心,没有注意到圣人是如何接近你的。他说现在 TON 中有两种类型的测试。
V1 测试
在旧版本 v1 测试中,每个测试需要编写两个函数:
- 数据函数(或者,更正确的是,状态函数)
- 测试功能
因此,对于每个测试,我们将首先设置数据/状态,然后在测试函数中描述测试的逻辑,每次违反逻辑时都会引发异常。
尽管这是测试的旧版本,圣人还是建议您关注它们,以便了解 TON 中的测试通常是如何安排的。如何测试智能合约,我们在第一课中编写并在版本 1 中进行了测试,可以在第二课中阅读。
第二课链接。
V2 测试
TON 里还有新的测试,如果你想更快地创建测试,应该注意一下。
在新的 v2 测试中,测试通过两个允许您调用智能合约方法的函数进行:
invoke_method
,假设不会抛出异常invoke_method_expect_fail
假设会抛出异常
这些特殊函数,我们将在测试函数中调用,它们可以返回任意数量的值,所有这些值都将在报告中运行测试时显示。
每个测试函数的名称必须以 __test 开头。这样我们就可以确定哪些函数是测试函数,哪些函数只是帮助函数。有关新 v2 测试的示例课程:
链接到包含 v2 测试的课程。
当你在 TON 生态系统中前进时,我们逐渐意识到,如果没有寄存器和堆栈的概念,就不可能在这里创建任何东西,这意味着这是 TON 之旅中非常重要的一部分。
堆栈和寄存器
TON虚拟机是一个堆栈机。添加到堆栈或从堆栈中删除元素的顺序被描述为后进先出。因此,我们经常需要读取智能合约中的数据,即使我们不使用其中的一些数据。在下面示例中的函数中,我们想要获取地址,但我们必须首先获取标志,即使我们不使用它们。
slice parse_sender_address (cell in_msg_full) inline {
var cs = in_msg_full.begin_parse();
var flags = cs~load_uint(4);
slice sender_address = cs~load_msg_addr();
return sender_address;
}
此外,TVM 的状态是通过控制寄存器来描述的,TON 智能合约中最常用的寄存器是c4
- 包含持久数据的根,或者简称为合约的数据部分。该值是一个单元格。
深入生态的旅程还在继续,我们有几个「智能合约大本营」,但如何组织它们之间的沟通呢?
发送消息
TON 使用智能合约之间通信的参与者模型。每个智能合约可以在单位时间内接收一条消息、改变自己的状态或发送一条或多条消息。因此,整个区块链以及给定的合约可以扩展以容纳无限数量的用户和交易。介绍 TON 中消息的课程:
链接到有关消息的课程。
此外,TON 区块链及其托管的合约还可以从其他区块链和整个网络接收外部消息。这意味着无需链上账户即可向 TON 智能合约发送消息,并且智能合约可以处理和利用外部数据进行链上操作。
用消息测试我们的逻辑很重要,让我们进一步做下去。
测试消息
在生态系统内部移动时,你会偶然发现覆盖着符文的奇怪石头。
要测试带有消息的智能合约,我们需要生成地址。TON 中的对象是通过 TL-B 方案描述的,因此,为了了解测试地址应该是什么样子,我们必须查看块方案。
很明显,石头上的符文携带着对我们的旅程有帮助的重要信息。
为了理解 TL-B,我建议你学习: https://core.telegram.org/mtproto/TL。
为了帮助您了解如何测试消息,有一个有关消息测试的课程 链接。
进一步的路径
在本文中,我们使用 FunC 编程语言开始了 TON 生态系统的旅程,我希望第一步能够激发您继续前进的愿望。
本站所提供的所有资讯均仅供读者参考。这些资讯不代表任何投资建议、提供、邀请或推荐。读者在使用这些资讯时,应当考虑自己的个人需求、投资目标和财务状况。所有投资都伴随着一定的风险,在做出任何投资决策之前请多加留意。