O Ciclo de Vida de uma Operação de Usuário ERC-4337: Da Inicialização à Conclusão
Aplicativos descentralizados (dapps) na Ethereum oferecem possibilidades empolgantes, como finanças descentralizadas, redes sociais e mercados sem permissão. No entanto, para os usuários comuns, interagir com a mecânica da Ethereum pode ser frustrante.
Gerenciar chaves privadas e frases secretas de 24 palavras, lidar com taxas de gás e gerenciar números de transação - essas complexidades da blockchain criam sérias barreiras para a adoção em massa.
A abstração de contas visa resolver esses problemas de usabilidade e proporcionar uma experiência do usuário mais suave. Ela separa a identidade do usuário de sua conta na blockchain usando smart wallets (carteiras inteligentes) e substitui transações por 'Operações de Usuário'. Vamos aprofundar como a abstração de contas funciona e percorrer todo o ciclo de vida de uma 'operação de usuário'.
O que é Abstração de Contas?
Quando você utiliza uma carteira de navegador, como a Metamask ou a Coinbase Wallet, o endereço que você vê, seu identificador, é geralmente chamado de Conta de Propriedade Externa (EOA, sigla em inglês). Parece algo como 0x2039Ca5c9A445c0CC1b740bb81cA15e3aa6d168B. Com a abstração de contas, a identidade do usuário é gerenciada por uma carteira de contrato inteligente, em vez de ser diretamente gerenciada por sua EOA. Essa carteira atua como intermediário entre o usuário e a blockchain. Essa carteira é um Contrato Inteligente com funcionalidades adicionais que permitem que ela atue como uma carteira EOA convencional.
A carteira inteligente lida com todas as complexidades das transações e mecânicas da blockchain em nome do usuário. Isso oculta detalhes como custos de gás, gerenciamento de nonces e assinaturas do usuário final. O usuário obtém uma identidade abstraída que persiste em aplicativos descentralizados. Seu endereço de carteira inteligente permanece o mesmo, mas os detalhes técnicos são ocultados. Essa abordagem oferece várias vantagens:
Experiência mais suave do usuário - Não é mais necessário lidar com taxas de gás, nonces, assinatura de transações, etc. A carteira inteligente cuida de toda a complexidade da blockchain nos bastidores.
Identidade entre aplicativos - Como a carteira inteligente funciona em vários aplicativos descentralizados, os usuários desfrutam de uma experiência unificada. Não é mais necessário criar novas contas e financiá-las com ETH para cada novo aplicativo.
Privacidade - A identidade do usuário é ocultada da atividade na cadeia. O endereço de sua carteira inteligente não revela todos os seus comportamentos em diferentes aplicativos descentralizados.
Segurança- As carteiras inteligentes permitem mecanismos de segurança avançados, como autenticação multifator, recuperação social e verificações adicionais antes de assinar transações. Não é mais necessário perder tudo se você perder sua chave privada.
Interoperabilidade entre cadeias - A maioria das implementações atuais de carteiras inteligentes usa algoritmos "determinísticos" para implantar o contrato inteligente de sua carteira. Isso significa que o endereço desse contrato inteligente permanece o mesmo, não importa em qual cadeia ele seja implantado, desde que seja compatível com a EVM (Máquina Virtual Ethereum).
Componentes da Abstração de Contas
O padrão Ethereum ERC4337 define vários componentes-chave que, em conjunto, permitem a abstração de contas:
Carteira Inteligente - Conforme descrito acima, a carteira inteligente é um contrato inteligente que gerencia os detalhes da identidade do usuário, ativos e atividade da conta. Ela armazena tudo o que é necessário e lida com todas as transações da blockchain.
Agrupador - Um serviço fora da cadeia que agrupa várias operações de usuário de um aplicativo descentralizado em uma única transação Ethereum. Isso economiza custos de gás, reduzindo o número total de transações necessárias.
Pagador - Um serviço fora da cadeia que patrocina e paga as taxas de gás para transações agrupadas em nome dos usuários. Isso oculta a complexidade do tratamento das taxas de gás. O uso de um pagador é opcional ao enviar/gerar Operações de Usuário.
Agregador de Assinaturas - Um serviço fora da cadeia que agrega assinaturas de várias operações de usuário em uma única assinatura. Isso permite o envio de uma única transação que representa operações, economizando assim nas taxas de gás.
Observação - Atualmente (a partir de setembro de 2023), os Agregadores não são amplamente implementados. A maioria das assinaturas é verificada individualmente.
Contrato de Ponto de Entrada - Um contrato inteligente único que faz a ponte entre os componentes fora da cadeia, como agrupadores, e a rede Ethereum na cadeia. Ele valida as operações de usuário, verifica se o gás está patrocinado e encaminha os agrupamentos.
Introdução às Operações de Usuário
No cerne da abstração de contas estão as operações de usuário. Elas são semelhantes às transações Ethereum, mas possuem propriedades adicionais para permitir as funcionalidades mencionadas acima.
Uma operação de usuário contém:
Sender(remetente) - O endereço da carteira inteligente do usuário.
Nonce - Um número de operação exclusivo e incrementado que evita ataques de repetição.
initCode - Qualquer bytecode de criação de contrato, caso a operação precise implantar um novo contrato.
callData - Os parâmetros codificados a serem passados para a chamada de função do contrato.
callGasLimit - O limite máximo de gás especificado para a execução da operação.
verificationGasLimit - Este é o limite de gás usado na fase de verificação.
preVerificationGasLimit - Este é o gás usado para compensar os agrupadores.
maxFeePerGas - Taxa máxima por gás (semelhante à EIP 1559).
maxPriorityFeePerGas - Taxa máxima de prioridade por gás (semelhante à EIP 1559).
paymasterAndData - Dados codificados de um Pagador, caso você queira patrocinar o gás para esta operação de usuário.
assinatura - A assinatura da carteira do usuário que aprova esta operação.
Diferentemente das transações regulares, as operações de usuário não são enviadas diretamente para a blockchain Ethereum. Em vez disso, elas são colocadas em uma fila de mempool personalizada gerenciada pelo Contrato de Ponto de Entrada. Isso mantém as operações isoladas da rede Ethereum principal até que possam ser eficientemente agrupadas.
Ciclo de Vida da Operação de Usuário ERC4337
Agora, vamos explorar o ciclo de vida completo de uma operação de usuário, desde a criação inicial até a execução final:
1. Inicialização
O processo começa quando um usuário tenta realizar alguma ação na interface de usuário de um aplicativo descentralizado, como transferir tokens ou interagir com um contrato inteligente de um protocolo.
Com base na ação específica que o usuário deseja, o aplicativo constrói uma estrutura de Operação de Usuário contendo os detalhes necessários: o endereço da carteira inteligente do usuário como sender, o endereço do contrato de destino, os parâmetros de função corretamente codificados, o limite de gás e outros campos relevantes.
Esta Operação de Usuário serve como uma solicitação para que a Carteira Inteligente do usuário execute a ação especificada.
2. Construção e Validação
O aplicativo constrói cuidadosamente a estrutura inicial da Operação de Usuário, garantindo que todos os campos necessários estejam preenchidos corretamente:
O campo
sender
é definido como o endereço da Carteira Inteligente do usuário.O campo
nonce
é incrementado em relação à última Operação de Usuário para evitar ataques de repetição.O campo
callData
é codificado com base na especificação ABI da função do contrato de destino.O
callGasLimit
e outros campos de gás são adequadamente definidos para a execução da função pretendida.
Antes de pedir ao usuário que assine a Operação de Usuário inacabada, o aplicativo pode simular a chamada de função para garantir que os parâmetros sejam válidos. Isso evita desperdiçar o tempo dos usuários com operações destinadas ao fracasso. Alguns agrupadores fornecem essa funcionalidade por meio de suas APIs.
3. Assinatura
Em seguida, a Carteira Inteligente do usuário é solicitada a assinar a Operação de Usuário construída criptograficamente.
A Carteira Inteligente pode realizar várias etapas para validar a operação antes de assiná-la:
Confirmar que o usuário autorizou esta ação (por exemplo, por meio de uma assinatura do aplicativo de carteira conectada).
Garantir que o nonce seja incrementado corretamente em relação à operação anterior.
Verificar se o campo
sender
corresponde ao endereço da carteira do usuário.Verificar se a carteira possui saldo de ETH suficiente ou tokens ERC20 (caso sejam usados para pagar o gás) para cobrir o custo estimado do gás da operação.
A Carteira Inteligente aprovará a operação se todas as validações passarem, gerando uma assinatura criptográfica e preenchendo o campo assinatura
.
4. Transmissão
O aplicativo transmite a Operação de Usuário assinada para a fila de mempool de um serviço de agrupador.
Como está (a partir de setembro de 2023), cada agrupador implementa sua própria fila de mempool, e não há uma fila de mempool conectada da qual todos os agrupadores podem pegar as operações de usuário.
Portanto, atualmente, um aplicativo descentralizado deve usar os pontos de extremidade da API de diferentes serviços de agrupadores individualmente.
A comunidade está trabalhando para criar uma fila de mempool unificada para todos os agrupadores, mas não temos certeza de quando isso acontecerá.
5. Verificação
Um agrupador geralmente chama a função handleOps() do Contrato Inteligente de Ponto de Entrada único, na qual ele envia a Operação de Usuário assinada.
Quando o Contrato de Ponto de Entrada recebe uma Operação de Usuário assinada, ele primeiro verifica criptograficamente que:
A assinatura foi gerada corretamente a partir do endereço Ethereum especificado no campo
sender
.Isso geralmente é feito chamando a função validateOp() na Carteira Inteligente
A Carteira Inteligente que assina a operação de usuário ou o Pagador (caso a operação de usuário seja patrocinada pelo gás) possui um limite de gás suficiente para cobrir o custo da verificação da assinatura.
Isso geralmente é feito chamando a função validatePaymasterOp() de um determinado Pagador se esta operação de usuário for patrocinada pelo gás.
O nonce do usuário está corretamente incrementado em comparação com as operações anteriores.
Se essas verificações falharem, a Operação de Usuário é rejeitada como inválida. Isso impede que os usuários possam enviar operações assinadas de forma inadequada.
6. Execução
Uma vez que uma Operação de Usuário é validada, para que ela seja executada, o Contrato de Ponto de Entrada precisa garantir que há gás suficiente disponível. Este gás pode ser pago tanto pela Carteira Inteligente quanto por um Pagador.
Geralmente, este valor de gás é pré-pago para o contrato de Ponto de Entrada pela Carteira Inteligente ou pelo Pagador. O contrato de Ponto de Entrada, por sua vez, compensa o agrupador por suas atividades e serviços com base nesse depósito. A Carteira Inteligente pode sacar deste depósito a qualquer momento.
Uma vez que o Contrato de Ponto de Entrada determina que há gás pré-pago suficiente para esta operação de usuário, esta operação é então executada chamando uma função da Carteira Inteligente.
Depois disso, esta operação de usuário se torna uma "transação" e é enviada para a blockchain para ser agrupada em um bloco.
7. Finalização
Finalmente, uma vez que a transação agrupada tenha sido minerada e executada com sucesso na cadeia, todas as Operações de Usuário que ela continha são concluídas.
Suas mudanças de estado previstas ocorrem, como transferências de tokens, interações com contratos, etc.
Os usuários são notificados de que as ações solicitadas foram concluídas com sucesso. Nos bastidores, os nonces deles são incrementados em suas Carteiras Inteligentes.
Conclusão
Esta exploração detalhada cobriu o ciclo de vida completo das operações de usuário ERC4337, desde a criação inicial e assinatura, agrupamento e a execução até a conclusão.
A abstração de contas, impulsionada por operações de usuário, fornece uma solução elegante para muitos problemas de usabilidade de blockchain que impedem a adoção em massa. Compreender inovações como essa será essencial para qualquer desenvolvedor de blockchain que deseje criar experiências de aplicativos descentralizados sem interrupções para os usuários finais.
À medida que a Ethereum avança em direção à adoção em massa, tecnologias como a abstração de contas possibilitarão a experiência do usuário suave necessária para o sucesso. Ao ocultar as complexidades subjacentes das criptomoedas, inovações como operações de usuário ajudarão a impulsionar a próxima geração de aplicativos blockchain.
Divulgação
Nossa equipe na Indorse está trabalhando em um SDK de carteira de abstração de contas chamado Bastion. Você pode encontrá-lo aqui.
Bastion é um SDK de abstração de contas modular, leve e de código aberto projetado para simplificar a integração de funcionalidades de carteira descentralizada em suas aplicações. Escrito em TypeScript e totalmente compatível com ERC4337, o Bastion garante segurança de tipo, ao mesmo tempo que oculta as complexidades das interações com blockchain.
Com o Bastion, você pode oferecer uma experiência multi-cadeia perfeita para seus usuários. Ele permite o armazenamento seguro de ativos de diferentes blockchains, como Ethereum, Polygon, Optimism, Arbitrum, Scroll e Taiko, em uma interface unificada.
…
Inscreva-se no DDIntel Aqui.
O DDIntel captura as peças mais notáveis do nosso site principal e da nossa popular publicação DDI Medium. Confira-nos para ver mais trabalhos esclarecedores da nossa comunidade.
Cadastre-se no AItoolverse (alpha) para obter 50 DDINs.
Apoie a Série de Arte de IA da DDI: https://heartq.net/collections/ddi-ai-art-series.
Junte-se à nossa rede aqui: https://heartq.net/collections/ddi-ai-art-series.
Siga-nos no LinkedIn, Twitter, YouTube e Facebook.
Este artigo foi escrito por Gaurang (GT) Torvekar e traduzido por Adriano P. de Araujo. O original em inglês pode ser encontrado aqui.
Latest comments (0)