首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免松露迁移到mainnet中的事务失败

避免松露迁移到mainnet中的事务失败
EN

Ethereum用户
提问于 2022-02-21 16:54:46
回答 1查看 81关注 0票数 0

我正在尝试部署我的智能合同与松露和恩弗拉HDWalletProvider。下面是我的试运行(为了简洁,我编辑/缩短了它):

代码语言:javascript
复制
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气体单位。

我的松露配置:

代码语言:javascript
复制
    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 (使用在网络配置或部署参数中设置的值)。

  1. 我需要设置gas值吗?这只是一个天花板,防止我花费太多吗?
  2. 我能指望7397812单位的试车吗?这是相同数量的单位在现场部署,还是有可能有更多的气体单位,我需要说明?
  3. 为什么2_deploy_contracts.js下的余额与1_initial_migration.js下的余额不一样。至少,我希望这是第一次迁移平衡和总成本(0.365066926-0.004445504)之间的区别,但事实并非如此。
  4. 最重要的是:给定我钱包中的资金以及gasPricegastruffle-config.js中的设置,我如何确保这些设置在创建事务之前失败,从而保护我在迁移过程中不会丢失ETH?

汽油价格波动很大,我想通过设定一个中低档的汽油价格来降低我的成本,但不是以在一笔失败的交易中损失了我所有的汽油为代价。

EN

回答 1

Ethereum用户

发布于 2022-02-22 05:56:28

配置文件中指定的气体是任何事务将支付的最大气体。

这是有可能将其设置为最大使用的气体。这种方法的一个问题是,交易费用是预先支付的。部署者帐户在执行前必须有足够的以太,否则事务将挂起。

气体的价值不取决于区块链,testnet和mainnet应该有相同的成本。但这取决于配置参数和它与之交互的契约。例如,如果一个参数是一个地址,并且它是testnet中的EOA,而在mainnet中是一个multisig钱包,那么代价可能是不同的。如果与契约有交互作用,则在mainnet和testnet之间的成本可能会发生变化。

要再次测试部署,可以使用ganache分叉的mainnet:干草叉是怎么工作的?。它应该提供更现实的价值。

我建议在配置文件中使用少量的gas,比如200 k,在每一个使用200 K以上气体的事务中重写gas参数。

此外,在mainnet中根本不需要Migrations文件。如果可能的话,我建议编写您自己的部署脚本,以跳过松露过时的过程。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/122212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档