La Tecnología detrás de Ethereum - $ETH

dhormigo

Blockchain
Administrador
Hodler
Veterano
Desde
14 Jul 2017
Mensajes
13,189
Puntuación
17,808
Ayer comencé con una serie de posts donde se hablará de la tecnología detrás de cada criptomoneda. La parte 1 como es lógico hablaba de la crypto con mayor capitalización de mercado, Bitcoin. Repetir una vez más que no me quiero apropiar de ningún contenido, es traducido de lugares extranjeros y me tomo la molestia de hacer que no parezca chino pasado al español.

Parte 1: BTC
Parte 2: ETH


ETH: Ethereum

Ethereum fue la primera cadena de bloques que se desarrolló (alrededor de 2014) que admitía contratos inteligentes completos de Turing: es decir, programas nativos de cadena de bloques que pueden realizar cualquier cálculo arbitrario sobre los contenidos actuales y las entradas de la cadena de bloques. Ether ("ETH") es el token nativo de la cadena de bloques de Ethereum.

Contenidos de la cadena de bloques

Los bloques de Ethereum constan de un encabezado de bloque, seguido de los siguientes elementos:

  • Uncle header list
  • Transaction list
  • Receipt list
Para resumir brevemente los elementos que no sean las transacciones: la lista de encabezados uncle se compone de los encabezados de otros bloques que se extrajeron pero que no terminaron formando la verdadera cadena. La receipt list no tiene que ser estrictamente parte de la cadena de bloques porque se calcula a partir de transaction list, pero está presente para permitir que los programas que inspeccionan la cadena de bloques encuentren de manera más eficiente las transacciones que les interesan.

No hay un tamaño máximo de bloque de Ethereum en términos de bytes, sino un tamaño máximo de bloque en términos de gas . La red apunta a un valor promedio de 15 millones de gas por bloque a largo plazo, y existe un límite estricto adicional de 30 millones de gas en cualquier bloque en particular. Dependiendo de qué tipo de transacción termine en el bloque, la cantidad de bytes que termina siendo el total de gas es ampliamente variable, pero hay un límite superior, que calcularemos más adelante.

Modelo de consenso — Minería resistente a ASIC

Al igual que BTC en la parte anterior, Ethereum también usa un modelo de prueba de trabajo. La cadena Ethereum planea pasar pronto a un modelo de prueba de participación™, pero en esta serie observo estrictamente lo que hace actualmente cada cadena de bloques y la fecha de transición aún no está fijada, por lo que es posible que Ethereum termine usándose un consenso PoW para el futuro previsible si se producen retrasos.

Ethereum utiliza el modelo típico de prueba de trabajo de blockchain, que implica encontrar un nonce (número arbitrario) para incluirlo en el encabezado del bloque, de modo que el encabezado total del bloque satisfaga alguna propiedad algorítmica. Los mineros tienen que adivinar nonces repetidamente para encontrar uno que funcione dadas las transacciones que han incluido y el encabezado del bloque anterior.

En el caso de Ethereum, el algoritmo de prueba de trabajo está diseñado para que sea tan difícil de resolver para el hardware especializado como para el hardware informático de propósito general. Los desarrolladores de Ethereum vieron el requisito cada vez mayor de usar ASIC (Circuitos integrados específicos de la aplicación, básicamente chips especiales diseñados para hacer un cálculo específico muy bien) para extraer Bitcoin de manera efectiva, y querían evitar que permitiera que cualquier persona sin acceso a ese hardware especializado todavía el mío en la cadena Ethereum. Tenga en cuenta que esto no es una mejora técnica estricta, existe cierto debate sobre si esta es una opción positiva o no.

La clave que permite esto es que la función PoW utilizada por Ethereum está limitada a la memoria . Eso significa que la parte difícil de ejecutar el PoW es acceder a una gran cantidad de ubicaciones de memoria diferentes en rápida sucesión, del orden de GB de accesos a la memoria. Esto contrasta con las funciones clásicas de PoW que requieren menos de un Kilobyte de memoria para funcionar. Los ASIC no pueden manejar bien este tipo de tareas: si bien puede diseñar fácilmente hardware con millones de unidades de cálculo hash que operan en paralelo en un chip, los accesos a la memoria no se pueden paralelizar de manera similar debido a que la memoria ocupa físicamente mucho espacio en el chip.

Modelo de consenso: elección de bloque GHOST

La dificultad de un bloque de Ethereum es un número totalmente flexible en lugar de una cantidad de bits de cero a la izquierda que se usan en Bitcoin. Este número de dificultad flota hacia arriba y hacia abajo en cada bloque con un ligero factor de ajuste en cada bloque, dependiendo de cuánto tiempo lleve encontrar bloques. El nuevo bloque debe tener un nonce que debe satisfacer PoW (block including nonce) < 2^256 / difficulty.

El factor de ajuste se establece de manera que el tiempo promedio para encontrar un nuevo bloque sea de 15 segundos . Este es un tiempo de bloque significativamente más corto que Bitcoin que vimos la última vez con su tiempo de bloque de 10 minutos, y viene con un nuevo conjunto de desafíos que no están presentes para la cadena de bloques de Bitcoin.

En Bitcoin, mencioné que, ocasionalmente, varios mineros pueden encontrar bloques al mismo tiempo, y esto debe resolverse. Bueno, con un tiempo de bloque promedio de 15 segundos , esta situación es mucho más probable y, como resultado, se debe usar un enfoque diferente para tratarla.

Donde Bitcoin simplemente elige la cadena más larga como la cadena verdadera, Ethereum usa lo que se llama el subárbol observado más pesado codicioso, o protocolo "GHOST" para elegir la cadena verdadera. Es decir, en lugar de simplemente buscar la cadena más larga , los nodos en la red Ethereum avanzan a lo largo del árbol de bloques comenzando en la raíz y eligiendo el bloque con el trabajo más conocido basado en él en cada paso para encontrar la verdadera cadena. . Este enfoque hará que los clientes converjan en una cadena común más rápido y con mayor resistencia contra los actores malintencionados, incluso cuando se encuentren con frecuencia bloques en conflicto.

Nota: Este NO es el propósito de la lista de tíos incluida en el encabezado. El cómputo del protocolo GHOST incluye todos los bloques conocidos que se han minado en la red, ya sea que se hayan incluido como tíos en un encabezado de bloque o no.

Transacciones

Ethereum utiliza un sistema de cuentas . Se crea una cuenta, identificada por su dirección (que son simplemente los últimos 20 bytes de la clave pública), cuando se envía una cantidad distinta de cero de ETH a esa dirección como parte de una transacción. Las transacciones siempre envían ETH desde exactamente una cuenta de origen a exactamente una cuenta de destino. Esto es más simple que el modelo UTXO que usa Bitcoin, pero menos flexible. ¡Pero no te preocupes! Recuperaremos esa flexibilidad y mucho más con un enfoque completamente diferente.

Cada cuenta tiene un saldo ETH y también tiene un "contador de transacciones" que se incrementa cada vez que se envía una transacción desde esa dirección. Cada transacción debe incluir el valor actual del contador de transacciones para evitar que los atacantes vuelvan a enviar un duplicado de una transacción que envió anteriormente para gastar sus fondos varias veces. Bitcoin con su modelo UTXO no tenía que hacer esto porque los TXO no gastados fundamentalmente solo se pueden gastar una vez antes de convertirse en... bueno... TXO gastados.

Hay dos tipos distintos de transacciones en la cadena de bloques de Ethereum, con un comportamiento diferente:

  • Transacciones de mensajes: especifique una cantidad de ETH para enviar a la dirección de destino, así como un "mensaje" para pasar a esa dirección que consta de datos arbitrarios.
  • Transacciones de creación de contrato: cuando se envía una transacción a la dirección cero 0x000... se trata como una transacción de creación de contrato. En este caso, se genera una nueva "cuenta de contrato".
Cuando se ejecuta una transacción de creación de contrato, el mensaje asociado con esa transacción se trata como código y se ejecuta en la VM de Ethereum ("EVM"). El resultado de la ejecución de este código debe ser un nuevo conjunto de códigos que se registra de forma permanente dentro de una nueva cuenta de contrato y no se puede cambiar a partir de entonces.

Si sabe cómo programar, puede pensar en el mensaje en la transacción de creación del contrato como el constructor del contrato, aunque tiene que construir el código del contrato en sí mismo, así como calcular los datos del estado inicial, si corresponde.

Cuentas de contrato

Entonces, ¿qué son exactamente estas "cuentas de contrato"? Una cuenta de contrato en la cadena de bloques de Ethereum tiene un saldo de ETH como cualquier cuenta básica ("de propiedad externa"), sin embargo, también contiene el código de contrato que se registró en su interior cuando se creó.

Cada vez que se envía una transacción de mensaje a esta cuenta de contrato, el EVM ejecuta el código de cuenta de contrato y el mensaje en la transacción de mensaje se pasa al código de contrato como entrada.

A partir de ahí... el código puede hacer literalmente cualquier cosa , al menos cualquier cosa utilizando el estado actual de la cadena de bloques y el mensaje de entrada:

  • Puede almacenar datos permanentes dentro de sí mismo para referencia en transacciones futuras.
  • Puede hacer referencia a los datos de transacciones anteriores.
  • Puede hacer cálculos arbitrarios sobre el contenido del mensaje y los datos almacenados.
  • Puede enviar más transacciones de mensajes a sí mismo, a otras cuentas de propiedad externa o incluso a otras cuentas de contrato que ejecutarán su propio código.
  • Puede obtener resultados de esas otras cuentas de contrato y usarlos para cálculos.
  • ¡Incluso puede crear otras transacciones de creación de contratos de envío para crear otras cuentas de contrato!

Detalles sobre las EVM

El EVM realmente es una máquina virtual completa de uso general sobre la que puede ejecutar básicamente cualquier lenguaje de programación.

  • Es una máquina virtual basada en pila donde el tamaño de palabra nativo es de 256 bits y el tamaño máximo de pila es de 1024 elementos.
  • Tiene una memoria permanente que es un mapa de word -> worddónde establecer el valor de una clave determinada en cero lo borra de manera efectiva.
  • Tiene una memoria volátil (desaparece después de que se procesa la transacción) que es una matriz de bytes indexada por palabras.
  • El código de un contrato se almacena en una memoria especial de solo lectura con un espacio de direcciones separado al que solo se puede acceder a través de una instrucción especial.

Gas

Pero si puede hacer cálculos arbitrarios... ¿no puede simplemente escribir un ciclo infinito y detener la red Ethereum para siempre? No, y la solución a este problema es "gas".

Cada instrucción que ejecuta en la red Ethereum como resultado de una de sus transacciones requiere una cierta cantidad de gas. Este gas debe comprarse a una tarifa (ETH/gas) denominada "precio base del gas" que se especifica por bloque. Además, especifica algunos parámetros en su transacción:

  • Un precio máximo de gasolina que está dispuesto a pagar (no sabe en qué bloque terminará su transacción, solo que será uno con un precio de gasolina inferior a este valor)
  • Un "consejo" que incentiva a los mineros a incluir su transacción antes que otras
  • Un "límite de gas" que evita que su transacción use una cantidad de gas mucho mayor de lo que esperaba (debido a errores en el código del contrato o malentendidos de su parte)
Las transacciones tienen un "costo de gas base" de 21000 gas para pagar los datos de la transacción que se almacenan en la cadena de bloques. Si la transacción se envía a una dirección de contrato, ejecutar el código en esa dirección de contrato (y cualquier otra dirección de contrato a la que termine llamando indirectamente) también requerirá gasolina adicional además del costo de la gasolina base... posiblemente una gran cantidad de gas adicional para contratos complejos.

El precio base de la gasolina por bloque se ajusta gradualmente hacia arriba y hacia abajo al igual que la dificultad del bloque. El objetivo de este ajuste es que los bloques utilicen un promedio de 15 millones de gas. Si se usan más de 15 millones de gas, el precio base se ajustará y, por lo tanto, menos personas estarán dispuestas a pagar, lo que hará que el uso vuelva a bajar por debajo de los 15 millones.

Incentivos de red

Las cadenas de bloques deben tener algún incentivo para que los mineros procesen bloques e incluyan transacciones en ellos.

El incentivo principal en la cadena de bloques ETH es una recompensa de ETH recién creado para el minero que extrae un bloque. Al construir un bloque, el minero incluye una "dirección del beneficiario" en el encabezado del bloque en el que se deposita esta recompensa. Esta recompensa se establece actualmente en 2 ETH / bloque.

El incentivo secundario son las propinas sobre transacciones. El minero que extrae un bloque recopila todas las propinas incluidas en las transacciones de ese bloque. Tenga en cuenta que el ETH pagado al costo del gas base se "quema" y ya no existe, solo se da la propina a los mineros.

Mencionamos bloques de tío antes. La cadena de bloques de Ethereum en realidad recompensa algunos bloques incluso si no son parte de la cadena real . Los bloques que se encontraron aproximadamente al mismo tiempo que el bloque anterior se denominan "tíos". Cuando un minero incluye a estos tíos en la lista de tíos del siguiente bloque que extrae, tanto el minero que encontró al tío como el minero que incluyó al tío obtienen una recompensa adicional :

  • El minero que encontró al tío obtiene una recompensa equivalente a 7/8 de la recompensa de bloque normal por encontrar un bloque en la cadena verdadera.
  • El minero que incluyó al tío en el siguiente bloque obtiene una recompensa igual a 1/32 de la recompensa del bloque normal (esta recompensa no tiene que ser grande porque "es un bien inmobiliario gratuito" para que el minero la incluya).
Debido a que la suma total de estas recompensas es más pequeña que la recompensa de bloque normal, los mineros todavía tienen incentivos para minar en la cadena principal. Sin embargo, proporcionar el incentivo del tío significa que los mineros más pequeños cuya red no es tan rápida o confiable no serán penalizados tan severamente por no poder transmitir su bloque tan rápido. El objetivo es disminuir la centralización.

Proceso completo de ejecución de transacciones

Poniendo todo esto junto, ejecutar una transacción consta de los siguientes pasos:

  1. Incrementa el contador de transacciones de la cuenta de envío
  2. Establecer el gas disponible para la transacción G = gas price * gas limit
  3. Ejecutar código de contrato, incurriendo en un costo de gas C
  4. Si C > Gla transacción usó demasiado gas, revertir cualquiera de los cambios que EVM realizó en el almacenamiento permanente
  5. Si C <= Greembolsa el gas adicional que no se utilizó a la cuenta del remitente (a la misma tarifa a la que se compró)
  6. Otorgue la propina de la transacción al minero.
  7. Los contratos pueden optar por eliminarse a sí mismos como parte de su ejecución. Limpie cualquier cuenta que lo haya hecho (esto implicará transferir su ETH restante a una cuenta de beneficiario).
  8. Actualice el seguimiento del gas total utilizado por el bloque.
  9. El código del contrato puede optar por emitir "elementos de registro" durante la ejecución, especificando que sucedió algo de particular interés. Agréguelos al registro del bloque.

Suministro total de ETH

Cuando se lanzó la cadena de bloques principal de Ethereum (anteriormente había cadenas de bloques de prueba), el bloque de génesis incluía 72.049.306,59375 éter preminado distribuido entre 8893 cuentas. Esto se decidió a través de:

  • Una venta inicial que ofrece una cantidad ilimitada de ETH a razón de 1 BTC = 2000 ETH.
  • Un monto adicional equivalente al 9,9% del monto vendido destinado a los desarrolladores de Ethereum
  • Un monto adicional equivalente al 9.9% del monto vendido destinado a la Fundación Ethereum
El suministro total de ETH ahora está influenciado por dos factores:

  • Se introduce un nuevo ETH en cada bloque a través de la recompensa minera.
  • El ETH pagado por el costo del gas base en cada bloque se quema y deja de existir.
Combinando los dos... la cantidad total de ETH puede subir o bajar. En la actualidad, parece que el equilibrio económico es que las recompensas del bloque introduzcan significativamente más ETH de lo que se quema en cada bloque, pero esto podría cambiar si hay condiciones de mercado drásticamente diferentes en el futuro.

Actualmente, la cantidad total en circulación está aumentando a un ritmo de unos 2 millones de ETH/año.

Escalabilidad

Ahora volvamos a ese promedio de 15 millones de gasolina + límite estricto de 30 millones de gasolina. ¿Cuántos datos puede haber realmente en un bloque? Hacer el cálculo es bastante complicado, pero el límite histórico efectivo es de alrededor de 200 KB durante los períodos de alto uso, con un promedio de ~100 KB debido al objetivo promedio del 50 % del límite estricto.

Con un límite de gas de 15 000 000 y transacciones básicas con un costo base de gas de 21 000, el máximo de transacciones por bloque es de 714. Con un bloque cada 15 segundos, esto significa que el rendimiento máximo estable de transacciones es exactamente de 47 transacciones/s (hasta 95 transacciones). /s es posible durante períodos muy cortos antes de que la tarifa de transacción se ajuste a un valor prohibitivamente alto).

Sin embargo, el rendimiento será significativamente menor en la práctica, más cerca de 15 transacciones/s , gracias a los contratos que cuestan mucho gas para ejecutar. La gente está utilizando la cadena de bloques ETH en primer lugar por sus características de contrato inteligente, por lo que muchas transacciones son para direcciones de contrato.

Al considerar qué tan grande es la cadena de bloques de ethereum, debemos observar dos cantidades.

  • Los datos del "Archivo completo". Este es el conjunto de datos que le permitirá solicitar el estado del almacenamiento de datos permanentes de un contrato determinado en cualquier momento sin tener que volver a ejecutar cada cálculo desde el inicio de la cadena. Esto es efectivamente lo que necesita para hacer cualquier tipo de análisis en la cadena. El tamaño de este conjunto de datos es significativamente mayor que la suma de los tamaños de los bloques sin procesar enviados cada 15 segundos.
  • La "Cadena podada", que le permite verificar cualquier bloque y transacción nuevos e inspeccionar el estado actual de la cuenta de contrato/propiedad externa, pero no le permitirá realizar un análisis histórico.
El archivo completo actualmente tiene un tamaño de 9,5 TB y está creciendo a un ritmo de 3,5 TB/año. La cadena podada actualmente es de un mínimo de 500GB y está creciendo a un ritmo de 200GB/año. Además, un nodo requiere aproximadamente 4 GB de RAM para almacenar valores en caché.

En cuanto al ancho de banda de la red, un nodo nuevamente, similar a Bitcoin, necesita aproximadamente el doble del tamaño de bloque promedio en ancho de banda para manejar transacciones y bloques no confirmados. Con un tamaño de bloque promedio de 70 KB cada 15 segundos, se necesita un ancho de banda mínimo de 75 Kbits/s.

Resumen de estadísticas de la blockchain

  • En el momento de la génesis existían ~72 millones de ETH
  • El suministro eventual total de ETH es ilimitado
  • La oferta está creciendo a un ritmo de ~2 millones de ETH/año
  • Los bloques tienen un tamaño promedio de 100KB
  • Los bloques se agregan una vez cada 15 segundos
  • La recompensa por bloque es de 2 ETH + ~0.3 ETH (para tíos)
  • Rendimiento máximo en cadena: 47 transacciones/s
  • Rendimiento típico en cadena: 15 transacciones/s
  • Las transacciones pueden ejecutar código EVM arbitrario
  • Cadena podada: ~500 GB aumentando en 200 GB / año
  • Archivo de estado completo: ~9,5 TB aumentando en 3,5 TB/año
  • Requisito de red de nodo: mínimo de 75 Kbit/s
 

Crea una cuenta o accede para comentar

Debes estar registrado para poder comentar

Crear cuenta

Crea una cuenta en Foro Coin

Iniciar sesión

¿Ya tienes una cuenta? Inicia sesión

Arriba