ETH Price: $2,710.44 (+2.79%)

Contract

0xffB6dF623CDf6Fe1CDB9F5eaDd8170F260f3e999
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Execute195984122024-04-06 18:15:59310 days ago1712427359IN
0xffB6dF62...260f3e999
0 ETH0.0064186113.29812135
Execute195344182024-03-28 18:46:59319 days ago1711651619IN
0xffB6dF62...260f3e999
0 ETH0.0196478840.04133997
Execute194069212024-03-10 19:55:47337 days ago1710100547IN
0xffB6dF62...260f3e999
0 ETH0.0334532263.02642053
Execute193961842024-03-09 7:55:47338 days ago1709970947IN
0xffB6dF62...260f3e999
0 ETH0.0272267245.6401602
Execute193961002024-03-09 7:38:59338 days ago1709969939IN
0xffB6dF62...260f3e999
0 ETH0.0239653947.07181753
Execute193960922024-03-09 7:37:23338 days ago1709969843IN
0xffB6dF62...260f3e999
0 ETH0.0251889849.96546211
Execute193320832024-02-29 8:49:11347 days ago1709196551IN
0xffB6dF62...260f3e999
0 ETH0.0297146858.96941432
Execute193320802024-02-29 8:48:35347 days ago1709196515IN
0xffB6dF62...260f3e999
0 ETH0.0292020456.43168225
Execute193320572024-02-29 8:43:59347 days ago1709196239IN
0xffB6dF62...260f3e999
0 ETH0.030929258.00839474
Execute193320542024-02-29 8:43:23347 days ago1709196203IN
0xffB6dF62...260f3e999
0 ETH0.0304624258.29839488
Execute193320492024-02-29 8:42:23347 days ago1709196143IN
0xffB6dF62...260f3e999
0 ETH0.0329691465.13195277
Execute193320462024-02-29 8:41:47347 days ago1709196107IN
0xffB6dF62...260f3e999
0 ETH0.0303946257.15844144
Execute193320242024-02-29 8:37:23347 days ago1709195843IN
0xffB6dF62...260f3e999
0 ETH0.0346091556.33412804
Execute193320202024-02-29 8:36:23347 days ago1709195783IN
0xffB6dF62...260f3e999
0 ETH0.028393455.34658438
Execute193320072024-02-29 8:33:47347 days ago1709195627IN
0xffB6dF62...260f3e999
0 ETH0.0280520154.82999747
Execute193258162024-02-28 11:45:35348 days ago1709120735IN
0xffB6dF62...260f3e999
0 ETH0.0308558646.025439
Execute193257972024-02-28 11:41:47348 days ago1709120507IN
0xffB6dF62...260f3e999
0 ETH0.0269025944.68527546
Execute193253872024-02-28 10:18:35348 days ago1709115515IN
0xffB6dF62...260f3e999
0 ETH0.0314286151.78387234
Execute193253692024-02-28 10:14:47348 days ago1709115287IN
0xffB6dF62...260f3e999
0 ETH0.0280238255.51152755
Execute193253602024-02-28 10:12:59348 days ago1709115179IN
0xffB6dF62...260f3e999
0 ETH0.0268204350.09681458
Execute193110412024-02-26 10:07:23350 days ago1708942043IN
0xffB6dF62...260f3e999
0 ETH0.019786729.92495117
Execute192998182024-02-24 20:26:11352 days ago1708806371IN
0xffB6dF62...260f3e999
0 ETH0.0130134134.79551932
Execute192998072024-02-24 20:23:59352 days ago1708806239IN
0xffB6dF62...260f3e999
33.05776062 ETH0.0212491532.84548713
Execute192829272024-02-22 11:42:35354 days ago1708602155IN
0xffB6dF62...260f3e999
0 ETH0.0171969431.12613618
Execute192824482024-02-22 10:05:23354 days ago1708596323IN
0xffB6dF62...260f3e999
0 ETH0.0176132835.5568847
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
195984122024-04-06 18:15:59310 days ago1712427359
0xffB6dF62...260f3e999
67.71748064 ETH
195984122024-04-06 18:15:59310 days ago1712427359
0xffB6dF62...260f3e999
67.71748064 ETH
195344182024-03-28 18:46:59319 days ago1711651619
0xffB6dF62...260f3e999
15.88165054 ETH
195344182024-03-28 18:46:59319 days ago1711651619
0xffB6dF62...260f3e999
15.88165054 ETH
193320202024-02-29 8:36:23347 days ago1709195783
0xffB6dF62...260f3e999
92.46761989 ETH
193320202024-02-29 8:36:23347 days ago1709195783
0xffB6dF62...260f3e999
92.46761989 ETH
193320072024-02-29 8:33:47347 days ago1709195627
0xffB6dF62...260f3e999
176.01102812 ETH
193320072024-02-29 8:33:47347 days ago1709195627
0xffB6dF62...260f3e999
176.01102812 ETH
193253602024-02-28 10:12:59348 days ago1709115179
0xffB6dF62...260f3e999
40.80232703 ETH
193253602024-02-28 10:12:59348 days ago1709115179
0xffB6dF62...260f3e999
40.80232703 ETH
192998072024-02-24 20:23:59352 days ago1708806239
0xffB6dF62...260f3e999
0.04069917 ETH
192998072024-02-24 20:23:59352 days ago1708806239
0xffB6dF62...260f3e999
0.04069917 ETH
192998072024-02-24 20:23:59352 days ago1708806239
0xffB6dF62...260f3e999
33.05776062 ETH
192829272024-02-22 11:42:35354 days ago1708602155
0xffB6dF62...260f3e999
0.00010033 ETH
192829272024-02-22 11:42:35354 days ago1708602155
0xffB6dF62...260f3e999
0.00010033 ETH
192824482024-02-22 10:05:23354 days ago1708596323
0xffB6dF62...260f3e999
2.94007531 ETH
192824482024-02-22 10:05:23354 days ago1708596323
0xffB6dF62...260f3e999
2.94007531 ETH
192823942024-02-22 9:54:35354 days ago1708595675
0xffB6dF62...260f3e999
10 ETH
192823942024-02-22 9:54:35354 days ago1708595675
0xffB6dF62...260f3e999
10 ETH
192823292024-02-22 9:41:35354 days ago1708594895
0xffB6dF62...260f3e999
20 ETH
192823292024-02-22 9:41:35354 days ago1708594895
0xffB6dF62...260f3e999
20 ETH
192823122024-02-22 9:37:47354 days ago1708594667
0xffB6dF62...260f3e999
0.99983651 ETH
192823122024-02-22 9:37:47354 days ago1708594667
0xffB6dF62...260f3e999
0.99983651 ETH
192822262024-02-22 9:19:59354 days ago1708593599
0xffB6dF62...260f3e999
0.00116641 ETH
192822262024-02-22 9:19:59354 days ago1708593599
0xffB6dF62...260f3e999
0.00116641 ETH
View All Internal Transactions
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)

File 1 of 4 : AccountImplementation.sol
// 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);
}

File 2 of 4 : AccountGuard.sol
// 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);
}

File 3 of 4 : Ownable.sol
// 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);
    }
}

File 4 of 4 : Context.sol
// 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

[{"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 Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.