Error: The contract code couldn’t be stored, please check your gas amount.

Ethereum(イーサリアム)

ALISのICOソースzeppelinバージョンを1.2から1.8にあげようとしたときにはまったエラーのメモです。

Sponsored Link


Gasっていうメッセージが出てるのに根本原因がGasではない

ほんと、デバッグメッセージなんとかして欲しいですね。

zeppelinのcontractソースをTruffleでコントラクトをdeployしているよく出るエラーメッセージで

Error: The contract code couldn't be stored, please check your gas amount.

というエラーメッセージがあるんですが、これは実際にgas量が問題ではなくて、contractのconstructor内のrequireが通っていない事が多いです。

上記で触れられていますが、requireが通らないとエラーメッセージが出力されてしまいます。
自分の場合は

contract SampleCrowdsale is CappedCrowdsale, RefundableCrowdsale, Pausable {

というcontractを作成したときに RefundableCrowdsale が原因でこちらのエラーメッセージが出てしまいました。
RefundableCrowdsaleは、FinalizableCrowdsaleを継承し、さらにFinalizableCrowdsaleがTimedCrowdsaleを継承しています。

こちらの TimedCrowdsale に指定した openingTime(開始時間) と closingTime(終了時間) が現在時刻よりも過去のものを指定していたため、constructorのrequireで弾かれていたようでした。

  function TimedCrowdsale(uint256 _openingTime, uint256 _closingTime) public {
    // solium-disable-next-line security/no-block-members
    require(_openingTime >= block.timestamp);
    require(_closingTime >= _openingTime);

自分が作成したクラウドセールのコントラクト部分をのせておくと

  function SampleCrowdsale(
    uint256 _openingTime,
    uint256 _closingTime,
    uint256 _baseRate,
    address _wallet,
    uint256 _cap,
    uint256 _tokenCap,
    uint256 _initialSampleFundBalance,
    uint256 _goal,
    MintableToken _token
  )
  Crowdsale(_baseRate, _wallet, _token)
  TimedCrowdsale(_openingTime, _closingTime)
  CappedCrowdsale(_cap)
  RefundableCrowdsale(_goal)
  {
    :
	:

こんな感じで migrate ファイルは以下。
fundParams、crowdsaleParams、rate はconfigファイルから読み込まれます。

  return deployer
          .then(() => {
              return deployer.deploy(SampleToken);
          })
          .then(() => {
              return deployer.deploy(
                  SampleFund,
                  fundParams.owners,
                  fundParams.required
              );
          })
          .then(() => {
              return deployer.deploy(
                  SampleCrowdsale,
                  crowdsaleParams.openingTime,
                  crowdsaleParams.icoStartTime,
                  crowdsaleParams.closingTime,
                  rate.base,
                  SampleFund.address,
                  actualCap,
                  actualTokenCap,
                  actualInitialSampleFundBalance,
                  actualGoal,
                  SampleToken.address
              );
          })
          ;

みなさんもこちらのエラーが出たら、constructorのrequireを疑っても良いかもしれませんね。

Sponsored Link

ビットコイン(Bitcoin)、イーサリアム(Ethereum)、リップル(Ripple)、ネム(NEM)などの仮想通貨を買うならZaifがおすすめです。

特に国内でETHを購入するなら、アルトコインでも板取引に対応しているZaif(ザイフ)が割安なのでよいですよ。

コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


Ethereum(イーサリアム)
Web3.0 dApps Browser の Brave & BAT(Basic Attention Token)

以前話題になったWeb3.0 dAppsの例ですが web 2.0 Apps -> web 3 …

Dapps
IPFSとブロックチェーンのDAppsサンプルに触れてみる

巷では最近IPFSとブロックチェーンを組み合わせてDAppsを作るパターンが増えてきているようで ブ …

Ethereum(イーサリアム)
Ethereumのバグを見つけたらお金がもらえる! 〜 ETHEREUM Bounty Program

Ethereumのスマートコントラクトで実装したソースは一度、ブロックチェーン上に乗せてしまうと、簡 …