我一直试图设置基于以太坊的演示ICO this tutorial,但每次我尝试将合同部署到Ropsten或Rinkeby时,我都会失败并出现此错误:
Running migration: 2_deploy_contracts.js
Deploying SuperHeroTokenThreeCrowdsale...
... 0x9d0da17f00192993720639abceecc2b33c5fbb9a29dd43fa6e1abd0ce6aecc5d
Error encountered, bailing. Network state unknown. Review successful transactions manually.
Error: The contract code couldn't be stored, please check your gas amount.
at Object.callback (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:314870:46)
at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:35060:25
at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:316808:9
at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:164746:11
at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:294942:9
at XMLHttpRequest.request.onreadystatechange (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:296367:13)
at XMLHttpRequestEventTarget.dispatchEvent (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:164934:18)
at XMLHttpRequest._setReadyState (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:165224:12)
at XMLHttpRequest._onHttpResponseEnd (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:165379:12)
at IncomingMessage.<anonymous> (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:165339:24)
truffle.js:
module.exports = {
networks: {
development: {
host: "localhost",
port: 8545,
gas: 4700000,
from: '0x24182550B8630629501AC11f5568dbb7EE18dBd2',
network_id: "*" // Match any network id
},
}
};
另外,我不得不说我的Rinkeby帐户上有以太。 另一个注意事项 - 如果我部署到TestRpc它工作得很好,我可以购买我的自定义令牌,它一切正常。我试图调整燃气量,但没有任何变化。
任何可能出现问题的想法?
答案 0 :(得分:1)
合同可能对于天然气限制来说太大了。尝试在genesis.json中将gasLimit设置为非常高的值,如0x60000000000000。这样,你可以增加你的气体:在truffle.js中达到6000000。这应该足以部署您的合同。
答案 1 :(得分:1)
看起来代码中存在一些错误。这条消息完全是误导性的。在truffle.js中 NO需要改变气体值
更改 2_deploy_contracts.js 中的startTime
和endTime
后,可以将合同部署到rinkeby。
const IcoMyCoin = artifacts.require("./MyCoinCrowdsale.sol");
const duration = {
seconds: function(val) { return val},
minutes: function(val) { return val * this.seconds(60) },
hours: function(val) { return val * this.minutes(60) },
days: function(val) { return val * this.hours(24) },
weeks: function(val) { return val * this.days(7) },
years: function(val) { return val * this.days(365)}
};
module.exports = function(deployer, network, accounts) {
const startTime = web3.eth.getBlock('latest').timestamp + duration.minutes(1);
const endTime = startTime + duration.minutes(30);
const rate = new web3.BigNumber(1000);
const wallet = '<< YOUR WALLET ADDRESS>>';
deployer.deploy(IcoMyCoin, startTime, endTime, rate, wallet)
};
答案 2 :(得分:0)
我也面临同样的问题集气:4700036在ropsten网络的truffle.js文件中。它可能会奏效。
答案 3 :(得分:0)
我也遇到了同样的问题,这就是我为解决这个错误而采取的措施。
首先要记住部署使用zeppelin-solidity的智能合约,并且在您遵循的教程中,它使用了大量的气体价值。我能够在testrpc上部署合同,但无法在testnet上部署(rinkeby和ropsten)。当我监控testrpc控制台时,合同使用了5200000的燃气量。其中ropsten的块限制是(https://ropsten.infura.io)是4700000.因此我的合同没有在那里部署,它给出了同样的错误。如果我增加truffle.js文件中的气体量,它会给我一个错误,因为&#34;超过阻塞气体限制&#34;。
因此,我选择在Rinkeby网络上部署合同,并在truffle.js文件中进行以下配置。请确保使用npm install ...
安装npm依赖项require('dotenv').config();
const Web3 = require("web3");
const web3 = new Web3();
const WalletProvider = require("truffle-wallet-provider");
const Wallet = require('ethereumjs-wallet');
var rinkebyPrivateKey = new Buffer(process.env["RINKEBY_PRIVATE_KEY"], "hex")
var rinkebyWallet = Wallet.fromPrivateKey(rinkebyPrivateKey);
var rinkebyProvider = new WalletProvider(rinkebyWallet, "https://rinkeby.infura.io/");
module.exports = {
networks: {
development: {
host: "localhost",
port: 8545,
gas: 6700000,
from: "0x2abdf05db2c9632ab240ee59963816f09e6d3e5a",
network_id: "*" // Match any network id
},
rinkeby: {
provider: rinkebyProvider,
gas: 6700000,
gasPrice: web3.toWei("20", "gwei"),
network_id: "2",
}
},
solc: {
optimizer: {
enabled: true,
runs: 200
}
}
};
我希望它可以帮助您解决问题。如有任何问题,请通知我。