WEB3DEV

Cover image for Como escrever um contrato inteligente Ethereum usando o Vyper
Fatima Lima
Fatima Lima

Posted on

Como escrever um contrato inteligente Ethereum usando o Vyper

Visão Geral

Para reduzir a quantidade de gas necessária para executar contratos inteligentes, o código que é executado na Máquina Virtual Ethereum (EVM) deve ser extremamente eficiente. Não é desejável, especialmente em microtransações, quando o código ineficiente em um contrato acaba exigindo um preço maior de gas para ser executado, tornando-o proibitivamente caro. É nesse ponto que o Vyper é útil, pois tem semelhanças sintáticas e lógicas com o Python e o Solidity, o que o torna uma escolha popular entre os autores de contratos inteligentes. Neste tutorial, vamos aprender a criar um contrato inteligente da Ethereum usando o Vyper.

O que é o Vyper?

O Vyper é uma linguagem de programação Phyton relativamente nova, usada para escrever contratos inteligentes. O Vyper tem como alvo a Máquina Virtual Ethereum (EVM). E tem uma sintaxe muito simples/inteligível; um dos principais princípios do Vyper é tornar praticamente impossível para os desenvolvedores codificar programas enganosos.

Por que o Vyper?

Alguém pode se perguntar por que usar o Vyper quando já temos o Solidity como a linguagem principal para escrever contratos inteligentes. Em um estudo conduzido em 2018, onde foram analisados quase um milhão de contratos inteligentes implantados na Ethereum, descobriu-se que muitos desses contratos tinham algumas vulnerabilidades graves; os pesquisadores dividiram esses contratos em três categorias para identificar e rastrear melhor as vulnerabilidades:

  • Contratos Suicidas — Contratos inteligentes que podem ser destruídos por endereços arbitrários.
  • Contratos Ambiciosos — Às vezes, os contratos inteligentes podem chegar a um estado em que não conseguem liberar ether. Os contratos inteligentes nessa fase são chamados de Contratos Ambiciosos.
  • Contratos Pródigos — Contratos inteligentes que podem ser feitos para liberar ether para endereços arbitrários.

Essas vulnerabilidades são produzidas nos contratos inteligentes por meio de código, o que não é intencional, mas, independentemente das intenções, o código indesejável pode resultar em perda inesperada de fundos para os usuários. O Vyper tenta eliminar isso permitindo que os usuários escrevam códigos seguros e dificultando que os programadores escrevam códigos enganosos ou vulneráveis acidentalmente.

Veja a seguir os recursos do Vyper:

  • É fortemente tipificado.
  • Tem suporte para números inteiros com sinal e números decimais de ponto fixo.
  • Código pequeno e compreensível como o Python.
  • Possui verificação de Bounds (limites) e Overflow.
  • Decidibilidade: Com o Vyper, é possível calcular um limite superior preciso para o consumo de gas de qualquer chamada de função.
  • Suporte limitado para funções puras: Qualquer constante no Vyper não pode mudar de estado.

Vyper vs Solidity:

O Vyper tenta eliminar a possibilidade de escrever código inseguro omitindo alguns dos recursos do Solidity. É fundamental que os desenvolvedores que desejam escrever contratos inteligentes no Vyper entendam os recursos do Solidity que o Vyper não tem; a seguir estão os recursos do Solidity que o Vyper omite:

  • Overflow
  • Arrays sem limite
  • Loops infinitos
  • Modificadores
  • Herança
  • Suporte do Assembly

O Vyper omite a maioria dos paradigmas de programação orientada a objetos - talvez seja necessária uma nova definição de paradigma para a programação transacional.

Obtendo ETH de testnet

Implantaremos nosso contrato na rede de teste da Ropsten. Para começar, você precisará da extensão do navegador da Metamask para criar uma carteira ETH e alguns ETH de teste, que você pode obter na faucet (torneira) Ropsten. Você precisará selecionar a Rede de Teste Ropsten em sua carteira Metamask e copiar e colar o endereço da carteira no campo de texto da faucet e, em seguida, clicar em Send me test Ether (Envie-me o Ether de teste).

Image description

Como escrever e implantar um contrato inteligente no Vyper:

A maneira mais fácil de instalar o Vyper em seu sistema é usando o gerenciador de pacotes PIP do Python. O Vyper requer o Python 3.6 ou superior instalado em seu sistema; você pode verificar se o Python está instalado ou não digitando o seguinte em seu terminal/cmd:

$ python --version
Enter fullscreen mode Exit fullscreen mode

Se uma versão a partir da 3.6 não estiver instalada, você pode seguir as instruções na Página de downloads do site oficial do Python.

Agora, vamos instalar o Vyper usando o PIP. Digite o seguinte em seu terminal/cmd:

$ pip install vyper
Enter fullscreen mode Exit fullscreen mode

Se tudo der certo, o Vyper será instalado em seu sistema.

Você pode verificar se o Vyper está completamente instalado ou não digitando o seguinte em seu terminal/cmd:

$ vyper --version
Enter fullscreen mode Exit fullscreen mode

Agora, abra o editor de texto e crie um novo arquivo Vyper contract.vy (vy é a extensão de arquivo do Vyper) e cole o seguinte:

# @version ^0.2.0

greet: public(String[100])

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

Explicação do código acima:

Linha 1: Especifica a versão do Vyper para a qual esse contrato se destina.

Linha 3: Declara uma variável pública greet, que será armazenada na blockchain. O tipo de dados da greet é uma string com um comprimento máximo de 100.

Linha 5-6: Marcar nossa função init como @external significa que ela só pode ser chamada por meio de transações ou outros contratos. Definindo nossa função init, um construtor phyton chamado na criação do objeto inicializará a variável greeting.

Linha 7: Passa uma string "Hello World" para nossa variável greet.

Agora, vá para o terminal/cmd e entre no diretório onde você salvou o contrato e compile seu contrato Vyper digitando o seguinte:

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

Se o contrato não tiver nenhum erro, ele será compilado em um bytecode e em uma API, que terá a seguinte aparência:

Image description

Agora, vamos implantar nosso contrato usando MyEtherWallet: https://www.myetherwallet.com/interface/deploy-contract

Conecte sua carteira Metamask com a plataforma MyEtherWallet e copie e cole o código Byte e a ABI do terminal/cmd nos respectivos campos, digite o nome do contrato e clique em Sign Transaction (Assinar transação). Confirme a transação da Metamask.

Image description

Agora que nosso contrato foi implantado, vamos interagir com ele. Vá para a seção Activity (Atividade) no plug-in Metamask, clique na última transação (que implantou o contrato), clique no botão Etherscan no canto superior direito e copie o endereço do contrato.

Image description

Image description

Cole o endereço do contrato na seção Interact with Contract na MyEtherWallet junto com a ABI. Em seguida clique em continue.

Selecione a função no menu suspenso Select an Item e clique em greet. Você verá a mensagem Hello World na seção Result.

Image description

Conclusão

Parabéns pela implementação de seu primeiro contrato com o Vyper; consulte a documentação oficial do Vyper para obter mais informações e envie uma mensagem para Jacques Wagener para corrigir o compilador remoto no plug-in Remix do Vyper.

Inscreva-se em nossa newsletter para mais artigos e guias sobre Ethereum. Se tiver algum comentário, sinta-se à vontade para entrar em contato conosco por meio do Twitter. Você sempre pode conversar conosco em nosso servidor na comunidade do Discord, que conta com alguns dos desenvolvedores mais legais que você já conheceu :)

Esse artigo foi escrito por Arpan Mondal e traduzido por Fátima Lima. O original pode ser lido aqui.

Latest comments (0)