¿Cumple con ERC20 si transfer() se revierte en lugar de devolver falso?

Según la especificación ERC20, la transferencia devuelve bool:

function transfer(address _to, uint256 _value) returns (bool success);

Preferiría que mi transferencia de contrato de token () se revierta en caso de falla y devuelva verdadero en caso de éxito. De esta manera, no tendría que preocuparme de que ninguno de mis contratos que dependen de mi ERC20 esté funcionando correctamente.require(myToken.transfer(...))

¿Causaría esto algún problema para los contratos/aplicaciones de terceros? ¿Hay alguno que dependa de una transferencia que falle pero que aún quiera realizar algo?

Una alternativa sería crear una función safeTransfer adicional que llama a la transferencia internamente con require pero complica el tokenContract.

Respuestas (1)

Hay implementaciones de tokens ERC20 existentes que arrojan y otras que devuelven false. Sin embargo, la filosofía rectora de las transacciones atómicas es "si falla, falla pronto y falla rápido", por lo que las preferencias estándar arrojan/revierten en condiciones falsas.

De la norma ...

La función DEBERÍA lanzar si el saldo de la cuenta _from no tiene suficientes tokens para gastar.

Nota Las transferencias de valores 0 DEBEN tratarse como transferencias normales y activar el evento Transfer.

También debe tener en cuenta que algunos contratos nunca verifican el valor de retorno y asumirían que la transferencia fue exitosa si no se lanza ninguna excepción.