无法运行 truffle@2.1.2 migrate --network live。 “超过块气体限制”

Posted

技术标签:

【中文标题】无法运行 truffle@2.1.2 migrate --network live。 “超过块气体限制”【英文标题】:Unable to run truffle@2.1.2 migrate --network live. "Exceeds block gas limit" 【发布时间】:2017-08-12 23:20:41 【问题描述】:

我正在使用 truffle@2.1.2 针对 localhost:8545 geth@1.5.9-stable rpc 部署智能合约,使用由以太币资助的帐户已在 geth 控制台上使用 personal.unlockAccount 解锁。

我也通过 RPC 对远程 Parity 节点进行了同样的尝试,但这是我比较坚持的最新版本。

truffle.js

module.exports = 
  build: 
    "index.html": "index.html",
    "app.js": [
      "javascripts/app.js"
    ],
    "app.css": [
      "stylesheets/app.css"
    ],
    "images/": "images/"
  ,
  rpc: 
    host: "localhost",
    port: 8545
  ,
  networks: 
    "ropsten": 
      network_id: 3,
      port: 8548, // ssh tunnelled to AWS geth/parity node localhost:8545
      from: "0x4f000Bcf4641E2fDcE85BF26A694b053996850D4"
    ,
    "live": 
      network_id: 1,
      port: 8545,
      from: "0x00269400181f1B379784BD8cDF786bb20e91Bdef",
      gas: 4612388,
      gasPrice: 2776297000 // taken from Parity startup log message "Updated conversion rate to Ξ1 = US$42.88 (2776297000 wei/gas)"
    
  
;

truffle migrate --network live

Running migration: 1_initial_migration.js
  Deploying Migrations...
Error encountered, bailing. Network state unknown. Review successful transactions manually.
Error: Exceeds block gas limit
    at Object.module.exports.InvalidResponse (/home/ubuntu/.nvm/versions/node/v6.2.1/lib/node_modules/truffle/node_modules/ether-pudding/node_modules/web3/lib/web3/errors.js:35:16)
    at /home/ubuntu/.nvm/versions/node/v6.2.1/lib/node_modules/truffle/node_modules/ether-pudding/node_modules/web3/lib/web3/requestmanager.js:86:36
    at request.onreadystatechange (/home/ubuntu/.nvm/versions/node/v6.2.1/lib/node_modules/truffle/node_modules/web3/lib/web3/httpprovider.js:114:13)
    at dispatchEvent (/home/ubuntu/.nvm/versions/node/v6.2.1/lib/node_modules/truffle/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:591:25)
    at setState (/home/ubuntu/.nvm/versions/node/v6.2.1/lib/node_modules/truffle/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:610:14)
    at IncomingMessage.<anonymous> (/home/ubuntu/.nvm/versions/node/v6.2.1/lib/node_modules/truffle/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:447:13)
    at emitNone (events.js:91:20)
    at IncomingMessage.emit (events.js:185:7)
    at endReadableNT (_stream_readable.js:926:12)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickDomainCallback (internal/process/next_tick.js:122:9)

我已尝试调整 gas 和 gasPrice,但找不到有任何影响的值。

我该如何解决这个问题,或者我应该研究其他合同部署方法吗?

亲切的问候。

【问题讨论】:

【参考方案1】:

我可以通过在网络配置中简单地设置 gas: 3000000 来解决这个问题。

"live": 
  network_id: 1,
  port: 8545,
  from: "0x00269400181f1B379784BD8cDF786bb20e91Bdef",
  gas: 3000000

运行迁移需要花费大约 0.5 ETH 并且需要几分钟时间。

【讨论】:

【参考方案2】:

我通过在调用 truffle 时指明网络 id 来解决同样的问题,如:

truffle migrate --network live

并且您应该使用您未锁定的帐户修改 truffle.js 中的“来自”标签。

【讨论】:

在问题中我解释说我已经在执行您的两个建议,但仍然遇到问题。【参考方案3】:

在我的情况下,问题是由用户的空余额产生的。

所以请使用以下功能检查您的余额:

function checkAllBalances() 
    var totalBal = 0;
    for (var acctNum in eth.accounts) 
        var acct = eth.accounts[acctNum];
        var acctBal = web3.fromWei(eth.getBalance(acct), "ether");
        totalBal += parseFloat(acctBal);
        console.log("  eth.accounts[" + acctNum + "]: \t" + acct + " \tbalance: " + acctBal + " ether");
    
    console.log("  Total balance: " + totalBal + " ether");
;
 checkAllBalances();

如果余额为 0,则挖掘一些区块或编辑您的创世文件。

【讨论】:

【参考方案4】:

简单的解决方案::在truffle.js中添加gas: 500000,(不要忘记在最后添加逗号)

module.exports = 
  networks: 
    development: 
      host: "localhost",
      port: 8001,
      network_id: 1234, // Match any network id
      gas: 500000
    
  
;

【讨论】:

实际上需要gas前的逗号(上一行“network...”的结尾)。

以上是关于无法运行 truffle@2.1.2 migrate --network live。 “超过块气体限制”的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Php Storm 终端中运行 php artisan migrate:refresh 命令

add-migration:无法将参数绑定到参数“路径”,因为它是一个空字符串

Django 单元测试 - 无法创建 django_migrations 表

解决:无法将“Add-Migration”项识别为 cmdlet函数脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次

无法创建 django_migrations 表(ORA-02000:缺少 ALWAYS 关键字)

尝试在 djangoFramework 项目上运行 python manage.py migrate 但收到错误