⚠️ ¡Advertencia! El siguiente artículo es un resumen sobre Mastering Ethereum, en consecuencia, me tomé la libertad de quitar las partes que no me parecieron relevantes y profundizar en lo que sí. Si tenés alguna sugerencia o corrección, no dudes en contactarme.
Que es Ethereum
En el primer capítulo de Mastering Ethereum se define Ethereum como “… Una máquina de estados determinista, compuesta por un estado único (singleton) globalmente accesible y una máquina virtual que aplica cambios a ese estado.”
Ok es una definicion bastante rimbombante, pero para entender qué quiere decir con esto, tenemos que descomponer los conceptos.
- Que es una máquina de estados.
- ¿En qué consiste que sea determinista?
- ¿A qué se refiere con que tiene un estado único, globalmente accesible?
- ¿Cómo la máquina virtual aplica cambios de estado?
Que es una máquina de estados
Una máquina de estados es un sistema que se mueve entre diferentes situaciones (estados) en respuesta a estímulos o eventos específicos. Cada estado representa una condición o situación particular del sistema, y las transiciones entre estados están determinadas por reglas predefinidas.
Pero para entender un poco más el concepto, podemos verlo en un caso práctico con el cual estamos familiarizados.
En este caso, iniciamos con el estado “luz apagada”, en el momento en que se ejecuta el evento “Presionar botón” hay un cambio de estado y el sistema pasa al estado “luz encendida”, luego si volvemos a “Presionar botón” volvemos al estado anterior.
Un ejemplo más elaborado de una máquina de estados sería el caso de una máquina expendedora.
En este ejemplo, la máquina inicia en un estado ocioso, al insertarse una moneda se pasa al estado de selección de producto, luego de ser seleccionado el producto por el usuario, la máquina pasa a dispensar el producto, para luego finalizar nuevamente en el estado ocioso, en todo momento el usuario puede cancelar la operación obteniendo sus monedas nuevamente
En qué consiste que sea determinista
Que sea determinista implica que, dado un estado actual y una entrada específica, el siguiente estado del sistema está completamente determinado. En otras palabras, el comportamiento es predecible y no hay ambigüedades en cuanto a las transiciones de estado.
También significa que para un estado específico dado, si se ejecuta un evento determinado, el resultado será siempre el mismo, tomando en cuenta los ejemplos anteriores:
- En el caso del interruptor, comienza en el estado,
Luz apagada
si le aplicamosPresionar botón
va a terminar enLuz prendida
. - En el caso de la máquina expendedora, siempre que se
inserta una moneda
vamos a pasar delestado ocioso
al estado deselección de producto
.
En el contexto de Ethereum, la determinística se refiere a que, dados ciertos parámetros de entrada y un estado actual específico, la ejecución producirá siempre el mismo resultado.
¿A qué se refiere con que tiene un estado único globalmente accesible?
La referencia a un “estado único globalmente accesible” implica que hay una representación única y compartida del estado de la red Ethereum en un momento dado. En otras palabras, todos los nodos en la red tienen acceso a la misma información sobre el estado actual de Ethereum.
Este estado único global es esencial para mantener la coherencia en la ejecución y garantizar que todas las partes involucradas tengan una visión consistente de la red en cualquier momento.
Más adelante vamos a profundizar en cómo se logra esto técnicamente.
En el libro se hace referencia a un único singleton accesible de forma global. Podés profundizar sobre el concepto en este link.
Cómo la máquina virtual aplica cambios de estado
La Ethereum virtual Machine(EVM) es un entorno virtual que se ejecuta en cada nodo, provee un entorno aislado en el cual se aplican los cambios al estado de las cuentas y se ejecutan los smart contracts.
Para entender un poco más, pensemos en un ejemplo: supongamos que comenzamos con un estado global: (t) y a este la EVM le aplica el conjunto de transacciones contenido en el bloque con transacciones: (t1, t2, t3). Como resultado de esto, vamos a tener un nuevo estado global: (t+1).
Entonces, sí, por ejemplo, el estado global t es el siguiente:
Luke: 100
Leia: 10
Han: 20
Harry: 0
Ron: 0
Hermione: 100
Entonces, a partir de ese estado, el nodo tiene estas tres transacciones para ejecutar:
t1: Enviar 5 de Luke a Ron
t2: Enviar 50 de Hermione a Han
t3: Enviar 50 de Luke a Leia
El estado global resultante t + 1 sería el siguiente:
Luke: 45
Leia: 60
Han: 70
Harry: 0
Ron: 5
Hermione: 50
💡 Es probable que ahora estén pensando cómo es posible que todos los nodos se pongan de acuerdo en una misma historia en relación con el estado global. Esto se logra con el algoritmo de consenso. Pero dejamos esa discusión para más adelante.
Turing complete y el gas
Turing complete
Cuando se explora más a fondo EVM, es inevitable encontrarse con el término “Turing complete”. A diferencia de Bitcoin, Ethereum se considera Turing complete. ¿Pero qué significa exactamente?
Para simplificar el concepto de Turing complete, podríamos decir que un sistema que tiene esta característica puede representar cualquier cálculo que pueda concebirse, incluyendo bucles infinitos. O básicamente una computadora en la que se podría procesar cualquier cosa, en el caso de que se contara con tiempo y memoria infinita (y en el caso de Ethreum también con Ether infinito).
Esta característica de la EVM permite teóricamente computar cualquier cosa y, en consecuencia, programar cualquier cosa. Y si bien eso a priori es una ventaja, ya que nos presenta una plataforma altamente flexible, es necesario tomar algunas consideraciones en cuenta, por ejemplo, se debe instaurar un mecanismo para evitar que alguien ya sea de forma accidental o intencional ejecute código que quede atrapado en un loop infinito, así como también evitar el spam de transacciones.
La solución a ese problema es el gas. A través de este se pone una fricción económica en la acción de modificar el estado de la blockchain, mientras también se evitan los posibles accidentes no intencionados.
Capaz alguno de ustedes esten pensando en este momento, ah, ok entonces puedo atacar la red de bitcoin por que no tiene gas, pero no es tan sencillo, la diferencia que hay aca es que Bitcoin no es Turing complete, el hecho de que Bitcoin no sea Turing complete le permite tener un sistema de fees mas simples y evitar en definitiva el problema de los loops infinitos.
El gas
El gas hace referencia a la unidad que mide la cantidad de esfuerzo computacional requerida para ejecutar operaciones específicas en la red de Ethereum.
El gas se compra como parte de una transacción, solo con ether, y se reembolsa cualquier gas no utilizado. Este enfoque permite la computación Turing completa mientras controla los recursos consumidos.
La tarifa de gas es la cantidad de gas usado para hacer alguna operación, multiplicada por el coste unitario del gas. Al margen de que la transacción se procese de forma exitosa o fallida, se paga igualmente una tarifa.
Componentes y características de una blockchain
Componentes de una blockchain
- Una red peer-to-peer (P2P) que conecta a los participantes y propaga transacciones y bloques de transacciones verificadas, basada en un protocolo “gossip” estandarizado.
- Mensajes, en forma de transacciones, que representan transiciones de estado.
- Un conjunto de reglas de consenso que rigen lo que constituye una transacción y que hace válida una transición de estado.
- Una máquina de estado que procesa transacciones de acuerdo con las reglas de consenso. (e.g: EVM)
- Una cadena de bloques criptográficamente asegurados que actúa como un registro de todas las transiciones de estado verificadas y aceptadas.
- Un algoritmo de consenso que descentraliza el control sobre la blockchain, obligando a los participantes a cooperar en la aplicación de las reglas de consenso.
- Un esquema de incentivos sólidamente fundamentado en teoría de juegos (por ejemplo, costos de prueba de trabajo más recompensas de bloque) para asegurar económicamente la máquina de estado en un entorno abierto.
- Una o más implementaciones de software de código abierto de lo anterior (“clientes”). (e.g: Geth o Besu)
Características de una blockchain (deseables)
Pública: Es accesible para cualquier persona que desee unirse a la red, la información dentro de la blockchain es abierta al público.
Global: Ópera en una escala mundial, permitiendo la participación de nodos distribuidos en diversas ubicaciones geográficas. Potencialmente, proporciona un alcance global para la validación de transacciones y el consenso.
Descentralizada: La toma de decisiones y la validación de transacciones se distribuyen entre los nodos de la red, evitando un único punto de falla.
Neutral: Trata a todas las transacciones y participantes de manera imparcial, sin discriminación.
Resistente a censura: Es difícil o casi imposible censurar transacciones o participantes dentro de la red. La resistencia a la censura se logra a través de la descentralización y la distribución.
Referencias
-
Antonopoulos, A. M., & Wood, G. (2018). “Mastering Ethereum: Building Smart Contracts and DApps.” O’Reilly Media.
-
Ethereum.org. (s.f.). Documentación Oficial para Desarrolladores - Bloques. Recuperado de: https://ethereum.org/es/developers/docs/blocks
-
Takenobu, T. (s.f.). “Ethereum EVM Illustrated.” Recuperado de: https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf.
-
ExplainLikeImFive. (2022, 25 de febrero). “ELI5: Turing Completeness”. r/explainlikeimfive. Recuperado de https://www.reddit.com/r/explainlikeimfive/comments/xff319/eli5_turing_completeness/.