¿Qué tipo de operaciones tienen costos negativos de gas?

Entiendo que algunas operaciones cuestan gas negativo porque liberan espacio en la cadena de bloques, como las autodestrucciones. ¿Cuáles son todas las operaciones que pueden tener gas negativo? ¿Esto solo ocurre porque la operación finalmente libera espacio en la cadena de bloques o hay otras razones por las que tiene gas negativo?

Respuestas (2)

Los únicos dos OPCODE con costos de gas negativos son STORAGEKILL(-15000) y GSUICIDEREFUND(-24000).

Esto ocurre cuando se eliminan los valores de almacenamiento o se suicidan los contactos.

Estos OPCODE otorgan reembolsos de gasolina porque liberan espacio en la cadena de bloques.

Los precios de todos los OPCODE se pueden encontrar aquí

El "código de operación" AUTODESTRUCT más nuevo es un alias para SUICIDIO; GSUICIDEREFUND también se aplica directamente a SELFDESTRUCT.
Tenga en cuenta que en realidad no cuestan gas negativo; en cambio, reembolsan esa cantidad de gasolina al final de la transacción. La diferencia es importante si la transacción se envió con una pequeña cantidad de gas para empezar.
Después de eliminar una matriz; ¿cuánto reembolso de gas se hará? ¿Sería 15.000 o los 15.000* length_of_the_array? Consulte ( ethereum.stackexchange.com/q/69882/4575 ) para obtener más detalles en cuestión. @eth
@TjadenHess olvidaste la llamada de estipendio de 2300.

Como un complemento práctico a la respuesta de Tjaden, en Solidity se emite un reembolso de gas cuando se realiza selfdestructo deletesobre los datos existentes :

delete aasigna el valor inicial para el tipo a a. Es decir, para números enteros es equivalente a a= 0, pero también se puede usar en arreglos, donde asigna un arreglo dinámico de longitud cero o un arreglo estático de la misma longitud con todos los elementos reiniciados. Para estructuras, asigna una estructura con todos los miembros reiniciados.

deleteno tiene efecto en las asignaciones completas (ya que las claves de las asignaciones pueden ser arbitrarias y generalmente desconocidas). Entonces, si elimina una estructura, restablecerá todos los miembros que no sean asignaciones y también recurra a los miembros a menos que sean asignaciones. Sin embargo, las claves individuales y lo que asignan se pueden eliminar.

Es importante notar que delete arealmente se comporta como una asignación a a, es decir, almacena un nuevo objeto en a.

Una cosa que vale la pena mencionar es : si envía una transacción o fondos a un contrato autodestruido, perderá sus fondos.