一、说明
Ton电报链上的合约开发区别与传统ETH以及侧链上的支持ERC方式的solidity合约开发。solidity是一种面向对象的开发语言,类似于c++,java等可读性较高,而FUNC是一种介于汇编和c语言之间的一种面向过程的开发语言。TON链之所以有如此高的执行效率和吞吐率正是得益于FUNC语言的高性能优势。但是,FUNC也因为高性能而牺牲了程序的可读性和易于编码的特点,导致FUNC语言的开发难度要高于传统的solidity智能合约开发。
另外,由于FUNC是专门为TON链设计的开发语言,相关的功能类库还比较少,真正方便可用的类库更是屈指可数。以下教程是FUNC语言开发的模板源码,通过该源码框架可以降低Func合约开发的难度。以下是详细的操作流程。
二、FUNC源码模板框架使用详情操作
TON 入门模板
新 TON 项目的入门模板 – FunC 合约、JS 测试、编译和部署脚本
概述
该项目是 TON 区块链上运行的区块链 dapp 所需的 3 个典型存储库的一部分:
- FunC 中部署在链上的智能合约(此 repo)
- 用于通过 Web 浏览器与 dapp 交互的 Web 前端(即将推出)
- Telegram 机器人用于从 Telegram 通讯程序内部与 dapp进行交互
这个 repo 包含什么?
contracts/*.fc
– 使用FunC语言编写的 TON 区块链智能合约test/*.spec.ts
– 在Mocha测试运行器上运行的 TypeScript 契约测试套件build/_build.ts
– 构建脚本将 FunC 代码编译为Fift和TVM操作码build/_deploy.ts
– 部署脚本,将编译后的代码部署到 TON 主网(或测试网)build/_setup.ts
– 安装脚本来安装构建依赖项(主要用于 Glitch.com 支持)
没有一种官方的方法来开发 TON 智能合约。每个开发人员都有自己的最佳实践。这种设置绝对是主观的,有些开发人员可能不欣赏所做的选择。尽管如此,我们坚持在这里做出的每一个选择,并相信这是以最无缝的方式开发经过全面测试的合约的最佳设置。
这里做出的一些主观选择包括:
- 跨平台支持——允许开发人员在 Mac M1、Mac Intel、Windows 或 Linux 上工作
- 坚信测试 – 合同通常管理资金 – 必须在严格审查下制定
- 清晰且记录的代码可帮助用户审核合约来源并了解其作用
- 依靠现代 TypeScript 在现代框架中开发干净且类型化的脚本和测试
- 依赖 TypeScript 进行部署,而不是使用
fift
CLI 工具——这样更简单 - 测试使用 TVM 在 web-assembly 中以 JavaScript 执行 – 速度和便利性的完美平衡
- 遵循官方文档中出现的 TON 合约最佳实践
依赖项和要求
要设置本地机器进行开发,请确保您具有以下条件:
- Node.js 的现代版本(16.15.0 或更高版本)
- 安装说明可在此处找到
- 在终端中运行
node -v
以验证您的安装,该项目已在v17.3.0
- CLI工具
func
(FunC 编译器)- 安装说明可在此处找到
- 在终端中运行
func -V
以验证您的安装
fift
CLI 工具- 安装说明可在此处找到
FIFTPATH
不要忘记在上面的安装过程中设置环境变量- 在终端中运行
fift -V
并fift
验证您的安装
- 一款不错的 IDE,支持 FunC 和 TypeScript
- 我们建议使用安装了FunC 插件的Visual Studio Code
本地机器准备就绪后,安装项目:
- Git 将 repo 克隆到本地,并将目录重命名为你自己的项目名称
- 在根 repo 目录中,在终端中运行
npm install
或者,您可以忽略上述要求,直接在 Web 浏览器内使用在线 IDE 进行开发,无需任何设置。只需在Glitch内打开此 repo,无需安装任何东西:
- 在浏览器中打开此链接,创建新的 Glitch 工作区
- 等待大约 60 秒,直到安装完成
(单击 IDE 底部的“LOGS”按钮查看进度) - 在在线 IDE 中编辑合约文件和测试
- 要运行终端命令,请
npm run build
单击在线 IDE 底部的“终端”按钮 - 在线工作很慢!如果您想要更快的体验,请在本地机器上运行
开发说明
-
编写代码
- TL-B文件定义其数据和消息操作的编码
contracts/mycontract.tld
- TypeScript 文件,用于实现其数据和消息操作的编码
contracts/mycontract.ts
- 独立根合约位于
contracts/*.fc
- 共享导入(当将代码拆分到多个文件时)位于
contracts/imports/*.fc
- 未共享的特定于合同的导入位于
contracts/imports/mycontract/*.fc
- FunC 合约位于
contracts/*.fc
- 每个合同可能有可选但推荐的辅助文件:
- TypeScript 中的测试位于
test/*.spec.ts
- TL-B文件定义其数据和消息操作的编码
-
建造
mycontract.fif
– 编译的第五个文件结果(本身不是很有用)mycontract.compiled.json
– 已编译合约的二进制代码单元(用于部署)。以十六进制格式保存在 json 文件中,以支持 webapp 导入- 在根 repo 目录中,在终端中运行
npm run build
- 屏幕上会出现编译错误
- 生成的构建工件包括:
-
测试
- 在根 repo 目录中,在终端中运行
npm run test
- 不要忘记在运行测试之前构建(或重建)
- 通过在 Web Assembly 中运行 TVM,在 Node.js 内部运行测试
ton-contract-executor
- 在根 repo 目录中,在终端中运行
-
部署
- 要部署到测试网(TON 币免费),请运行
npm run deploy:testnet
- 按照部署脚本的屏幕说明进行操作
- 每个要部署的合约都应该有一个脚本
build/mycontract.deploy.ts
来返回其初始数据单元 - 部署钱包配置在
.env
(若不存在则自动创建),内容为:
DEPLOYER_MNEMONIC="mad nation chief flavor ..."
(24个秘密单词) - 确保所有合约都已建立并且您的设置已准备好部署:
- 要部署到主网(生产),请在终端中运行
npm run deploy
- 要部署到测试网(TON 币免费),请运行
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册