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
- Quem decide o que é um bloco quando duas partes de código discordam?
- Por que um pequeno erro no banco de dados tem o poder de dividir a cadeia ao meio?
- O que acontece com a rede se a implementação mais popular simplesmente deixar de ser mantida?
Explorar
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.