Web3 developers' essential course: análise abrangente da linguagem de contratos inteligentes

O autocuidado dos desenvolvedores Web3 – contratos inteligentes

Introdução básica

Os contratos inteligentes são protocolos de execução automática que funcionam em plataformas de blockchain, permitindo que as partes do contrato realizem transações confiáveis diretamente, sem a necessidade de intermediários ou terceiros de confiança. Essas transações são rastreáveis e irreversíveis. Os contratos inteligentes contêm funções de código e também podem interagir com outros contratos; quando as condições predefinidas são atendidas, o contrato inteligente executa automaticamente as funções de código especificadas no contrato.

O conceito de contratos inteligentes foi proposto pela primeira vez pelo cientista da computação Nick Szabo na década de 90, mas só com o surgimento da blockchain Ethereum é que os contratos inteligentes começaram a ser amplamente aplicados. A Ethereum foi lançada em 2015, permitindo a implementação e execução de contratos inteligentes. Diferente do Bitcoin, que é utilizado principalmente para transações simples de criptomoeda, a Ethereum permite a construção de aplicações descentralizadas na sua plataforma usando sua linguagem de programação Turing completa, sendo assim considerada a segunda geração de blockchain.

A linguagem de contratos inteligentes é uma linguagem de programação utilizada para escrever contratos inteligentes, que, após serem compilados em bytecode, são executados na máquina virtual da plataforma de contratos inteligentes da blockchain, implementando a lógica predefinida. Uma linguagem de contratos inteligentes deve permitir que os desenvolvedores expressem as regras do contrato de forma segura e eficiente, e geralmente oferece uma série de ferramentas e abstrações para lidar com transações e estados da blockchain.

A autoformação do desenvolvedor Web3 — contratos inteligentes

contratos inteligentes

A maioria dos desenvolvedores de contratos inteligentes está a desenvolver em Ethereum e em blockchains compatíveis com EVM, enquanto Solana é a blockchain não compatível com EVM com mais desenvolvedores. Move foi construído especificamente para desenvolver contratos inteligentes de blockchain de forma segura.

Embora haja muitas outras blockchains públicas com suas próprias linguagens de contratos inteligentes, como TON/FunC, Cardano/Plutus, ICP/Motoko, Flow/Cadence e Starknet/Cairo, elas são excessivamente fragmentadas.

Portanto, este artigo irá classificar e introduzir a linguagem de contratos inteligentes de acordo com os sistemas EVM, Solana e Move.

EVM

EVM é o núcleo do Ethereum, responsável por executar contratos inteligentes e processar transações. O protocolo Ethereum especifica um bytecode que é executado sobre o EVM e constrói uma linguagem intermediária chamada Yul e Yul+, que por sua vez, dá origem a linguagens de alto nível como Solidity/Vyper/Fe, visando reduzir a dificuldade de desenvolvimento de contratos inteligentes para usuários finais. A vantagem de adotar uma estrutura em múltiplos níveis é que a linguagem intermediária é adequada tanto para tradução para linguagem de máquina quanto para otimização de programas completos, sendo fácil de verificar manualmente, realizar verificações formais, entre outras. No entanto, quanto mais níveis houver, maior será o custo para garantir a confiabilidade verificável, pois cada nível requer validação correspondente. Claro, linguagens de nível inferior têm custos de validação mais baixos devido à sua simplicidade.

No Ethereum e em blockchains compatíveis com EVM, os desenvolvedores podem utilizar diferentes linguagens de programação de alto nível, sendo as mais populares e melhor mantidas o Solidity e o Vyper; além disso, também podem optar pelo Yul, Yul+, Fe e Huff.

Solidity foi inicialmente proposto pelo CTO da Ethereum, Gavin Wood, em 2014, e posteriormente desenvolvido pela equipe da Ethereum liderada por Christian Reitwiessner. Como uma linguagem de programação orientada a objetos, Solidity é fortemente influenciada por C++, Python e JavaScript, e foi projetada especificamente para a EVM. Para reutilização de código, os contratos inteligentes são vistos como objetos de classe, aproveitando a herança múltipla. Em particular, Solidity estabelece um padrão de interface binária de aplicação (ABI) para interagir com seus contratos. Atualmente, o ABI do Solidity é considerado o padrão de fato para DSL da EVM.

Vyper foi desenvolvido pela equipe de Vitalik Buterin, um dos fundadores do Ethereum, com o objetivo de ser uma alternativa ao Solidity, e foi lançado em 2017. Vyper é uma linguagem de programação semelhante ao Python, voltada para contratos, e foi projetada para a EVM. Vyper foi otimizada para segurança, legibilidade, auditabilidade e eficiência de Gas. Vyper não adota um modelo orientado a objetos e não pode usar assembly inline.

Yul é uma linguagem de montagem com controle de fluxo avançado e uma grande quantidade de abstrações, e faz parte da ferramenta Solidity. A maioria das funcionalidades em Yul é exposta através de blocos de montagem interna no Solidity, permitindo o uso de funcionalidades não suportadas pelo Solidity, além de personalizar armazenamento, memória e calldata. Yul+ é uma extensão do Yul e pode ser vista como uma atualização experimental do Yul.

Fe é uma linguagem de alto nível semelhante ao Rust, lançada em janeiro de 2021. Fe não utiliza um padrão orientado a objetos, mas sim um sistema baseado em módulos para reutilizar código, declarando variáveis, tipos e funções dentro dos módulos, podendo ser importados de forma semelhante ao Rust.

Huff é uma linguagem de montagem, com controle manual de pilha e uma abstração mínima sobre o conjunto de instruções EVM. Através da diretiva «#include», qualquer arquivo Huff incluído pode ser analisado em tempo de compilação, permitindo a reutilização de código.

Na Ethereum, a maioria dos contratos inteligentes é desenvolvida com base em Solidity, representando cerca de 90%, sendo dez vezes mais do que o segundo lugar, Vyper, enquanto o Fee, por ter começado mais tarde, tem poucos desenvolvedores a utilizá-lo. Yul e Yul+ são geralmente usados como blocos de assembly inline para Solidity, permitindo acesso de baixo nível ao conjunto de instruções EVM, normalmente usados para otimização de Gas. Huff é mais de baixo nível do que Yul/Yul+, permitindo manipulação manual da pilha e chamadas de instruções EVM, normalmente utilizado para otimização de limite de Gas.

A autoformação do desenvolvedor Web3 — contratos inteligentes

Solana系

A Solana é conhecida pelo seu mecanismo PoH (Proof of History) e pela sua baixa latência e alta taxa de transferência, sendo uma das mais famosas "assassinas do Ethereum". A Solana também é uma das blockchains públicas com o crescimento mais rápido em termos de capitalização de mercado e desenvolvimento ecológico no último ano, catalisando um crescimento significativo na sua comunidade de desenvolvedores.

A Solana chama os contratos inteligentes de programas on-chain (Program), sendo principalmente escritos na linguagem Rust, mas ao contrário de outras blockchains públicas que usam Rust, a Solana não utiliza o runtime WASM, possuindo sua própria máquina virtual única SVM e bytecode SBF.

SVM é o ambiente de execução para contratos inteligentes e processamento de transações na rede Solana, sendo o componente chave o Sealevel. O Sealevel permite que múltiplos contratos inteligentes sejam executados simultaneamente sem afetar o desempenho uns dos outros, possibilitando o processamento paralelo no runtime da Solana. Os contratos inteligentes da Solana especificam quais estados (contas) serão lidos ou escritos em tempo de execução, o que permite que transações sem conflitos sejam executadas em paralelo, garantindo a consistência dos dados.

SBF baseado em eBPF, que é uma evolução do BPF (Berkeley Packet Filter), originalmente projetado para filtrar pacotes de dados de rede de forma eficiente. O eBPF oferece um conjunto de instruções mais rico, permitindo a intervenção dinâmica e a modificação do comportamento do núcleo do sistema operacional sem a necessidade de alterar o código-fonte, apresentando alta performance, segurança e portabilidade. Em relação ao eBPF, o SBF utiliza um validador personalizado, que não apenas verifica se o programa termina dentro de um certo número de instruções (o famoso problema da parada), mas também verifica se as instruções estão corretas e se não há saltos fora dos limites. Além do validador, também resolve alguns detalhes do eBPF que podem ser problemáticos para a compilação de contratos inteligentes.

LLVM (Low Level Virtual Machine) é uma arquitetura de compilação e uma cadeia de ferramentas moderna, onde o compilador pode traduzir Rust para a linguagem intermediária LLVM IR, que é então utilizada pelo LLVM IR para ser traduzida para eBPF da plataforma de destino. Teoricamente, qualquer linguagem de programação que suporte a compilação para LLVM IR pode ser usada para escrever contratos inteligentes Solana, mas na prática, a Solana Labs fez várias alterações no Rust e no backend eBPF LLVM, sendo que algumas dessas alterações não estão essencialmente disponíveis upstream (Rust e LLVM). O desenvolvimento de contratos Solana atualmente suporta apenas Rust e Solang.

Rust é uma linguagem de programação de propósito geral, estática e compilada, desenvolvida sob a liderança da Mozilla e lançada em 2011. Sua sintaxe é semelhante à do C++ e foi projetada para desempenho e segurança, especialmente segurança, não se limitando a programas de contratos inteligentes. Em comparação com o Solidity, Rust é uma linguagem de programação de baixo nível (low-level) e multiparadigma, com alto desempenho e segurança de memória. O compilador oficial do Rust é o rustc, que realiza a análise léxica, a análise sintática e a análise semântica do código-fonte do Rust, compilando o código em LLVM IR.

Solang, desenvolvido pelo Hyperlege Labs e lançado em 2023, é um compilador de Solidity baseado na arquitetura LLVM para Solana e Polkadot, que suporta a escrita de contratos inteligentes em Solidity, mas cuja sintaxe real foi modificada para manter a consistência com a arquitetura de Solana e Polkadot. O objetivo do Solang é simplificar a transição dos desenvolvedores para Solana ou Polkadot e expandir o alcance do desenvolvimento em Solidity.

Rust é a linguagem principal oficialmente suportada pela Solana, com maior estabilidade; a principal vantagem do Solang reside na sua compatibilidade com a linguagem Solidity.

A autoformação do desenvolvedor Web3 — contratos inteligentes

Move系

Move é uma nova linguagem de programação de contratos inteligentes, lançada em 2019, inicialmente desenvolvida para o projeto de blockchain Diem da Meta. O Move tem como objetivo resolver problemas de segurança em ativos e transações, permitindo que os ativos e as transações sejam rigorosamente definidos e controlados. As características da linguagem são:

  1. Proteção do tipo de recurso de primeira classe (Frist Class Resources): o tipo de recurso de primeira classe é primeiramente um tipo de variável, e depois estipula que as variáveis desse tipo: não podem ser copiadas; não podem ser destruídas implicitamente; só podem ser "movidas" em endereços de programas diferentes;

  2. Flexibilidade: O bytecode Move pode ser executado diretamente e também pode chamar o código de outros módulos publicados, permitindo que vários programas sejam chamados em uma única transação, possibilitando realizar transferências para várias pessoas em uma única transação.

  3. Segurança e verificabilidade: O sistema de codificação Move oferece proteção de segurança direcionada para os recursos. Os recursos Move não podem ser copiados, reutilizados ou destruídos. Um tipo de recurso só pode ser criado ou destruído pelo módulo que define seu tipo. A máquina virtual Move irá validar através de bytecode estático e rejeitará a execução de programas que não passem a validação de bytecode, garantindo assim sua segurança.

Após a dissolução do projeto Diem, a equipe fundadora saiu e fundou a Aptos e a Sui, que também utilizam o Move como a linguagem central de contratos inteligentes. A Aptos herdou o Diem Move (Core Move), enquanto a Sui utiliza sua própria versão personalizada do Sui Move para escrever seus contratos inteligentes.

No Move, cada contrato inteligente é um módulo composto por definições de funções e estruturas, sendo que as estruturas são instanciadas dentro das funções e podem ser passadas para outros módulos através de chamadas de função. O Sui Move, em comparação com o Core Move, adota um modelo de dados baseado em objetos. Existem três tipos diferentes de objetos no Sui: objetos proprietários, objetos compartilhados e objetos imutáveis. A estratégia de paralelização do Sui é semelhante à do Solana, onde as transações também precisam especificar quais objetos estão sendo operados. Este design permite que o Sui lide eficazmente com transações simultâneas, realizando uma capacidade de processamento paralelo que não requer a ordenação global necessária nas blockchains tradicionais.

O compilador, o validador e a máquina virtual do Move foram todos projetados do zero. O validador é um dos mecanismos de segurança centrais do Move, utilizado para manter o modelo de programação centrado em recursos do Move. O validador do Move é uma ferramenta de análise estática que analisa o bytecode do Move e determina se respeita as regras de segurança de tipos, memória e recursos necessárias, todos os módulos enviados para a cadeia precisam passar pelo validador.

Em comparação com linguagens como Solidity, Move é uma linguagem amigável para verificação formal, pois não suporta características como a atribuição dinâmica (dynamic dispatch), e todos os caminhos dos contratos podem ser determinados na fase de compilação, sem a necessidade de definir as funções a serem executadas apenas durante a execução do contrato, permitindo uma análise e verificação adequadas.

Move tem também uma ferramenta de verificação formal para contratos inteligentes, chamada Move Prover. Os desenvolvedores precisam escrever condições de verificação (na forma de afirmações) para os contratos inteligentes, e o Move Prover irá converter essas condições de verificação em fórmulas SMT em segundo plano, e em seguida, usar um solucionador SMT para verificar.

Desenvolvimento Web3: a autodescoberta dos desenvolvedores - contratos inteligentes

contratos inteligentes ferramentas de desenvolvimento

Para aqueles que desejam entrar no Web3 ou aprender sobre o desenvolvimento de contratos em Ethereum e outras blockchains compatíveis com EVM, Solidity é a melhor escolha. E devido à popularidade do Solidity, as ferramentas de desenvolvimento também se tornaram mais maduras, representadas por:

  • Hardhat é um ambiente de desenvolvimento para compilar, implantar, testar e depurar aplicações Ethereum. Ajuda os desenvolvedores a gerenciar e automatizar as tarefas repetitivas inerentes ao processo de construção de contratos inteligentes e DApps, e a facilmente introduzir mais funcionalidades em torno desse fluxo de trabalho;

  • OpenZeppelin oferece contratos OpenZeppelin de código aberto, escritos em Solidity, para construir contratos inteligentes seguros. Os contratos OpenZeppelin permitem

Ver original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Recompensa
  • 3
  • Compartilhar
Comentário
0/400
ApeWithNoFearvip
· 19h atrás
contratos inteligentes搞不定 这可咋混!
Ver originalResponder0
ImpermanentLossFanvip
· 19h atrás
contratos inteligentes bullp个毛...na verdade é apenas um bloco de código
Ver originalResponder0
0xOverleveragedvip
· 19h atrás
Não brinco com moedas virtuais, só negoceio futuros. Alta alavancagem é que tem graça.
Ver originalResponder0
  • Marcar
Faça trade de criptomoedas em qualquer lugar e a qualquer hora
qrCode
Escaneie o código para baixar o app da Gate
Comunidade
Português (Brasil)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)