Truffle 5 手册

Truffle命令
命令行概述 truffle build - 构建项目 truffle compile - 编译合约 truffle config - 分析功能开关 truffle console - 启动控制台 truffle create - 创建新构件 truffle debug - 调试链上交易 truffle deploy - 部署合约 truffle develop - 启动开发控制台 truffle exec - 执行JS脚本 truffle help - 帮助信息 truffle init - 初始化项目 truffle install - 安装以太坊包 truffle migrate - 部署合约 truffle networks - 检查网络构件 truffle opcode - 显示合约操作码 truffle publish - 发布以太坊包 truffle run - 运行插件命令 truffle test - 执行测试 truffle unbox - 下载项目模板 truffle version - 显示i版本信息 truffle watch - 自动重新构建
Truffle配置文件
配置文件概述 networks - 网络配置 contracts_directory - 合约目录配置 contracts_build_directory - 合约构建目录配置 migrations_directory - 迁移脚本目录配置 mocha - 测试配置 compilers.solc - Solidity编译器配置 compilers.external - 外部编译器配置
合约抽象层API
合约抽象对象概述 MyContract.new - 部署新合约 MyContract.at - 载入已部署合约 MyContract.deployed - 载入默认合约 MyContract.link - 链接合约库 MyContract.networks - 获取网络列表 MyContract.setProvider - 设置web3提供器 MyContract.setNetwork - 设置网络 MyContract.hasNetwork - 检测指定网络 MyContract.defaults - 实例默认值 MyContract.clone - 克隆合约抽象 MyContract.numberFormat - 数值格式 MyContract.timeout - 交易超时区块数 MyContract.autoGas - 是否自动估算gas MyContract.gasMultiplier - 设置gas估算倍数
Truffle Box API
Truffle Box概述 Truffle Box配置文件 Truffle Box图像规范 Truffle Box发布流程
使用指南
在Truffle中使用Metamask

networks - 网络配置

networks配置用来指定在部署合约、发送交易时使用哪个网络节点。 当在某个特定的网络节点上编译或部署合约时,合约会缓存起来方便后续使用。 当truffle的合约抽象层检查到你连到某个网络节点时,它会使用这个这个网络 节点上原有的缓存合约来简化部署流程。

下述的networks对象,以网络名称作为配置键,值对应定义了相应的网络参数:

networks: {
  development: {
    host: "127.0.0.1",
    port: 8545,
    network_id: "*", // 匹配任何网络
    websockets: true
  },
  live: {
    host: "178.25.19.88", // 作为示例的随机IP,请勿使用
    port: 80,
    network_id: 1,        // 以太坊主网
    // 可选的配置参数:
    // gas
    // gasPrice
    // from - Truffle在执行迁移脚本时用于以太坊交易的默认地址
    // provider - Truffle用来与以太坊网络通信的web3提供器实例对象
    //          - 返回web3提供器实例对象的函数
    //          - 如果指定该参数的话,则忽略host和port
    // skipDryRun: -如果设置为true,则跳过迁移脚本的本地测试环节直接执行。默认为false
    // timeoutBlocks: - 交易未入块时需要等待的区块数量,默认值为50
  }
}

networks选项是必须的,否则truffle不知道如何部署合约。truffle init创建 的默认网络配置提供了一个开发用网络,可以匹配所连接的任何网络 —— 这在 开发期是很有帮助的,但在生产环境中并不合适。要配置Truffle连接到其他 网络,只需要简单地添加更多的命名网络并指定相应的网络ID即可。

网络名称在通过用户接口调用时使用。例如,在部署合约时使用--network选项 指定要使用的网络节点:

$ truffle migrate --network live

对于每一个配置的网络,在未明确设置以下交易参数时,使用其默认值:

  • gas:部署合约的gas上限,默认值:4712388
  • gasPrice:部署合约时的gas价格,默认值:100000000000 wei,即100 shannon
  • from:执行迁移脚本时使用的账户,默认使用以太坊节点旳第一个账户
  • provider:默认的web3 provider,使用host和port配置选项构造:new Web3.providers.HttpProvider("http://<host>:<port>")
  • websockets:需要启用此选项以使用确认监听器,或者使用.on.once监听事件。默认值为false

一个网络,可以指定 host/port或provider,但不可以同时使用这两个选项。 如果你需要一个HTTP提供器,建议使用host和port配置;如果需要一个自定义提供器 例如HDWalletProvider,那么必须使用provider配置。

web3提供器

下面的网络配置中包含有一个本地测试网络,以及一个infura接入的Ropsten测试网络, 这两个网络都使用HDWalletProvider提供器。请确保像下面代码这样,使用闭包来封装 truffle-hardware提供器,以确保同一时间仅连接一个网络:

networks: {
  ropsten: {
    provider: function() {
      return new HDWalletProvider(mnemonic, "https://ropsten.infura.io/v3/YOUR-PROJECT-ID");
    },
    network_id: '3',
  },
  test: {
    provider: function() {
      return new HDWalletProvider(mnemonic, "http://127.0.0.1:8545/");
    },
    network_id: '*',
  },
}

如果你指定了host和port而不是provider配置,那么truffle将使用host和port的配置值 创建默认的HTTP提供器,在这种情况下就不能使用自定义的提供器了。