TronBox 配置

配置文件位置

配置文件名为 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 PowerShellGit 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

指定合约目录

未编译合约的默认目录的是位于项目根目录的 ./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'
  }
};