Как развернуть интеллектуальный контракт на прочность, если конструктор одного контракта зависит от другого контракта?
Пример кода: 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.