[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-eip-7702-en-pratique-construire-flux-comptes-intelligents-apres-pectra":3},{"article":4,"author":55},{"id":5,"category_id":6,"title":7,"slug":8,"excerpt":9,"content_md":10,"content_html":11,"locale":12,"author_id":13,"published":14,"published_at":15,"meta_title":7,"meta_description":16,"focus_keyword":17,"og_image":18,"canonical_url":18,"robots_meta":19,"created_at":15,"updated_at":15,"tags":20,"category_name":34,"related_articles":35},"d0000000-0000-0000-0000-000000000584","a0000000-0000-0000-0000-000000000062","EIP-7702 en pratique : construire des flux de comptes intelligents apres Pectra","eip-7702-en-pratique-construire-flux-comptes-intelligents-apres-pectra","EIP-7702 permet a tout EOA Ethereum d'agir temporairement comme un contrat intelligent dans une seule transaction. Voici comment implementer les transactions par lots, le parrainage de gas et la recuperation sociale avec la nouvelle primitive d'account abstraction.","## Ce que permet EIP-7702\n\nEIP-7702, active avec la mise a jour Pectra d'Ethereum en mars 2025, introduit un nouveau type de transaction qui permet a tout compte externe (EOA) de definir un **designateur de delegation** — un pointeur vers un contrat intelligent dont le code est temporairement adopte par l'EOA pendant la duree d'une transaction. Cela signifie que votre adresse de portefeuille MetaMask existante peut executer une logique de contrat intelligent arbitraire sans deployer un nouveau portefeuille de contrat ni changer votre adresse.\n\nC'est l'amelioration UX la plus significative de l'histoire d'Ethereum.\n\n## EIP-7702 vs ERC-4337 : quand utiliser lequel\n\n| Caracteristique | EIP-7702 | ERC-4337 |\n|----------------|----------|----------|\n| Niveau | Protocole (nouveau type tx) | Application (contrat intelligent) |\n| Type de compte | Met a jour les EOA existants | Necessite un nouveau portefeuille de contrat |\n| Adresse | Conserve l'adresse EOA existante | Nouvelle adresse (contrefactuelle) |\n| Persistance | Delegation par transaction | Contrat intelligent permanent |\n| Bundler requis | Non (flux tx standard) | Oui (mempool separe) |\n| Surcharge gas | ~20 000 gas pour delegation | ~42 000 gas pour validation UserOp |\n| Portefeuilles supportes | MetaMask, Coinbase Wallet, Rainbow | Specialises (Safe, ZeroDev, Biconomy) |\n| Ideal pour | Mettre a jour les utilisateurs existants | Nouveaux utilisateurs, logique complexe |\n\n### Cadre de decision\n\n**Utilisez EIP-7702 quand :**\n- Vos utilisateurs ont deja des portefeuilles EOA\n- Vous avez besoin de transactions par lots ou de parrainage de gas\n- Vous voulez une complexite d'integration minimale\n\n**Utilisez ERC-4337 quand :**\n- Vous construisez un nouveau portefeuille ou integrez de nouveaux utilisateurs\n- Vous avez besoin d'une logique de compte persistante\n- Vous avez besoin de fonctionnalites avancees\n\n## Exemples de code\n\n### Transactions par lots\n\n```solidity\n\u002F\u002F SPDX-License-Identifier: MIT\npragma solidity ^0.8.25;\n\n\u002F\u002F\u002F @title BatchExecutor — Cible de delegation EIP-7702 pour les appels par lots\ncontract BatchExecutor {\n    struct Call {\n        address target;\n        uint256 value;\n        bytes data;\n    }\n    \n    function executeBatch(Call[] calldata calls) external payable {\n        for (uint256 i = 0; i \u003C calls.length; i++) {\n            (bool success, bytes memory result) = calls[i].target.call{\n                value: calls[i].value\n            }(calls[i].data);\n            \n            if (!success) {\n                assembly {\n                    revert(add(result, 32), mload(result))\n                }\n            }\n        }\n    }\n}\n```\n\nUtilisation cote client avec ethers.js v6 :\n\n```typescript\nimport { ethers } from \"ethers\";\n\nconst batchTx = {\n    type: 4,\n    to: userAddress,\n    authorizationList: [{\n        chainId: 1,\n        address: BATCH_EXECUTOR_ADDRESS,\n        nonce: await provider.getTransactionCount(userAddress),\n        yParity: 0, r: \"0x...\", s: \"0x...\"\n    }],\n    data: batchExecutorInterface.encodeFunctionData(\"executeBatch\", [[\n        {\n            target: USDC_ADDRESS,\n            value: 0,\n            data: usdcInterface.encodeFunctionData(\"approve\", [\n                UNISWAP_ROUTER, ethers.parseUnits(\"1000\", 6)\n            ])\n        },\n        {\n            target: UNISWAP_ROUTER,\n            value: 0,\n            data: routerInterface.encodeFunctionData(\"exactInputSingle\", [{\n                tokenIn: USDC_ADDRESS,\n                tokenOut: WETH_ADDRESS,\n                fee: 3000,\n                recipient: userAddress,\n                amountIn: ethers.parseUnits(\"1000\", 6),\n                amountOutMinimum: 0,\n                sqrtPriceLimitX96: 0\n            }])\n        }\n    ]])\n};\n\nconst tx = await signer.sendTransaction(batchTx);\n```\n\n### Parrainage de gas\n\n```solidity\n\u002F\u002F\u002F @title SponsoredExecutor — Parrainage de gas via EIP-7702\ncontract SponsoredExecutor {\n    mapping(address => uint256) public nonces;\n    \n    function sponsoredExecute(\n        address user,\n        address target,\n        bytes calldata data,\n        uint256 userNonce,\n        uint256 deadline,\n        bytes calldata signature\n    ) external {\n        require(block.timestamp \u003C= deadline, \"Expired\");\n        require(nonces[user] == userNonce, \"Invalid nonce\");\n        nonces[user]++;\n        \n        bytes32 digest = _hashTypedData(user, target, data, userNonce, deadline);\n        address signer = ECDSA.recover(digest, signature);\n        require(signer == user, \"Invalid signature\");\n        \n        (bool success, bytes memory result) = target.call(data);\n        require(success, \"Call failed\");\n    }\n}\n```\n\n### Recuperation sociale\n\n```solidity\n\u002F\u002F\u002F @title RecoveryModule — Recuperation sociale via EIP-7702\ncontract RecoveryModule {\n    struct RecoveryConfig {\n        address[] guardians;\n        uint256 threshold;\n        uint256 delay;\n    }\n    \n    mapping(address => RecoveryConfig) public configs;\n    mapping(bytes32 => uint256) public recoveryTimestamps;\n    mapping(bytes32 => uint256) public approvalCounts;\n    mapping(bytes32 => mapping(address => bool)) public hasApproved;\n    \n    function setupRecovery(\n        address[] calldata guardians,\n        uint256 threshold,\n        uint256 delay\n    ) external {\n        require(guardians.length >= threshold, \"Invalid threshold\");\n        require(threshold >= 2, \"Min 2 guardians\");\n        configs[msg.sender] = RecoveryConfig(guardians, threshold, delay);\n    }\n    \n    function approveRecovery(\n        address account,\n        address newOwner\n    ) external {\n        RecoveryConfig memory config = configs[account];\n        require(_isGuardian(config, msg.sender), \"Not a guardian\");\n        \n        bytes32 recoveryId = keccak256(abi.encode(account, newOwner));\n        require(!hasApproved[recoveryId][msg.sender], \"Already approved\");\n        \n        hasApproved[recoveryId][msg.sender] = true;\n        approvalCounts[recoveryId]++;\n        \n        if (approvalCounts[recoveryId] >= config.threshold) {\n            recoveryTimestamps[recoveryId] = block.timestamp + config.delay;\n        }\n    }\n    \n    function executeRecovery(\n        address account,\n        address newOwner\n    ) external {\n        bytes32 recoveryId = keccak256(abi.encode(account, newOwner));\n        uint256 timestamp = recoveryTimestamps[recoveryId];\n        require(timestamp > 0 && block.timestamp >= timestamp, \"Not ready\");\n    }\n}\n```\n\n## Statut d'integration des portefeuilles\n\n### MetaMask\n\nMetaMask a ajoute le support EIP-7702 dans la version 12.4 (septembre 2025).\n\n### Coinbase Wallet\n\nCoinbase Wallet est l'adopteur le plus agressif, integrant EIP-7702 dans sa fonctionnalite \"Smart Wallet\" (lancee en novembre 2025) :\n- **Auto-batching** — le portefeuille regroupe automatiquement les sequences approve+swap\n- **Parrainage de gas** — Coinbase parraine le gas pour les transactions de moins de 1 $\n- **DeFi en un clic** — cibles de delegation pre-construites pour les operations DeFi courantes\n\n### Rainbow, Rabby et autres\n\nRainbow a ajoute le support en janvier 2026. Rabby supporte les transactions type-4 mais sans l'interface de visualisation par lots.\n\n## Guide de migration\n\n### Etape 1 : Deployer les cibles de delegation\n\n### Etape 2 : Mettre a jour votre frontend\n\n```typescript\nasync function supportsEIP7702(provider: ethers.Provider): Promise\u003Cboolean> {\n    try {\n        const capabilities = await provider.send(\n            \"wallet_getCapabilities\", []\n        );\n        return capabilities?.atomicBatch?.supported === true;\n    } catch {\n        return false;\n    }\n}\n```\n\n### Etape 3 : Implementer la degradation gracieuse\n\n```typescript\nasync function executeSwap(tokenIn, tokenOut, amount) {\n    if (await supportsEIP7702(provider)) {\n        return executeBatchSwap(tokenIn, tokenOut, amount);\n    } else {\n        await approve(tokenIn, ROUTER, amount);\n        return swap(tokenIn, tokenOut, amount);\n    }\n}\n```\n\n## Considerations de securite\n\n### Verification de la cible de delegation\n\nLe contrat cible de delegation a un **controle total** sur les actifs de l'EOA pendant la transaction.\n\n**Attenuation :** Ne deleguez qu'a des contrats audites et verifies.\n\n### Protection contre le rejeu\n\nLes listes d'autorisation EIP-7702 incluent un nonce pour prevenir les attaques par rejeu.\n\n### Phishing via delegation\n\n**Attenuation :** Les portefeuilles doivent afficher clairement a quel code l'EOA delegue.\n\n### Reentrance dans l'execution par lots\n\n```solidity\nbool private locked;\n\nmodifier noReentrant() {\n    require(!locked, \"Reentrant\");\n    locked = true;\n    _;\n    locked = false;\n}\n```\n\n### Collisions de stockage\n\nUtilisez EIP-7201 (stockage namespace) :\n\n```solidity\nbytes32 constant STORAGE_SLOT = keccak256(\n    abi.encode(uint256(keccak256(\"batch.executor.storage\")) - 1)\n) & ~bytes32(uint256(0xff));\n```\n\n## Questions frequentes\n\n### EIP-7702 change-t-il mon adresse de portefeuille ?\n\nNon. Votre adresse EOA reste la meme. EIP-7702 donne temporairement des capacites de contrat intelligent pour la duree d'une seule transaction.\n\n### Puis-je utiliser EIP-7702 sur les L2 ?\n\nOui. Tous les L2 majeurs (Arbitrum, Base, Optimism, zkSync) ont adopte EIP-7702.\n\n### Que se passe-t-il si la cible de delegation a un bug ?\n\nLes dommages sont limites a la seule transaction. Cependant, au sein de cette transaction, la cible a un acces complet aux actifs de l'EOA.\n\n### EIP-7702 est-il compatible avec les portefeuilles materiels ?\n\nOui. Ledger a ajoute le support dans le firmware 2.3.0 (decembre 2025).\n\n### Combien de gas EIP-7702 economise-t-il ?\n\nPour un flux approve+swap typique, EIP-7702 economise environ **40-50 %** de gas. Pour les operations DeFi multi-etapes complexes, les economies peuvent atteindre 60-70 %.","\u003Ch2 id=\"ce-que-permet-eip-7702\">Ce que permet EIP-7702\u003C\u002Fh2>\n\u003Cp>EIP-7702, active avec la mise a jour Pectra d’Ethereum en mars 2025, introduit un nouveau type de transaction qui permet a tout compte externe (EOA) de definir un \u003Cstrong>designateur de delegation\u003C\u002Fstrong> — un pointeur vers un contrat intelligent dont le code est temporairement adopte par l’EOA pendant la duree d’une transaction. Cela signifie que votre adresse de portefeuille MetaMask existante peut executer une logique de contrat intelligent arbitraire sans deployer un nouveau portefeuille de contrat ni changer votre adresse.\u003C\u002Fp>\n\u003Cp>C’est l’amelioration UX la plus significative de l’histoire d’Ethereum.\u003C\u002Fp>\n\u003Ch2 id=\"eip-7702-vs-erc-4337-quand-utiliser-lequel\">EIP-7702 vs ERC-4337 : quand utiliser lequel\u003C\u002Fh2>\n\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>Caracteristique\u003C\u002Fth>\u003Cth>EIP-7702\u003C\u002Fth>\u003Cth>ERC-4337\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\u003Ctd>Niveau\u003C\u002Ftd>\u003Ctd>Protocole (nouveau type tx)\u003C\u002Ftd>\u003Ctd>Application (contrat intelligent)\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Type de compte\u003C\u002Ftd>\u003Ctd>Met a jour les EOA existants\u003C\u002Ftd>\u003Ctd>Necessite un nouveau portefeuille de contrat\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Adresse\u003C\u002Ftd>\u003Ctd>Conserve l’adresse EOA existante\u003C\u002Ftd>\u003Ctd>Nouvelle adresse (contrefactuelle)\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Persistance\u003C\u002Ftd>\u003Ctd>Delegation par transaction\u003C\u002Ftd>\u003Ctd>Contrat intelligent permanent\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Bundler requis\u003C\u002Ftd>\u003Ctd>Non (flux tx standard)\u003C\u002Ftd>\u003Ctd>Oui (mempool separe)\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Surcharge gas\u003C\u002Ftd>\u003Ctd>~20 000 gas pour delegation\u003C\u002Ftd>\u003Ctd>~42 000 gas pour validation UserOp\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Portefeuilles supportes\u003C\u002Ftd>\u003Ctd>MetaMask, Coinbase Wallet, Rainbow\u003C\u002Ftd>\u003Ctd>Specialises (Safe, ZeroDev, Biconomy)\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Ideal pour\u003C\u002Ftd>\u003Ctd>Mettre a jour les utilisateurs existants\u003C\u002Ftd>\u003Ctd>Nouveaux utilisateurs, logique complexe\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3>Cadre de decision\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Utilisez EIP-7702 quand :\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Vos utilisateurs ont deja des portefeuilles EOA\u003C\u002Fli>\n\u003Cli>Vous avez besoin de transactions par lots ou de parrainage de gas\u003C\u002Fli>\n\u003Cli>Vous voulez une complexite d’integration minimale\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Utilisez ERC-4337 quand :\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Vous construisez un nouveau portefeuille ou integrez de nouveaux utilisateurs\u003C\u002Fli>\n\u003Cli>Vous avez besoin d’une logique de compte persistante\u003C\u002Fli>\n\u003Cli>Vous avez besoin de fonctionnalites avancees\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"exemples-de-code\">Exemples de code\u003C\u002Fh2>\n\u003Ch3>Transactions par lots\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-solidity\">\u002F\u002F SPDX-License-Identifier: MIT\npragma solidity ^0.8.25;\n\n\u002F\u002F\u002F @title BatchExecutor — Cible de delegation EIP-7702 pour les appels par lots\ncontract BatchExecutor {\n    struct Call {\n        address target;\n        uint256 value;\n        bytes data;\n    }\n    \n    function executeBatch(Call[] calldata calls) external payable {\n        for (uint256 i = 0; i &lt; calls.length; i++) {\n            (bool success, bytes memory result) = calls[i].target.call{\n                value: calls[i].value\n            }(calls[i].data);\n            \n            if (!success) {\n                assembly {\n                    revert(add(result, 32), mload(result))\n                }\n            }\n        }\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Utilisation cote client avec ethers.js v6 :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-typescript\">import { ethers } from \"ethers\";\n\nconst batchTx = {\n    type: 4,\n    to: userAddress,\n    authorizationList: [{\n        chainId: 1,\n        address: BATCH_EXECUTOR_ADDRESS,\n        nonce: await provider.getTransactionCount(userAddress),\n        yParity: 0, r: \"0x...\", s: \"0x...\"\n    }],\n    data: batchExecutorInterface.encodeFunctionData(\"executeBatch\", [[\n        {\n            target: USDC_ADDRESS,\n            value: 0,\n            data: usdcInterface.encodeFunctionData(\"approve\", [\n                UNISWAP_ROUTER, ethers.parseUnits(\"1000\", 6)\n            ])\n        },\n        {\n            target: UNISWAP_ROUTER,\n            value: 0,\n            data: routerInterface.encodeFunctionData(\"exactInputSingle\", [{\n                tokenIn: USDC_ADDRESS,\n                tokenOut: WETH_ADDRESS,\n                fee: 3000,\n                recipient: userAddress,\n                amountIn: ethers.parseUnits(\"1000\", 6),\n                amountOutMinimum: 0,\n                sqrtPriceLimitX96: 0\n            }])\n        }\n    ]])\n};\n\nconst tx = await signer.sendTransaction(batchTx);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Parrainage de gas\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-solidity\">\u002F\u002F\u002F @title SponsoredExecutor — Parrainage de gas via EIP-7702\ncontract SponsoredExecutor {\n    mapping(address =&gt; uint256) public nonces;\n    \n    function sponsoredExecute(\n        address user,\n        address target,\n        bytes calldata data,\n        uint256 userNonce,\n        uint256 deadline,\n        bytes calldata signature\n    ) external {\n        require(block.timestamp &lt;= deadline, \"Expired\");\n        require(nonces[user] == userNonce, \"Invalid nonce\");\n        nonces[user]++;\n        \n        bytes32 digest = _hashTypedData(user, target, data, userNonce, deadline);\n        address signer = ECDSA.recover(digest, signature);\n        require(signer == user, \"Invalid signature\");\n        \n        (bool success, bytes memory result) = target.call(data);\n        require(success, \"Call failed\");\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Recuperation sociale\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-solidity\">\u002F\u002F\u002F @title RecoveryModule — Recuperation sociale via EIP-7702\ncontract RecoveryModule {\n    struct RecoveryConfig {\n        address[] guardians;\n        uint256 threshold;\n        uint256 delay;\n    }\n    \n    mapping(address =&gt; RecoveryConfig) public configs;\n    mapping(bytes32 =&gt; uint256) public recoveryTimestamps;\n    mapping(bytes32 =&gt; uint256) public approvalCounts;\n    mapping(bytes32 =&gt; mapping(address =&gt; bool)) public hasApproved;\n    \n    function setupRecovery(\n        address[] calldata guardians,\n        uint256 threshold,\n        uint256 delay\n    ) external {\n        require(guardians.length &gt;= threshold, \"Invalid threshold\");\n        require(threshold &gt;= 2, \"Min 2 guardians\");\n        configs[msg.sender] = RecoveryConfig(guardians, threshold, delay);\n    }\n    \n    function approveRecovery(\n        address account,\n        address newOwner\n    ) external {\n        RecoveryConfig memory config = configs[account];\n        require(_isGuardian(config, msg.sender), \"Not a guardian\");\n        \n        bytes32 recoveryId = keccak256(abi.encode(account, newOwner));\n        require(!hasApproved[recoveryId][msg.sender], \"Already approved\");\n        \n        hasApproved[recoveryId][msg.sender] = true;\n        approvalCounts[recoveryId]++;\n        \n        if (approvalCounts[recoveryId] &gt;= config.threshold) {\n            recoveryTimestamps[recoveryId] = block.timestamp + config.delay;\n        }\n    }\n    \n    function executeRecovery(\n        address account,\n        address newOwner\n    ) external {\n        bytes32 recoveryId = keccak256(abi.encode(account, newOwner));\n        uint256 timestamp = recoveryTimestamps[recoveryId];\n        require(timestamp &gt; 0 &amp;&amp; block.timestamp &gt;= timestamp, \"Not ready\");\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"statut-d-integration-des-portefeuilles\">Statut d’integration des portefeuilles\u003C\u002Fh2>\n\u003Ch3>MetaMask\u003C\u002Fh3>\n\u003Cp>MetaMask a ajoute le support EIP-7702 dans la version 12.4 (septembre 2025).\u003C\u002Fp>\n\u003Ch3>Coinbase Wallet\u003C\u002Fh3>\n\u003Cp>Coinbase Wallet est l’adopteur le plus agressif, integrant EIP-7702 dans sa fonctionnalite “Smart Wallet” (lancee en novembre 2025) :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Auto-batching\u003C\u002Fstrong> — le portefeuille regroupe automatiquement les sequences approve+swap\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Parrainage de gas\u003C\u002Fstrong> — Coinbase parraine le gas pour les transactions de moins de 1 $\u003C\u002Fli>\n\u003Cli>\u003Cstrong>DeFi en un clic\u003C\u002Fstrong> — cibles de delegation pre-construites pour les operations DeFi courantes\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Rainbow, Rabby et autres\u003C\u002Fh3>\n\u003Cp>Rainbow a ajoute le support en janvier 2026. Rabby supporte les transactions type-4 mais sans l’interface de visualisation par lots.\u003C\u002Fp>\n\u003Ch2 id=\"guide-de-migration\">Guide de migration\u003C\u002Fh2>\n\u003Ch3>Etape 1 : Deployer les cibles de delegation\u003C\u002Fh3>\n\u003Ch3>Etape 2 : Mettre a jour votre frontend\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-typescript\">async function supportsEIP7702(provider: ethers.Provider): Promise&lt;boolean&gt; {\n    try {\n        const capabilities = await provider.send(\n            \"wallet_getCapabilities\", []\n        );\n        return capabilities?.atomicBatch?.supported === true;\n    } catch {\n        return false;\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Etape 3 : Implementer la degradation gracieuse\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-typescript\">async function executeSwap(tokenIn, tokenOut, amount) {\n    if (await supportsEIP7702(provider)) {\n        return executeBatchSwap(tokenIn, tokenOut, amount);\n    } else {\n        await approve(tokenIn, ROUTER, amount);\n        return swap(tokenIn, tokenOut, amount);\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"considerations-de-securite\">Considerations de securite\u003C\u002Fh2>\n\u003Ch3>Verification de la cible de delegation\u003C\u002Fh3>\n\u003Cp>Le contrat cible de delegation a un \u003Cstrong>controle total\u003C\u002Fstrong> sur les actifs de l’EOA pendant la transaction.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Attenuation :\u003C\u002Fstrong> Ne deleguez qu’a des contrats audites et verifies.\u003C\u002Fp>\n\u003Ch3>Protection contre le rejeu\u003C\u002Fh3>\n\u003Cp>Les listes d’autorisation EIP-7702 incluent un nonce pour prevenir les attaques par rejeu.\u003C\u002Fp>\n\u003Ch3>Phishing via delegation\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Attenuation :\u003C\u002Fstrong> Les portefeuilles doivent afficher clairement a quel code l’EOA delegue.\u003C\u002Fp>\n\u003Ch3>Reentrance dans l’execution par lots\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-solidity\">bool private locked;\n\nmodifier noReentrant() {\n    require(!locked, \"Reentrant\");\n    locked = true;\n    _;\n    locked = false;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Collisions de stockage\u003C\u002Fh3>\n\u003Cp>Utilisez EIP-7201 (stockage namespace) :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-solidity\">bytes32 constant STORAGE_SLOT = keccak256(\n    abi.encode(uint256(keccak256(\"batch.executor.storage\")) - 1)\n) &amp; ~bytes32(uint256(0xff));\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"questions-frequentes\">Questions frequentes\u003C\u002Fh2>\n\u003Ch3 id=\"eip-7702-change-t-il-mon-adresse-de-portefeuille\">EIP-7702 change-t-il mon adresse de portefeuille ?\u003C\u002Fh3>\n\u003Cp>Non. Votre adresse EOA reste la meme. EIP-7702 donne temporairement des capacites de contrat intelligent pour la duree d’une seule transaction.\u003C\u002Fp>\n\u003Ch3 id=\"puis-je-utiliser-eip-7702-sur-les-l2\">Puis-je utiliser EIP-7702 sur les L2 ?\u003C\u002Fh3>\n\u003Cp>Oui. Tous les L2 majeurs (Arbitrum, Base, Optimism, zkSync) ont adopte EIP-7702.\u003C\u002Fp>\n\u003Ch3 id=\"que-se-passe-t-il-si-la-cible-de-delegation-a-un-bug\">Que se passe-t-il si la cible de delegation a un bug ?\u003C\u002Fh3>\n\u003Cp>Les dommages sont limites a la seule transaction. Cependant, au sein de cette transaction, la cible a un acces complet aux actifs de l’EOA.\u003C\u002Fp>\n\u003Ch3 id=\"eip-7702-est-il-compatible-avec-les-portefeuilles-materiels\">EIP-7702 est-il compatible avec les portefeuilles materiels ?\u003C\u002Fh3>\n\u003Cp>Oui. Ledger a ajoute le support dans le firmware 2.3.0 (decembre 2025).\u003C\u002Fp>\n\u003Ch3 id=\"combien-de-gas-eip-7702-economise-t-il\">Combien de gas EIP-7702 economise-t-il ?\u003C\u002Fh3>\n\u003Cp>Pour un flux approve+swap typique, EIP-7702 economise environ \u003Cstrong>40-50 %\u003C\u002Fstrong> de gas. Pour les operations DeFi multi-etapes complexes, les economies peuvent atteindre 60-70 %.\u003C\u002Fp>\n","fr","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:43.586053Z","Apprenez a implementer les transactions par lots EIP-7702, le parrainage de gas et la recuperation sociale. Exemples de code, support portefeuille et guide de securite.","EIP-7702",null,"index, follow",[21,26,30],{"id":22,"name":23,"slug":24,"created_at":25},"c0000000-0000-0000-0000-000000000013","Security","security","2026-03-28T10:44:21.513630Z",{"id":27,"name":28,"slug":29,"created_at":25},"c0000000-0000-0000-0000-000000000014","Solidity","solidity",{"id":31,"name":32,"slug":33,"created_at":25},"c0000000-0000-0000-0000-000000000009","Web3","web3","Blockchain",[36,43,49],{"id":37,"title":38,"slug":39,"excerpt":40,"locale":12,"category_name":41,"published_at":42},"d0000000-0000-0000-0000-000000000677","Pourquoi Bali devient le hub impact-tech d'Asie du Sud-Est en 2026","pourquoi-bali-devient-hub-impact-tech-asie-sud-est-2026","Bali se classe 16e parmi les écosystèmes startups d'Asie du Sud-Est. Avec une concentration croissante de bâtisseurs Web3, de startups IA durables et d'entreprises eco-travel tech, l'île se forge une identité de capitale impact-tech de la région.","Ingénierie","2026-03-28T10:44:49.517126Z",{"id":44,"title":45,"slug":46,"excerpt":47,"locale":12,"category_name":41,"published_at":48},"d0000000-0000-0000-0000-000000000676","Le patchwork de la protection des données ASEAN : checklist de conformité pour les développeurs","patchwork-protection-donnees-asean-checklist-conformite-developpeurs","Sept pays de l'ASEAN disposent désormais de lois complètes sur la protection des données, chacune avec des modèles de consentement, des exigences de localisation et des structures de sanctions différents. Voici une checklist pratique de conformité pour les développeurs.","2026-03-28T10:44:49.504560Z",{"id":50,"title":51,"slug":52,"excerpt":53,"locale":12,"category_name":41,"published_at":54},"d0000000-0000-0000-0000-000000000675","La transformation numérique de 29 milliards de dollars d'Indonesia : opportunités pour les éditeurs de logiciels","transformation-numerique-29-milliards-dollars-indonesia-opportunites-editeurs-logiciels","Le marché des services informatiques d'Indonesia devrait atteindre 29,03 milliards de dollars en 2026, contre 24,37 milliards en 2025. L'infrastructure cloud, l'IA, le e-commerce et les centres de données tirent la croissance la plus rapide d'Asie du Sud-Est.","2026-03-28T10:44:49.469231Z",{"id":13,"name":56,"slug":57,"bio":58,"photo_url":18,"linkedin":18,"role":59,"created_at":60,"updated_at":60},"Open Soft Team","open-soft-team","The engineering team at Open Soft, building premium software solutions from Bali, Indonesia.","Engineering Team","2026-03-28T08:31:22.226811Z"]