Almacenamiento de contratos inteligentes

Estaba a punto de crear mi primer contrato inteligente y me encontré con estas preguntas:

  1. ¿Dónde se almacena exactamente el código del contrato? Leí que se almacena en la cadena de bloques, ¿eso significa que cada nodo que tiene una instancia de una cadena de bloques completa también tiene el código del contrato?

  2. En caso de que un minero, para extraer un nuevo bloque, primero ejecute todas las llamadas de contrato y establezca los valores y luego comience a buscar la resolución de rompecabezas POW y el valor de nonce, y si es así, ¿podemos tener mineros ASIC para ethereum como bitcoin, porque pueden hacer solo un trabajo específico pero los códigos de ejecución de un contrato son diferentes cada vez?

  3. Cuando un minero quiere verificar una transacción que tiene una llamada de contrato, ¿debe ejecutar el código de contrato? Si es así, ¿significa que cada contrato se ejecutará varias veces hasta que finalmente un minero pueda encontrar el nonce correcto y resolver el rompecabezas de pow? si eso es cierto, ¿significa que el código del contrato se ejecuta muchas veces innecesariamente?

  4. ¿Dónde se almacenan los valores de las variables de contrato? Quiero decir, si tenemos un mapeo de solidez, puede contener muchos valores clave, entonces, ¿dónde se almacena esta clave, los valores? si se almacenan en una cadena de bloques, entonces deberían almacenarse en cada nodo que tenga una copia de la cadena de bloques, lo que significa que se almacenan datos masivos una y otra vez, y eso sería un gran desperdicio de almacenamiento.

  5. Cuando un contrato se autodestruye, ¿qué sucede exactamente? Mencionó que el código se eliminará de la cadena de bloques, entonces, ¿significa que una transacción hace que no esté disponible para las siguientes transacciones o realmente altera la cadena de bloques y lo elimina codificado de bloques más antiguos?

Respuestas (1)

Donde se almacena exactamente el código del contrato, leí que se almacena en la cadena de bloques, ¿eso significa que cada nodo que tiene una instancia de una cadena de bloques completa también tiene el código del contrato?

El estado se almacena en la cadena de bloques, sí. También tiene razón al decir que cada nodo completo tiene una copia de toda la cadena de bloques, incluidos todos los estados.

En caso de que un minero, para extraer un nuevo bloque, primero ejecute todas las llamadas de contrato y establezca los valores y luego comience a buscar la resolución de rompecabezas POW y el valor de nonce, y si es así, ¿podemos tener mineros ASIC para ethereum como bitcoin, porque pueden hacer solo un trabajo específico pero los códigos de ejecución de un contrato son diferentes cada vez?

El trabajo de los mineros es simplemente resolver el rompecabezas POW. Cuando hacen eso, tienen la capacidad de minar el bloque. Ahora eligen qué transacciones quieren incluir en ese bloque específico. Estas transacciones definen todos los cambios de estado que se realizaron, por lo que técnicamente el minero no tiene que investigar eso.

En términos de la pregunta ASIC, Ethereum POW fue diseñado para ser difícil de memoria, lo que significa que es difícil de extraer para los ASIC.

Cuando un minero quiere verificar una transacción que tiene una llamada de contrato, ¿debería ejecutar el código de contrato? Si es así, ¿significa que cada contrato se ejecutará varias veces hasta que finalmente un minero pueda encontrar el nonce correcto y resolver el rompecabezas de pow? si eso es cierto, ¿significa que el código del contrato se ejecuta muchas veces innecesariamente?

Vea mi respuesta anterior como la respuesta a esta pregunta también. Para resumir, el minero simplemente elige una transacción. La razón por la que no se ejecuta varias veces es porque solo hay un minero que encuentra el bloque primero y es recompensado por ello. Este es el único minero que transmite la transacción, así como las llamadas de contrato, a la red Ethereum.

¿Dónde se almacenan los valores de las variables de contrato? Quiero decir, si tenemos un mapeo de solidez, puede contener muchos valores clave, entonces, ¿dónde se almacena esta clave, los valores? si se almacenan en la cadena de bloques, entonces deberían almacenarse en cada nodo que tenga una copia de la cadena de bloques, lo que significa que se almacenan datos masivos una y otra vez, y eso sería un gran desperdicio de almacenamiento

Ver respuesta uno. Tiene razón: las cadenas de bloques (tal como están) son bastante ineficientes y lentas, y cada nodo contiene una copia de este estado.

Cuando un contrato se autodestruye, ¿qué sucede exactamente? Mencionó que el código se eliminará de la cadena de bloques, entonces, ¿significa que una transacción hace que no esté disponible para las siguientes transacciones o realmente altera la cadena de bloques y lo elimina codificado de bloques más antiguos? ?

No altera la cadena de bloques, ya que eso es imposible. Lo que sí hace (sin volverse demasiado técnico) es prohibir que alguien vuelva a llamar a ese contrato. El mejor ejemplo a observar es el exploit de la billetera Parity , ya que es un ejemplo crítico del uso de selfdestruct.