Em um recente meetup para desenvolvedores de Bitcoin em São Francisco, foi apresentada uma nova versão do software Bitcoin Core v0.15, que está sendo preparada para lançamento. Um relatório detalhado descrevendo as principais mudanças foi preparado por Gregory Maxwell, da Blockstream.
O lançamento da nova versão do cliente oficial era esperado para o dia 1.º de setembro, mas essa data foi adiada para 14 ou 15 de setembro. Conforme observado por Maxwell, esse atraso de duas semanas está associado a uma alta atividade por parte dos desenvolvedores, além de que nem todos eles têm acesso às chaves criptográficas necessárias.
The video of Greg Maxwell’s talk about Bitcoin Core 0.15 is now available https://t.co/z7qP124kr1
— SF Bitcoin Devs (@SFBitcoinDevs) 2 de setembro de 2017
Desde fevereiro de 2017, quando o trabalho começou no Bitcoin Core 0.15, foram feitos 627 pedidos de inclusão de código por 95 autores, que continham 1081 compromissos (mudanças). Assim, em média, 6 compromissos foram criados a cada dia, o que, em comparação com outros projetos de criptomoeda, é em si um valor notável.
Outra característica foi que 20% dos compromissos foram associados à rede de teste. Uma parte importante deles foi criada pela Jnewbery da Chaincode Labs, que primeiro se juntou à equipe de desenvolvimento do Bitcoin Core em novembro de 2016 e desde então tem sido bastante ativa.
No total, 52 mil linhas de código foram alteradas/adicionadas, o que também pode ser considerado um indicador alto.
Foco principal
De acordo com Maxwell, enquanto trabalhava na v0.15, várias áreas foram consideradas, mas o foco principal foi no desempenho geral do software. Uma das razões é o rápido crescimento do Bitcoin, que requer um software mais rápido. Conforme observado por Maxwell, levando em conta a ativação do protocolo Segregated Witness, os desenvolvedores perceberam que a blockchain cresceria a um ritmo ainda mais rápido, motivo pelo qual havia um desejo de otimizar o desempenho tanto quanto possível.
Além disso, outras áreas problemáticas, de acordo com ele, foram melhoradas, de modo que o trabalho do software tornou-se supostamente mais confiável. No entanto, permanecem áreas sobre as quais o trabalho não foi realizado. Por exemplo, as mudanças não tocaram as regras do consenso – foi decidido seguir o comportamento da rede após a ativação do SegWit. Além disso, várias características da carteira também são mais fáceis de implementar com o SegWit já ativado, de modo que sua implementação também foi suspensa.
Chainstate (UTXO)
Falando em melhorar a produtividade, uma das áreas mais importantes do trabalho tem sido uma reformulação completa do banco de dados Chainstate (UTXO), ou seja, as saídas das transações não utilizadas. A Chainstate armazena as informações necessárias para a validação de novos blocos. A estrutura atual do banco de dados é usada a partir da versão 0.80 e, mesmo com sua implementação inicial, o desempenho cresceu cerca de 40 vezes.
Na nova versão, esse indicador será ainda maior, inclusive mudando a própria estrutura de armazenamento de dados: ao contrário da versão anterior, que apenas um registro é armazenado na saída. Como resultado, de acordo com Maxwell, conseguiu-se alcançar um aumento de 40% na taxa de sincronização e uma diminuição de 10% no uso de memória (RAM) para o mesmo número de entradas de cache.
O reverso desta inovação, no entanto, foi um aumento de 15% no tamanho do banco de dados no disco (até 2,8 GB), mas, conforme observado pelos desenvolvedores, a melhoria geral do desempenho é totalmente compensada.
Bitcoin Core 0.15 changed DB format for storing UTXOs. It’s 700MB larger but over twice as fast. This is what on-chain scaling looks like. pic.twitter.com/QMle3deDhm
— Jameson Lopp (@lopp) 4 de setembro de 2017
Uma vez que essas mudanças estão no cerne do algoritmo de consenso do Bitcoin, seus testes têm sido desafiadores: a equipe do Bitcoin Core teve que evitar a situação em que as mudanças levariam a danos ou perda de registros e, consequentemente, a uma separação da cadeia.
Inicialmente, o autor do código responsável por essas mudanças foi o desenvolvedor do SegWit, Peter Welle, após o qual o código foi auditado publicamente durante dois meses. Conforme o relatório, este foi um processo completo, durante o qual 145 comentários foram deixados, perguntas foram feitas e esclarecidas, e cada linha foi cuidadosamente estudada.
Além disso, utilizou-se o mecanismo de teste mutacional – um método para testar software, que inclui pequenas mudanças no código do programa. Se o conjunto de testes não for capaz de detectar tais mudanças, ele é considerado insuficiente.
Descarga retardada (não atômica) do cache
Outra melhoria relacionada ao banco de dados Chainstate foi uma descarga retardada (não atômica) do cache. Como Maxwell explica, o cache desse banco de dados no Bitcoin deve ser considerado como um buffer de troca. Em particular, evita a gravação de informações e blocos de transações, que então consomem as saídas desta transação.
Este mecanismo, como um todo, funciona bastante bem, mas o problema era que, para garantir uma operação ininterrupta do sistema, o estado no disco sempre deveria ser coordenado com um bloco específico. Por exemplo, se a energia estiver desligada no computador e o cache for perdido, é necessário que o nó continue validando a partir do mesmo bloco no qual a conexão foi quebrada. É aqui que em versões anteriores do Bitcoin Core que houve alguns problemas que afetam o desempenho do software.
No processo de trabalho, os especialistas chegaram ao entendimento de que o bloco é em si uma revista com um registro de pré-checagem, e isso é exatamente o que é necessário para a ordem correta de gravação de dados. O novo código permite que o banco de dados UTXO não seja consistente com um bloco específico: em vez disso, o banco de dados contém o ponto de gravação mais antigo (por exemplo, altura do bloco) e o ponto de gravação mais recente. Quando você inicia o nó, você só precisa percorrer o bloco novamente e aplicar todas as mudanças mais uma vez.
Conforme reportado, essa solução simplificou muitos processos, além de oferecer aos desenvolvedores maior flexibilidade no gerenciamento do banco de dados no futuro.
Acelerando o trabalho da plataforma
A nova versão do cliente oficial do Bitcoin promete uma operação mais rápida de toda a plataforma. Quando o algoritmo hash SHA256 foi implementado, o assembly SSE4 foi usado, o que resultou em um aumento de 5% na velocidade inicial de download da unidade e quase 10% da velocidade de conexão com a nova unidade. Na versão 0.15, esta opção, por sinal, não é ativada por padrão, pois foi introduzida apenas três dias antes do término da adição da funcionalidade e problemas foram percebidos em computadores com MacOS.
Validação do roteiro de Caching
Outra melhoria significativa na nova versão do Bitcoin Core é o mecanismo para validação de script de cache. Desde a versão 0.7, o Bitcoin possui um mecanismo de cache que, em geral, lembra cada conjunto de chaves públicas para assinar mensagens e permite que elas sejam validadas muito mais rápido do que se estivessem em um cache normal. Vale ressaltar que esta atualização foi a última, que foi proposta por Satoshi Nakamoto no devido tempo e depois ficou um ano na caixa de e-mail de Gavin Andresen.
Além disso, este mecanismo de cache ajuda na luta contra ataques DDoS, no qual uma transação com 10.000 assinaturas válidas é enviada e a assinatura 10.001 é inválida. Nas circunstâncias atuais, tal ataque leva à necessidade de verificar novamente todas as assinaturas e encontrar o inválido, após o qual o outro participante da transação deve se reconectar e reenviar a transação, adicionando uma assinatura inválida no final da lista.
Gregory Maxwell responde uma pergunta em um parágrafo separado, a qual havia sido levantada em 2012: por que não usar o fato de que a transação já apareceu na mempoll, como um indicador que já foi validado e deve ser aceito. Segundo ele, o problema é que as regras para as transações que se enquadram na mempoll são diferentes das regras para transações no bloco. Supõe-se que eles representam um subconjunto, mas devido a erros no software podem se transformar em um superconjunto e, no passado, houve erros ao processar a mempoll, o que levou ao surgimento de transações inválidas.
Como o resto do software está estruturado, esse erro geralmente não é crítico, exceto por um pequeno consumo de memória. No entanto, se você usar o mempoll para validação, uma transação inválida se tornará instantaneamente um erro que levará à separação da cadeia. O uso de uma mempoll para este propósito também aumentará significativamente o tamanho da base do código, que reage criticamente à mudança no algoritmo de consenso, na qual nenhum dos desenvolvedores do Bitcoin Core está interessado.
Por esse motivo, a versão 0.15 possui um mecanismo de cache de validação de script separado. Ele armazena em cache sites com chaves, marca de seleção e quais regras são aplicáveis às transações. Todas as regras de validação, com exceção do número de sequência e do tempo de criação dos blocos são função do hash da transação, e tudo isso também é armazenado em cache. Para SegWit-transactions é wtxid, não apenas txid. A presença deste mecanismo de armazenamento em cache acelera o tempo de aceitação de novos blocos por nós em 50%.
Além disso, a equipe do Bitcoin Core realizou uma série de outras melhorias e atualizações de código, além de ajudar a otimizar o desempenho geral do cliente.
Multi-ferramentas
De acordo com Maxwell, os usuários foram solicitados desde 2011 para adicionar suporte para diversas carteiras e, na versão 0.15, isso finalmente foi feito. Assim, será possível carregar simultaneamente várias carteiras ao mesmo tempo. No entanto, atualmente na interface GUI, esta opção ainda não foi exibida e aparecerá na próxima versão. Na versão 0.15, está disponível na interface de linha de comando (CLI) e para chamadas de procedimento remoto (RPCs). Esta função pode ser considerada experimental e destinada a testes.
Cálculo e processamento da comissão
A versão 0.15 apresenta um mecanismo de cálculo de comissão significativamente melhorado que rastreia “horizontes de múltiplos horários” e, portanto, responde melhor às mudanças rápidas. O mecanismo suporta dois modos de design: conservador e econômico. O regime conservador é baseado em dados históricos e simplesmente indica o tamanho da comissão que garante a confirmação da transação. O regime econômico responde mais rapidamente à situação atual e mostra que quantidade de comissões será mais provável.
O novo mecanismo cobre um intervalo de tempo muito mais longo de até 1008 blocos, ou seja, aqueles concluídos em até cerca de uma semana. Os princípios fundamentais de seu trabalho, no entanto, não mudaram. Por exemplo, ao avaliar as comissões, a fila de transações atual na mempoll não é considerada, porque alguém com a esperança de uma confirmação mais rápida pode enviar uma transação com uma comissão mais alta. Não se exclui que no futuro as informações da mempoll ainda estejam envolvidas, mas apenas para um propósito – para tornar as transações mais baixas.
Outra novidade é a adição da função Substituir a Taxa na interface do usuário. Esta função permite que você force um aumento de comissão se a transação não for confirmada por um longo período de tempo, e anteriormente estava disponível apenas para RPC.
Suporte total para SegWit
É óbvio que, após a ativação do SegWit em agosto, os usuários estão se perguntando por que o cliente oficial ainda não suporta o mesmo. Como Maxwell lembra, o código correspondente foi adicionado de volta em 2016, mas foi destinado a testes. É por isso que a opção não foi exibida na interface GUI. Além disso, do ponto de vista da distribuição de recursos próprios no trabalho no Bitcoin Core 0.15, o foco principal foi melhorar o desempenho e o momento exato da ativação do SegWit não era conhecido há alguns meses atrás.
Agora, com o SegWit ativado, logo após o lançamento da nova versão será feita outra versão pequena, que incluirá suporte total para o protocolo.
Conclusão
As atualizações acima são uma parte fundamental do que está na próxima versão do Bitcoin Core 0.15, e esta é a parte que deve ser de maior interesse para os usuários, pelo menos, a parte mais tecnicamente habilitada.
Além disso, o lançamento contém outras atualizações, que podem ser de maior interesse para os desenvolvedores. Introduzir todas as atualizações nessa revisão é algo difícil, mas é possível dizer com confiança que o Bitcoin Core 0.15 se tornará um dos pontos decisivos da história do Bitcoin e se tornará a base para o desenvolvimento do ecossistema.
Chrys é fundadora e escritora ativa do BTCSoul. Desde que ouviu falar sobre Bitcoin e criptomoedas ela não parou mais de descobrir novidades. Atualmente ela se dedica para trazer o melhor conteúdo sobre as tecnologias disruptivas para o website.