12

Qué son Smart Contracts y cómo crearlos

7422Puntos

hace 7 años

El término Smart Contract o contrato inteligente se refiere a una pieza de código -software-, que se encarga de hacer cumplir un trato bajo ciertas condiciones, es similar a lo que sería un contrato físico en papel.

contract.jpg

Un contrato inteligente trae múltiples beneficios, como: reducción de costos, mayor credibilidad ante ciertos contratos y descentralización en la toma de decisiones con respecto a qué debe hacer o no el contrato y la ejecución del mismo, esto último al no haber un humano interviniendo en el proceso de ejecución del contrato, lo que hace que sea a prueba de muchos fallos humanos causados por la interpretación errada del contrato o corrupción.

Cabe destacar que un humano debe intervenir en la creación del contrato así que en ese paso podrían omitirse algunos errores a la hora de codificar el contrato, causando que un contrato inteligente falle si el código no se hace de manera correcta.

Historia de los contratos inteligentes

El término “Smart Contracts” fue creado por Nick Szabo en la década de los 90, pero por muchos años fue solamente una teoría. Hasta que en 2009 aparece una implementación de Blockchain. Bitcoin fue el inicio de la aplicación real de los contratos inteligentes ya que cada transacción dentro del Blockchain de Bitcoin ejecuta un script, siendo ese script un contrato inteligente donde quedan codificados los términos para realizar una transacción financiera entre dos o más partes.

Pero no fue hasta la creación de Ethereum cuando se masificó el término de contratos inteligentes, Ethereum facilitó la creación y despliegue de contratos inteligentes en una cadena de bloques.

Aplicaciones de un contrato inteligente

Un contrato inteligente podría tener las mismas aplicaciones que un contrato normal, hay muchos aspectos legales y técnicos que quedan por resolver, generando grandes oportunidades de emprendimiento para todos.

Por ahora la mayoría de las aplicaciones de un contrato inteligente son financieras.

Solidity

Ethereum nace con una máquina virtual llamada EVM (Ethereum Virtual Machine), esta máquina virtual ejecuta bytecode tal como lo hacen otras máquinas virtuales como la de Java. La JVM no ejecuta Java, ejecuta un código bytecode que se genera compilando los archivos de Java a bytecode.

Con este contexto nace Solidity que es un lenguaje muy parecido a JavaScript pero 100% enfocado en creación de contratos inteligentes. El compilador toma este lenguaje y lo convierte a bytecode para que luego la EVM lo ejecute.

Para efectos de este post vamos a utilizar una herramienta online llamada Remix que nos permite escribir, desplegar e interactuar con un contrato inteligente usando el navegador.

Screenshot from 2017-08-31 15-40-08.png

La imagen muestra la interfaz de Remix, es muy similar a la interfaz de un IDE, el compilador ya está incluido dentro de la interfaz.

Por ahora no hay que preocuparse por entender todo el código, pero explicaré lo más importante del mismo.

Estructura de un archivo de Solidity

pragmasolidity ^0.4.0;

La primera línea de cada archivo debe contener la versión de Solidity que va a ser utilizada para compilar el contrato. En este caso se indica que es la versión 0.4.0 o superior.

contractBallot { }

Todo contrato debe ser identificado con la palabra clave contract similar a lo que sería class, un contrato básicamente es una clase con campos y métodos.

address chairperson;

Esto es el ejemplo de un campo del contrato, una variable que es visible en todo el contrato.

struct Voter {
    uint weight;bool voted;
    uint8 vote;address delegate;
}

Dentro de un contrato pueden existir tipos de datos más complejos como struct, similar a un objeto.

function Ballot(uint8 _numProposals) {
    chairperson = msg.sender;
    voters[chairperson].weight = 1;
    proposals.length = _numProposals;
}

Una función se define con la palabra clave function y puede recibir métodos. Es importante mencionar que toda variable en Solidity debe llevar su tipo de dato.

Ballot como contrato inteligente

Este es un contrato demo que permite votar propuestas. Una propuesta básicamente es un índice, se indica cuántas propuestas hay y uno vota a través del blockchain por la propuesta 1, 2, 3 o la que desee, siempre y cuando esté definida.

function vote(uint8 proposal) {
     Voter storage sender = voters[msg.sender];if (sender.voted || proposal >= proposals.length) return;
    sender.voted = true;
    sender.vote = proposal;
    proposals[proposal].voteCount += sender.weight;
}

Esa es la función que hace la magia para votar. Básicamente recibe un entero que indica el número de la propuesta, verifica que la propuesta si exista y luego almacena el voto.

msg es una estructura que tiene información de la transacción que hizo posible el voto. Toda interacción para escribir información en un contrato se hace a través de una transacción que tiene un costo en Ether a través de algo llamado Gas que indica el costo que va a tener esa transacción para escribir ese cambio en la red.

Imagina el Gas como combustible. Para ir de un punto X a un punto Y de la ciudad en un auto, el auto necesita combustible. Digamos que el auto consume 1 galón de gasolina, entonces básicamente ese es el costo de transportarte hacia ese lugar.

En el caso de un contrato inteligente cada acción en el código tiene un costo y el total del bloque de código que se ejecuta tiene un costo expresado en Gas. El Gas es la gasolina que hace que tu contrato inteligente pueda ser ejecutado en la red de Ethereum.

Desplegando el contrato inteligente

create.png

Para hacer despliegue del contrato primero debemos llenar la información que requiere el contrato para ser creado. En el campo de texto se debe introducir el número de propuestas que queremos poner a votación y luego hacer clic en el botón rosado que dice “Create” -sí, está incompleto-.

Como estás usando Remix, la creación es rápida y no entra en el blockchain de producción, aunque si puedes hacer deploy desde allí a producción.

Luego de haberse creado saldrán los botones azules y rosados de abajo.

vote.png

Ahora podemos votar por la propuesta que nos guste, en este caso voté por la número 2.

result.png

Si hago clic en winningProposal me indica cual es la propuesta ganadora, en este caso por unanimidad es la propuesta número 2.

De esta manera ya ejecutamos un contrato inteligente fácilmente con esta interfaz 😄

Conclusión

Hacer un contrato técnicamente no es difícil pero tiene ciertas implicaciones que hacen que un contrato pueda ser más complejo que otros. Se debe tener cuidado porque acá cada ejecución tiene un costo en dinero, por eso te invito a aprender más del tema y también a que aprendas términos comunes que se utilizan en esta industria para que puedas crear contratos inteligentes seguros.

Me puedes dejar preguntas sobre esto en la sección de comentarios.

Fuente del Open Graph: https://www.draglet.com/blockchain-applications/smart-contracts

Yohan
Yohan
yograterol

7422Puntos

hace 7 años

Todas sus entradas
Escribe tu comentario
+ 2