快速通道——10 分钟部署第一个合约

用 TronBox CLI 在 Shasta 测试网上完成一次 Hello World 合约部署,全程约 10 分钟。

📘

前置阅读

  • Node.js 16+ 与 npm:TronBox 基于 Node 运行,若未安装,请前往 nodejs.org 下载并安装。
  • 持有 Shasta 测试网 TRX 的账户:参阅获取测试网 Token,为 Shasta 账户领取测试 Token。
  • 代码编辑器:VS Code 或其他习惯使用的编辑器。

本页用 TronBox CLI 在 Shasta 测试网编译并部署一个 Hello World 合约,全程约 10 分钟。

第 1 步 — 安装 TronBox

npm install -g tronbox
tronbox version

预期输出(任意较新的 4.x 版本均可):

Tronbox v4.3.0
Solidity v0.8.6 (solc-js)
Node v18.x.x

如果提示 command not found,说明 npm 全局 bin 目录不在系统 PATH 里。运行 npm config get prefix 取得该目录,再把 <prefix>/bin 加入 PATH

第 2 步 — 初始化新项目

mkdir hello-tron && cd hello-tron
tronbox init

命令生成标准的 TronBox 项目结构:

hello-tron/
├── contracts/
│   └── Migrations.sol            ← 必需——管理迁移状态
├── migrations/
│   └── 1_initial_migration.js    ← 部署 Migrations.sol(自动生成)
├── test/                         ← 测试文件
└── tronbox-config.js             ← 网络与编译器配置
📘

关于配置文件的命名

TronBox 会自动识别 tronbox.jstronbox-config.js 作为配置文件。由于在 Windows 系统中,名为 tronbox.js 的配置文件可能会与 tronbox 命令行脚本产生命名冲突,因此本指南统一采用 tronbox-config.js。在 macOS 和 Linux 系统下,两者均可正常使用。

第 3 步 — 编写 Hello World 合约

contracts 目录下新建 contracts/HelloWorld.sol 文件:

pragma solidity 0.8.6;

contract HelloWorld {
    string public message;

    constructor(string memory initialMessage) {
        message = initialMessage;
    }

    function setMessage(string memory newMessage) public {
        message = newMessage;
    }
}

migrations 目录下新建 migrations/2_deploy_hello.js 部署脚本:

const HelloWorld = artifacts.require("HelloWorld");

module.exports = function (deployer) {
    deployer.deploy(HelloWorld, "Hello, TRON!");
};

第 4 步 — 配置 Shasta 网络

将以下内容替换至 tronbox-config.js 中:

module.exports = {
  networks: {
    shasta: {
      privateKey: process.env.PRIVATE_KEY,
      userFeePercentage: 50,
      feeLimit: 100 * 1e6,                    // 限额为 100 TRX,单位为 sun
      fullHost: 'https://api.shasta.trongrid.io',
      network_id: '2'
    }
  },
  compilers: {
    solc: {
      version: '0.8.6'
    }
  }
};
🚧

保护好私钥

请使用上述示例中的 process.env.PRIVATE_KEY 环境变量模式,在终端会话中临时设置该值,或通过 .env 配置文件配合 dotenv 库读取。切勿把私钥明文硬编码在代码文件中并上传至公共代码托管平台,许多主网账户曾因此类疏忽蒙受资产损失。

第 5 步 — 编译

tronbox compile

预期输出(已部分截断):

Compiling ./contracts/HelloWorld.sol...
Compiling ./contracts/Migrations.sol...
> Compiled successfully using:
   - solc: 0.8.6+commit.11564f7e.Emscripten.clang

如果编译时系统提示编译器版本冲突,请确保 tronbox-config.js 中的 compilers.solc.version 设定与合约文件中的 pragma solidity 声明版本一致。

第 6 步 — 部署到 Shasta

export PRIVATE_KEY="your-private-key-without-0x-prefix"
tronbox migrate --network shasta

预期输出(已部分截断):

Using network 'shasta'.

Running migration: 1_initial_migration.js
  Deploying Migrations...
  Migrations: TContractAddress...
Saving successful migration to network...
Saving artifacts...

Running migration: 2_deploy_hello.js
  Deploying HelloWorld...
  HelloWorld: TContractAddress...
Saving successful migration to network...
Saving artifacts...

请复制并妥善记录 HelloWorld 的合约地址——我们在下一步交互时将会用到它。

如果部署失败并报 Insufficient balance,说明部署账户余额不足以支付部署费用。访问 Shasta 测试网水龙头领取测试 Token。

第 7 步 — 从控制台调用合约

tronbox console --network shasta

进入交互式控制台后,命令提示符会显示当前已连接的网络名称。运行以下命令与合约交互:

tronbox(shasta)> let instance = await HelloWorld.deployed()
tronbox(shasta)> let msg = await instance.message()
tronbox(shasta)> console.log(msg)
'Hello, TRON!'

tronbox(shasta)> await instance.setMessage("Hello again!")
tronbox(shasta)> let updated = await instance.message()
tronbox(shasta)> console.log(updated)
'Hello again!'

至此,第一个 TRON 智能合约已完成部署并在线调用。

下一步


常见错误

错误产生原因修复方法
command not found: tronboxTronBox 的路径未添加到环境变量中运行 npm install -g tronbox;将 npm 全局 bin 目录添加至系统 PATH 路径中
Compiler version mismatchpragma 声明与 tronbox-config.js 版本不一致将两者修改为相同的版本号
Insufficient balance部署账户中余额不足访问 Shasta 水龙头获取测试 Token
Network connection errorfullHost 配置错误或网络不稳定确认配置文件中的 URL 为 https://api.shasta.trongrid.io
Invalid private key包含了 0x 前缀,或者私钥长度不正确使用 64 位的十六进制私钥(注意不要包含 0x 前缀)

相关资源