配置文件位置
配置文件名为 tronbox.js
,位于项目目录的根目录下。 它是 Javascript 文件,可以执行创建配置所需的任何代码。 它必须导出表示项目配置的对象,如下例所示:
module.exports = {
networks: {
development: {
privateKey: 'your private key',
userFeePercentage: 100, // The percentage of resource consumption ratio.
feeLimit: 100000000, // The TRX consumption limit for the deployment and trigger, unit is SUN
fullNode: 'https://api.nileex.io',
solidityNode: 'https://api.nileex.io',
eventServer: 'https://event.nileex.io',
network_id: '*'
},
compilers: {
solc: {
version: '0.8.0'
}
}
},
// solc compiler optimize
solc: {
optimizer: {
enabled: true,
runs: 200
},
evmVersion: 'istanbul'
}
};
默认配置附带开发网络的配置,运行在 127.0.0.1:9090
上。 还有许多其他配置选项,详情如下。
解决 Windows 命令名冲突
在 Windows 上使用命令提示符时,默认配置文件名可能会导致与 tronbox
可执行文件冲突,因此我们可能无法在现有项目上正确运行 TronBox 命令。
这是因为命令优先级在命令提示符上的工作方式。 tronbox.cmd
可执行文件作为 npm 包的路径上,但 tronbox.js
配置文件位于运行 tronbox
命令的实际目录中。 而 .js
是默认的可接受的可执行扩展名,tronbox.js
优先于 tronbox.cmd
,导致意外的结果。
以下任何解决方案都可以解决此问题:
- 使用
.cmd
扩展名(tronbox.cmd compile
)显式调用可执行文件。 - 编辑系统
PATHEXT
环境变量并从可执行扩展列表中删除.JS;
。 - 将
tronbox.js
重命名为其他东西(tronbox-config.js
)。 - 使用 Windows PowerShell 或 Git BASH, 或不会引起冲突的 shell .
常用配置选项
网络 networks
指定部署网络,以及与每个网络交互时的特定交易参数(例如,feelimit,账号地址等)。 在指定网络上进行编译和部署时,将保存并记录合约工件(artifacts)以供以后使用。
当合约抽象检测到我们连接到指定网络时,他们将使用与该网络相关联的合约工件(artifacts)来简化应用程序部署。
如下所示,networks
对象由网络名称作为键,并包含定义相应网络参数的对象。你可以提供自己的网络名称和配置,以告诉 TronBox 在部署和测试时要连接到什么网络。
一旦你定义了你的网络,你可以为某些命令提供名称作为选项;这在测试或运行迁移时是可能的。你可以在迁移过程中指定一个网络名称,如下所示:
$ tronbox migrate --network nile
如:
networks: {
shasta: {
privateKey: process.env.PRIVATE_KEY,
userFeePercentage: 50,
feeLimit: 1000 * 1e6,
fullHost: 'https://api.shasta.trongrid.io',
network_id: '2',
},
nile: {
privateKey: process.env.PRIVATE_KEY,
userFeePercentage: 100,
feeLimit: 1000 * 1e6,
fullHost: 'https://api.nileex.io',
network_id: '3',
},
}
不管哪个网络,如果未指定交易选项,则将使用以下默认值:
feeLimit
: 指智能合约部署或调用所消耗的能量成本的上限。 默认为1000000000
(1000 TRX)userFeePercentage
: 指用户为智能合约执行支付的能量与开发者支付的能量的占比。默认为100
originEnergyLimit
: 指在一次合约执行或创建过程中创建者自己消耗的最大的能量。默认为10000000
(10_000_000 ENERGY)callValue
: 指部署合约的时候向合约地址发送 TRX。默认为0
tokenId
: 指部署合约的时候向合约地址发送 TRC10 币的 id。默认为0
tokenValue
: 指部署合约的时候向合约地址发送 TRC10 币的数量。默认为0
使用助记词
相对于私钥,如果你更喜欢使用助记词,可以在networks
的配置中使用 mnemonic,例如:
networks: {
shasta: {
// privateKey: process.env.PRIVATE_KEY,
mnemonic: process.env.MNEMONIC,
userFeePercentage: 50,
feeLimit: 1000 * 1e6,
fullHost: 'https://api.shasta.trongrid.io',
network_id: '2',
},
......
}
然后,在你的.env
文件中添加 MNEMONIC 配置。
例如:
export MNEMONIC="test test test test test test test test test test test test"
使用 mnemonic,需要将你的 TronBox 升级到 v3.0.2 以上。
指定合约目录
未编译合约的默认目录的是位于项目根目录的 ./contacts
。 如果你希望将合约保存在不同的目录中,则可以指定 contracts_directory
属性。
例如,让 TronBox 在编译时在 ./allMyStuff/someStuff/theContractFolder
(递归)文件中查找合约:
module.exports = {
contracts_directory: './allMyStuff/someStuff/theContractFolder',
networks: {
nile: {
privateKey: process.env.PRIVATE_KEY,
feeLimit: 1000 * 1e6,
fullHost: 'https://api.nileex.io',
network_id: '3'
}
}
};
指定合约构建生成目录
编译合约的默认输出目录是相对于项目根目录的 ./build/contracts
。 这可以使用 contracts_build_directory
属性进行更改。
例如,将构建的合约工件(artifacts)放在 ./output/contracts
中:
module.exports = {
contracts_build_directory: './output',
networks: {
nile: {
privateKey: process.env.PRIVATE_KEY,
feeLimit: 1000 * 1e6,
fullHost: 'https://api.nileex.io',
network_id: '3'
}
}
};
构建的合约工件(artifacts)不需要位于项目根目录中:
module.exports = {
contracts_build_directory: '../../../output',
networks: {
nile: {
privateKey: process.env.PRIVATE_KEY,
feeLimit: 1000 * 1e6,
fullHost: 'https://api.nileex.io',
network_id: '3'
}
}
};
绝对路径也可以,但是不建议这样做,因为在另一个系统上编译时可能不存在绝对路径。 如果在 Windows 上使用绝对路径,请确保对路径使用双反斜杠(例如:C:\\Users\\Username\\output
)。
迁移文件目录
默认迁移目录是项目根目录下的 ./migrations
文件夹。 可以使用 migrations_directory
更改此设置。
如:
module.exports = {
migrations_directory: './allMyStuff/someStuff/theMigrationsFolder',
networks: {
nile: {
privateKey: process.env.PRIVATE_KEY,
feeLimit: 1000 * 1e6,
fullHost: 'https://api.nileex.io',
network_id: '3'
}
}
};
指定编译器
在 compilers
对象中,我们可以指定与 TronBox 使用的编译器相关的设置。
solc
Solidity 编译器设置,支持 solc
的优化器(optimizer)设置。
TronBox 配置示例:
module.exports = {
networks: {
compilers: {
solc: {
version: '0.8.6'
}
}
},
solc: {
optimizer: {
enabled: true,
runs: 200
},
evmVersion: 'istanbul'
}
};