Testigo de la historia hoy. El conocido protocolo DEX CurveFinance fue atacado y se agotó la liquidez de múltiples grupos. La investigación preliminar reveló que resultó ser culpa del compilador de contratos inteligentes Vyper. ¡Era tan escandaloso que la gente no pudo evitar llamarlo un buen tipo! Las estadísticas preliminares muestran que la pérdida superó los 50 millones de dólares estadounidenses y el precio instantáneo del token de la plataforma CRV fue cercano a cero.

Para explicar brevemente a los amigos que no son técnicos, cuando usamos blockchain, a menudo tratamos con códigos que se ejecutan en blockchain. Estos códigos se denominan "contratos inteligentes".

Para una cadena pública como Ethereum que se centra en contratos inteligentes, tiene un conjunto de códigos estándar de contratos inteligentes para quienes desarrollan aplicaciones en ella (también llamada dApp, aplicación descentralizada) para escribir y ejecutar aplicaciones. Por ejemplo, Uniswap y Curve son todas aplicaciones dApp que se ejecutan en Ethereum.

Debido a que la computadora debe ser fácil de ejecutar y ahorrar espacio de almacenamiento, el código estándar almacenado en la cadena es un número binario muy compacto cercano al lenguaje de máquina, que no es conveniente para que los humanos lean y escriban directamente.

Para que la apertura de aplicaciones sea más conveniente, se han inventado muchos "lenguajes de alto nivel" que son convenientes para que los humanos lean y escriban para escribir programas. Solía ​​​​haber tres tipos en Ethereum. La misma sintaxis es similar al lenguaje LISP y no se ha vuelto popular. Una sintaxis es similar al lenguaje Python porque fue promovida por Vitalik (el fundador de Ethereum), llamada Vyper. La sintaxis es similar al lenguaje Javascript, llamado Solidity.

Después de que los programadores escriben programas de contratos inteligentes en estos lenguajes de alto nivel, necesitan utilizar una herramienta llamada "compilador" para "traducirlos" a un "lenguaje de máquina" que pueda ejecutarse en la cadena de bloques Ethereum, es decir, código estándar.

Obviamente, diferentes lenguajes de alto nivel tienen diferentes compiladores. Esto es fácil de entender. La traducción al japonés y la traducción al inglés son definitivamente diferentes. La falla está en el compilador/traductor.

Esta vez, Curve fue atacado debido a una falla en una versión específica del compilador Vyper utilizado por algunos grupos de Curve (se sospecha, aún bajo investigación). Esto es como decir "Quiero beber" en japonés y el traductor lo está traduciendo al Chino Cuando se tradujo como "Quiero comer cangrejos". Esto es indignante

Afortunadamente, la popularidad de Vyper no es alta. Actualmente, Solidity es el más utilizado en Ethereum y cadenas compatibles. El traductor de inglés es más claro y no hay errores de traducción, gracias a Dios.

En los primeros días de Uniswap, el líder de DEX, el fundador Hayden, utilizó el lenguaje Vyper para escribir código. Afortunadamente, Hayden luego contrató a un CTO profesional y cambió el código a Solidity. Entonces, esta vez con el problema del compilador Vyper, Uniswap está sano y salvo. Curve Finance, que utiliza ampliamente el lenguaje Vyper, sufrió.

El problema provocado por este defecto es el clásico "problema de reentrada". Pensando en ese año, en 2015, el incidente de DAO provocó directamente la bifurcación de Ethereum, dividiéndose en ETH y ETC. ¡Este problema de reentrada es realmente una maldición de la historia!

Pero el problema de reingreso de The DAO ocurrió en el nivel del idioma alto. Es decir, hablabas inglés incorrectamente. Originalmente querías beber pero en cambio dijiste que querías comer cangrejos. El traductor no se equivocó. la traducción.

En cuanto a este incidente de Curve, lo aterrador es que lo hiciste bien, pero el traductor se equivocó y no pudiste entenderlo (la empresa de auditoría no revisará el código binario compilado), por lo que se presentó sin nadie. notando. ¡ERROR fatal! ¡Esto también ha sonado una llamada de atención para toda la industria DeFi actual e incluso para toda la industria blockchain!

Hoy en día, todos, desde los escritores de códigos hasta los revisores de códigos y los auditores externos, no mirarán el código binario compilado. Todos suponen que no habrá problemas con el compilador, siempre que vean que el lenguaje de alto nivel está escrito correctamente, piensan que no habrá problemas.

¿Por qué Satoshi Nakamoto no agregó funciones de contrato inteligente demasiado poderosas al script BTC? Esto es para evitar errores imperdonables causados ​​por una mayor complejidad. Algunas personas critican a BTC por ser conservador, pero frente a activos por valor de millones, decenas o incluso miles de millones de dólares, la cautela y el conservadurismo nunca son demasiados. La mayoría de la gente sigue siendo gente corriente. Una pérdida de decenas o millones de dólares será un golpe fatal para quien caiga sobre ella.

Esto también resalta la advertencia de la Ley de Murphy: cualquier vínculo que pueda salir mal definitivamente saldrá mal mientras pase suficiente tiempo. Esta vez fue Vyper, que tuvo mucha suerte. ¿Qué pasa con el futuro? ¿Qué pasa si hay una vulnerabilidad fatal en Solidity? Todo DeFi, con miles de protocolos, decenas de miles de millones de activos y edificios brillantes, se construyó sobre arenas movedizas. y todos colapsaron. ¿No es terrible?

¿Por qué es difícil viajar a través de ciclos? Antes de perseguir tal o cual objetivo soñado, primero debes examinar si puedes "vivir hasta ese día". Muchas veces, sobrevivir es el ganador y lo que queda es el rey.