Buy Crypto
Markets
Spot
FuturesBTC
Earn
Event Center
More
0-Fee Fest
Compilador de Solidity (solc): ¿Qué es el compilador de Solidity (solc)?El compilador de Solidity, conocido habitualmente como solc, es la herramienta que convierte el código fuente de contratos inteligentes de Solidity en resultadCompilador de Solidity (solc): ¿Qué es el compilador de Solidity (solc)?El compilador de Solidity, conocido habitualmente como solc, es la herramienta que convierte el código fuente de contratos inteligentes de Solidity en resultad

Compilador de Solidity (solc)

2026/10/13 17:01
#Advanced
Humanity
H$0.05653+0.69%
ELYSIA
EL$0.001549-0.32%
PX
PX$0.0112--%
Lagrange
LA$0.05608+2.03%
PortugalNationalTeam
POR$0.06742-1.73%

¿Qué es el compilador de Solidity (solc)?

El compilador de Solidity, conocido habitualmente como solc, es la herramienta que convierte el código fuente de contratos inteligentes de Solidity en resultados legibles por máquina que pueden desplegarse, verificarse, analizarse e interactuar con ellos en redes blockchain de tipo Ethereum.

Solidity es un lenguaje de programación de alto nivel para contratos inteligentes diseñado para la Ethereum Virtual Machine, y el sitio web oficial de Solidity lo describe como un lenguaje de tipado estático y llaves para desarrollar contratos inteligentes que se ejecutan en Ethereum.

Solc es importante porque las blockchains no ejecutan directamente código Solidity legible por humanos.

En su lugar, los desarrolladores escriben archivos fuente de Solidity, y el compilador transforma esos archivos en bytecode de la EVM, datos ABI, metadatos, representaciones intermedias, advertencias, errores y otros resultados de compilación.

La documentación oficial del compilador de Solidity explica que el compilador puede generar resultados que van desde binarios y ensamblador hasta árboles de sintaxis abstracta y estimaciones de gas.

En el desarrollo cripto, solc se sitúa entre el desarrollador del contrato inteligente y el contrato desplegado on-chain.

Si la versión del compilador, la configuración, las bibliotecas, las opciones del optimizador o el objetivo de la EVM son incorrectos, el bytecode desplegado puede diferir de lo que esperaba el desarrollador.

Por eso, solc no es solo una herramienta de comodidad para desarrolladores.

Es una parte esencial de la seguridad de los contratos inteligentes, la fiabilidad del despliegue, la verificación del código fuente y la confianza de los usuarios.

En términos sencillos, el compilador de Solidity es el programa que transforma contratos inteligentes de Solidity en el bytecode y los datos de interfaz necesarios para ejecutarlos en redes blockchain compatibles con la EVM.

Por qué solc es importante en cripto

Solc es importante porque los contratos inteligentes suelen gestionar tokens, sistemas de staking, mercados de préstamos, bridges, lógica de gobernanza, colecciones de NFT, controles de tesorería y protocolos DeFi.

Un error de compilación puede afectar a activos reales, ya que los contratos inteligentes desplegados son difíciles o imposibles de modificar después del despliegue, salvo que se hayan diseñado mecanismos de actualización previamente.

La documentación oficial sobre contratos inteligentes de Ethereum explica que los contratos inteligentes son programas almacenados en una blockchain que se ejecutan cuando las transacciones los activan.

Esto significa que el bytecode compilado es la lógica real del programa que ejecuta la red.

Los usuarios pueden leer un archivo Solidity claro en un sitio web, pero la blockchain solo aplica el bytecode que se ha desplegado.

Si el código fuente y el bytecode compilado no coinciden, los usuarios no pueden asumir con seguridad que el código fuente publicado represente el contrato activo.

La documentación oficial de Ethereum sobre verificación de contratos explica que la verificación compara el código fuente con el bytecode compilado para detectar si coinciden.

Solc también es importante porque las versiones del compilador pueden incorporar nuevas funciones del lenguaje, nuevas advertencias, correcciones de errores, mejoras del optimizador, cambios en el objetivo de la EVM y cambios de comportamiento.

Un proyecto que utiliza una versión incorrecta del compilador puede no compilar, compilar con un comportamiento diferente o generar bytecode más difícil de verificar.

Para los usuarios cripto, comprender solc ayuda a explicar por qué el código fuente verificado, la configuración del compilador y los metadatos de despliegue son indicadores importantes de confianza.

Cómo funciona solc

Solc recibe código fuente de Solidity como entrada y lo procesa a través de varias etapas de compilación.

Primero, el compilador analiza el código y comprueba si la sintaxis es válida.

Después analiza la corrección de tipos, las relaciones de herencia, la visibilidad de las funciones, la distribución del almacenamiento, las importaciones y otras reglas del lenguaje.

Si el código contiene errores, solc se detiene e informa de ellos.

Si el código presenta problemas potencialmente arriesgados pero no críticos, solc puede emitir advertencias.

Tras el análisis, solc puede generar representaciones intermedias que ayudan a la optimización y a la generación de código.

El compilador genera entonces bytecode de despliegue, bytecode de ejecución, datos ABI, metadatos y otros resultados solicitados.

El bytecode de despliegue se utiliza al crear el contrato on-chain.

El bytecode de ejecución es el código que permanece en la dirección del contrato después del despliegue.

La ABI describe cómo los usuarios externos, las carteras, los scripts y otros contratos pueden llamar a las funciones del contrato y decodificar los datos devueltos.

Código fuente de Solidity

El código fuente de Solidity es el código legible por humanos que escriben los desarrolladores antes de la compilación.

Los archivos de Solidity suelen utilizar la extensión .sol.

Un archivo fuente puede incluir una declaración pragma, importaciones, definiciones de contratos, interfaces, bibliotecas, structs, enums, eventos, errores, funciones, modificadores y comentarios.

El compilador lee estos archivos y aplica las reglas de la versión seleccionada del lenguaje Solidity.

La declaración pragma normalmente indica a las herramientas qué versiones del compilador están permitidas para el archivo.

Por ejemplo, una pragma puede permitir únicamente versiones del compilador dentro de un rango específico 0.8.x.

Esto es importante porque el comportamiento del lenguaje Solidity puede cambiar entre versiones.

Un archivo fuente que compilaba de forma segura con una versión puede no compilar de la misma forma con otra.

Los desarrolladores deben elegir las versiones del compilador deliberadamente en lugar de depender de la versión que casualmente esté instalada.

En proyectos cripto de producción, el código fuente, las versiones de las dependencias, la versión del compilador y la configuración del compilador deben quedar fijados y ser reproducibles.

Bytecode

El bytecode es el código de bajo nivel legible por máquina que se ejecuta en la Ethereum Virtual Machine.

Solc genera bytecode a partir de código fuente de Solidity.

El bytecode de despliegue se utiliza para crear un contrato y puede incluir la lógica del constructor y argumentos del constructor codificados.

El bytecode de ejecución es el código almacenado en la dirección del contrato después de su creación.

Las carteras y los exploradores de blockchain normalmente no muestran el bytecode como lógica de negocio legible, porque es difícil de comprender directamente para las personas.

Por este motivo, el código fuente verificado es útil para la transparencia.

Sin embargo, la EVM ejecuta bytecode, no el texto original de Solidity.

Esta distinción es importante porque dos archivos fuente con un aspecto similar pueden compilarse en bytecode diferente si difiere la configuración del compilador.

También importa porque la configuración del optimizador puede cambiar significativamente la estructura del bytecode.

Para una revisión seria de contratos inteligentes, los desarrolladores y auditores deben entender que el bytecode desplegado es la fuente de verdad final.

ABI

ABI significa Application Binary Interface.

La especificación oficial de la ABI de Solidity explica que la ABI de un contrato es la forma estándar de interactuar con contratos en el ecosistema de Ethereum desde fuera de la blockchain y mediante llamadas entre contratos.

La ABI indica a las herramientas cómo codificar llamadas a funciones y decodificar valores devueltos.

Incluye nombres de funciones, tipos de entrada, tipos de salida, eventos, errores y otros detalles de la interfaz.

Una cartera o script utiliza la ABI para saber cómo llamar correctamente a una función de contrato inteligente.

Por ejemplo, si un contrato de token tiene una función transfer, la ABI indica al software cómo codificar la dirección del destinatario y el importe.

Sin una ABI, los usuarios aún podrían enviar calldata sin procesar, pero sería mucho más difícil y propenso a errores.

La ABI no es lo mismo que el código fuente del contrato.

Tampoco es lo mismo que el bytecode.

Es la descripción de la interfaz que ayuda a las personas y al software a interactuar con contratos inteligentes compilados.

Metadatos del compilador

Solc puede incluir metadatos que describen cómo se compiló un contrato.

La documentación de metadatos de Solidity explica que el compilador añade por defecto un hash de metadatos al bytecode de ejecución, de modo que el archivo de metadatos puede recuperarse de forma autenticada si se publica.

Los metadatos pueden incluir información de los archivos fuente, la versión del compilador, la configuración, la configuración del optimizador, la ABI y otros detalles de compilación.

Esta información ayuda a los exploradores de blockchain y las herramientas de verificación a recrear el resultado de la compilación.

Los metadatos también son importantes porque incluso pequeñas diferencias en la configuración del compilador pueden cambiar el bytecode.

Si un proyecto quiere que los usuarios verifiquen un contrato, debe conservar los archivos fuente exactos y la configuración del compilador utilizados durante el despliegue.

Los metadatos también pueden revelar información útil para investigadores y auditores.

Sin embargo, los metadatos por sí solos no demuestran que un contrato sea seguro.

Principalmente ayudan a determinar si el código fuente y la configuración publicados coinciden con el bytecode desplegado.

Los usuarios deben considerar los metadatos verificados como un indicador de transparencia, no como una garantía de seguridad.

Entrada y salida Standard JSON

La interfaz Standard JSON es la forma estructurada recomendada para utilizar solc en sistemas de compilación automatizados.

La documentación del compilador de Solidity explica que solc puede aceptar entrada Standard JSON a través de la entrada estándar y devolver salida JSON a través de la salida estándar.

La entrada Standard JSON puede definir archivos fuente, configuración del compilador, configuración del optimizador, versión de la EVM, bibliotecas, remappings y resultados solicitados.

La salida Standard JSON puede incluir errores, advertencias, ABI, bytecode, bytecode desplegado, metadatos, estimaciones de gas, distribución del almacenamiento y otros resultados solicitados.

Este formato es útil porque los proyectos modernos de contratos inteligentes suelen tener muchos archivos y dependencias.

También hace que la compilación sea más reproducible, ya que la configuración puede registrarse en un único objeto estructurado.

Las herramientas de compilación y los servicios de verificación suelen depender de Standard JSON o de datos de configuración del compilador similares.

Los desarrolladores deben conservar, siempre que sea posible, la entrada final del compilador utilizada para el despliegue.

Esto ayuda en futuras auditorías, investigaciones de incidentes y verificaciones de código fuente.

Para los contratos inteligentes de producción, la compilación reproducible es una práctica recomendada de seguridad y transparencia.

Versiones del compilador

Las versiones del compilador de Solidity importan porque las reglas del lenguaje y el comportamiento del compilador pueden cambiar con el tiempo.

La página de lanzamientos de Solidity publica anuncios de lanzamientos del compilador que describen nuevas funciones, correcciones de errores, cambios de compatibilidad y actualizaciones del objetivo de la EVM.

Según la información de lanzamientos de 2026 del sitio web oficial de Solidity, Solidity Compiler v0.8.35 es una versión reciente que incorpora nuevas funciones del compilador y adelanta cambios futuros.

Un contrato escrito para una versión del compilador puede no compilar con otra versión sin modificaciones.

Incluso si compila, el bytecode generado puede ser diferente.

Por ello, la mayoría de los proyectos Solidity fijan una versión del compilador en la configuración de compilación.

La declaración pragma puede expresar un rango de versiones compatibles, pero las compilaciones de producción suelen fijar por separado la versión exacta del compilador.

Utilizar un compilador más reciente puede proporcionar correcciones de errores y mejores advertencias.

Utilizar un compilador más reciente sin revisarlo también puede introducir cambios que requieran pruebas.

Los desarrolladores deben leer las notas de lanzamiento antes de actualizar solc para contratos de producción.

Pragma Solidity

La declaración pragma indica al compilador qué versiones de Solidity están previstas para un archivo fuente.

Una pragma no es el compilador.

Es una instrucción del código fuente que ayuda a las herramientas a rechazar versiones incompatibles del compilador.

Por ejemplo, un proyecto puede utilizar una pragma que permita un rango de versiones de Solidity 0.8.x.

Esto puede resultar práctico para bibliotecas, pero arriesgado para despliegues si la versión exacta no se fija en otro lugar.

Una pragma amplia puede permitir que distintos desarrolladores compilen el mismo código con versiones de parche diferentes.

Esto puede dificultar la verificación del bytecode si no se registra la versión final utilizada en el despliegue.

Para los contratos de aplicaciones, los equipos suelen combinar una pragma razonable con una versión exacta del compilador en su herramienta de compilación.

Así se mantiene la compatibilidad de los archivos fuente y se garantiza que las compilaciones de despliegue sean reproducibles.

Los usuarios que revisen contratos verificados deben comprobar tanto la pragma como la versión real del compilador utilizada para la verificación.

Optimizador

El optimizador de Solidity es una función del compilador que intenta hacer más eficiente el código generado.

La documentación del optimizador de Solidity explica que el optimizador intenta simplificar expresiones complejas y puede reducir tanto el tamaño del código como el coste de ejecución.

La optimización puede reducir el gas de despliegue, el gas de ejecución o ambos, según la configuración y el comportamiento del contrato.

El optimizador también puede modificar significativamente la estructura del bytecode.

Esto importa porque un contrato compilado con el optimizador activado no coincidirá con el mismo contrato compilado con el optimizador desactivado.

Las ejecuciones del optimizador son una configuración que indica al compilador en qué medida debe priorizar la eficiencia de ejecución frente al coste de despliegue.

Un valor bajo de ejecuciones puede favorecer un menor coste de despliegue para código que se llama con poca frecuencia.

Un valor alto de ejecuciones puede favorecer un menor coste de ejecución para código que se llama muchas veces.

Los desarrolladores deben probar el comportamiento del gas con patrones de uso realistas antes de elegir la configuración.

Los auditores deben revisar la configuración exacta del optimizador utilizada para el despliegue porque afecta al bytecode final.

via-IR

via-IR es un pipeline de compilación de Solidity que dirige la compilación a través de la representación intermedia del compilador.

La representación intermedia puede ayudar al compilador a realizar determinadas optimizaciones y transformaciones antes de generar bytecode de la EVM.

Utilizar via-IR puede generar bytecode diferente al del pipeline heredado.

Esto significa que los contratos deben probarse exhaustivamente si la compilación cambia entre una compilación sin via-IR y otra con via-IR.

Algunos proyectos utilizan via-IR para mejorar los resultados de optimización o admitir necesidades de compilación complejas.

Sin embargo, cambiar los pipelines de compilación cerca del despliegue puede ser arriesgado si el proyecto no ha probado todos los flujos.

Los desarrolladores deben mantener una configuración de via-IR coherente durante el desarrollo local, las pruebas, las auditorías, el despliegue y la verificación.

Los auditores deben saber si via-IR estaba activado, ya que puede cambiar el bytecode y, en ocasiones, el comportamiento del gas.

Para los usuarios, via-IR es mayormente invisible, pero importa para las compilaciones reproducibles y la verificación.

La práctica más segura es tratar el pipeline del compilador como parte de la configuración de producción del contrato.

Versión de la EVM

La configuración de la versión de la EVM indica a solc qué reglas y funciones de la Ethereum Virtual Machine debe utilizar como objetivo.

Las notas de lanzamiento de Solidity pueden cambiar la versión predeterminada de la EVM cuando las actualizaciones de la red Ethereum introducen nuevos opcodes o comportamientos.

Las notas de lanzamiento de Solidity 0.8.30 explican que la versión predeterminada de la EVM cambió de Cancun a Prague para la actualización de red Pectra de Ethereum.

Esto importa porque el bytecode dirigido a una versión más reciente de la EVM puede utilizar instrucciones no admitidas por redes más antiguas.

Si un desarrollador despliega en una cadena que no admite la versión de EVM seleccionada, el contrato puede fallar o comportarse de forma inesperada.

Los desarrolladores que creen para varias redes compatibles con la EVM deben verificar las funciones de la EVM admitidas por cada red.

La versión de la EVM debe registrarse junto con la versión del compilador y la configuración del optimizador.

Un contrato verificado puede no coincidir si se utiliza una versión incorrecta de la EVM durante la verificación.

Para los usuarios cripto, la versión de la EVM es una parte oculta pero importante de la seguridad del despliegue de contratos.

Para los desarrolladores, es una configuración que nunca debe suponerse.

Importaciones y remappings

Los proyectos Solidity suelen utilizar importaciones para reutilizar interfaces, bibliotecas y módulos de contratos compartidos.

Solc debe resolver esas importaciones antes de poder compilar el contrato completo.

Los remappings indican al compilador cómo asignar rutas de importación a directorios locales o de dependencias.

Esto es habitual en proyectos que utilizan gestores de paquetes o frameworks de contratos inteligentes.

La resolución de importaciones importa porque compilar con una versión incorrecta de una dependencia puede producir bytecode distinto o un comportamiento inseguro.

Un proyecto puede parecer correcto en su archivo principal de contrato mientras depende de forma oculta de una biblioteca importada diferente de la esperada.

Los desarrolladores deben fijar las versiones de las dependencias y revisar cuidadosamente el código importado.

Los auditores deben examinar todo el árbol de dependencias, no solo el archivo fuente principal.

Los usuarios que revisen contratos verificados deben recordar que los archivos importados forman parte del código fuente que se verifica.

Un archivo principal limpio no hace seguro un contrato si una dependencia importada es maliciosa u obsoleta.

Bibliotecas y enlazado

Las bibliotecas de Solidity pueden compilarse y enlazarse en los despliegues de contratos.

Algunas bibliotecas se integran directamente en el bytecode, mientras que las bibliotecas externas pueden requerir enlazado por dirección.

La documentación del compilador de Solidity advierte de que el enlazado manual después de la compilación puede afectar a los metadatos y a la coincidencia del bytecode.

Esto importa porque la verificación puede fallar si las direcciones de las bibliotecas no se registran correctamente.

También importa porque utilizar una dirección de biblioteca incorrecta puede hacer que un contrato desplegado llame a código inesperado.

El enlazado de bibliotecas debe gestionarse mediante herramientas fiables de compilación y despliegue.

Los desarrolladores deben registrar las direcciones de las bibliotecas utilizadas en el momento del despliegue.

Los auditores deben verificar que las bibliotecas enlazadas coincidan con el código fuente revisado.

Los usuarios deben comprobar si un contrato verificado depende de bibliotecas externas.

La seguridad de un contrato puede depender tanto de su propio bytecode como del bytecode de las bibliotecas enlazadas.

Verificación del código fuente

La verificación del código fuente es el proceso de demostrar que el código fuente publicado se compila en el bytecode desplegado on-chain.

La documentación de verificación de Ethereum explica que la verificación compara el código fuente de un contrato inteligente y el bytecode compilado utilizado durante la creación del contrato.

Para verificar un contrato, el verificador suele necesitar los archivos fuente exactos, la versión del compilador, la configuración del optimizador, los argumentos del constructor, las direcciones de las bibliotecas, la versión de la EVM y la configuración relacionada con los metadatos.

Si alguno de estos datos de entrada difiere, el bytecode compilado puede no coincidir con el bytecode desplegado.

El código fuente verificado ayuda a los usuarios a leer qué se supone que debe hacer el contrato.

También ayuda a las carteras, exploradores, auditores e investigadores a decodificar transacciones y eventos.

Sin embargo, el código fuente verificado no significa que un contrato sea seguro ni que haya sido auditado.

Solo significa que el código fuente y la configuración publicados parecen coincidir con el bytecode desplegado.

Los usuarios deben considerar la verificación como un paso mínimo de transparencia.

La revisión de seguridad sigue requiriendo comprender el código, el diseño, los permisos, la capacidad de actualización y los riesgos económicos.

Errores del compilador

Los compiladores son software, y el software puede contener errores.

La documentación oficial de errores conocidos de Solidity registra los errores conocidos del compilador y las versiones afectadas.

Esto es importante porque un contrato inteligente puede estar correctamente escrito a nivel de código fuente y aun así verse afectado por un error del compilador en una versión o configuración específica.

Los errores del compilador suelen ser poco frecuentes en comparación con los errores de contratos inteligentes a nivel de aplicación, pero su impacto puede ser grave.

Los desarrolladores deben comprobar si la versión de compilador elegida presenta errores graves conocidos.

Los equipos también deben utilizar versiones recientes y estables del compilador cuando sea práctico y después de realizar las pruebas adecuadas.

Los auditores deben incluir la revisión de la versión del compilador en el proceso de auditoría.

Las herramientas de verificación también pueden advertir cuando un contrato se compiló con una versión afectada por problemas conocidos.

Utilizar una versión antigua del compilador sin motivo puede aumentar el riesgo.

Un proceso de desarrollo seguro trata el compilador como parte de la base de código de confianza.

Advertencias y errores

Solc informa de errores cuando el código no puede compilarse de forma segura conforme a las reglas del lenguaje.

Solc informa de advertencias cuando el código puede compilarse, pero puede contener comportamientos arriesgados, obsoletos, confusos o no deseados.

Los desarrolladores no deben ignorar las advertencias del compilador en proyectos de producción.

Una advertencia puede revelar variables sin utilizar, declaraciones ocultas, identificadores SPDX ausentes, sugerencias de mutabilidad, funciones obsoletas o patrones peligrosos.

Algunas advertencias son menores, pero otras pueden indicar errores reales o lógica confusa.

Los sistemas de compilación de producción deben tratar las advertencias graves como problemas que requieren revisión.

Los auditores suelen examinar las advertencias del compilador porque pueden revelar supuestos que el desarrollador pasó por alto.

Los usuarios normalmente no pueden ver todas las advertencias de un contrato desplegado, salvo que se publique el resultado de la compilación.

Esta es una de las razones por las que los proyectos de código abierto deben publicar los artefactos de compilación cuando sea posible.

Una compilación limpia no demuestra seguridad, pero ignorar las advertencias es una mala señal.

Estimaciones de gas

Solc puede generar estimaciones de gas para algunas funciones y resultados de despliegue.

La documentación del compilador de Solidity incluye las estimaciones de gas entre los posibles resultados del compilador.

Las estimaciones de gas pueden ayudar a los desarrolladores a comprender el coste de desplegar o llamar a un contrato.

Sin embargo, las estimaciones pueden no reflejar por completo las condiciones reales de la red ni todas las rutas de ejecución.

El uso real de gas puede depender de los valores de almacenamiento, el tamaño de la entrada, las rutas de ramificación, las llamadas externas, el acceso a cuentas frías y calientes y las reglas de la red.

Los desarrolladores deben probar el comportamiento del gas con casos de prueba realistas y no depender únicamente de las estimaciones del compilador.

El gas es importante en cripto porque las funciones costosas pueden perjudicar la experiencia de usuario o hacer que acciones importantes de un protocolo sean poco prácticas durante periodos de congestión.

El código con un uso intensivo de gas también puede aumentar el coste de despliegue y la presión sobre el tamaño del contrato.

El optimizador puede reducir el gas en algunos casos, pero también puede modificar las compensaciones entre los costes de despliegue y ejecución.

La revisión del gas debe formar parte tanto del análisis de ingeniería como del de seguridad.

Distribución del almacenamiento

La distribución del almacenamiento describe cómo se organizan las variables de estado en los slots de almacenamiento del contrato.

Solc puede generar información sobre la distribución del almacenamiento de los contratos.

Esto es especialmente importante para los contratos inteligentes actualizables.

Si un proyecto actualiza la lógica de implementación, pero modifica incorrectamente la distribución del almacenamiento, el contrato puede corromper el estado.

La corrupción del almacenamiento puede afectar a saldos, propiedad, configuración de gobernanza, contabilidad de tokens o controles de acceso.

Los desarrolladores deben preservar la compatibilidad de la distribución del almacenamiento cuando utilicen patrones de actualización basados en proxies.

Los auditores deben revisar conjuntamente los resultados de distribución del almacenamiento y los planes de actualización.

Los usuarios deben ser cautos con los contratos actualizables porque el proxy desplegado podría apuntar posteriormente a un nuevo bytecode de implementación.

Solc no evita por sí solo todos los diseños de actualización deficientes.

Proporciona resultados que los desarrolladores cuidadosos pueden utilizar para reducir el riesgo de actualización.

Tamaño del contrato

Los resultados de solc pueden ayudar a los desarrolladores a supervisar el tamaño del bytecode del contrato.

Las redes EVM suelen imponer un tamaño máximo de contrato para el bytecode de ejecución desplegado.

Los contratos grandes pueden no desplegarse si superan los límites de tamaño.

El optimizador puede reducir en ocasiones el tamaño del bytecode eliminando redundancias y simplificando el código.

Los desarrolladores también pueden dividir sistemas grandes en varios contratos, bibliotecas o módulos.

El tamaño del contrato importa porque los contratos excesivamente complejos pueden ser más difíciles de auditar y más caros de desplegar.

Un contrato más pequeño no es automáticamente más seguro, pero la complejidad innecesaria aumenta la dificultad de revisión.

Solc ayuda a exponer el tamaño del código antes del despliegue.

Los sistemas de compilación deben fallar pronto si el tamaño del bytecode es demasiado grande para la red objetivo.

Supervisar el tamaño del bytecode forma parte de la ingeniería profesional de contratos inteligentes.

Solc en frameworks de desarrollo

Muchos desarrolladores de contratos inteligentes no ejecutan solc manualmente para cada compilación.

Utilizan frameworks que llaman a solc en segundo plano.

Estas herramientas pueden gestionar la estructura del proyecto, las dependencias, la compilación, las pruebas, el despliegue y la verificación.

Incluso cuando un framework oculta los comandos directos del compilador, la configuración de solc sigue siendo importante.

El framework debe seleccionar una versión del compilador, la configuración del optimizador, la versión de la EVM, las rutas de importación y las opciones de salida.

Un desarrollador que no comprenda estos ajustes puede desplegar accidentalmente un bytecode diferente del utilizado en la auditoría.

Los equipos deben confirmar los archivos de configuración del compilador en el control de versiones.

También deben hacer que los despliegues sean reproducibles desde entornos limpios.

Los auditores deben revisar la configuración del compilador del framework como parte de la base de código.

Solc puede estar oculto en el flujo de trabajo, pero sigue siendo la herramienta que produce el bytecode final.

solc-js

Solc-js es una versión o wrapper de JavaScript del compilador de Solidity que se utiliza en muchos flujos de trabajo web y de Node.js.

La documentación oficial de instalación de Solidity describe distintas formas de instalar el compilador de línea de comandos y los paquetes del compilador.

Solc-js es útil para herramientas basadas en navegador, sistemas de compilación de JavaScript, compiladores en línea y flujos de trabajo automatizados de verificación de contratos.

Los desarrolladores deben seguir comprobando qué versión del compilador utiliza solc-js.

Usar un paquete de JavaScript no elimina la necesidad de fijar versiones y configuraciones.

Entornos diferentes pueden resolver accidentalmente compilaciones distintas del compilador si las versiones de las dependencias son flexibles.

Esto puede romper la reproducibilidad y la verificación.

Para contratos de producción, se debe conocer y registrar la compilación exacta del compilador.

Solc-js es práctico, pero la comodidad no sustituye a las compilaciones deterministas.

El artefacto del compilador debe coincidir exactamente con el artefacto de despliegue.

Función de solc en la seguridad

Solc no es un auditor de seguridad, pero desempeña una función importante en la seguridad de los contratos inteligentes.

El compilador aplica las reglas del lenguaje, informa de advertencias, genera bytecode y puede producir información útil para el análisis.

Puede detectar errores de sintaxis, errores de tipo, advertencias de código inalcanzable y algunos patrones peligrosos.

Sin embargo, solc no puede demostrar que el diseño económico de un protocolo sea seguro.

No puede garantizar que los controles de acceso sean correctos.

No puede garantizar que la gobernanza de las actualizaciones sea fiable.

No puede garantizar que el diseño de los oráculos, la lógica de liquidación o la tokenomics sean seguros.

La seguridad sigue requiriendo pruebas, auditorías, métodos formales cuando proceda, modelado de amenazas, supervisión y procedimientos de despliegue cuidadosos.

Trabajos académicos como el artículo sobre análisis estático Slither muestran cómo herramientas adicionales pueden analizar contratos inteligentes más allá de la compilación básica.

Solc es la base del proceso de compilación, pero debe formar parte de un flujo de trabajo de seguridad más amplio.

Resultados habituales de solc

El resultado más habitual de solc es el bytecode del contrato.

Otro resultado común es la ABI.

Los metadatos también se generan habitualmente para verificación y herramientas.

Las estimaciones de gas pueden ayudar a los desarrolladores a comprender los costes aproximados de ejecución.

La distribución del almacenamiento puede ayudar a los desarrolladores a gestionar contratos actualizables.

Los árboles de sintaxis abstracta pueden ayudar a las herramientas de análisis a comprender la estructura del código fuente.

Los resultados de representación intermedia pueden ayudar a desarrolladores avanzados a inspeccionar las transformaciones del compilador.

Los resultados de ensamblador pueden ayudar en la optimización profunda y la depuración.

Los resultados de errores y advertencias ayudan a los desarrolladores a corregir el código antes del despliegue.

Estos resultados hacen que solc sea útil no solo para el despliegue, sino también para auditorías, pruebas, verificación, documentación y análisis.

Errores comunes con solc

Un error habitual es compilar con una versión del compilador distinta de la utilizada durante las auditorías.

Otro error es modificar la configuración del optimizador una vez terminadas las pruebas.

Un tercer error es desplegar bytecode sin registrar la entrada exacta del compilador.

Un cuarto error es utilizar una pragma amplia y asumir que todas las versiones compatibles del compilador producen resultados idénticos.

Un quinto error es ignorar las advertencias del compilador.

Un sexto error es elegir la versión de EVM incorrecta para la red de despliegue.

Un séptimo error es enlazar bibliotecas manualmente y romper la verificación basada en metadatos.

Un octavo error es no incluir todos los archivos importados durante la verificación.

Un noveno error es asumir que el código fuente verificado significa código fuente auditado.

Un décimo error es actualizar el compilador justo antes del despliegue sin realizar pruebas completas.

Cómo pueden leer los usuarios la información de solc en los exploradores

Los usuarios a menudo pueden encontrar información del compilador en las páginas de contratos verificados de los exploradores de blockchain.

Esta información puede incluir la versión del compilador, el estado de optimización, las ejecuciones del optimizador, la versión de la EVM, el identificador de licencia, los argumentos del constructor y los archivos fuente verificados.

Los usuarios deben comprobar si el contrato está verificado antes de confiar en una vista de código fuente.

Si un contrato no está verificado, los usuarios pueden ver únicamente bytecode e información decodificada limitada.

Si un contrato está verificado, los usuarios pueden inspeccionar más fácilmente el código fuente y la ABI.

Los usuarios deben recordar aun así que el código verificado puede contener errores, puertas traseras, permisos de administrador, capacidad de actualización o lógica económica arriesgada.

La información del compilador ayuda a responder si el código visible coincide con el bytecode desplegado.

No responde si el código es seguro de utilizar.

Para interacciones de alto valor, los usuarios también deben revisar auditorías, permisos, timelocks, controles de actualización y documentación del proyecto.

Los datos de solc son una parte de la diligencia debida de un contrato.

Prácticas recomendadas para desarrolladores

Fija la versión exacta de solc utilizada para las compilaciones de producción.

Confirma la configuración del compilador en el control de versiones.

Utiliza entornos de compilación reproducibles para pruebas, auditorías, despliegue y verificación.

Revisa las notas de lanzamiento de Solidity antes de cambiar las versiones del compilador.

Comprueba los errores conocidos del compilador para la versión seleccionada.

Mantén coherente la configuración del optimizador después de iniciar la auditoría.

Establece la versión de EVM correcta para la red objetivo.

Conserva los artefactos de entrada y salida Standard JSON de los contratos desplegados.

Verifica los contratos después del despliegue utilizando el código fuente y la configuración exactos.

Trata las advertencias del compilador como elementos que revisar, no como ruido inofensivo.

Prácticas recomendadas para usuarios

Comprueba si un contrato está verificado a nivel de código fuente antes de interactuar con él.

Revisa la versión y la configuración del compilador cuando estén disponibles.

Recuerda que el código fuente verificado no es lo mismo que el código fuente auditado.

Ten cuidado con los contratos no verificados que solicitan aprobaciones de tokens o depósitos de activos.

Comprueba si un contrato utiliza proxies actualizables o bibliotecas enlazadas.

Revisa si la ABI coincide con las funciones que la interfaz te pide llamar.

Ten cuidado cuando un sitio web te pida firmar transacciones para un contrato que no puedes inspeccionar.

Utiliza, cuando sea posible, carteras fiables que muestren las llamadas a contratos y los datos de funciones decodificados.

Para transacciones grandes, compara la documentación oficial del proyecto con la dirección del contrato verificado.

No consideres los metadatos del compilador como una garantía de seguridad o de valor futuro.

FAQ

¿Qué significa solc?

Solc significa Solidity Compiler, el compilador que transforma el código fuente de Solidity en bytecode de la EVM, datos ABI, metadatos y otros resultados de compilación de contratos inteligentes.

¿Es solc lo mismo que Solidity?

No. Solidity es el lenguaje de programación, mientras que solc es el compilador que procesa el código Solidity.

¿Qué produce solc?

Solc puede producir bytecode, bytecode desplegado, datos ABI, metadatos, estimaciones de gas, distribución del almacenamiento, árboles de sintaxis abstracta, ensamblador, representación intermedia, errores y advertencias.

¿Por qué importa la versión de solc?

La versión de solc importa porque distintas versiones del compilador pueden admitir funciones del lenguaje, advertencias, correcciones de errores, valores predeterminados de la EVM y resultados de bytecode diferentes.

¿Qué es el bytecode en la compilación de Solidity?

El bytecode es el código de bajo nivel generado por solc que la Ethereum Virtual Machine puede ejecutar.

¿Qué es la ABI en la compilación de Solidity?

La ABI es la descripción de interfaz que indica a las carteras, scripts y aplicaciones cómo codificar llamadas y decodificar respuestas de un contrato inteligente.

¿Solc hace seguros los contratos inteligentes?

No. Solc aplica las reglas del lenguaje y genera bytecode, pero la seguridad de los contratos inteligentes sigue requiriendo pruebas, auditorías, modelado de amenazas y diseño cuidadoso.

¿Qué es el optimizador en solc?

El optimizador es una función del compilador que intenta reducir el tamaño del código, el coste de despliegue o el coste de gas de ejecución, según la configuración y los patrones de uso.

¿Qué es Standard JSON en solc?

Standard JSON es un formato estructurado de entrada y salida del compilador utilizado para una compilación automatizada fiable, artefactos de compilación y verificación de contratos.

¿Por qué la verificación de contratos necesita la configuración de solc?

La verificación de contratos necesita la configuración de solc porque el código fuente debe compilarse con la misma versión, configuración del optimizador, bibliotecas, versión de la EVM y configuración de metadatos para coincidir con el bytecode desplegado.

Conclusión

El compilador de Solidity, o solc, es una de las herramientas más importantes en el desarrollo de contratos inteligentes de Ethereum.

Convierte el código fuente de Solidity en bytecode de la EVM, datos ABI, metadatos, distribución del almacenamiento, estimaciones de gas y otros resultados de los que dependen desarrolladores, auditores, carteras y exploradores.

La configuración de solc es crítica porque la versión del compilador, las opciones del optimizador, la versión de la EVM, el enlazado de bibliotecas, las importaciones, los metadatos y las decisiones sobre el pipeline de compilación pueden afectar al bytecode final desplegado.

Para los desarrolladores, solc debe tratarse como parte del límite de seguridad de producción, en lugar de como una herramienta de compilación en segundo plano.

Para los usuarios, la información de solc ayuda a explicar por qué el código fuente verificado, la configuración del compilador y la coincidencia del bytecode son importantes antes de interactuar con un contrato inteligente.

Sin embargo, la compilación y la verificación no garantizan que un contrato sea seguro, justo, auditado o económicamente sólido.

Un contrato verificado aún puede contener errores, controles de administrador arriesgados, rutas de actualización, tokenomics deficientes o lógica maliciosa.

Una buena práctica de contratos inteligentes combina una compilación correcta con pruebas, auditorías, compilaciones reproducibles, despliegue seguro, supervisión y verificación transparente.

Para principiantes, solc se entiende mejor como la herramienta que convierte Solidity en código ejecutable en una blockchain.

Para usuarios avanzados, solc es un componente determinista del sistema de compilación que afecta directamente al bytecode, la verificación, el comportamiento del gas, la seguridad del almacenamiento y la fiabilidad del despliegue.

En el contexto de un glosario cripto, Solidity Compiler (solc) es la herramienta oficial de compilación de Solidity utilizada para transformar el código fuente de contratos inteligentes en artefactos de la EVM desplegables y verificables.

La idea clave es que solc es el puente entre el código de contratos inteligentes escrito por personas y el bytecode que realmente se ejecuta on-chain, por lo que su versión, configuración y resultados deben manejarse con precisión.
BTC ETFs See $679M in Outflows
BTC ETFs See $679M in OutflowsBTC ETFs See $679M in Outflows
Citi sees BTC at $113K. What do institutions see?