¿Qué es un contrato inteligente?

Completado

Un contrato inteligente es un programa que se almacena dentro de una cadena de bloques. Los contratos inteligentes amplían la cadena de bloques de los datos al código y representan un contrato entre las partes. El contrato se codifica y, cuando se produce una acción, el código se ejecuta y proporciona una respuesta.

Todos los términos y condiciones de los contratos se definen mediante programación. Una definición especifica las reglas, los requisitos y las recompensas de los participantes en la cadena de bloques. También especifica cómo se transfieren los recursos digitales entre las partes. A cada contrato inteligente se le asigna una dirección de 20 bytes que lo identifica de forma única.

Los contratos inteligentes se ejecutan por sí solos, envían eventos que desencadenan transiciones de estado y llaman a funciones. Y, además, son ideales para la tecnología de cadena de bloques porque permiten a la gente que no se conoce hacer negocios de forma segura y sin intermediarios.

Los contratos inteligentes suelen usarse con Ethereum. Ethereum es la primera cadena de bloques programable del mundo. Permite definir contratos inteligentes para facilitar la transferencia de recursos digitales, como la criptomoneda Ether.

El lenguaje que se va a usar para escribir contratos es Solidity. Solidity es un sistema Turing completo; es decir, que puede escribir contratos complicados de una manera claramente definida y codificada.

Dado que cada transición de estado se registra y es inmutable, debe probar exhaustivamente el contrato antes de publicarlo en un entorno de producción. Las correcciones de errores pueden ser costosas e incluso provocar daños importantes en el sistema.

Los contratos inteligentes tienen estas propiedades y ventajas clave:

  • Transparencia: los usuarios de cadenas de bloques pueden leer los contratos inteligentes y acceder a ellos mediante las API.
  • Inmutabilidad: la ejecución de contratos inteligentes crea registros que no se pueden cambiar.
  • Distribución: los nodos de la red validan y comprueban la salida del contrato. Los estados del contrato pueden ser visibles públicamente. En algunos casos, incluso las variables "privadas" son visibles.

Casos de uso

Los contratos inteligentes pueden ser realmente útiles para muchos sectores y procesos. Analice los siguientes casos de uso.

Seguros: cuando se producen determinados eventos, los contratos inteligentes desencadenan automáticamente una notificación que simplifica el proceso de notificaciones. Después, para determinar el importe de indemnización que reciben los usuarios, los detalles de la notificación se pueden registrar en la cadena de bloques. Esta funcionalidad puede reducir los tiempos de procesamiento y los errores humanos.

Votaciones: los contratos inteligentes pueden ayudar a que los votos sean automáticos y transparentes. Cada contrato actúa como una votación, que representa la identidad de un votante. Dado que una cadena de bloques es inmutable, lo que significa que no se puede cambiar, los votos no se pueden alterar.

Cadenas de suministro: a medida que los elementos se mueven por la cadena de suministro, los contratos inteligentes pueden registrar la propiedad y confirmar quién es responsable de un producto en un momento dado. En cualquier fase, el contrato inteligente se puede usar para averiguar exactamente dónde deben estar los productos. Si alguna parte de la cadena de suministro no se entrega a tiempo, todos los demás partes sabrán dónde se produjo el problema.

Mantenimiento de registros: muchos sectores pueden usar contratos inteligentes para mejorar la velocidad y la seguridad del mantenimiento de los registros. La tecnología de cadena de bloques se puede usar para digitalizar registros y cifrarlos y almacenarlos de forma segura. Además, el acceso se puede canalizar para que solo los usuarios autorizados puedan acceder a los registros.

Posesión de propiedades: los contratos inteligentes pueden registrar quién es el propietario de la propiedad. Por tanto, son una manera rápida y rentable de registrar la propiedad. Los contratos inteligentes también pueden ayudar a facilitar la transferencia de la propiedad de forma oportuna y segura.

Herramientas para trabajar con contratos inteligentes

Muchas herramientas pueden ayudarlo desarrollar eficazmente contratos inteligentes. En las secciones siguientes se sugieren algunos entornos de desarrollo integrado (IDE), extensiones y marcos de trabajo que puede explorar.

IDE

  • Visual Studio Code: un editor de código que se ha redefinido y optimizado para compilar y depurar aplicaciones web y en la nube modernas. En este módulo, usamos Visual Studio Code para todos los ejercicios.
  • Remix: un compilador y un IDE basados en explorador que se pueden usar para compilar contratos Ethereum en el lenguaje Solidity y para depurar transacciones. Remix constituye una excelente manera de explorar contratos de ejemplo. Puede usarlo para escribir, probar e implementar sus propios contratos. En este módulo no usamos Remix, pero puede probarlo por su cuenta en los ejercicios de contratos.

Extensiones

  • Extensión de Truffle para VS Code: esta extensión puede simplificar la creación, compilación e implementación de contratos inteligentes en los libros de contabilidad de Ethereum. Esta extensión incluye la integración con Truffle, Ganache y más herramientas y servicios. En este módulo, usaremos esta extensión para escribir y probar contratos inteligentes.

Marcos de trabajo

  • Truffle Suite: use el conjunto de herramientas de Truffle para probar los contratos de Ethereum antes de implementarlos en los libros de contabilidad públicos e incurrir en costos reales. Para facilitar su trabajo como programador, desarrolle en un entorno local. El conjunto de herramientas incluye Truffle, Ganache y Drizzle. En este módulo, usaremos Truffle.
  • OpenZeppelin: use las herramientas de OpenZeppelin para escribir, implementar y usar aplicaciones descentralizadas. OpenZeppelin proporciona dos productos: la biblioteca de contratos y el SDK. En este módulo no usaremos OpenZeppelin, pero más adelante puede probarlo mientras escribe aplicaciones de cadenas de bloques seguras.