Как развернуть интеллектуальный контракт на прочность, если конструктор одного контракта зависит от другого контракта?

Пример кода: https://github.com/facuspagnuolo/ethereum-spiking/tree/master/5-token-sale-contract

Связанные файлы:

1. контракты \ MyToken.sol

contract MyToken is BasicToken, Ownable {
  uint256 public constant INITIAL_SUPPLY = 10000;

  function MyToken() {
    totalSupply = INITIAL_SUPPLY;
    balances[msg.sender] = INITIAL_SUPPLY;
    Transfer(0x0, msg.sender, INITIAL_SUPPLY);
  }
}

2. контракты \ TokenSale.sol

contract TokenSale is Ownable {
  MyToken public token;
  uint256 public priceInWei;
  bool public tokenSaleClosed;

  event TokenPurchase(address buyer, address seller, uint256 price, uint256 amount);

  function TokenSale(MyToken _token, uint256 _price) public {
    if (_price < 0) return;

    token = _token;
    priceInWei = _price;
    tokenSaleClosed = false;
  }

}

3. Миграции \2_deploy_contracts.js

const MyToken = artifacts.require("./MyToken.sol");
const TokenSale = artifacts.require("./TokenSale.sol");

module.exports = function(deployer) {
  deployer.deploy(MyToken);
  deployer.deploy(TokenSale);
};

когда я развертываю его с помощью truffle и testrpc ($ truffle migrate), происходит сбой, как показано ниже:

Использование сети "развитие".

Выполняемая миграция: 2_deploy_contracts.js Развертывание MyToken... ... 0x289577d078c8fbc61585127ac123dbef43aa711529bf079c4fd400206c65e0de MyToken: 0x33ddda65330e75e45d3d2505 Состояние сети неизвестно. Просмотрите успешные транзакции вручную. Ошибка: конструктор контракта TokenSale ожидал 2 аргумента, полученных 0 в C:\Users\zklin\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\truffle-contract\contract.js:390:1 при новом обещании () в C:\Users\zklin\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\truffle-contract\contract.js:374:1 в at process._tickCallback (внутренний /process/next_tick. JS:188:7)

2 ответа

http://truffleframework.com/docs/getting_started/migrations

// Deploy A, then deploy B, passing in A's newly deployed address
deployer.deploy(A).then(function() {
  return deployer.deploy(B, A.address);
});

Может работать миграция только второй, поэтому TokenSale и автоматически будет развернут MyToken.

Другие вопросы по тегам