Este artigo é uma introdução suave à tecnologia blockchain e assume um conhecimento técnico mínimo. Ele tenta descrever o que é, em vez de por que eu deveria me importar, o que é descrito em outras postagens.
Peças complementares mais curtas a este são:
Então você quer usar um blockchain para isso? Alguns equívocos comuns
Confuso com blockchains? Revolução vs Evolução
Não, blockchain não é uma solução procurando um problema
Uma introdução suave à imutabilidade dos blockchains
O básico de bitcoins e blockchains
Atualização: Recentemente, publiquei um livro, The Basics of Bitcoins and Blockchains, que contém uma versão atualizada desta postagem do blog e muito, muito mais.
The Basics é um guia essencial para quem precisa aprender sobre criptomoedas, ICOs e blockchains de negócios. Escrito em inglês simples, ele fornece uma base equilibrada e livre de hype nos conceitos essenciais por trás da tecnologia revolucionária. Você pode pré-encomendar "The Basics of Bitcoins and Blockchains" agora na Amazon.com.
PARTE 1 – RESUMO EXECUTIVO
As pessoas usam o termo 'tecnologia blockchain' para significar coisas diferentes, e isso pode ser confuso. Às vezes, eles estão falando sobre o The Bitcoin Blockchain, às vezes é o The Ethereum Blockchain, às vezes são outras moedas virtuais ou tokens digitais, às vezes são contratos inteligentes. Na maioria das vezes, porém, eles estão falando sobre distributed ledgers (livros-razão distribuídos), ou seja, uma lista de transações que é replicada em vários computadores, em vez de ser armazenada em um servidor central.
Os temas comuns parecem ser um armazenamento de dados que:
geralmente contém transações financeiras
é replicado em vários sistemas em tempo quase real
geralmente existe em uma rede ponto a ponto (peer-to-peer)
usa criptografia e assinaturas digitais para provar identidade, autenticidade e impor direitos de acesso de leitura/gravação
pode ser escrito por determinados participantes
pode ser lido por determinados participantes, talvez um público mais amplo, e
tem mecanismos para dificultar a alteração de registros históricos, ou pelo menos facilitar a detecção quando alguém está tentando fazer isso
Eu vejo a “tecnologia blockchain” como uma coleção de tecnologias, um pouco como um saco de Lego. Do saco, você pode tirar diferentes peças e juntá-las de diferentes maneiras para criar diferentes resultados.
Eu vejo a tecnologia blockchain como um saco de Lego ou peças
Qual a diferença entre um blockchain e um banco de dados normal? De forma muito geral, um sistema blockchain é um pacote que contém um banco de dados normal mais algum software que adiciona novas linhas, valida se as novas linhas estão em conformidade com as regras pré-acordadas e escuta e transmite novas linhas para seus pares em uma rede, garantindo que todos os pares tenham os mesmos dados em seus bancos de dados.
O ecossistema Bitcoin Blockchain é, na verdade, um sistema bastante complexo devido aos seus objetivos duplos: que qualquer pessoa possa escrever no The Bitcoin Blockchain; e que não deve haver nenhum poder ou controle centralizado. Relaxe isso, e você não precisará de muitos dos mecanismos complicados do Bitcoin.
Dito isso, vamos começar com o ecossistema The Bitcoin Blockchain e, em seguida, tentar separar a parte blockchain da parte bitcoin.
Bancos de dados replicados. O ecossistema Bitcoin Blockchain funciona como uma rede de bancos de dados replicados, cada um contendo a mesma lista de transações bitcoin passadas. Membros importantes da rede são chamados de validadores ou nós que transmitem dados de transação (pagamentos) e dados de bloco (adições ao livro-razão). Cada validador verifica independentemente os dados de pagamento e bloco que estão sendo transmitidos. Existem regras em vigor para fazer a rede operar como pretendido.
A complexidade do Bitcoin vem de sua ideologia. O objetivo do bitcoin era ser descentralizado, ou seja, não ter um ponto de controle, e ser relativamente anônimo. Isso influenciou como o bitcoin se desenvolveu. Nem todos os ecossistemas blockchain precisam ter os mesmos mecanismos, especialmente se os participantes puderem ser identificados e confiáveis para se comportar.
Veja como o bitcoin aborda algumas das decisões:
Blockchains públicos vs privados
Há uma grande diferença em quais tecnologias você precisa, dependendo se você permite que qualquer pessoa escreva em seu blockchain ou participantes conhecidos e verificados. O Bitcoin, em teoria, permite que qualquer pessoa escreva em seu livro-razão (mas, na prática, apenas cerca de 20 pessoas/grupos realmente o fazem).
Blockchains públicos. Os livros-razão podem ser 'públicos' em dois sentidos:
Qualquer pessoa, sem permissão concedida por outra autoridade, pode gravar dados
Qualquer pessoa, sem permissão concedida por outra autoridade, pode ler dados
Normalmente, quando as pessoas falam sobre blockchains públicos, elas querem dizer que qualquer um pode escrever.
Como o bitcoin é projetado como um blockchain 'qualquer um pode escrever', onde os participantes não são verificados e podem adicionar ao livro-razão sem precisar de aprovação, ele precisa de maneiras de arbitrar discrepâncias (não há 'chefe' para decidir) e mecanismos de defesa contra ataques (qualquer um pode se comportar mal com relativa impunidade, se houver um incentivo financeiro para isso). Isso cria custo e complexidade para executar este blockchain.
Blockchains privados. Por outro lado, uma rede blockchain 'privada' é onde os participantes são conhecidos e confiáveis: por exemplo, um grupo da indústria ou um grupo de empresas de propriedade de uma empresa guarda-chuva. Muitos dos mecanismos não são necessários – ou melhor, são substituídos por contratos legais – “Você se comportará porque assinou este pedaço de papel”. Isso altera as decisões técnicas sobre quais peças são usadas para construir a solução.
Outra forma de descrever público/privado pode ser sem permissão vs com permissão ou pseudônimo vs participantes identificados.
Aviso: esta seção não é tão suave, pois entra em detalhes em cada um dos elementos acima. Eu recomendo pegar uma xícara de chá.
ARMAZENAMENTO DE DADOS: O que é um blockchain?
Um blockchain é apenas um arquivo. Um blockchain por si só é apenas uma estrutura de dados. Ou seja, como os dados são logicamente reunidos e armazenados. Outras estruturas de dados são bancos de dados (linhas, colunas, tabelas), arquivos de texto, valores separados por vírgula (csv), imagens, listas e assim por diante. Você pode pensar em um blockchain competindo mais de perto com um banco de dados.
Blocos em uma cadeia = páginas em um livro
Por analogia, um livro é uma cadeia de páginas. Cada página de um livro contém:
o texto: por exemplo, a história
informações sobre si mesmo: no topo da página, geralmente há o título do livro e, às vezes, o número ou título do capítulo; na parte inferior, geralmente está o número da página que informa onde você está no livro. Esses 'dados sobre dados' são chamados de metadados.
Da mesma forma, em um bloco de blockchain, cada bloco tem:
o conteúdo do bloco, por exemplo, no bitcoin, são as transações bitcoin e a recompensa de incentivo do minerador (atualmente 25 BTC).
um 'cabeçalho' que contém os dados sobre o bloco. No bitcoin, o cabeçalho inclui algumas informações técnicas sobre o bloco, uma referência ao bloco anterior e uma impressão digital (hash) dos dados contidos neste bloco, entre outras coisas. Este hash é importante para a ordenação.
Blocos em uma cadeia referem-se a blocos anteriores, como números de página em um livro.
Veja este infográfico para uma visualização dos dados no blockchain do Bitcoin.
Ordenação de blocos em um blockchain
Página por página. Com os livros, os números de página previsíveis tornam mais fácil saber a ordem das páginas. Se você arrancasse todas as páginas e as embaralhasse, seria fácil colocá-las de volta na ordem correta, onde a história faz sentido.
Bloco por bloco. Com blockchains, cada bloco faz referência ao bloco anterior, não por 'número do bloco', mas pela impressão digital do bloco, que é mais inteligente do que um número de página porque a própria impressão digital é determinada pelo conteúdo do bloco.
A referência a blocos anteriores cria uma cadeia de blocos – um blockchain!
Consistência interna. Ao usar uma impressão digital em vez de um carimbo de data/hora ou uma sequência numérica, você também obtém uma boa maneira de validar os dados. Em qualquer blockchain, você pode gerar as impressões digitais do bloco usando alguns algoritmos. Se as impressões digitais forem consistentes com os dados e as impressões digitais se juntarem em uma cadeia, você poderá ter certeza de que o blockchain é internamente consistente. Se alguém quiser mexer em algum dos dados, terá que regenerar todas as impressões digitais daquele ponto em diante e o blockchain ficará diferente.
Uma espiada dentro de um bloco de blockchain: as impressões digitais são exclusivas do conteúdo do bloco.
Isso significa que, se for difícil ou lento criar essa impressão digital (consulte a seção "tornando difícil para os bandidos serem maus"), também pode ser difícil ou lento reescrever um blockchain.
A lógica no bitcoin é:
Dificulte a geração de uma impressão digital que satisfaça as regras do The Bitcoin Blockchain
Portanto, se alguém quiser reescrever partes do The Bitcoin Blockchain, levará muito tempo e terá que alcançar e ultrapassar o resto da rede honesta
É por isso que as pessoas dizem que o The Bitcoin Blockchain é imutável (não pode ser alterado)*.
DISTRIBUIÇÃO DE DADOS: Como os novos dados são comunicados?
Peer-to-peer é uma forma de distribuir dados em uma rede. Outra forma é cliente-servidor. Você pode ter ouvido falar de compartilhamento de arquivos ponto a ponto na rede BitTorrent, onde os arquivos são compartilhados entre os usuários, sem um servidor central controlando os dados. É por isso que o BitTorrent permaneceu resiliente como uma rede: não há servidor central para desligar.
Cliente-servidor
No ambiente de escritório, geralmente os dados são mantidos em servidores e, onde quer que você faça login, você pode acessar os dados. O servidor detém 100% dos dados e os clientes confiam que os dados são definitivos. A maior parte da internet é cliente-servidor, onde o site é mantido no servidor e você é o cliente quando o acessa. Isso é muito eficiente e um modelo tradicional em computação.
Ponto a ponto (Peer-to-peer)
Em modelos ponto a ponto, é mais como uma rede de fofoca, onde cada par tem 100% dos dados (ou o mais próximo possível disso), e as atualizações são compartilhadas. Ponto a ponto é, de certa forma, menos eficiente do que cliente-servidor, pois os dados são replicados muitas vezes; uma vez por máquina, e cada alteração ou adição aos dados cria muita fofoca barulhenta. No entanto, cada par é mais independente e pode continuar operando até certo ponto se perder a conectividade com o resto da rede. Além disso, as redes ponto a ponto são mais robustas, pois não há servidor central que possa ser controlado, portanto, fechar redes ponto a ponto é mais difícil.
Ilustração de redes cliente-servidor e peer-to-peer
Os problemas com ponto a ponto
Com modelos ponto a ponto, mesmo que todos os pares sejam 'confiáveis', pode haver um problema de concordância ou consenso – se cada par estiver atualizando em velocidades diferentes e tiver estados ligeiramente diferentes, como você determina o estado “real” ou “verdadeiro” dos dados?
Pior, em uma rede ponto a ponto 'não confiável', onde você não pode necessariamente confiar em nenhum dos pares, como você garante que o sistema não possa ser facilmente corrompido por pares ruins?
CONSENSO: Como você resolve conflitos?
Um conflito comum é quando vários mineradores criam blocos quase ao mesmo tempo. Como os blocos levam tempo para serem compartilhados na rede, qual deve contar como o bloco legítimo?
Exemplo. Digamos que todos os nós da rede sincronizaram seus blockchains e todos estão no bloco número 80.
Se três mineradores em todo o mundo criarem o 'Bloco 81' quase ao mesmo tempo, qual 'Bloco 81' deve ser considerado válido? Lembre-se de que cada 'Bloco 81' parecerá um pouco diferente: certamente conterá um endereço de pagamento diferente para a recompensa do bloco de 25 BTC; e eles podem conter um conjunto diferente de transações. Vamos chamá-los de 81a, 81b, 81c.
Qual bloco deve contar como o legítimo?
Como você resolve isso?
Regra da cadeia mais longa. No bitcoin, o conflito é resolvido por uma regra chamada “regra da cadeia mais longa”.
No exemplo acima, você presumiria que o primeiro 'Bloco 81' que você vê é válido. Digamos que você veja 81a primeiro. Você pode começar a construir o próximo bloco nisso, tentando criar 82a:
Trate o primeiro bloco que você vê como legítimo.
No entanto, em alguns segundos você pode ver 81b. Se você vir isso, fique de olho nele. Se mais tarde você vir 82b, a “regra da cadeia mais longa” diz que você deve considerar a cadeia 'b' mais longa como a válida (...80, 81b, 82b) e ignorar a cadeia mais curta (...80, 81a). Então você para de tentar fazer 82a e, em vez disso, começa a tentar fazer 83b:
Regra da cadeia mais longa: se você vir vários blocos, trate a cadeia mais longa como legítima.
A “regra da cadeia mais longa” é a regra que o ecossistema blockchain do bitcoin usa para resolver esses conflitos que são comuns em redes distribuídas.
No entanto, com uma rede blockchain mais centralizada ou confiável, você pode tomar decisões usando um validador confiável ou sênior para arbitrar nesses casos.
Como uma rede como um todo, você deve concordar antecipadamente que tipo de dado é válido para ser transmitido e o que não é. Com o bitcoin, existem regras técnicas para transações (você preencheu todos os campos de dados necessários? Está no formato correto? etc.) e existem regras de negócios (você está tentando gastar mais bitcoins do que tem? Você está tentando gastar os mesmos bitcoins duas vezes?).
As regras mudam. À medida que essas regras evoluem com o tempo, como os participantes da rede concordarão com as alterações? Haverá uma situação em que metade da rede pensa que uma transação é válida e a outra metade não pensa assim por causa de diferenças na lógica?
Em uma rede privada e controlada, onde alguém tem controle sobre as atualizações, este é um problema fácil de resolver: “Todos devem atualizar para a nova lógica até 31 de julho”.
No entanto, em uma rede pública e não controlada, é um problema mais desafiador.
Com o bitcoin, existem duas partes para as atualizações.
Sugerir a alteração (BIPs). Primeiro, há o estágio de proposta, onde as melhorias são propostas, discutidas e escritas. Uma proposta é referida como um “BIP” – um “Bitcoin Improvement Proposal”. Se for escrito no software principal do Bitcoin no Github, ele pode fazer parte de uma atualização – a próxima versão do “Bitcoin core”, que é a “implementação de referência” mais comum do protocolo.
Adotar a alteração (mineradores). A atualização pode ser baixada por nós e fabricantes de blocos (mineradores) e executada, mas apenas se eles quiserem (você pode imaginar uma alteração que reduz a recompensa de mineração de 25 BTC por bloco para 0 BTC. Veremos quantos mineradores escolhem executar isso!). Se a maioria da rede (no bitcoin, a maioria é determinada pelo poder computacional) optar por executar uma nova versão do software, então blocos de novo estilo serão criados mais rapidamente do que a minoria, e a minoria será forçada a mudar ou se tornar irrelevante em um “fork do blockchain”. Portanto, os mineradores com muito poder computacional têm uma boa dose de “palavra” sobre o que é implementado.
ACESSO DE GRAVAÇÃO: Como você controla quem pode gravar dados?
Na rede bitcoin, teoricamente qualquer pessoa pode baixar ou escrever algum software e começar a validar transações e criar blocos. Basta ir para https://bitcoin.org/en/download e executar o software “Bitcoin core”.
Seu computador atuará como um nó completo, o que significa:
Conectando-se à rede bitcoin
Baixando o blockchain
Armazenando o blockchain
Ouvindo transações
Validando transações
Repassando transações válidas
Ouvindo blocos
Validando blocos
Repassando blocos válidos
Criando blocos
'Minerando' os blocos
O código-fonte deste software “Bitcoin core” é publicado no Github: https://github.com/bitcoin/bitcoin. Se você for tão inclinado, pode verificar o código, compilá-lo e executá-lo você mesmo, em vez de baixar o software pré-embalado em bitcoin.org. Ou você pode até escrever seu próprio código, desde que esteja em conformidade com o protocolo.
Observe que você não precisa se inscrever, fazer login ou se candidatar para ingressar na rede. Você pode simplesmente seguir em frente e participar. Compare isso com a rede SWIFT, onde você não pode simplesmente baixar algum software e começar a ouvir mensagens SWIFT. Desta forma, alguns chamam o bitcoin de 'sem permissão' vs SWIFT, que seria 'com permissão'.
Sem permissão não é a única maneira
Você pode querer usar a tecnologia blockchain em uma rede privada e confiável. Você pode não querer publicar todas as regras do que é uma transação ou bloco válido. Você pode querer controlar como as regras da rede são alteradas. É mais fácil controlar uma rede privada confiável do que uma rede pública não confiável e gratuita para todos, como o bitcoin.
DEFESA: Como você dificulta para os bandidos?
Um problema com redes sem permissão ou abertas é que elas podem ser atacadas por qualquer pessoa. Portanto, é preciso haver uma maneira de tornar a rede como um todo confiável, mesmo que atores específicos não sejam.
O que os malfeitores podem e não podem fazer?
Um minerador desonesto pode:
Recusar-se a retransmitir transações válidas para outros nós
Tentar criar blocos que incluam ou excluam transações específicas de sua escolha
Tentar criar uma 'cadeia mais longa' de blocos que faça com que os blocos aceitos anteriormente se tornem 'órfãos' e não façam parte da cadeia principal
Ele não pode:
Criar bitcoins do nada*
Roubar bitcoins da sua conta
Fazer pagamentos em seu nome ou fingir ser você
Isso é um alívio.
*Bem, ele pode, mas apenas sua versão do livro-razão terá essas transações. Outros nós rejeitarão isso, e é por isso que é importante confirmar uma transação em vários nós.
Com as transações, o efeito que um minerador desonesto pode ter é muito limitado. Se o resto da rede for honesto, eles rejeitarão quaisquer transações inválidas vindas dele e ouvirão sobre transações válidas de outros nós honestos, mesmo que ele esteja se recusando a repassá-las.
Com os blocos, se o malfeitor tiver poder de criação de bloco suficiente (e é nisso que tudo se resume), ele pode atrasar sua transação, recusando-se a incluí-la em seus blocos. No entanto, sua transação ainda será conhecida por outros nós honestos como uma 'transação não confirmada', e eles a incluirão em seus blocos.
Pior, porém, é se o malfeitor puder criar uma cadeia de blocos mais longa do que o resto da rede e invocar a “regra da cadeia mais longa” para eliminar as cadeias mais curtas. Isso permite que ele desfaça uma transação.
Veja como você pode fazer isso:
Crie dois pagamentos com os mesmos bitcoins: um para um varejista online, o outro para você mesmo (outro endereço que você controla)
Transmita apenas o pagamento que paga o varejista
Quando o pagamento for adicionado em um bloco honesto, o varejista enviará as mercadorias
Crie secretamente uma cadeia mais longa de blocos que exclua o pagamento ao varejista e inclua o pagamento a você mesmo
Publique a cadeia mais longa. Se os outros nós estiverem jogando de acordo com a regra da “regra da cadeia mais longa”, eles ignorarão o bloco honesto com o pagamento do varejista e continuarão a construir em sua cadeia mais longa. O bloco honesto é considerado 'órfão' e não existe para todos os efeitos.
O pagamento original ao varejista será considerado inválido pelos nós honestos porque esses bitcoins já foram gastos (em sua cadeia mais longa)
O ataque de “gasto duplo”.
Isso é chamado de "gasto duplo" porque os mesmos bitcoins foram gastos duas vezes – mas o segundo foi o que se tornou parte do eventual blockchain, e o primeiro eventualmente é rejeitado.
Como você dificulta para mineradores desonestos criarem blocos?
Lembre-se, isso só é um problema para livros-razão onde os criadores de blocos não são confiáveis.
Essencialmente, você quer dificultar ou tornar caro para os bandidos adicionarem blocos. No bitcoin, isso é feito tornando computacionalmente caro adicionar blocos. Computacionalmente caro significa “requer muito poder de processamento do computador” e se traduz em financeiramente caro (já que os computadores precisam ser comprados, executados e mantidos).
A própria computação é um jogo de adivinhação onde os fabricantes de blocos precisam adivinhar um número, que quando processado com o resto do conteúdo dos dados do bloco, resulta em um hash/impressão digital que é menor do que um determinado número. Esse número está relacionado à 'dificuldade' da mineração, que está relacionada ao poder de processamento total da rede. Quanto mais computadores se juntam para processar blocos, mais difícil fica, em um ciclo autorregulado.
A cada 2.016 blocos (aproximadamente a cada 2 semanas), a rede bitcoin ajusta a dificuldade do jogo de adivinhação com base na velocidade com que os blocos foram criados.
Este jogo de adivinhação é chamado de “Prova de trabalho” (Proof of Work). Ao publicar o bloco com a impressão digital que é menor que o número alvo, você está provando que fez trabalho de adivinhação suficiente para satisfazer a rede naquele momento.
INCENTIVOS: Como você paga os validadores?
A validação de transações e blocos é barata e rápida, a menos que você escolha torná-la lenta e cara (como no bitcoin).
Se você controla os validadores em sua própria rede, ou eles são confiáveis, então
você não precisa tornar caro adicionar blocos, e
portanto, você pode reduzir a necessidade de incentivá-los
Você pode usar outros métodos, como "Pagaremos pessoas para executar validadores" ou "As pessoas assinam um contrato para executar validadores e se comportar".
Por causa da estrutura 'pública' do bitcoin, ele precisa de uma defesa contra malfeitores e, portanto, usa a “prova de trabalho” para dificultar computacionalmente a adição de um bloco (consulte a seção Defesa). Isso criou um custo (equipamento e custos de funcionamento) de mineração e, portanto, uma necessidade de incentivo.
Assim como o preço do ouro determina quanto equipamento você pode gastar em uma mina de ouro, o preço do bitcoin determina quanto poder de mineração é usado para proteger a rede. Quanto maior o preço, mais mineração há e mais um malfeitor tem que gastar para intimidar a rede.
Então, os mineradores fazem muita mineração, aumentando a dificuldade e erguendo as paredes contra ataques à rede. Eles são recompensados em bitcoin de acordo com um cronograma e, com o tempo, à medida que as recompensas do bloco diminuem, as taxas de transação se tornam o incentivo que os mineradores coletam.
A situação idealizada no Bitcoin, onde as recompensas do bloco são substituídas por taxas de transação.
Tudo isso é muito bom em teoria, mas quanto mais você olha para isso, mais interessante fica, e com a solução bitcoin, os incentivos podem não ter funcionado como esperado. Isso é algo para outro artigo…
CONCLUSÃO
É útil entender blockchains no contexto do bitcoin, mas você não deve presumir que todos os ecossistemas blockchain precisam de mecanismos bitcoin, como tokens, mineração de prova de trabalho, regra da cadeia mais longa, etc. O Bitcoin é a primeira tentativa de manter um livro-razão público descentralizado sem controle ou governança formal. O Ethereum é a próxima iteração de um blockchain com contratos inteligentes. Existem desafios significativos envolvidos.
Por outro lado, livros-razão distribuídos privados ou internos e blockchains podem ser implantados para resolver outros conjuntos de problemas. Como sempre, existem compensações e prós e contras para cada solução, e você precisa considerá-los individualmente para cada caso de uso individual.
Se você tiver um problema de negócios específico que você acha que pode ser resolvido com um blockchain, eu adoraria ouvir sobre isso: entre em contato comigo.