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 garantizar 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 incluir Solhint en 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.

¿Qué es Solhint?

Solhint es una herramienta de análisis estático para Solidity. Es decir, realiza un análisis de código de tu smart contract sin necesidad de ejecutarlo. Utiliza reglas predefinidas para comprobar que tu contrato sigue las mejores prácticas de seguridad y calidad de código.

Solhint se ejecuta desde la línea de comandos y te proporciona un informe detallado de cualquier problema que encuentre en tu código:

  • Variables que no se utilizan.
  • Funciones que no se utilizan.
  • Contratos que no se utilizan.
  • Uso inadecuado de las funciones.
  • Vulnerabilidades conocidas en el código.
  • Malas prácticas de seguridad.

¿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 y vulnerabilidades, 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.