Estoy tratando de entender la siguiente instrucción de llamada EVM generada desde aquí: https://ethervm.io/decompile
memory[temp3:temp3 + 0x00] = address(msg.sender).call.gas(0x00).value(var1)(memory[temp3:temp3 + memory[0x40:0x60] - temp3]);
Entonces, básicamente gas
, se especifica la cantidad de gasolina que el remitente está dispuesto a pagar para enviar el dinero al "msg.sender", ¿verdad? Pero estoy bastante confundido con el gas(0x00)
. ¿El contrato no podría enviar nada, verdad?
Básicamente, el gas se especifica como la cantidad de gas que el remitente está dispuesto a pagar para enviar el dinero al "msg.sender".
Esta afirmación no es correcta.
Para comprender lo que está sucediendo, debe tener una comprensión básica de cómo se ejecuta una llamada de bajo nivel (el papel amarillo o este papel ) son buenos puntos de partida.
Esencialmente, cuando se realiza una llamada (implícitamente, pero hay excepciones, como la llamada delegada), el remitente es el contrato inteligente que se está ejecutando. Da como entrada una copia de parte de su memoria y junto con el mensaje envía una cantidad de dinero. Además, el remitente tiene la facultad de especificar la cantidad de gas que el destinatario tiene a su disposición para una posible ejecución.
Finalmente, después de la invocación, dependiendo del estado de salida, se coloca una bandera en la parte superior de la pila.
En su caso, el contrato de ejecución es simplemente enviar var1
Wei al msg.sender
. El msg.sender
tiene a su disposición 0 unidades de gas por lo que está impedido de realizar operaciones. Esto significa que incluso si el destinatario contiene una función de reserva, no se permiten ejecuciones.
Un ejemplo simple que usa la instrucción de llamada (no recomendada de bajo nivel):
int var1 = 12;
msg.sender.call.gas(0).value(var1)();
Puede encontrar más detalles sobre la función de envío y transferencia (que brinda una cantidad limitada de gas que es segura contra el reingreso pero aún permite la ejecución del código) en la respuesta a esta pregunta .
llllllllllllll
llllllllllllll
Briomkez
llllllllllllll