我正在尝试部署我的智能合同与松露和恩弗拉HDWalletProvider。下面是我的试运行(为了简洁,我编辑/缩短了它):
Migrations dry-run (simulation)
===============================
> Network name: 'live-fork'
> Network id: 1
> Block gas limit: 29999802 (0x1c9c2ba)
1_initial_migration.js
======================
Deploying 'Migrations'
----------------------
> account: <hidden>
> balance: 0.365066926
> gas used: 138922 (0x21eaa)
> gas price: 32 gwei
> value sent: 0 ETH
> total cost: 0.004445504 ETH
-------------------------------------
> Total cost: 0.004445504 ETH
2_deploy_contracts.js
=====================
Deploying 'MyFirstContract'
-------------------------
> account: <hidden>
> balance: 0.131909166
> gas used: 7258890 (0x6ec30a)
> gas price: 32 gwei
> value sent: 0 ETH
> total cost: 0.23228448 ETH再加上两个运移气体单位,我得到了7397812气体单位。
我的松露配置:
live: {
network_id: 1,
provider: () => new HDWalletProvider(privatekey, infuraUrl),
gasPrice: web3.utils.toWei('32', 'gwei'),
gas: 7500000,
// skipDryRun: true
}我已将gas设置为仅高于7397812单位。
我试着理解一些事情,这样我就不会在失败的交易中失去ETH。完全披露,我刚刚失去了三分之一的ETH,因为我的设置是错误的。("Migrations“用完了gas (使用在网络配置或部署参数中设置的值)。
gas值吗?这只是一个天花板,防止我花费太多吗?7397812单位的试车吗?这是相同数量的单位在现场部署,还是有可能有更多的气体单位,我需要说明?2_deploy_contracts.js下的余额与1_initial_migration.js下的余额不一样。至少,我希望这是第一次迁移平衡和总成本(0.365066926-0.004445504)之间的区别,但事实并非如此。gasPrice和gas在truffle-config.js中的设置,我如何确保这些设置在创建事务之前失败,从而保护我在迁移过程中不会丢失ETH?汽油价格波动很大,我想通过设定一个中低档的汽油价格来降低我的成本,但不是以在一笔失败的交易中损失了我所有的汽油为代价。
发布于 2022-02-22 05:56:28
配置文件中指定的气体是任何事务将支付的最大气体。
这是有可能将其设置为最大使用的气体。这种方法的一个问题是,交易费用是预先支付的。部署者帐户在执行前必须有足够的以太,否则事务将挂起。
气体的价值不取决于区块链,testnet和mainnet应该有相同的成本。但这取决于配置参数和它与之交互的契约。例如,如果一个参数是一个地址,并且它是testnet中的EOA,而在mainnet中是一个multisig钱包,那么代价可能是不同的。如果与契约有交互作用,则在mainnet和testnet之间的成本可能会发生变化。
要再次测试部署,可以使用ganache分叉的mainnet:干草叉是怎么工作的?。它应该提供更现实的价值。
我建议在配置文件中使用少量的gas,比如200 k,在每一个使用200 K以上气体的事务中重写gas参数。
此外,在mainnet中根本不需要Migrations文件。如果可能的话,我建议编写您自己的部署脚本,以跳过松露过时的过程。
https://ethereum.stackexchange.com/questions/122212
复制相似问题