2017-12-19 26 views
1

私はTruffleフレームワークを使って契約を展開しようとしていましたが、最近私は開発ネットワーク上でこれらの契約をテストしています。継承を使用する場合、どのように開発者ネットワークにトリュフ契約を展開するのですか?

私の契約は非常に大きく、テストネットに展開しようとすると、契約がガス制限を超えないように分割するよう指示されました。しかし、この契約を念頭において、デフォルトのガス制限で開発ネットワークに展開しました。

私は契約の一部を取り出し、ベースから別の契約を引き出し、そこで削除されたセクションを追加しました。

    はdidnの100,000,000に私のgasLimitを変更
  1. :私が撮った

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

    ので、手順はことだった:私は、私が今エラーが出る再びそれをテストするために開発ネットワークに展開しようとしましたこの私の理解はそれまたはそのあれば契約は抽象的であるということである抽象的な 『

    • 「Tはそれを私の契約があるかどうかを確認するために
    • チェックを解きます』親には実装されていない関数があります。私はしません。

  2. は、私はその後 導出契約からコンストラクタ以外のすべてのコードを削除し、私はまだ、私はファイルを削除し

このエラーを取得し、展開はちょうど私の基本契約などで働いていましたしたがって、親契約は実装されていない関数を持たず、空の契約を導出しようとするとまだ動作しません。

  1. その後、マイグレーションファイルを分割して、マイグレーションが別々に起こるようにしてください。 はまだ運がありません。

私の親契約は約300行ですので、ここにそれをすべてポストする必要はありません。しかし、それは開発者に500行の長さだったとき現在は250行しかなく、275行の引き出し契約があり、展開しません。

エラー:

Running migration: 2_deploy_contracts.js 
Replacing ERC20Token... 
... 0xcae613274de1aa278e7ae5d1239f43445132a417d98765a4f227ea2439c9e4fc 
ERC20Token: 0xeec918d74c746167564401103096d45bbd494b74 
Replacing Crowdsale... 
... 0x0ffc7291d84289c1391a81ed9f76d1e165285e3a3eadc065732aa288ea049b3a 
Crowdsale: 0x0d8cc4b8d15d4c3ef1d70af0071376fb26b5669b 
Saving successful migration to network... 
... 0x7f351d76f61f7b801913f59b808688a2567b64933cdfdcf78bb18b0bf4e4ff69 
Saving artifacts... 
Running migration: 3_more_deployed_contracts.js 
    Deploying StagedSale... 
    ... 0x216136bb24d317b140a247f10ec4d6791559739111a85932133cd4a66b12a1d9 
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:329221:46) 
at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:39618:25 
at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:331159:9 
at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:175492:11 
at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:314196:9 
at XMLHttpRequest.request.onreadystatechange 
(/usr/local/lib/node_modules/truffle/build/cli.bundled.js:329855:7) 

私の基本契約を投稿するには大きすぎる、そしてそれは、その抽象的ではないことを意味独自に罰金展開します。

私の導出契約は次のとおりです。

pragma solidity ^0.4.16; 

import "./SafeMath.sol"; 
import "./Crowdsale.sol"; 

contract StagedSale is Crowdsale { 
    using SafeMath for uint256; 

    /* 
    * Setup the contract and transfer ownership to appropriate beneficiary 
    */ 
    function StagedSale 
    ( 
     uint256 _stage1Duration, 
     uint256 _stage2Duration 
    ) public { 
     uint256 stage1duration = _stage1Duration.mul(1 minutes); 
     uint256 stage2duration = _stage2Duration.mul(1 minutes); 
    } 

導出契約のための私のマイグレーションファイル:

var StagedSale = artifacts.require("./StagedSale.sol"); 

module.exports = function(deployer) { 
    const stage1Duration = 1; 
    const stage2Duration = 1; 

    deployer.deploy(StagedSale, stage1Duration, stage2Duration); 
}; 

私はこれがトリュフの展開に共通の問題かもしれ恐れるように私はここにこの質問を掲載しています。

結論として、私はこれが実際のガス限界値とは関係なく、何らかの未知の理由で失敗し、このエラーメッセージをとにかく印刷しているとは思わない。

+0

私は、額面でエラーメッセージを受け取る傾向があります。 web3.eth.estimateGas()はあなたに何を伝えますか? https://ethereum.stackexchange.com/questions/10974/when-i-am-deploying-contract-getting-the-error-the-contract-code-couldnt-be-sを見てください –

+0

私は見ましたその質問とその理由は、あなたの質問が私の契約は500以上のラインを持つ開発ネットワーク上でうまく展開質問の始まりをメモした場合、それはできません。私はそれをテストネットに展開しようとしましたが、それは大きすぎると言いました。 私は契約を300行の基本契約に分割し、より多くの機能を追加する前に約30行の継承契約を締結しました。 開発サーバーに展開しようとするとこのエラーが表示されますそれが何をしているのかをテストしても、私の以前の500 +ライン契約でうまくいきました。 –

答えて

1

あなたは基本契約から継承されている基本的にあれば、あなたはそのような継承された契約のコンストラクタ内基本契約を展開する必要があり、これに修正を私を見つけた:

OLD VERSION:単純に展開

ベースは、その後を参照して、継承の契約は、クラス名

deployer.deploy(ERC20Token, initialAmount, tokenName, decimalUnits,tokenSymbol).then(function() { 
    return deployer.deploy(Crowdsale, softCap, hardCap, etherCostOfEachToken, sendFundsTo, toChecksumAddress(ERC20Token.address), durationInMinutes); 
    }); 

deployer.deploy(FinalizableSale); 

NEW VERSIONで「Crowdsaleある」展開

のみ継承契約を展開し、そのコンストラクタ内

deployer.deploy(ERC20Token, initialAmount, tokenName, decimalUnits,tokenSymbol).then(function() { 
    return deployer.deploy(Finalizable, softCap, hardCap, etherCostOfEachToken, sendFundsTo, toChecksumAddress(ERC20Token.address), durationInMinutes); 
    }); 

ファイナライズCONSTRUCTORベースの新しいインスタンスを作成します。

function FinalizableSale(uint256 _fundingGoalInEthers, uint256 _fundingLimitInEthers, uint256 _etherCostOfEachToken, address _sendFundsTo, address _tokenAddress, uint256 _durationInMinutes) 
    Crowdsale(_fundingGoalInEthers, _fundingLimitInEthers, _etherCostOfEachToken, _sendFundsTo, _tokenAddress, _durationInMinutes) 
{ 
    //do something 
} 

注:基本契約はコンストラクタ関数への開口部ブラケット前に初期化されていること。

私はもはや 'out of gas'エラーが発生せず、私の契約は以前と同じように実行されます。

関連する問題