Pular para o conteúdo
0%

EIP-3074 vs EIP-7702 vs ERC-4337: guia completo para desenvolvedores

Usman Asim headshot

Escrito por Usman Asim

Publicado em 14 de maio de 20255 min de leitura

O ecossistema de wallets do Ethereum está em constante evolução, avançando rumo a um futuro programável, com o EIP-7702 como um passo fundamental em direção à account abstraction completa (ERC-4337). Mas para entender por que o 7702 está prestes a remodelar a forma como interagimos com o Ethereum através de** smart wallets**, precisamos reconhecer o EIP-3074, uma proposta que estabeleceu as bases fundamentais para que o 7702 fosse o que é hoje.

Se você é um desenvolvedor construindo apps, provavelmente já lidou com as limitações das Externally Owned Accounts (EOAs) - as wallets tradicionais do Ethereum controladas por chaves privadas. O EIP-3074 introduziu uma forma de EOAs delegarem controle a smart contracts (invokers), habilitando funcionalidades como patrocínio de gas e transações em lote. O EIP-7702 vai além, oferecendo um caminho mais elegante e seguro para account abstraction.

Para desenvolvedores, esse conceito simplifica a adição de funcionalidades avançadas a apps mantendo os usuários em EOAs familiares. Para usuários, significa uma experiência mais fluida; pense em pagamentos de gas por terceiros ou na execução de múltiplas trades DeFi em um único clique.

Neste guia, vamos detalhar a mecânica do 3074 para contextualizar, mostrar os avanços do 7702 com código, e comparar ambos com o ERC-4337. Vamos ao que interessa e ficar técnicos.

O problema que o EIP-3074 buscou resolver

EOAs são diretas: assinam transações com uma chave privada e as enviam para a rede Ethereum. Mas são limitadas. Não conseguem executar código, agrupar ações, ou recuperar chaves perdidas nativamente. Smart contract wallets (habilitadas pelo ERC-4337) oferecem mais flexibilidade, mas exigem que os usuários gerenciem novos endereços e frequentemente resultam em custos de gas mais altos. O EIP-3074 propôs uma solução introduzindo dois opcodes EVM: AUTH e AUTHCALL, permitindo que EOAs deleguem controle a invoker contracts, adicionando funcionalidades semelhantes às de smart contracts sem migração de wallet.

O EIP-3074 foi uma prova de conceito que moldou o roadmap de account abstraction do Ethereum: de EOAs para Smart EOAs (EIP-7702) e, finalmente, para Smart Wallets completas (ERC-4337). Vamos explorar a mecânica do 3074 para entender como ele abriu esse caminho.

Smart wallets ajudam você a expandir seu app com UX onchain sem atrito.

Explorar recursos

Os componentes principais do EIP-3074: a base para o 7702

O EIP-3074 gira em torno de três elementos: o opcode AUTH, o opcode AUTHCALL, e os invoker contracts. Vale entendê-los, pois o 7702 se baseia nos princípios deles.

1. O opcode auth

O opcode AUTH (hex 0xf6) verifica uma assinatura ECDSA de uma EOA, comprovando que ela autorizou um invoker específico a agir em seu nome. A EOA assina uma mensagem contendo o endereço do invoker e um commitment (um hash das ações a serem executadas). Se a assinatura for válida, a EVM define um contexto autorizado.

Aqui está um trecho de Solidity que simula a verificação de assinatura do AUTH:

solidity
Copied
*// Invoker contract: Verify EOA authorization* function authenticate(bytes memory signature, address eoa, bytes32 commitment) public pure returns (bool) { *// Hash the message the EOA signed* bytes32 messageHash = keccak256(abi.encodePacked(eoa, commitment)); *// Recover the signer from the signature* address signer = recoverSigner(messageHash, signature); *// Check if the signer matches the EOA* return signer == eoa; } _// Helper function to recover signer_ function recoverSigner(bytes32 messageHash, bytes memory signature) internal pure returns (address) { bytes32 r; bytes32 s; uint8 v; assembly { r := mload(add(signature, 32)) s := mload(add(signature, 64)) v := byte(0, mload(add(signature, 96))) } return ecrecover(messageHash, v, r, s); }

Esse código valida a intenção da EOA de delegar controle. Uma vez autorizado, o invoker pode agir como a EOA.

2. O opcode authcall

AUTHCALL (hex 0xf7) permite que o invoker execute transações como a EOA, usando o endereço da EOA como caller enquanto o invoker pode pagar o gas. Isso habilitou o patrocínio de gas e o batching no 3074.

Veja como você poderia usar AUTHCALL em assembly:

solidity
Copied
// Invoker contract: Execute a call as the EOA function executeAsEOA(address target, bytes memory data) public { // Assumes prior AUTH verification assembly { // AUTHCALL: gas, target, value, argsOffset, argsSize, retOffset, retSize let success := authcall(gas(), target, 0, add(data, 32), mload(data), 0, 0) if iszero(success) { revert(0, 0) } } }

Esse trecho chama um contrato alvo (por exemplo, um protocolo DeFi) como a EOA. A função gas\(\) aloca o gas restante, e AUTHCALL garante que a ação reflita a identidade da EOA.

3. Invoker contracts

Invokers são smart contracts aos quais EOAs delegam. Os invokers do EIP-3074 eram persistentes, o que levantou preocupações de segurança que o 7702 endereça. Aqui está um invoker no estilo 3074 para patrocínio de gas e batching:

⚠️ Nota de Segurança: Invokers precisam ser auditados e construídos com cuidado. Um invoker com falhas pode fazer uso indevido de assinaturas ou repetir ações.

jsx
Copied
// EIP-3074 invoker for gas sponsorship and batching contract LegacyInvoker { address public authorizedEOA; // Set authorized EOA function setAuthorizedEOA(address eoa, bytes memory signature, bytes32 commitment) external { require(authenticate(signature, eoa, commitment), "Invalid signature"); authorizedEOA = eoa; } // Execute batch transactions, optionally sponsored function executeBatch( address[] memory targets, bytes[] memory datas, uint256[] memory values, bool sponsored ) external payable { require(msg.sender == authorizedEOA || sponsored, "Not authorized"); if (sponsored) { require(msg.value >= estimateGas(targets, datas), "Insufficient gas funds"); } for (uint i = 0; i < targets.length; i++) { assembly { let success := authcall( gas(), mload(add(targets, add(32, mul(i, 32)))), mload(add(values, add(32, mul(i, 32)))), add(mload(add(datas, add(32, mul(i, 32)))), 32), mload(mload(add(datas, add(32, mul(i, 32))))), 0, 0 ) if iszero(success) { revert(0, 0) } } } } // Estimate gas for sponsored transactions function estimateGas(address[] memory targets, bytes[] memory datas) internal view returns (uint256) { uint256 totalGas = 21000; // Base transaction gas for (uint i = 0; i < targets.length; i++) { totalGas += 10000; // Approximate per call } return totalGas; } }

💡** Dica de Implementação**: Os invokers do EIP-3074 precisavam de auditorias para prevenir replays de assinaturas. O EIP-7702 evita invokers persistentes, reduzindo os riscos.

EIP-3074 vs. EIP-7702: por que o 7702 vence

O EIP-3074 foi um experimento ousado, mas o EIP-7702 e o ERC-4337 são o futuro. Aqui está uma comparação rápida:

EIP-3074 vs. ERC-4337

  • EIP-3074: Adicionou AUTH e AUTHCALL à EVM, funcionava com EOAs mas exigia invokers.
  • ERC-4337: Nenhuma mudança de protocolo; usa um mempool separado e bundlers para smart contract wallets.
  • Conclusão: O 3074 era mais simples para EOAs, mas a flexibilidade do 4337 o torna ideal para abstraction completa.

EIP-3074 vs. EIP-7702

  • EIP-3074: Invokers persistentes representavam riscos de segurança e não ofereciam compatibilidade futura.
  • EIP-7702: Habilita funcionalidades de smart contract por transação, alinhando-se ao 4337.
  • Conclusão: O 7702 refina as ideias do 3074, oferecendo um caminho mais seguro e escalável, mais alinhado ao roadmap de AA do Ethereum.

O EIP-3074 introduziu ideias que o 7702 aperfeiçoa, levando a um ecossistema alinhado com o roadmap do Ethereum para account abstraction completa.

  1. Patrocínio de Gas: apps pagam o gas pelos usuários, reduzindo as barreiras de onboarding.
  2. Transações em Lote: Usuários combinam ações (por exemplo, token swaps e staking) em uma única transação.
  3. Mecanismos de Recuperação: Usuários recuperam EOAs perdidas via delegados confiáveis.

Comece a construir com smart wallets

O EIP-3074 abriu caminho para que o EIP-7702 pudesse avançar. Enquanto o 3074 introduziu ideias inovadoras para delegação de EOA, o 7702 as refina em uma solução mais segura e escalável, aproximando-nos do estágio final da account abstraction do Ethereum junto ao ERC-4337. O EIP-7702 faz parte da atualização Pectra do Ethereum, com testnets ativas desde abril de 2025. A ativação na mainnet está em vigor desde 7 de maio de 2025, dependendo da adoção pelos clients (Geth, Nethermind, etc.). Enquanto isso, o ERC-4337 já está ativo, oferecendo account abstraction completa para smart contract wallets.

Seja otimizando a UX de dApps ou criando experiências de usuário fluidas, agora é a hora de mergulhar no 7702 e no 4337. Acesse a documentação e comece a construir!

Entre em contato conosco a qualquer momento com suas dúvidas. Estamos aqui para conversar sobre estratégia de integração, questões de implementação técnica, trade-offs, e ajudar você a encontrar a melhor solução para o seu app. Bons trabalhos!

Perguntas frequentes

O que é o EIP-3074?

O EIP-3074 foi uma proposta que introduziu dois opcodes EVM (AUTH e AUTHCALL) para permitir que EOAs deleguem controle a smart contracts chamados invokers, habilitando funcionalidades como patrocínio de gas e transações em lote sem exigir que os usuários migrem para novas wallets.

Como o EIP-7702 melhora o EIP-3074?

O EIP-7702 refina os conceitos do EIP-3074 ao habilitar funcionalidades de smart contract por transação em vez de invokers persistentes, oferecendo um caminho mais seguro e escalável que resolve os riscos de segurança associados ao modelo de delegação persistente do 3074.

Qual é a diferença entre o EIP-7702 e o ERC-4337?

O EIP-7702 permite que EOAs deleguem temporariamente controle a código de smart contract durante transações, enquanto o ERC-4337 oferece account abstraction completa para smart contract wallets usando um mempool off-chain e bundlers, sem exigir mudanças de protocolo.

O EIP-3074 e o ERC-4337 podem funcionar juntos?

Sim, eles se complementam: o EIP-3074 poderia permitir que EOAs interajam com smart accounts do ERC-4337 para execução, proporcionando benefícios como patrocínio de gas e melhor experiência do usuário sem exigir migração completa para smart contract wallets.

Quais são as preocupações de segurança com o EIP-3074?

Os invokers persistentes do EIP-3074 representavam riscos de segurança ao conceder aos invokers controle significativo sobre EOAs, com vulnerabilidades potenciais incluindo replays de assinaturas e uso indevido da autoridade delegada, que exigiam auditorias cuidadosas.

Por que o EIP-7702 foi escolhido em vez do EIP-3074?

O EIP-7702 foi preferido porque resolve as preocupações de segurança do EIP-3074 relacionadas a invokers persistentes, oferece melhor compatibilidade futura com o ERC-4337, e se alinha mais estreitamente ao roadmap de account abstraction do Ethereum.

Quais funcionalidades essas propostas habilitam para desenvolvedores?

Essas propostas habilitam patrocínio de gas (apps pagando o gas pelos usuários), transações em lote (combinando múltiplas ações em uma transação), e mecanismos de recuperação para EOAs perdidas via delegados confiáveis.

O EIP-7702 está ativo na mainnet do Ethereum?

Sim, o EIP-7702 entrou em vigor na mainnet em 7 de maio de 2025, como parte da atualização Pectra do Ethereum, dependendo da adoção completa pelos clients em implementações como Geth e Nethermind.

Background gradient

Construa magia blockchain

A Alchemy combina os produtos e ferramentas de desenvolvimento Web3 mais poderosos com recursos, comunidade e suporte lendário.