Solhint mejora la calidad de tus smart contracts


Una vez que has elegido tu entorno de desarrollo preferido, ya sea Remix, Truffle o Hardhat, es importante tener en cuenta la seguridad y calidad del código fuente de tus smart contracts.

Aquí es donde Solhint juega un papel crucial. Añadir Solhint a tu proyecto es esencial para asegurar la detección temprana de posibles errores, vulnerabilidades de seguridad y malas prácticas en el código.

Solhint actúa como una capa de protección adicional al proporcionar un análisis estático exhaustivo de tu código Solidity. Al incorporarlo a tu flujo de trabajo, puedes mejorar la eficiencia y la confianza en tus desarrollos, ya que te permite identificar y abordar problemas potenciales durante el proceso de desarrollo, en lugar de descubrirlos más tarde en las etapas de prueba o en producción. Esta práctica no solo contribuye a la calidad del código, sino que también fomenta la construcción de contratos inteligentes más seguros y robustos desde el inicio del desarrollo.

¿Qué es Solhint?

Solhint se destaca por su enfoque en el análisis estático de estilo y convenciones de codificación. Diferenciándose de las herramientas que se centran en vulnerabilidades y errores, Solhint proporciona recomendaciones y advertencias sobre prácticas de codificación que, aunque no sean estrictamente errores, pueden afectar la legibilidad, mantenibilidad y seguridad del código.

Además Solhint destaca por su configuración personalizable, permitiendo a los usuarios ajustar reglas según las convenciones de su equipo o proyecto. Esto brinda flexibilidad en la aplicación de estándares de desarrollo. Además, su integración sencilla en el flujo de trabajo, especialmente en procesos de integración continua (CI), facilita verificaciones automáticas de estilo, mejorando así la consistencia del código.

¿Cómo añadir y configurar Solhint en un proyecto?

Para añadir Solhint a tu proyecto, necesitas seguir estos pasos:

Primero nos dirigimos al proyecto en el que quieres añadirlo, abrir la terminal e introducir el siguiente comando. Este comando instala Solhint en las devDependencies del proyecto.

npm install -D solhint 

Crear el archivo de configuración que utilizará Solhint con las reglas para analizar tu código. Podemos utilizar la configuración por defecto o crear uno nuestro personalizado.

npx solhint --init

El comando creará el fichero .solhint.json con la configuración por defecto. Pero podemos modificarlo según nuestras preferencias.

{
  "extends": "solhint:recommended",
  "rules": {
    "func-visibility": "error",
  }
}

En este ejemplo, estamos utilizando el archivo de configuración recomendado y añadiendo una regla personalizada. La regla func-visibility comprueba que todas las funciones del contrato tienen especificado su nivel de visibilidad (public, internal, private, etc.).

Ejecutar Solhint en la línea de comandos para analizar tu código.

npx solhint contracts/**/*.sol

Este comando analiza todos los archivos .sol en el directorio contracts/ y te muestra un informe de los problemas encontrados.

Salida con errores al ejecutar el comando de solhint

En este caso podemos ver que el análisis de Solhint ha determinado que tenemos 1 error importante a arreglar y otros dos que aunque no sean problemáticos, no siguen los estándares propuestos.

Deshabilitar / Falsos positivos

Solhint es una herramienta poderosa para analizar la calidad del código en tu proyecto. Sin embargo, en ocasiones, puede marcar ciertas líneas de código como problemas potenciales cuando en realidad no lo son. Esto puede ser un problema, ya que las reglas que marcan falsos positivos pueden interrumpir el proceso de desarrollo normal y hacernos perder tiempo tratando de solucionar problemas inexistentes.

Afortunadamente, Solhint proporciona opciones para desactivar temporalmente ciertas reglas. Desactivar temporalmente una regla específica en un archivo es muy sencillo. Simplemente necesitas agregar un comentario especial en la línea anterior a la que deseas desactivar la regla.

Por ejemplo, si necesitamos desactivar la regla avoid-tx-origin en una línea específica de código, agregamos un comentario especial como este:

// solhint-disable-next-line avoid-tx-origin
msg.sender.send(tx.origin.balance);

Si deseas desactivar una regla en todo un archivo, puedes agregar un comentario especial al principio del archivo. Por ejemplo, si deseas desactivar la regla no-empty-blocks en todo el archivo, puedes agregar este comentario:

/* solhint-disable no-empty-blocks */
pragma solidity ^0.8.0;

contract MyContract {
    // ...
}

Es importante tener en cuenta que desactivar las reglas puede llevar a un código menos seguro o de menor calidad. Por lo tanto, se recomienda utilizar esta opción solo cuando estás seguro de que la regla marcada como problema es un falso positivo y no afectará la seguridad o calidad del código.

Conclusión

En resumen, Solhint es una herramienta esencial para cualquier proyecto de desarrollo blockchain con Solidity. Ya que nos ayuda a detectar errores, mejorar la calidad del código y aumentar la seguridad de nuestros smart contracts. Además añadir y configurar Solhint en tu proyecto es sencillo de realizar, por lo que no hay excusa para no utilizarlo en tu próximo proyecto.