¿Por qué usar modificadores de tiro en lugar de entrada condicional?

Casi todos los tutoriales recomiendan un código como este para un modificador de permisos .

modifier isAdmin() {
    if(msg.sender != owner) {
        throw;
    }
    _
}

Pero, ¿no sería más simple usarlo sin una declaración de lanzamiento (AFAIU también ahorraría gasolina al usuario ):

modifier isAdmin() {
    if(msg.sender == owner) _
}

Como lo describe ConsenSys en Ethereum Contract Security Techniques and Tips pero solo para estos modificadores:

modifier stopInEmergency { if (!stopped) _ }
modifier onlyInEmergency { if (stopped) _ }

Respuestas (1)

Si envía algo de ether en la transacción, se devuelve al remitente cuando hay un lanzamiento (ver esto ). En su ejemplo, si envió algunos fondos (en msg.value), y la condición del modificador no se cumple, su dinero se ha ido, pero el código después del modificador no se ejecuta (y si se suponía que la función devolvería algo, devolvería solo los valores predeterminados para los parámetros, por lo que es posible que ni siquiera sepa que sucedió algo malo).

Tienes razón sobre el gas, en caso de que haya un lanzamiento, todo el gas se consume.

throwes como ROLLBACKen SQL.
¡Gracias! Supongo que los modificadores de emergencia mencionados en la pregunta también son mejores para usar con lanzamiento.