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?)
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.
amira
Rob Hitchens
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/…amira
Rob Hitchens
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.Rob Hitchens
amira
all nodes run the transaction and "all nodes" includes the miner
?amira
Rob Hitchens
Boki XD
and includes result of the transaction in block to mine
está 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!Rob Hitchens
Boki XD