¿Por qué usar return(bool) en una función de transferencia?

function transfer(address _to, uint256 _value) public returns (bool) {

        require(balanceOf[msg.sender] >= _value);           
        require(balanceOf[_to] + _value >= balanceOf[_to]); 
        balanceOf[msg.sender] -= _value;                    
        balanceOf[_to] += _value;                           
        return true;
}

¿Necesito usar devoluciones (bool)?

Respuestas (1)

es opcional Hay pros y contras.

Contras (en contra)

  • Costo de gasolina. El contrato es un poco más grande y cada transacción tiene un costo de gas un poco más alto: empaquetar el bool y devolverlo en una interfaz un poco más grande.

Ventajas (para)

  • Un cliente Web3 puede ejecutar una transacción en modo de ejecución en seco o reproducir una transacción e inspeccionar el valor devuelto.

  • Un contrato puede proteger procesos con require(theContract.transfer(addr,amount);. Esto es legible y posiblemente menos propenso a errores del desarrollador.

  • Puede reducir la carga cognitiva en los desarrolladores para usarlo de boolsmanera consistente. Hay tres (no dos) resultados posibles a) sí b) no c) inaceptable. Por otro lado, puede ser confuso cuando se espera que algunas funciones devuelvan algo y otras están en silencio. La incoherencia puede generar problemas, como valores de retorno no verificados. Las advertencias a nivel del compilador están mejorando para detectar posibles descuidos, por lo que este argumento no es tan fuerte como lo era antes.

Es completamente posible (y común) omitir el valor de retorno. En ese caso, la función solo es capaz de devolver (lo que se supone exitoso) o arrojar un error (inaceptable, fallido).

Como señala el Sr. Marx en el comentario a continuación, la conformidad con un estándar de interfaz es razón suficiente. Cuando la interfaz dice que devuelve un bool, eso es lo que debe hacer.

Espero eso ayude.

Quiero agregar que si está creando un contrato ERC20, DEBE devolver un valor booleano. Se le permite regresar siempre true(y revertir en caso de fallas) como en el código original, pero el tipo de retorno debe boolcumplir con el estándar ERC20. Ha habido errores reales debido a que los tokens no pueden hacer esto: medium.com/coinmonks/… .
Gran punto. Si el estándar dice que debe hacerlo, entonces debe hacerlo.