Avançar para o conteúdo principal

Sincronização Plumo Ultralight

Introdução ao Sincronismo Ultralight Plumo, são conceitos fundamentais, arquitetura, processo e implementação.


O que é Plumo Ultralight Sync?

Plumo é um sistema baseado em zk-SNARK que permite que nós móveis e de recursos restritos na rede Celo sincronizem com a blockchain de Celo mais rápido e com menos dados. Ele consegue isso usando provas de conhecimento zero, que permitem a rápida verificação da sincronização em cadeia sem ter que executá-lo localmente.

Background

Celo é uma plataforma blockchain mobile-first com a missão de permitir as condições de prosperidade em todo o mundo. Isso significa que os primeiros usuários da Valora e do Celo estarão em mercados emergentes. Nesses países, enquanto a penetração do telefone celular aumentou significativamente, os planos de dados e o hardware do dispositivo ainda estão atrasados. Isto significa que, para os usuários médios, os dados são um bem escasso e os dispositivos são mais simples em relação aos mais recentes e maiores dispositivos iPhone ou Android.

Para que esses usuários sincronizem e interajam com uma rede blockchain, precisarão rodar um cliente leve nos dispositivos. No entanto, as blockchains tradicionais de light clients na prova de trabalho (PoW) precisam baixar todos os cabeçalhos de bloco, que crescem linearmente com novos blocos. Com o tempo, isso se torna insustentável, e até mesmo clientes lights levam minutos para sincronizar.

Proof of Stake Light Clients

O Celo usa um sistema de consenso de prova de participação (PoS), permitindo oferecer uma melhor experiência de sincronização leve do cliente, logo de cara:

  1. Primeiro, os clientes Celo light precisam apenas baixar os cabeçalhos dos blocos de época, que contêm informações sobre o conjunto de validadores atual. O conjunto de validadores no Celo muda uma vez a cada época, aproximadamente uma vez por dia. Isso significa que em vez de baixar um bloco de cabeçalho para cada bloco na rede Celo, eles podem apenas baixar um por dia.

  2. Segundo, Celo usa assinaturas BLS para assinaturas de validador agregado. Semelhante ao consenso Tendermint, o mecanismo de consenso IBFT da Celo requer um quorum de 2/3 ou mais validadores para assinar cada bloco para comprometê-lo com o blockchain. Em vez de ter cada uma dessas assinaturas armazenadas separadamente na cadeia, Celo usa assinaturas BLS que podem combiná-las em uma assinatura por bloco.

Essas duas inovações reduzem significativamente o tempo e os dados necessários para sincronizar, mas ao longo do tempo, o tempo de sincronização continua a aumentar. Uma opção é para o checkpoint a cadeia com tanta frequência, para que os clientes não precisem sincronizar a partir do bloco gênesi. Isto atenua certamente o desafio, mas verificar requer obter consenso e acordo por parte da comunidade, que pode levar tempo. E se houvesse uma maneira de "checkpoint" criptográfico?

Entra Plumo

É aqui que entra o Plumo. Plumo zk-SNARKs permite que clientes leves verifiquem rapidamente as transições de período X para período X + Y, onde Y é centenas de épocas. Isso significa que, em vez de verificar cada época, os clientes leves podem "hop" de SNARK a SNARK até alcançarem as últimas provas. A partir daí, eles podem baixar os cabeçalhos de blocos de epoch restantes para sincronizar com a cabeça da cadeia.

As provas Plumo são geradas por um provador que pode ser executado por vários nós na rede Celo. As provas são solicitadas pelos clientes light no protocolo de cliente light modificado. Os clientes leves podem verificar provas usando a chave de verificação que está incluída com o binário.

Usando a Plumo, os clientes leves podem reduzir drasticamente a quantidade de dados e tempo necessários para sincronizar de forma confiável com a blockchain do Celo. Mas mais uma etapa é necessária para que o Plumo esteja ativo na rede Celo - a configuração do Plumo MPC.

Plumo MPC Setup

Para gerar as chaves do provador e verificador para o circuito Plumo SNARK, é necessário executar uma computação multipartidária (MPC).

Um MPC é um mecanismo criptográfico para diferentes partes realizarem um cálculo em conjunto. Os circuitos SNARK exigem uma "configuração confiável" onde um segredo compartilhado é usado para gerar parâmetros públicos que podem ser usados para provar e verificar SNARKs. Se uma pessoa executasse essa configuração, ela poderia provar coisas incorretas explorando um backdoor no circuito. No entanto, com um MPC, este processo de configuração está dividido entre dezenas ou centenas de colaboradores, e se até mesmo um dos participantes for honesto (mantém suas entradas privadas), então o sistema estará seguro.

No caso da Plumo Ceremony, essa computação coletiva será uma série de ações conjuntas feitas por um grupo de participantes dentro da comunidade Celo e fora dela.

Como contribuir

A configuração da MPC Plumo está dividida em duas etapas:

  • Fase 1 - Poderes de Tau
    • A saída desta etapa pode ser usada para os circuitos Groth16 até o tamanho da fase, ou sistemas universais de provação, como PLONK e Marlin.
  • Fase 2 - Circuito Plumo
    • Nesta fase, os participantes contribuem para as chaves de circuito Plumo, que seriam utilizadas por revisores para criar provas e verificadores para verificá-los.

A primeira fase terá lugar no início de Dezembro de 2020, e continuará até Janeiro de 2021. Será composto por múltiplas rodadas de 6 a 10 contribuidores cada um com a configuração do Plumo durante aproximadamente 36 horas. Enquanto grande parte da atividade é passiva e envolve simplesmente executar a computação continuamente, contribuidores não devem esperar usar suas máquinas para outras atividades intensivas ao longo da configuração.

A fase 2 começará cerca de um mês após a Fase 1.

Os colaboradores também receberão um presente pelo tempo e esforços, e serão reconhecidos por suas contribuições à rede Celo.

Pré-requisitos

Você pode executar o software do colaborador localmente ou em nuvem VMs, mas as máquinas de desktop são preferíveis. Os requisitos mínimos da máquina são detalhados abaixo:

Requisitos da máquina:

  • Modelo da CPU mais recente que 2016
  • Requisitos mínimos do processador:
    • 2.6GHz, 6 núcleos, 12 threads, OU
    • 2.3GHz, 8 núcleos, 16 threads, OU
    • 3.6GHz, 4 núcleos, 4 threads
  • Sistema operacional: Linux, macOS, Windows
  • Velocidade de conexão de internet recomendada: Upload de 10 Mbit

Com este tipo de máquinas, a participação na instalação deve demorar cerca de 30 horas, potencialmente um pouco mais ou muito menos, dependendo do seu hardware e conexão de internet específicos.

Executando a Configuração

Fase 1

As instruções abaixo são para a primeira fase do estabelecimento do Plumo, Poderes de Tau.

Gerar seu endereço

O primeiro passo a participar é gerar o endereço do seu Celo em um local seguro.

  • Obtenha o generate binário:
    • Opção um - compile o generate binário:
      • Instale o Rust 1.49 usando rustup install 1.49.0. Se você não tiver rustup instalado, siga as instruções em https://rustup.rs/. Se você estiver usando uma máquina Apple M1, instale a versão beta do Rust usando a rustup install beta.
      • git clone https://github.com/celo-org/snark-setup-operator
      • cd snark-setup-operator
      • git checkout ac3d5603256fc250500e00bae21ba646dd316d6f
      • cargo build --release --bin generate
      • Agora você pode usar ./target/release/generate
    • Opção 2 - se você prefere usar um binário pré-compilado, baixe o binário generate correspondente ao seu sistema operacional de aqui.
  • Use b2sum para verificar o hash do binário contra o hash na página de download executando b2sum FILE, onde FILE é a contribute nome binário para o seu SO. Se você não tiver o b2sum instalado, você pode baixá-lo do https://github.com/dchest/b2sum, por exemplo.
  • Executá-lo em linha de comando - navegue na linha de comando até a pasta relevante - e siga as instruções.
    • Quando for necessário Digite alguma entropia para sua semente Plumo:, você pode usar qualquer fonte de entropia.
    • Certifique-se de salvar a sua senha - você precisará dela mais tarde.
    • Se você estiver usando um mini USB você pode usar a flag --keys-file KEYS_FILE, passando pelo caminho do respectivo arquivo para salvar a tecla no próprio drive em si.
  • Envie o endereço gerado para plumo@celo.org.
  • Mantenha o arquivo plumo.keys resultante. Idealmente, será armazenado em um local que é fácil de destruir depois, como um mini USB.

Executar o software Colaborador

Em seguida, você obterá o contribute binário e comece a contribuir para a configuração do Plumo.

cLabs está executando o servidor de coordenadores, que tem uma lista de endereços de participantes aprovados. Além disso, cLabs está executando alguns verificadores que verificam contribuições sob demanda, permitindo a configuração fazer progresso.

  • Após receber a confirmação do cLabs, obtenha o binário contribute:

    • Opção um - compile o binário contribute:
      • Instale o Rust 1.49 usando rustup install 1.49.0. Se você não tiver rustup instalado, siga as instruções em https://rustup.rs/. Se você estiver usando uma máquina Apple M1, instale a versão beta do Rust usando a rustup install beta.
      • git clone https://github.com/celo-org/snark-setup-operator
      • cd snark-setup-operator
      • git checkout ac3d5603256fc250500e00bae21ba646dd316d6f
      • cargo build --release --bin contribute
      • Agora você pode usar ./target/release/contribute
    • Opção 2 - se você prefere usar um binário pré-compilado, baixe o binário contribute correspondente ao seu sistema operacional de aqui.
  • Use b2sum para verificar o hash do binário contra o hash na página de download executando b2sum FILE, onde FILE é a contribute nome binário para o seu SO. Se você não tiver o b2sum instalado, você pode baixá-lo do https://github.com/dchest/b2sum, por exemplo.

  • Execute da seguinte forma, assumindo que suas chaves residam no KEYS_FILE:

    • Usuários Windows: ./contribute-windows.exe --keys-file KEYS_FILE
    • macOS users: ./contribute-macos --keys-file KEYS_FILE
    • Usuários Linux: ./contribute-linux --keys-file KEYS_FILE

    Por exemplo, assumindo que você está usando Linux e suas chaves residem em /mnt/plumo/plumo.keys, você executaria: ./contribute-linux --keys-file /mnt/plumo/plumo.keys.

  • Você será solicitado pela sua senha - digite a mesma de antes.

    • Siga o mesmo processo antes quando solicitado para uma entropia adicional.
  • Aguarde até ver o 0/256 na barra de progresso. Isto significa que a sua contribuição já começou, e você está executando com sucesso o binário do contribuinte.

Uma vez que isso estiver em execução, você pode deixar a máquina em execução -- nenhuma ação direta é necessária. Isto durará cerca de ~36 horas, após o software terminará de ser executado e você terá terminado de contribuir para a configuração do Plumo!

Fase 2

As instruções abaixo são para a segunda fase da configuração Plumo, o circuito Plumo.

Gerar seu endereço

O primeiro passo a participar é gerar o endereço do seu Celo em um local seguro.

  • Obtenha o generate binário:
    • Opção um - compile o generate binário:
      • Instale o Rust 1.52 usando rustup install 1.52.1. Se você não tiver rustup instalado, siga as instruções em https://rustup.rs/. Se você estiver usando uma máquina Apple M1, instale a versão beta do Rust usando a rustup install beta.
      • git clone https://github.com/celo-org/snark-setup-operator
      • cd snark-setup-operator
      • git checkout 33717c3b0869c605e6c3627446e916f268712e00
      • cargo build --release --bin generate
      • Agora você pode usar ./target/release/generate
    • Opção 2 - se você prefere usar um binário pré-compilado, baixe o binário generate correspondente ao seu sistema operacional de aqui.
  • Use b2sum para verificar o hash do binário contra o hash na página de download executando b2sum FILE, onde FILE é a contribute nome binário para o seu SO. Se você não tiver o b2sum instalado, você pode baixá-lo do https://github.com/dchest/b2sum, por exemplo.
  • Executá-lo em linha de comando - navegue na linha de comando até a pasta relevante - e siga as instruções.
    • Quando for necessário Digite alguma entropia para sua semente Plumo:, você pode usar qualquer fonte de entropia.
    • Certifique-se de salvar a sua senha - você precisará dela mais tarde.
    • Se você estiver usando um mini USB você pode usar a flag --keys-file KEYS_FILE, passando pelo caminho do respectivo arquivo para salvar a tecla no próprio drive em si.
  • Envie o endereço gerado para plumo@celo.org.
  • Mantenha o arquivo plumo.keys resultante. Idealmente, será armazenado em um local que é fácil de destruir depois, como um mini USB.

Executar o software Colaborador

Em seguida, você obterá o contribute binário e comece a contribuir para a configuração do Plumo.

cLabs está executando o servidor de coordenadores, que tem uma lista de endereços de participantes aprovados. Além disso, cLabs está executando alguns verificadores que verificam contribuições sob demanda, permitindo a configuração fazer progresso.

  • Após receber a confirmação do cLabs, obtenha o binário contribute:

    • Opção um - compile o binário contribute:
      • Instale o Rust 1.52 usando rustup install 1.52.1. Se você não tiver rustup instalado, siga as instruções em https://rustup.rs/. Se você estiver usando uma máquina Apple M1, instale a versão beta do Rust usando a rustup install beta.
      • git clone https://github.com/celo-org/snark-setup-operator
      • cd snark-setup-operator
      • git checkout 33717c3b0869c605e6c3627446e916f268712e00
      • cargo build --release --bin contribute
      • Agora você pode usar ./target/release/contribute
    • Opção 2 - se você prefere usar um binário pré-compilado, baixe o binário contribute correspondente ao seu sistema operacional de aqui.
  • Use b2sum para verificar o hash do binário contra o hash na página de download executando b2sum FILE, onde FILE é a contribute nome binário para o seu SO. Se você não tiver o b2sum instalado, você pode baixá-lo do https://github.com/dchest/b2sum, por exemplo.

  • Execute da seguinte forma, assumindo que suas chaves residam no KEYS_FILE:

    • Usuários Windows: ./contribute-windows.exe --keys-file KEYS_FILE
    • macOS users: ./contribute-macos --keys-file KEYS_FILE
    • Usuários Linux: ./contribute-linux --keys-file KEYS_FILE

    Por exemplo, assumindo que você está usando Linux e suas chaves residem em /mnt/plumo/plumo.keys, você executaria: ./contribute-linux --keys-file /mnt/plumo/plumo.keys.

  • Você será solicitado pela sua senha - digite a mesma de antes.

    • Siga o mesmo processo antes quando solicitado para uma entropia adicional.
  • Aguarde até ver o 0/256 na barra de progresso. Isto significa que a sua contribuição já começou, e você está executando com sucesso o binário do contribuinte.

Uma vez que isso estiver em execução, você pode deixar a máquina em execução -- nenhuma ação direta é necessária. Isto durará cerca de ~36 horas, após o software terminará de ser executado e você terá terminado de contribuir para a configuração do Plumo!

Publique seu certificado

O contribute binário produz um arquivo plumo.attestation que contém uma assinatura com o seu endereço. Depois que a sua participação terminar (e não antes!), publique-a (aqui)[https://github.com/celo-org/plumo-ceremony-attestations] criando uma nova issue! Se você usa binários pré-compilados, certifique-se de mencionar que você verificou os hashes binários postados na página de lançamentos que coincidem com os arquivos baixados.

Se você não tem mais acesso à plumo.attestation, isso ainda está bem, você pode preencher os outros detalhes do problema.

Resolução de Problemas

Esta seção contém alguns problemas comuns que os colaboradores podem encontrar durante a execução do software de instalação. Se tiver alguma dúvida, entre em contato com o canal #plumo no servidor Celo do Discord. É recomendável que você tenha outro dispositivo para poder entrar em contato em caso de problemas persistentes.

Permissões:

  • Talvez você precise alterar as permissões em ambos os generate e contribute para poder executá-los. Por exemplo, no macOS, você pode executar chmod u+x generate-macos contribute-macos.
  • No Windows, você pode receber um aviso de que este programa é de um desenvolvedor não assinado. Clique em "run anyway" para continuar.
  • No macOS, pode-se mostrar um erro de "permission denied". Isso ocorre porque é um arquivo baixado e, por padrão, está em quarentena. Você pode removê-lo da quarentena executando xattr -d com.apple.quarantine contribute-macos. Veja aqui para mais detalhes: https://superuser.com/questions/526920/how-to-remove-quarantine-from-file-permissions-in-os-x.

Hardware:

  • Desativar a soneca - se sua máquina estiver configurada automaticamente para desligar ou desligar os discos rígidos, é melhor desligar essas opções.
  • Bateria - é melhor conectar a máquina a uma saída, pois a configuração é intensiva computacionalmente e drenaria uma bateria rapidamente.
  • Máquina congelada - se o seu computador congelar, não se preocupe -- o software de configuração de Plumo está usando todos os tópicos do CPU, e deve se resolver por conta própria.

Se qualquer um deles acontecer, não se preocupe - pare e reinicie o programa de contribuição e reinsira a senha para continuar.

Network:

  • Se você tiver problemas para carregar suas contribuições, pode ser que você tenha outros processos que estão consumindo sua largura de banda. Certifique-se de sair de qualquer processo, como:
    • Feeds de upload de uma câmera Nest ou doméstica
    • Torrent / propagação de qualquer arquivo
    • Serviços de backup

Recursos Adicionais