EIP7702Lib

Description:

Smart contract deployed on Ethereum with Factory features.

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

{{
  "language": "Solidity",
  "sources": {
    "contracts/libraries/EIP7702Lib.sol": {
      "content": "// SPDX-License-Identifier: MIT\r
pragma solidity ^0.8.19;\r
\r
/**\r
 * @title EIP7702Lib\r
 * @dev Library for EIP-7702 functionality (MetaMask Smart Accounts)\r
 */\r
library EIP7702Lib {\r
    // Events\r
    event EIP7702TransactionExecuted(address indexed eoa, address indexed contractCode, bytes32 indexed transactionHash, bool success, bytes returnData);\r
    event EIP7702BatchExecuted(address indexed eoa, address indexed contractCode, uint256 operationsCount, bool success);\r
\r
    /**\r
     * @dev Execute EIP-7702 transaction for EOA with temporary smart contract functionality\r
     */\r
    function executeEIP7702Transaction(\r
        address eoa,\r
        address contractCode,\r
        bytes memory callData,\r
        bytes memory signature\r
    ) external {\r
        require(verifyEIP7702Signature(eoa, contractCode, callData, signature), "Invalid EIP-7702 signature");\r
        \r
        (bool success, bytes memory returnData) = eoa.call(\r
            abi.encodeWithSignature("executeWithContractCode(address,bytes)", contractCode, callData)\r
        );\r
        \r
        emit EIP7702TransactionExecuted(eoa, contractCode, keccak256(callData), success, returnData);\r
        require(success, "EIP-7702 transaction failed");\r
    }\r
\r
    /**\r
     * @dev Execute batch EIP-7702 transactions for multiple operations\r
     */\r
    function executeEIP7702Batch(\r
        address eoa,\r
        address contractCode,\r
        bytes[] memory operations,\r
        bytes memory signature\r
    ) external {\r
        require(verifyEIP7702BatchSignature(eoa, contractCode, operations, signature), "Invalid EIP-7702 batch signature");\r
        \r
        uint256 successCount = 0;\r
        for (uint256 i = 0; i < operations.length; i++) {\r
            (bool success, ) = eoa.call(\r
                abi.encodeWithSignature("executeWithContractCode(address,bytes)", contractCode, operations[i])\r
            );\r
            if (success) successCount++;\r
        }\r
        \r
        emit EIP7702BatchExecuted(eoa, contractCode, operations.length, successCount == operations.length);\r
        require(successCount == operations.length, "Some EIP-7702 batch operations failed");\r
    }\r
\r
    /**\r
     * @dev Execute EIP-7702 token transfer with gas sponsorship\r
     */\r
    function executeEIP7702SponsoredTransfer(\r
        address eoa,\r
        address contractCode,\r
        address token,\r
        address from,\r
        address to,\r
        uint256 amount,\r
        bytes memory signature\r
    ) external {\r
        require(verifyEIP7702Signature(eoa, contractCode, abi.encode(token, from, to, amount), signature), "Invalid EIP-7702 signature");\r
        \r
        (bool success, bytes memory returnData) = eoa.call(\r
            abi.encodeWithSignature(\r
                "executeWithContractCode(address,bytes)",\r
                contractCode,\r
                abi.encodeWithSignature("transferFrom(address,address,uint256)", from, to, amount)\r
            )\r
        );\r
        \r
        emit EIP7702TransactionExecuted(eoa, contractCode, keccak256(abi.encode(token, from, to, amount)), success, returnData);\r
        require(success, "EIP-7702 sponsored transfer failed");\r
    }\r
\r
    /**\r
     * @dev Verify EIP-7702 authorization signature\r
     */\r
    function verifyEIP7702Signature(\r
        address eoa,\r
        address contractCode,\r
        bytes memory callData,\r
        bytes memory signature\r
    ) internal pure returns (bool) {\r
        bytes32 messageHash = keccak256(\r
            abi.encodePacked(\r
                "\x19EIP-7702 Authorization:\
",\r
                eoa,\r
                contractCode,\r
                callData\r
            )\r
        );\r
        \r
        bytes32 r;\r
        bytes32 s;\r
        uint8 v;\r
        \r
        if (signature.length == 65) {\r
            assembly {\r
                r := mload(add(signature, 32))\r
                s := mload(add(signature, 64))\r
                v := byte(0, mload(add(signature, 96)))\r
            }\r
        } else {\r
            return false;\r
        }\r
        \r
        address signer = ecrecover(messageHash, v, r, s);\r
        return signer == eoa;\r
    }\r
\r
    /**\r
     * @dev Verify EIP-7702 batch authorization signature\r
     */\r
    function verifyEIP7702BatchSignature(\r
        address eoa,\r
        address contractCode,\r
        bytes[] memory operations,\r
        bytes memory signature\r
    ) internal pure returns (bool) {\r
        bytes32 messageHash = keccak256(\r
            abi.encodePacked(\r
                "\x19EIP-7702 Batch Authorization:\
",\r
                eoa,\r
                contractCode,\r
                keccak256(abi.encode(operations))\r
            )\r
        );\r
        \r
        bytes32 r;\r
        bytes32 s;\r
        uint8 v;\r
        \r
        if (signature.length == 65) {\r
            assembly {\r
                r := mload(add(signature, 32))\r
                s := mload(add(signature, 64))\r
                v := byte(0, mload(add(signature, 96)))\r
            }\r
        } else {\r
            return false;\r
        }\r
        \r
        address signer = ecrecover(messageHash, v, r, s);\r
        return signer == eoa;\r
    }\r
}\r
"
    }
  },
  "settings": {
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "viaIR": true,
    "outputSelection": {
      "*": {
        "*": [
          "evm.bytecode",
          "evm.deployedBytecode",
          "devdoc",
          "userdoc",
          "metadata",
          "abi"
        ]
      }
    }
  }
}}

Tags:
Factory|addr:0xf24c4e08d020e3bcb2c1657c7d5102e332524fe6|verified:true|block:23392297|tx:0xee6559fe473f2b47cd4e5506b522408ec452447ce809106f58b6b9c2413fc2ae|first_check:1758365265

Submitted on: 2025-09-20 12:47:47

Comments

Log in to comment.

No comments yet.