Precio de Bitcoin Precio de Bitcoin
Ctrl+D Precio de Bitcoin
ads

Error de actualización del cliente "Berlín" de OpenEthereum

Author:

Time:

Alex Stokes @ralexstokes:

Como habrá escuchado, un error en el cliente @OpenEthereum provocó la caída de algunos servicios críticos que sustentan la red Ethereum.

Reflexionemos sobre el trato que causó el accidente.

En primer lugar, me gustaría agradecer a todos los ingenieros que respondieron rápidamente al incidente y solucionaron el problema:

https://twitter.com/OpenEthereumOrg/status/1382719444833726470?s=20…

Además, no hice un seguimiento de todos los detalles yo mismo, los hechos importantes a continuación son presentados por el usuario eb en el servidor de discordia Eth R&D.

Comencemos con la transacción que provocó el error:

https://etherscan.io/tx/0x7006f38fa2e6654fae1a781aefc5885fe0cb8f778b1add10636eaf7e34279247

Esta es una transacción de llamada de contrato, enviada desde el intercambio KuCoin, que distribuye ETH a muchas direcciones. La codificación ABI de los datos de la llamada para esta transacción era incorrecta, lo que finalmente provocó una división de la cadena. Puede echar un vistazo a los "Datos de entrada" de esta transacción en Etherscan.

Al llamar a sendEths en el contrato, debe proporcionar dos parámetros: uno es una matriz de longitud variable (matriz de tamaño dinámico) sobre la dirección de destino; el otro es una matriz de longitud variable sobre el monto de la transferencia (en wei); solo cuando los dos coinciden A qué dirección transferir cuánto dinero.

El conocido inversionista Gary Vaynerchuk lanzó la serie NFT VeeFriends: Gary Vaynerchuk, un inversionista en compañías tecnológicas conocidas como Uber, Facebook, Twitter y Tumblr, reveló en una entrevista con el programa financiero SquawkBox de CNBC que lanzó la serie NFT. VeeFriends, incluidos 10 255 tokens, que admiten compras con ETH. Cada token contendrá un contrato inteligente que incluye metadatos que puede usar para interactuar con los compradores. Vaynerchuk planea realizar un evento comercial anual, "VeeCon", donde los poseedores de fichas recibirán acceso exclusivo durante tres años después de la compra. Estos tokens se pueden comprar en VeeFriends, pujando por ellos a través de una subasta holandesa.

Una parte de las ganancias generadas por la venta de tokens se destinará a organizaciones benéficas, dijo Vaynerchuk, con cinco tokens que incluyen acceso a una "beca" que permite a los titulares aprender del CEO de VaynerMedia y su red profesional. Además, se realizarán donaciones a la DAO para compensar el impacto ambiental de la criptominería. (CNBC) [2021/5/5 21:26:32]

Podemos analizar los datos de la llamada para ver qué salió mal: la primera línea (marcada con "" en Etherscan) indica que la lista de direcciones comienza en el byte 64 (línea ""). La segunda línea indica que la lista de montos de transferencia comienza en el byte 416 (línea "").

Entonces, en general, queremos enviar una cierta cantidad de ETH a una dirección en pares, de arriba hacia abajo, a una dirección, parece sencillo.

Sin embargo, cuando comenzamos a recorrer la lista, primero saltamos al byte correcto de los datos de llamada, y Solidity ABI establece que la primera palabra de datos es la longitud de toda la matriz indeterminada.

ETH una vez más superó la marca de los $1100: según los datos de Huobi Global, ETH ha subido a corto plazo, superando la marca de los $1100, y ahora cotiza a $1100,1, con un aumento intradiario del 4,5 %. así que por favor haga un buen trabajo en el control de riesgos. [2021/1/6 16:32:36]

Esta es la fuente del error final: porque el valor en la llamada dada es "0x10" (¡nota, esto es hexadecimal!), pero la llamada de datos solo da 10 pares de dirección-valor. La codificación ABI correcta para los datos de esta llamada (completada en línea y línea) debe ser "0xA", no "0x10".

Es posible que haya adivinado lo que sucede entonces, podemos echar un vistazo a la traza de ejecución:

https://etherscan.io/vmtrace?txhash=0x7006f38fa2e6654fae1a781aefc5885fe0cb8f778b1add10636eaf7e34279247&type=parity

El contrato atravesó con éxito las primeras 10 direcciones. Originalmente, el contrato debería dejar de ejecutarse en este momento, pero según la declaración de datos de la convocatoria, ¡todavía hay muchas direcciones! Entonces sigue adelante y ejecútalo.

Sin embargo, según la estructura de los datos de la llamada, la "dirección 11" es 0x10 para codificar la longitud de la lista, por lo que el contrato intenta enviar 0 ETH a la dirección 0x10.

Además, parece que cuando el contrato intenta leer datos de llamadas que no existen, devuelve 0 ETH; puede imaginar que el contrato cometió un error aquí, pero continúa enviando 0 ETH a los datos de llamadas que lee El otro 6 "direcciones" tomadas.

En este punto, puede notar que 0x10 puede ser una de nuestras llamadas "direcciones especiales", que está completamente dentro del alcance del contrato precompilado de EVM (el llamado "contrato precompilado" es un tipo especial de contrato, en el EVM hay implementaciones óptimas por ahí, pero compila como la mayoría de los contratos).

Y no esperamos que el contrato precompilado 0x10 devuelva ETH. De esta forma, se convierte en un agujero negro ETH. Sin embargo, esto no necesariamente causa ningún problema. ¿Qué causó exactamente que todo el cliente fallara?

La razón es que 0x10 es en realidad un contrato precompilado afirmado por EIP-2537 para el programa de criptografía de emparejamiento BLS, pero este EIP aún no se ha implementado en la red principal. Entonces, aunque puede interactuar con esta dirección, no hay ningún contrato en esta dirección en la red principal y no habrá más acciones.

Además, necesitamos un hecho para explicar esta división, que, como habrás adivinado, es la bifurcación dura "Berlín" (fue esta bifurcación dura la que trajo este problema a la superficie): cambió el consumo de gas en el EVM Método de medición cuantitativa.

Después de la implementación de EIP-2929, si realiza operaciones de almacenamiento de estado en la misma ranura de almacenamiento varias veces en una transacción, la primera ejecución consumirá más gas y las ejecuciones posteriores consumirán menos gas. En teoría, este cambio de precio reflejaría con mayor precisión el costo actual del acceso del cliente a los elementos de almacenamiento...

Además, tenga en cuenta que en todas las ejecuciones del lado del cliente, estos datos generalmente se almacenan en una capa de hardware más económica.

Ahora finalmente hemos encontrado el error de OpenEthereum en el bloque #12244294: el cliente incluye todas las precompilaciones implementadas como parte del manifiesto de acceso EIP-2929. (Nota del traductor: aquí debería ser "EIP-2930")

Dado que EIP-2537 ya está implementado en la mayoría de los clientes (¡y en un momento se propuso incluirlo en la actualización de "Berlín"!), OpenEthereum otorgó un descuento de gas a todas las transacciones que accedieron a 0x10.

Pero la gran mayoría de los clientes activos en la red no implementan EIP-2929 de esta manera, solo brindan descuentos de gasolina para transacciones que acceden a contratos precompilados activados, ¡y EIP-2537 pertenece a contratos precompilados que aún no se han activado! Por lo tanto, el cálculo del cliente de OpenEthereum de cuánto gas consumió la transacción divergió de otros clientes en la red.

Afortunadamente, @mhswende encontró rápidamente el error y @sorpaas ayudó a solucionarlo: https://github.com/openethereum/openethereum/pull/364

Todavía hay mucho que decir, y espero un mejor informe de tiempo de alguien con una mejor vista que yo.

Todo lo que puedo decir es que este error destaca los riesgos inherentes a las bifurcaciones duras y la importancia de continuar trabajando en la construcción de una infraestructura más resistente.

Los sistemas de un solo cliente que dependen del cliente OpenEthereum estuvieron caídos por un tiempo hoy, ya que el cliente no pudo mantenerse al día con la red después del bloqueo problemático. Como resultado, Etherscan se cayó.

Afortunadamente, el error no fue lo suficientemente grave como para causar una bifurcación de cadena importante, pero la posibilidad no está descartada. Podemos aprovechar las implementaciones de múltiples clientes para aumentar la resistencia (los múltiples clientes en sí mismos son una gran fortaleza de nuestro ecosistema Ethereum) y presionar a sus proveedores de infraestructura para que hagan lo mismo.

Hemos visto que la adopción en 2021 es más rápida que nunca y las perspectivas son muy prometedoras. Necesitamos aprender de este accidente y construir juntos un mejor Ethereum.

Tags:

Huobi Exchange
61 pensamientos sobre NFT

Guía: este artículo registra algunos pensamientos comunes, que son completamente subjetivos y solo como referencia. 1. Si eres un artista.

Manual de oro | Tutorial de minería Booster (BOO)

La minería de liquidez de DeFi se ha vuelto muy popular.

¿Congelamiento interprovincial de cuentas bancarias? Lectura obligada para los usuarios del círculo de divisas

Título original: Original|Inter-provincial freeze? Lectura obligada para pymesCon respecto a las razones por las cuales las cuentas bancarias en el círculo de divisas siempre están congeladas por los órganos de seguri.

Error de actualización del cliente "Berlín" de OpenEthereum

Alex Stokes @ralexstokes:Como habrá escuchado, un error en el cliente @OpenEthereum provocó la caída de algunos servicios críticos que sustentan la red Ethereum.Reflexionemos sobre el trato que causó el accidente.En p.

Golden Observation|¿Cuáles son las oportunidades de adelantamiento de las cadenas públicas que no sean Ethereum?

Cuando Ethereum 2.0 aún no está en línea, es una oportunidad para que otras cadenas públicas trabajen duro.Esto parece haberse convertido en el consenso de otras cadenas públicas.

Obtenga más información sobre el popular proyecto Chia

Chia Network es un proyecto de criptomonedas fundado por el fundador de BitTorrent, Bram Cohen, en 2017. Se posiciona como una criptomoneda ecológica y respetuosa con el medio ambiente. Al mismo tiempo.

ads