Prueba de contrato inteligente para su implementación

Los contratos inteligentes son programas inmutables: una vez que se implementa un contrato, no se puede modificar. Esto permite a los usuarios asegurarse de que no se cambiarán las reglas por las cuales se operan sus fondos. Sin embargo, la misma característica hace que la creación de contratos inteligentes seguros sea extremadamente complicada. Si crea un contrato con un error o vulnerabilidad, estará ahí para siempre. Es por eso que las pruebas son aún más cruciales para los contratos inteligentes que para las aplicaciones tradicionales.

Relacionado: ¿Qué son los contratos inteligentes? Guía para principiantes

Por qué es necesario realizar pruebas

Primero, aclaremos qué problemas pueden y no pueden resolver las pruebas. Para este propósito, señalemos la siguiente diferencia entre errores y vulnerabilidades:

→ Si un problema lleva a que no se ejecute un escenario planificado, es un error.

→ Si un problema lleva a una ejecución no planificada, es una vulnerabilidad.

Las pruebas no previenen vulnerabilidades. Una vulnerabilidad es, por definición, algo no planificado, por lo que no puede tenerla en cuenta en la etapa de prueba. Para tratar las vulnerabilidades, necesita otras herramientas y acciones, que se describen al final de este artículo.

Las pruebas nos ayudan a asegurarnos de que todos los escenarios planificados se ejecuten según lo previsto. En otras palabras, las pruebas ayudan a prevenir errores. Este hecho tiene varias consecuencias importantes:

     Regla general: cada línea de lógica de negocios debe tener una prueba correspondiente. Si tiene un escenario en lógica empresarial, lo tendrá en el código, lo que significa que debe probarlo.

     Los escenarios más importantes deben ser probados más a fondo. Los escenarios que serán ejecutados por la mayoría de los usuarios o que implementarán funcionalidades críticas requieren atención adicional.

Las pruebas atrapan errores tontos. Incluso los desarrolladores experimentados cometen errores tontos y pueden ser muy peligrosos.

    Las pruebas son excelentes para casos extremos. ¿Qué pasa si un usuario intenta comprar tokens cero? ¿Qué pasa si el número de usuarios alcanza el límite? Deben considerarse estos casos, y la mejor solución para esta tarea es usar pruebas.

Debe tener una especificación detallada para su proyecto para crear pruebas. Discutamos este punto con más detalle.

Especificación

No puede probar un escenario planificado si no sabe lo que está planificado. Por lo tanto, debe crear una especificación.

Esto parece obvio, pero muchos equipos de blockchain rompen esta regla. Escriben un libro blanco, y después de eso, escriben inmediatamente el código. Esto puede y a menudo conduce a una implementación incorrecta de la funcionalidad deseada. En algún momento, el equipo puede llegar a la conclusión de que ellos mismos no entienden cómo quieren que se comporte el sistema. Además, la funcionalidad deseada podría no ser coherente y, por lo tanto, no se puede implementar.

Por lo tanto, una especificación es imprescindible. Esto nos lleva a una observación interesante: cuando comienzas a probar tu código, no solo obtienes pruebas. Tienes que mejorar todo tu procedimiento de desarrollo. Trabaja más de lo que esperaba, pero también se beneficia más.

Herramientas para probar

Las pruebas son una rama completamente separada del conocimiento, por lo que no las voy a cubrir en un artículo. Sin embargo, nombraré las primeras herramientas necesarias.

Para probar sus contratos inteligentes de manera fácil y correcta, necesitará un marco de prueba. Mis colegas recomiendan usar uno de los siguientes: Truffle, Embark o Etherlime.

Además, deberá medir la cobertura de la prueba. La cobertura de prueba es un porcentaje del código que está cubierto por las pruebas, por lo que una cobertura del 100% significa que cada instrucción de código de bytes se prueba. Sin embargo, esta es una situación ideal, no real. En la práctica, este número siempre será inferior a 100, dependiendo de cuántas pruebas cree. Estas son algunas de las herramientas más populares para medir la cobertura de prueba: cobertura de solidity-coverage and @0x/sol-coverage.

Relacionado: Lenguajes de programación utilizados en Blockchain, explicados

Expandiendo el contexto

Entonces, si la cobertura de prueba es del 95% y tengo pruebas para todas las funciones críticas, puedo considerar mi código seguro, ¿verdad? Pero la respuesta correcta es: «¡Incorrecto!» Las pruebas son solo uno de los procedimientos de seguridad necesarios.

Cuando comience a escribir su código, primero debe usar un linter para que el código sea claro y legible. Luego, necesita pruebas para asegurarse de que todos los escenarios planificados funcionen correctamente. Luego ejecuta herramientas de seguridad para encontrar vulnerabilidades estándar y fácilmente detectables. Después de eliminarlos del código, puede proceder a la auditoría externa del código. En cada etapa de desarrollo, el diseño del código será crucial para la seguridad, así como para la usabilidad.

Todos estos pasos tienen sus complicaciones, pero están más allá del alcance de este artículo.

Ivan Ivanitskiy es el director de análisis de SmartDec y coanfitrión del podcast Basic Block. Es experto en seguridad de aplicaciones, blockchain y contratos inteligentes. Ivan es un apasionado de Bitcoin y siente curiosidad por los contratos inteligentes.

Referencia: cointelegraph.com

Descargo de responsabilidad: InfoCoin no está afiliado con ninguna de las empresas mencionadas en este artículo y no es responsable de sus productos y/o servicios. Este comunicado de prensa es sólo para fines informativos, la información no constituye consejo de inversión o una oferta para invertir.

También te podría gustar...