Я хотел следовать руководству - https://blog.zeppelin.solutions/how-to-create-token-and-initial-coin-offering-contracts-using-truffle-openzeppelin-1b7a5dae99b6 - но был новый релиз - https://github.com/OpenZeppelin/zeppelin-solidity/releases/tag/v1.7.0 - вот и пытаюсь разобраться...
Фактический код проверяется на Etherscan.
Краудсейл: https://ropsten.etherscan.io/address/0x018ea8f3fef7bd14c7bff98e898842925f05e6ea#code
Монета: https://ropsten.etherscan.io/address/0x37ca578d3d847d27741b2ffc033419a7d11b7bef#code
Мой аккаунт отправляет ETH на краудсейл: https://ropsten.etherscan.io/address/0x85a363699c6864248a6ffca66e4a1a5ccf9f5567
Хэш транзакции: https://ropsten.etherscan.io/tx/0x7f99bca20b767073eb48ed2e6d01186c55bcc97ee8316523977e15c4286f6c5a
Вот короткое видео, в котором я объясняю, что делаю: https://youtu.be/oKP9ea5PNho
function Crowdsale(uint256 _rate, address _wallet, ERC20 _token) public
Я создаю монету и краудсейл следующим образом:
contract MailHustleCrowdsale is Crowdsale {
uint256 _rate = 1000;
address _wallet = 0x315f80c7caacbe7fb1c14e65a634db89a33a9637;
ERC20 _token = new MailHustleCoin();
function MailHustleCrowdsale() Crowdsale(_rate, _wallet, _token) {
}
}
Я предполагаю, что ошибка где-то здесь, но не могу понять рабочий синтаксис...
Альтернативный подход:
Как сослаться на контракт монеты уже в сети?
Если включение оригинального исходного кода нецелесообразно, простой способ обойти это — просто создать контракт-заглушку поверх вашего собственного контракта, содержащий сигнатуру функции, которую вы хотите вызвать.
Для простоты я решил включить все в один файл.
Кредит принадлежит Видору:
Может быть, вы можете заработать репутацию Stack Overflow и поместить эти указатели в исходный вопрос?
слишком много хлопот, чтобы мало удовольствия
Я понял, я сделаю это тогда
Я понимаю, что знаю так мало, и мне не следует трогать код.
function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool)
Чеканить может только владелец. Создание монеты должно быть в контракте краудсейла.
function _deliverTokens(address _beneficiary, uint256 _tokenAmount) internal { require(MintableToken(token).mint(_beneficiary, _tokenAmount)); }
Вместо
function _deliverTokens(address _beneficiary, uint256 _tokenAmount) internal { token.transfer(_beneficiary, _tokenAmount); }
В настоящее время вы передаете токены с адреса отправителя, который имеет 0. Вы хотите выбрать стратегию чеканки, которая лучше
Вот работающий TX: https://ropsten.etherscan.io/tx/0x1b4c11eee16e06bc53a273a9a805ea11def461c9f81847edb2d8f95daa273ae5
(вы можете перейти к контракту, чтобы увидеть рабочий источник)
Вот лучший пример: https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/examples/SampleCrowdsale.sol