S Price: $0.52983 (+0.20%)
    /

    Contract

    0xD3d32a5CaD2D3E806D169AA49717C4f437cB9460

    Overview

    S Balance

    Sonic LogoSonic LogoSonic Logo0 S

    S Value

    $0.00

    Multichain Info

    No addresses found
    Transaction Hash
    Method
    Block
    Age
    From
    To

    There are no matching entries

    1 Internal Transaction found.

    Latest 1 internal transaction

    Parent Transaction Hash Block Age From To Amount
    128366062025-03-10 11:59:344 days ago1741607974
     Contract Creation
    0 S
    Loading...
    Loading

    Minimal Proxy Contract for 0xb73a4222fd74fa912ead0b1bc0653caf171f2e76

    Contract Name:
    CoboSafeAccount

    Compiler Version
    v0.8.26+commit.8a97fa7a

    Optimization Enabled:
    Yes with 200 runs

    Other Settings:
    cancun EvmVersion

    Contract Source Code (Solidity Standard Json-Input format)

    File 1 of 10 : CoboSafeAccount.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity ^0.8.19;
    import "./base/BaseAccount.sol";
    contract Enum {
    enum Operation {
    Call,
    DelegateCall
    }
    }
    interface IGnosisSafe {
    /// @dev Allows a Module to execute a Safe transaction without any further confirmations and return data
    function execTransactionFromModuleReturnData(
    address to,
    uint256 value,
    bytes memory data,
    Enum.Operation operation
    ) external returns (bool success, bytes memory returnData);
    function enableModule(address module) external;
    function isModuleEnabled(address module) external view returns (bool);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 2 of 10 : BaseAccount.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity ^0.8.19;
    import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
    import "../Types.sol";
    import "./BaseOwnable.sol";
    import "../../interfaces/IAuthorizer.sol";
    import "../../interfaces/IAccount.sol";
    /// @title BaseAccount - A basic smart contract wallet with access control supported.
    /// @author Cobo Safe Dev Team https://www.cobo.com/
    /// @dev Extend this and implement `_executeTransaction()` and `_getFromAddress()`.
    abstract contract BaseAccount is IAccount, BaseOwnable {
    using EnumerableSet for EnumerableSet.AddressSet;
    using TxFlags for uint256;
    using AuthFlags for uint256;
    address public roleManager;
    address public authorizer;
    // Simple and basic delegate check.
    EnumerableSet.AddressSet delegates;
    event RoleManagerSet(address indexed roleManager);
    event AuthorizerSet(address indexed authorizer);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 3 of 10 : EnumerableSet.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (utils/structs/EnumerableSet.sol)
    // This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.
    pragma solidity ^0.8.20;
    /**
    * @dev Library for managing
    * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
    * types.
    *
    * Sets have the following properties:
    *
    * - Elements are added, removed, and checked for existence in constant time
    * (O(1)).
    * - Elements are enumerated in O(n). No guarantees are made on the ordering.
    *
    * ```solidity
    * contract Example {
    * // Add the library methods
    * using EnumerableSet for EnumerableSet.AddressSet;
    *
    * // Declare a set state variable
    * EnumerableSet.AddressSet private mySet;
    * }
    * ```
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 4 of 10 : Types.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity ^0.8.19;
    struct CallData {
    uint256 flag; // 0x1 delegate call, 0x0 call.
    address to;
    uint256 value;
    bytes data; // calldata
    bytes hint;
    bytes extra; // for future support: signatures etc.
    }
    struct TransactionData {
    address from; // `msg.sender` who performs the transaction a.k.a wallet address.
    address delegate; // Delegate who calls executeTransactions().
    // Same as CallData
    uint256 flag; // 0x1 delegate call, 0x0 call.
    address to;
    uint256 value;
    bytes data; // calldata
    bytes hint;
    bytes extra;
    }
    /// @dev Use enum instead of bool in case of when other status, like PENDING,
    /// is needed in the future.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 5 of 10 : BaseOwnable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity ^0.8.19;
    import "../Errors.sol";
    import "./BaseVersion.sol";
    /// @title BaseOwnable - Simple ownership access control contract.
    /// @author Cobo Safe Dev Team https://www.cobo.com/
    /// @dev Can be used in both proxy and non-proxy mode.
    abstract contract BaseOwnable is BaseVersion {
    address public owner;
    address public pendingOwner;
    bool private initialized = false;
    event PendingOwnerSet(address indexed to);
    event NewOwnerSet(address indexed owner);
    modifier onlyOwner() {
    require(owner == msg.sender, Errors.CALLER_IS_NOT_OWNER);
    _;
    }
    /// @dev `owner` is set by argument, thus the owner can any address.
    /// When used in non-proxy mode, `initialize` can not be called
    /// after deployment.
    constructor(address _owner) {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 6 of 10 : IAuthorizer.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity ^0.8.19;
    import "../src/Types.sol";
    interface IAuthorizer {
    function flag() external view returns (uint256 authFlags);
    function setCaller(address _caller) external;
    function preExecCheck(TransactionData calldata transaction) external returns (AuthorizerReturnData memory authData);
    function postExecCheck(
    TransactionData calldata transaction,
    TransactionResult calldata callResult,
    AuthorizerReturnData calldata preAuthData
    ) external returns (AuthorizerReturnData memory authData);
    function preExecProcess(TransactionData calldata transaction) external;
    function postExecProcess(TransactionData calldata transaction, TransactionResult calldata callResult) external;
    }
    interface IAuthorizerSupportingHint is IAuthorizer {
    // When IAuthorizer(auth).flag().supportHint() == true;
    function collectHint(
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 7 of 10 : IAccount.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity ^0.8.19;
    import "../src/Types.sol";
    interface IAccount {
    function execTransaction(CallData calldata callData) external returns (TransactionResult memory result);
    function execTransactions(
    CallData[] calldata callDataList
    ) external returns (TransactionResult[] memory resultList);
    function setAuthorizer(address _authorizer) external;
    function setRoleManager(address _roleManager) external;
    function addDelegate(address _delegate) external;
    function addDelegates(address[] calldata _delegates) external;
    /// @dev Sub instance should override this to set `from` for transaction
    /// @return account The address for the contract wallet, also the
    /// `msg.sender` address which send the transaction.
    function getAccountAddress() external view returns (address account);
    function roleManager() external view returns (address _roleManager);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 8 of 10 : Errors.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity ^0.8.19;
    /// @dev Common errors. This helps reducing the contract size.
    library Errors {
    // "E1";
    // Call/Static-call failed.
    string constant CALL_FAILED = "E2";
    // Argument's type not supported in View Variant.
    string constant INVALID_VIEW_ARG_SOL_TYPE = "E3";
    // Invalid length for variant raw data.
    string constant INVALID_VARIANT_RAW_DATA = "E4";
    // "E5";
    // Invalid variant type.
    string constant INVALID_VAR_TYPE = "E6";
    // Rule not exists
    string constant RULE_NOT_EXISTS = "E7";
    // Variant name not found.
    string constant VAR_NAME_NOT_FOUND = "E8";
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 9 of 10 : BaseVersion.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity ^0.8.19;
    import "../../interfaces/IVersion.sol";
    /// @title BaseVersion - Provides version information
    /// @author Cobo Safe Dev Team https://www.cobo.com/
    /// @dev
    /// Implement NAME() and VERSION() methods according to IVersion interface.
    ///
    /// Or just:
    /// bytes32 public constant NAME = "<Your contract name>";
    /// uint256 public constant VERSION = <Your contract version>;
    ///
    /// Change the NAME when writing new kind of contract.
    /// Change the VERSION when upgrading existing contract.
    abstract contract BaseVersion is IVersion {
    /// @dev Convert to `string` which looks prettier on Etherscan viewer.
    function _NAME() external view virtual returns (string memory) {
    return string(abi.encodePacked(this.NAME()));
    }
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 10 of 10 : IVersion.sol
    1
    2
    3
    4
    5
    6
    7
    8
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity ^0.8.19;
    interface IVersion {
    function NAME() external view returns (bytes32 name);
    function VERSION() external view returns (uint256 version);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Settings
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    {
    "remappings": [
    "openzeppelin/=lib/openzeppelin-contracts/",
    "forge-std/=lib/forge-std/src/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/"
    ],
    "optimizer": {
    "enabled": true,
    "runs": 200
    },
    "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
    },
    "outputSelection": {
    "*": {
    "*": [
    "evm.bytecode",
    "evm.deployedBytecode",
    "devdoc",
    "userdoc",
    "metadata",
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Contract ABI

    API
    [{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"authorizer","type":"address"}],"name":"AuthorizerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"}],"name":"DelegateAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"}],"name":"DelegateRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"NewOwnerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"PendingOwnerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"roleManager","type":"address"}],"name":"RoleManagerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"delegate","type":"address"},{"internalType":"uint256","name":"flag","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"hint","type":"bytes"},{"internalType":"bytes","name":"extra","type":"bytes"}],"indexed":false,"internalType":"struct TransactionData","name":"transaction","type":"tuple"}],"name":"TransactionExecuted","type":"event"},{"inputs":[],"name":"NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_NAME","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_delegate","type":"address"}],"name":"addDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_delegates","type":"address[]"}],"name":"addDelegates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"authorizer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"flag","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"hint","type":"bytes"},{"internalType":"bytes","name":"extra","type":"bytes"}],"internalType":"struct CallData","name":"callData","type":"tuple"}],"name":"execTransaction","outputs":[{"components":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"hint","type":"bytes"}],"internalType":"struct TransactionResult","name":"result","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"flag","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"hint","type":"bytes"},{"internalType":"bytes","name":"extra","type":"bytes"}],"internalType":"struct CallData[]","name":"callDataList","type":"tuple[]"}],"name":"execTransactions","outputs":[{"components":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"hint","type":"bytes"}],"internalType":"struct TransactionResult[]","name":"resultList","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAccountAddress","outputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllDelegates","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_delegate","type":"address"}],"name":"hasDelegate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_roleManager","type":"address"},{"internalType":"address","name":"_authorizer","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_delegate","type":"address"}],"name":"removeDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_delegates","type":"address[]"}],"name":"removeDelegates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"roleManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"safe","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_authorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"setPendingOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_roleManager","type":"address"}],"name":"setRoleManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

    Block Age Transaction Gas Used Reward
    view all blocks ##produced##

    Block Age Uncle Number Difficulty Gas Used Reward
    View All Uncles
    Loading...
    Loading
    Loading...
    Loading

    Validator Index Block Age Amount
    View All Withdrawals

    Transaction Hash Block Age Value Eth2 PubKey Valid
    View All Deposits
    [ Download: CSV Export  ]

    A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.