English 简体中文 繁體中文 한국 사람 日本語 Deutsch русский بالعربية TÜRKÇE português คนไทย french

简体中文 繁體中文 English 日本語 Deutsch 한국 사람 بالعربية TÜRKÇE คนไทย Français русский

回答

收藏

3.1 智能合约开发概述

开源社区 开源社区 5727 人阅读 | 0 人回复 | 2025-03-06

欢迎来到第三章。
在本章中,我们将从整体上介绍智能合约开发的各个方面。首先,我们将分解智能合约开发的整个周期。这将涉及建立一个可以编译智能合约样本的本地项目。此外,我们还将探索编写 FunC 代码,并确保合约代码按预期运行。我们将深入研究创建自定义部署脚本,以深入了解底层逻辑。最后,我们将专注于提高部署流程的灵活性。通过这 6 节课,我们将获得智能合约开发方面的全面知识和技能。
% j3 g8 K: @& W8 d4 V, |! g5 S
📝 您还将了解到:
  • TON 的智能合约开发周期包括哪些阶段?
  • TON 区块链智能合约编程语言的名称是什么?
  • 是否有用于编写、测试和部署智能合约的标准本地设置环境?
    1 w( w* o5 b+ Q& ?
6 g: m2 A1 Y2 e( v
第 3 章介绍
在本章中,我们将变得非常实用,并将分解 TON 智能合约开发的整个周期,一起经历其中的每一个步骤,最终结果将是一个现成的用于智能合约编程的自定义本地设置、合约的书面 FunC 代码、合约测试以及实际部署的合约。
让我们直奔主题。

+ u" t7 s* N* F  f* B% `1 Y
TON 智能合约就像一颗卫星。
以下是我能够想到的解释 TON 智能合约生命周期的最佳比喻。你可以把 TON 智能合约想象成一颗发射到地球轨道上的卫星。
卫星绕着地球飞行,与其他卫星互动,能够接受来自地球的信息,对其进行处理并发送一些结果。但在我们真正将它发射到太空之前,它还必须经过几个阶段。
  • 有一个基地实验室正在进行组装。[本地设置]
  • 有一个特定的文档协议,定义了卫星可以处理的所有命令 [TLB 方案]
  • 当卫星还在实验室中时,每种行为场景都要进行测试。[本地测试]
  • 在此之后,卫星将进入与在太空中等待它的环境非常相似的模拟环境,以便再次测试对预定义命令的预期响应行为,以及与太空和地球上其他主体的互动。[测试网络和部署后的链上测试]
  • 如何将卫星送入轨道?使用火箭。火箭将卫星送入轨道,并将其留在轨道上,在成功完成任务后脱落。[主网生产部署]

    4 a2 E+ X6 w1 O! {/ x+ I
从这一刻起,卫星就可以在太空中独立工作,使用其内部预设的一切程序。
解释 TON 智能合约开发生命周期与卫星示例的关系。
在编写智能合约时,我们也会使用类似的周期。
1. 我们准备好本地设置,以便我们的卫星/智能合约经历上述各个阶段。
我们本地设置的第一个关键部分是编译器。TON 区块链上的实际智能合约是以二进制代码的形式存储和执行的。但我们希望用人类可以理解的语言来编写逻辑,因此我们用来编写 TON 合约的语言是 FunC。
FunC 与字节码之间的路径如下: FunC 被编译成 Fift 汇编程序代码,然后为 TON 虚拟机生成相应的字节码(如果以我们的卫星为例,则为 Space)。
对我们来说,Fift 汇编程序代码的本质并不重要,我们只将其视为智能合约代码的中间状态。我们把它交给编译器。
我们的代码 -> FunC -> Fift -> BOC(字节码)
我认为,解释字节码如何存储和执行的部分应在第 1 章和第 2 章(Cell树等)中说明。
目前,操作编译器的最佳和主流方法是使用 TypeScript 语言。TypeScript 与 TVM 无关。把它想象成卫星发射后留在地球上的东西。
我们要使用的编译器是 @ton-community/func-js (https://github.com/ton-community/func-js)  在内部,该软件包同时使用 FunC 编译器和 Fift 解释器,将单个库编译为 WebAssembly (WASM)。
- ]5 p/ v9 @/ n' a0 o- ]  K
2. 我们使用 TL-B 模式来描述智能合约能够处理的命令
TL-B(二进制类型语言)用于描述类型系统、构造函数和现有函数。下面是一个可能的 TL-B 文档示例:
通常情况下,当一些基本功能准备就绪后,我们就开始编写 TL-B 文档,然后不断更新, 直到启动合约。一旦我们写出第一段 FunC 代码,我们就会离它越来越近。
3. 最温馨的部分 我们编写 FunC 代码。
FunC 是一种特定领域的、类似 C 语言的静态类型语言。在前两章中,你已经看到了一些 FunC 代码。不过,在本课中,我们将实际用 FunC 代码编写一些逻辑。
4. 我们在本地测试我们的 FunC 代码行为。
然后,我们再次使用 TypeScript 编写测试逻辑。在这一步中,我们要在本地模拟 TVM 虚拟机,向模拟的合约发送数据,分析输出结果,不断重复,直到得到想要的结果。一旦准备好部署,我们就要编写 TypeScript 代码,将智能合约实际部署到区块链上。这些就是我们的火箭。
5. 我们将代码部署到 testnet。
在 TON,智能合约的部署过程非常有趣。是什么让它如此有趣呢?正如您从前面的课程中看到的那样--我们可以在将智能合约部署到网络之前就计算出它的地址。为此,我们需要知道合约的初始数据状态和实际代码。知道地址后,我们就可以向该地址发送包含初始状态和代码的信息。这很简单。它可以是内部信息,也可以是外部信息。
因此,我们的部署脚本就像计算地址并向该地址发送包含初始状态和代码的消息一样简单。
你可能已经注意到,发送消息需要花费一些实际资金,因此我们不想在链上部署和测试合约时花费大量的实际资金。
这就是为什么我们有一个真实网络的副本,我只用于测试目的。在这个网络上获取有效的代币是免费的,我们称这个网络为 testnet。在我们的合约完全准备好投入生产之前,我们只会将其部署到测试网络中。
6. 启动。我们将代码部署到主网。
将智能合约部署到主网的过程与测试网基本相同,但我们是通过使用真正的 TON 币发送信息来部署我们的合约,我们的信息会出现在主区块链上,所有 TON 用户都可以使用我们的合约。
这是一个非常有趣的过程。有时很难找到答案,但我鼓励你们不要放弃,通过本章的学习,我将确保你们找到答案:
  • 拥有创建和 "启动 "智能合约的全周期本地 "实验室
  • 了解 FunC 合约编码的基础知识
  • 如果您的合约需要的内容超出了示例的范围,您知道该去哪里寻找答案
    ) u  Z" ^" `  m3 D! ~* [- B
有没有用于编写、测试和部署智能合约的标准本地设置(环境)?
这个问题问得好。TON 的编程工具正在快速增长,有时创建自己的自定义本地设置并不合理。有一个值得一提的好工具,它由 TonTech 团队维护,并得到 TON 基金会的正式支持。- Blueprint (https://github.com/ton-community/blueprint).
您可以像运行本地命令一样简单地使用它:
npm create ton@latest, a* R4 A8 P+ I7 H
这将为您生成一个新项目,其中包含上述所有阶段的代码。您可以在 Bluprint 文档中阅读更多相关信息。
在本课程范围内,我们仍将创建一个自定义项目,以便您更深入地了解整个流程的工作原理。
- l+ l7 X0 P# @
我们开始吧!

- N* Q$ N' b: `# Z. }📝 现在你知道了:
  • 我们可以把TON智能合约看作是发射到地球轨道上的卫星,卫星围绕地球飞行,与其他卫星互动,它能够接受来自地球的信息,处理这些信息并发送一些结果。但在我们真正把它发射到太空之前,它必须经过几个阶段。
  • 在第一阶段,我们要准备好本地设置,以便将我们的卫星智能合约带入其他各个阶段。
  • TON 区块链上的实际智能合约以二进制代码的形式存储和执行。
  • 在第二阶段,我们描述智能合约能够处理的命令。
  • 在第三阶段,我们只需编写 FunC 代码。
  • 在第四阶段,我们在本地测试我们的 FunC 代码行为。
  • 在第五阶段,我们将合约部署到 testnet。

    3 P5 M4 H" S* u: Y# [- q( Q2 J4 P

' v3 m- R; G5 e1 ?5 o+ t  B/ K
1 S) |9 o: E+ C5 `  O* l
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则