Согласно документации Solidity :
Исключение в стиле требования генерируется в следующих ситуациях:
...
Если вы вызываете функцию через вызов сообщения, но она не завершается должным образом ( т. е. заканчивается газ , не имеет соответствующей функции или сама генерирует исключение)
...
Внутри Solidity выполняет операцию возврата (инструкция 0xfd) для исключения в стиле требования и выполняет недопустимую операцию (инструкция 0xfe) для создания исключения в стиле утверждения.
Однако в этой транзакции 0xfe
выполняется код операции (см. этап 1394), который используется для исключений в стиле утверждений.
Документация неверна или компилятор не следует документации?
Если вы посмотрите на исходный код функции removeTokens
function withdrawToken(address token, uint amount) {
if (token==0) throw;
if (tokens[token][msg.sender] < amount) throw;
tokens[token][msg.sender] = safeSub(tokens[token][msg.sender], amount);
if (!Token(token).transfer(msg.sender, amount)) throw;
Withdraw(token, msg.sender, amount, tokens[token][msg.sender]);
}
У него явно есть бросок, а бросок будет генерировать 0xfe.
Контракт был скомпилирован с версией v0.4.9, а require и assert доступны только с версии v0.4.10 .
Медведев1088
Исмаэль
Медведев1088
Исмаэль
Медведев1088