WEB3DEV

Cover image for Fique Mais Esperto Sobre Smart Contracts
Panegali
Panegali

Posted on • Atualizado em

Fique Mais Esperto Sobre Smart Contracts

Introdução

Este artigo é uma introdução incomum aos smart contracts, Solidity e Blockchain. Você aumentará seu conhecimento sobre smart contracts, suas linguagens de construção, ambiente de desenvolvimento, vulnerabilidades em smart contracts e a sintaxe de linguagens específicas de contrato.


Sumário

1 . Introdução

2 . Contratos Inteligentes e O que há de Inteligente Neles

3 . Sobre a Escolha de um Idioma Para Criar um Contrato Inteligente

3 . Ferramentas Para Criar Contratos Inteligentes
..... . Remix IDE
..... . Truffle Framework
..... . Embark Framework

4 . Saudando a Blockchain em SOL
..... . Dissecando o Código do Solidity com Solidez
..... . Dica 1
..... . Dica 2
..... . Dica 3

5 . Dissecando o Código Vyper Sem Uma Mordida
..... . Passo 1
..... . Passo 2
..... . Passo 3

6 . Por que construir o Vyper quando o Solidity está em altaemanda e adoção

7 . Chegando a um acordo com o Vyper

8 . O que há de comum entre essas vulnerabilidades


Contratos Inteligentes e O que há de Inteligente Neles?

Smart Contracts são partes de software de computador ou um protocolo de transação destinado a executar automaticamente, controlar ou documentar eventos e ações legalmente relevantes de acordo com os termos de um contrato ou acordo. Eles são considerados inteligentes, talvez devido à sua natureza auto-executável.

Sobre a Escolha de um Idioma Para Criar um Contrato Inteligente

Solidity é a linguagem mais popular para criar smart contracts. No entanto, existem outras linguagens específicas da Ethereum que são compatíveis com a EVM (Máquina Virtual Ethereum). Elas incluem:

  • Serpent
  • Vyper (um concorrente próximo do Solidity)
  • Bamboo
  • LLL

A EVM é rígida, daí a importância de se manter as linguagens criadas especificamente para smart contracts. Por que eles foram construídos em primeiro lugar? É relativamente fácil construir uma linguagem de propósito específico a partir do zero em comparação com martelar e dobrar uma linguagem de propósito geral para atender às necessidades da EVM.

Se você estiver interessado em usar uma linguagem de uso geral de alto nível para smart contracts, deverá escolher entre Golang e Rust. As razões incluem Rust sendo o idioma para o cliente Party e Golang, o cliente Geth.

Ferramentas Para Criar Contratos Inteligentes

Configurar seu ambiente de desenvolvimento para o desenvolvimento de smart contracts não é um processo específico. A seguir estão as ferramentas que você pode precisar:

1. Remix IDE

O Remix é uma ferramenta poderosa e open-source que ajuda você a escrever contratos do Solidity diretamente no navegador. Escrito em JavaScript, o Remix suporta o uso no navegador e localmente.
O Remix também oferece suporte a testes, depuração, implantação de smart contracts e muito mais.
Você pode ler mais sobre o Remix na documentação oficial. Você também pode baixá-lo aqui.

Truffle Framework

Truffle é um ambiente de desenvolvimento de classe mundial, estrutura de teste e pipeline de ativos para blockchains usando a Ethereum Virtual Machine, com o objetivo de facilitar a vida de um desenvolvedor.
Você pode aprender mais sobre o Truffle na documentação oficial. Você também pode obter o Truffle aqui.

Embark Framework

O Embark é um ambiente de desenvolvedor rápido, fácil de usar e poderoso para criar e implantar aplicativos descentralizados, também conhecidos como “DApps”. Ele se integra a blockchains Ethereum, armazenamentos descentralizados como IPFS e Swarm e plataformas de comunicação descentralizadas como Whisper.

O objetivo do Embark é tornar a criação de aplicativos descentralizados o mais fácil possível, fornecendo todas as ferramentas necessárias e permanecendo extensíveis ao mesmo tempo.
Você pode ler mais na documentação oficial. Você também pode obter o Embark aqui.

Saudando a Blockchain em SOL

É uma tradição comum imprimir “Hello World” na Web2. Quem inventou essa regra deve aceitar o evangelho da descentralização.
Vamos imprimir “Hello Blockchain” no Solidity em comparação com outras linguagens. Também aprenderemos a estrutura básica de um contrato.

pragma solidity ^0.8.10;

contract HelloWorld {
    string public greet = "Hello World!";
}
Enter fullscreen mode Exit fullscreen mode

Dissecando o Código do Solidity com Solidez

1.


--- pragma
é a primeira palavra obrigatória na primeira linha do código em qualquer arquivo Solidity.

--- pragma ---

é uma diretiva que especifica a versão do compilador Solidity a ser usada para o arquivo Solidity atual.
Enter fullscreen mode Exit fullscreen mode

2.

     Solidity ^0.8.10;    
Solidity é uma nova linguagem e está sujeita a melhoria contínua em uma base contínua. Assim, existem versões mais antigas e mais recentes e você pode definir um intervalo de versão do compilador com esta sintaxe:

    Solidity
pragma solidity >= ^0.5.0 < 0.9.0;
Enter fullscreen mode Exit fullscreen mode

Isso significa que qualquer versão entre esse intervalo pode executar/compilar o arquivo de origem do Solidity.

3.

Como dito anteriormente, o Solidity foi criado para ser compatível com EVM. É uma linguagem específica de contrato. Um smart contract é um conjunto de funções que faz coisas. Assim, entre o

 --- contract Name{ } ---

tags, existem outras propriedades, incluindo funções, tipos de dados e tecnicamente todas as outras coisas que você tem em uma linguagem normal orientada a objetos.
Enter fullscreen mode Exit fullscreen mode

4.


 --- public ---


A palavra chave

 --- public ---

significa funções que podem ser chamadas interna e externamente, por qualquer um. 

Saudando o Blockchain em .vy
Vamos saudar o resto do mundo Web3 novamente, mas desta vez, com Vyper.

--- Python
@version ^0.2.0

greet: public(String[100])

@external
def __init__():
      self.greet = "Hello Blockchain"
Enter fullscreen mode Exit fullscreen mode

Dissecando o Código Vyper Sem Uma Mordida

1.

Você pode dizer instantaneamente que isso significa a versão atual do arquivo de origem Vyper.
Enter fullscreen mode Exit fullscreen mode

2.


--- greet ---

Uma variável pública chamada greet (saudação) é declarada como tipo de dado de string e inicializada com um comprimento máximo de 100.
Enter fullscreen mode Exit fullscreen mode

3.


--- @external---

Apesar de o contrato ser público, a palavra chave

--- @external ---

é repetida. O que isso significa é que a função abaixo só pode ser chamada por meio de transações ou outros smart contracts.

Enter fullscreen mode Exit fullscreen mode

Depois de comparar essas linguagens, você notará que o Solidity é influenciado pelo JavaScript, enquanto o Vyper é... você acertou, influenciado pelo Python.

Por que construir o Vyper quando o Solidity está em alta demanda e adoção

Chegando a um acordo com o Vyper

Uma pesquisa foi realizada em 2018, onde aproximadamente um milhão de smart contracts Ethereum deployed foram analisados. A pesquisa descobriu vulnerabilidades nesses smart contracts. Os pesquisadores agruparam essas vulnerabilidades em: para facilitar a identificação:

  • Contratos Suicidas - Smart contracts que podem matar endereços arbitrários.
  • Contratos Gananciosos - Smart contracts em um estado em que não podem mais liberar ether
  • Contratos Pródigos - Smart contracts que podem ser feitos para liberar ether para endereços arbitrários.

O que há de comum entre essas vulnerabilidades

Elas são apresentados aos smart contract via código. Pode ser não intencional do desenvolvedor, mas, independentemente disso, essas vulnerabilidades têm o potencial de causar perdas inesperadas de fundos para os usuários.
É por isso que o Vyper foi construído. Ele tenta eliminar isso permitindo que os usuários escrevam códigos seguros e dificultando que os programadores escrevam códigos enganosos ou vulneráveis acidentalmente.

Conclusão

Este artigo apresentou os smart contracts. Você aprendeu sobre as linguagens usadas na redação de smart contracts, comparando as duas mais adotadas. Em seguida, você verá como os contratos são escritos nas duas linguagens e o que significa cada termo inicial.
Talvez você já tenha concluído uma escolha de linguagem para criar seus smart contracts; no entanto, leve em consideração as descobertas deste artigo.

Você gostou deste artigo?
Siga o autor no Twitter.


Artigo escrito por MacBobby Chibuzor e traduzido por Marcelo Panegali. O artigo original pode ser lido aqui.

Top comments (0)