Pular para o conteúdo

Abstração de Conta: Passado, Presente, Futuro

Saiba mais sobre abstração de contas no Ethereum: o que significa e por que é importante.

15 min de leitura
Abstração de Conta: Passado, Presente, Futuro

Mesmo com um mercado em baixa em pleno vapor, poucas pessoas duvidam que as criptomoedas vieram para ficar — carteiras como a MetaMask já contam com milhões de usuários, por exemplo. Mas a pergunta ainda persiste: "Como vamos trazer o próximo bilhão de usuários para a web3?"

Dependendo de quem você pergunta, as respostas variam. Mas todos concordam em alguns pontos — especialmente na necessidade de melhorar a experiência dos usuários que interagem com aplicações blockchain. Sem tornar a web3 mais fácil de usar, as pessoas têm pouco incentivo para migrar dos aplicativos web2 que utilizam no dia a dia.

A "abstração de conta" é uma proposta que busca melhorar as interações dos usuários com o Ethereum — e tem sido cada vez mais tema de discussões na comunidade cripto. Você pode estar pensando: "O que exatamente é abstração de conta e por que devo me importar com isso?"

Este artigo foi criado para ajudá-lo a entender a abstração de conta, contextualizando seu passado, presente e futuro. Vamos responder a todas as perguntas que você possa ter sobre o tema — especificamente, o quem, o quê, o porquê, o como e o quando da abstração de conta.

Um resumo rápido dos principais pontos:

  • Contas programáveis e autocustodiadas ("smart accounts") podem reduzir o atrito no processo de integração de novos usuários ao ecossistema web3. No entanto, as limitações impostas pelo design do Ethereum impedem a adoção e o uso amplos de smart accounts.

  • A abstração de conta introduz mudanças significativas que abrem caminho para a adoção generalizada de smart accounts sem necessidade de confiança e resistentes à censura. Diferentes abordagens para implementar a abstração de conta estão sendo consideradas — cada uma com benefícios e trade-offs únicos.

  • A MetaMask está apoiando a adoção da abstração de conta por meio de sua plataforma de inovação sem permissão: MetaMask Snaps. Com o MetaMask Snaps, desenvolvedores podem estender a MetaMask para levar os benefícios da abstração de conta a usuários de cripto em todo o mundo.

O que é abstração de conta?

Como qualquer outro conceito novo na web3, a abstração de conta pode ser difícil de definir. Ainda assim, podemos entendê-la melhor começando por desvendar os diversos termos relevantes para a discussão sobre abstração de conta no Ethereum:

  1. Abstração (s.f.): Um termo (bastante complexo) em ciência da computação que significa, em linhas gerais, ocultar informações sobre um sistema ou aplicação para que ele possa ser usado com menos conhecimento dos processos que ocorrem em segundo plano. Também definida como "o processo de ocultar a complexidade de um sistema fornecendo uma interface que facilita sua manipulação."

  2. Conta (s.f.): A representação de um usuário na blockchain, capaz de enviar ou receber transações e interagir com outras contas on-chain. O Ethereum possui dois tipos de contas: Contas de Propriedade Externa (EOAs) e contas de contrato (também conhecidas como "contratos inteligentes").

2a. Contas de Propriedade Externa (EOA): Contas Ethereum geradas por meio de software de carteira (como a MetaMask) e gerenciadas por um par criptográfico de chaves pública e privada. Uma EOA é "ativa" (pode iniciar transações e pagar taxas de gas para execução na EVM). No entanto, está limitada a executar operações básicas — como enviar Ether ou interagir com contratos.

2b. Contas de contrato: Contas Ethereum implantadas como um contrato inteligente e controladas por lógica escrita em código (em vez de uma chave privada). Uma conta de contrato é "passiva": só pode enviar transações em resposta a uma transação de uma EOA e não pode pagar taxas de gas. No entanto, é programável e pode executar lógica arbitrária dependendo do código armazenado no endereço.

  1. Carteira (s.f.): Uma interface para gerenciar os fundos em sua conta Ethereum — o funcionamento de uma carteira depende do tipo de conta à qual está vinculada. Uma carteira baseada em EOA, como a MetaMask, requer uma chave privada para autorizar transações. Já uma carteira de contrato inteligente está vinculada a uma conta de contrato e pode usar lógica arbitrária para autorizar transações (ex.: usando um esquema de múltiplas assinaturas).

Com essas definições esclarecidas, podemos agora definir abstração de conta.

Definindo abstração de conta

Abstração de conta é uma proposta para aumentar a flexibilidade no gerenciamento e no comportamento das contas Ethereum. Isso é alcançado por meio da introdução de contratos de conta: contratos inteligentes de propósito específico que definem e gerenciam a conta Ethereum de um usuário (agora chamada de smart account).

Com a abstração de conta, você pode desfrutar de acesso programável aos fundos usando uma carteira de contrato inteligente, em vez de depender exclusivamente de chaves privadas para segurança. Isso é possível porque sua smart account pode ter regras personalizadas para gastar moedas e transferir ativos.

Então, como a "abstração" se encaixa em tudo isso?

Do ponto de vista da rede, "abstração de conta" significa que os detalhes dos tipos de conta são invisíveis para o protocolo Ethereum. Toda conta (incluindo contas autocustodiadas) é simplesmente um contrato inteligente, e os usuários são livres para determinar como as contas individuais são gerenciadas e operadas.

Do ponto de vista do usuário, "abstração de conta" significa que certos detalhes técnicos sobre a interação com contas Ethereum ficam ocultos por trás de interfaces de nível mais alto. Isso melhora o design das carteiras e reduz significativamente a complexidade de usar aplicações web3.

Esse esclarecimento é necessário porque a confusão em torno da abstração de conta vem de não saber (a) o que está sendo abstraído e (b) onde a abstração ocorre. As contas não são necessariamente abstraídas dos usuários (mesmo que sejam abstraídas do protocolo). Você ainda tem um endereço de carteira para receber fundos e uma chave de assinatura para garantir que somente você possa gastar esses fundos.

Do seu ponto de vista, a abstração de conta é mais como usar uma smart account que abstrai alguns detalhes sobre a interação com a blockchain. Para contextualizar, veja como é a interação com um dapp do ponto de vista de um usuário de primeira viagem:

Com a abstração de conta, desenvolvedores de carteiras podem criar sistemas que lidam com esses processos em segundo plano e simplificam a experiência de usar a web3 (TL;DR: as carteiras se tornam "invisíveis"). Alguns casos de uso (que abordaremos mais adiante) incluem: eliminar a necessidade de armazenar seed phrases/chaves privadas, pagar gas por transações ou até mesmo configurar uma conta on-chain por conta própria.

Os benefícios da abstração de conta

Como mencionado anteriormente, a abstração de conta elimina grande parte do atrito associado ao uso de carteiras web3 e à interação com dapps. Isso aproxima a web3 do ideal da web2, onde todos os usuários — tanto iniciantes quanto experientes — podem se beneficiar do mesmo grau de flexibilidade, segurança e facilidade de uso.

Em particular, a abstração de conta tem implicações enormes para o futuro da autocustódia. Com os recursos fornecidos pelos contratos de conta, usar uma carteira web3 será como usar uma conta bancária ou aplicativo sem precisar confiar no banco.

Nas seções seguintes, abordaremos as diferentes dimensões da abstração de conta e discutiremos como elas melhoram a experiência de uso do Ethereum. Especificamente, falaremos sobre abstração de assinatura, abstração de taxas e abstração de nonce.

Abstração de assinatura

Hoje, as transações de sua EOA precisam ter uma assinatura gerada pela chave privada da conta usando o algoritmo de assinatura digital de curva elíptica (ECDSA) para serem válidas. Isso dá à maioria das EOAs um modelo de segurança simples: os fundos estão seguros enquanto as chaves privadas permanecerem em posse do usuário. Mas também apresenta algumas limitações:

  1. As EOAs são notoriamente difíceis de proteger, especialmente porque agentes mal-intencionados estão sempre desenvolvendo novas formas de comprometer chaves privadas. Na MetaMask, vimos em primeira mão os desafios que phishing, engenharia social, spoofing, injeção de malware e ataques semelhantes representam para a segurança dos usuários na web3.

  2. A autocustódia pode parecer um esporte radical. Ao contrário de uma conta bancária comum, você não pode "recuperar" uma carteira EOA se a seed phrase/chave privada for perdida. Isso cria um desafio para novos usuários, que precisam lidar com as consequências de perder completamente os ativos mantidos em contas Ethereum sem nenhuma alternativa.

A abstração de assinatura resolve esses problemas ao remover as assinaturas ECDSA como mecanismo de autorização padrão para contas não custodiadas. Em vez disso, os usuários podem definir regras personalizadas para autorizar carteiras a iniciar transações. Ou, dito de outra forma, você pode decidir o que significa uma transação ser válida.

A implementação da abstração de assinatura abre possibilidades para esquemas de autorização mais avançados. Dessa forma, usar sua carteira web3 será semelhante — ou até melhor — a um aplicativo bancário web2. Veja alguns casos de uso:

  1. Limites de transação: Uma carteira vinculada à sua smart account pode rejeitar uma transação (ou solicitar autorização adicional) se o valor ultrapassar um limite predefinido. Parece familiar? Deveria — os bancos já fazem isso para proteger suas contas e cartões de crédito contra fraudes, uso não autorizado e outros motivos relacionados à segurança.

  2. Aprovações multipartes: Você pode delegar controle parcial de sua conta a partes de confiança, conhecidas como "guardiões". Os guardiões podem ser amigos, familiares, prestadores de serviços ou até mesmo um dispositivo separado que você possui (ex.: uma hardware wallet). Assim, você pode habilitar autenticação multifator (MFA) no estilo web2 para sua carteira, exigindo a aprovação dos guardiões para transações que retirem fundos de sua smart account.

  1. Rotação e revogação de chaves: Com smart accounts, você pode gerar uma nova chave de assinatura se a chave anterior for perdida ou roubada. Para maior segurança, você pode ter guardiões que congelam sua conta durante o processo de recuperação e exigem aprovação para fluxos de rotação/revogação de chaves (ou seja, recuperação social). Isso é semelhante a como você pode bloquear seu cartão de crédito se ele for extraviado/roubado sem perder o acesso à sua conta bancária.

  2. Sessões confiáveis: Você não gosta de ter que aprovar cada ação ao interagir com um dapp no seu navegador? Ótimo! Você pode criar "chaves de sessão" especiais com sua smart account para que os dapps assinem transações automaticamente por um período específico. Isso significa que você pode interagir com dapps — jogando um jogo blockchain, por exemplo — sem ser incomodado com pop-ups de carteira.

Em linhas gerais, as chaves de sessão são baseadas em um contrato inteligente que controla as interações entre sua conta e um dapp. Você sempre tem controle das chaves de sessão e pode regular a autoridade de assinatura do dapp, como quanto ele pode deduzir do seu saldo ou quais funções pode chamar.

  1. Pagamentos automáticos: Semelhante à ideia de chaves de sessão, você pode autorizar prestadores de serviços a "puxar" fundos de sua smart account (sujeito a regras predefinidas). Isso torna possível configurar pagamentos recorrentes e assinaturas com sua carteira web3. Você consegue imaginar pagar uma assinatura da Netflix ou uma conta de serviços usando sua conta Ethereum?

Abstração de taxas

Atualmente, toda transação Ethereum deve ter uma "taxa de gas" indicando quanto a EOA remetente está disposta a pagar pela execução. As taxas de gas são denominadas em Ether, o token nativo do Ethereum. Isso cria problemas, especialmente para novos usuários que precisam obter ETH antes de enviar sua transação.

A abstração de conta não elimina a necessidade de pagar taxas de gas, mas abstrai os detalhes de como e quando os usuários optam por pagar pelo gas (abstração de taxas). Por exemplo, a abstração de conta permite "transações patrocinadas", nas quais outra conta cobre o custo do gas para a transação de um usuário. Alguns benefícios das transações patrocinadas:

  1. Pagamento de gas com tokens não-ETH: Você já desejou poder pagar as taxas de transação com tokens ERC-20 em sua carteira? Com transações patrocinadas, você pode contar com um relayer com ETH para adiantar o custo das suas transações e reembolsá-lo em outro token, como DAI ou USDC.

  1. Transações sem gas: Desenvolvedores de dapps podem patrocinar transações e minimizar o atrito de integração para novos usuários do Ethereum. Você poderia essencialmente usar aplicativos web3 sem saber nada sobre "gas" e desfrutar da mesma experiência de um clique que os aplicativos web2 oferecem.

  1. Logins sociais: Um dapp pode implantar uma carteira de contrato em seu nome, resolvendo o problema de configurar uma carteira antes de enviar transações on-chain. O melhor? As carteiras podem usar infraestrutura de autenticação (ex.: Web3Auth e WebAuthn) para permitir que usuários criem contas web3 com credenciais existentes, como um endereço de e-mail ou conta do Facebook/Twitter.

Abstração de nonce

As smart accounts no Ethereum têm outro recurso especial: o agrupamento de transações (transaction batching). Com transações agrupadas, você pode combinar múltiplas operações em uma única transação on-chain e reduzir o custo e a complexidade de interagir com dapps. Veja por que o agrupamento de transações é importante:

Sua EOA armazena um valor conhecido como "nonce" que mostra quantas transações você enviou (pense nele como um contador de transações). Uma nova transação deve aumentar estritamente o nonce em 1 para ser válida — uma regra que impede que outra pessoa "reproduza" a mesma transação para roubar seus fundos (sim, isso pode acontecer).

Mas há um porém. Os nonces forçam você a processar transações no estilo primeiro a entrar, primeiro a sair (FIFO). Imagine que você tem duas transações (A e B) com nonce 0 e 1, respectivamente. Nesse caso, você enviaria a transação A e aguardaria uma confirmação (de sua execução) antes de enviar B.

Enviar B enquanto A ainda está pendente simplesmente faria com que a primeira fosse rejeitada, pois o nonce seria maior do que o intervalo prescrito (nonce atual da EOA + 1). Na verdade, esse é um grande motivo pelo qual você tem "transações travadas" ao usar uma carteira.

A abstração de nonce permite criar mecanismos personalizados de proteção contra replay (em vez de o protocolo Ethereum impor uma ordenação rígida nas transações). Por exemplo, você pode ter um esquema de nonce que permita processar múltiplas transações em paralelo. Isso resolveria o problema de transações congestionadas/travadas e melhoraria significativamente as interações com dapps.

Dito isso, a abstração de nonce é difícil de implementar na prática e pode potencialmente quebrar certas invariantes críticas para segurança e UX, como a unicidade do hash de transação. É aqui que o agrupamento de transações entra em cena:

Como as smart accounts podem processar múltiplas transações de uma vez, a necessidade de esquemas complexos de abstração de nonce desaparece em grande parte. Voltando ao exemplo anterior, podemos imaginar que as transações A e B são apenas partes de uma única operação hipotética, como a troca de ativos na Uniswap:

  • Transação A: Aprovar o contrato da Uniswap para acessar seus tokens

  • Transação B: Concluir a troca de tokens

Com o agrupamento de transações, você pode combinar o fluxo de aprovação e troca em uma única transação. O resultado: taxas de gas mais baixas e tempos de espera reduzidos ao usar dapps. Bacana, não é?

O "como" da abstração de conta

Neste ponto, você já sabe que a abstração de conta nos permite adicionar funcionalidades personalizadas e políticas de autorização às contas dos usuários. Mas ainda não falamos sobre como isso é possível. Esta seção discute diferentes abordagens para implementar a abstração no Ethereum (se isso não parecer muito atraente, fique à vontade para pular para a próxima seção).

Existem duas formas geralmente aceitas de alcançar a abstração de conta: (a) permitir que EOAs executem código EVM e (b) permitir que contratos inteligentes iniciem transações. Portanto, você verá que muitas propostas de abstração de conta querem que as EOAs se comportem como contratos inteligentes ou que contas de contrato ajam como EOAs.

Isso naturalmente levanta algumas perguntas:

  • "Como exatamente essas abordagens são diferentes?"

  • "Por que importa qual abordagem adotamos?"

Abstração de conta: Abordagem nº 1 (Atualizar EOAs para executar código)

Ao dar às EOAs a capacidade de executar código, podemos adicionar funcionalidades complexas a contas controladas por usuários. Isso potencializa as EOAs e as transforma em smart accounts, preparando o terreno para a abstração de conta nativa. É importante destacar que essa abordagem permite que você aproveite os benefícios de uma carteira programável sem incorrer no custo de implantar uma nova conta de contrato.

Algumas abordagens para atualizar EOAs para contas de contrato envolvem tratar o payload de dados das transações de EOA como bytecode EVM. Outras envolvem delegar o controle de uma EOA a um contrato de conta especial que realiza transações em nome da EOA. Neste último caso, o mesmo contrato de conta pode ser reutilizado por diferentes EOAs, reduzindo a necessidade de ter diferentes implementações de carteira de contrato.

Abaixo está um infográfico mostrando diferentes propostas de abstração de conta no campo "tornar EOAs programáveis", incluindo seus principais recursos e status de implementação:

Abstração de conta: Abordagem nº 2 (Atualizar contratos inteligentes)

Com essa abordagem, atualizamos as contas de contrato para que possam aprovar transações e pagar taxas de gas (assim como as EOAs). Isso fornece outro caminho para alcançar a abstração de conta, introduzindo "contratos potencializados" que podem agir como EOAs (ou seja, contratos de conta). Além disso, resolve um problema urgente no Ethereum: a falta de suporte para carteiras de contrato no nível do protocolo.

Veja bem — algumas carteiras de contrato inteligente já existem hoje e oferecem muitos benefícios da abstração de conta. Mas usar essas carteiras pode ser incrivelmente difícil porque o Ethereum trata os contratos inteligentes como "cidadãos de segunda classe" e exige que todas as transações partam de uma EOA.

Essa limitação também significa que as carteiras de contrato inteligente carecem da natureza sem necessidade de confiança e autocustodiada das carteiras EOA como a MetaMask. Para contextualizar, vamos considerar o fluxo de criação e uso de uma carteira de contrato inteligente:

  • Implantar uma nova conta de contrato

  • Enviar transações para chamar funções em seu contrato de carteira

O problema já é evidente: agora você precisa gerenciar duas carteiras. Por quê? Uma EOA (pré-financiada com ETH) precisa cobrir os custos de implantação da carteira e chamar as funções necessárias posteriormente.

Entram em cena os relayers: EOAs que podem pagar pelas transações de sua carteira em troca de uma taxa. Os provedores de carteiras de contrato inteligente frequentemente operam relayers para subsidiar transações dos usuários. Ou seja, o relayer paga ETH de sua carteira para cobrir suas taxas de transação e recupera os custos cobrando você de outra forma — talvez em moeda fiduciária ou em outro token.

Esse sistema funciona bem na maioria dos casos: você pode criar e usar uma carteira de contrato sem se preocupar muito com as complexidades de pagar pelo gas. No entanto, também exige confiar que o relayer não censurará nem adulterará suas transações.

Mas isso é cripto, e gostamos de sistemas sem necessidade de confiança.

Ao permitir que contas de contrato aprovem transações e paguem taxas de gas, a abstração de conta torna o processo de criação e uso de uma carteira de contrato inteligente mais confiável. Especificamente, permite que qualquer pessoa que opere um relayer execute transações em seu nome. Você só precisa assinar uma mensagem autorizando o relayer a deduzir fundos do saldo de sua carteira após executar a transação:

Agora o fluxo de uso de uma carteira de contrato inteligente parece um pouco diferente:

  • Implantar um contrato de carteira? Usando fluxos de implantação contrafactual, você pode enviar fundos para a conta de contrato antes de implantá-la e pagar a EOA de um relayer pelos custos de implantação a partir do saldo de sua carteira.

  • Interagir com um contrato de carteira? Assine uma mensagem off-chain e peça a um relayer que faça a chamada ao seu contrato de conta. A mensagem incluirá uma instrução para o contrato de conta reembolsar os custos de gas do relayer.

Essa ideia de habilitar smart accounts sem necessidade de confiança e resistentes à censura fundamenta muitas propostas de abstração de conta nessa categoria. Por exemplo, o ERC-4337 — a proposta de abstração de conta mais popular até agora — descentraliza os relayers introduzindo um mempool alternativo onde os usuários podem enviar transações de carteira de contrato para processamento.

Nesse caso, os relayers (chamados de "bundlers") podem competir para executar transações de smart accounts, reduzindo o risco de censura ou dependência excessiva de provedores de carteira. Abaixo está um infográfico mostrando diferentes propostas de abstração de conta no campo "dar aos contratos inteligentes recursos de EOA", incluindo seus principais recursos e status de implementação:

Sobre o futuro da abstração de conta

Anos após Vitalik Buterin ter introduzido o conceito pela primeira vez, ainda há algum desacordo sobre a melhor forma de implementar a abstração de conta. Por exemplo, implementar a EIP-3074 e a EIP-5003 permitiria que EOAs existentes (incluindo usuários da MetaMask) fizessem upgrade para smart accounts. Mas essas propostas exigem um hard fork que, dado o foco da comunidade em atualizações mais urgentes, parece inviável por enquanto.

Em contraste, a EIP-4337 recebeu amplo apoio por implementar a abstração de conta sem exigir mudanças em grande escala no protocolo Ethereum. Mas para usuários que atualmente utilizam carteiras baseadas em EOA, isso significa ter que mover ativos de uma EOA para uma conta de contrato recém-implantada — um processo potencialmente complexo e custoso, dadas as altas taxas de gas no Ethereum hoje.

Na MetaMask, acreditamos que a abstração de conta é fundamental para proporcionar uma experiência de integração fluida para novos usuários web3. Também sabemos que as EOAs não podem garantir a adoção das criptomoedas ("O próximo bilhão de usuários não vai escrever 12 palavras em um papel", como o pesquisador da Ethereum Foundation Yoav Weiss coloca de forma colorida.).

Por isso, começamos a pensar em formas de entregar os benefícios da abstração de conta sem comprometer a carteira MetaMask que os usuários conhecem e adoram. Parte desse esforço inclui recorrer ao MetaMask Snaps — a plataforma de inovação sem permissão que permite aos desenvolvedores criar recursos personalizados sobre a infraestrutura existente da MetaMask.

Usando Snaps, os desenvolvedores podem estender a funcionalidade de sua carteira MetaMask para suportar diferentes casos de uso de abstração de conta. De chaves de sessão a integrações completas de smart account construídas com a MetaMask — tudo desenvolvido com Snaps — vimos desenvolvedores se levantarem ao desafio de usar a MetaMask para democratizar o acesso à abstração de conta para os usuários.

"Não deixe o perfeito ser inimigo do bom." — Voltaire

A proposta atual de abstração de conta — mesmo que ligeiramente imperfeita — é um passo gigantesco em direção à realização de smart accounts sem necessidade de confiança e resistentes à censura no Ethereum, e merece apoio suficiente. Para citar uma de nós, Taylor Monahan: "Uma meia-solução entregue ainda é melhor do que uma solução perfeita não entregue."

É por isso que nosso próximo artigo sobre o tema da abstração de conta terá a forma de uma análise aprofundada dos detalhes do ERC-4337. Mais importante, discutiremos como desenvolvedores web3 podem começar a construir o futuro da abstração de conta e integrar o próximo bilhão de usuários — uma linha de código por vez — com a MetaMask.

Fique ligado!

Agradecimentos especiais a Patrick McCorry, Simon Brown, Mirko Garozzo, Christian Montoya, Oliver Renwick e Megan Dias pelo feedback em versões anteriores deste artigo. Minha gratidão também vai para Clarissa Watson e Francesco Andreoli, que forneceram orientação e apoio nas fases iniciais do projeto.

Traduzido por IA. Pode conter erros. Por favor, verifique sempre as informações.

Avalie a tradução

Este artigo foi escrito por: