WEB3DEV Español

Delia Viloria T
Delia Viloria T

Posted on

¿Cómo escribir un Contrato Inteligente en Ethereum usando Vyper?

Image description

Visión General

Para reducir la cantidad de gas requerida para ejecutar los contratos inteligentes, el código que se ejecuta en La Máquina Virtual de Ethereum (Ethereum Virtual Machine, EVM) debe ser extremadamente eficiente. No es deseable, especialmente en las micro transacciones, cuando un código ineficiente en un contrato, necesita un mayor precio de gas para ser ejecutado, haciendo que sea prohibitivamente costoso. Aquí es donde la utilidad de Vyper surge porque tiene similitudes sintácticas y lógicas como las de Python y Solidity, haciendo que sea una elección popular entre los autores de contratos inteligentes. En este tutorial, veremos cómo escribir un contrato inteligente de Ethereum usando Vyper.

¿Qué es Vyper?

Vyper es un lenguaje de programación relativamente nuevo, usado para escribir contratos inteligentes. Vyper apunta a la Máquina Virtual de Ethereum (EVM). Vyper tiene un sintaxis muy simple/inteligible y uno de los principios principales de Vyper es hacer que sea virtualmente imposible para los desarrolladores, crear códigos con programas engañosos.

¿Por qué Vyper?

Uno se preguntará por qué usar Vyper cuando ya tenemos Solidity como el lenguaje de programación principal para escribir contratos inteligentes. En un estudio realizado en el 2018, donde analizaron casi un millón de contratos inteligentes desplegados en Ethereum, se encontró que la mayoría de estos contratos tenían vulnerabilidades severas; los investigadores dividieron estos contratos en tres categorías para identificarlos mejor y rastrear vulnerabilidades:

  • Contratos Suicidas - Contratos inteligentes que direcciones arbitrarias pueden matar.
  • Contratos Avariciosos - Algunas veces, los contratos inteligentes pueden llegar a un punto donde son incapaces de soltar ether. Los contratos inteligentes en esta fase son llamados Contratos Avariciosos (Greedy Contracts)
  • Contratos Pródigos - Contratos inteligentes que pueden estar hechos para soltar ether a direcciones arbitrarias.

Estas vulnerabilidades son producidas en los contratos inteligentes a través del código, el cual es involuntario pero, sin importar las intenciones, el código indeseable puede llevar a una pérdida de fondos inesperada a los usuarios. Vyper intenta eliminar esto permitiendo a los usuarios construir códigos seguros y hacer difícil a los programadores escribir códigos malignos o escribir accidentalmente códigos vulnerables.

A continuación, estas son algunas de las características de Vyper:

  • Está tipeado fuertemente.
  • Tiene soporte para números enteros con signos y números decimales fijados con puntos.
  • Código pequeño y entendible como el de Python.
  • Tiene revisiones de Límites y de Desbordes (Bounds y Overflows)
  • Decidibilidad: con Vyper, es posible computar un límite preciso superior para cualquier función de llamada que consuma gas.
  • Soporte limitado para funciones puras: cualquier constante en Vyper no puede cambiar de estado.

Vyper vs Solidity:

Vyper intenta eliminar la posibilidad de escribir códigos inseguros omitiendo algunas de las características de Solidity. Es crucial para los desarrolladores que estén dispuestos a escribir contratos inteligentes en Vyper, que entiendan las características de Solidity, la cuales no están presentes en Vyper; las siguientes son las características de Solidity que Vyper omite:

  • Overflow
  • Arrays sin límites
  • Modificadores
  • Inherencia
  • Soporte de Asamblea

Vyper omite la mayoría de los paradigmas de los Objetos Orientados a la Programación, quizá requiere una nueva definición de paradigma para la programación de transacciones.

Obteniendo la red de pruebas ETH

Desplegaremos nuestro contrato en la testnet de Ropsten. Para comenzar, necesitarás la extensión de navegador de Metamask para crear una cartera ETH y algunos ETH de prueba, los cuales los puedes conseguir en la faucet de Ropsten. Necesitarás seleccionar la Red de Pruebas de Ropsten en tu cartera Metamask y copiar y pegar la dirección de la cartera en el campo para escribir en el faucet, luego haz clic en Send me test Ether.

Image description

Cómo escribir y desplegar un contrato inteligente en Vyper:

La forma más fácil para instalar Vyper en tu sistema es usando el administrador de paquetes PIP de Python. Vyper requiere Python 3.6 o mayor, instalado en tu sistema. Puedes revisar si Python está instalado o no escribiendo lo siguiente en tu terminal/cmd:

$ python --version
Enter fullscreen mode Exit fullscreen mode

Si la versión 3.6 o mayor no está instalado, puedes seguir las instrucciones en la Página de Descargas de la página oficial de Python.

Ahora, instalemos Vyper usando PIP. Escribe lo siguiente en tu terminal/cmd:

$ pip install vyper
Enter fullscreen mode Exit fullscreen mode

Si todo va bien, Vyper será instalado en tu sistema.

Puedes revisar si Vyper está instalado completamente o no, escribiendo lo siguiente en tu terminal/cmd:

$ vyper --version
Enter fullscreen mode Exit fullscreen mode

Ahora, abre tu editor de textos y haz un nuevo archivo Vyper llamado contract.vy (vy es la extensión de los archivos Vyper) y copia lo siguiente:

# @version ^0.2.0

greet: public(String[100])

@external
def __init__():
self.greet = "Hello World"
Enter fullscreen mode Exit fullscreen mode

Explicación del código de arriba:

  • Línea 1: Especifica la versión de Vyper, la cual este contrato está destinado a.
  • Línea 3: Declara un saludo público variable, el cual será almacenado en la blockchain, el tipo de dato de saludo es una cadena con una longitud máxima de la cadena de 100. -Línea 5-6: Marca nuestra función init como @external, esto quiere decir que sólo puede ser llamada a través de transacciones u otros contratos. Definir nuestra función __init__, con constructor de python llamado en la creación del objeto, inicializará el saludo variable.
  • Línea 7: Pasa una cadena a “Hello World” a nuestro saludo variable.

Ahora, ve a tu terminal/cmd y al cd dentro del directorio donde salvaste tu contrato y compila tu contrato Vyper escribiendo lo siguiente:

$ vyper contract.vy
Enter fullscreen mode Exit fullscreen mode
$ vyper -f abi contract.vy
Enter fullscreen mode Exit fullscreen mode

Si el contrato no tiene errores, será compilado a un código byte y api, el cual se verá similar a:

Image description

Ahora, vamos a desplegar nuestro contrato usando MyEtherWallet: https://www.myetherwallet.com/interface/deploy-contract

Conecta tu cartera Metamask con la plataforma MyEtherWallet y copia y pega el código Byte y ABI desde el terminal/cmd a sus respectivos campos, tipea el nombre del contrato y haz click en Sign Transaction, confirma la transacción desde Metamask.

Image description

Ahora que nuestro contrato está desplegado, vamos a interactuar con él. Ve a la sección Activity en tu plugin Metamask, haz clic en la última transacción (el cual desplegó el contrato), haz clic en el botón Etherscan desde la esquina derecha y luego copia la dirección del contrato.

Image description

Image description

Pega la dirección del contrato en la sección [Interact with Contract en MyEtherWallet[(https://www.myetherwallet.com/interface/interact-with-contract) junto al ABI, luego haz clic en continuar.

Selecciona la función desde la pestaña desplegable llamada Select an Item y haz click en greet. Verás el mensaje Hello World debajo de la sección Result.

Image description

Conclusión

Felicidades por desplegar tu primer contrato inteligente de Vyper, refiérete a la documentación oficial de Vyper para más información y un saludo a Jacques Wagener por reparar el compilador remoto del Plugin de Remix Vyper.

Suscríbete a nuestro boletín para más artículos y guías de Ethereum. Si tienes cualquier feedback, siéntete libre de comunicarte con nosotros a través de Twitter. Siempre puedes hablar con nosotros en nuestro servidor de la comunidad en Discord, que tienen algunos de los desarrolladores más geniales que conocerás :)

Este artículo fue escrito por Arpan Mondall y traducido por Delia Viloria T. Su original se puede leer aquí.

Sería genial escucharte en nuestro Discord, puedes contarnos tus ideas, comentarios, sugerencias y dejarnos saber lo que necesitas.
Si prefieres puedes escribirnos a @web3dev_eshttps://twitter.com/web3dev_es en Twitter.

Discussion (0)