Está en la página 1de 21

Universidad de La Serena

Facultad de Ciencias
Departamento de Matemáticas

Smart Contract
Conceptos fundamentales y caso de uso

Autor: Helio Rivera


Profesor: Manuel Yañez
La Serena Chile
i

Resumen
En el presente informe se exponen los conceptos fundamentales relacionados con la tecnologia
de contratos inteligentes (smart contract) con el objtivo de ofrecer un primer acercamiento a esta
potencial invencion tecnológica. Luego de esto se presenta un caso de uso referido a implementación
de contrato inteligente para la gestion de un fondo de inversion de criptomoneda helio coin (HC).
Este documento describe todos los elementos necesarios para poder replicar el caso de uso con la
intencion de proporcionar las bases sobre las cuales se sustenta el concepto de Smart Contract. Este
informe ha de tomarse como la continuacion de un informe anterior titulado ’informe block chain’ (del
mismo autor de este documento) el cual presenta los conceptos basicos que hay detras de Block chain
el cual es la piedra angular que sirve de soporte para hacer posible la implementacion de los contratos
inteligentes. En relación al caso de uso que aquí se presenta se debe decir que la implementacion del
contrato corre en una blockchain local. y la interfaz de comunicación con dicha block chain se accese
mediante un navegador web cualquiera.

Smart Contract - Comunicacion de datos y redes II


Índice de Contenidos ii

Índice de Contenidos
1. Smart Contract 1
1.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Definición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.4. Campos de aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.5. Seguridad de los Smart Contracts . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.5.1. Block Chain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2. Un caso de uso 3
2.1. Que usaremos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2. Que es Ethereum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.3. Que es Ganache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.4. Que es MyEtherWallet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.5. Que es Solidity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.6. Implementación del contrato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.7. El proceso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.7.1. Agregando una red/nodo personalizado a myetherwallet . . . . . . . . . . . 7
2.7.2. Desplegando el contrato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.7.3. Interactuando con el contrato . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Referencias 17

Índice de Figuras
1. Ethereum (ETH). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. www.trufflesuite.com/ganache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. La billetera para ethereum. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4. Logo Solidity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
5. IDE solidity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
6. Interfaz myetherwallet para perzonalizar un nodo. . . . . . . . . . . . . . . . . . . . . 7
7. Byte code del contrato programado con solidity. . . . . . . . . . . . . . . . . . . . . . . 8
8. Byte code requerido para la obtencion del contrato programado con solidity. . . . . . . 8
9. Clave privada de aquel que desplegara el contrato en la cadena de bloques. . . . . . . . 9
10. Ingreso de clave privada de quien despliega el contrato en la red Ethereum. . . . . . . 9
11. Creación del contrato en la cadena de bloques. . . . . . . . . . . . . . . . . . . . . . . 9
12. Dirección que crea el contrato en la cadena. . . . . . . . . . . . . . . . . . . . . . . . . 10
13. Bloque minado que contiene el contrato inteligente. . . . . . . . . . . . . . . . . . . . . 10
14. Verificacion de que dicho bloque contiene un contrato inteligente. . . . . . . . . . . . . 10
15. Interfaz para interactuar con el contrato inteligente . . . . . . . . . . . . . . . . . . . . 11
16. Verificando la creación del contrato en la blockchain de ganache. . . . . . . . . . . . . 11
17. Obteniendo la dirección del contrato inteligente. . . . . . . . . . . . . . . . . . . . . . . 12
18. Chekeando la dirección del contrato inteligente. . . . . . . . . . . . . . . . . . . . . . . 12

Smart Contract - Comunicacion de datos y redes II


Índice de Códigos iii

19. Datos para la creación de la interfaz de comunicación con la block chain. Estos se
obtienen desde el editor del contrato inteligente para solidity. . . . . . . . . . . . . . . 13
20. Métodos disponibles para la interacción con el contrato. . . . . . . . . . . . . . . . . . 13
21. Compra de un HC (heliocoin). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
22. Ingresando datos para comprar HC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
23. Confirmación de la compra. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
24. Compra de HC (heliocoin). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
25. Verificación de compra en la cadena de bloques. . . . . . . . . . . . . . . . . . . . . . . 16

Índice de Códigos
1. Contrato Inteligente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

Smart Contract - Comunicacion de datos y redes II


Smart Contract 1

1. Smart Contract
1.1. Introducción
¿Cuál es el significado y propósito de la seguridad? de alguna manera u otra la respuesta a esta
pregunta deberia incluir el concepto de relacion. Dichas relaciones son fundamentalmente inportantes
tanto entre las organizaciones, las personas y por que no decirlo, en los sistemas informáticos. Una
idea importante que surge a partir de nuestra reflexión en torno a la seguridad es que la formali-
zacion de dichas relaciones proporcionan un plan ideal para la seguridad. Una de estas formas de
formalización de relaciones es justamente el concepto de contrato.
Muchos tipos de cláusulas contractuales (como garantías, fianzas, delineación de derechos de propie-
dad, etc.) pueden integrarse en el hardware y el software con los que tratamos, de tal manera que el
incumplimiento del contrato sea costoso (si se desea, a veces prohibitivamente) para el infractor. Un
ejemplo canónico de la vida real, que podríamos considerar como el antepasado primitivo de los con-
tratos inteligentes, es la humilde máquina expendedora. Dentro de una cantidad limitada de pérdida
potencial (la cantidad en la caja debe ser menor que el costo de violar el mecanismo), la máquina
recibe monedas, y a través de un mecanismo simple, que hace que un problema de informática de
primer año en el diseño con autómatas finitos, dispense el cambio y el producto de acuerdo con el
precio mostrado. La máquina expendedora es un contrato con el portador: cualquier persona con mo-
nedas puede participar en un intercambio con el vendedor. La caja de seguridad y otros mecanismos
de seguridad protegen las monedas y el contenido almacenados de los atacantes, lo suficiente como
para permitir el despliegue rentable de máquinas expendedoras en una amplia variedad de áreas. Los
contratos inteligentes van más allá de la máquina expendedora al proponer incrustar contratos en to-
do tipo de propiedades que son valiosas y controladas por medios digitales. Los contratos inteligentes
hacen referencia a esa propiedad en una forma dinámica, a menudo aplicada de manera proactiva,
y proporcionan una observación y verificación mucho mejores cuando las medidas proactivas deben
quedarse cortas.

1.2. Definición
Un contrato inteligente (en inglés Smart contract) es un programa informático que facilita, ase-
gura, hace cumplir y ejecuta acuerdos registrados entre dos o más partes (por ejemplo personas u
organizaciones). Dicho programa ejecuta un contrato automático el cual funciona como una senten-
cia if-then (si-entonces) de cualquier otro programa de ordenador. Un programa de ordenador y un
programa de contrato inteligente se diferencian entre otras cosas en que este último interactua con
activos reales (bienes y servicios). Lo que dota de seguridad a un smart contract es que este mismo
se encuentra alogado en una blockchain.

1.3. Objetivo
Entre sus objetivos primordiales se tiene el brindar una seguridad superior a la ley de contrato
tradicional y reducir costos de transacción asociados a la contratación.Donde dichos costos son re-
cibidos por intermediarios que intervienen en dicha transacción. Por lo general este intermediario es
una organización centralizada. La transferencia de valor digital mediante un sistema que no requie-
re confianza (o sea, se cambia la confianza centralizada por aquella que es descentralizada) abre la
puerta a nuevas aplicaciones que pueden hacer uso de los contratos inteligentes.

Smart Contract - Comunicacion de datos y redes II


Smart Contract 2

1.4. Campos de aplicación


Se podrían realizar en cualquier transacción que requiera un acuerdo registrado entre partes,
como, por ejemplo, la contratación de productos financieros o de seguros, los depósitos en garantía,
las operaciones de compra y venta instrumentos financieros en los mercados bursátiles, de préstamos
sindicados, compra venta de regalías.

1.5. Seguridad de los Smart Contracts


1.5.1. Block Chain
Si hemos venido hablando de seguridad a lo largo de este informe en relación a la tecnología smart
contract, nos preguntamos entonces que es lo que hace tan seguros a estos instrumentos digitales.
Pues bien, esto se debe a la tecnologia blockchain.
Una blockchain no es otra cosa que Una base de datos que cuenta con las siguientes caracterízticas:

1. Una base de datos distribuida.

2. Cuenta con protección criptográfica.

3. Se organiza en bloques de transacciones matemáticamente relacionadas entre sí.

4. Cuenta con un mecanismo de consenso entre los participantes, el cual garantiza la confia-
bilidad de la información que se encuentra grabada en la cadena de bloques. El consenso es
precisamente la clave de un sistema blockchain porque es el fundamento que permite que todos
los participantes en el mismo puedan confiar en la información que se encuentra grabada en él.
Se trata de un aspecto con un potencial increíble para transformar una infinidad de sectores
clave de la industria y no menos de la sociedad en la que vivimos, de tal modo que podría llegar
a cambiar incluso nuestra forma de entender el mundo. Desde un punto de vista técnico, ese
sistema basado en la confianza y el consenso se construye a partir de una red global de
ordenadores que gestionan una gigantesca base de datos.

Dicho de otra forma es una base de datos descentralizada que no puede ser alterada.

Smart Contract - Comunicacion de datos y redes II


Un caso de uso 3

2. Un caso de uso
2.1. Que usaremos
A continuación presentaremos las tecnologías que haran posible la interación con un contrato
inteligente almacenado en una cadena de bloques.
1. Ethereum.
2. Truffle Suite (ganache)
3. MyetherWallet.com
4. Solidity

2.2. Que es Ethereum


Ethereum es una plataforma open source, que sirve para programar contratos inteligentes. La
plataforma es descentralizada a diferencia de otras cadenas de bloques. Es programable, lo que
significa que los desarrolladores pueden usarlo para crear nuevos tipos de aplicaciones descentralizadas
(dapps). Si bien es cierto que tanto las dapps como los contratos inteligentes pueden ser construidas
sobre ethereum y compartir similitudes, les separan algunas diferencias importantes entre ellos. En
este documento solamente cubriremos los smart contract.

Figura 1: Ethereum (ETH).

2.3. Que es Ganache


Como lo dice la página su página web, Ganache permite activar rápidamente una cadena de
bloques Ethereum personal que se puede usar para ejecutar pruebas, ejecutar comandos e inspeccionar
el estado mientras se controla el funcionamiento de la cadena. Actúa como una Blockchain local para
implementar y probar su funcionalidad localmente.

Figura 2: www.trufflesuite.com/ganache.

Smart Contract - Comunicacion de datos y redes II


Un caso de uso 4

2.4. Que es MyEtherWallet


MyEtherWallet es un servicio gratuito el cual constituye una interfaz entre un determinado na-
vegador y la blockchain de Ethereum. corresponde a la billetera para Ethereum y tokens ERC-20.
conocida popularmente como MEW, es una web en la cual podemos crear un monedero online para
guardar nuestras criptos sin necesidad de descargarnos la totalidad o parte de la Blockchain.

Figura 3: La billetera para ethereum.

2.5. Que es Solidity


Solidity es un lenguaje de programación orientado a objetos para escribir contratos inteligentes.
Se utiliza para implementar contratos inteligentes en varias plataformas blockchain. Fue desarrollado
por Christian Reitwiessner, Alex Beregszaszi y varios de los principales excolaboradores de Ethereum
para poder escribir contratos inteligentes en plataformas blockchain como Ethereum.
Está diseñado en torno a la sintaxis ECMAScript. La diferencia con este último, es que tiene tipos
de retorno de tipo estático y variable. Los contratos admiten herencia, incluyendo herencia múltiple
Linealización de superclase C3 . Además tiene una interfaz binaria de aplicación (ABI) que facilita
múltiples funciones de seguridad de tipos dentro de un solo contrato (más tarde soportada por
Serpent). También incluye un sistema de documentación para especificar una descripción centrada
en el usuario de las ramificaciones de una llamada a un método, conocido como .Especificación del
lenguaje natural".
Solidity es un lenguaje de programación influido por C++, Python y JavaScript que permite crear
contratos compuestos por funciones que, una vez compilados para la EVM, se almacenan en la cadena
de bloques, identificados por una dirección («hash»).
Solidity es un lenguaje de alto nivel orientado a contratos. Su sintaxis es similar a la de JavaScript
y está enfocado específicamente a la Máquina Virtual de Etehreum (EVM). Solidity está tipado de
manera estática y acepta, entre otras cosas, herencias, librerías y tipos complejos definidos por el
usuario.

Figura 4: Logo Solidity.

Smart Contract - Comunicacion de datos y redes II


Un caso de uso 5

2.6. Implementación del contrato


En esta sección implementaremos un contrato inteligente que tiene como función la gestión de
una nueva criptomoneda llamada heliocoin (HC). La idea es que los inversores que se interesen en
esta cripto, puedan interactuar con ella mediante un contrato inteligente. Para la implementación
usaremos el lenguaje de programación solidity. Se puede programar haciendo uso del IDE de solidity
(Figura 5) mediante un navegador web sin la necesidad de realizar una instalación local del lenguaje.
para ello dirígase a la siguiente página web: https://remix.ethereum.org.
El contrato que se construyó contempla las siguientes fincionalidades.
• El contrato administra una cuenta de inversíon con un valor máximo de 1000000 de HC.
• tasa de conversion USD a HC.
• El contrato proporciona el numero total de HC comprados por los inversionistas.
• El contrato proporciona el capital invertido de un determinado inversionista ya sea en HC o en
USD.
• El contrato chequea si un inversionista puede comprar tokens.
• El contrato gestiona la compra y venta de tokens HC.
• El contrato proporciona el capital obtenido por un inversionista ya sea en USD o en HC.

Código 1: Contrato Inteligente.


1 //SPDX-License-Identifier:UNLICENSED
2

3 // version del compilador


4 pragma solidity ^0.8.7;
5

6 //hc corresponde a la criptomoneda heliocoin


7

8 contract helio_coin_ico {
9 //introduciendo el numero de maximo de helio coin a la venta
10 uint public max_hc = 1000000;
11

12 //tasa de conversion USD a HC


13 uint public usd_to_hc = 1000;
14

15 // numero total de hc comprados por los inversionistas


16 uint public total_hc_bought = 0;
17

18 //mapeo de direccion de inversionista a activos en hc y USD


19 mapping(address=>uint)equity_hc;
20

21 mapping(address=>uint)equity_usd;
22

23 //chequeando si inversionista puede comprar tokens


24 modifier can_buy_hc(uint usd_invested){
25 require (usd_invested * usd_to_hc + total_hc_bought <= max_hc);

Smart Contract - Comunicacion de datos y redes II


Un caso de uso 6

26 _;
27 }
28

29 //obteniendo capital obtenido en tokens


30 function equity_in_hc(address investor) external view returns(uint){
31 return equity_hc[investor];
32 }
33

34 //obteniendo capital obtenido en USD


35 function equity_in_usd(address investor) external view returns(uint){
36 return equity_usd[investor];
37 }
38

39 //comprando tokens
40 function buy_hc(address investor, uint usd_invested)external can_buy_hc(usd_invested){
41

42 uint hc_bought = usd_invested * usd_to_hc;


43

44 equity_hc[investor] += hc_bought;
45

46 equity_usd[investor] = equity_hc[investor]/1000;
47

48 total_hc_bought += hc_bought;
49

50 }
51

52 function sell_hc(address investor, uint hc_sold)external {


53

54 equity_hc[investor] -= hc_sold;
55

56 equity_usd[investor] = equity_hc[investor]/1000;
57

58 total_hc_bought -= hc_sold;
59

60 }
61 }

Smart Contract - Comunicacion de datos y redes II


Un caso de uso 7

Figura 5: IDE solidity.

2.7. El proceso
2.7.1. Agregando una red/nodo personalizado a myetherwallet
Cada númeoro en la figura 6 indica la secuencia a seguir para realizar este primer paso.

Figura 6: Interfaz myetherwallet para perzonalizar un nodo.

2.7.2. Desplegando el contrato


En esta segunda etapa ya debemos tener escrito y compilado nuestro contrato inteligente en soli-
dity. como se aprecia en la figura 7, es necesario obtener el código de bytes que genera la compilación
dl código. Ya que este es necesario para desplegarlo en la cadena block chain.

Smart Contract - Comunicacion de datos y redes II


Un caso de uso 8

Figura 7: Byte code del contrato programado con solidity.

Ahora dicho Byte code se ingresa en el deploy contract de myetherwallet.

Figura 8: Byte code requerido para la obtencion del contrato programado con
solidity.

Además del Byte code, es necesaria la clave privada del nodo de la red blockchain que desplegará
el contrato inteligente en la red. En la figura 9 se ve que la clave privada se puede obtener desde
ganache. La figura 10 indica en donde hay que ingresar dicha clave en myetherwallet.

Smart Contract - Comunicacion de datos y redes II


Un caso de uso 9

Figura 9: Clave privada de aquel que desplegara el contrato en la cadena de blo-


ques.

Figura 10: Ingreso de clave privada de quien despliega el contrato en la red Ethe-
reum.

Figura 11: Creación del contrato en la cadena de bloques.

A estas alturas podemos ir a verificar la cadena de bloques en ganache y veremos que se ha


producido un nuevo minado.

Smart Contract - Comunicacion de datos y redes II


Un caso de uso 10

Figura 12: Dirección que crea el contrato en la cadena.

Figura 13: Bloque minado que contiene el contrato inteligente.

Figura 14: Verificacion de que dicho bloque contiene un contrato inteligente.

Smart Contract - Comunicacion de datos y redes II


Un caso de uso 11

2.7.3. Interactuando con el contrato


Una vez teniendo el contrato desplegado en nuestra cadena de bloques, estamos en condiciones
de interactuar con dicho contrato. Para ello nos dirigimos a la sección ’interact with contract’ en
myetherwallet e ingresamos los datos que se muestran en la figura 15 . Estos datos son:
• La dirección del contrato inteligente. Esta se ectrae desde ganache como se muestra en la figura
17.
• la interfaz de comunicación con el contrato para que este pueda ser accedido desde myether-
wallet. Esta interfaz en realidad esta representada en un archivo en formato JSON el cual es
obtenido desde el editor solidity una vez que se ha compilado el contrato como se muestra en
la figura 19.

Figura 15: Interfaz para interactuar con el contrato inteligente

Figura 16: Verificando la creación del contrato en la blockchain de ganache.

Smart Contract - Comunicacion de datos y redes II


Un caso de uso 12

Figura 17: Obteniendo la dirección del contrato inteligente.

Figura 18: Chekeando la dirección del contrato inteligente.

Smart Contract - Comunicacion de datos y redes II


Un caso de uso 13

Figura 19: Datos para la creación de la interfaz de comunicación con la block


chain. Estos se obtienen desde el editor del contrato inteligente para solidity.

Ahora que la interfaz ya se encuetra definida para la direccion del contrato que se proporcionó
anteriormente, estamos en pie para realizar las consultas disponibles sobre este como se muestra en
la figura 20.
Desde la figura 21 hasta la figura hasta la figura 24 se observa el procedimiento realizado para la
compra de hc (heliocoin) haciendo uso del contrato inteligente implemnetado.

Figura 20: Métodos disponibles para la interacción con el contrato.

Smart Contract - Comunicacion de datos y redes II


Un caso de uso 14

Figura 21: Compra de un HC (heliocoin).

Figura 22: Ingresando datos para comprar HC.

Smart Contract - Comunicacion de datos y redes II


Un caso de uso 15

Figura 23: Confirmación de la compra.

Figura 24: Compra de HC (heliocoin).

Si volvemos a ganache podremos confirmar que se ha obtenido un nuevo bloque en la cadena el


cual representa la compra realizada como aparece en la figura 25.

Smart Contract - Comunicacion de datos y redes II


Un caso de uso 16

Figura 25: Verificación de compra en la cadena de bloques.

Smart Contract - Comunicacion de datos y redes II


Referencias 17

Referencias

Smart Contract - Comunicacion de datos y redes II

También podría gustarte