快速通道——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.js或tronbox-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 智能合约已完成部署并在线调用。
下一步
- 了解 TVM — TVM 核心概念
- 深入学习部署生命周期 — 开发生命周期管理
- 移植现有以太坊合约 — 从以太坊迁移至 TRON
- 能耗与成本优化 — FeeLimit 与能量成本管理
- 发行 Token — TRC-20 或 TRC-721 Token 标准
常见错误
| 错误 | 产生原因 | 修复方法 |
|---|---|---|
command not found: tronbox | TronBox 的路径未添加到环境变量中 | 运行 npm install -g tronbox;将 npm 全局 bin 目录添加至系统 PATH 路径中 |
Compiler version mismatch | pragma 声明与 tronbox-config.js 版本不一致 | 将两者修改为相同的版本号 |
Insufficient balance | 部署账户中余额不足 | 访问 Shasta 水龙头获取测试 Token |
Network connection error | fullHost 配置错误或网络不稳定 | 确认配置文件中的 URL 为 https://api.shasta.trongrid.io |
Invalid private key | 包含了 0x 前缀,或者私钥长度不正确 | 使用 64 位的十六进制私钥(注意不要包含 0x 前缀) |
相关资源
- 智能合约概览 — 章节导图
- TronBox 文档 —— 完整的 TronBox 工具参考手册
- TronWeb SDK 说明 —— 用于在应用中与 TRON 合约进行交互的 JavaScript 开发工具包 (SDK)
Updated 26 days ago