# Algorand

Moedas criptográficas como Bitcoin podem permitir novas aplicações, como contratos inteligentes e protocolos justos, podem simplificar as conversões monetárias e podem evitar autoridades centralizadas de confiança que regulam as transações. No entanto, as propostas atuais sofrem de um trade-off entre latência e confiança em uma transação. Por exemplo, conseguir uma alta confiança de que uma transação foi confirmada no Bitcoin requer uma espera de aproximadamente uma hora. Por outro lado, as aplicações que requerem baixa latência não podem ter certeza de que sua transação será confirmada e deve confiar no pagador para não gastar duas vezes.
Bitcoin e outras criptografias abordam este problema usando um esquema de prova de trabalho (PoW), onde os usuários devem calcular repetidamente hashes para crescer a cadeia de blocos e a cadeia mais longa é considerada autoritária. PoW garante que um adversário não ganhe nenhuma vantagem criando pseudônimos. No entanto, PoW permite a possibilidade de ramificações, onde duas cadeias de blocos diferentes têm o mesmo comprimento e nem uma substitui a outra. Formas atenuantes requer dois sacrifícios infelizes: o tempo para crescer a cadeia em um bloco deve ser razoavelmente alto (10 minutos em Bitcoin) e as aplicações devem aguardar vários blocos para garantir que sua transação permaneça na cadeia autorizada (são recomendados 6 blocos em Bitcoin). O resultado é que demora cerca de uma hora para confirmar uma transação no Bitcoin.
Algorand é um novo sistema de criptografia que pode confirmar transações com latência na ordem de um minuto enquanto escala para muitos usuários. Algorand garante que os usuários nunca tenham visões divergentes de transações confirmadas, mesmo que alguns usuários sejam maliciosos e a rede seja particionada. Em contraste, as criptografias existentes permitem ramificações temporárias e, portanto, exigem muito tempo, na ordem de uma hora, para confirmar transações com alta confiança. Algorand usa um novo protocolo do Acordo Bizantino (BA) para chegar a um consenso entre os usuários no próximo conjunto de transações. Para escalar o consenso para muitos usuários, o Algorand usa um mecanismo inovador baseado em funções aleatórias verificáveis que permite que os usuários verifiquem se eles são selecionados para participar da BA para concordar com o próximo conjunto de transações e para incluir uma prova de seleção em suas mensagens de rede. No protocolo BA do Algorand, os usuários não mantêm nenhum estado privado, exceto por suas chaves privadas, o que permite que o Algorand substitua os participantes imediatamente após enviarem uma mensagem. Isso mitiga os ataques direcionados aos participantes escolhidos após a sua identidade ser revelada.
O algorand propõe-se a resolver alguns problemas técnicos do Bitcoin, alguns desses problemas são citados na próxima seção.

## Hipótese e problemas técnicos do Bitcoin

Existe alguns problemas técnicos que são realmente compartilhados por essencialmente todas as criptografia que, como Bitcoin, são baseadas na prova de trabalho. No Bitcoin, um usuário pode possuir várias chaves públicas de um esquema de assinatura digital, que o dinheiro está associado a chaves públicas e que um pagamento é uma assinatura digital que transfere uma quantidade de dinheiro de um chave pública para outro. Essencialmente, a Bitcoin organiza todos os pagamentos processados em uma cadeia de blocos, B1, B2, ..., cada um dos quais consiste em pagamentos múltiplos, de modo que, todos os pagamentos de B1, tomados em qualquer ordem, seguidos pelos de B2, em qualquer ordem, etc., constituem uma sequência de pagamentos válidos. Cada bloco é gerado, em média, a cada 10 minutos. Esta seqüência de blocos é uma cadeia, porque está estruturada de modo a garantir que qualquer alteração, mesmo em um único bloco, passar por todos os blocos subsequentes, tornando mais fácil detectar qualquer alteração do histórico de pagamentos. Essa estrutura de bloco é referida como uma cadeia de blocos.
* Hipótese do Bitcoin de que a maioria do poder computacional é honesta:
Pressupõe que nenhuma entidade mal-intencionada controla a maior parte do poder computacional dedicado à geração de blocos. Essa entidade, na verdade, seria capaz de modificar a cadeia de blocos e, assim, reescrever o histórico de pagamentos, conforme quiser. Em particular, pode fazer um pagamento x, obter os benefícios pagos e, em seguida, "apagar" qualquer vestígio de x.
* Problema técnico 1: Perda computacional
A abordagem de prova de trabalho para a geração de blocos requer uma quantidade extraordinária de computação. Atualmente, com apenas algumas centenas de milhares de chaves públicas no sistema, os 500 melhores supercomputadores mais poderosos só podem reunir apenas 12,8% da potência computacional total requerida dos jogadores Bitcoin. Essa quantidade de computação aumentaria bastante, se muitos usuários entrarem no sistema.
* Problema técnico 2: Concentração de poder
Devido à quantidade exorbitante de computação necessária, um usuário, tentando gerar um novo bloco usando um computador comum, espera perder dinheiro. Na verdade, para computar um novo bloco com um computador comum, o custo esperado da eletricidade necessária para alimentar a computação excede a recompensa esperada. Somente usando conjuntos de computadores especialmente construídos (que não fazem nada além de "meus novos blocos"), pode-se esperar lucrar gerando novos blocos. Por conseguinte, hoje existem, de fato, duas classes disjuntas de usuários: usuários comuns, que apenas fazem pagamentos e pools de mineração especializados, que apenas buscam novos blocos. Portanto, não deve ser uma surpresa que, desde recentemente, o poder de computação total para a geração de blocos esteja em apenas cinco pools. Em tais condições, a suposição de que a maioria do poder computacional é honesto possui menos credibilidade.
* Problema técnico 3: Ambiguidade
Em Bitcoin, a cadeia de blocos não é necessariamente única. De fato sua última porção muitas vezes ramifica: o bloco pode ser - B1,. . . , Bk, B 'k + 1, B'K + 2, de acordo com um usuário, e B1,. . . Bk, B k + 1, B k + 2, B k + 3 de acordo com outro usuário. Somente depois de vários blocos terem sido adicionados à cadeia, pode-se ter certeza de que os primeiros k + 3 blocos serão os mesmos para todos os usuários. Assim, não se pode confiar imediatamente nos pagamentos contidos no último blockchain. É mais prudente esperar e ver se o bloco se torna suficientemente profundo na cadeia de blocos e, portanto, suficientemente estável.

## Funcionamento

Em Bitcoin, os mineiros concorrem para resolver um enigma criptográfico. O vencedor propõe o próximo bloco e ganha uma recompensa em bloco.
Mas a proof-of-work do Bitcoin resulta na despesa de uma quantidade exorbitante de energia. Alguns dizem que isso também conduziu a uma centralização do processamento do Bitcoin, o que significa que apenas algumas, grandes entidades podem reivindicar novos bitcoins. Na tentativa de democratizar essa distribuição, o Algorand usa o que Silvio Micali, o seu criador, chama de "ordenação criptográfica" para selecionar jogadores (talvez algumas centenas em um sistema com até um milhão de usuários) para criar e verificar blocos.
Enquanto a maioria dos sistemas de proof-of-stake dependem da aleatoriedade, o Algorand é diferente em que você se auto-seleciona executando a loteria em seu próprio computador. A loteria é baseada em informações no bloco anterior, a seleção é automática (não envolvendo troca de mensagens) e é completamente aleatória. Ao empregar a ordenação criptográfica, a teoria é que o algoritmo pode escalar sob demanda. Outros benefícios incluem segurança e velocidade.
Como os requisitos computacionais de Algorand são triviais (qualquer um pode executar o sistema em seu laptop) e o mesmo não faz distinção entre classes de usuários(“consumidores“ que transacionam e “mineiros” que procuram blocos), a visão é que todos os usuários teriam o mesmo acesso à rede.
Semelhante a outros sistemas de proof-of-stake, sua chance de ser selecionada para uma recompensa é baseada no número de moedas (chamadas de "algos") que você possui ou que deixa de lado. Quanto mais algos você tiver, maior será a chance de você ser escolhido.
Depois de saber que você é selecionado como proponente, você cria um bloco e depois o propaga para a rede junto com uma prova de hash (um número aleatório facilmente verificado por uma assinatura digital). O proponente com a menor prova de hash (novamente, aleatório) é aquele que apresentará o próximo bloco candidato.
O próximo passo no processo de algoritmo é verificar o bloco candidato e - no caso de um proponente ter proposto dois ou mais blocos - assegurar-se de que não há ramificação na cadeia. Para assegurar que não há ramificações, a maneira pela qual o Algorand lida com essa ambiguidade é alcançando o consenso em um bloco com uma probabilidade insignificante de ramificação. O sistema faz isso empregando uma versão modificada do algoritmo de consenso bizantino.
Concebido na década de 1980, o acordo bizantino oferece uma maneira de chegar ao consenso em um sistema distribuído onde nenhum dos nós pode ser confiável. Em tal design, o sistema pode tolerar até um terço dos jogadores trabalhando contra o sistema. O acordo bizantino tem duas propriedades: se todos os jogadores começam com o mesmo valor, eles concordam com esse valor. E, se os jogadores começam com valores diferentes, todos os jogadores honestos (aqueles que cumprem o protocolo) concordarão com um valor. No blockchain, esses valores são os blocos candidatos e os jogadores são verificadores.
Um problema com o acordo tradicional bizantino, no entanto, é que requer muitas rodadas de comunicação intensa entre todos os jogadores, dificultando a escala do sistema.
Para contornar isso, o Algorand utiliza uma versão modificada com apenas nove etapas esperadas.

## Protocolo Bizantino modificado

Em Algorand, um pequeno subconjunto de jogadores executa o consenso bizantino em nome de todo o sistema. Isso permite que o protocolo seja executado em velocidades mais altas, e à medida que mais jogadores são substituídos em cada etapa, a ideia é tornar o sistema seguro em um ambiente adversário.
O acordo Bizantino modificado do Algorand funciona da seguinte maneira: os titulares das moedas se auto-selecionam para serem verificadores na primeira rodada. Esses verificadores enviam suas mensagens junto com suas credenciais para a rede.
Agora que eles se revelaram, um adversário poderia facilmente corrompê-los. Mas isso não importa, porque uma vez que a mensagem está fora, não há como devolvê-la.
E assim, mesmo que um adversário tenha sucesso em corromper os verificadores, é muito tarde. Um novo conjunto de jogadores já se auto-selecionou para a próxima rodada de comunicação e o processo continua por mais oito rodadas até chegar a um acordo comum.
Uma vez alcançado o acordo, e o bloco é certificado pelas assinaturas de um número suficiente de jogadores na última etapa do acordo bizantino, esse bloco é depois mandado pela rede para que todos os usuários no sistema possam adicioná-lo ao bloco.
Como a única latência real no sistema baseia-se na propagação desse bloco através da rede, no Algorand o tamanho do bloco foi configurado em 1 MB. O que pode ser aumentado sem riscos de segurança a medida que as redes se tornam mais rápidas, argumenta Silvio Micali, o idealizador do Algorand.

## Configurações

* Ambientes com e sem permissão: A Algorand trabalha de forma eficiente e segura mesmo em um ambiente totalmente sem permissão, onde arbitrariamente muitos usuários têm permissão para se juntar ao sistema a qualquer momento, sem qualquer verificação ou permissão de qualquer tipo. Claro, o Algorand funciona ainda melhor num ambiente com permissão.
* Ambientes muito adversos:
Algorand resiste a um adversário muito poderoso, que pode:
* Corromper instantaneamente qualquer usuário que ele quiser, a qualquer momento que quiser, desde que, em um ambiente sem permissão, 2/3 do dinheiro no sistema pertence a um usuário honesto. (Em um ambiente com permissão, independentemente do dinheiro, basta que 2/3 dos usuários sejam honestos.)
* Controlar totalmente e coordenar perfeitamente todos os usuários corrompidos; e
* Agendar a entrega de todas as mensagens, desde que cada mensagem m enviada por um usuário honesto chegue a 95% dos usuários honestos dentro de um tempo λm, que depende apenas do tamanho de m.

## Propriedades principais

Apesar da presença de nosso poderoso adversário, em Algorand:
* A quantidade de computação necessária é mínima:
Essencialmente, não importa quantos usuários estejam presente no sistema, cada mil e quinhentos usuários devem realizar no máximo alguns segundos de computação.
* Um novo bloco é gerado em menos de 10 minutos e, de fato, nunca deixará a cadeia de blocos:
Por exemplo, na expectativa, o tempo para gerar um bloco na primeira forma de realização é menor que Λ + 12.4λ, onde Λ é o tempo necessário para propagar um bloco, de maneira peer-to-peer, independentemente do tamanho de bloco que um possa escolher, e λ é o momento de propagar 1.500 mensagens de 200B. (Dado que em um sistema verdadeiramente descentralizado, Λ é essencialmente uma latência intrínseca, em Algorand o fator limitante na geração de blocos é a velocidade da rede.) A segunda forma de realização foi testada experimentalmente, indicando que um bloco é gerado em menos de 40 segundos. Além disso, a cadeia de blocos de Algorand pode ter apenas uma probabilidade insignificante (isto é, menos de um em um trilhão) e, portanto, os usuários podem transmitir os pagamentos contidos em um novo bloco assim que o bloco aparece.
* Toda a energia reside com os próprios usuários:
Algorand é um sistema verdadeiramente distribuído. Em particular, não existem entidades exógenas (como os "mineiros" em Bitcoin), que podem controlar quais transações são reconhecidas.