articles, resource-center

Clear: Marco de verificación formal para contratos inteligentes de Solidity

October 28, 2025
8 min
Artem Zaitsev
Arquitectura del marco de verificación formal que muestra la integración del asistente de pruebas Lean con el proceso de verificación de contratos inteligentes Solidity

Introducción

La comunidad de desarrollo de cadenas de bloques lleva mucho tiempo necesitando enfoques potentes de seguridad de los contratos inteligentes e integridad.

## Introducción y resumen

Este nuevo sistema de verificación formal transformará la forma en que los desarrolladores pueden establecer la corrección de vuestros contratos inteligentes Solidity. Es más flexible que otros métodos automatizados convencionales de demostración de teoremas, ya que es más programable por humanos, pero también ofrece más flexibilidad en la expresión y demostración de las propiedades de corrección que antes.

Esto facilita a los desarrolladores la tarea inicial de crear pruebas de que las especificaciones se derivan de la representación abstracta.

Introducción al marco

El marco compila pruebas verificables por ordenador de la corrección de los contratos inteligentes de Yul en un sublenguaje del asistente de prueba Lean, y puede compilar especificaciones para ejecutarlas en el EVM de conformidad con las pruebas para verificar la corrección del modelo.

Aprovecha las completas bibliotecas matemáticas y la automatización de pruebas del ecosistema Lean, por lo que este método requiere más intervención manual que otros métodos de automatización conocidos, pero cualquier argumento de corrección que se pueda escribir en papel se puede demostrar por ordenador.

El marco accede a bibliotecas de formalización matemática eficaces y a opciones de automatización específicas del dominio. Sin embargo, como ilustran muchos teoremas matemáticos básicos, siempre habrá afirmaciones demostrables en ningún sistema probado lo suficientemente potente como para demostrarlas.

Esta posibilidad debería abrir la puerta a la comprobación de las propiedades de corrección de los contratos inteligentes complejos. El marco es especialmente propicio para ilustrar su solidez mediante la verificación de propiedades complejas de algoritmos de aproximación numérica aplicados en aplicaciones financieras descentralizadas y verificadores de conocimiento cero en cadena.

Arquitectura técnica y características

Para facilitar al máximo la base de confianza, el marco ha recibido financiación mediante subvenciones para probar la semántica con conjuntos de pruebas de conformidad con Ethereum y ampliar el modelo a los planes de actualización más recientes de Ethereum. Este modelo mejorado se publicará como un bien público.

El marco incluye un generador de condiciones de verificación, que es capaz de extraer programas Yul al asistente de pruebas Lean. No solo descompone los programas en bloques manejables que son fáciles de razonar, sino que también genera descripciones simplificadas de la semántica de estos bloques.

El marco también admite la redacción de pruebas mediante la provisión de una biblioteca de teoremas y herramientas de automatización. Las pruebas pueden verificarse con la ayuda de LeanCompiler, cuyo núcleo de verificación de pruebas es algo más pequeño, pero que actualmente se considera libre de errores en el sentido de que acepta pruebas de proposiciones falsas.

Este enfoque tiene la ventaja de que permite escribir cualquier propiedad que se pueda escribir y demostrar formalmente en papel y verificarla con LeanCompiler, que tiene un núcleo de verificación de pruebas relativamente pequeño y que actualmente se considera libre de errores en el sentido de que acepta pruebas de proposiciones falsas. Esta flexibilidad es mayor que la de la mayoría de los métodos automatizados, que están limitados por el razonamiento integrado de los métodos.

Composicionalidad y abstracción

Las propiedades de composicionalidad y abstracción implican que los componentes probados del código se conservan al utilizarlos en nuevas situaciones. Esto permite sustituir grandes partes del código sofisticado por simples declaraciones de sus acciones.

Incluso puede admitir la sustitución segura de implementaciones de código por otras alternativas pero semánticamente equivalentes, por ejemplo, optimizando algoritmos y manteniendo garantías de corrección.

El marco proporciona una automatización controlada y extensible mediante procedimientos personalizados que generan pruebas verificadas por el sistema subyacente. Esto supone una importante reducción del trabajo manual y se conservan las garantías de verificación.

Componentes del sistema y flujo de trabajo

El marco tiene tres componentes clave que colaboran para ofrecer una amplia capacidad de verificación:

  • Modelo del dialecto Yul EVM que explica la semántica del código Yul en el entorno del asistente de pruebas. Esto es lo que da al razonamiento sobre el comportamiento de los programas su semántica subyacente
  • Colección de tácticas y teoremas personalizados especialmente diseñados para facilitar la redacción de pruebas sobre programas Yul. Estas herramientas procesan patrones y operaciones comunes que se producen con frecuencia en la verificación de contratos inteligentes
  • El generador de condiciones de verificación establece plantillas de prueba con una estructura de alto nivel y produce automáticamente pruebas que simplifican los programas Yul a formas canónicas. Estas condiciones de verificación ya no se especifican en términos del lenguaje Yul, sino de una manera más accesible.

La verificación es un proceso estructurado. Los usuarios comienzan con un programa Yul y lo compilan con opciones especiales del compilador para producir un código que satisfaga los supuestos estructurales del marco. A continuación, este código es procesado por el generador de condiciones de verificación para generar la infraestructura de prueba necesaria.

Empieza a verificar tus contratos inteligentes hoy mismo.

Transforma tu desarrollo en Solidity con la verificación formal. Empieza ahora mismo.

Requisitos de compilación del contrato

El marco asume cierta estructura de los códigos Yul.

Implementación práctica: función de multiplicación

Para implementar una función de multiplicación, se deben cumplir los siguientes requisitos estructurales compilando el siguiente código con indicadores de compilador específicos. Este ejemplo muestra cómo el marco es capaz de gestionar funciones escritas por el usuario y estructuras de flujo de control arbitrarias.

El proceso de multiplicación tiene dos entradas y realiza una multiplicación añadiendo un valor a un acumulador el número de veces necesario.

Se utilizan saltos condicionales dentro de los bucles en lugar de condiciones de bucle estándar para demostrar la posibilidad de que el marco funcione con un escenario de flujo de control complejo.

Proceso del generador de condiciones de verificación

Al ejecutar el generador de condiciones de verificación en un programa, se genera una jerarquía de archivos estructurada con los archivos generados. La estructura general consta de:

  • Archivos generados con respecto a cada archivo Yul y un contrato.
  • Otras subcarpetas comunes de bloques de código abstraídos.

El marco descompone automáticamente los programas en unidades y genera una lógica de integración para garantizar que las unidades compuestas sean el programa original. Cada bloque de código elemental produce tres tipos de archivos que pueden ser fácilmente razonables, componentes reutilizables y un mejor rendimiento y escalabilidad.

El código del programa Yul y el razonamiento específico del marco incluyen condiciones de verificación y pruebas de que la ejecución del bloque de código da como resultado una condición de verificación que se representa en los archivos de familia generados. Estos archivos sirven de puente entre la especificación/satisfacción y la ejecución del código, y se debe tener especial cuidado con los archivos de familia del usuario, ya que son los archivos generados por el marco que contienen la lógica de verificación que el usuario debe completar.

Para llenar los vacíos lógicos, el sistema necesita proporcionar especificaciones de comportamiento condicionales. Con el fin de expresar la semántica del control de bucles, el sistema ofrece utilidades para realizar operaciones rutinarias, como salir de un bucle y acceder a variables en estados del programa.

Las especificaciones no tienen por qué ser incorrectas, pero pueden no reflejar fácilmente el comportamiento previsto en caso de que no especifiquen suficientemente puntos importantes. Los problemas de especificación suelen ser la parte más difícil de la verificación formal, a veces incluso más que la redacción de las pruebas.

Desafíos de verificación de bucles

Los bucles son muy difíciles de verificar con un sistema de verificación, y esto se debe en parte al razonamiento inductivo que a menudo se requiere de dicho sistema. El marco aborda esta cuestión proporcionando especificaciones sistemáticas de los componentes del bucle.

El usuario debe especificar:

  • Condiciones de rescisión
  • Comportamiento posterior a la iteración.
  • Comportamiento del cuerpo del bucle
  • Invariantes de bucle en general

El marco admite la descripción de la semántica de bucle de actualizaciones de variables simples para elaborar lógica condicional. Aunque este tipo de tecnicismo puede no parecer muy transparente al principio, garantiza que se cubran todas las posibilidades de ejecución.

Prueba de construcción y automatización

Una vez establecidas las especificaciones, el usuario debe demostrar que las condiciones de verificación pueden comprobar las especificaciones establecidas. El marco ofrece una automatización masiva para procesar patrones típicos de pruebas.

Las tácticas personalizadas se utilizan para procesar:

  • Almacena las manipulaciones en variables.
  • Razonamiento del flujo de control
  • Otros problemas comunes de verificación

Estos métodos automatizados contribuyen a reducir considerablemente el esfuerzo manual necesario para realizar las pruebas y siguen manteniendo un nivel extremo de verificación.

El proceso de prueba suele comenzar desplegando las abstracciones correspondientes, ya que estas pruebas están directamente relacionadas con las propiedades definidas por el usuario. Aplica el marco para automatizar una gran cantidad de condiciones de verificación con tácticas de limpieza de uso general que se utilizan para gestionar detalles técnicos, como operaciones de almacenamiento de variables y transiciones de estado.

Funciones avanzadas y desarrollo futuro

El marco es una herramienta compleja que permite convertir cualquier programa Yul en un conjunto de instrucciones sobre lo que se espera que haga el programa y demostrar que el código cumple con las expectativas. Los programas se traducen inicialmente a programas con pruebas de coherencia en una representación abstracta, lo que proporciona puntos de partida simplificados para pruebas de especificación adicionales.

Los patrones en el razonamiento del programa Yul, como las operaciones en un almacén de variables, se gestionan mediante procedimientos de automatización personalizados.

Desarrollo posterior

El desarrollo posterior contiene una serie de mejoras notables:

  • el modelo hash fiable tendrá una semántica de operación criptográfica correcta
  • El modelado de llamadas entre contratos permitirá razonar sobre patrones complejos de interacción
  • La precisión semántica se comprobará mediante modelos de gas, teniendo en cuenta el coste de ejecución
  • El cumplimiento de los cambios más recientes de los planes de actualización de Ethereum lo hará compatible con el comportamiento actual de la red
  • Mejorar la usabilidad permitirá a los usuarios hacer un uso diario más eficiente y fácil de usar.

Se puede seguir trabajando para extraer los clientes de ejecución de Ethereum de las especificaciones y crear compiladores de código byte Yul a EVM verificados formalmente.

Integración con bibliotecas matemáticas

El marco se basa en una amplia gama de bibliotecas matemáticas e informáticas en su sistema de pruebas subyacente. Estas bibliotecas ofrecen conceptos formalizados que suelen aparecer durante el razonamiento sobre programas, lo que simplifica enormemente el esfuerzo necesario para realizar pruebas complejas.

Las tácticas personalizadas se basan en un sólido entorno de metaprogramación sin comprometer la verificación. La naturaleza combinable de la automatización, basada en patrones de uso observados, es lo que garantiza que la usabilidad siga mejorando con el tiempo.

La arquitectura para codificar Yul directamente en el entorno de prueba hace que la interfaz sea transparente y natural para los desarrolladores acostumbrados al lenguaje, y ofrece capacidades nunca antes vistas en la verificación automatizada para garantizar que el código sea correcto.

FAQ

##verificaci_n_formal
##contratos_inteligentes_de_solidity
##asistente_de_prueba_lean
##seguridad_de_la_cadena_de_bloques
##auditor_a_de_contratos_inteligentes
BDS

Pioneros en el futuro de la tecnología blockchain con soluciones innovadoras que empoderan a empresas y particulares de todo el mundo.

+1 929 560 3730 (EE. UU.)
+44 2045 771515 (Reino Unido)
+372 603 92 65 (Estonia)
Harju maakond, Tallin, Lasnamäe linnaosa, Katusepapi tn 6-502, 11412, Estonia

Manténgase al día

Reciba las últimas noticias y actualizaciones sobre blockchain en su bandeja de entrada.

© {{año}} BDS, parte de Idealogic Group. Todos los derechos reservados.