Guia para iniciantes na linguagem do contrato Vyper Smart

Vyper é um paradigma de linguagem de contrato inteligente derivado da sintaxe e das convenções do Python 3 e visando a Máquina Virtual Ethereum (EVM).

O EVM é um computador singleton global simulado que funciona paralelamente ao livro-razão encadeado em blocos no Ethereum, permitindo a construção de transações mais complexas e acordos autoexecutáveis ​​condicionais codificados em objetos de contrato inteligente.

A plataforma Ethereum em si não tem características e não tem valor, fornecendo apenas a espinha dorsal de como os contratos inteligentes devem ser reunidos e no contexto de quais aplicativos.

Vyper destina-se a ser aproveitado com a próxima transição para Prova de Participação (Casper) e fornecer um regime minimalista mais pragmático para leitura e escrita de contratos inteligentes, com foco em auditabilidade, simplicidade sintática e objetividade.

Vyper vs. Solidity

Logotipo da Solidity

Nisso, Vyper se desvia agudamente do Solidity de fato principal. Uma vez que os cálculos em cadeia são limitados por recursos, eles devem ser estritamente definidos dentro da necessidade mínima de sua função pretendida, e Vyper adota essa abordagem redutiva para contratos inteligentes, enquadrando-os como papéis e histórias de usuário facilmente legíveis, deixando quase todo o resto de fora.

Um afastamento imediatamente perceptível do Solidity é acabar com a herança, de modo a manter as coisas “na mesma página”, em vez de se perder pulando entre vários arquivos de contrato na hierarquia de sua precedência, a fim de juntar os fragmentos espalhados do que programa está fazendo sob o capô.

Em vez disso, a ênfase é colocada em composição e modularidade refinada e despojada (com tipos como proprietário, mantenedor, token, prazo e possíveis expressões como “enquanto sobra de gás”) sem, ao mesmo tempo, relaxar quaisquer suposições de segurança, mas sim reforçar a sintaxe transparência para tornar as coisas imediatamente óbvias e facilmente auditáveis, de acordo com a natureza dos contratos e livros-razão distribuídos.

Recursos de segurança

A segurança é fundamental no contexto de contratos inteligentes em um ambiente integrado de consenso, distribuído globalmente, destinado a funcionar como um notário transparente e uma agência institucional generalizada para escrever lógica de negócios sem confiança.

Em consonância com esses objetivos, Vyper foca na clareza de expressão, clareza de expressão rigorosa e forte tipificação e, como tal, elimina a sobrecarga do operador, tentando ser o mais não fragmentado e articulado possível (foco no estritamente necessário) em a fim de dificultar a escrita de código enganoso. Na verdade, ele proíbe deliberadamente algumas coisas a fim de torná-las mais difíceis com o objetivo de aumentar a segurança do contrato inteligente por meio da aplicação de padrões de código óbvios e autoexplicativos.


Chamadas recursivas e loops de comprimento infinito também são excluídos, pois abrem a possibilidade de ataques de limite de gás e, em vez disso, Vyper visa otimizar as métricas de gás estimando limites superiores precisos para o consumo de gás de qualquer chamada de função. Limites e verificação de estouro para acessos de array e operações aritméticas estão incluídos (nenhuma biblioteca SafeMath necessária) e nenhum modificador ou constante pode alterar o estado.

Compilador interno e sintaxe de código

Vyper tenta se ater a convenções sintáticas próximas ao cerne do que eles estão descrevendo, ou seja, o EVM. Os scripts de Vyper compilam diretamente para o bytecode EVM em vez de serem interpretados, uma maneira incomum de pensar sobre Python, por mais que seja. Sob o capô, Vyper e Solidity compilam para bytecode da mesma maneira e sequência de etapas, de modo que são amplamente interoperáveis ​​(e capazes de fazer chamadas externas entre os contratos um do outro).

Em resumo, o código é obtido por um analisador que o desmonta em uma representação de árvore de sintaxe abstrata das instruções e, a partir daí, um processo de verificação de tipo itera através da árvore atribuindo seus tipos correspondentes de baixo para cima. Depois de realizar verificações de análise estática, o bytecode é gerado.

Estrutura Geral de um Contrato

Vyper é completo em termos de recursos e atualmente aguarda auditorias e testes beta. As convenções de nomenclatura em Vyper tentam estar o mais próximo possível do que o código está tentando descrever (ou seja, o EVM, que é tão simples quanto o mínimo possível do que pode ser chamado de processador), embora em um tipo pythonesco de maneira.

Os dois tipos de inteiros são denotados como unit256 e int128, que respectivamente representam inteiros não negativos e com sinal. unit256 não é totalmente compatível como um tipo numérico devido ao aumento da complexidade, pois a maioria dos aplicativos exige apenas int128. unidade256 foi incluída para garantir a interoperabilidade com o padrão ERC-20.

Um contrato inteligente Ethereum geralmente consiste em variáveis ​​de estado e funções.

Variáveis ​​de estado são valores que são armazenados permanentemente no armazenamento do contrato e podem ser de número, string, endereço ou tipos de expressão booleana verdadeira / falsa.

Variáveis ​​de estado são declaradas simplesmente:

storedData: int256

Os mapeamentos são variáveis ​​de estado que definem conjuntos de chaves e valores correspondentes. No Vyper eles são definidos e acessados ​​assim:

mapeamento simples: decimal [int256]

plainMapping [0] = 10,1

Primeiro o valor é declarado e depois o tipo. Ao acessar um mapeamento, a posição na tabela é especificada entre colchetes.

Funções são as unidades executáveis ​​de código dentro de um contrato que definem o tipo de comportamento que podem desencadear. Semelhante ao Python, as funções em Vyper são declaradas com “def“.

As funções em contratos inteligentes são funções de leitura (que são rápidas e não custam gás) ou funções de gravação / execução (que se inscrevem na cadeia de blocos e, portanto, custam gás por ciclo e se atualizam no próximo bloco).

Uma função construtora, que por convenção do Solidity tem o mesmo nome do contrato, instancia o contrato fornecido e seus parâmetros básicos no blockchain como tal. Esta função é executada apenas uma vez e em Vyper assume a forma do método Python __init__ (um método especial chamado sempre que um objeto daquela classe é criado). Por exemplo, em um contrato de token simples:

@público

def __init __ (_ name: bytes32, _symbol: bytes32, _decimals: uint256, _initialSupply: uint256):

  self.name = _name

  self.symbol = _symbol

  self.decimals = _decimals

  self.totalSupply = uint256_mul (_initialSupply, uint256_exp (convert (10, ‘uint256’), _decimals))

O método self afirma explicitamente as variáveis ​​de instância particulares de sua classe para clareza semântica.

Dependendo do seu nível de visibilidade, as funções podem ser decoradas com @public ou (por padrão) @private. Visibilidade pública significa que o método está exposto na ABI (Interface Binária do Aplicativo) do contrato, o que permite que atores externos o chamem.

No exemplo acima, uma função construtora instancia as variáveis ​​básicas que descrevem um contrato de token, ou seja, nome, ticker, pontos decimais de divisibilidade e fornecimento total de tokens cunhados em circulação.

Outros decoradores incluem @constant, para métodos de decoração que apenas lêem um estado, e @payable para designar métodos que podem ser chamados com um pagamento.

Por exemplo:

@público

@a pagar

def bid (): // Função

Chamadas externas são suportadas por meio da definição da ABI do contrato externo na parte superior do contrato:

classe Foo ():

   foo (bytes32): passe

Os eventos podem ser registrados em estruturas indexadas, permitindo que os clientes os procurem.

Pagamento: __log __ ({montante: int128, arg2: indexado (endereço)})

total_paid: int128

@público

def pay ():

  self.total_paid + = msg.value

  log.Payment (msg.value, msg.sender)

Os eventos devem ser declarados antes das declarações globais e definições de funções.

Configurando o Ambiente

No Ubuntu, instalar vyper rapidamente é uma maneira rápida de começar se tiver problemas para executar o Python 3.6:

$ sudo apt-get install snapd

$ sudo snap install vyper –edge –jailmode

Compilar um contrato para bytecode é tão simples quanto: vyper filename.v.py (extensão de arquivo geralmente designada como .vy, mas atualmente mantendo .v.py para realce de sintaxe Python)

Para obter o ABI:

viper -f json example.vy

Alternativamente, um compilador online integrado é fornecido em vyper online que também apresenta um rico conjunto de exemplos, como um compatível com Solidity Token ERC-20, eventos financeiros madeireiro e um na rede criador de mercado. Ao contrário do Remix for Solidity, no entanto, ele não vem com uma plataforma de execução de teste, mas apenas compila em bytecode e fornece a ABI do contrato.

Para testar os contratos, precisamos girar um ambiente de blockchain local, para o qual ganache (anteriormente TestRPC) do pacote Truffle é uma opção, mas as migrações precisam ser feitas manualmente a partir do console.

Uma alternativa está em execução e pode ser executada com o cliente Parity no modo de cadeia privada para o qual uma imagem Docker pré-configurada (com um blockchain de Prova de Autoridade de nó único) é fornecida aqui. Depois que o contêiner estiver em execução, a interface gráfica do usuário pode ser acessada a partir do navegador em localhost: 8180. A interface baseada em navegador permite implantar e interagir com contas e contratos localmente.

No entanto, pyethereum (biblioteca central Ethereum para Python) é mais usado no momento devido a ser leve e compatível com Python em geral, com um plugar para testar contratos nativamente em desenvolvimento.

Desenvolvimento e Envolvimentos

Apesar da falta de muita publicidade ou atenção mainstream, ou mesmo muita documentação até muito recentemente, Vyper tem sido silenciosamente trabalhado por algum tempo e só recentemente.

No entanto, começou a atrair a atenção de desenvolvedores de contratos inteligentes e auditores de segurança de OpenZeppelin, e um contingente de pessoas insatisfeitas com as deficiências do Solidity em busca de alternativas mais intuitivamente simples e menos canivetes suíços..

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me