Estoy leyendo fragmentos que se autodestruyen dentro de los contratos son algo bueno. ¿Alguien puede explicar cuáles son los beneficios de hacer un contrato de autodestrucción cuando se trata de la programación de Ethereum? ¿Hay alguna diferencia si usa diferentes clientes, implementaciones o idiomas?
Las autodestrucciones en Ethereum son una operación (un OPCODE en realidad) a nivel de EVM, independientemente del idioma o cliente que esté utilizando.
Por ejemplo, al llamar selfdestruct(address)
se envía todo el saldo actual del contrato a address
.
Esto es útil cuando haya terminado con un contrato, porque cuesta mucho menos gasolina que simplemente enviar el saldo con address.send(this.balance)
.
De hecho, el código de operación SELFDESTRUCT usa gas negativo porque la operación libera espacio en la cadena de bloques al borrar todos los datos del contrato.
Este gas negativo se deduce del costo total de gas de la transacción, por lo que si primero está realizando algunas operaciones de limpieza, SELFDESTRUCT puede reducir sus costos de gas.
Nota: esta pregunta originalmente se refería al suicide
código de operación, que mientras tanto se ha convertido selfdestruct
en EIP6 .
selfdestruct
es el término recomendado y se puede encontrar en el código más nuevo de Solidity y Serpent. Es la misma API y comportamiento, como se describe en las otras respuestas, y es un alias para suicide
.
EIP6 describe la motivación:
La razón principal por la que cambiamos el término suicidio es para mostrar que las personas importan más que el código y Ethereum es un proyecto lo suficientemente maduro como para reconocer la necesidad de un cambio. El suicidio es un tema pesado y debemos hacer todos los esfuerzos posibles para no afectar a aquellos en nuestra comunidad de desarrollo que sufren de depresión o que recientemente han perdido a alguien por suicidio.
La selfdestruct()
función y el OPCODE relativo se utilizan cuando tiene un contrato que tiene un error o un comportamiento no deseado y desea deshacerse de él.
Es selfdestruct(address)
una versión mejor, como señaló @tjaden-hess, cuando tiene contratos pagaderos (contratos que reciben éteres), los éteres se redirigirán a address
lo que es una gran ganancia.
Cuando interactúa con un contrato autodestruido, TENGA EN CUENTA esto: si le envía una transacción y/o fondos, sus fondos se PERDERÁN . Asegúrese de no enviarle fondos u otras transacciones después de autodestruir un contrato.
Ese es un problema que siempre debe tener en cuenta al desarrollar aplicaciones que usan contratos con una función de autodestrucción, asegúrese de que la dirección del contrato se elimine de su aplicación después de que selfdestruct()
se haya llamado al contrato, tal vez siempre pueda llamar a un método getter para ver si el contrato responde con un valor válido antes de enviar una transacción y/o transferirle ethers.
Actualizar
El nombre del método es now selfdestruct
. Tenemos alguna descripción en los nuevos documentos de solidity .
Aquí hay una publicación de r/ethereum sobre el suicidio con más información y una pequeña discusión al respecto.
selfdestruct()
es que si tiene un contrato con errores peligrosos, puede "terminarlo"En mi humilde opinión selfdestruct
, es algo malo que nunca debería introducirse. Rompe el principio de inmutabilidad del contrato e introduce muchos problemas:
selfdestruct
se pierden en la mayoría de los casos, verificar que el contrato no se autodestruya antes de la transferencia no ayuda mucho, porque la transferencia puede adelantarse conselfdestruct
¿Por qué se
selfdestructs
utilizan en la programación de contratos ?
Una vez que se crea un contrato en la cadena de bloques de Ethereum, no se puede modificar.
BENEFICIOS DE UTILIZAR AUTODESTRUCCIÓN
+-----------------+---------------------------------------------------------------------------------------+
| Benefit | Reasoning |
+-----------------+---------------------------------------------------------------------------------------+
| Stop Execution | If you no longer want the contract running, you can selfdestruct it to “turn it off”. |
| Eliminate Bugs | (Similar to above). You can kill off smart contracts that are buggy. |
| Lower Gas Price | It costs less gas to selfdestruct a contract. |
+-----------------+---------------------------------------------------------------------------------------+
tjaden hess
alto110
tjaden hess
alto110