[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-eip-7702-shizhan-pectra-zhihou-goujian-zhineng-zhanghu-liucheng":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-000000000575","a0000000-0000-0000-0000-000000000032","EIP-7702实战：Pectra之后构建智能账户流程","eip-7702-shizhan-pectra-zhihou-goujian-zhineng-zhanghu-liucheng","EIP-7702允许任何Ethereum EOA在单笔交易中临时充当智能合约。以下是如何使用新的账户抽象原语实现批量交易、gas赞助和社交恢复。","## EIP-7702带来了什么\n\nEIP-7702随Ethereum的Pectra升级于2025年3月激活，引入了一种新的交易类型，允许任何外部拥有账户(EOA)设置**委托指示器**——指向智能合约的指针，EOA在交易期间临时采用其代码。这意味着您现有的MetaMask钱包地址可以执行任意智能合约逻辑(批量调用、自定义验证、gas赞助)，而无需部署新的合约钱包或更改您的地址。\n\n这是Ethereum历史上最重大的用户体验改进。用户不再需要在EOA的简单性和智能账户的强大功能之间做选择。\n\n## EIP-7702 vs ERC-4337：何时使用哪个\n\n两者都实现账户抽象，但在不同层级运作：\n\n| 特性 | EIP-7702 | ERC-4337 |\n|------|----------|----------|\n| 层级 | 协议(新tx类型) | 应用(智能合约) |\n| 账户类型 | 升级现有EOA | 需要新智能合约钱包 |\n| 地址 | 保留现有EOA地址 | 新地址(反事实) |\n| 持久性 | 每笔交易委托 | 永久智能合约 |\n| 需要Bundler | 否(标准tx流程) | 是(独立内存池) |\n| Gas开销 | ~20,000 gas委托 | ~42,000 gas UserOp验证 |\n| 支持的钱包 | MetaMask, Coinbase Wallet, Rainbow | 专用(Safe, ZeroDev, Biconomy) |\n| 最适合 | 升级现有用户 | 新用户、复杂账户逻辑 |\n\n### 决策框架\n\n**使用EIP-7702当：**\n- 您的用户已有EOA钱包\n- 您需要批量交易或gas赞助\n- 您希望最小化集成复杂性\n\n**使用ERC-4337当：**\n- 您正在构建新钱包或引导新用户\n- 您需要持久的账户逻辑\n- 您需要高级功能如账户模块、插件或守护者\n\n## 代码示例\n\n### 批量交易\n\n最常见的EIP-7702用例：在单笔交易中执行多个操作。\n\n```solidity\n\u002F\u002F SPDX-License-Identifier: MIT\npragma solidity ^0.8.25;\n\n\u002F\u002F\u002F @title BatchExecutor — EIP-7702批量调用委托目标\ncontract BatchExecutor {\n    struct Call {\n        address target;\n        uint256 value;\n        bytes data;\n    }\n    \n    \u002F\u002F\u002F @notice 从委托EOA执行批量调用\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\n使用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### Gas赞助\n\n```solidity\n\u002F\u002F\u002F @title SponsoredExecutor — 通过EIP-7702的gas赞助\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### 社交恢复\n\n```solidity\n\u002F\u002F\u002F @title RecoveryModule — 通过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## 钱包集成状态\n\n### MetaMask\n\nMetaMask在12.4版本(2025年9月)中添加了EIP-7702支持。用户在dApp请求type-4交易时会看到\"智能交易\"标识。\n\n### Coinbase Wallet\n\nCoinbase Wallet是最积极的采用者，将EIP-7702集成到\"Smart Wallet\"功能(2025年11月发布)中：\n- **自动批处理** — 钱包自动批处理approve+swap序列\n- **Gas赞助** — Coinbase为低于$1费用的交易赞助gas\n- **一键DeFi** — 常见DeFi操作的预构建委托目标\n\n### Rainbow、Rabby等\n\nRainbow于2026年1月添加支持。Rabby支持type-4交易但缺少批处理可视化UI。\n\n## 迁移指南：从EOA到智能账户\n\n### 步骤1：部署委托目标\n\n创建并审计用户将委托的智能合约。\n\n### 步骤2：更新前端\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### 步骤3：实现优雅降级\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## 安全注意事项\n\n### 委托目标验证\n\n委托目标合约在交易期间对EOA的资产拥有**完全控制权**。恶意委托目标可以转移EOA的所有ETH和代币。\n\n**缓解措施：** 仅委托给经过审计和验证的合约。\n\n### 重放保护\n\nEIP-7702授权列表包含nonce以防止重放攻击。\n\n### 通过委托的钓鱼\n\n攻击者可能诱骗用户签署委托给恶意合约的授权列表。\n\n**缓解措施：** 钱包必须清楚显示EOA委托给什么代码。\n\n### 批量执行中的重入\n\n```solidity\nbool private locked;\n\nmodifier noReentrant() {\n    require(!locked, \"Reentrant\");\n    locked = true;\n    _;\n    locked = false;\n}\n```\n\n### 存储冲突\n\n使用EIP-7201(命名空间存储)：\n\n```solidity\nbytes32 constant STORAGE_SLOT = keccak256(\n    abi.encode(uint256(keccak256(\"batch.executor.storage\")) - 1)\n) & ~bytes32(uint256(0xff));\n```\n\n## 常见问题\n\n### EIP-7702会改变我的钱包地址吗？\n\n不会。您的EOA地址保持不变。EIP-7702在单笔交易期间临时赋予您的地址智能合约能力。\n\n### 我可以在L2上使用EIP-7702吗？\n\n是的。所有主要L2(Arbitrum, Base, Optimism, zkSync)已采用EIP-7702。\n\n### 如果委托目标有bug怎么办？\n\n损害仅限于单笔交易。但在该交易中，委托目标对EOA资产有完全访问权限。\n\n### EIP-7702与硬件钱包兼容吗？\n\n是的。Ledger在固件2.3.0版本(2025年12月)中添加了支持。\n\n### EIP-7702节省多少gas？\n\n对于典型的approve+swap流程，节省约**40-50%**的gas。复杂的多步DeFi操作可节省60-70%。","\u003Ch2 id=\"eip-7702\">EIP-7702带来了什么\u003C\u002Fh2>\n\u003Cp>EIP-7702随Ethereum的Pectra升级于2025年3月激活，引入了一种新的交易类型，允许任何外部拥有账户(EOA)设置\u003Cstrong>委托指示器\u003C\u002Fstrong>——指向智能合约的指针，EOA在交易期间临时采用其代码。这意味着您现有的MetaMask钱包地址可以执行任意智能合约逻辑(批量调用、自定义验证、gas赞助)，而无需部署新的合约钱包或更改您的地址。\u003C\u002Fp>\n\u003Cp>这是Ethereum历史上最重大的用户体验改进。用户不再需要在EOA的简单性和智能账户的强大功能之间做选择。\u003C\u002Fp>\n\u003Ch2 id=\"eip-7702-vs-erc-4337\">EIP-7702 vs ERC-4337：何时使用哪个\u003C\u002Fh2>\n\u003Cp>两者都实现账户抽象，但在不同层级运作：\u003C\u002Fp>\n\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>特性\u003C\u002Fth>\u003Cth>EIP-7702\u003C\u002Fth>\u003Cth>ERC-4337\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\u003Ctd>层级\u003C\u002Ftd>\u003Ctd>协议(新tx类型)\u003C\u002Ftd>\u003Ctd>应用(智能合约)\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>账户类型\u003C\u002Ftd>\u003Ctd>升级现有EOA\u003C\u002Ftd>\u003Ctd>需要新智能合约钱包\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>地址\u003C\u002Ftd>\u003Ctd>保留现有EOA地址\u003C\u002Ftd>\u003Ctd>新地址(反事实)\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>持久性\u003C\u002Ftd>\u003Ctd>每笔交易委托\u003C\u002Ftd>\u003Ctd>永久智能合约\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>需要Bundler\u003C\u002Ftd>\u003Ctd>否(标准tx流程)\u003C\u002Ftd>\u003Ctd>是(独立内存池)\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Gas开销\u003C\u002Ftd>\u003Ctd>~20,000 gas委托\u003C\u002Ftd>\u003Ctd>~42,000 gas UserOp验证\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>支持的钱包\u003C\u002Ftd>\u003Ctd>MetaMask, Coinbase Wallet, Rainbow\u003C\u002Ftd>\u003Ctd>专用(Safe, ZeroDev, Biconomy)\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>最适合\u003C\u002Ftd>\u003Ctd>升级现有用户\u003C\u002Ftd>\u003Ctd>新用户、复杂账户逻辑\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3>决策框架\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>使用EIP-7702当：\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>您的用户已有EOA钱包\u003C\u002Fli>\n\u003Cli>您需要批量交易或gas赞助\u003C\u002Fli>\n\u003Cli>您希望最小化集成复杂性\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>使用ERC-4337当：\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>您正在构建新钱包或引导新用户\u003C\u002Fli>\n\u003Cli>您需要持久的账户逻辑\u003C\u002Fli>\n\u003Cli>您需要高级功能如账户模块、插件或守护者\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"\">代码示例\u003C\u002Fh2>\n\u003Ch3>批量交易\u003C\u002Fh3>\n\u003Cp>最常见的EIP-7702用例：在单笔交易中执行多个操作。\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-solidity\">\u002F\u002F SPDX-License-Identifier: MIT\npragma solidity ^0.8.25;\n\n\u002F\u002F\u002F @title BatchExecutor — EIP-7702批量调用委托目标\ncontract BatchExecutor {\n    struct Call {\n        address target;\n        uint256 value;\n        bytes data;\n    }\n    \n    \u002F\u002F\u002F @notice 从委托EOA执行批量调用\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>使用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>Gas赞助\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-solidity\">\u002F\u002F\u002F @title SponsoredExecutor — 通过EIP-7702的gas赞助\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>社交恢复\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-solidity\">\u002F\u002F\u002F @title RecoveryModule — 通过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=\"\">钱包集成状态\u003C\u002Fh2>\n\u003Ch3>MetaMask\u003C\u002Fh3>\n\u003Cp>MetaMask在12.4版本(2025年9月)中添加了EIP-7702支持。用户在dApp请求type-4交易时会看到“智能交易“标识。\u003C\u002Fp>\n\u003Ch3>Coinbase Wallet\u003C\u002Fh3>\n\u003Cp>Coinbase Wallet是最积极的采用者，将EIP-7702集成到“Smart Wallet“功能(2025年11月发布)中：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>自动批处理\u003C\u002Fstrong> — 钱包自动批处理approve+swap序列\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Gas赞助\u003C\u002Fstrong> — Coinbase为低于$1费用的交易赞助gas\u003C\u002Fli>\n\u003Cli>\u003Cstrong>一键DeFi\u003C\u002Fstrong> — 常见DeFi操作的预构建委托目标\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Rainbow、Rabby等\u003C\u002Fh3>\n\u003Cp>Rainbow于2026年1月添加支持。Rabby支持type-4交易但缺少批处理可视化UI。\u003C\u002Fp>\n\u003Ch2 id=\"eoa\">迁移指南：从EOA到智能账户\u003C\u002Fh2>\n\u003Ch3>步骤1：部署委托目标\u003C\u002Fh3>\n\u003Cp>创建并审计用户将委托的智能合约。\u003C\u002Fp>\n\u003Ch3>步骤2：更新前端\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>步骤3：实现优雅降级\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=\"\">安全注意事项\u003C\u002Fh2>\n\u003Ch3>委托目标验证\u003C\u002Fh3>\n\u003Cp>委托目标合约在交易期间对EOA的资产拥有\u003Cstrong>完全控制权\u003C\u002Fstrong>。恶意委托目标可以转移EOA的所有ETH和代币。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>缓解措施：\u003C\u002Fstrong> 仅委托给经过审计和验证的合约。\u003C\u002Fp>\n\u003Ch3>重放保护\u003C\u002Fh3>\n\u003Cp>EIP-7702授权列表包含nonce以防止重放攻击。\u003C\u002Fp>\n\u003Ch3>通过委托的钓鱼\u003C\u002Fh3>\n\u003Cp>攻击者可能诱骗用户签署委托给恶意合约的授权列表。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>缓解措施：\u003C\u002Fstrong> 钱包必须清楚显示EOA委托给什么代码。\u003C\u002Fp>\n\u003Ch3>批量执行中的重入\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>存储冲突\u003C\u002Fh3>\n\u003Cp>使用EIP-7201(命名空间存储)：\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=\"\">常见问题\u003C\u002Fh2>\n\u003Ch3 id=\"eip-7702\">EIP-7702会改变我的钱包地址吗？\u003C\u002Fh3>\n\u003Cp>不会。您的EOA地址保持不变。EIP-7702在单笔交易期间临时赋予您的地址智能合约能力。\u003C\u002Fp>\n\u003Ch3 id=\"l2-eip-7702\">我可以在L2上使用EIP-7702吗？\u003C\u002Fh3>\n\u003Cp>是的。所有主要L2(Arbitrum, Base, Optimism, zkSync)已采用EIP-7702。\u003C\u002Fp>\n\u003Ch3 id=\"bug\">如果委托目标有bug怎么办？\u003C\u002Fh3>\n\u003Cp>损害仅限于单笔交易。但在该交易中，委托目标对EOA资产有完全访问权限。\u003C\u002Fp>\n\u003Ch3 id=\"eip-7702\">EIP-7702与硬件钱包兼容吗？\u003C\u002Fh3>\n\u003Cp>是的。Ledger在固件2.3.0版本(2025年12月)中添加了支持。\u003C\u002Fp>\n\u003Ch3 id=\"eip-7702-gas\">EIP-7702节省多少gas？\u003C\u002Fh3>\n\u003Cp>对于典型的approve+swap流程，节省约**40-50%**的gas。复杂的多步DeFi操作可节省60-70%。\u003C\u002Fp>\n","zh","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:42.997040Z","学习如何实现EIP-7702批量交易、gas赞助和社交恢复。代码示例、钱包支持和安全指南。","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","区块链",[36,43,49],{"id":37,"title":38,"slug":39,"excerpt":40,"locale":12,"category_name":41,"published_at":42},"d0000000-0000-0000-0000-000000000668","为什么Bali在2026年正在成为东南亚的影响力科技中心","weishenme-bali-2026-zhengzai-chengwei-dongnanya-yingxiangli-keji-zhongxin","Bali在东南亚创业生态系统中排名第16位。随着Web3构建者、AI可持续发展初创公司和生态旅游科技公司的集中，该岛正在打造区域影响力科技之都的独特定位。","工程","2026-03-28T10:44:48.898750Z",{"id":44,"title":45,"slug":46,"excerpt":47,"locale":12,"category_name":41,"published_at":48},"d0000000-0000-0000-0000-000000000667","ASEAN数据保护拼图：开发者合规清单","asean-shuju-baohu-pintu-kaifazhe-heguiqingdan","七个ASEAN国家现已拥有全面的数据保护法律，各自具有不同的同意模型、本地化要求和处罚结构。这是一份为构建多国应用程序的开发者准备的实用合规清单。","2026-03-28T10:44:48.893467Z",{"id":50,"title":51,"slug":52,"excerpt":53,"locale":12,"category_name":41,"published_at":54},"d0000000-0000-0000-0000-000000000666","Indonesia 290亿美元数字化转型：软件公司的机遇","indonesia-290yi-meiyuan-shuzihua-zhuanxing-ruanjian-gongsi-jiyu","Indonesia IT服务市场预计在2026年达到290.3亿美元，高于2025年的243.7亿美元。云基础设施、AI、电子商务和数据中心正在推动东南亚最快的增长。","2026-03-28T10:44:48.875457Z",{"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"]