183 / 736NEUTRINO

Neutrino

Como uma carteira encontra pagamentos sem baixar toda a cadeia

O telefone não precisa guardar todos os blocos de Bitcoin para a carteira encontrar os seus pagamentos. Neutrino ajuda a selecionar os blocos que merecem ser examinados e a obter os dados necessários da rede. Poupa recursos do dispositivo, mas não oferece a mesma verificação independente de um nó completo.

Neutrino é um cliente leve de Bitcoin da Lightning Labs, escrito em Go e pensado também para aplicações móveis com Lightning Network. Utiliza BIP 157 e BIP 158 para trabalhar com filtros compactos de blocos. É uma biblioteca específica, não um nome genérico para carteiras leves nem um substituto de um Full Node, que verifica todas as regras por conta própria.

Anna abre a carteira à espera de encontrar um pagamento recebido. Para mostrar o estado correto, a aplicação precisa de obter e processar dados da rede Bitcoin. Neutrino pode tratar dessa parte sem guardar permanentemente toda a cadeia de blocos no telefone. Um bloco é um conjunto de transações registado no histórico comum da rede Bitcoin. No programa, o serviço chama-se ChainService: gere ligações, uma base de dados local e a sincronização dos cabeçalhos. Um cabeçalho resume as informações básicas de um bloco. Uma chave privada é um número secreto usado para criar uma assinatura digital que autoriza um gasto. Usar Neutrino, por si só, não revela quem guarda as chaves privadas de Anna ou autoriza os envios. A gestão das chaves, os ecrãs e as cópias de segurança pertencem à carteira que utiliza a biblioteca. [1]

Um filtro compacto assemelha-se a um pequeno índice de pesquisa para um bloco. A carteira descarrega-o e verifica no próprio dispositivo se corresponde ao que procura. Na prática, compara scripts, as condições que permitem gastar determinadas saídas de Bitcoin. Uma saída é a parte de uma transação que indica um montante e as condições para o gastar depois. A carteira não precisa de enviar à outra parte a lista completa dos seus endereços. Se houver correspondência, obtém o bloco e procura a transação real. Mesmo um filtro correto pode produzir um falso positivo: o bloco é descarregado sem necessidade, porque o elemento procurado não está lá. A correspondência não comprova, por si só, o recebimento, o montante nem a possibilidade de gastar os fundos. [1] [2] [3]

Anna troca de telefone e recupera a carteira. Procurar apenas a partir dos blocos de hoje não chega se recebeu pagamentos anteriormente. A aplicação precisa de fornecer os scripts certos e um ponto de partida suficientemente antigo. Segundo a documentação, Rescan sem um bloco inicial definido começa no último bloco conhecido, não automaticamente no início de toda a história. Um filtro a funcionar bem não encontra um endereço que a carteira não procura, nem pagamentos antigos num intervalo ignorado. É preciso distinguir uma recuperação concluída de uma pesquisa ainda em curso. Uma lista vazia durante esse processo não prova que os fundos desapareceram. [1]

Neutrino sincroniza cabeçalhos de blocos e de filtros. Os cabeçalhos de blocos permitem verificar a ligação entre eles e o Proof of Work, a prova do trabalho computacional realizado, e acompanhar a cadeia com maior trabalho acumulado. Isso vai muito além de aceitar cegamente o saldo de um servidor, mas fica aquém de verificar cada transação e regra de forma independente, como faz um Full Node. São também duas cadeias de cabeçalhos distintas. Os cabeçalhos de Bitcoin não incluem um compromisso direto com a correção destes filtros. Verificar apenas os hashes, impressões digitais criptográficas, não exclui um conjunto fraudulento mas internamente coerente. A poupança de trabalho tem um limite de confiança concreto. [2] [4]

Um peer é outro computador da rede que fornece dados ao cliente. BIP 157 assenta na comparação de respostas e na presença de pelo menos um peer honesto para detetar filtros incorretos. Se o mesmo atacante controlar todas as ligações, a quantidade de computadores não basta. Podem dar a mesma resposta falsa ou esconder um estado mais recente. Este isolamento de fontes honestas está relacionado com um Eclipse Attack. A carteira precisa de fontes disponíveis e suficientemente independentes, não apenas de ligações. Um ícone verde não prova que já possui uma visão completa e atual dos pagamentos. [2]

Jan acabou de enviar dinheiro a Anna. A transação pode esperar primeiro num Mempool, o conjunto local de transações não confirmadas de um nó, até um minerador a incluir num bloco. As notificações documentadas recvtx e redeemingtx de Neutrino chegam na confirmação num bloco, não na entrada num Mempool. Uma aplicação que queira mostrar pagamentos recebidos ainda sem confirmação precisa de outro mecanismo adequado. Um filtro de bloco não pode revelar isso antes de o bloco existir. Envio, aceitação por um peer e confirmação são eventos distintos; a ausência de uma notificação ainda não prova que Jan não enviou nada. [1]

Uma correspondência do filtro só é útil se o cliente conseguir também o bloco necessário. Se a rede não o entregar naquele momento, a conclusão correta é «ainda faltam dados», não «o saldo é zero». O estado também pode mudar numa reorganização: a rede adota outro ramo com mais trabalho acumulado e desliga blocos anteriormente ligados. Rescan comunica ambas as situações para a aplicação recalcular os seus registos. A privacidade também não é absoluta: o peer não recebe a lista de endereços procurados, mas vê pedidos de blocos concretos e informações de rede sobre a ligação. A forma de obter os dados continua a importar. [1] [2]

Lightning Network é uma rede de pagamentos construída sobre o Bitcoin. Num canal de pagamento, dois participantes atualizam a divisão dos fundos partilhados entre eles, em vez de registar cada pagamento num bloco de Bitcoin. Neutrino fornece dados da cadeia; não guarda por si só, em nome do utilizador, o material necessário para recuperar o estado atual dos canais. Recuperar o histórico da carteira e recuperar canais são tarefas diferentes. O README descreve o armazenamento dos filtros pedidos e a obtenção de blocos sem os guardar permanentemente; os requisitos reais dependem da versão e configuração da aplicação. Antes de confiar numa carteira assim, convém conhecer o seu procedimento de cópia e recuperação e o seu comportamento quando falham as fontes. Uma base mais pequena no telefone não elimina essas responsabilidades. [1] [4]

Para ter uma visão mais completa, leia este verbete junto com Compact Block Filters, Compact Block Filters, Full Node, Lightning Network, Eclipse Attack, Bitcoin. Também há referências a este verbete em Compact Block Filters, Compact Block Filters.

DOC · 001Lightning Labs — Neutrino READMEFonte primária DOC · 002BIP 157 — Client Side Block FilteringEspecificação DOC · 003BIP 158 — Compact Block FiltersEspecificação DOC · 004Bitcoin developer guide — Operating ModesDocumentação
Revisto em: Fontes em primeiro lugar · Não é recomendação de investimento