Nota: Esta página está seriamente desatualizada e em grande parte sem manutenção; devido a incidentes anteriores de edição – não foi sujeita a muita revisão por pares.

Um nó Bitcoin completo poderia ser modificado para escalar para taxas de transação muito mais altas do que as que são vistas hoje, assumindo que esse nó está rodando em servidores high end em vez de um desktop. Bitcoin foi projetado para suportar clientes leves que processam apenas pequenas partes da cadeia de blocos (veja verificação simplificada de pagamento abaixo para mais detalhes sobre isto).

Por favor note que esta página existe para dar cálculos sobre a escalabilidade de um nó Bitcoin completo e transações na cadeia de blocos sem considerar a segurança e descentralização da rede. Não se pretende discutir a escalabilidade de protocolos alternativos ou tentar resumir debates filosóficos. Crie páginas alternativas se você quiser fazer isso.

Note to Readers

Quando os técnicos ouvem sobre como o bitcoin funciona eles freqüentemente param na palavra “flooding” e dizem “Oh-my-god! que não pode escalar! O propósito deste artigo é tomar um exemplo extremo, o pico da taxa de transação do Visa, e mostrar que o bitcoin poderia tecnicamente atingir esse tipo de taxa sem qualquer tipo de raciocínio questionável, mudanças no design do núcleo, ou sobreposições inexistentes. Como tal, é apenas um exemplo extremo – não um plano de como o bitcoin vai crescer para atender a necessidades mais amplas (como um sistema descentralizado é o bitcoin usando público que vai decidir como o bitcoin cresce) – é apenas um argumento que mostra que o design do núcleo do bitcoin pode escalar muito melhor do que uma pessoa inteligente poderia adivinhar no início.

Dan critica corretamente a análise aqui apresentada – apontando que operar nessa escala reduziria significativamente a natureza descentralizada do bitcoin: Se você tem que ter muitos terabytes de espaço em disco para rodar um nó de “validação total”, então menos pessoas o farão, e todos que não tiverem que confiar naqueles que o fazem para serem honestos. Dan parece (de seus slides) ter ido longe demais com esse argumento: ele parece sugerir que isso significa que os bitcoins serão controlados pelo tipo de bancos centrais que são comuns hoje em dia. Sua análise falha por duas razões (e a segunda é a culpa desta página ser um pouco enganadora):

Primeiro, mesmo na escala astronômica aqui apresentada a capacidade necessária está bem dentro do reino dos indivíduos (ricos) privados, e certamente seria em algum momento futuro quando esse tipo de capacidade fosse necessária. Um sistema que coloca os particulares, ou pelo menos pequenos grupos de particulares, em pé de igualdade com os bancos centrais dificilmente poderia ser chamado de centralizado, embora fosse menos descentralizado do que o bitcoin que temos hoje. O sistema também não poderia chegar a esse tipo de escala sem que os usuários de bitcoin concordassem coletivamente em aumentar o tamanho máximo do bloco, portanto não é um resultado que pode acontecer sem o consentimento dos usuários de bitcoin.

Segundo, e o mais importante, a escala suposta aqui descrita trata da substituição do visto por Bitcoin. Esta é uma má comparação porque o bitcoin sozinho não é um substituto perfeito para o visto por razões completamente alheias ao escalonamento: Bitcoin não oferece transações instantâneas, crédito, ou vários mecanismos anti-fraude (que algumas pessoas querem, mesmo que nem todos o façam), por exemplo. Bitcoin é um substituto mais completo para cheques, transferências bancárias, ordens de pagamento, moedas de ouro, CDs, contas poupança, etc. e se amplamente adotado provavelmente substitui o uso de cartões de crédito que seriam melhor servidos por essas outras coisas se eles funcionassem melhor online.

Os usuários de bitcoin às vezes encobrem esse fato muito rapidamente porque as pessoas são muito rápidas para chamá-lo de falha, mas isso é injusto. Nenhum sistema é ideal para todos os usos e Bitcoin tem um espectro mais amplo de qualidades do que a maioria dos instrumentos monetários. Se a comunidade Bitcoin não está disposta a apontar algumas coisas seria melhor que outros sistemas fizessem, então torna-se fácil fazer argumentos de palhaço: Se admitirmos que a bitcoin pode ser usada como cera para o chão e cobertura do deserto, alguém irá sempre apontar que não é a melhor cera para o chão ou a melhor cobertura do deserto.

É trivial construir sistemas de processamento de pagamento e crédito _no topo_ da bitcoin, tanto os clássicos (como o próprio Visa!) como os “descentralizados” como o Lightning. Estes sistemas poderiam lidar com maiores volumes de transações com custos mais baixos, e liquidar frequentemente com o bitcoin que os sustenta. Estes poderiam usar outras técnicas com tradeoffs diferentes do que o bitcoin, mas ainda assim seriam apoiados e denominados pelo bitcoin, assim ainda desfrutam da sua falta de controle central. Vemos o início disso hoje com a troca de bitcoin e serviços de carteira permitindo pagamentos instantâneos entre os membros.

Esses serviços ganhariam o benefício da moeda estável e resistente à inflação, os usuários ganhariam os benefícios de transações instantâneas, crédito e anti-fraude, o bitcoin em geral desfrutaria de melhor escala a partir do volume de transações descarregadas sem comprometer a sua natureza descentralizada. Em um mundo onde o bitcoin fosse amplamente utilizado, os sistemas de processamento de pagamentos provavelmente teriam preços mais baixos porque precisariam competir com as transações de bitcoin em bruto, eles também poderiam ter um preço mais baixo porque a liquidação frequente de bitcoin (e transações de depósito de bitcoin de confiança zero) reduziriam seu risco. Isto é duplamente verdade porque o bitcoin poderia ser dimensionado para substituí-los completamente, mesmo que isso não fosse a melhor ideia devido à redução resultante na descentralização.

Metas de escalabilidade

VISA trata em média cerca de 2.000 transacções por segundo (tps), por isso chame-lhe uma taxa de pico diária de 4.000 tps. Tem uma capacidade de pico de cerca de 56.000 transacções por segundo, no entanto nunca utilizam mais do que cerca de um terço desta, mesmo durante os períodos de pico de compras.

PayPal, em contraste, lidou com cerca de 10 milhões de transações por dia para uma média de 115 tps no final de 2014.

Vamos tomar 4.000 tps como meta inicial. Obviamente, se quisermos que o Bitcoin seja dimensionado para todas as transações econômicas em todo o mundo, incluindo dinheiro, ele seria muito maior que isso, talvez mais na região de algumas centenas de milhares de tps. E a necessidade de sermos capazes de resistir aos ataques de DoS (com os quais a VISA não tem que lidar) implica que queremos escalar muito além das taxas de pico padrão. Ainda assim, escolhendo um alvo vamos fazer alguns cálculos básicos mesmo que seja um pouco arbitrário.

Hoje a rede Bitcoin está restrita a uma taxa sustentada de 7 tps devido ao protocolo bitcoin que restringe os tamanhos dos blocos a 1MB.

CPU

O protocolo tem duas partes. Os nós enviam mensagens “inv” para outros nós dizendo-lhes que eles têm uma nova transação. Se o nó receptor não tem essa transação ele a solicita com um getdata.

O grande custo é a pesquisa da cadeia de criptografia e blocos envolvidos na verificação da transação. A verificação de uma transação significa algum hashing e algumas verificações de assinaturas ECDSA. O RIPEMD-160 funciona a 106 megabytes/seg (chame-lhe 100 para simplificar) e o SHA256 é mais ou menos o mesmo. Portanto, hashing 1 megabyte deve levar cerca de 10 milissegundos e hashing 1 kilobyte levaria 0.01 milissegundos – rápido o suficiente para que possamos ignorá-lo.

Bitcoin é atualmente capaz (com algumas otimizações simples que são prototipadas mas ainda não fundidas) de realizar cerca de 8000 verificações de assinatura por segundo em um processador Intel Core i7-2670QM 2.2Ghz quad core. O número médio de entradas por transação é de cerca de 2, portanto devemos reduzir pela metade a taxa. Isto significa que 4000 tps é facilmente alcançável em termos de CPU com uma única CPU bastante comum.

Como podemos ver, isto significa que enquanto os nós Bitcoin forem permitidos a no máximo 4 núcleos das máquinas em que eles rodam, não ficaremos sem capacidade de CPU para verificação de assinaturas, a menos que o Bitcoin esteja lidando com 100 vezes mais tráfego do que o PayPal. A partir do final de 2015 a rede está lidando com 1,5 transações/segundo, então mesmo assumindo um enorme crescimento em popularidade não alcançaremos este nível por muito tempo.

Obviamente o Bitcoin faz outras coisas além da verificação de assinaturas, mais obviamente, gerenciar o banco de dados. Usamos o LevelDB que faz a maior parte do levantamento pesado em uma linha separada, e é capaz de ler/escrever cargas muito altas. O uso geral de CPU Bitcoin é dominado por ECDSA.

Network

Let’s assumir uma taxa média de 2000tps, então apenas VISA. As transações variam em tamanho de cerca de 0,2 kilobytes a mais de 1 kilobyte, mas hoje em dia a média é de meio kilobyte.

Isso significa que você precisa acompanhar cerca de 8 megabits/segundo de dados de transação (2000tps * 512 bytes) / 1024 bytes em um kilobyte / 1024 kilobytes em um megabyte = 0,97 megabytes por segundo * 8 = 7,8 megabits/segundo.

Este tipo de largura de banda já é comum até mesmo para conexões residenciais hoje em dia, e certamente está na extremidade baixa do que os provedores de colocação esperariam lhe fornecer.

Quando os blocos são resolvidos, o protocolo atual enviará as transações novamente, mesmo que um par já tenha visto na hora da transmissão. Resolver isso para fazer blocos apenas uma lista de hashes resolveria o problema e tornaria insignificante a largura de banda necessária para a transmissão do bloco. Portanto, embora esta otimização não esteja totalmente implementada hoje, não consideramos a largura de banda de transmissão de blocos aqui.

Storage

A taxas de transação muito altas cada bloco pode ter mais de meio gigabyte de tamanho.

Não é necessário para a maioria dos nós de validação completa para armazenar toda a cadeia. No papel do Satoshi ele descreve “poda”, uma forma de apagar dados desnecessários sobre transações que são totalmente gastas. Isto reduz a quantidade de dados necessários para que um nó de validação completa tenha apenas o tamanho do tamanho da saída atual não gasta, mais alguns dados adicionais que são necessários para lidar com re-orgs. Em outubro de 2012 (bloco 203258) houve 7.979.231 transações, entretanto o tamanho do conjunto de saída não gasta é inferior a 100MiB, o que é pequeno o suficiente para caber facilmente na RAM mesmo para computadores bastante antigos.

Apenas um pequeno número de nós de arquivo precisa armazenar toda a cadeia voltando para o bloco de gênese. Estes nós podem ser usados para iniciar novos nós totalmente validadores do zero, mas são desnecessários.

O principal fator limitante no desempenho do Bitcoin é o disco procura uma vez que a saída de transação não gasta deixa de caber na memória. Uma vez que os discos rígidos são gradualmente eliminados em favor dos SSDs, é bem possível que o acesso ao conjunto UTXO nunca se torne um gargalo sério.

Optimizações

A descrição acima se aplica ao software atual com apenas pequenas otimizações assumidas (o tipo que pode e foi feito por um homem em poucas semanas).

No entanto, há potencial para que otimizações ainda maiores sejam feitas no futuro, ao custo de alguma complexidade adicional.

CPU

Algoritmos existem para acelerar a verificação de lotes sobre assinaturas de curvas elípticas. É possível verificar as suas assinaturas simultaneamente para uma velocidade 2x superior. Esta é uma implementação um pouco mais complexa.

Verificação simplificada de pagamentos

É possível construir uma implementação Bitcoin que não verifica tudo, mas ao invés disso depende ou de se conectar a um nó confiável, ou coloca sua fé em alta dificuldade como um proxy para prova de validade. bitcoinj é uma implementação deste modo.

No modo Verificação Simplificada de Pagamento (SPV), nomeado após a seção do artigo da Satoshi que o descreve, os clientes se conectam a um nó completo arbitrário e baixam apenas os cabeçalhos dos blocos. Eles verificam se os cabeçalhos de corrente se conectam corretamente e se a dificuldade é alta o suficiente. Eles então solicitam transações correspondentes a padrões particulares do nó remoto (ou seja, pagamentos para seus endereços), o que fornece cópias dessas transações juntamente com um ramo Merkle ligando-os ao bloco no qual eles apareceram. Isto explora a estrutura da árvore Merkle para permitir a prova de inclusão sem precisar do conteúdo completo do bloco.

Como uma otimização adicional, cabeçalhos de bloco que estão enterrados suficientemente fundo podem ser jogados fora após algum tempo (por exemplo, você só precisa realmente armazenar tão baixo quanto 2016 cabeçalhos).

O nível de dificuldade necessário para obter confiança que o nó remoto não está alimentando as transações fictícias depende do seu modelo de ameaça. Se você está se conectando a um nó que é conhecido por ser confiável, a dificuldade não importa. Se você quer escolher um nó aleatório, o custo para um atacante minar uma seqüência de blocos contendo uma transação falsa deve ser maior do que o valor a ser obtido defraudando você. Ao alterar o quão profundamente enterrado o bloco deve estar, você pode trocar o tempo de confirmação vs. custo de um ataque.

Programas implementando esta abordagem podem ter despesas gerais fixas de armazenamento/rede no caso de nenhuma utilização, e utilização de recursos proporcional às transações recebidas/enviadas.

Veja também: Thin Client Security.

Trabalho relacionado

Existem algumas propostas para otimizar a escalabilidade do Bitcoin. Algumas delas requerem uma alt-chain / hard fork.

  • Compressão final da blockchain – a idéia de que a blockchain pode ser comprimida para se obter “nós livres de confiança”
  • O papel Finite Blockchain que descreve a divisão da blockchain em três estruturas de dados, cada uma mais adequada ao seu propósito. As três estruturas de dados são uma cadeia de blocos finitos (manter N blocos no passado), uma “árvore de contas” que mantém o saldo de contas para cada endereço com um saldo diferente de zero, e uma “cadeia de provas” que é uma versão reduzida (sempre crescente) da cadeia de blocos.
  • Lightning Network, um protocolo alternativo para liberação de transações no qual os nós estabelecem canais de micropagamento entre si e se estabelecem ocasionalmente na cadeia de blocos. Os usuários comuns interagem principalmente ou apenas com os canais de pagamento e só usam a cadeia de bloqueio para grandes transferências e armazenagem frigorífica.

admin

Deixe uma resposta

O seu endereço de email não será publicado.

lg