Cadena de bloques Etereum

cuenta etéreo

Para posibles ataques de repetición en Ethereum, agregue un valor nonce a cada transacción en la cuenta para registrar cuántas transacciones es y luego firme el valor nonce junto con la transacción. Si alguien repite la transacción más tarde, después de la verificación, se encuentra que la transacción correspondiente al valor nonce se ha ejecutado una vez y ya no se ejecutará. Por lo tanto, el nodo completo también debería guardar el valor nonce de cada nodo.

El concepto de cuentas facilita la ejecución de contratos.

  1. Cuenta externa (cuenta ordinaria)
  • Al igual que la cuenta en Bitcoin, la cuenta se controla mediante claves públicas y privadas.
  • Estado de la cuenta: saldo de la cuenta, nonce (contador)
  1. cuenta de contrato
  • Sin control a través de claves públicas y privadas, las transacciones no se pueden iniciar. Todas las transacciones solo pueden iniciarse mediante cuentas externas.
  • Se puede llamar para convocar otros contratos. Cuando se genera una cuenta de contrato, se devolverá una dirección y se llamará a la dirección para llamar al contrato.
  • El estado de la cuenta del contrato también incluye código y almacenamiento.

árbol de estado ETH

Elección de la estructura de datos:

  • ¿Eliges utilizar la tabla hash?

    Cómo proporcionar prueba de merkle: si usa una tabla hash para construir un árbol de merkle y luego coloca el hash raíz en el encabezado del bloque. Si este es el caso, cada vez que se lanza un nuevo bloque, todos los estados de las cuentas deben formar un nuevo árbol merkle, pero de hecho, solo una pequeña cantidad de cuentas cambian de estado cada vez. Por lo tanto, el método de simplemente formar un árbol merkle de todas las cuentas es un poco caro. Y es difícil mantener la coherencia de todos los nodos de la cadena de bloques.

  • ¿Usar el árbol Merkle directamente?

    Uno es un estado donde es difícil encontrar y actualizar datos.

    Si ordenar, si no ordenar

    • Las búsquedas son más lentas
    • Es difícil garantizar que la estructura del árbol merkle construido sea coherente en la cadena de bloques. Esto conducirá a diferentes valores hash del árbol merkle calculados por diferentes nodos.

    Si clasifica:

    • La complejidad de agregar datos es alta: si inserta un dato, es posible que la mayor parte del árbol necesite recalcular el valor hash.

Estructuras de datos seleccionadas en Ethereum:

Árbol de prefijos comprimido

intentar:

Insertar descripción de la imagen aquí

Trio comprimido:

Insertar descripción de la imagen aquí

El puntero aquí usa un puntero hash.

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

La necesidad de preservar estados históricos. En la red Ethereum, las bifurcaciones son muy comunes. A diferencia de Ethereum, que almacena transacciones simples en la cadena de bloques, los contratos inteligentes en Ethereum pueden implementar funciones de transacciones más complejas, por lo que es difícil implementar la reversión de estado a través del código. análisis.

  • El valor en el estado se almacena primero después de la serialización, utilizando el método RLP (Recursive Longitud Profix)

Árbol de transacciones ETH y árbol de recibos

  • Árbol de transacciones: contiene información de transacciones.
  • Árbol de recibos: hay información de recibo correspondiente a cada transacción, que registra información relevante de la transacción y es útil para encontrar información sobre transacciones relacionadas.

Ambos árboles utilizan la estructura MPT.

estructura del filtro de floración:

Calcule el valor hash calculando la información de los elementos del conjunto, asignelo a un resumen compacto y establezca el bit de posición correspondiente en uno. Este método puede probar que un elemento no está en el conjunto, pero no puede probar que un elemento esté en el conjunto. Debido a que habrá colisiones de hash, algunos utilizan múltiples algoritmos de hash para calcular múltiples resúmenes y reducir la posibilidad de colisiones de hash.

Insertar descripción de la imagen aquí

El filtro de floración en el encabezado del bloque es la unión de los filtros de floración a continuación.

¿Por qué el estado del usuario no guarda simplemente el estado del usuario relacionado con la transacción actual?

  • Si hay una transacción, es A–>B, y si solo se guarda una parte del estado del usuario, cuando necesite encontrar el estado de la cuenta B, debido a que solo se guarda una parte del estado del usuario, debe mantener Estoy ansioso por ver si la cuenta B existe, pero si B es una cuenta nueva, entonces necesita encontrar el bloque de génesis para obtener el resultado.

Protocolo Fantasma

Si continúa utilizando el protocolo de consenso en Bitcoin:

Para acortar el tiempo de generación de bloques, las bifurcaciones temporales también aumentarán mucho. Cuando un gran grupo de minería extrae un bloque, es más probable que el bloque en el que se encuentra se convierta en la cadena legal más larga, lo que significa que otros bloques son minado en vano. En Bitcoin, aunque los usuarios individuales no tienen una ventaja en potencia informática en comparación con los grupos de minería, los usuarios de Bitcoin aún pueden extraer bloques antes que los grupos de minería, y los bloques que extraen están, en la mayoría de los casos, en la cadena legal más larga (el bloque El tiempo de generación es relativamente largo y no es tan fácil provocar una bifurcación y luego será más larga).

Protocolo Fantasma:

Concepto central: bloque tío

Para los bloques que se han extraído pero que no se han convertido en la cadena legal más larga, este bloque se considera un bloque tío de la cadena legal más larga recién agregada. Si el bloque detrás de la cadena legal más larga contiene un bloque de tío, entonces el bloque de tío incluido obtendrá 7/8 de la recompensa del bloque, pero no recibirá la tarifa de gasolina. El nuevo bloque que contiene el bloque de tío obtendrá 1/32 de recompensa del bloque. . Puede contener hasta dos bloques de tío.

Insertar descripción de la imagen aquí

La definición de bloque de tío solo puede estar separada por 7 generaciones como máximo, y a medida que aumenta el número de generaciones, las recompensas obtenidas por el bloque de tío disminuirán gradualmente, y el establecimiento de qué bloque lo contiene sigue siendo 1/32. La recompensa por bloque en Ethereum no seguirá disminuyendo.

El significado de este diseño:

  • Si no se especifica el número máximo de generaciones entre bloques tío, entonces el nodo completo deberá guardar muchos bloques tío.
  • Aliente a los bloques tíos a fusionarse en la cadena legal más larga lo antes posible.

Para bloques de tío incluidos:

  1. La transacción no se ejecuta hasta que la cadena legal más larga contenga la transacción en el bloque tío.
  2. Verificar la legalidad no significa verificar la legalidad de la transacción, sino si el bloque tío cumple con los requisitos de dificultad.

El bloque tío solo puede ser el primer bloque después de la bifurcación, y los bloques posteriores no pueden contarse como bloques tío.

Insertar descripción de la imagen aquí

Si los bloques posteriores también son bloques tío, el costo de falla del ataque de bifurcación será demasiado pequeño.

Realice un ataque de bifurcación. Si tengo éxito, puedo revertir la transacción. Incluso si fallo, aún puedo obtener la recompensa del bloque del tío.

Reconocer solo el primer bloque como bloque tío puede aumentar el costo de los ataques de bifurcación fallidos, lo que provocará que los bloques de bifurcación se fusionen lo antes posible.

Algoritmo de minería ETH

rompecabezas de minería difícil de recordar. Esto se utiliza para lograr hostilidad hacia los chips ASIC.

Algoritmo de minería de litecoin, scrypt

Insertar descripción de la imagen aquí

Genere una matriz más grande, calcule un valor hash seleccionando una semilla y guárdela en la primera posición de la matriz. El valor hash de las posiciones posteriores de la matriz se calcula utilizando el valor hash del elemento de matriz anterior. Al calcular el rompecabezas, primero seleccione una posición y luego determine la siguiente posición a leer en función del valor hash de esta posición. Después de repetir una cierta cantidad de veces, use el nonce para encontrar el valor del nonce que cumpla con los requisitos de dificultad.

Cuanta menos gente utilice una criptomoneda, menos segura se vuelve. Porque el 51% de la potencia informática es relativamente fácil de conseguir.

Algoritmo de minería en Ethereum (ethash):

Insertar descripción de la imagen aquí

Ethereum primero adopta un método similar a Litecoin para calcular un caché de 16 M y luego calcula un DAG más grande en función del caché (el tamaño del caché y el DAG aumentarán de vez en cuando). A partir de una determinada posición de la matriz en la semilla, se calcula un hash y la siguiente posición a leer se obtiene de este hash. El hash se actualiza en función del valor de la matriz en esa posición. Después de 256 rondas de iteraciones de actualización, el El hash calculado final es El valor se completa en la primera posición en el DAG. El proceso de cálculo del rompecabezas es: calcular un hash basado en el encabezado del bloque y el valor nonce inicial, luego obtener una posición de la posición señalada por el hash, sacar los valores de esta posición y las posiciones adyacentes. calcule un hash para obtener la siguiente posición y realice la misma La operación actualiza el valor hash, realiza un bucle 64 veces para obtener el valor hash final y lo compara con el umbral de dificultad para ver si cumple con los requisitos de dificultad. , cambie el valor del nonce y calcule nuevamente.

Cada 30.000 bloques, el valor inicial cambiará, el tamaño de la caché aumentará en 1/128 del tamaño inicial y la caché se regenerará en función de la nueva semilla.

Cuando el nodo ligero realiza la verificación, el bloque de encabezado y el nonce en el bloque obtenido se combinan para calcular un hash. Dado que el nodo ligero no lo guarda, se debe generar temporalmente el valor de la posición correspondiente del DAG. (La cantidad de cálculo es ligeramente mayor, pero para los nodos ligeros, solo se calcula un valor nonce, pero para las máquinas mineras, debido a que hay demasiados valores nonce para probar, la eficiencia del cálculo sin guardar DAG es demasiado baja)

Prueba de capital de PoS, no se requiere minería

¿Es seguro minar usando chips ASIC? : Debido a que el chip ASIC es un chip de minería especializado, si se logra un ataque del 51% usando un chip ASIC, entonces se demostrará que la seguridad de la criptomoneda es problemática y el precio de Bitcoin caerá, lo que eventualmente puede generar pérdidas. La máquina minera comprada en ese momento no se podía utilizar para otros fines, por lo que sería una pérdida. Y si las máquinas de usuarios comunes también pueden minar, el costo de lanzar ataques se reducirá, porque estas máquinas pueden usarse para otras cosas cuando la minería ya no sea necesaria.

Ajuste de dificultad de Ethereum (esta parte es el mejor código)

https://www.bilibili.com/video/BV1Vt411X7JF?p=20&spm_id_from=pageDriver

Bomba de dificultad: está configurada para la futura transferencia a prueba de equidad. A medida que aumenta el número de bloques, la dificultad de la minería aumentará exponencialmente, de modo que cuando la dificultad de la minería se vuelva muy grande en el futuro, será beneficioso transferir a PoS, pero antes de que PoS estuviera completamente desarrollado, el efecto de la bomba de dificultad ya era evidente. Por lo tanto, hay una devolución de llamada de número de bloque de bomba de dificultad de 3.000.000 de bloques.

Prueba de participación

Una de las mayores desventajas de la prueba de trabajo es que consume energía.

Aunque los contratos inteligentes aún deben procesarse en Ethereum, el tiempo de generación del bloque es corto y el consumo de energía es menor que el de la minería de Bitcoin.

El mecanismo de minería determina la proporción de ingresos obtenidos a través del tamaño de la potencia informática, y el tamaño de la potencia minera depende de la cantidad de fondos invertidos. Entonces, la idea de la Prueba de participación es determinar la cantidad de ingresos directamente por cuánto dinero se invierte en la cadena de bloques, omitiendo el paso de minería.

En Bitcoin, los derechos contables se obtienen mediante la potencia informática, mientras que en Ethereum, los derechos contables se obtienen mediante la cantidad de monedas de éter invertidas. Es decir, los derechos contables se asignan según la probabilidad según la antigüedad de la moneda. No es necesario realizar minería y también recibirás recompensas de bloque después de publicar el bloque. Cuando se estableció Ethereum por primera vez, una parte de Ethereum estaba reservada para la inversión de otros.

Ventajas de la prueba de participación:

Mantener los recursos de la cadena de bloques Ethereum es un circuito cerrado.

Los recursos para mantener la seguridad de la cadena de bloques en Bitcoin provienen del entorno externo de Bitcoin, es decir, los recursos utilizados para luchar por los derechos de contabilidad se pueden obtener a través del entorno externo (usando dinero que no sea criptomoneda y luego convirtiéndolo en recursos competitivos de criptomoneda). Utilice dinero inmobiliario para comprar máquinas mineras). El valor de mercado total de Bitcoin en la economía mundial es relativamente pequeño: si alguien está dispuesto, puede reunir fácilmente el 51% de la potencia informática. En Ethereum, si quiere lanzar un ataque del 51%, necesita poseer el 51% de las monedas Ether en el sistema Ethereum, lo que significa que habrá una gran cantidad de compras de Ethereum, por lo que el precio de Ethereum también lo hará. sube.

Algunas criptomonedas adoptan una combinación de ambos enfoques:

Se llevan a cabo tanto la extracción como la prueba de derechos, y la dificultad de extraer más monedas se reducirá en consecuencia. Sin embargo, si el diseño se hace simplemente de esta manera, será cada vez más fácil para las personas con más monedas extraerlas, obteniendo así más monedas, y luego la extracción será más fácil. Por lo tanto, algunos están diseñados para que las monedas no puedan usarse inmediatamente después de que se extrae un bloque durante un período de tiempo.

Desafíos en la prueba de participación:

Cubrir sus apuestas:

Insertar descripción de la imagen aquí

Es decir, cuando la cadena de bloques se bifurca, puede realizar apuestas en ambos lados al mismo tiempo (la prueba de capital requiere pagar algo similar a un depósito para obtener capital. Para evitar que los nodos empaqueten transacciones ilegales, si se empaquetan transacciones ilegales, Habrá Si la recompensa del bloque es menor que la recompensa del bloque y se eliminará el depósito), este tipo de comportamiento de cobertura dispersará la potencia informática en el caso de la prueba de trabajo, pero no existe tal problema en la prueba de apostar.

Casper: Prueba de participación lista para usar en blockchains

En la etapa mixta de minería y prueba de participación, el requisito previo para que un Validador se convierta en Validador es invertir una cierta cantidad de depósito. Su responsabilidad es promover el sistema para alcanzar consensos. El validador vota para decidir qué cadena se convierte en la cadena legal más larga y pueden aprobarse más de 2/3 de los votos.
Insertar descripción de la imagen aquí

Cada 50 bloques son una época y se realiza una votación después de cada época. Solo se puede confirmar después de que más de 2/3 de los nodos coincidan en dos épocas consecutivas. El Validador puede obtener recompensas por votar, pero tiene que esperar un período de tiempo durante el cual se puede juzgar si el Validador cumple legalmente con sus deberes y se ocupa de ello.

contrato inteligente

Un contrato inteligente es un fragmento de código que se ejecuta en la cadena de bloques. La lógica del código define el contrato.

Insertar descripción de la imagen aquí

Hash en lenguaje de solidez no admite el recorrido.

La cuenta a pagar agregada después de la función de oferta indica que esta función recibe transferencias externas

Cómo las cuentas externas llaman contratos inteligentes

Llamar a un contrato es similar a una transacción de transferencia. Si el objeto de la transferencia es una cuenta de contrato, significa que se llama al contrato. La función específica llamada se describirá en el campo de datos.

Insertar descripción de la imagen aquí

¿Cómo se llama un contrato a otro contrato?

  • llamar directamente
    Insertar descripción de la imagen aquí

  • Utilice la función de llamada del tipo de dirección
    Insertar descripción de la imagen aquí

  • El agente llama a la función de llamada delegada.
    Insertar descripción de la imagen aquí

La diferencia entre las dos llamadas anteriores es que si la función llamada en la anterior sale mal, el contrato que se llama también saldrá mal. Sin embargo, al usar la función de llamada, si la llamada falla, se devolverá falso.

función alternativa (esta función se llama si no se encuentra la función correspondiente)

Insertar descripción de la imagen aquí

Creación y operación de contratos inteligentes.

Insertar descripción de la imagen aquí

tarifa de gas

Insertar descripción de la imagen aquí

La tarifa máxima de gas se deducirá en Ethereum a la vez. Si la tarifa de gas finalmente calculada no cumple con ese estándar, se reembolsará la tarifa de gas cobrada de más. Si no es suficiente, se producirá una reversión y la tarifa de gas Lo recaudado no será reembolsado. (Creo que una forma eficaz de prevenir ataques maliciosos en la cadena de bloques es hacer que el fallo de algunos métodos de ataque pague un precio mayor)

Si se produce algún error durante la transacción, se revertirá toda la transacción, como si nunca hubiera ocurrido.

Existe un límite en la tarifa máxima de gas permitida para un bloque publicado para evitar que los bloques publicados consuman recursos en exceso. Al igual que en Bitcoin, el tamaño del bloque no puede exceder 1 millón.

Manejo de errores

Insertar descripción de la imagen aquí

revert() lanza una excepción incondicionalmente

llamadas anidadas

Insertar descripción de la imagen aquí

Cualquier operación en una cuenta en un contrato inteligente es una operación en el árbol de estado guardado localmente y solo se acordará después de que se publique en la red blockchain.

Ejecute la transacción primero antes de minar, porque si no se ejecuta primero, no hay forma de determinar el árbol de estado, no hay forma de calcular el valor raíz y no hay forma de probar el valor nonce.

¿Qué pasará si algunos mineros no verifican los bloques recién lanzados? La minería no puede continuar sin verificación. Debido a que el proceso de verificación consiste en ejecutar nuevamente el contenido en la blockchain publicada, si no se ejecuta, el estado obtenido por la minería posterior será inconsistente con otros nodos y no será reconocido. Otro método consiste en hacer una copia de los tres árboles obtenidos por otros después de la ejecución, método similar al de un grupo de minería. (No puede obtener el contenido del árbol directamente desde el bloque publicado, solo hay un hash en el encabezado del bloque)

Las transacciones publicadas en la cadena de bloques no necesariamente se ejecutan con éxito, porque no hay forma de deducir la tarifa del gas si no se publican.

Estructura de datos del recibo

Insertar descripción de la imagen aquí

Información relevante que pueden obtener los contratos inteligentes

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

Tres métodos de transferencia:

  • transfer() provocará una reversión de la cadena y generará muy poca tarifa de gas.
  • send() no provocará una reversión de la cadena y le dará muy poca tarifa de gas.
  • call.value() enviará la tarifa de gas restante a

Si el contrato inteligente está mal diseñado, es posible que el dinero depositado no se retire.

Supongo que te gusta

Origin blog.csdn.net/weixin_46287316/article/details/129096609
Recomendado
Clasificación