ETH Price: $1,999.81 (+3.24%)

Contract

0xccefF281599d37264CF8331CE351b63B8F8cB9Bf
 

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Execute244345312026-02-11 15:49:2326 days ago1770824963IN
0xccefF281...B8F8cB9Bf
0 ETH0.00026330.47991563
Execute242299112026-01-14 2:18:2354 days ago1768357103IN
0xccefF281...B8F8cB9Bf
0 ETH0.000402020.19420436
Execute242263992026-01-13 14:30:2355 days ago1768314623IN
0xccefF281...B8F8cB9Bf
0 ETH0.00055940.21104745
Execute240162332025-12-15 6:32:4784 days ago1765780367IN
0xccefF281...B8F8cB9Bf
0 ETH0.00007460.13483714
Execute239239602025-12-02 6:21:1197 days ago1764656471IN
0xccefF281...B8F8cB9Bf
0 ETH0.000074890.13527374
Execute238143332025-11-16 21:09:35113 days ago1763327375IN
0xccefF281...B8F8cB9Bf
0 ETH0.000113580.20507378
Execute238002432025-11-14 21:54:23115 days ago1763157263IN
0xccefF281...B8F8cB9Bf
0 ETH0.000139390.25407645
Execute237957352025-11-14 6:47:23115 days ago1763102843IN
0xccefF281...B8F8cB9Bf
0 ETH0.001504550.4372334
Execute237860082025-11-12 22:05:11117 days ago1762985111IN
0xccefF281...B8F8cB9Bf
0 ETH0.000120350.21917005
Execute233592252025-09-14 5:27:59176 days ago1757827679IN
0xccefF281...B8F8cB9Bf
0 ETH0.000123330.22277653
Execute231839432025-08-20 18:00:23201 days ago1755712823IN
0xccefF281...B8F8cB9Bf
0 ETH0.000419280.7570263
Execute230977872025-08-08 17:19:23213 days ago1754673563IN
0xccefF281...B8F8cB9Bf
0 ETH0.000522470.96016364
Execute229149712025-07-14 4:16:47238 days ago1752466607IN
0xccefF281...B8F8cB9Bf
0 ETH0.003735041.6400278
Execute228582832025-07-06 6:09:47246 days ago1751782187IN
0xccefF281...B8F8cB9Bf
0 ETH0.000205120.36871042
Execute225389402025-05-22 14:14:35291 days ago1747923275IN
0xccefF281...B8F8cB9Bf
0 ETH0.00331585.7593296
Execute224757622025-05-13 17:24:59300 days ago1747157099IN
0xccefF281...B8F8cB9Bf
0 ETH0.00382396.64188003
Execute224638412025-05-12 1:07:11301 days ago1747012031IN
0xccefF281...B8F8cB9Bf
0 ETH0.003369491.70520872
Execute224553842025-05-10 20:33:23303 days ago1746909203IN
0xccefF281...B8F8cB9Bf
0 ETH0.001792573.11851029
Execute224323232025-05-07 14:23:11306 days ago1746627791IN
0xccefF281...B8F8cB9Bf
0 ETH0.000948771.67411567
Execute224250122025-05-06 13:38:35307 days ago1746538715IN
0xccefF281...B8F8cB9Bf
0 ETH0.001016331.78191722
Execute224123142025-05-04 18:54:59309 days ago1746384899IN
0xccefF281...B8F8cB9Bf
0 ETH0.000515370.90362465
Execute224122992025-05-04 18:51:59309 days ago1746384719IN
0xccefF281...B8F8cB9Bf
0 ETH0.000533240.92767631
Execute224039182025-05-03 14:41:23310 days ago1746283283IN
0xccefF281...B8F8cB9Bf
0 ETH0.000265050.46127988
Execute223623202025-04-27 18:55:47316 days ago1745780147IN
0xccefF281...B8F8cB9Bf
0 ETH0.000354370.62180571
Execute223433402025-04-25 3:27:23318 days ago1745551643IN
0xccefF281...B8F8cB9Bf
0 ETH0.000439510.76520259
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Method Block
From
To
0x3d602d80209610662024-10-14 3:16:11511 days ago1728875771  Contract Creation0 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Minimal Proxy Contract for 0xd80a503a2c2a5dddd8be53fb75bd48f0bb465ed4

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x93dFeCd4...9eF9C941A
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
AccountImplementation

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.17;

// Uncomment this line to use console.log
// import "hardhat/console.sol";
import "./AccountGuard.sol";

contract AccountImplementation {
    AccountGuard public immutable guard;

    modifier authAndWhitelisted(address target, bool asDelegateCall) {
        (bool canCall, bool isWhitelisted) = guard.canCallAndWhitelisted(
            address(this),
            msg.sender,
            target,
            asDelegateCall
        );
        require(
            canCall,
            "account-guard/no-permit"
        );
        require(
            isWhitelisted,
            "account-guard/illegal-target"
        );
        _;
    }

    constructor(AccountGuard _guard) {
        require(
            address(_guard) != address(0x0),
            "account-guard/wrong-guard-address"
        );
        guard = _guard;
    }

    function send(address _target, bytes calldata _data)
        external
        payable
        authAndWhitelisted(_target, false)
    {
        (bool status, ) = (_target).call{value: msg.value}(_data);
        require(status, "account-guard/call-failed");
    }

    function execute(address _target, bytes memory /* code do not compile with calldata */ _data)
        external
        payable
        authAndWhitelisted(_target, true)

        returns (bytes32)
    {
        // call contract in current context
        assembly {
            let succeeded := delegatecall(
                sub(gas(), 5000),
                _target,
                add(_data, 0x20),
                mload(_data),
                0,
                32
            )
            returndatacopy(0, 0, returndatasize())
            switch succeeded
            case 0 {
                // throw if delegatecall failed
                revert(0, returndatasize())
            }
            default {
                return(0, 0x20)
            }
        }
    }
 
    receive() external payable {
        emit FundsRecived(msg.sender, msg.value);
    }

    function owner() external view returns (address) {
        return guard.owners(address(this));
    }

    event FundsRecived(address sender, uint256 amount);
}

// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.17;

// Uncomment this line to use console.log
// import "hardhat/console.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract AccountGuard is Ownable {
    address factory;
    uint8 constant WHITELISTED_EXECUTE_MASK = 1;
    uint8 constant WHITELISTED_SEND_MASK = 2;
    mapping(address => mapping(address => bool)) private allowed;
    mapping(address => uint8) private whitelisted;
    mapping(address => address) public owners;

    function isWhitelisted(address target) public view returns (bool) {
        return (whitelisted[target] & WHITELISTED_EXECUTE_MASK) > 0;
    }

    function setWhitelist(address target, bool status) external onlyOwner {
        whitelisted[target] = status
            ? whitelisted[target] | WHITELISTED_EXECUTE_MASK
            : whitelisted[target] & ~WHITELISTED_EXECUTE_MASK;
    }

    function isWhitelistedSend(address target) public view returns (bool) {
        return (whitelisted[target] & WHITELISTED_SEND_MASK) > 0;
    }

    function setWhitelistSend(address target, bool status) external onlyOwner {
        whitelisted[target] = status
            ? whitelisted[target] | WHITELISTED_SEND_MASK
            : whitelisted[target] & ~WHITELISTED_SEND_MASK;
    }

    function canCallAndWhitelisted(
        address proxy,
        address operator,
        address callTarget,
        bool asDelegateCall
    ) external view returns (bool, bool) {
        return (
            allowed[operator][proxy],
            asDelegateCall
                ? isWhitelisted(callTarget)
                : isWhitelistedSend(callTarget)
        );
    }

    function canCall(address target, address operator)
        external
        view
        returns (bool)
    {
        return owners[target] == operator || allowed[operator][target];
    }

    function initializeFactory() external {
        require(factory == address(0), "account-guard/factory-set");
        factory = msg.sender;
    }

    function permit(
        address caller,
        address target,
        bool allowance
    ) external {
        require(
            allowed[msg.sender][target] || msg.sender == factory,
            "account-guard/no-permit"
        );
        if (msg.sender == factory) {
            owners[target] = caller;
            allowed[target][target] = true;
        } else {
            require(owners[target] != caller, "account-guard/cant-deny-owner");
        }
        allowed[caller][target] = allowance;

        if (allowance) {
            emit PermissionGranted(caller, target);
        } else {
            emit PermissionRevoked(caller, target);
        }
    }

    function changeOwner(address newOwner, address target) external {
        require(newOwner != address(0), "account-guard/zero-address");
        require(owners[target] == msg.sender, "account-guard/only-proxy-owner");
        owners[target] = newOwner;
        allowed[msg.sender][target] = false;
        allowed[newOwner][target] = true;
        emit ProxyOwnershipTransferred(newOwner, msg.sender, target);
    }

    event ProxyOwnershipTransferred(
        address indexed newOwner,
        address indexed oldAddress,
        address indexed proxy
    );
    event PermissionGranted(address indexed caller, address indexed proxy);
    event PermissionRevoked(address indexed caller, address indexed proxy);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract ABI

API
[{"inputs":[{"internalType":"contract AccountGuard","name":"_guard","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsRecived","type":"event"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"execute","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"guard","outputs":[{"internalType":"contract AccountGuard","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"send","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ 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.