¿Cómo ejecutar el contrato inteligente paso a paso?

Tengo algunos problemas para entender el paso de ejecución de la transacción en un contrato inteligente.

1-Cuando un usuario envía una transacción a un contrato inteligente, este contrato inteligente no se ejecuta de inmediato, sino que se agrupa en un grupo de transacciones.

2- En algún momento, cada EVM elige una transacción para ejecutar el código en el contrato inteligente línea por línea.

3-Si todos los EVMS encuentran el mismo resultado, ¿ qué sucede después? De lo contrario, el contrato inteligente canceló esta transacción.

que pasa despues ==> 4- el minero recopilará todas las transacciones del grupo de transacciones y las agregará al bloque recién creado y luego el proceso de minería comenzará entre los mineros (corríjame si me equivoco, por favor siga los pasos)

5-finalmente, la cadena de bloques pasa a un nuevo estado.

*¿Cómo verifica el minero que estas transacciones son bien ejecutadas por EVM?

*¿EVM juega el papel solo en la primera parte de la ejecución del contrato inteligente?

*¿Quién cambiará de estado cuando se ejecute el contrato? (¿transacción?)

Respuestas (1)

Has entendido mal los pasos. ¡Pero cerca!

El consenso se malinterpreta fácilmente.

El problema fundamental que primero resolvió Bitcoin fue cómo llegar a un consenso eventual entre los nodos que no se conocen o no necesariamente confían entre sí. Agregue dinero al medio ambiente y se convierte en un entorno adverso. Esto no se parece en nada a la situación en un grupo típico de computadoras que se conocen y confían entre sí.

Obtenemos una pista sobre cómo resolverlo a partir de los registros de transacciones empleados por las bases de datos. Si uno tiene un registro reproducible con todas las entradas en el orden correcto, entonces puede reconstruir una base de datos. No es importante tener "el estado" si tiene las entradas que crearon ese estado.

Hay un desafío no obvio con el que lidiar. Dada la física, no es posible que todos los nodos aprendan sobre todas las transacciones al mismo tiempo o incluso en el mismo orden. (Probablemente) nunca será posible hacer todo tan rápido o más rápido que todo lo demás.

En un entorno confiable, eso podría resolverse con marcas de tiempo precisas y confiables que ayudarían a todos a enumerar el orden de transacción "correcto". En un entorno adversario sin autoridad, eso no funciona porque el reloj de nadie se considera más fiable que el de los demás.

Entonces, ¿cómo ordenar las transacciones?

El proceso de minería colapsa esa ambigüedad. El minero "ganador" gana el privilegio de establecer una orden de transacción de red de facto, para un bloque. Es importante destacar que esto ni siquiera es un intento de resolver el orden temporal de las transacciones. De hecho, gasPrice es una forma de saltarse la cola. Probablemente se pueda incentivar a un minero para que incluya una transacción antes adjuntando una oferta alta. Por el contrario, uno puede ahorrar en tarifas de transacción siendo paciente.

No sucede nada en ninguna parte hasta que los nodos reciben noticias de las transacciones incluidas en los bloques. Las transacciones en bloques están bien ordenadas. Los bloques en sí están bien ordenados. Entonces, la cadena de bloques es un conjunto bien ordenado de todas las transacciones que han ocurrido .

Cada nodo completo, no solo los mineros, procesa las transacciones por completo y llega a sus propias conclusiones sobre los cambios de estado. Esto es muy parecido a reproducir un registro de transacciones porque todos están de acuerdo con las entradas y el orden de esas entradas. Las funciones son deterministas (requisito estricto) por lo que no puede haber desacuerdo entre los nodos que funcionan bien en la misma altura de bloque.

Los bloques tienen marcas de tiempo, pero las transacciones no. El tiempo de bloque es la resolución mínima, y ​​todo lo que se puede decir es que todas las transacciones en un bloque se extrajeron en ese tiempo de bloque, en el orden de inclusión. Cada transacción ejecutada en el contexto dejado por la transacción anterior.

Los mineros tienen un privilegio no trivial. Trabajando juntos pueden censurar transacciones. Pueden jugar con marcas de tiempo y orden de transacción, si hay un beneficio egoísta al hacerlo. Esto puede ser importante en el diseño del contrato cuando existen factores como la "fecha límite".

En todo caso, el consenso resuelve el orden de transacción. Los nodos descubren el estado por sí mismos.

Espero eso ayude.

PD Hay muchas cosas más en la minería, pero quería centrarme en su pregunta.

¿Puede explicar esta oración? Cada nodo completo, no solo los mineros, procesa las transacciones por completo. ¿Cómo procesa las transacciones? Pero por lo que leí y en este enlace: [enlace]( ethereum.stackexchange.com/questions/16990/… ) El contrato inteligente se ejecuta dentro del EVM, . Los resultados de la ejecución deben ser exactamente los mismos para agregar las transacciones a la cadena de bloques. Necesito una ayuda para entender mejor señor.
También dice, Each node of the network, not only miners execute the smart contracts.El EVM está en cada nodo, y los nodos forman un enjambre. Esto podría ayudar a verlo: bitrates.com/guides/ethereum/…
Para corregir lo que dije al principio y por lo que entendí, cuando un minero recibe una transacción, ejecuta la transacción en EVM e incluye el resultado de la transacción en el bloque mío. Luego, el bloque finalmente se extrae y se agrega a Blockchain (si el minero logra extraer este bloque con éxito). Finalmente, todos copian el nuevo bloque y lo verifican ejecutando EVM (la transacción que va a la red la ejecutan muchas veces todos la ejecutan en EVM para verificar la transacción. Obtuve el mismo resultado para verificar que todo esté bien) corrígeme si me equivoco por favor
Es casi correcto pero creo que hay confusión. Perdóname si me equivoco. Esto: and includes result of transaction in block to mine- completamente inexacto. No "incluye el resultado". Incluye la transacción... más específicamente, incluye las entradas (de Alice, a Bob, cantidad, datos... firma), no el resultado. Esto no está en un bloque "a lo mío". El trabajo del minero es "hacer lo mío". El minero incluye las entradas de transacción en una transacción que "fue minada". Sí, el minero ejecuta la transacción. Eso es porque todos los nodos ejecutan la transacción y "todos los nodos" incluye al minero.
La transacción se incluyó en un bloque, el bloque se transmitió a todos. Todos ejecutan la transacción, incluido el minero. El minero fue el primero en saber que la transacción estaba incluida en un bloque, por lo que fue el primero en ejecutarla. A nadie le importa lo que el minero piense que hace la transacción. Ellos mismos lo ejecutarán para averiguarlo.
Si señor, me refiero a la transacción. pero ¿dónde miner incluye las entradas de transacción?, no entiendo esto: `el minero incluye las entradas de transacción en una transacción que "fue minada". ` es decir, no en el bloque? entonces, dónde y luego ejecute la transacción. ¿Qué quieres decir con all nodes run the transaction and "all nodes" includes the miner ?
Necesito esta respuesta señor para entender.
@RobHitchens Esta es una vieja pregunta, pero espero que responda. Creo que te equivocas al decir que and includes result of the transaction in block to mineestá mal. De hecho, cuando se calcula una transacción, los resultados se almacenan en el Receipt Trie del minero/validador cuya raíz se incluye en el encabezado del bloque que el validador/minero actual está ensamblando, lo que significa que el resultado de la transacción es, en cierto sentido, "incluido" en el bloque (en el caso de que se acepte el bloque del validador/minero). Tal vez te entendí mal, ¡pero agradecería tu respuesta!
Tal vez no está redactado muy claramente. Hay una raíz de merkle que, de hecho, fluye del resultado de la transacción, pero tiene muchas pérdidas. No puedes determinar que x=4 en un cierto contrato con nada más que la raíz de merkle. Pero no puede generar la raíz Merkle sin saber que x = 4, por lo que ejecuta la transacción para averiguarlo.
@RobHitchens Gracias, genial, ¡entonces estamos de acuerdo en lo mismo! Tal vez le gustaría echar un vistazo a mi otra pregunta ( ethereum.stackexchange.com/questions/136406/… ) Creo que es bastante técnica y tengo problemas para encontrar respuestas.