Ayúdanos a actualizar esta página.

🌏

Disponemos de una nueva versión de esta página, pero solo está en inglés por ahora. Ayúdanos a traducir la última versión.

Esta página está incompleta y nos encantaría tu ayuda. Edita esta página y añade cualquier cosa que creas que pueda ser útil para otros.

Introducción a los contratos inteligentes

Última edición: , Invalid DateTime
Editar página

¿Qué es un contrato inteligente?

Un "contrato inteligente" es básicamente 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 snack
2

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;
2
3contrato VendingMachine {
4
5 // Declarar las variables del estado del contrato
6 address public owner;
7 mapping (address => uint) public cupcakeBalances;
8
9 // Cuando se implementa el contrato "VendingMachine":
10 // 1. configurar la dirección de implantación como el propietario del contrato
11 // 2. configurar el saldo de magdalenas del contrato inteligente implementado en 100
12 constructor() public {
13 owner = msg.sender;
14 cupcakeBalances[address(this)] = 100;
15 }
16
17 // Permitir que el propietario aumente el saldo de magdalenas del contrato inteligente
18 function refill(uint amount) public {
19 require(msg.sender == owner, "Only the owner can refill.");
20 cupcakeBalances[address(this)] += amount;
21 }
22
23 // Permitir que cualquier persona compre magdalenas
24 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}
31
Mostrar todo
📋 Copiar

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

Más sobre lenguajes

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.

Limitaciones

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 descentralizació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