MSTR Cat

Blockchain/Nível III · A rede/3.1 Nós/Lição 6

Bitcoin Core e outras implementações

Um protocolo, muitos motores: a linhagem do software Bitcoin

MateriaisUm nó Bitcoin Core em execuçãoAcesso ao terminal ou à interface de linha de comando

Curiosidade

  1. Quem decide o que é um bloco quando duas partes de código discordam?
  2. Por que um pequeno erro no banco de dados tem o poder de dividir a cadeia ao meio?
  3. O que acontece com a rede se a implementação mais popular simplesmente deixar de ser mantida?

Explorar

  1. O Bitcoin começou como um único cliente em C++ desenvolvido por Satoshi Nakamoto. Em 2011, a interface foi reescrita usando as bibliotecas Qt, e o software passou a ser conhecido como Bitcoin-Qt. Até 2014, a versão 0.9 abandonou completamente o sufixo, tornando-se Bitcoin Core. A mudança de nome refletiu uma alteração na identidade do projeto: ele não era mais apenas a ferramenta de Satoshi, mas sim a implementação de referência oficial para as regras da rede.
  2. A liderança do código-fonte passou de Gavin Andresen, que a liderou de 2010 até se afastar em 2014, para Wladimir van der Laan. Atualmente, um pequeno grupo de mantenedores funde as alterações após uma rigorosa revisão por pares. O esquema de versionamento saltou de 0,21 para 22,0 em 2021, sinalizando maturidade. Lançamentos importantes ocorrem aproximadamente duas vezes ao ano, sendo cada um submetido a testes extensivos antes da distribuição.
  3. O consenso não se trata apenas de lógica; trata-se de um comportamento idêntico, byte por byte, em dezenas de milhares de nós. Em março de 2013, a versão 0.8 introduziu o LevelDB como seu mecanismo de armazenamento. Um bloco aceito pelo novo software foi rejeitado pelas versões mais antigas que utilizavam o Berkeley DB devido a um erro no limite de bloqueios. A cadeia se dividiu até os mineradores fazerem o downgrade, demonstrando que uma diferença oculta no comportamento, nem mesmo no próprio código do consenso, pode dividir a rede.
  4. Existem implementações alternativas para evitar que um único codebase se torne um ponto de falha ou alvo de captura. O btcd é escrito em Go, o bcoin em JavaScript e o libbitcoin em C++. O Bitcoin Knots, mantido por Luke Dashjr, é um conjunto de patches sobre o Core com configurações padrão diferentes, notavelmente um filtramento mais rigoroso das transações que transportam dados. O Floresta utiliza a estrutura de dados Utreexo para uma verificação eficiente. Esses projetos servem como mecanismos de controle no processo de desenvolvimento do Core.
  5. O risco de reimplantar o mecanismo de consenso é alto, pois um erro que aceite blocos inválidos pode levar a perdas financeiras ou à divisão da cadeia. Para mitigar isso, o libbitcoinkernel visa isolar a lógica central de consenso em uma biblioteca reutilizável. Isso permite que outros softwares verifiquem transações sem duplicar todo o código do nó, garantindo que as regras permaneçam consistentes mesmo com mudanças na infraestrutura circundante.
  6. Execute 'bitcoin-cli getnetworkinfo' em um nó para ver sua própria versão, e 'getpeerinfo' para ver o software que cada peer relata (sua string 'subver'). A rede mantém a interoperabilidade apesar de usar diferentes pilhas de software, mas a dominância do Bitcoin Core significa que ele efetivamente define o ritmo das atualizações do protocolo. Nós que não fazem upgrade continuam seguindo a cadeia por meio de soft forks, mas um nó cujo comportamento de consenso diverge pode ser separado.

Fatos-chave

  • O Bitcoin-Qt foi renomeado para Bitcoin Core em 2014, com a versão 0.9.
  • Wladimir van der Laan sucedeu Gavin Andresen como responsável pela manutenção em 2014.
  • A divisão da cadeia em março de 2013 ocorreu devido a um erro no limite de bloqueio do Berkeley DB em versões mais antigas.
  • btcd, bcoin e libbitcoin são implementações alternativas escritas em Go, JavaScript e C++, respectivamente.
  • Bitcoin Knots é um derivado do Core com políticas de retransmissão mais rígidas, mantidas por Luke Dashjr.
  • O libbitcoinkernel, ainda em desenvolvimento, visa isolar o código de consenso para reutilização por outros softwares.

Exercício nove, seis, três, um

9ReunirListe 9 implementações distintas de nós Bitcoin ou principais forks do cliente principal. Indique a linguagem de programação principal e o status atual de manutenção.
6AgruparAgrupe estes 9 em 6 categorias com base em sua relação com a implementação de referência: fork direto, reescrita independente, biblioteca de consenso, projeto arquivado, alternativa ativa ou experimental.
3DestilarReduza os 6 grupos a 3 argumentos sobre se várias implementações tornam o Bitcoin mais seguro ou mais arriscado.
1CristalizarEscreva 1 frase explicando como um erro no banco de dados em uma implementação pode forçar uma divisão na cadeia global se o comportamento do consenso divergir.

Verificação de fatos

Datas, números e afirmações verificados com as fontes publicadas listadas abaixo.

Abrir na academia interativa →

EN ES ZH JA KO RU DE FR MS