Introducción a los contratos inteligentes
¿Qué es un contrato inteligente?
Un "contrato inteligente" es básicament un programa que se ejecuta en la blockchain de Ethereum. Se trata de un grupo de código (sus funciones) y datos (su estado) que existe en una dirección específica en la blockchain de Ethereum.
Los contratos inteligentes son un tipo de cuenta de Ethereum. Esto significa que tienen un saldo y pueden enviar transacciones por la red. Sin embargo, no están controlados por un usuario, sino que están implementados en la red y se ejecutan como se hayan programado. Las cuentas de usuario pueden interactuar con un contrato inteligente enviando transacciones que ejecuten una función definida en el contrato inteligente. Los contratos inteligentes pueden definir reglas, como un contrato normal, y automáticamente se ejecutan a través del código.
Requisitos previos
Asegúrate de haber leído sobre las cuentas, transacciones y la máquina virtual de Ethereum antes de entrar en el mundo de los contratos inteligentes.
Una máquina expendedora digital
Tal vez la mejor metáfora para el contrato inteligente sea la de la máquina expendedora, según lo descrito por Nick Szabo. Con las entradas adecuadas, una cierta producción está garantizada.
Para obtener un snack de una máquina expendedora:
1dinero + selección del snack = obtención del snack2
Esta lógica está programada en la máquina expendedora.
Un contrato inteligente, como una máquina expendedora, tiene la lógica programada en él. A continuación incluimos un ejemplo que demuestra que la máquina expendedora podría parecerse al contrato inteligente:
1pragma solidity 0.6.11;23contrato VendingMachine {45 // Declarar las variables del estado del contrato6 address public owner;7 mapping (address => uint) public cupcakeBalances;89 // Cuando se implementa el contrato "VendingMachine":10 // 1. configurar la dirección de implantación como el propietario del contrato11 // 2. configurar el saldo de magdalenas del contrato inteligente implementado en 10012 constructor() public {13 owner = msg.sender;14 cupcakeBalances[address(this)] = 100;15 }1617 // Permitir que el propietario aumente el saldo de magdalenas del contrato inteligente18 function refill(uint amount) public {19 require(msg.sender == owner, "Only the owner can refill.");20 cupcakeBalances[address(this)] += amount;21 }2223 // Permitir que cualquier persona compre magdalenas24 function purchase(uint amount) public payable {25 require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");26 require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");27 cupcakeBalances[address(this)] -= amount;28 cupcakeBalances[msg.sender] += amount;29 }30}31Mostrar todoCopiar
Del mismo modo que una máquina expendedora elimina la necesidad de un empleado, los contratos inteligentes pueden sustituir los intermediarios en muchas industrias.
Sin permiso
Cualquiera puede escribir un contrato inteligente e implementarlo en la red. Solo tienes que aprender a programar en un lenguaje de contrato inteligente y tener una cantidad suficiente de ETH para implementar tu contrato. Implementar un contrato inteligente es técnicamente una transacción, así que necesitas pagar tu gas del mismo modo que necesitas pagar gas a cambio de realizar una simple transferencia de ETH. Sin embargo, los costes de gas para la implementación de contratos son mucho mayores.
Ethereum dispone de lenguajes cómodos para que los programadores puedan redactar contratos inteligentes:
- Solidity
- Vyper
Sin embargo, deben compilarse antes de implementarse para que la máquina virtual de Ethereum pueda interpretar y almacenar el contrato. Más información sobre la compilación
Capacidad de composición
Los contratos inteligentes son públicos en Ethereum y se pueden considerar API abiertas. Esto significa que puedes acceder a otros contratos inteligentes en su propio contrato inteligente para ampliar en gran medida lo que es posible. Los contratos pueden incluso implementar otros contratos.
Obtén más información sobre la composición de contratos inteligentes.
Limitaciónes
Los contratos inteligentes por sí solos no pueden obtener información sobre eventos "del mundo real" porque no pueden enviar solicitudes HTTP. Esto es así de manera predeterminada, ya que que confiar en información externa podría perjudicar al consenso, que es importante para la seguridad y la decentralización.
Hay maneras de eludir esto con ayuda de oráculos.
Recursos de contrato inteligente
Contratos de OpenZeppelin: **Bibliotecas para el desarrollo seguro de contratos inteligentes.**
DappSys: Bloques de construcción seguros, flexibles y sencillos para contratos inteligentes.
Más lectura
- Contratos Inteligentes: La tecnología de la blockchain que reemplazará a los abogadosBlockgeeks
- Prácticas recomendadas para el desarrollo de contratos inteligentes, 10 de noviembre de 2019, Yos Riady