2017-12-19 27 views
1

트러 플 프레임 워크를 사용하여 계약을 전개하려고 시도한 결과 최근 개발 네트워크에서 이러한 계약을 테스트했습니다.상속을 사용할 때 트러 플 계약을 dev 네트워크에 배포하는 방법은 무엇입니까?

내 계약이 너무 커서 테스트 계약서에 배포하려고 시도했을 때 계약서가 가스 한도를 초과하지 않도록 계약서를 나누도록 지시 받았습니다. 하지만이 계약을 염두에두면 기본 가스 한도를 사용하여 개발 네트워크에 배포했습니다.

그래서 나는 계약의 일부를 꺼내서 기지에서 다른 계약을 파생 시켰고 거기에 삭제 된 섹션을 추가했습니다.

    didn를 100,000,000 내 gasLimit 변경
  1. : 내가했다

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

    그래서 단계를했다 : 나는, 내가 지금 오류가 다시 테스트하기 위해 개발 네트워크에 배포하는 시도 '추상적 인'내 계약의 경우 t는보고 그것을

  2. 확인 해결 '

    • 이의 나의 이해는 계약이 추상적이라는 것이다 그것을 또는경우부모는 구현 기능이 없습니다. 내꺼.
  3. 나는 다음 파생 계약에서 생성자 이외의 모든 코드를 삭제하고 난 아직도 파일을 삭제

이 오류 및 배포 그냥 내 기본 계약 등과 협력 따라서 부모 계약에는 구현되지 않은 함수가 없어야하며, 빈 계약을 파생하려고 시도 할 때 작동하지 않습니다. 파생 된 계약에서 추상이 없었는지 확인하십시오.

  1. 그런 다음 마이 그 레이션 파일을 분할하여 을 별도로 실행해도 운이 없도록합니다.

내 부모 계약은 약 300 라인 긴 그래서 여기에 모두 게시 아무 소용 없다 - 나는 그것이 dev에 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

, 당신과 같이 상속 된 계약 생성자 내에서 기본 계약을 배포해야합니다 :

은 이전 버전 :

은 간단하게 배치 기본은 다음에 대한 참조를 사용하여 상속 계약 클래스 이름

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

deployer.deploy(FinalizableSale); 

새 버전의 'Crowdsale이다'배치

만 물려 계약을 배치하고 그 생성자 내에

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

마무리가 생성자베이스의 새로운 인스턴스를 생성 :

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'오류가 발생하지 않으며 이전과 같이 계약이 실행됩니다.