У меня есть 2 основных контракта: один на токен, а второй на продажу.
Контракт токена:
contract MyToken is StandardToken, Ownable {
string public constant name = "My Sample Token";
string public constant symbol = "MST";
uint32 public constant decimals = 18;
function MyToken(uint _totalSupply) {
require (_totalSupply > 0);
totalSupply = _totalSupply;
balances[msg.sender] = totalSupply;
}
}
Договор купли-продажи
contract Sale {
address owner;
address public founderAddress;
uint256 public constant foundersAmount = 50;
MyToken public token = new MyToken(1000);
uint256 public issuedTokensAmount = 0;
function Sale() {
owner = msg.sender;
founderAddress = 0x14723a09acff6d2a60dcdf7aa4aff308fddc160c;
token.transfer(founderAddress, foundersAmount);
}
function() external payable {
token.transfer(msg.sender, 1);
owner.transfer(msg.value);
}
}
StandardToken и Ownable являются стандартными реализациями из репозитория OpenZeppelin. Полный текст контракта доступен здесь.
Итак, в основном в своем контракте на продажу я создаю экземпляр своего контракта на токены с фиксированной поставкой и назначаю все токены вызывающей стороне. Затем я перевожу некоторое количество токенов на адрес учредителя. Когда я пытаюсь отправить некоторое количество эфириума в контракт на продажу, я пытаюсь передать некоторые из моих токенов отправителю (запуская весь код в браузере Remix, я создаю экземпляр контракта на продажу и вызываю «запасной» метод с указанием некоторого количества эфира). Однако это не удается с «Исключением во время выполнения. (Недопустимый код операции). Пожалуйста, отладьте транзакцию для получения дополнительной информации». сообщение. Все, что я вижу при отладке, - это то, что код не работает в оплачиваемом методе в строке:
token.transfer(msg.sender, 1);
Я не вижу точной причины этого, поскольку я не могу войти в этот метод и посмотреть, что происходит внутри.
Интересно то, что когда я удаляю вызов метода передачи в экземпляре токена в конструкторе контракта на продажу, код, кажется, работает нормально без каких-либо исключений.
Что мне не хватает?