O objetivo da lição: familiarizar-se com os princípios da blockchain Ethereum, suas áreas de aplicação e terminologia básica.
Exercícios
práticos : não fornecidos nesta lição.
Atualmente, dificilmente existe um desenvolvedor de software que ouça nada sobre a tecnologia Blockchain, criptomoedas (moeda criptográfica ou criptográfica), Bitcoins (Bitcoin), oferta inicial de moedas (ICO, oferta inicial de moedas), contratos inteligentes (Contrato Inteligente), bem como outros conceitos e termos relacionados ao blockchain.
A tecnologia Blockchain abre novos mercados e cria empregos para programadores. Se você entender todos os meandros das tecnologias de criptomoeda e tecnologias de contrato inteligente, não deverá ter problemas em aplicar esse conhecimento na prática.
Devo dizer que há muita especulação sobre criptomoedas e blockchains. Deixaremos de lado discussões sobre mudanças nas taxas de criptomoedas, sobre a criação de pirâmides, sobre os meandros da legislação sobre criptomoedas, etc. Em nosso curso de treinamento, focaremos principalmente nos aspectos técnicos da aplicação dos contratos inteligentes da Ethereum blockchain (Ethereum, éter) e no desenvolvimento do chamado Aplicativo Distribuído (DApp).
O que é blockchain?
Blockchain (Blockchain, Block Chain) é uma cadeia de blocos de dados conectados de uma certa maneira. No início da cadeia é o primeiro bloco chamado bloco de gênese ou bloco de gênese. É seguido por um segundo, depois um terceiro e assim por diante.
Todos esses blocos de dados são duplicados automaticamente em vários nós da rede blockchain. Isso garante o armazenamento descentralizado dos dados da blockchain.
Você pode imaginar o sistema blockchain como um grande número de nós (servidores físicos ou virtuais), em rede e replicando todas as alterações na cadeia de blocos de dados. É como um computador multiservidor gigante, e os nós desse computador (servidores) podem estar espalhados pelo mundo. E você também pode adicionar seu computador à rede blockchain.
Banco de dados distribuído
Blockchain pode ser imaginado como um banco de dados distribuído replicado para todos os nós da rede blockchain. Em teoria, o blockchain estará operacional enquanto pelo menos um nó que armazena todos os blocos do blockchain estiver funcionando.
Registro de dados distribuídos
Blockchain pode ser imaginado como um registro distribuído de dados e operações (transações). Outro nome para esse registro é razão.
Você pode adicionar dados a um registro distribuído, mas não pode alterá-los ou excluí-los. Essa impossibilidade é alcançada, em particular, usando algoritmos criptográficos, algoritmos especiais para adicionar blocos à cadeia e armazenamento descentralizado de dados.
Ao adicionar blocos e executar operações (transações), chaves privadas e públicas são usadas. Eles restringem os usuários de blockchain, dando-lhes acesso apenas aos seus blocos de dados.
Transações
A blockchain armazena informações sobre operações (transações) em blocos. Ao mesmo tempo, transações antigas já concluídas não podem ser revertidas ou alteradas. Novas transações são armazenadas em novos blocos adicionados.
Assim, todo o histórico de transações pode ser registrado inalterado no blockchain. Portanto, o blockchain pode ser usado, por exemplo, para armazenar com segurança operações bancárias, informações sobre direitos autorais, um histórico de alterações na propriedade imobiliária etc.
A blockchain Ethereum contém os chamados estados do sistema. À medida que as transações são concluídas, o estado muda de inicial para atual. As transações são gravadas em blocos.
Bloqueios públicos e privados
Deve-se notar que tudo o que foi dito acima é verdadeiro apenas para as chamadas redes públicas de blockchain, que não podem ser controladas por indivíduos ou entidades legais, órgãos estatais ou governos.
As chamadas redes privadas de blockchain estão sob o controle total de seus criadores, e tudo é possível lá, por exemplo, a substituição completa de todos os blocos da cadeia.
Aplicações práticas de Blockchain
O que a blockchain pode trazer?
Em resumo, o blockchain permite realizar transações (transações) com segurança entre pessoas que não confiam umas nas outras ou em empresas. Os dados gravados no blockchain (transações, dados pessoais, documentos, certificados, contratos, faturas etc.) não podem ser falsificados ou substituídos após a gravação. Portanto, com base no blockchain, você pode criar, por exemplo, registros distribuídos confiáveis de vários tipos de documentos.
Obviamente, você sabe que os sistemas de criptomoeda são criados com base em blockchains, projetados para substituir o papel-moeda comum. O papel-moeda também é chamado de moeda fiduciária (da Fiat Money).
A blockchain fornece armazenamento e imutabilidade de transações registradas em blocos, portanto, também pode ser usada para criar sistemas de criptomoeda. Ele contém todo o histórico da transferência de fundos de criptografia entre diferentes usuários (contas) e qualquer operação pode ser rastreada.
Embora as transações nos sistemas de criptomoeda possam ser anônimas, retirar a criptomoeda e trocá-la por dinheiro fiduciário geralmente leva à divulgação da identidade do proprietário do ativo de criptomoeda.
Os chamados contratos inteligentes, que são softwares executados na rede Ethereum, automatizam o processo de conclusão de negócios e controle de sua execução. Isso é especialmente eficaz se o pagamento da transação for realizado com criptomoeda Ether.
O blockchain Ethereum e os contratos inteligentes Ethereum escritos na linguagem de programação Solidity podem ser usados, por exemplo, nas seguintes áreas:
- alternativa ao reconhecimento de firma de documentos;
- armazenamento do registro de imóveis e informações sobre transações com imóveis;
- armazenamento de informações de direitos autorais sobre propriedade intelectual (livros, imagens, música etc.);
- criação de sistemas de votação independentes;
- finanças e bancos;
- logística internacional, acompanhando o movimento de mercadorias;
- armazenamento de dados pessoais como análogo de um sistema de cartões de identidade;
- transações seguras no campo comercial;
- armazenamento dos resultados dos exames médicos, bem como a história dos procedimentos prescritos
Problemas de Blockchain
Mas, é claro, nem tudo é tão simples quanto parece!
Há problemas com a verificação dos dados antes de adicioná-los ao blockchain (por exemplo, eles não são falsos?), Problemas na segurança do sistema e software de aplicativos usados para trabalhar com o blockchain, problemas com a capacidade de usar métodos de engenharia social para roubar acesso a carteiras de criptomoedas etc. .p.
Novamente, se não se trata de uma blockchain pública, cujos nós estão espalhados por todo o mundo, mas de uma blockchain privada de propriedade de uma pessoa ou organização, o nível de confiança aqui não será maior que o nível de confiança nessa pessoa ou organização.
Também deve-se ter em mente que os dados gravados na blockchain ficam disponíveis para todos. Nesse sentido, o blockchain (especialmente o público) não é adequado para armazenar informações confidenciais. No entanto, o fato de que as informações na blockchain não podem ser alteradas pode ajudar a prevenir ou investigar todos os tipos de atividades fraudulentas.
Os aplicativos Ethereum descentralizados serão convenientes se você pagar pelo uso com criptomoeda. Quanto mais pessoas possuírem uma criptomoeda ou estiverem prontas para comprá-la, mais aplicativos DApp mais populares e contratos inteligentes obterão.
Entre os problemas comuns da blockchain que impedem sua aplicação prática, pode-se mencionar a velocidade limitada de adicionar novos blocos e o custo relativamente alto das transações. Mas as tecnologias nessa área estão se desenvolvendo ativamente e há esperanças de que os problemas técnicos sejam resolvidos com o tempo.
Outro problema é que os contratos inteligentes de blockchain da Ethereum funcionam em um ambiente isolado de máquina virtual e não têm acesso a dados do mundo real. Em particular, o programa de contrato inteligente não pode ler dados de sites ou dispositivos físicos (sensores, contatos etc.), nem pode enviar dados para dispositivos externos. Discutiremos esse problema e os métodos para resolvê-lo em uma lição dedicada aos chamados Oracles - intermediários de informações de contratos inteligentes.
Também existem restrições legais. Em alguns países, por exemplo, é proibido usar criptomoeda como meio de pagamento, mas você pode possuí-lo como um tipo de ativo digital, como títulos. Esses ativos podem ser comprados e vendidos na bolsa de valores. De qualquer forma, ao criar um projeto que funcione com criptomoedas, você precisa se familiarizar com a legislação do país sob cuja jurisdição seu projeto se enquadra.
Como é formada a cadeia de blockchain
Como já dissemos, a blockchain é uma cadeia simples de blocos de dados. Primeiro, o primeiro bloco dessa cadeia é formado, depois o segundo bloco é adicionado e assim por diante. Supõe-se que os dados da transação sejam armazenados em blocos e adicionados ao último bloco.
Na fig. 1.1, mostramos a versão mais simples de uma sequência de blocos, onde o primeiro bloco se refere ao próximo.
Fig. 1.1 Sequência simples de blocosNesta modalidade, no entanto, é muito fácil falsificar o conteúdo de qualquer bloco na cadeia, uma vez que os blocos não contêm nenhuma informação para proteger contra alterações. Dado que o blockchain é destinado ao uso de pessoas e empresas entre as quais não há confiança, podemos concluir que esse método de armazenamento de dados para o blockchain não é adequado.
Vamos proteger os blocos de falsificação. No primeiro estágio, tentaremos proteger cada bloco com uma soma de verificação (Fig. 1.2).
Fig. 1.2 Adicionar proteção de bloco de dados com uma soma de verificaçãoAgora, um invasor não pode simplesmente alterar um bloco porque contém uma soma de verificação dos dados do bloco. A verificação da soma de verificação mostrará que os dados foram alterados.
Para calcular a soma de verificação, você pode usar uma das funções de hash, como MD-5, SHA-1, SHA-256, etc. As funções de hash calculam um determinado valor (por exemplo, como uma sequência de texto de comprimento constante) como resultado da execução de operações irreversíveis em um bloco de dados. As operações dependem do tipo de função hash.
Mesmo com uma pequena alteração no conteúdo do bloco de dados, o valor da função hash também mudará. Ao analisar o valor da função hash, é impossível restaurar o bloco de dados para o qual foi calculado.
Essa proteção seria suficiente? Infelizmente não.
Nesse esquema, a soma de verificação (função hash) protege apenas blocos individuais, mas não toda a cadeia de blocos. Conhecendo o algoritmo de cálculo da função hash, um invasor pode substituir facilmente o conteúdo de um bloco. Além disso, nada o impedirá de remover blocos da cadeia ou adicionar novos.
Para proteger toda a cadeia como um todo, é possível armazenar um hash de dados do bloco anterior em cada bloco junto com os dados (Fig. 1.3).
Fig. 1.3 Adicione o hash do bloco anterior ao bloco de dadosNesse esquema, para alterar um bloco, é necessário recalcular as funções de hash de todos os blocos subsequentes. Parece, qual é o problema?
Em blockchains reais, dificuldades artificiais são criadas adicionalmente para adicionar novos blocos - são usados algoritmos que exigem muitos recursos de computação. Dado que para fazer alterações em um bloco, não é apenas um bloco que precisa ser contado, mas todos os subsequentes, será extremamente difícil fazer isso.
Lembre-se também de que os dados da blockchain são armazenados (duplicados) em vários nós da rede, ou seja, . , .. .
, .
Ethereum
Ethereum , DApp. , Ethereum (-, smart contracts), Solidity.
2013 , Bitcoin Magazine, 2015 . , , Ethereum - Solidity.
(mining) , « ». , .. Ethereum.
, , (miner).
(), , Nonce, -, . Ethash, Ethereum, Nonce .
Nonce, (PoW, Proof-of-work). , Ethereum, — Ether. 5 Ether, .
, Ethereum , , . , Solidity DApp Ethereum.
, . , , .
. — ( ), . , Ethereum - Solidity. , , ..
, . , , , , - , , .
. . , , .