SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
29.11.2024

Lição: 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 tipo string. 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 evento Transfer.

  • 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!

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!