O artigo a seguir foi escrito por Dione Bastos.
O mercado web3 tem uma alta demanda para desenvolvedores de contratos inteligentes, dentre as tecnologias mais buscadas temos o Solidity que é a linguagem utilizada para criação de smart contracts com o blockchain Ethereum.
Só que o solidity não é a única linguagem para criar contratos na EVM (Máquina Virtual Ethereum), também podemos escrevê-los utilizando o Vyper que possui uma sintaxe muito semelhante ao Python.
Lembrando que ambas são linguagens de alto nível e necessitam de um compilador que transformará nosso contrato em um bytecode que a EVM consiga entender.
O vyper ainda não é tão popular pelo fato de ser uma linguagem relativamente nova, também não possui tantos recursos como o solidity, mas isso não quer dizer que o vyper é pior que o solidity, na verdade, isso é proposital. O objetivo do vyper é ser uma linguagem menos complexa e mais segura para contratos inteligentes, dificultando a escrita de códigos fraudulentos ou vulneráveis por acidente.
De fato, as três principais características do vyper, são:
- Simplicidade;
- Segurança;
- Auditabilidade.
Agora que você conhece um pouco do vyper, vamos codar...
Nesse tutorial irei utilizar o Remix IDE, que irá me ajudar a implantar o contrato de forma mais rápida e prática, você também pode utilizar alguma outra ferramenta de desenvolvimento local (visual estúdio, Atom, VI, etc), para escrever contratos com o vyper.
Repare que o remix já inicia com 3 contratos simples, você pode apaga-los.
Na pasta contracts
, crie um arquivo com nome MyContract.vy
. Este será o arquivo do nosso contrato. A extensão 'vy' identifica que o contrato utiliza a linguagem vyper.
Em seguida cole o seguinte comando no seu arquivo MyContract.vy
, que irei explicar em detalhes.
userName: public(String[100])
@external
def __init__(name: String[100]):
self.userName = name
@view
@external
def getUserName() -> String[100]:
return self.userName
O puglin do vyper no remix não me obriga a informar a versão do compilador pragma - responsável por compilar meu contrato para bytecode - Por isso, meu código compila com ou sem a versão informada. Já em um desenvolvimento local recomendo informar a versão que você está utilizando, para evitar incompatibilidades, dessa forma:
# @version ^0.2.0
Primeiramente, declaramos a variável userName
que usaremos para guardar nosso nome, mas fique a vontade para escrever o que quiser. Como iremos usar palavras e não valores numéricos, precisamos especificá-la como string e ela aceitará até 100 caracteres.
userName: public(String[100])
O próximo bloco mostra uma função do tipo @external
, que só pode ser chamada de fora. O objetivo dela é capturar algum valor digitado pelo usuário e salvar na variável userName
.
@external
def __init__(name: String[100]):
self.userName = name
O parâmetro
__init__
significa que ele é o método construtor do contrato e será iniciada no deploy.
A última função também é uma função @external
e do tipo @view
que não tem poder para alterar nenhum dado no blockchain, apenas consumir algo já existente. Iremos utilizá-la para retornar o valor salvo na variável userName
.
@view
@external
def getUserName() -> String[100]:
return self.userName
Antes de compilar nosso contrato e verificar se possui algum problema, precisamos instalar o plugin do vyper no remix. Clique no ícone de plugue.
Pesquise por Vyper, em seguida clique em activate:
Em seguida, clique no ícone do Vyper, vá na aba Remote Compiler
depois clique em compile contracts/MyContract.vy
.
Você deverá ver isso:
Repare que agora o ícone do vyper está com um símbolo de verificado, isso significa que nosso código não tem nenhum problema de sintaxe. Note que ele também gerou para nós, o código ABI do nosso contrato, ele é muito importante na construção de dapps, é com a ABI que podemos interagir com nosso contrato utilizando outras ferramentas ou linguagens externas, como, por exemplo, javasript. Agora que compilamos nosso contrato já podemos realizar o deploy para o blockchain.
Para isso utilizamos o remix com a opção Injected Provider
, que irá requisitar a conexão com a nossa carteira:
Conecte a sua carteira, mas lembre-se de utilizar uma rede de testes para não gastar dinheiro de verdade, a carteira do exemplo está utilizando a rede Goerli (Rede de testes da Ethereum).
Antes do deploy vamos conferir os dados:
- Account: é o endereço da carteira conectada;
- Contract: é o arquivo que será usado para efetuar o deploy;
- Deploy > Name: é o campo do nosso método construtor, onde iremos passar algum valor e ele será executado junto ao deploy;
- Transact: Realiza o deploy conforme a rede conectada;
Para realizar o deploy basta clicar em transact
, em seguida sua carteira será chamada para efetuar o deploy e pagar a taxa correspondente.
Pronto, a partir de agora iremos interagir com um contrato que já está implantado no blockchain. Do lado esquerdo temos as duas funções externas, uma para alterar o valor da variável userName
e outra para capturar o que foi salvo. Do lado direito podemos ver a transação que foi realizada:
Clicando na primeira função que é apenas de leitura eu consigo visualizar o valor iniciado no contrato, repare também que ele não me custou gás para ser chamado:
Agora você deve está se perguntando, é só isso?
Sim, a implantação de um contrato com o vyper é extramente simples, claro que nesse caso nosso contrato foi menos complexo, para algo de escalar maior você precisará utilizar de métodos mais rebuscados e com um ambiente mais controlado que o remix. 🤓💻
Latest comments (0)