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提供器,在这种情况下就不能使用自定义的提供器了。