O que é solidez e como ela é usada para desenvolver contratos inteligentes?
O Solidity percorreu um longo caminho desde que foi proposto pela primeira vez em 2014 e posteriormente desenvolvido pela equipe Solidity da Ethereum. Existem centenas de milhares de desenvolvedores que usam a linguagem de programação para criar serviços baseados em blockchain para um número crescente de casos de uso.
Este artigo explica o que é Solidity e como é usado no ecossistema Ethereum. Este artigo é para você se estiver interessado em aprender mais sobre o funcionamento interno dessa linguagem de programação baseada em blockchain.
O que é solidez?
Solidity é uma linguagem de programação de alto nível orientada a objetos usada para criar contratos inteligentes que automatizam transações no blockchain. Depois de ser proposta em 2014, a linguagem foi desenvolvida por colaboradores do projeto Ethereum. A linguagem é usada principalmente para criar contratos inteligentes no blockchain Ethereum e criar contratos inteligentes em outros blockchains.
Solidity é semelhante a uma das linguagens de programação mais comuns, JavaScript. Pode ser considerado um dialeto do JavaScript. Isso significa que, se você entende de JavaScript, pode ser fácil aprender Solidity. Solidity também compartilha características semelhantes às linguagens de programação C ++ e Python.
Como uma linguagem de alto nível, Solidity elimina a necessidade de digitar códigos em uns e zeros. Torna muito mais fácil para os humanos escrever programas de maneiras que eles acham mais fáceis de entender, usando uma combinação de letras e números.
Solidity é estaticamente tipado, com suporte para herança, bibliotecas e tipos complexos definidos pelo usuário. Como o Solidity é digitado estaticamente, o usuário deve especificar cada variável. Os tipos de dados permitem que o compilador verifique o uso correto das variáveis. Os tipos de dados do Solidity são geralmente categorizados como tipos de valor ou tipos de referência.
A principal diferença entre os tipos de valor e os tipos de referência pode ser encontrada em como eles são atribuídos a uma variável e armazenados no EVM (Ethereum Virtual Machine). Embora alterar o valor em uma variável de um tipo de valor não afete o valor em outra variável, qualquer pessoa que se refira a valores alterados em variáveis de tipo de referência pode obter valores atualizados.
Como funciona o Solidity?
A beleza do ecossistema Ethereum é que muitas criptomoedas diferentes e aplicativos descentralizados podem usá-lo. Os contratos inteligentes possibilitam que tecnologias exclusivas sejam feitas no Ethereum para todos os tipos de negócios e organizações.
Todos os anos, o mundo gasta bilhões de dólares em soluções de blockchain. Muitas dessas soluções são criadas usando o Solidity. Contratos inteligentes construídos com o Solidity podem ser pensados como uma forma de automatizar processos comerciais e não comerciais entre pessoas diferentes. Isso garante que as pessoas que fazem transações no blockchain não precisem se preocupar com riscos como fraude ou não poder usar a mesma moeda.
Um dos principais componentes que torna possível a execução do código Solidity é o EVM. O EVM é descrito como um computador virtual no blockchain que transforma as ideias das pessoas em código que executa aplicativos no blockchain.
Por dentro, o Solidity cria código em nível de máquina que é executado no EVM. Um compilador é usado para quebrar o código legível de alto nível, que ele transforma em instruções que o processador lê. Diferentes plataformas fornecem compilação gratuita de Solidity, incluindo o compilador online Remix e um compilador semelhante a um comando baixado em um PC.
Os contratos inteligentes EVM têm algumas limitações que precisam ser resolvidas. Um dos mais significativos deles é o acesso limitado a funções úteis de biblioteca para analisar estruturas JSON ou aritmética de ponto flutuante.
Funções Públicas e Privadas
As funções públicas são semelhantes às APIs que qualquer pessoa no mundo pode acessar. Qualquer pessoa pode chamá-los em seu código. As funções públicas são projetadas, em muitos casos, para processos compartilhados em uma plataforma que todos os usuários utilizam.
Por exemplo, uma função pública pode ser feita para permitir que todos os usuários de uma plataforma verifiquem o saldo de suas contas. Uma das formas mais comuns de explorar contratos inteligentes é por meio de funções públicas.
Embora os contratos inteligentes possam ser fáceis de escrever com o Solidity, geralmente é muito difícil escrevê-los com segurança. Por exemplo, se a função de retirada em um contrato inteligente não for segura, um invasor pode manipular a função vulnerável para drenar os fundos de uma conta.
Um invasor pode chamar uma função de saque para enviar dinheiro para uma conta diferente, usando um loop que repete repetidamente a função de saque.
As funções privadas só podem ser chamadas de dentro dos contratos. Eles contêm instruções que só podem ser executadas após serem chamadas por outras funções, em uma cadeia. Isso torna mais difícil para o código ser manipulado por agentes mal-intencionados.
Padrões e lógica de código
Diferentes padrões estão surgindo para determinar como os contratos inteligentes Solidity são usados para construir aplicativos no Ethereum. Esses padrões são conhecidos como padrões ERC (Ethereum Request for Comments). Os padrões são baseados em um documento que contém diretrizes sobre as funções necessárias e restrições sobre como o código deve se comportar.
Os padrões ERC que determinam como o Solidity funciona incluem:
- ERC20
- ERC165
- ERC721
- ERC223
- ERC621
- ERC777
- ERC827
- ERC884
- ERC865
- ERC1155
Existem diferentes maneiras de usar o Solidity para fazer com que os contratos inteligentes interajam uns com os outros. A solidez também pode ser usada para dar instruções específicas sobre como os dados são armazenados no contrato inteligente. A lógica e os dados em contratos inteligentes podem ser separados usando o Solidity. Usando contratos substitutos, a lógica de um contrato pode ser alterada para permitir isso.
Imutabilidade
É impossível alterar o código de um contrato inteligente depois de escrito e compilado. Isso significa que cada linha de código deve funcionar conforme o esperado, caso contrário, pode haver sérios riscos de o código ser explorado.
Como o blockchain Ethereum é imutável, é impossível alterar os dados e a lógica gravados nele. Uma maneira de contornar isso é usar um proxy para apontar para outro contrato que contém a lógica de negócios real. Isso permite que bugs sejam corrigidos enquanto uma nova versão do contrato é implementada.
Custos de Gás
Existem custos extras que são pagos para usar o Solidity na rede principal Ethereum. Alguns dos custos extras são baseados no sistema de gás em Ethereum, que exige pagamento aos mineiros para proteger a rede blockchain para que o código possa ser executado com segurança nela.
Ao redigir contratos inteligentes, é importante lembrar que os custos do gás podem determinar o desempenho de um contrato inteligente. Como as taxas de gás são pagas para cada slot de armazenamento usado, as ações executadas com o código Solidity custam gás. É improvável que um contrato inteligente de execução cara seja usado a longo prazo.
A otimização do gás ajuda a reduzir o custo do gás quando o código Solidity é executado. Alguns dos métodos mais populares de otimização de gás incluem o uso de bibliotecas e menos funções. Bibliotecas são freqüentemente usadas para salvar bytecode.
Em vez de adicionar bytecode desnecessário ao contrato inteligente, a lógica pode ser colocada em bibliotecas. Isso ajuda a manter o tamanho do contrato inteligente pequeno. Ao usar menos funções, menos bytecode é necessário e a dificuldade de auditoria de código também é reduzida.
Como o Solidity pode ser usado no Ethereum?
A solidez é usada para criar contratos inteligentes para tokens fungíveis e tokens não fungíveis. Diferentes padrões são usados para construir tokens não fungíveis e tokens fungíveis no ecossistema Ethereum.
Isso permite que diferentes tipos de casos de uso sejam criados para pessoas que usam o blockchain. A solidez permite que as pessoas usem tokens e tokens não fungíveis no Ethereum . Desde a cunhagem de tokens não fungíveis até adicioná-los para produzir pools de agricultura para interesse extra, diferentes tipos de uso para tokens são possibilitados pelo Ethereum.
Organizações Autônomas Descentralizadas (DAOs) também são possíveis pelo Solidity. Um DAO, que é um novo tipo de estrutura organizacional online, é escrito principalmente em Solidity. Os DAOs permitem que diferentes pessoas se reúnam como membros em uma plataforma online onde votam nas principais decisões do DAO.
A solidez torna possível automatizar processos dentro do DAO. Exemplos de automação de processos em DAOs incluem fazer votos para decisões-chave e a alocação de reputação aos membros do DAO por suas contribuições para o grupo.
Definindo padrões para blockchains
Solidity é muito mais do que uma linguagem de programação. Ele está definindo padrões para o futuro da tecnologia blockchain.
Graças ao número de desenvolvedores de código aberto trabalhando para melhorar a segurança e o desempenho do Solidity, milhares de aplicativos no ecossistema Ethereum continuam a depender dele para que seus aplicativos funcionem. Conforme novos padrões são criados para contratos inteligentes no Ethereum, o uso da linguagem se tornará mais seguro.