为什么我的松露部署由于资金不足而失败



我钱包里有足够的ETH,但由于不合逻辑的原因,迁移到主网失败了——资金不足

Truffle有一个奇怪的成本计算逻辑——它部署了初始迁移和我的合同(Nft(,然后抱怨钱包中剩余的余额低于总前期成本。谢谢你帮助我理解这一点。

  • 钱包余额:0.3981 ETH
  • 前期成本(天然气*价格(:0.2755 ETH
  • Truffle报告的部署成本:约0.26 ETH
  • 剩余余额:0.1381 ETH

逻辑错误:0.1381 ETH低于前期成本0.2755 ETH

truffle config.js

const HDWalletProvider = require('truffle-hdwallet-provider')
...
live: {
provider: () => new HDWalletProvider(MNEMONIC_LIVE, LIVE_URL),
network_id: 1, 
gas: 3450000,        
gasPrice: web3.utils.toWei('79', 'gwei'),   
confirmations: 1,    
timeoutBlocks: 200,  
skipDryRun: false,     
networkCheckTimeout:1000000
},

迁移试运行日志

1_initial_migration.js
======================
Deploying 'Migrations'
----------------------
> block number:        12232671
> block timestamp:     1618329800
> account:             0xbb467DA83d9DB2F10Bb5E6d5C4b48121a62FB80E
> balance:             0.379524194
> gas used:            235234 (0x396e2)
> gas price:           79 gwei
> value sent:          0 ETH
> total cost:          0.018583486 ETH
-------------------------------------
> Total cost:         0.018583486 ETH

3_nft_deploy.js
================
Deploying 'Nft'
----------------
> block number:        12232673
> block timestamp:     1618330490
> account:             0xbb467DA83d9DB2F10Bb5E6d5C4b48121a62FB80E
> balance:             0.138160076
> gas used:            3027724 (0x2e330c)
> gas price:           79 gwei
> value sent:          0 ETH
> total cost:          0.239190196 ETH

Error: sender doesn't have enough funds to send tx. The upfront cost is: 272550000000000000 and the sender's account only has: 138160076000000000
at Migration._deploy (/home/roman/.npm-global/lib/node_modules/truffle/build/webpack:/packages/migrate/Migration.js:103:1)
at process._tickCallback (internal/process/next_tick.js:68:7)
Truffle v5.2.6 (core: 5.2.6)
Node v10.19.0

我遇到了同样的问题,我能够联系松露支持团队,他们知道这个问题,答案是:

因此,在执行#4296时,@fainashalts发现,执行eth_estimateGas的天真策略不足以用于恢复的事务:在这种情况下,eth_estimateGas不会提供数量作为响应(而是出错(。这意味着Truffle将无法继续发送交易,因为它没有发送交易所需的所有信息。我们需要Truffle能够发送交易,即使它知道这些交易会恢复,因为用户必须能够检查这些恢复的交易(例如,通过堆栈跟踪检查等(。因此,当无法通过CCD_ 3确定估计值时,我们将需要一些额外的逻辑来产生气体极限值。

最佳解决方案尚未确定,但我们发现了一些选项(所有选项都与eth_estimateGas因还原而失败的情况有关(:a.使用区块限额(或基于区块限额的某个值,例如blockLimit / 2(作为默认交易气体限额
b。进行二进制搜索以找到交易失败的"0"one_answers"0"之间的气体限制的边界;气体不足";交易失败的原因是";"回复";,并在向网络发送交易时使用该值
c。申请修改JSON-RPC和所有客户端实现,以确保eth_estimateGas即使对于恢复的交易也报告合理的气体限值

这些似乎都不理想;目前正在寻找一个选项(d(

发件人https://github.com/trufflesuite/truffle/issues/3992

无论如何,你可以避免运行dryrun来部署迁移,或者做我所做的调整天然气和天然气价格的事情,以降低tx成本并为我的钱包添加更多资金。

如果你正确处理了gas和gasPrice,你不应该担心钱包里的以太币比你真正需要的要多。

我知道,这不是最好的解决方案,但有效。

相关内容

最新更新