Aula 178: Escrevendo Contratos em Vyper
Nesta aula, vamos explorar o Vyper, uma linguagem com estilo Python para escrever contratos inteligentes na blockchain Ethereum. Vyper foi projetado com a intenção de oferecer uma alternativa mais segura e facilmente auditável ao Solidity. Ele enfatiza a simplicidade e a segurança, tornando-o uma excelente escolha para desenvolvedores que desejam escrever contratos inteligentes confiáveis.
Começando com Vyper
Antes de começarmos a escrever contratos, certifique-se de que você possui o Vyper instalado. Você pode instalá-lo através do pip:
pip install vyper
Uma vez instalado, você pode verificar a versão usando:
vyper --version
Agora, vamos criar um contrato inteligente simples usando Vyper.
Exemplo 1: Contrato Hello World
O seguinte é um contrato básico "Hello World" escrito em Vyper. Este contrato permite que você armazene e recupere uma mensagem de saudação.
# HelloWorld.vy
# Armazena a mensagem de saudação
greeting: public(string)
@public
@constant
def get_greeting() -> string:
return self.greeting
@public
def set_greeting(new_greeting: string):
self.greeting = new_greeting
Explicação:
-
Variável de Estado:
greeting
é uma variável de estado pública do tipostring
. O Vyper cria automaticamente uma função getter para variáveis de estado públicas. -
get_greeting: Esta função é uma função constante que retorna o valor atual da
greeting
. -
set_greeting: Esta função pública nos permite definir uma nova mensagem de saudação.
Para compilar este contrato, execute:
vyper HelloWorld.vy
Exemplo 2: Contrato Simples de Token
A seguir, vamos dar uma olhada em um exemplo mais complexo: um contrato simples de token.
# SimpleToken.vy
# Mapeamento de saldo de tokens
balances: public(map(address, uint256))
# Suprimento total de tokens
total_supply: public(uint256)
# Evento emitido quando tokens são transferidos
event Transfer:
sender: indexed(address)
receiver: indexed(address)
amount: uint256
@public
def __init__(amount: uint256):
self.total_supply = amount
self.balances[msg.sender] = amount
@public
def transfer(receiver: address, amount: uint256) -> bool:
assert self.balances[msg.sender] >= amount, "Saldo insuficiente"
self.balances[msg.sender] -= amount
self.balances[receiver] += amount
log Transfer(msg.sender, receiver, amount)
return True
@public
@constant
def balance_of(owner: address) -> uint256:
return self.balances[owner]
Explicação:
-
Mapeamento de Saldos: Um mapeamento público chamado
balances
que relaciona cada endereço a um saldo de tokens. -
Suprimento Total: A variável pública
total_supply
indica a quantidade total de tokens existentes. -
Evento: O evento
Transfer
é emitido sempre que tokens são transferidos. -
Construtor: A função
__init__
inicializa o contrato com um suprimento total de tokens, atribuindo todos os tokens ao endereço do criador. -
Função de Transferência: A função
transfer
permite que os usuários enviem tokens para outro endereço e emite um eventoTransfer
. -
Verificação de Saldo: A função
balance_of
retorna o saldo de tokens de um endereço especificado.
Para compilar e implantar este contrato, você usaria os mesmos comandos do Vyper que mencionamos anteriormente.
Conclusão
O Vyper é uma opção robusta para escrever contratos inteligentes com foco na segurança e simplicidade. Nesta aula, cobrimos os fundamentos da escrita de contratos em Vyper, desde conceitos simples a funcionalidades mais complexas, como a gestão de tokens.
À medida que você continua aprendendo e desenvolvendo em Vyper, busque criar contratos que não sejam apenas funcionais, mas também seguros e fáceis de auditar. Boa codificação!