Agradecimentos especiais a Dan Finlay, Karl Floersch, David Hoffman e às equipes da Scroll e da SoulWallet pelos comentários, revisões e sugestões.
À medida que a Ethereum passa de uma tecnologia experimental jovem para uma pilha de tecnologia madura capaz de realmente levar uma experiência aberta, global e sem permissão para os usuários comuns, há três grandes transições técnicas pelas quais a pilha precisa passar, mais ou menos simultaneamente:
O triângulo de transição do ecossistema. O senhor só pode escolher 3 de 3.
Sem o primeiro, a Ethereum fracassa porque cada transação custa US$ 3,75 (US$ 82,48 se tivermos outra corrida de touros), e todo produto que visa ao mercado de massa inevitavelmente se esquece da cadeia e adota soluções alternativas centralizadas para tudo.
Sem o segundo, a Ethereum fracassa porque os usuários não se sentem à vontade para armazenar seus fundos (e ativos não financeiros), e todos passam a usar bolsas centralizadas.
Sem o terceiro, o Ethereum fracassa porque ter todas as transações (e POAPs, etc.) disponíveis publicamente para literalmente qualquer pessoa ver é um sacrifício de privacidade alto demais para muitos usuários, e todos passam a usar soluções centralizadas que, pelo menos, ocultam um pouco seus dados.
Essas três transições são cruciais pelos motivos acima. Mas eles também são desafiadores devido à intensa coordenação envolvida para resolvê-los adequadamente. Não são apenas os recursos do protocolo que precisam ser aprimorados; em alguns casos, a maneira como interagimos com a Ethereum precisa mudar fundamentalmente, exigindo mudanças profundas nos aplicativos e nas carteiras.
Em um mundo de dimensionamento de L2, os usuários existirão em muitos L2s. O senhor é membro da ExampleDAO, que vive do otimismo? Então o senhor tem uma conta no Optimism! O senhor está mantendo um CDP em um sistema de stablecoin na ZkSync? Então o senhor tem uma conta no ZkSync! O senhor já experimentou algum aplicativo que por acaso vivia em Kakarot? Então o senhor tem uma conta no Kakarot! Os dias em que um usuário tinha apenas um endereço não existirão mais.
Eu tenho ETH em quatro lugares, de acordo com minha visualização da Brave Wallet. E sim, Arbitrum e Arbitrum Nova são diferentes. Não se preocupe, isso ficará mais confuso com o tempo!
As carteiras de contratos inteligentes aumentam a complexidade, pois tornam muito mais difícil ter o mesmo endereço em L1 e nos vários L2s. Atualmente, a maioria dos usuários usa contas de propriedade externa, cujo endereço é literalmente um hash da chave pública usada para verificar as assinaturas - portanto, nada muda entre L1 e L2. No entanto, com as carteiras de contratos inteligentes, manter um endereço se torna mais difícil. Embora muito trabalho tenha sido feito para tentar fazer com que os endereços sejam hashes de código que possam ser equivalentes em todas as redes, principalmente o CREATE2 e a fábrica de singleton ERC-2470, é difícil fazer com que isso funcione perfeitamente. Algumas L2s (por exemplo. "type 4 ZK-EVMs") não são totalmente equivalentes a EVMs, muitas vezes usando Solidity ou um conjunto intermediário, impedindo a equivalência de hash. E mesmo quando o senhor pode ter equivalência de hash, a possibilidade de as carteiras mudarem de propriedade por meio de mudanças de chave cria outras consequências não intuitivas.
A privacidade exige que cada usuário tenha ainda mais endereços e pode até mudar os tipos de endereços com os quais estamos lidando. Se as propostas de endereços furtivos forem amplamente utilizadas, em vez de cada usuário ter apenas alguns endereços, ou um endereço por L2, os usuários poderão ter um endereço por transação. Outros esquemas de privacidade, mesmo os já existentes, como o Tornado Cash, alteram a forma como os ativos são armazenados de uma maneira diferente: os fundos de muitos usuários são armazenados no mesmo contrato inteligente (e, portanto, no mesmo endereço). Para enviar fundos a um usuário específico, os usuários precisarão contar com o próprio sistema de endereçamento interno do esquema de privacidade.
Como vimos, cada uma das três transições enfraquece o modelo mental "um usuário ~= um endereço" de maneiras diferentes, e alguns desses efeitos se refletem na complexidade da execução das transições. Dois pontos específicos de complexidade são:
Tenho moedas no Scroll e quero pagar pelo café (se o "eu" for literalmente eu, o autor deste artigo, então "café" é, obviamente, uma metonímia para "chá verde"). O senhor está me vendendo o café, mas só está configurado para receber moedas no Taiko. O que fazer?
Há basicamente duas soluções:
É claro que essas soluções podem ser combinadas: o destinatário fornece a lista de L2s que está disposto a aceitar e a carteira do remetente calcula o pagamento, que pode envolver um envio direto, se houver sorte, ou um caminho de ponte entre L2s.
Mas esse é apenas um exemplo de um desafio importante que as três transições introduzem: ações simples, como pagar alguém, começam a exigir muito mais informações do que apenas um endereço de 20 bytes.
Felizmente, a transição para carteiras de contratos inteligentes não representa um grande ônus para o sistema de endereçamento, mas ainda há alguns problemas técnicos em outras partes da pilha de aplicativos que precisam ser resolvidos. As carteiras precisarão ser atualizadas para garantir que não enviem apenas 21.000 gas junto com uma transação, e será ainda mais importante garantir que o lado de recebimento do pagamento de uma carteira rastreie não apenas as transferências de ETH das EOAs, mas também a ETH enviada pelo código de contrato inteligente. Aplicativos que se baseiam no pressuposto de que a propriedade do endereço é imutável (por exemplo, o As NFTs que proíbem contratos inteligentes para impor royalties) terão que encontrar outras maneiras de atingir seus objetivos. As carteiras de contratos inteligentes também facilitarão algumas coisas - notadamente, se alguém receber apenas um token ERC20 que não seja ETH, poderá usar os paymasters ERC-4337 para pagar pelo gás com esse token.
A privacidade, por outro lado, mais uma vez apresenta grandes desafios com os quais ainda não lidamos de fato. O Tornado Cash original não apresentou nenhum desses problemas, pois não suportava transferências internas: os usuários só podiam depositar no sistema e sacar dele. No entanto, quando o senhor puder fazer transferências internas, os usuários precisarão usar o esquema de endereçamento interno do sistema de privacidade. Na prática, as "informações de pagamento" de um usuário precisariam conter (i) algum tipo de "chave pública de gastos", um compromisso com um segredo que o destinatário poderia usar para gastar, e (ii) alguma forma de o remetente enviar informações criptografadas que somente o destinatário pode descriptografar, para ajudar o destinatário a descobrir o pagamento.
Os protocolos de endereços furtivos se baseiam em um conceito de meta-endereços, que funcionam da seguinte maneira: uma parte do meta-endereço é uma versão oculta da chave de gastos do remetente e outra parte é a chave de criptografia do remetente (embora uma implementação mínima possa definir essas duas chaves como sendo as mesmas).
Visão geral esquemática de um esquema abstrato de endereços furtivos baseado em criptografia e ZK-SNARKs.
Uma lição importante aqui é que, em um ecossistema favorável à privacidade, um usuário terá tanto as chaves de publicação de gastos quanto as chaves de publicação de criptografia, e as "informações de pagamento" de um usuário deverão incluir ambas as chaves. Há também bons motivos, além dos pagamentos, para expandir nessa direção. Por exemplo, se quisermos um e-mail criptografado baseado em Ethereum, os usuários precisarão fornecer publicamente algum tipo de chave de criptografia. No "mundo EOA", poderíamos reutilizar as chaves da conta para isso, mas em um mundo seguro de carteira de contrato inteligente, provavelmente deveríamos ter uma funcionalidade mais explícita para isso. Isso também ajudaria a tornar a identidade baseada no Ethereum mais compatível com ecossistemas de privacidade descentralizados que não sejam do Ethereum, principalmente chaves PGP.
A maneira padrão de implementar alterações de chave e recuperação social em um mundo com muitos endereços por usuário é simplesmente fazer com que os usuários executem o procedimento de recuperação em cada endereço separadamente. Isso pode ser feito com um clique: a carteira pode incluir um software para executar o procedimento de recuperação em todos os endereços de um usuário ao mesmo tempo. No entanto, mesmo com essas simplificações de UX, a recuperação ingênua de vários endereços tem três problemas:
Resolver esses problemas é difícil. Felizmente, existe uma solução um tanto elegante que funciona razoavelmente bem: uma arquitetura que separa a lógica de verificação e a posse de ativos.
Cada usuário tem um contrato de armazenamento de chaves, que existe em um local (pode ser a rede principal ou uma L2 específica). Os usuários, então, têm endereços em diferentes L2s, em que a lógica de verificação de cada um desses endereços é um ponteiro para o contrato do repositório de chaves. Os gastos com esses endereços exigiriam uma prova que fosse para o contrato do repositório de chaves mostrando a chave pública de gastos atual (ou, mais realisticamente, muito recente).
A prova pode ser implementada de várias maneiras:
Se quisermos evitar fazer uma prova por transação, podemos implementar um esquema mais leve que exija apenas uma prova cross-L2 para recuperação. Os gastos de uma conta dependeriam de uma chave de gastos cuja pubkey correspondente é armazenada nessa conta, mas a recuperação exigiria uma transação que copiasse a spending_pubkey atual no keystore. Os fundos em endereços contrafatuais estão seguros, mesmo que suas chaves antigas não estejam: Para "ativar" um endereço contrafatual e transformá-lo em um contrato de trabalho, seria necessário fazer uma prova cross-L2 para copiar a spending_pubkey atual. Este tópico nos fóruns do Safe descreve como uma arquitetura semelhante pode funcionar.
Para adicionar privacidade a esse esquema, basta criptografar o ponteiro e fazer todas as nossas provas dentro dos ZK-SNARKs:
Com mais trabalho (por exemplo. Usando <a href="https://notes.ethereum.org/@vbuterin/non_index_revealing_proof"> this como ponto de partida), também poderíamos eliminar a maior parte da complexidade dos ZK-SNARKs e criar um esquema mais simples baseado em KZG.
Esses esquemas podem ser complexos. O lado positivo é que há muitas sinergias potenciais entre eles. Por exemplo, o conceito de "contratos de repositório de chaves" também poderia ser uma solução para o desafio dos "endereços" mencionado na seção anterior: se quisermos que os usuários tenham endereços persistentes, que não mudem toda vez que o usuário atualizar uma chave, poderíamos colocar meta-endereços furtivos, chaves de criptografia e outras informações no contrato de repositório de chaves e usar o endereço do contrato de repositório de chaves como o "endereço" do usuário.
Usar o ENS é caro. Hoje, em junho de 2023, a situação não é tão ruim: a taxa de transação é significativa, mas ainda é comparável à taxa de domínio ENS. O registro do zuzalu.eth me custou cerca de US$ 27, dos quais US$ 11 foram de taxas de transação. Mas, se tivermos outro mercado em alta, as taxas vão disparar. Mesmo sem os aumentos de preço da ETH, as taxas de gás que retornam a 200 gwei aumentariam a taxa de câmbio de um registro de domínio para US$ 104. Portanto, se quisermos que as pessoas realmente usem a ENS, especialmente em casos de uso como mídias sociais descentralizadas, em que os usuários exigem registro quase gratuito (e a taxa de domínio da ENS não é um problema porque essas plataformas oferecem subdomínios aos seus usuários), precisamos que a ENS trabalhe no L2.
Felizmente, a equipe do ENS deu um passo à frente e o ENS on L2 está realmente acontecendo! O ERC-3668 (também conhecido como "o padrão CCIP"), juntamente com o ENSIP-10, oferece uma maneira de verificar automaticamente os subdomínios ENS em qualquer L2. O padrão CCIP exige a configuração de um contrato inteligente que descreva um método para verificar provas de dados em L2 e um domínio (por exemplo, o senhor pode ter um contrato inteligente com o senhor). A Optinames usa ecc.eth) pode ser colocada sob o controle de tal contrato. Quando o contrato da CCIP controlar o ecc.eth no L1, o acesso a algum subdomínio.ecc.eth envolverá automaticamente a localização e a verificação de uma prova (por exemplo, o Merkle branch) do estado em L2 que realmente armazena esse subdomínio específico.
Na verdade, buscar as provas envolve ir a uma lista de URLs armazenados no contrato, o que, reconhecidamente, parece uma centralização, embora eu afirme que não é: trata-se de um modelo de confiança 1-de-N (provas inválidas são capturadas pela lógica de verificação na função de retorno de chamada do contrato CCIP e, desde que um dos URLs retorne uma prova válida, o senhor está bem). A lista de URLs pode conter dezenas deles.
O esforço do ENS CCIP é uma história de sucesso e deve ser visto como um sinal de que reformas radicais do tipo que precisamos são realmente possíveis. Mas há muito mais reformas na camada de aplicativos que precisam ser feitas. Alguns exemplos:
Hoje em dia, as carteiras estão no negócio de proteger ativos. Tudo vive na cadeia, e a única coisa que a carteira precisa proteger é a chave privada que está guardando esses ativos no momento. Se o senhor alterar a chave, poderá publicar com segurança sua chave privada anterior na Internet no dia seguinte. No entanto, em um mundo ZK, isso não é mais verdade: a carteira não está apenas protegendo as credenciais de autenticação, mas também mantém seus dados.
Vimos os primeiros sinais desse mundo com o Zupass, o sistema de identidade baseado no ZK-SNARK que foi usado no Zuzalu. Os usuários tinham uma chave privada que usavam para se autenticar no sistema, que poderia ser usada para fazer provas básicas como "provar que sou residente de Zuzalu, sem revelar qual". Mas o sistema Zupass também começou a ter outros aplicativos integrados, principalmente os selos (a versão do Zupass dos POAPs).
Um dos meus muitos selos Zupass, confirmando que sou um orgulhoso membro da Equipe Cat.
O principal recurso que os carimbos oferecem em relação aos POAPs é que os carimbos são privados: o usuário mantém os dados localmente e só prova um carimbo (ou algum cálculo sobre os carimbos) a alguém se quiser que essa pessoa tenha essas informações sobre o usuário. Mas isso cria um risco adicional: se o senhor perder essas informações, perderá seus selos.
É claro que o problema de manter os dados pode ser reduzido ao problema de manter uma única chave de criptografia: algum terceiro (ou até mesmo a cadeia) pode manter uma cópia criptografada dos dados. Isso tem a vantagem conveniente de que as ações que o senhor realiza não alteram a chave de criptografia e, portanto, não exigem nenhuma interação com o sistema que mantém sua chave de criptografia segura. Mas, mesmo assim, se o senhor perder a chave de criptografia, perderá tudo. Por outro lado, se alguém vir sua chave de criptografia, verá tudo o que foi criptografado com essa chave.
A solução de fato da Zupass foi incentivar as pessoas a armazenar suas chaves em vários dispositivos (por exemplo, o laptop e telefone), pois a chance de eles perderem o acesso a todos os dispositivos ao mesmo tempo é pequena. Poderíamos ir além e usar o compartilhamento de segredos para armazenar a chave, dividida entre vários guardiões.
Esse tipo de recuperação social via MPC não é uma solução suficiente para carteiras, pois significa que não apenas os guardiões atuais, mas também os anteriores, poderiam conspirar para roubar seus ativos, o que é um risco inaceitavelmente alto. Mas os vazamentos de privacidade são, em geral, um risco menor do que a perda total de ativos, e alguém com um caso de uso que exige muita privacidade pode sempre aceitar um risco maior de perda se não fizer o backup da chave associada a essas ações que exigem privacidade.
Para evitar sobrecarregar o usuário com um sistema bizantino de vários caminhos de recuperação, as carteiras que oferecem suporte à recuperação social provavelmente precisarão gerenciar tanto a recuperação de ativos quanto a recuperação de chaves de criptografia.
Uma das linhas comuns dessas mudanças é que o conceito de "endereço", um identificador criptográfico que o usuário usa para representar "você" na cadeia, terá que mudar radicalmente. As "instruções sobre como interagir comigo" não seriam mais apenas um endereço ETH; elas teriam que ser, de alguma forma, uma combinação de vários endereços em vários L2s, meta-endereços furtivos, chaves de criptografia e outros dados.
Uma maneira de fazer isso é tornar o ENS sua identidade: seu registro ENS poderia conter todas essas informações e, se o senhor enviar a alguém bob.eth (ou bob.ecc.eth, ou...), eles poderiam pesquisar e ver tudo sobre como pagar e interagir com o senhor, inclusive nas formas mais complicadas de preservação de privacidade e entre domínios.
Mas essa abordagem centrada no ENS tem dois pontos fracos:
Uma solução possível é colocar mais coisas no contrato do repositório de chaves mencionado na arquitetura anteriormente neste post. O contrato do repositório de chaves poderia conter todas as várias informações sobre o usuário e como interagir com ele (e com o CCIP, algumas dessas informações poderiam estar fora da cadeia), e os usuários usariam o contrato do repositório de chaves como identificador principal. Mas os ativos reais que eles recebem seriam armazenados em todos os tipos de lugares diferentes. Os contratos de repositório de chaves não estão vinculados a um nome e são compatíveis com o contrafactual: o senhor pode gerar um endereço que, comprovadamente, só pode ser inicializado por um contrato de repositório de chaves que tenha determinados parâmetros iniciais fixos.
Outra categoria de soluções tem a ver com o abandono total do conceito de endereços voltados para o usuário, em um espírito semelhante ao do protocolo de pagamento Bitcoin. Uma ideia é confiar mais nos canais de comunicação direta entre o remetente e o destinatário; por exemplo, o remetente poderia enviar um link de reivindicação (como um URL explícito ou um código QR) que o destinatário poderia usar para aceitar o pagamento da forma que desejar.
Independentemente de o remetente ou o destinatário agir primeiro, uma maior confiança nas carteiras que geram diretamente informações de pagamento atualizadas em tempo real poderia reduzir o atrito. Dito isso, os identificadores persistentes são convenientes (especialmente com o ENS), e a suposição de comunicação direta entre o remetente e o destinatário é realmente complicada na prática e, portanto, podemos acabar vendo uma combinação de diferentes técnicas.
Em todos esses projetos, é fundamental manter as coisas descentralizadas e compreensíveis para os usuários. Precisamos garantir que os usuários tenham acesso fácil a uma visão atualizada de quais são seus ativos atuais e quais mensagens foram publicadas e destinadas a eles. Essas visualizações devem depender de ferramentas abertas, não de soluções proprietárias. Será necessário um trabalho árduo para evitar que a maior complexidade da infraestrutura de pagamento se transforme em uma "torre de abstração" opaca, na qual os desenvolvedores tenham dificuldade para entender o que está acontecendo e adaptá-la a novos contextos. Apesar dos desafios, alcançar escalabilidade, segurança de carteira e privacidade para usuários regulares é crucial para o futuro da Ethereum. Não se trata apenas de viabilidade técnica, mas de acessibilidade real para usuários comuns. Precisamos nos erguer para enfrentar esse desafio.
Agradecimentos especiais a Dan Finlay, Karl Floersch, David Hoffman e às equipes da Scroll e da SoulWallet pelos comentários, revisões e sugestões.
À medida que a Ethereum passa de uma tecnologia experimental jovem para uma pilha de tecnologia madura capaz de realmente levar uma experiência aberta, global e sem permissão para os usuários comuns, há três grandes transições técnicas pelas quais a pilha precisa passar, mais ou menos simultaneamente:
O triângulo de transição do ecossistema. O senhor só pode escolher 3 de 3.
Sem o primeiro, a Ethereum fracassa porque cada transação custa US$ 3,75 (US$ 82,48 se tivermos outra corrida de touros), e todo produto que visa ao mercado de massa inevitavelmente se esquece da cadeia e adota soluções alternativas centralizadas para tudo.
Sem o segundo, a Ethereum fracassa porque os usuários não se sentem à vontade para armazenar seus fundos (e ativos não financeiros), e todos passam a usar bolsas centralizadas.
Sem o terceiro, o Ethereum fracassa porque ter todas as transações (e POAPs, etc.) disponíveis publicamente para literalmente qualquer pessoa ver é um sacrifício de privacidade alto demais para muitos usuários, e todos passam a usar soluções centralizadas que, pelo menos, ocultam um pouco seus dados.
Essas três transições são cruciais pelos motivos acima. Mas eles também são desafiadores devido à intensa coordenação envolvida para resolvê-los adequadamente. Não são apenas os recursos do protocolo que precisam ser aprimorados; em alguns casos, a maneira como interagimos com a Ethereum precisa mudar fundamentalmente, exigindo mudanças profundas nos aplicativos e nas carteiras.
Em um mundo de dimensionamento de L2, os usuários existirão em muitos L2s. O senhor é membro da ExampleDAO, que vive do otimismo? Então o senhor tem uma conta no Optimism! O senhor está mantendo um CDP em um sistema de stablecoin na ZkSync? Então o senhor tem uma conta no ZkSync! O senhor já experimentou algum aplicativo que por acaso vivia em Kakarot? Então o senhor tem uma conta no Kakarot! Os dias em que um usuário tinha apenas um endereço não existirão mais.
Eu tenho ETH em quatro lugares, de acordo com minha visualização da Brave Wallet. E sim, Arbitrum e Arbitrum Nova são diferentes. Não se preocupe, isso ficará mais confuso com o tempo!
As carteiras de contratos inteligentes aumentam a complexidade, pois tornam muito mais difícil ter o mesmo endereço em L1 e nos vários L2s. Atualmente, a maioria dos usuários usa contas de propriedade externa, cujo endereço é literalmente um hash da chave pública usada para verificar as assinaturas - portanto, nada muda entre L1 e L2. No entanto, com as carteiras de contratos inteligentes, manter um endereço se torna mais difícil. Embora muito trabalho tenha sido feito para tentar fazer com que os endereços sejam hashes de código que possam ser equivalentes em todas as redes, principalmente o CREATE2 e a fábrica de singleton ERC-2470, é difícil fazer com que isso funcione perfeitamente. Algumas L2s (por exemplo. "type 4 ZK-EVMs") não são totalmente equivalentes a EVMs, muitas vezes usando Solidity ou um conjunto intermediário, impedindo a equivalência de hash. E mesmo quando o senhor pode ter equivalência de hash, a possibilidade de as carteiras mudarem de propriedade por meio de mudanças de chave cria outras consequências não intuitivas.
A privacidade exige que cada usuário tenha ainda mais endereços e pode até mudar os tipos de endereços com os quais estamos lidando. Se as propostas de endereços furtivos forem amplamente utilizadas, em vez de cada usuário ter apenas alguns endereços, ou um endereço por L2, os usuários poderão ter um endereço por transação. Outros esquemas de privacidade, mesmo os já existentes, como o Tornado Cash, alteram a forma como os ativos são armazenados de uma maneira diferente: os fundos de muitos usuários são armazenados no mesmo contrato inteligente (e, portanto, no mesmo endereço). Para enviar fundos a um usuário específico, os usuários precisarão contar com o próprio sistema de endereçamento interno do esquema de privacidade.
Como vimos, cada uma das três transições enfraquece o modelo mental "um usuário ~= um endereço" de maneiras diferentes, e alguns desses efeitos se refletem na complexidade da execução das transições. Dois pontos específicos de complexidade são:
Tenho moedas no Scroll e quero pagar pelo café (se o "eu" for literalmente eu, o autor deste artigo, então "café" é, obviamente, uma metonímia para "chá verde"). O senhor está me vendendo o café, mas só está configurado para receber moedas no Taiko. O que fazer?
Há basicamente duas soluções:
É claro que essas soluções podem ser combinadas: o destinatário fornece a lista de L2s que está disposto a aceitar e a carteira do remetente calcula o pagamento, que pode envolver um envio direto, se houver sorte, ou um caminho de ponte entre L2s.
Mas esse é apenas um exemplo de um desafio importante que as três transições introduzem: ações simples, como pagar alguém, começam a exigir muito mais informações do que apenas um endereço de 20 bytes.
Felizmente, a transição para carteiras de contratos inteligentes não representa um grande ônus para o sistema de endereçamento, mas ainda há alguns problemas técnicos em outras partes da pilha de aplicativos que precisam ser resolvidos. As carteiras precisarão ser atualizadas para garantir que não enviem apenas 21.000 gas junto com uma transação, e será ainda mais importante garantir que o lado de recebimento do pagamento de uma carteira rastreie não apenas as transferências de ETH das EOAs, mas também a ETH enviada pelo código de contrato inteligente. Aplicativos que se baseiam no pressuposto de que a propriedade do endereço é imutável (por exemplo, o As NFTs que proíbem contratos inteligentes para impor royalties) terão que encontrar outras maneiras de atingir seus objetivos. As carteiras de contratos inteligentes também facilitarão algumas coisas - notadamente, se alguém receber apenas um token ERC20 que não seja ETH, poderá usar os paymasters ERC-4337 para pagar pelo gás com esse token.
A privacidade, por outro lado, mais uma vez apresenta grandes desafios com os quais ainda não lidamos de fato. O Tornado Cash original não apresentou nenhum desses problemas, pois não suportava transferências internas: os usuários só podiam depositar no sistema e sacar dele. No entanto, quando o senhor puder fazer transferências internas, os usuários precisarão usar o esquema de endereçamento interno do sistema de privacidade. Na prática, as "informações de pagamento" de um usuário precisariam conter (i) algum tipo de "chave pública de gastos", um compromisso com um segredo que o destinatário poderia usar para gastar, e (ii) alguma forma de o remetente enviar informações criptografadas que somente o destinatário pode descriptografar, para ajudar o destinatário a descobrir o pagamento.
Os protocolos de endereços furtivos se baseiam em um conceito de meta-endereços, que funcionam da seguinte maneira: uma parte do meta-endereço é uma versão oculta da chave de gastos do remetente e outra parte é a chave de criptografia do remetente (embora uma implementação mínima possa definir essas duas chaves como sendo as mesmas).
Visão geral esquemática de um esquema abstrato de endereços furtivos baseado em criptografia e ZK-SNARKs.
Uma lição importante aqui é que, em um ecossistema favorável à privacidade, um usuário terá tanto as chaves de publicação de gastos quanto as chaves de publicação de criptografia, e as "informações de pagamento" de um usuário deverão incluir ambas as chaves. Há também bons motivos, além dos pagamentos, para expandir nessa direção. Por exemplo, se quisermos um e-mail criptografado baseado em Ethereum, os usuários precisarão fornecer publicamente algum tipo de chave de criptografia. No "mundo EOA", poderíamos reutilizar as chaves da conta para isso, mas em um mundo seguro de carteira de contrato inteligente, provavelmente deveríamos ter uma funcionalidade mais explícita para isso. Isso também ajudaria a tornar a identidade baseada no Ethereum mais compatível com ecossistemas de privacidade descentralizados que não sejam do Ethereum, principalmente chaves PGP.
A maneira padrão de implementar alterações de chave e recuperação social em um mundo com muitos endereços por usuário é simplesmente fazer com que os usuários executem o procedimento de recuperação em cada endereço separadamente. Isso pode ser feito com um clique: a carteira pode incluir um software para executar o procedimento de recuperação em todos os endereços de um usuário ao mesmo tempo. No entanto, mesmo com essas simplificações de UX, a recuperação ingênua de vários endereços tem três problemas:
Resolver esses problemas é difícil. Felizmente, existe uma solução um tanto elegante que funciona razoavelmente bem: uma arquitetura que separa a lógica de verificação e a posse de ativos.
Cada usuário tem um contrato de armazenamento de chaves, que existe em um local (pode ser a rede principal ou uma L2 específica). Os usuários, então, têm endereços em diferentes L2s, em que a lógica de verificação de cada um desses endereços é um ponteiro para o contrato do repositório de chaves. Os gastos com esses endereços exigiriam uma prova que fosse para o contrato do repositório de chaves mostrando a chave pública de gastos atual (ou, mais realisticamente, muito recente).
A prova pode ser implementada de várias maneiras:
Se quisermos evitar fazer uma prova por transação, podemos implementar um esquema mais leve que exija apenas uma prova cross-L2 para recuperação. Os gastos de uma conta dependeriam de uma chave de gastos cuja pubkey correspondente é armazenada nessa conta, mas a recuperação exigiria uma transação que copiasse a spending_pubkey atual no keystore. Os fundos em endereços contrafatuais estão seguros, mesmo que suas chaves antigas não estejam: Para "ativar" um endereço contrafatual e transformá-lo em um contrato de trabalho, seria necessário fazer uma prova cross-L2 para copiar a spending_pubkey atual. Este tópico nos fóruns do Safe descreve como uma arquitetura semelhante pode funcionar.
Para adicionar privacidade a esse esquema, basta criptografar o ponteiro e fazer todas as nossas provas dentro dos ZK-SNARKs:
Com mais trabalho (por exemplo. Usando <a href="https://notes.ethereum.org/@vbuterin/non_index_revealing_proof"> this como ponto de partida), também poderíamos eliminar a maior parte da complexidade dos ZK-SNARKs e criar um esquema mais simples baseado em KZG.
Esses esquemas podem ser complexos. O lado positivo é que há muitas sinergias potenciais entre eles. Por exemplo, o conceito de "contratos de repositório de chaves" também poderia ser uma solução para o desafio dos "endereços" mencionado na seção anterior: se quisermos que os usuários tenham endereços persistentes, que não mudem toda vez que o usuário atualizar uma chave, poderíamos colocar meta-endereços furtivos, chaves de criptografia e outras informações no contrato de repositório de chaves e usar o endereço do contrato de repositório de chaves como o "endereço" do usuário.
Usar o ENS é caro. Hoje, em junho de 2023, a situação não é tão ruim: a taxa de transação é significativa, mas ainda é comparável à taxa de domínio ENS. O registro do zuzalu.eth me custou cerca de US$ 27, dos quais US$ 11 foram de taxas de transação. Mas, se tivermos outro mercado em alta, as taxas vão disparar. Mesmo sem os aumentos de preço da ETH, as taxas de gás que retornam a 200 gwei aumentariam a taxa de câmbio de um registro de domínio para US$ 104. Portanto, se quisermos que as pessoas realmente usem a ENS, especialmente em casos de uso como mídias sociais descentralizadas, em que os usuários exigem registro quase gratuito (e a taxa de domínio da ENS não é um problema porque essas plataformas oferecem subdomínios aos seus usuários), precisamos que a ENS trabalhe no L2.
Felizmente, a equipe do ENS deu um passo à frente e o ENS on L2 está realmente acontecendo! O ERC-3668 (também conhecido como "o padrão CCIP"), juntamente com o ENSIP-10, oferece uma maneira de verificar automaticamente os subdomínios ENS em qualquer L2. O padrão CCIP exige a configuração de um contrato inteligente que descreva um método para verificar provas de dados em L2 e um domínio (por exemplo, o senhor pode ter um contrato inteligente com o senhor). A Optinames usa ecc.eth) pode ser colocada sob o controle de tal contrato. Quando o contrato da CCIP controlar o ecc.eth no L1, o acesso a algum subdomínio.ecc.eth envolverá automaticamente a localização e a verificação de uma prova (por exemplo, o Merkle branch) do estado em L2 que realmente armazena esse subdomínio específico.
Na verdade, buscar as provas envolve ir a uma lista de URLs armazenados no contrato, o que, reconhecidamente, parece uma centralização, embora eu afirme que não é: trata-se de um modelo de confiança 1-de-N (provas inválidas são capturadas pela lógica de verificação na função de retorno de chamada do contrato CCIP e, desde que um dos URLs retorne uma prova válida, o senhor está bem). A lista de URLs pode conter dezenas deles.
O esforço do ENS CCIP é uma história de sucesso e deve ser visto como um sinal de que reformas radicais do tipo que precisamos são realmente possíveis. Mas há muito mais reformas na camada de aplicativos que precisam ser feitas. Alguns exemplos:
Hoje em dia, as carteiras estão no negócio de proteger ativos. Tudo vive na cadeia, e a única coisa que a carteira precisa proteger é a chave privada que está guardando esses ativos no momento. Se o senhor alterar a chave, poderá publicar com segurança sua chave privada anterior na Internet no dia seguinte. No entanto, em um mundo ZK, isso não é mais verdade: a carteira não está apenas protegendo as credenciais de autenticação, mas também mantém seus dados.
Vimos os primeiros sinais desse mundo com o Zupass, o sistema de identidade baseado no ZK-SNARK que foi usado no Zuzalu. Os usuários tinham uma chave privada que usavam para se autenticar no sistema, que poderia ser usada para fazer provas básicas como "provar que sou residente de Zuzalu, sem revelar qual". Mas o sistema Zupass também começou a ter outros aplicativos integrados, principalmente os selos (a versão do Zupass dos POAPs).
Um dos meus muitos selos Zupass, confirmando que sou um orgulhoso membro da Equipe Cat.
O principal recurso que os carimbos oferecem em relação aos POAPs é que os carimbos são privados: o usuário mantém os dados localmente e só prova um carimbo (ou algum cálculo sobre os carimbos) a alguém se quiser que essa pessoa tenha essas informações sobre o usuário. Mas isso cria um risco adicional: se o senhor perder essas informações, perderá seus selos.
É claro que o problema de manter os dados pode ser reduzido ao problema de manter uma única chave de criptografia: algum terceiro (ou até mesmo a cadeia) pode manter uma cópia criptografada dos dados. Isso tem a vantagem conveniente de que as ações que o senhor realiza não alteram a chave de criptografia e, portanto, não exigem nenhuma interação com o sistema que mantém sua chave de criptografia segura. Mas, mesmo assim, se o senhor perder a chave de criptografia, perderá tudo. Por outro lado, se alguém vir sua chave de criptografia, verá tudo o que foi criptografado com essa chave.
A solução de fato da Zupass foi incentivar as pessoas a armazenar suas chaves em vários dispositivos (por exemplo, o laptop e telefone), pois a chance de eles perderem o acesso a todos os dispositivos ao mesmo tempo é pequena. Poderíamos ir além e usar o compartilhamento de segredos para armazenar a chave, dividida entre vários guardiões.
Esse tipo de recuperação social via MPC não é uma solução suficiente para carteiras, pois significa que não apenas os guardiões atuais, mas também os anteriores, poderiam conspirar para roubar seus ativos, o que é um risco inaceitavelmente alto. Mas os vazamentos de privacidade são, em geral, um risco menor do que a perda total de ativos, e alguém com um caso de uso que exige muita privacidade pode sempre aceitar um risco maior de perda se não fizer o backup da chave associada a essas ações que exigem privacidade.
Para evitar sobrecarregar o usuário com um sistema bizantino de vários caminhos de recuperação, as carteiras que oferecem suporte à recuperação social provavelmente precisarão gerenciar tanto a recuperação de ativos quanto a recuperação de chaves de criptografia.
Uma das linhas comuns dessas mudanças é que o conceito de "endereço", um identificador criptográfico que o usuário usa para representar "você" na cadeia, terá que mudar radicalmente. As "instruções sobre como interagir comigo" não seriam mais apenas um endereço ETH; elas teriam que ser, de alguma forma, uma combinação de vários endereços em vários L2s, meta-endereços furtivos, chaves de criptografia e outros dados.
Uma maneira de fazer isso é tornar o ENS sua identidade: seu registro ENS poderia conter todas essas informações e, se o senhor enviar a alguém bob.eth (ou bob.ecc.eth, ou...), eles poderiam pesquisar e ver tudo sobre como pagar e interagir com o senhor, inclusive nas formas mais complicadas de preservação de privacidade e entre domínios.
Mas essa abordagem centrada no ENS tem dois pontos fracos:
Uma solução possível é colocar mais coisas no contrato do repositório de chaves mencionado na arquitetura anteriormente neste post. O contrato do repositório de chaves poderia conter todas as várias informações sobre o usuário e como interagir com ele (e com o CCIP, algumas dessas informações poderiam estar fora da cadeia), e os usuários usariam o contrato do repositório de chaves como identificador principal. Mas os ativos reais que eles recebem seriam armazenados em todos os tipos de lugares diferentes. Os contratos de repositório de chaves não estão vinculados a um nome e são compatíveis com o contrafactual: o senhor pode gerar um endereço que, comprovadamente, só pode ser inicializado por um contrato de repositório de chaves que tenha determinados parâmetros iniciais fixos.
Outra categoria de soluções tem a ver com o abandono total do conceito de endereços voltados para o usuário, em um espírito semelhante ao do protocolo de pagamento Bitcoin. Uma ideia é confiar mais nos canais de comunicação direta entre o remetente e o destinatário; por exemplo, o remetente poderia enviar um link de reivindicação (como um URL explícito ou um código QR) que o destinatário poderia usar para aceitar o pagamento da forma que desejar.
Independentemente de o remetente ou o destinatário agir primeiro, uma maior confiança nas carteiras que geram diretamente informações de pagamento atualizadas em tempo real poderia reduzir o atrito. Dito isso, os identificadores persistentes são convenientes (especialmente com o ENS), e a suposição de comunicação direta entre o remetente e o destinatário é realmente complicada na prática e, portanto, podemos acabar vendo uma combinação de diferentes técnicas.
Em todos esses projetos, é fundamental manter as coisas descentralizadas e compreensíveis para os usuários. Precisamos garantir que os usuários tenham acesso fácil a uma visão atualizada de quais são seus ativos atuais e quais mensagens foram publicadas e destinadas a eles. Essas visualizações devem depender de ferramentas abertas, não de soluções proprietárias. Será necessário um trabalho árduo para evitar que a maior complexidade da infraestrutura de pagamento se transforme em uma "torre de abstração" opaca, na qual os desenvolvedores tenham dificuldade para entender o que está acontecendo e adaptá-la a novos contextos. Apesar dos desafios, alcançar escalabilidade, segurança de carteira e privacidade para usuários regulares é crucial para o futuro da Ethereum. Não se trata apenas de viabilidade técnica, mas de acessibilidade real para usuários comuns. Precisamos nos erguer para enfrentar esse desafio.