> For the complete documentation index, see [llms.txt](https://docs.qr.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.qr.xyz/qr-fr/sous-le-capot/erc-4337.md).

# Analyse approfondie d'ERC-4337

> La norme d’abstraction de compte — la technologie qui simplifie la crypto.

***

## Qu’est-ce que l’ERC-4337 ?

**ERC-4337** est une norme Ethereum pour **l’abstraction de compte**. Il permet des « portefeuilles intelligents » (Smart Accounts) dotés de fonctionnalités étendues, sans modifier le protocole Ethereum lui-même.

Avant l’ERC-4337, les portefeuilles étaient simples — une clé signe une transaction, la transaction est payée en ETH. Avec l’ERC-4337, le portefeuille devient **programmable**.

***

## Composants clés

### UserOperation

Au lieu d’une transaction classique, l’utilisateur crée une **UserOperation** — une description de ce qu’il veut faire :

```
UserOperation {
  sender         adresse du Smart Account
  nonce          numéro de séquence de l’opération
  initCode       code pour créer le SA (s’il n’est pas encore déployé)
  callData       ce qu’il faut exécuter (transfert, swap, etc.)

  callGasLimit           limite de gas pour l’exécution
  verificationGasLimit   limite de gas pour la vérification
  preVerificationGas     gas avant vérification
  maxFeePerGas           prix maximal du gas
  maxPriorityFeePerGas   frais de priorité

  paymasterAndData   données du Paymaster (si sponsorisé)
  signature          signature du propriétaire
}
```

### EntryPoint

Le **point d’entrée unique** — un contrat intelligent qui :

1. Reçoit les UserOperations du Bundler
2. Vérifie la signature du propriétaire
3. Exécute l’opération via le Smart Account
4. Règle le gas avec le Paymaster

EntryPoint est le même contrat sur tous les réseaux EVM (adresse standardisée).

### Bundler

Le **service de regroupement** — collecte les UserOperations des utilisateurs et les soumet à la blockchain sous forme d’une transaction classique vers EntryPoint.

### Paymaster

Le **sponsor de gas** — un contrat intelligent qui peut payer le gas pour l’utilisateur. Signe l’autorisation dans `paymasterAndData`, et EntryPoint y prélève le gas.

***

## Flux de transaction

```
┌──────────┐     ┌──────────┐     ┌──────────┐     ┌──────────┐
│          │     │          │     │          │     │          │
│ Portefeuille│────▶│ Paymaster│────▶│ Bundler  │────▶│EntryPoint│
│  Appli   │     │          │     │          │     │(sur la chaîne)│
│          │     │          │     │          │     │          │
└──────────┘     └──────────┘     └──────────┘     └──────────┘
                                                        │
  1. Créer        2. Obtenir gas +     3. Soumettre au    4. Vérifier
     UserOp          paymaster       mempool         et exécuter
                     données
```

### En détail :

1. **L’application de portefeuille** crée une UserOperation avec `callData` (ce qu’il faut faire) et `nonce`
2. **Paymaster** ajoute les données de gas et sa signature (`paymasterAndData`)
3. L’application de portefeuille **signe** le hash du UserOp avec la clé EOA
4. **Bundler** accepte le UserOp signé et le soumet à la blockchain
5. **EntryPoint** vérifie la signature → exécute callData → facture le gas au Paymaster

***

## Déploiement à la demande

Le Smart Account n’a pas besoin d’être créé à l’avance. Lors de la première transaction, `initCode` dans la UserOperation contient l’instruction de déploiement :

```
Première transaction :
  initCode = [factory.createAccount(owner, salt)]  ← déployer le Smart Account
  callData = [transfer(to, amount)]                ← et exécuter immédiatement le transfert
```

Le Bundler et EntryPoint gèrent les deux actions dans une seule transaction.

***

## CREATE2 — Adresse déterministe

L’adresse du Smart Account est calculée **mathématiquement**, avant la création :

```
SA_address = CREATE2(factory, keccak256(owner + salt))
```

Mêmes paramètres = même adresse sur **n’importe quel** réseau EVM. C’est pourquoi l’adresse de votre Smart Account est identique sur Base, Arbitrum, Polygon et tous les autres.

***

## Opérations groupées

Le Smart Account peut exécuter **plusieurs appels** dans une seule UserOperation :

```
UserOperation.callData = executeBatch([
  approve(USDC, spender, amount),
  swap(USDC, ETH, amount),
  collectFee(treasury, feeAmount)
])
```

Trois opérations — une signature, une transaction, un paiement de gas.

***

## Avantages de l’ERC-4337

| Propriété                           |    Portefeuille classique (EOA)   |  Compte intelligent (ERC-4337) |
| ----------------------------------- | :-------------------------------: | :----------------------------: |
| Paiement du gas                     |           ETH uniquement          |      ETH, USDC ou gratuit      |
| Opérations groupées                 |                Non                |               Oui              |
| Logique personnalisée               |                Non                |               Oui              |
| Récupération                        | Phrase de récupération uniquement | Récupération sociale (à venir) |
| Même adresse sur toutes les chaînes |                Oui                |          Oui (CREATE2)         |
| Sponsoring                          |                Non                |            Paymaster           |
