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
コメントはまだありません

コメントを残す

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

CAPTCHA


仮想通貨全般
TendermintをDocker使って起動してみる

以前、勉強会に行ってきた際にTendermintの事を聞いて ブロックチェーンプロトコルが実装できる …

仮想通貨全般
Bitcoinのdifficultyを決めるnBitsを理解する

マイニングする際の理解を深めようと思い、マイニング難易度(difficulty)を決めるnBitsに …

仮想通貨全般
EOS Night Meetupにいってきた

今回は、以前からEOSに興味があったので EOS Night Meetupにいってきました。 暗号通 …