Skip to content

欢迎开始

有两种开始使用Tact的方式:

  1. 使用模板
  2. 从头开始。

我们建议使用模板,因为它包含一个简单的合约,可以部署到TON区块链上,还提供了实现单元测试和用于合约部署的辅助函数的示例。

方式一:从模板开始

要开始,请使用模板项目。 它包含一个简单的合约,可以部署到 TON 区块链,以及实现单元测试和辅助功能用于合约部署的示例。

要从模板创建项目,只需从模板项目创建一个新存储库:https://github.com/tact-lang/tact-template

或者使用下面的命令工具,使用脚手架创建项目

1、确保已安装并可用 Node.js 的 LTS 版本。

要检查,请运行 node --version : 它应该显示版本号为 18.0.0 或更高。

2、运行以下命令,快速创建一个 Tact 基础项目:

这将创建一个带有简单计数器合约的新项目:

  • 使用 npm 创建项目:
shell
npm create ton -- simple-counter --type tact-counter --contractName SimpleCounter
  • 使用 yarn 创建项目:
shell
yarn create ton simple-counter --type tact-counter --contractName SimpleCounter
  • 使用 pnpm 创建项目
shell
pnpm create ton simple-counter --type tact-counter --contractName SimpleCounter

可以了,你已经成功创建了一个Tact编写的合约项目

您的第一个合约项目已经编写并编译完成!

请进入相关目录查看 — 使用命令 cd simple-counter/contracts

solidity
import "@stdlib/deploy";
 
message Add {
    queryId: Int as uint64;
    amount: Int as uint32;
}
 
contract SimpleCounter with Deployable {
    id: Int as uint32;
    counter: Int as uint32;
 
    init(id: Int) {
        self.id = id;
        self.counter = 0;
    }
 
    receive(msg: Add) {
        self.counter += msg.amount;
    }
 
    get fun counter(): Int {
        return self.counter;
    }
 
    get fun id(): Int {
        return self.id;
    }
}

要重新编译或部署,请参考新创建项目根目录下 package.json 文件中的脚本部分,并查阅 Blueprint 的文档 — 这是我们用来创建和编译您的第一个简单计数器合约的工具。

实际上,Blueprint 能做的远不止这些:包括测试、定制等功能。

方式二:从零开始入门

Tact 是通过 npm 包管理器进行分发的,旨在安装到 TypeScript/JavaScript 项目中。

yarn add @tact-lang/compiler

然后,您需要在项目的根目录中创建一个 tact.config.json 文件。它应包含以下内容:

json
{
  "projects": [
    {
      "name": "sample",
      "path": "./sources/contract.tact",
      "output": "./sources/output"
    }
  ]
}

请添加一个示例合约到 ./sources/contract.tact 文件中。

solidity
import "@stdlib/deploy";
 
message Add {
    amount: Int as uint32;
}
 
contract SampleTactContract with Deployable {
 
    owner: Address;
    counter: Int as uint32;
 
    init(owner: Address) {
        self.owner = owner;
        self.counter = 0;
    }
 
    fun add(v: Int) {
 
        // Check sender
        let ctx: Context = context();
        require(ctx.sender == self.owner, "Invalid sender");
 
        // Update counter
        self.counter = (self.counter + v);
    }
 
    receive(msg: Add) {
        self.add(msg.amount);
    }
 
    receive("increment") {
        self.add(1);
    }
 
    get fun counter(): Int {
        return self.counter;
    }
}

请将一个构建脚本添加到 package.json 文件中。

{
  "scripts": {
    "build": "tact --config ./tact.config.json"
  }
}

现在您可以运行 yarn build 命令,并在 ./sources/output 文件夹中获得编译后的合约。