Bitcoin White Paper: um sistema de dinheiro ponto a ponto

PANews Nota do Editor: A 31 de outubro de 2008, Satoshi Nakamoto publicou o White Paper do Bitcoin, sendo hoje o 17.º aniversário. O texto abaixo é a tradução do White Paper feita por Li Xiaolai, para que todos possam revisitar este clássico.

Resumo: Um sistema de dinheiro electrónico puramente ponto-a-ponto permitirá pagamentos online directamente de uma parte para outra, sem passar por instituições financeiras. As assinaturas digitais fornecem parte da solução, mas, se ainda for necessário confiar numa terceira parte para evitar duplo gasto, a principal vantagem do pagamento electrónico é anulada. Propomos uma solução que utiliza uma rede ponto-a-ponto para resolver o problema do duplo gasto. A rede ponto-a-ponto irá marcar cada negociação com um carimbo temporal, ao registar os dados de hash da negociação numa cadeia de prova de trabalho baseada em hash que se expande continuamente, formando um registo que não pode ser alterado sem refazer toda a cadeia. A cadeia mais longa serve para provar a ordem dos eventos testemunhados e, simultaneamente, que provém do maior conjunto de poder de hash de CPU. Desde que a maioria do poder de hash de CPU seja controlada por nós honestos — ou seja, que não colaborem com nós que tentem atacar a rede —, os nós honestos irão gerar a cadeia mais longa e ultrapassarão os atacantes em velocidade. A própria rede requer uma estrutura mínima. A informação é propagada com o máximo esforço, e os nós podem entrar e sair livremente; ao juntar-se, devem sempre aceitar a cadeia de prova de trabalho mais longa como prova de tudo o que ocorreu durante a sua ausência.

1. Introdução (Introduction)

O comércio na Internet depende quase totalmente das instituições financeiras como terceiros de confiança para processar pagamentos electrónicos. Embora este sistema funcione razoavelmente bem para a maioria das negociações, ainda sofre das falhas inerentes ao modelo baseado na confiança. Negociações completamente irreversíveis não são realmente possíveis, pois as instituições financeiras não conseguem evitar a arbitragem de disputas. O custo da arbitragem aumenta o custo das negociações, limitando o tamanho mínimo possível das transacções e impedindo muitas negociações de pequeno valor. Além disso, existe um custo maior: o sistema não consegue fornecer pagamentos irreversíveis para serviços irreversíveis. A possibilidade de reversão cria uma necessidade omnipresente de confiança. Os comerciantes têm de estar atentos aos seus clientes, exigindo-lhes mais informações do que seria necessário se houvesse confiança. Uma certa percentagem de fraude é considerada inevitável. Estes custos e incertezas de pagamento podem ser evitados quando se utiliza dinheiro físico directamente entre pessoas; no entanto, não existe nenhum mecanismo que permita pagamentos através de canais de comunicação sem que uma das partes tenha de confiar na outra.

O que realmente precisamos é de um sistema de pagamento electrónico baseado em prova criptográfica, em vez de confiança, permitindo que quaisquer duas partes transaccionem directamente sem necessidade de um terceiro de confiança. Negociações irreversíveis garantidas pelo poder de hash ajudam os vendedores a evitar fraude, enquanto mecanismos de garantia para compradores podem ser facilmente implementados. Neste artigo, propomos uma solução para o problema do duplo gasto, utilizando um servidor de carimbo temporal distribuído ponto-a-ponto para gerar provas baseadas em poder de hash, registando cada negociação por ordem temporal. Este sistema é seguro desde que os nós honestos detenham mais poder de hash de CPU do que os atacantes que cooperam entre si.

2. Negociações (Transactions)

Definimos uma moeda electrónica como uma cadeia de assinaturas digitais. Quando um proprietário transfere uma moeda para outra pessoa, adiciona ao final da cadeia uma assinatura digital: o hash da negociação anterior e a chave pública do novo proprietário. O destinatário pode verificar a propriedade da cadeia de assinaturas digitais através da verificação da assinatura.

O problema deste método é que o destinatário não consegue verificar se algum dos proprietários anteriores gastou a moeda duas vezes. A solução comum é introduzir uma autoridade central de confiança, ou “Casa da Moeda”, que verifica cada negociação quanto a duplo gasto. Após cada negociação, a moeda deve ser devolvida à Casa da Moeda, que emite uma nova moeda. Assim, apenas as moedas emitidas directamente pela Casa da Moeda são consideradas válidas e não gastas duas vezes. O problema desta solução é que todo o sistema monetário depende da empresa que opera a Casa da Moeda (tal como um banco), e cada negociação tem de passar por ela.

Precisamos de uma forma que permita ao destinatário confirmar que nenhum dos proprietários anteriores assinou negociações anteriores. Para o nosso propósito, apenas a negociação mais antiga é relevante, por isso não nos preocupamos com tentativas posteriores de duplo gasto. A única forma de confirmar que uma negociação não existe é conhecer todas as negociações. No modelo da Casa da Moeda, esta já conhece todas as negociações e pode confirmar a sua ordem. Para realizar esta tarefa sem uma parte de confiança, o registo das negociações deve ser anunciado publicamente, e precisamos de um sistema que permita aos participantes concordar com um único histórico de negociações recebido. O destinatário precisa de provar que, no momento da negociação, a maioria dos nós concordou que foi a primeira a ser recebida.

3. Servidor de Carimbo Temporal (Timestamp Server)

A solução começa com um servidor de carimbo temporal. O servidor de carimbo temporal funciona assim: atribui um carimbo temporal ao hash de um grupo (bloco) de registos, e depois transmite o hash, tal como um jornal faz, ou como uma mensagem num grupo de notícias (Usenet)[2-5]. O carimbo temporal prova que os dados existiam antes daquele momento, pois o hash não poderia ser gerado de outra forma. Cada carimbo temporal inclui o hash do carimbo anterior, formando uma cadeia; cada novo carimbo é adicionado ao anterior.

4. Prova de Trabalho (Proof-of-Work)

Para implementar um servidor de carimbo temporal distribuído ponto-a-ponto, utilizamos um sistema de prova de trabalho semelhante ao Hashcash de Adam Back, em vez de jornais ou mensagens em grupos de notícias. A prova de trabalho consiste em encontrar um valor; após calcular o hash desse valor — por exemplo, usando SHA-256 —, o hash deve começar com um número específico de zeros. Cada zero adicional aumenta exponencialmente o trabalho necessário, mas a verificação do trabalho é simples, bastando calcular um hash.

Na nossa rede de carimbo temporal, implementamos a prova de trabalho ao adicionar continuamente um nonce ao bloco até encontrar um valor que satisfaça a condição: o hash do bloco começa com o número especificado de zeros. Uma vez que o resultado obtido pelo poder de hash da CPU satisfaça a prova de trabalho, o bloco não pode ser alterado sem refazer todo o trabalho anterior. À medida que novos blocos são adicionados, alterar o bloco actual implica refazer o trabalho de todos os blocos seguintes.

A prova de trabalho também resolve como decidir quem representa a maioria nas decisões. Se a “maioria” fosse baseada em “um endereço IP, um voto”, qualquer pessoa que controlasse muitos endereços IP seria considerada a maioria. A prova de trabalho, na essência, é “um CPU, um voto”. A decisão da maioria é representada pela cadeia mais longa, pois é nela que foi investido mais trabalho. Se a maioria do poder de hash de CPU for controlada por nós honestos, a cadeia honesta crescerá mais rapidamente do que as cadeias concorrentes. Para alterar um bloco já gerado, o atacante teria de refazer a prova de trabalho desse bloco e de todos os seguintes, e ainda ultrapassar o trabalho dos nós honestos. Mais adiante mostramos porque a probabilidade de um atacante atrasado conseguir recuperar diminui exponencialmente à medida que mais blocos são adicionados.

Para acomodar o aumento geral do poder de hash do hardware e possíveis variações no número de nós ao longo do tempo, a dificuldade da prova de trabalho é ajustada com base numa média móvel do número de blocos gerados por hora. Se os blocos forem gerados demasiado rapidamente, a dificuldade aumenta.

5. Rede (Network)

Os passos para operar a rede são os seguintes:

  1. Todas as novas negociações são transmitidas a todos os nós;
  2. Cada nó agrupa as novas negociações num bloco;
  3. Cada nó começa a procurar uma prova de trabalho para o bloco;
  4. Quando um nó encontra a prova de trabalho, transmite o bloco para todos os nós;
  5. Os outros nós só aceitam o bloco se todas as negociações forem válidas e não tiverem sido gastas duas vezes;
  6. Os nós indicam que aceitaram o bloco ao incluir o hash do bloco aceite como o hash anterior do próximo bloco que criam.

Os nós consideram sempre a cadeia mais longa como a correcta e continuam a adicionar-lhe novos dados. Se dois nós transmitirem simultaneamente versões diferentes do “próximo bloco”, alguns nós receberão um primeiro e outros receberão o outro. Neste caso, os nós continuam a trabalhar no bloco que receberam primeiro, mas mantêm o outro ramo caso este se torne a cadeia mais longa. Quando a próxima prova de trabalho é encontrada e um dos ramos se torna mais longo, a divergência temporária é resolvida e os nós que trabalhavam no ramo mais curto mudam para o mais longo.

As novas negociações não precisam de ser transmitidas a todos os nós. Basta que cheguem a um número suficiente de nós para que, em breve, sejam incluídas num bloco. A transmissão de blocos permite que algumas mensagens sejam perdidas. Se um nó não receber um bloco, irá perceber que perdeu um bloco ao receber o próximo, e solicitará o bloco em falta.

6. Recompensas (Incentive)

Por convenção, a primeira negociação de cada bloco é uma negociação especial que gera uma nova moeda, atribuída ao criador do bloco. Isto recompensa os nós pelo suporte à rede e fornece uma forma de emitir moedas para circulação — já que não existe uma autoridade central para emitir moedas neste sistema. O aumento estável de novas moedas em circulação é semelhante à extracção de ouro, onde os mineiros gastam recursos para adicionar ouro ao mercado. No nosso sistema, os recursos gastos são tempo de CPU e electricidade.

As recompensas também podem vir das taxas de negociação. Se o valor de saída de uma negociação for inferior ao valor de entrada, a diferença é a taxa de negociação, que recompensa o nó que inclui a negociação no bloco. Quando um número fixo de moedas já estiver em circulação, as recompensas passarão a ser totalmente constituídas por taxas de negociação, sem qualquer inflação.

O mecanismo de recompensa pode também incentivar os nós a manterem-se honestos. Se um atacante ganancioso conseguir reunir mais poder de hash de CPU do que todos os nós honestos juntos, terá de escolher: usar esse poder para enganar os outros ao recuperar o dinheiro que gastou, ou usá-lo para gerar novas moedas? Deverá perceber que seguir as regras é mais lucrativo, pois pode obter mais moedas do que todos os outros juntos, o que é claramente melhor do que destruir o sistema e tornar a sua riqueza inútil.

7. Recuperação de Espaço em Disco (Reclaiming Disk Space)

Se a negociação mais recente de uma moeda ocorreu há blocos suficientes, os registos de gastos anteriores dessa moeda podem ser descartados para poupar espaço em disco. Para o fazer sem comprometer o hash do bloco, os registos de negociação são incluídos numa árvore de Merkle[7,2,5], e apenas a raiz da árvore é incluída no hash do bloco. Ao podar os ramos, os blocos antigos podem ser comprimidos. Os hashes internos não precisam de ser guardados.

Um cabeçalho de bloco sem registos de negociação tem cerca de 80 bytes. Supondo que se gera um bloco a cada dez minutos, 80 bytes x 6 x 24 x 365 = 4,2 MB por ano. Em 2008, a maioria dos computadores à venda tinha 2 GB de memória, e segundo a Lei de Moore, a capacidade aumentaria 1,2 GB por ano; mesmo que os cabeçalhos de bloco tenham de ser guardados em memória, não será um problema.

8. Verificação Simplificada de Pagamentos (Simplified Payment Verification)

É possível verificar pagamentos sem operar um nó completo da rede. O utilizador só precisa de uma cópia dos cabeçalhos da cadeia mais longa com prova de trabalho — pode confirmar junto de nós online que possui a cadeia mais longa — e obter os ramos da árvore de Merkle, ligando à negociação quando o bloco foi carimbado. O utilizador não pode verificar a negociação por si próprio, mas ao ligar-se a um ponto da cadeia, pode ver que um nó da rede já aceitou a negociação, e que blocos subsequentes confirmam que a rede aceitou a negociação.

Enquanto os nós honestos controlarem a rede, a verificação é fiável. No entanto, se a rede for controlada por atacantes, a verificação já não é tão fiável. Embora os nós da rede possam verificar os registos de negociação, se o atacante continuar a controlar a rede, a verificação simplificada pode ser enganada por registos de negociação falsificados. Uma das estratégias de defesa é o software do cliente aceitar alertas dos nós da rede. Quando um nó detecta um bloco inválido, emite um alerta, mostrando uma notificação ao utilizador para descarregar o bloco completo e verificar a consistência da negociação. Comerciantes com alta frequência de pagamentos devem operar o seu próprio nó completo para garantir maior segurança e confirmações mais rápidas.

9. Combinação e Divisão de Valor (Combining and Splitting Value)

Embora seja possível tratar moedas individualmente, registar cada cêntimo separadamente é pouco prático. Para permitir a divisão e combinação de valor, os registos de negociação incluem múltiplas entradas e saídas. Normalmente, há uma entrada única de uma negociação anterior de valor elevado, ou várias entradas de pequenas quantias combinadas; e até duas saídas: uma para pagamento (destinatário) e, se necessário, outra para troco (remetente).

É importante notar que o “fan-out” não é um problema aqui — ou seja, uma negociação depende de várias negociações, que por sua vez dependem de outras. Nunca é necessário obter uma cópia completa e independente do histórico de qualquer negociação.

10. Privacidade (Privacy)

O modelo bancário tradicional protege a privacidade ao limitar o acesso de terceiros à informação dos negociadores e da parte de confiança. A necessidade de tornar todos os registos de negociação públicos impede este método. No entanto, a privacidade pode ser mantida ao cortar o fluxo de informação noutro ponto — anonimato das chaves públicas. O público pode ver que alguém transferiu um determinado valor para outro, mas não há informação que identifique uma pessoa específica. Este nível de divulgação é semelhante ao das negociações em bolsa, onde apenas o tempo e o valor das negociações são públicos, mas ninguém sabe quem são as partes envolvidas.

11. Cálculos (Calculations)

Suponha um cenário em que um atacante tenta gerar uma cadeia alternativa mais rapidamente do que a cadeia honesta. Mesmo que tenha sucesso, não coloca o sistema numa situação ambígua, pois não pode criar valor do nada nem obter dinheiro que nunca lhe pertenceu. Os nós da rede não aceitam uma negociação inválida como pagamento, e os nós honestos nunca aceitarão um bloco que contenha tal pagamento. O atacante só pode modificar as suas próprias negociações, tentando recuperar o dinheiro que já gastou.

A competição entre a cadeia honesta e a do atacante pode ser descrita como uma caminhada aleatória binomial. Um sucesso ocorre quando a cadeia honesta recebe um novo bloco, aumentando a sua vantagem em 1; um fracasso ocorre quando a cadeia do atacante recebe um novo bloco, reduzindo a vantagem da cadeia honesta em 1.

A probabilidade de o atacante recuperar de uma posição de desvantagem é semelhante ao problema do falência do jogador. Suponha que um jogador com fichas ilimitadas começa em desvantagem e pode apostar infinitamente, tentando recuperar o prejuízo. Podemos calcular a probabilidade de ele recuperar, ou seja, a probabilidade de o atacante alcançar a cadeia honesta[8], como segue:

Dado que já assumimos , e que o número de blocos que o atacante precisa de recuperar aumenta, a probabilidade de sucesso diminui exponencialmente. Se não tiver sorte logo no início, a taxa de vitória do atacante desaparece à medida que fica mais para trás.

Agora, considere quanto tempo o destinatário de uma nova negociação deve esperar para garantir que o remetente não pode alterar a negociação. Suponhamos que o remetente é um atacante, tentando fazer o destinatário acreditar que pagou, para depois recuperar o dinheiro. O destinatário será avisado, mas o remetente espera que seja tarde demais.

O destinatário gera um novo par de chaves públicas e privadas, e comunica a chave pública ao remetente pouco antes de assinar. Isto impede que o remetente prepare antecipadamente uma cadeia de blocos e, com sorte, fique à frente antes de executar a negociação. Uma vez que o pagamento é feito, o remetente desonesto começa secretamente a trabalhar numa cadeia paralela, tentando incluir uma versão reversa da negociação.

O destinatário espera que a negociação seja incluída num bloco, e que pelo menos um bloco seja adicionado depois. Não sabe o progresso do atacante, mas pode assumir o tempo médio de geração de blocos honestos; o progresso potencial do atacante segue uma distribuição de Poisson, com valor esperado:

Para calcular a probabilidade de o atacante ainda conseguir recuperar, multiplicamos a densidade de Poisson do progresso do atacante pela probabilidade de recuperar a partir desse ponto:

Para evitar somar uma série infinita de densidades…

Convertido para programa em C…

Obtendo alguns resultados, vemos que a probabilidade diminui exponencialmente com o aumento de Z:

Se P for inferior a 0,1%…

12. Conclusão (Conclusion)

Propusemos um sistema de negociação electrónica que não depende de confiança; começa com uma estrutura comum de moeda baseada em assinaturas digitais, que fornece controlo robusto de propriedade, mas não evita duplo gasto. Para resolver este problema, propomos uma rede ponto-a-ponto baseada em prova de trabalho para registar um histórico público de negociações. Desde que os nós honestos controlem a maioria do poder de hash de CPU, os atacantes não conseguirão alterar o sistema apenas com poder de hash. A robustez da rede reside na sua simplicidade sem estrutura. Os nós podem trabalhar simultaneamente com pouca coordenação. Nem precisam de ser identificados, pois o percurso das mensagens não depende de destinos específicos; basta que sejam propagadas com o máximo esforço. Os nós entram e saem livremente, e ao regressar, só precisam de aceitar a cadeia de prova de trabalho como prova de tudo o que ocorreu durante a sua ausência. Votam com o seu poder de hash de CPU, adicionando novos blocos válidos à cadeia e rejeitando blocos inválidos, indicando a aceitação ou rejeição de negociações válidas. Quaisquer regras e recompensas necessárias podem ser impostas por este mecanismo de consenso.

BTC2.77%
Ver original
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
  • Recompensa
  • Comentário
  • Repostar
  • Compartilhar
Comentário
0/400
Sem comentários
  • Marcar
Negocie criptomoedas a qualquer hora e em qualquer lugar
qrCode
Escaneie o código para baixar o app da Gate
Comunidade
Português (Brasil)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)