Autor: Alfred, desenvolvedor do imToken Labs

De 8 a 11 de julho de 2024, a Ethereum Community Conference (EthCC) foi realizada em Bruxelas, Bélgica. É o maior evento anual Ethereum na Europa, com foco em tecnologia e comunidade.

Nesta Conferência da Comunidade Ethereum (EthCC 7), mais de 350 líderes de opinião ativos na indústria de blockchain fizeram palestras. Alfred do imToken Labs foi convidado a participar e proferiu um discurso na conferência com o tema “Revelando o Futuro: Análise Abstrata de Multi-. Contas em cadeia"" discurso.

Resumo rápido do discurso:

  • A abstração de conta (AA) inclui principalmente dois pontos-chave: abstração de assinatura e abstração de pagamento. A abstração de assinatura permite que os usuários escolham qualquer mecanismo de verificação que desejarem, e a abstração de pagamento permite uma variedade de opções de pagamento de transação. Essa flexibilidade proporciona uma experiência de usuário melhor e mais segura.

  • No ERC-4337 e no AA nativo, a função do ponto de entrada na fase de “verificação” é fixa, enquanto na fase de “execução”, apenas o ponto de entrada no AA nativo é fixo. As limitações de verificação de transações e as etapas para executar transações têm características e limitações próprias em diferentes implementações.

  • Existem duas diferenças principais ao implementar o ERC-4337 em uma cadeia compatível com EVM: diferenças de protocolo no design do Rollup e diferenças na forma como os endereços são calculados, resultando em detalhes de desenvolvimento que são difíceis de notar ao implementar o ERC-4337 entre L1 e L2.

A seguir está o texto completo do discurso:

Olá a todos, meu nome é Alfred e atualmente sou desenvolvedor de blockchain no imToken Labs. Hoje irei apresentar a vocês os conceitos de ERC-4337 e Native AA, discutir as diferenças entre eles e focar na análise das principais diferenças entre os padrões 4337 de L1 e L2.

Introdução à abstração de conta

1. O que é abstração de conta?

A abstração de conta (AA) inclui principalmente dois pontos-chave: abstração de assinatura e abstração de pagamento.

  • Abstração de assinatura: os usuários podem escolher qualquer mecanismo de verificação que desejarem, não apenas limitado a determinados algoritmos de assinatura digital (como ECDSA).

  • Abstração de pagamento: os usuários podem usar uma variedade de opções de pagamento de transação, como pagar com ativos ERC-20 em vez de ativos nativos ou ter um terceiro patrocinador da transação.

Essa flexibilidade proporciona uma experiência de usuário melhor e mais segura. O objetivo da abstração de contas é atingir esses dois pontos-chave de diversas maneiras.

2. O que é ERC-4337

Atualmente, existem algumas limitações para contas de propriedade externa (EOA) no protocolo Ethereum, como métodos de assinatura fixa e designs de pagamento. O ERC-4337 aborda essas questões introduzindo uma abordagem mais flexível para gerenciamento de contas e processamento de transações.

  • Estrutura userOp: No ERC-4337, o usuário envia a estrutura userOp para o Bundler. O Bundler coleta vários userOps e os envia para o contrato EntryPoint chamando a função handleOps.

  • Contrato EntryPoint: Este contrato lida com transações como um sistema operacional. Suas principais funções incluem:

  • Chame a função de validação no contrato da conta para garantir que userOp seja autorizado pelo proprietário da conta.

  • Taxa.

  • Chame a função execute no contrato de conta para executar a operação alvo de userOp.

3. O que é AA nativo?

No Ethereum, as contas são divididas em EOA e contas de contrato. No entanto, no AA nativo, cada conta é um contrato e o mecanismo de processamento de transações é diretamente incorporado ao protocolo blockchain.

Projeto AA em cada rede blockchain:

  • Abstração de conta ERC-4337: Ethereum, Arbitrum, Optimism, Base, Linea, Scroll, Polygon PoS

  • A abstração de conta nativa segue ERC-4337: era StarkNet e zkSync

  • Abstração de conta nativa com privacidade desde o design: Aztec

Se você estiver interessado em AA nativo asteca ou EIP-3074, EIP-7702, hoje nos concentraremos em AA nativo após ERC-4337. Para obter informações detalhadas, consulte o artigo que escrevi, listado no final do artigo.

A diferença entre ERC-4337 e AA nativo

1. Função do sistema operacional

AA OS precisa responder às seguintes perguntas:

  • Quem decide os preços do gás?

  • Quem decide a ordem das transações? Onde está o pool de memória?

  • Quem aciona a função de ponto de entrada?

  • O que determina o fluxo de processamento de transações?

No ERC-4337, essas funções são realizadas de forma colaborativa por meio do Contrato Bundler e EntryPoint.

No AA nativo, os usuários enviam seus userOps para o operador/sequenciador do servidor oficial em vez do contrato Bundler e EntryPoint.

No StarkNet, o Sequenciador cuida de todas essas tarefas.

No zkSync, a principal diferença entre o Era e outras implementações de AA é que o Operador precisa trabalhar com o bootloader (contrato do sistema). O Bootloader abre um novo bloco, define seus parâmetros (incluindo parâmetros de bloco e outros parâmetros do Gas) e recebe transações do Operador para verificação.

2. Interface de contrato

Devido à existência de três etapas, a interface do contrato de conta é semelhante em diferentes implementações. Essas funções de ponto de entrada só podem ser chamadas pelo AA OS:

  • ERC-4337: Verificando ações do usuário

  • zkSync: verifique transações, pague transações e execute transações

  • StarkNet:executar、validar、validar_declare、validar_deploy

No ERC-4337 e no AA nativo, a função do ponto de entrada na fase de “verificação” é fixa, enquanto na fase de “execução”, apenas o ponto de entrada no AA nativo é fixo.

3. Limitações das etapas de verificação

Como não há limite de custo para validar uma transação (essencialmente, validar uma transação é chamar uma função de visualização), um invasor pode realizar um ataque DoS no pool de memória, quebrando assim o empacotador (EIP-4337) ou o operador/classificador (nativo). AA).

EIP-4337 define quais opcodes são proibidos e como restringir o acesso ao armazenamento. A era zkSync relaxa parte do uso do OpCode:

  • A lógica do contrato só pode acessar seu próprio slot de armazenamento. Se o endereço do contrato de conta for o endereço A, ele poderá acessar:

  • Slot de armazenamento pertencente ao endereço A

  • Um slot de armazenamento pertencente a qualquer outro endereço A

  • Slot de armazenamento keccak256 (A || Por exemplo, saldos de ativos em contratos ERC-20.

  • A lógica do contrato não pode acessar variáveis ​​globais, como números de bloco. StarkNet também não permite chamadas de contratos externos.

4. Limitações nas etapas de execução

No zkSync, a execução de chamadas do sistema requer a confirmação da presença de sinalizadores do sistema. Por exemplo, a única maneira de incrementar um nonce é interagir com um NonceHolder, enquanto a implantação de um contrato requer a interação com um ContractDeployer. Os sinalizadores do sistema garantem que os desenvolvedores da conta interajam intencionalmente com os contratos do sistema.

No ERC-4337 e StarkNet, não há restrições especiais na fase de execução.

5. Números aleatórios

  • No ERC-4337, o nonce do ponto de entrada é projetado para distinguir entre valores de chave de 192 bits e valores nonce de 64 bits.

  • No zkSync, o contrato do sistema NonceHolder gerencia o nonce e garante incremento estrito, ou seja, o nonce é aumentado em 1.

  • Na StarkNet, os nonces também estão aumentando estritamente, mas não existe um nonce abstrato que possa ser gerenciado por um contrato específico.

6. Implante usando a primeira transação

  • ERC-4337 Incluir o campo initcode na estrutura userOp para implantar o remetente (contrato de conta) em seu primeiro userOp.

  • No StarkNet e zkSync, os usuários devem enviar a primeira transação ao operador/sequenciador para implantar o contrato da conta.

7. Design especial em zkSync

Se você transferir ETH diretamente do Ethereum EOA para zkSync, sem implantar um contrato de conta personalizado, você receberá uma conta padrão com o mesmo endereço. A conta funciona como uma Ethereum EOA e também é controlada pela chave privada correspondente da Ethereum EOA.

Este tipo de conta é version None em vez de version1 . Você não pode chamar a função DefaultAccount porque ela não implanta nenhum código no espaço do kernel.

A diferença entre 4337 de L1 e 4337 de L2

Existem duas diferenças principais na implementação do ERC-4337 em uma cadeia compatível com EVM: diferenças de protocolo e diferenças de endereço.

1. Diferenças de acordo

No design Rollup, L2 precisa fazer upload de dados para L1 para segurança e liquidação. No contexto da ERC-4337, as taxas associadas a este processo de upload, tais como taxas de segurança L1 e taxas de blob, devem ser incluídas no gás de pré-validação. Determinar a taxa de upload apropriada no gás de pré-validação é um desafio significativo.

2. Aborde as diferenças

A codificação de endereço na função de criação do zkSync ERA difere dos rollups Ethereum e OP. Além disso, StarkNet usa uma função hash exclusiva para cálculos de endereço. No contexto do ERC-4337 em cadeias compatíveis com EVM, geralmente assumimos que os cálculos de endereço são consistentes entre cadeias. No entanto, há um detalhe sutil que pode fazer com que os endereços dos contratos de conta sejam diferentes entre Ethereum e a implementação ERC-4337 em L2.

A questão principal é adicionar novos opcodes no hard fork. Por exemplo, se a cadeia L2 não suportar o hard fork de Xangai e a versão EVM não for especificada em tempo de compilação, a introdução de push0 fará com que o bytecode mude, mesmo que o código do Solidity seja o mesmo.

Conclusão

Aqui estão alguns recursos para você aprender mais sobre abstração de contas. Fique à vontade para entrar em contato comigo e se tiver alguma dúvida pode me encontrar no Twitter (@murmurlu).

"Introdução à abstração de conta asteca", verifique:

https://medium.com/@ChiHaoLu/introduction-of-aztec-account-abstraction-98535c9edf2e

"Introdução ao resumo da conta StarkNet", verifique:

https://medium.com/taipei-ethereum-meetup/introduction-of-starknet-account-abstraction-2c343b561d6e

"Introdução à abstração de conta zkSync", verifique:

https://medium.com/taipei-ethereum-meetup/zksync-%E4%B8%AD%E7%9A%84%E5%8E%9F%E7%94%9F-account-abstraction-%E4%BB% 8B%E7%B4%B9-bc7269f8893a

"Starknet e zkSync: uma análise comparativa", confira:

https://medium.com/nethermind-eth/starknet-and-zksync-a-comparative-análise-d4648786256b