Vyper, Solidity e Scrypto: como as linguagens de contrato inteligente se comparam

Uma olhada em três linguagens de programação diferentes para redes blockchain e como elas se comparam.

A rede Ethereum trouxe contratos inteligentes para o espaço blockchain, tornando conceitos como financiamento descentralizado (DeFi) possível. 

Contratos inteligentes podem executar processos automaticamente assim que certas condições forem atendidas. Junto com essa nova tecnologia, foi desenvolvida uma nova linguagem de codificação chamada Solidity.

À medida que a indústria de blockchain continua a crescer e novas redes de blockchain surgem, linguagens de programação adicionais estão sendo trazidas para o espaço, principalmente Vyper e Scrypto.

Linguagens de programação são um conjunto de regras que convertem strings de texto e números em código legível por máquina. Em termos simples, as linguagens de programação permitem que os computadores entendam instruções que são inseridas por seres humanos. Quando se trata da indústria de blockchain, Solidity, Python e Javascript são algumas das linguagens mais usadas, mas todas funcionam de maneira diferente.

O que é Solidity?

Solidity é uma linguagem de programação orientada a objetos e de alto nível para construir contratos inteligentes na blockchain Ethereum e outras redes blockchain como BNB Smart Chain e Avalanche. A linguagem foi desenvolvida em 2014 e compartilha semelhanças com linguagens de programação como JavaScript, C++ e Python.

Como Solidity é uma linguagem de alto nível, o código de computador é digitado de maneira facilmente compreensível e legível por humanos, em vez de uns e zeros. Por exemplo, o código Solidity incluirá palavras e frases como “função” e “contrato”, bem como chaves e números.

Ser uma linguagem de codificação orientada a objetos significa que o Solidity gira em torno do uso de “objetos”, que são pedaços de código que podem ser reutilizados para criar pedaços de código semelhantes sem reescrever o código original a cada vez.

O Solidity também usa um compilador para converter o código de alto nível legível por humanos em código legível por máquina que é executado na Ethereum Virtual Machine (EVM).

O que é Vyper?

Vyper é uma linguagem de programação Python orientada a contratos para contratos inteligentes projetada para ser usada com o EVM. A linguagem foi projetada para melhorar o Solidity, melhorando a segurança e a legibilidade do código. Vyper tem um forte foco na audibilidade de seu código. Devido a isso, um de seus princípios é que os humanos devem ser capazes de ler o máximo de código Vyper possível. 

O Vyper também visa tornar o mais difícil possível para qualquer pessoa escrever código enganoso. A simplicidade para o leitor (ou seja, um auditor) é mais importante do que a simplicidade para o escritor (ou seja, o desenvolvedor). Dessa forma, será mais fácil identificar códigos maliciosos dentro de um contrato inteligente ou aplicativo descentralizado (DApp).

O que é Scripto?

Scrypto é uma linguagem de contrato inteligente orientada a ativos. A linguagem foi desenvolvida pela Radix, é baseada no Rust, e mantém a maioria dos recursos do Rust enquanto adiciona funções e sintaxe específicas para o Radix Engine v2. Como o Scrypto é orientado a ativos, ele pode interagir com ativos como tokens, que são um tipo de recurso dentro da linguagem. 

Em linguagens de codificação como Solidity, os tokens ERC-20 existem como contratos inteligentes no EVM. Os ativos no Scrypto são recursos que existem em contêineres e cofres. Em termos simples, é como ter um balde (o recipiente) e enchê-lo com moedas (o ativo) que podem ser armazenadas dentro de um cofrinho (o cofre).

Recente: Demanda por talentos em criptografia menos dependente do mercado à medida que a indústria amadurece

O Scrypto também se concentra em ser amigável ao desenvolvedor, permitindo que eles escrevam apenas o código necessário enquanto interagem com os contêineres e recursos para habilitar a funcionalidade em um DApp. A segurança é outro princípio com os desenvolvedores sendo capazes de fornecer instruções específicas a um DApp em vez de conceder permissões gerais.

Como as linguagens de contrato inteligente se comparam

O Solidity possui uma ampla variedade de recursos de aprendizado online e muito suporte da comunidade devido ao seu uso nas principais redes blockchain como o Ethereum. O Solidity também possui uma ampla gama de recursos retirados da programação orientada a objetos (OOP), tornando-o modular e fácil de solucionar quando há um problema. Por exemplo, se um objeto de uma determinada classe apresentar defeito, ele pode ser rastreado até a origem da classe. 

Isso funciona porque o Solidity usa encapsulamento, o que significa que cada objeto é autocontido, com cada função funcionando de forma independente. A modularidade da linguagem de codificação também permite que os desenvolvedores trabalhem em vários objetos simultaneamente, tornando mais eficiente a construção, correção e implantação de contratos inteligentes.

Vyper é uma linguagem de codificação mais simples que Solidity, enfatizando transparência, simplicidade da estrutura da linguagem e audibilidade. O Vyper também possui menos recursos que o Solidity, que foi feito intencionalmente por motivos de segurança. O conjunto de recursos limitado reduz o número de vulnerabilidades que os agentes mal-intencionados podem explorar.

Por exemplo, Solidity emprega modificadores indicando que as verificações foram realizadas antes e depois de um processo ser executado. No entanto, o Vyper não usa modificadores, pois os desenvolvedores acreditam que isso facilita a escrita de códigos enganosos. Também incentiva os indivíduos a desenvolverem códigos que saltem por todo o arquivo, reduzindo a audibilidade. Como os modificadores não estão presentes no Vyper, é impossível adicionar qualquer alteração de estado ao código.

Outro recurso excluído do Vyper é a herança. No Solidity, vários contratos podem herdar recursos de um contrato pai. Se houver um desacordo, também é necessário que os indivíduos entendam as normas de precedência. O Vyper não usa herança de classe porque elimina uma fonte potencial de complexidade no código, o que contribui para melhorar a audibilidade. Em geral, Vyper é uma linguagem de codificação mais minimalista que troca algumas funcionalidades para maior segurança e melhor exame de sua base de código para proteger melhor os usuários de contratos inteligentes baseados em Vyper.

Embora Solidity possa ser uma das linguagens de programação mais populares e conhecidas no espaço blockchain, algumas linguagens têm curvas de aprendizado mais fáceis para os desenvolvedores. Além disso, linguagens de programação mais simples facilitam a atração de novos desenvolvedores para o setor.

Adam Simmons, diretor de estratégia da RDX Works – os desenvolvedores por trás do Radix – disse ao Cointelegraph: “Ter as ferramentas certas para o trabalho faz uma grande diferença – e agora, os desenvolvedores de blockchain não têm as ferramentas certas. Não se trata apenas de tornar as linguagens mais simples, mas de tornar as ferramentas de desenvolvedor intuitivas e seguras”, continuando:

“No seu pico, o DeFi cresceu para mais de US$ 200 bilhões em TVL em apenas dois anos – tão claramente, há níveis muito altos de demanda. No entanto, apesar desse crescimento de 200x no capital, o número de desenvolvedores aumentou apenas 2x, para um total de cerca de 19,000 (de cerca de 30 milhões de desenvolvedores em todo o mundo).”

Apesar do alto nível de crescimento observado no espaço financeiro descentralizado, o número de desenvolvedores não cresceu para atender à demanda. Simmons acredita que os desenvolvedores podem ter achado o Solidity muito difícil para eles fazerem a transição para o desenvolvimento de blockchain:

“Os desenvolvedores hesitam em trabalhar em tempo integral na Web3 devido à curva de aprendizado íngreme do Solidity e aos altos níveis de risco em torno da segurança. Apesar dos desenvolvedores altamente talentosos e milhões de dólares gastos em auditorias de segurança, o DeFi ainda está perdendo dinheiro com hacks e exploits. Isso por si só é suficiente para impedir que os desenvolvedores entrem no espaço.”

“Ter as linguagens e ferramentas certas permitirá que os desenvolvedores cresçam todo o setor muito mais rapidamente. Assim como os mecanismos de jogos deram aos desenvolvedores as ferramentas para revolucionar a produção de videogames nos anos 90, as linguagens e ferramentas certas da Web3 permitirão que os desenvolvedores acelerem o crescimento da Web3”, acrescentou Simmons.

O Scrypto também se concentra na segurança, simplicidade e facilidade de uso. As transações de criptografia são focadas em ativos. Eles definem como o usuário deseja que os recursos do sistema sejam distribuídos. Eles também podem indicar como os recursos retornados devem ser tratados pelo usuário ou outro componente em uma transação multicomponente.

As transações no Ethereum geralmente são uma chamada para um contrato inteligente (já que DApps e tokens no Ethereum são contratos inteligentes). Em contraste, as transações no Scrypto envolvem a movimentação de ativos de um componente para outro.

Por exemplo, se o usuário A quiser enviar 10 tokens personalizados para o usuário B, sua transação mostrará que ele está tentando retirar 10 tokens do cofre que os contém. A transação também mostrará que eles enviarão esses tokens para o método de depósito do componente da conta do Usuário B. Como os recursos (neste caso, os tokens) precisam estar localizados em algum lugar, um bucket (contêiner) será usado para transferir os tokens do usuário A para o usuário B.

No exemplo acima, o usuário transfere um bucket contendo os recursos (os tokens) para o método de depósito do segundo usuário em vez de fazer uma chamada para um contrato inteligente de token. A interação com os DApps funciona de maneira semelhante, com os usuários retirando tokens de suas contas e passando-os para o componente relevante com o qual desejam interagir. Em resumo, o Scrypto adota uma abordagem baseada em ativos, com os usuários armazenando e repassando ativos reais. A abordagem baseada em ativos também facilita para os desenvolvedores codificar DApps, pois é mais fácil interagir com tokens (recursos), pools de tokens (cofres) e usuários (componentes).

Para outro exemplo, se um DApp de troca (como Uniswap) fosse codificado com Scrypto, os desenvolvedores precisariam apenas codificar o método de negociação para a troca. Primeiro, o DEX precisaria identificar o contêiner de entrada do Token A de um usuário e, em seguida, calcular a taxa de câmbio. Em seguida, os tokens recebidos serão depositados e o DEX enviará a quantidade correta de Token B de volta ao usuário.

Qual linguagem de programação os desenvolvedores de blockchain devem escolher?

Os desenvolvedores podem usar linguagens de programação tradicionais (C++, Python, JavaScript) para desenvolvimento de blockchain, bem como soluções construídas especificamente como Solidity, Vyper e Scrypto. Várias linguagens de programação podem ser benéficas para o espaço blockchain, pois oferecem aos desenvolvedores uma variedade de ferramentas para trabalhar. 

Por exemplo, desenvolvedores familiarizados com C++, JavaScript e Python podem achar o Solidity atraente. Os desenvolvedores familiarizados com o Python podem gravitar em direção ao Vyper, enquanto os desenvolvedores familiarizados com o Rust podem optar por usar a linguagem Scrypto.

Recente: Tokens sociais serão o motor da Web3, das bases de fãs ao incentivo

Simmons concorda, dizendo ao Cointelegraph: “Com mais linguagens chegando à Web3, provavelmente veremos um período de tempo em que existem algumas abordagens concorrentes. À medida que essas linguagens se encaixam no mercado de produtos com os desenvolvedores e, o mais importante, permitem que esses desenvolvedores criem DApps poderosos, úteis e seguros, provavelmente veremos o setor gravitar em direção àqueles que oferecem os melhores resultados.”

Solidity será naturalmente a escolha para desenvolvedores que desejam trabalhar no Ethereum e redes blockchain semelhantes. Ao mesmo tempo, Vyper e Scrypto podem atrair desenvolvedores que preferem simplicidade e segurança adicional. O Scrypto também pode ser preferível para desenvolvedores devido à sua maior simplicidade e abordagem orientada a ativos.

Fonte: https://cointelegraph.com/news/vyper-solidity-and-scrypto-how-the-smart-contract-languages-compare