Fonte: Bitcoin Magazine; Tradução: Wuzhu, Golden Finance
Rollups recentemente tornou-se o foco da expansão do BTC, tornando-se a primeira coisa a realmente roubar o protagonismo da Rede de iluminação em termos de atenção mais ampla. Rollups tem como objetivo ser uma segunda camada fora da cadeia que não é limitada ou restringida pela Liquidez central da Rede de iluminação, ou seja, os usuários finais precisam ter fundos alocados (ou ‘emprestados’) antecipadamente para receber dinheiro, ou os Nós intermediários precisam de saldos de canal para facilitar o fluxo total de pagamentos do remetente para o destinatário.
Estes sistemas foram inicialmente implementados em Ethereum e outros sistemas Turing Completo, mas recentemente houve um foco na sua portabilidade para blockchains baseadas em UTXO, como BTC. Este artigo não pretende discutir a implementação atual no BTC, mas sim as funcionalidades idealizadas de Rollup que as pessoas têm perseguido a longo prazo, as quais dependem de capacidades atualmente não suportadas no BTC, ou seja, a capacidade de verificar zero conhecimento (ZKP) diretamente no BTC.
A estrutura básica do Roll é a seguinte: uma única conta (UTXO em BTC) mantém o saldo de todos os usuários no Rollup. Esta UTXO contém um compromisso, que existe na forma da raiz de Merkle da árvore de Merkle, comprometendo todos os saldos atuais das contas no Rollup. Todas essas contas são autorizadas com Chave pública/Chave privada, portanto, para fazer gastos fora da cadeia, os usuários ainda devem assinar com Chave Secreta. Esta parte da estrutura permite que os usuários saiam a qualquer momento sem permissão, apenas provando que suas contas fazem parte da árvore de Merkle, eles podem sair unilateralmente do Rollup sem a permissão do operador.
Os operadores da Rollup devem incluir um ZKP nas transações para atualizar a raiz de merkle do saldo da conta na cadeia ao concluir a transação fora da cadeia. Sem este ZKP, a transação será inválida e não pode ser incluída no bloco. Esta prova permite que as pessoas verifiquem se todas as alterações na conta fora da cadeia foram devidamente autorizadas pelo titular da conta e se o operador não atualizou maliciosamente o saldo para roubar fundos dos usuários ou redistribuí-los desonestamente para outros usuários.
A questão é, se apenas a raiz da árvore de Merkle for publicada na cadeia, como é que os utilizadores colocam os seus ramos na árvore para que possam sair quando quiserem sem permissão?
Em um Rollup adequado, sempre que uma nova transação fora da cadeia for confirmada e o estado da conta Rollup for alterado, as informações são colocadas diretamente na cadeia de blocos. Não é a árvore inteira, isso seria absurdo, mas sim as informações necessárias para reconstruir a árvore. Em uma implementação simples, o resumo de todas as contas existentes no Rollup conterá os saldos e as contas serão apenas adicionadas nas transações de atualização do Rollup.
Em implementações mais avançadas, é usado o diferencial de saldo. Isso essencialmente resume quais contas tiveram adições ou subtrações de fundos durante o processo de atualização. Isso permite que cada atualização do Rollup contenha apenas as alterações de saldo da conta que ocorreram. Em seguida, os usuários podem simplesmente percorrer a cadeia e ‘calcular’ a partir do início do Rollup para obter o estado atual do saldo da conta, o que lhes permite reconstruir a árvore de Merkle do saldo atual.
Isso permite economizar muito dinheiro e espaço de bloco (economizando dinheiro) ao mesmo tempo em que permite que os usuários garantam acesso às informações necessárias para sair unilateralmente. As regras de rollup exigem que esses dados sejam incluídos no rollup formal fornecido aos usuários usando a cadeia de blocos, ou seja, transações sem resumo de conta ou diferenças de conta são consideradas inválidas.
Uma outra abordagem para lidar com a questão da disponibilidade de dados de retirada de utilizadores é colocar os dados noutros locais para além da cadeia Bloco. Isto introduz questões delicadas, uma vez que o rollup ainda precisa garantir que os dados estão disponíveis noutros locais. Tradicionalmente, outras cadeias Bloco são utilizadas para este fim, sendo especialmente concebidas como camada de disponibilidade de dados para sistemas como o rollup.
Isso cria um dilema de segurança igualmente forte. Quando os dados são publicados diretamente na cadeia BTCBloco, as regras de consenso podem garantir que ele seja absolutamente correto. No entanto, quando é publicado em sistemas externos, o melhor que pode fazer é verificar a prova SPV, ou seja, que os dados foram publicados em outro sistema.
Isso requer prova de que os dados estão presentes em outras cadeias, o que é essencialmente um problema de Máquina Oracle. A cadeia de blocos do Bitcoin não pode verificar completamente qualquer coisa que não acontece em sua própria cadeia de blocos, a melhor coisa que pode fazer é verificar a Prova de Conhecimento Zero (ZKP). No entanto, a ZKP não pode verificar se os dados do bloco que contém os dados de rollup são realmente divulgados ao público após a geração. Não pode verificar se as informações externas realmente são públicas para todos.
Isto abriu a porta para ataques de retenção de dados, ou seja, criar compromissos com os dados publicados e usá-los para impulsionar o rollup, mas os dados não estão realmente disponíveis. Isso impede os usuários de retirar fundos. A única solução real é depender totalmente do valor e da estrutura de incentivos de sistemas além do BTC.
Isso cria um dilema para o rollup. Quando se trata de questões de disponibilidade de dados, basicamente existe uma escolha binária entre publicar os dados na blockchain BTC ou em outro lugar. Essa escolha tem um impacto significativo na segurança, soberania e escalabilidade do rollup.
Por um lado, usar a cadeia BTCBloco como uma camada de disponibilidade de dados coloca um limite rígido na escalabilidade dos rollups. O espaço do bloco é limitado, o que define um limite máximo para o número de rollups que podem existir ao mesmo tempo e o número total de transações que todos os rollups podem processar no Fora da Cadeia. Cada atualização de rollup requer espaço Bloco proporcional à quantidade de conta cujo saldo foi alterado desde a última atualização. A teoria da informação só permite que os dados sejam compactados até certo ponto, momento em que não há mais potencial de expansão.
Por outro lado, usar camadas diferentes para alcançar a disponibilidade de dados elimina o limite rígido dos ganhos de escalabilidade, mas também traz novas questões de segurança e soberania. Em Rollups que usam BTC para disponibilidade de dados, se os dados que os usuários precisam extrair não forem automaticamente publicados na blockchain, o estado do Rollup não pode mudar. Com Validiums, essa garantia depende completamente da capacidade do sistema externo utilizado para resistir a fraudes e ocultação de dados.
Agora, qualquer produtor de Bloco no sistema de disponibilidade de dados externos pode sequestrar os fundos do usuário BTCRollup produzindo Blocos em vez de transmitir o Bloco real, tornando os dados disponíveis.
Então, se realmente conseguirmos implementar uma implementação ideal do Rollup em BTC e permitir que os usuários saquem unilateralmente, como seria?