Según la documentación de Solidity :
Se genera una excepción de estilo requerido en las siguientes situaciones:
...
Si llama a una función a través de una llamada de mensaje pero no finaliza correctamente ( es decir, se queda sin combustible , no tiene una función coincidente o genera una excepción)
...
Internamente, Solidity realiza una operación de reversión (instrucción 0xfd) para una excepción de estilo requerido y ejecuta una operación no válida (instrucción 0xfe) para generar una excepción de estilo de afirmación.
Sin embargo, en esta0xfe
transacción se realiza un código de operación (consulte el paso 1394) que se usa para excepciones de estilo de aserción.
¿La documentación es incorrecta o el compilador no sigue la documentación?
Si observa el código fuente de la función retirarTokens
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]);
}
Tiene explícitamente un tiro, y el tiro generará 0xfe.
El contrato se compiló con la versión v0.4.9, y require y assert solo están disponibles a partir de la v0.4.10 .
medvedev1088
ismael
medvedev1088
ismael
medvedev1088