ETH Price: $3,249.09 (+0.25%)

Contract

0x52Ac424eF7B283aA5bADB8c6254832E3280d7398
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Add215904472025-01-10 0:17:1125 hrs ago1736468231IN
0x52Ac424e...3280d7398
0 ETH0.000705337.11067452
Add215904452025-01-10 0:16:4725 hrs ago1736468207IN
0x52Ac424e...3280d7398
0 ETH0.000754057.60270099
Add215904442025-01-10 0:16:3525 hrs ago1736468195IN
0x52Ac424e...3280d7398
0 ETH0.000718917.24760647
Add215903302025-01-09 23:53:3526 hrs ago1736466815IN
0x52Ac424e...3280d7398
0 ETH0.000433354.36877078
Add215877552025-01-09 15:16:3534 hrs ago1736435795IN
0x52Ac424e...3280d7398
0 ETH0.0010878210.96666675
Add215876642025-01-09 14:58:1135 hrs ago1736434691IN
0x52Ac424e...3280d7398
0 ETH0.0012368612.46919862
Add215876622025-01-09 14:57:4735 hrs ago1736434667IN
0x52Ac424e...3280d7398
0 ETH0.0012275312.37511048
Add215876602025-01-09 14:57:2335 hrs ago1736434643IN
0x52Ac424e...3280d7398
0 ETH0.0012903813.00870225
Add215876592025-01-09 14:57:1135 hrs ago1736434631IN
0x52Ac424e...3280d7398
0 ETH0.0012733512.83856643
Add215876572025-01-09 14:56:4735 hrs ago1736434607IN
0x52Ac424e...3280d7398
0 ETH0.0012566612.66875265
Add215876552025-01-09 14:56:2335 hrs ago1736434583IN
0x52Ac424e...3280d7398
0 ETH0.0013631713.74256492
Add215876492025-01-09 14:55:1135 hrs ago1736434511IN
0x52Ac424e...3280d7398
0 ETH0.0013938714.05197064
Add215876472025-01-09 14:54:4735 hrs ago1736434487IN
0x52Ac424e...3280d7398
0 ETH0.0014116614.23136784
Add215876462025-01-09 14:54:3535 hrs ago1736434475IN
0x52Ac424e...3280d7398
0 ETH0.0013672913.7840851
Add215876422025-01-09 14:53:3535 hrs ago1736434415IN
0x52Ac424e...3280d7398
0 ETH0.0012106212.20460028
Add215876392025-01-09 14:52:5935 hrs ago1736434379IN
0x52Ac424e...3280d7398
0 ETH0.0012912913.01785204
Add215745872025-01-07 19:09:233 days ago1736276963IN
0x52Ac424e...3280d7398
0 ETH0.0030531630.77973777
Add215153512024-12-30 12:40:2311 days ago1735562423IN
0x52Ac424e...3280d7398
0 ETH0.00058685.9157433
Add214942982024-12-27 14:09:2314 days ago1735308563IN
0x52Ac424e...3280d7398
0 ETH0.000724637.30524369
Add214516642024-12-21 15:05:1120 days ago1734793511IN
0x52Ac424e...3280d7398
0 ETH0.0009539.60745179
Add214153482024-12-16 13:22:2325 days ago1734355343IN
0x52Ac424e...3280d7398
0 ETH0.001308213.18831634
Add213965762024-12-13 22:28:4728 days ago1734128927IN
0x52Ac424e...3280d7398
0 ETH0.001382713.93942148
Add213950352024-12-13 17:18:4728 days ago1734110327IN
0x52Ac424e...3280d7398
0 ETH0.0026724626.94175866
Add213386022024-12-05 20:12:2336 days ago1733429543IN
0x52Ac424e...3280d7398
0 ETH0.003678837.08700339
Add213294792024-12-04 13:37:5937 days ago1733319479IN
0x52Ac424e...3280d7398
0 ETH0.0021880822.06134054
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

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

Contract Name:
AddressManager

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion
File 1 of 3 : AddressManager.sol
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.13;

import "@solmate/auth/Owned.sol";
import "@solmate/utils/ReentrancyGuard.sol";

/// @title AddressManager
/// @notice A contract that handles a whitelist of addresses and their indexes.
/// @dev We assume no more than 65535 addresses will be added to the directory.
contract AddressManager is Owned, ReentrancyGuard {
    event AddressAdded(address address_added);

    event AddressRemovedFromWhitelist(address address_removed);

    event AddressWhitelisted(address address_whitelisted);

    error AddressAlreadyAddedError(address _address);

    error AddressNotAddedError(address _address);

    mapping(address => uint16) private _directory;

    mapping(uint16 => address) private _inverseDirectory;

    mapping(address => bool) private _whitelist;

    uint16 private _lastAdded;

    constructor(address[] memory _original) Owned(msg.sender) {
        uint256 total = _original.length;
        for (uint256 i; i < total; ) {
            _add(_original[i]);
            unchecked {
                ++i;
            }
        }
    }

    /// @notice Adds an address to the directory. If it already exists,
    ///        reverts. It assumes it's whitelisted.
    function add(
        address _entry
    ) external onlyOwner nonReentrant returns (uint16) {
        return _add(_entry);
    }

    /// @notice Whitelist an address that's already part of the directory.
    function addToWhitelist(address _entry) external onlyOwner {
        if (_directory[_entry] == 0) {
            revert AddressNotAddedError(_entry);
        }
        _whitelist[_entry] = true;

        emit AddressWhitelisted(_entry);
    }

    /// @notice Removes an address from the whitelist. We still keep it
    ///         in the directory since this mapping is relevant across time.
    /// @param _entry The address to remove from the whitelist.
    function removeFromWhitelist(address _entry) external onlyOwner {
        _whitelist[_entry] = false;

        emit AddressRemovedFromWhitelist(_entry);
    }

    /// @param _address The address to get the index for.
    /// @return The index for a given address.
    function addressToIndex(address _address) external view returns (uint16) {
        return _directory[_address];
    }

    /// @param _index The index to get the address for.
    /// @return The address for a given index.
    function indexToAddress(uint16 _index) external view returns (address) {
        return _inverseDirectory[_index];
    }

    /// @param _entry The address to check if it's whitelisted.
    /// @return Whether the address is whitelisted or not.
    function isWhitelisted(address _entry) external view returns (bool) {
        return _whitelist[_entry];
    }

    function _add(address _entry) private returns (uint16) {
        if (_directory[_entry] != 0) {
            revert AddressAlreadyAddedError(_entry);
        }
        ++_lastAdded;
        _directory[_entry] = _lastAdded;
        _inverseDirectory[_lastAdded] = _entry;
        _whitelist[_entry] = true;

        emit AddressAdded(_entry);

        return _lastAdded;
    }
}

File 2 of 3 : Owned.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Simple single owner authorization mixin.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Owned.sol)
abstract contract Owned {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

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

    /*//////////////////////////////////////////////////////////////
                            OWNERSHIP STORAGE
    //////////////////////////////////////////////////////////////*/

    address public owner;

    modifier onlyOwner() virtual {
        require(msg.sender == owner, "UNAUTHORIZED");

        _;
    }

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(address _owner) {
        owner = _owner;

        emit OwnershipTransferred(address(0), _owner);
    }

    /*//////////////////////////////////////////////////////////////
                             OWNERSHIP LOGIC
    //////////////////////////////////////////////////////////////*/

    function transferOwnership(address newOwner) public virtual onlyOwner {
        owner = newOwner;

        emit OwnershipTransferred(msg.sender, newOwner);
    }
}

File 3 of 3 : ReentrancyGuard.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Gas optimized reentrancy protection for smart contracts.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/ReentrancyGuard.sol)
/// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/security/ReentrancyGuard.sol)
abstract contract ReentrancyGuard {
    uint256 private locked = 1;

    modifier nonReentrant() virtual {
        require(locked == 1, "REENTRANCY");

        locked = 2;

        _;

        locked = 1;
    }
}

Settings
{
  "remappings": [
    "@chainlink/=lib/chainlink/contracts/src/v0.8/",
    "@forge-std/=lib/forge-std/src/",
    "@manifoldxyz/=lib/v3/node_modules/@manifoldxyz/",
    "@openzeppelin/=lib/openzeppelin-contracts/contracts/",
    "@rari-capital/=lib/v3/node_modules/@rari-capital/",
    "@solmate/=lib/solmate/src/",
    "@zora/=lib/v3/contracts/",
    "chainlink/=lib/chainlink/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "openzeppelin/=lib/openzeppelin-contracts/contracts/",
    "solmate/=lib/solmate/src/",
    "test/=test/",
    "v3/=lib/v3/contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 2000
  },
  "metadata": {
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "viaIR": true,
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address[]","name":"_original","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"AddressAlreadyAddedError","type":"error"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"AddressNotAddedError","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"address_added","type":"address"}],"name":"AddressAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"address_removed","type":"address"}],"name":"AddressRemovedFromWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"address_whitelisted","type":"address"}],"name":"AddressWhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"_entry","type":"address"}],"name":"add","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_entry","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addressToIndex","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_index","type":"uint16"}],"name":"indexToAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_entry","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_entry","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

Deployed Bytecode

0x6040608081526004908136101561001557600080fd5b600091823560e01c80630a3b0a4f1461036e5780633af32abf146103205780638ab1d681146102a15780638da5cb5b1461026e578063d86cd42014610225578063e43252d71461015a578063f2fde38b146100c55763f667e0aa1461007957600080fd5b346100c15760206003193601126100c1573573ffffffffffffffffffffffffffffffffffffffff81168091036100c157818361ffff9260209552600285522054169051908152f35b8280fd5b838234610156576020600319360112610156573573ffffffffffffffffffffffffffffffffffffffff8082168092036100c1577fffffffffffffffffffffffff0000000000000000000000000000000000000000829161012a8554918216331461055a565b16178255337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b5080fd5b5090346100c15760206003193601126100c15781359173ffffffffffffffffffffffffffffffffffffffff8084168094036102215761019d90855416331461055a565b828452600260205261ffff8285205416156101f357916020917f4f783c179409b4127238bc9c990bc99b9a651666a0d20b51d6c42849eb88466d938286528352808520600160ff1982541617905551908152a180f35b8260249251917f442fdff3000000000000000000000000000000000000000000000000000000008352820152fd5b8480fd5b50346100c15760206003193601126100c1573561ffff81168091036100c157818373ffffffffffffffffffffffffffffffffffffffff9260209552600385522054169051908152f35b50503461015657816003193601126101565773ffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b5090346100c15760206003193601126100c157813573ffffffffffffffffffffffffffffffffffffffff91828216809203610221577f535611fb62fa2a833988f283b779e417e996813e44046f521d76c17b5943b08c93610308602094875416331461055a565b828652835280852060ff19815416905551908152a180f35b50346100c15760206003193601126100c157803573ffffffffffffffffffffffffffffffffffffffff811680910361036a578360ff92849260209652855220541690519015158152f35b8380fd5b5091903461015657602092836003193601126100c157803573ffffffffffffffffffffffffffffffffffffffff808216809203610221576103b390855416331461055a565b600193848054036104fe57600285558181526002865261ffff928385832054166104cf576005548481168581146104a357927fa226db3f664042183ee0281230bba26cbf7b5057e50aee7f25a175ff45ce4d7f94928792878a8c970116807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00008093161760055585845260028752848420918254161790558660055416825260038552828220847fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790558382528452208660ff198254161790558451908152a16005541691805551908152f35b6024846011857f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b602490838651917ffa4b50ed000000000000000000000000000000000000000000000000000000008352820152fd5b606483878651917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600a60248201527f5245454e5452414e4359000000000000000000000000000000000000000000006044820152fd5b1561056157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152fdfea26469706673582212206b52698d2d6d451a6627166099b26dde0e68857fefdbfa82e1c4af486a5ed69d64736f6c63430008130033

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  ]

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.