ETH Price: $2,913.80 (+2.66%)

Contract

0x5D69F14Ec723570F69dd9b844Fe31EBCc6faf41E

Overview

ETH Balance

0 ETH

ETH Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Advanced mode:
Parent Transaction Hash Block From To
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Whitelist

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 1 runs

Other Settings:
cancun EvmVersion
// SPDX-License-Identifier: GPL-3.0
// Docgen-SOLC: 0.8.25

pragma solidity ^0.8.24;

import {Owned} from "./Owned.sol";
import {IWhitelist} from "../Interfaces/IWhitelist.sol";

contract Whitelist is IWhitelist, Owned {
    // calling contract -> user -> whitelisted
    mapping(address => mapping(address => bool)) whitelist;

    event Whitelisted(address callingContract, address user);
    event WhitelistRemoved(address callingContract, address user);

    constructor(address owner) Owned(owner) {}

    function addToWhitelist(address callingContract, address user) external override onlyOwner {
        whitelist[callingContract][user] = true;

        emit Whitelisted(callingContract, user);
    }

    function removeFromWhitelist(address callingContract, address user) external override onlyOwner {
        whitelist[callingContract][user] = false;

        emit WhitelistRemoved(callingContract, user);
    }

    function isWhitelisted(address callingContract, address user) external view override returns (bool) {
        return whitelist[callingContract][user];
    }
}

// SPDX-License-Identifier: GPL-3.0
// Docgen-SOLC: 0.8.25

pragma solidity 0.8.24;

import "../Interfaces/IOwned.sol";

// https://docs.synthetix.io/contracts/source/contracts/owned
contract Owned is IOwned {
    address public override owner;
    address public override nominatedOwner;

    event OwnerNominated(address newOwner);
    event OwnerChanged(address oldOwner, address newOwner);

    constructor(address _owner) {
        require(_owner != address(0), "Owned/owner-zero");
        owner = _owner;

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

    function nominateNewOwner(address _owner) external virtual override onlyOwner {
        nominatedOwner = _owner;

        emit OwnerNominated(_owner);
    }

    function acceptOwnership() external virtual override {
        require(msg.sender == nominatedOwner, "Owned/not-nominated");

        emit OwnerChanged(owner, nominatedOwner);

        owner = nominatedOwner;
        nominatedOwner = address(0);
    }

    modifier onlyOwner() {
        _onlyOwner();
        _;
    }

    function _onlyOwner() private view {
        require(msg.sender == owner, "Owned/not-owner");
    }
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IOwned {
    function owner() external view returns (address);

    function nominatedOwner() external view returns (address);

    function nominateNewOwner(address owner) external;

    function acceptOwnership() external;
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IWhitelist {
    function addToWhitelist(address callingContract, address user) external;
    function removeFromWhitelist(address callingContract, address user) external;
    function isWhitelisted(address callingContract, address user) external view returns (bool);
}

Settings
{
  "evmVersion": "cancun",
  "libraries": {},
  "metadata": {
    "appendCBOR": true,
    "bytecodeHash": "ipfs",
    "useLiteralContent": false
  },
  "optimizer": {
    "enabled": true,
    "runs": 1
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "remappings": [
    "openzeppelin/=lib/V2-gov/lib/openzeppelin-contracts/",
    "@chimera/=lib/V2-gov/lib/chimera/src/",
    "@openzeppelin/contracts/=lib/V2-gov/lib/openzeppelin-contracts/contracts/",
    "Solady/=lib/Solady/src/",
    "V2-gov/=lib/V2-gov/",
    "chimera/=lib/V2-gov/lib/chimera/src/",
    "ds-test/=lib/openzeppelin-contracts/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/",
    "v4-core/=lib/V2-gov/lib/v4-core/"
  ],
  "viaIR": false
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"callingContract","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"WhitelistRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"callingContract","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"Whitelisted","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"callingContract","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"callingContract","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"nominateNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nominatedOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"callingContract","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561000f575f80fd5b5060405161056638038061056683398101604081905261002e916100d9565b806001600160a01b03811661007c5760405162461bcd60e51b815260206004820152601060248201526f4f776e65642f6f776e65722d7a65726f60801b604482015260640160405180910390fd5b5f80546001600160a01b0319166001600160a01b03831690811782556040805192835260208301919091527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a15050610106565b5f602082840312156100e9575f80fd5b81516001600160a01b03811681146100ff575f80fd5b9392505050565b610453806101135f395ff3fe608060405234801561000f575f80fd5b506004361061006b575f3560e01c80631627540c1461006f57806353a47bb71461008457806357518243146100ad57806379ba5097146100c05780638da5cb5b146100c8578063b6b35272146100da578063f8d3277d14610125575b5f80fd5b61008261007d36600461039e565b610138565b005b600154610097906001600160a01b031681565b6040516100a491906103be565b60405180910390f35b6100826100bb3660046103d2565b610196565b61008261020b565b5f54610097906001600160a01b031681565b6101156100e83660046103d2565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205460ff1690565b60405190151581526020016100a4565b6100826101333660046103d2565b6102d0565b610140610336565b600180546001600160a01b0319166001600160a01b0383161790556040517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce229061018b9083906103be565b60405180910390a150565b61019e610336565b6001600160a01b038083165f9081526002602090815260408083209385168352929052819020805460ff19166001179055517f6661a7108aecd07864384529117d96c319c1163e3010c01390f6b704726e07de906101ff9084908490610403565b60405180910390a15050565b6001546001600160a01b031633146102605760405162461bcd60e51b815260206004820152601360248201527213dddb99590bdb9bdd0b5b9bdb5a5b985d1959606a1b60448201526064015b60405180910390fd5b5f546001546040517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c926102a2926001600160a01b0391821692911690610403565b60405180910390a1600180545f80546001600160a01b03199081166001600160a01b03841617909155169055565b6102d8610336565b6001600160a01b038083165f9081526002602090815260408083209385168352929052819020805460ff19169055517fe0fcf303ba3014f7bddb92283585b57ae29a68f05ceb43d0a0c1b92ad80c613c906101ff9084908490610403565b5f546001600160a01b031633146103815760405162461bcd60e51b815260206004820152600f60248201526e27bbb732b217b737ba16b7bbb732b960891b6044820152606401610257565b565b80356001600160a01b0381168114610399575f80fd5b919050565b5f602082840312156103ae575f80fd5b6103b782610383565b9392505050565b6001600160a01b0391909116815260200190565b5f80604083850312156103e3575f80fd5b6103ec83610383565b91506103fa60208401610383565b90509250929050565b6001600160a01b039283168152911660208201526040019056fea2646970667358221220d435861b40525c5f81abaa21a04df31f5da579ddd54ec987d488c7bae10ede4d64736f6c63430008180033000000000000000000000000919d5a6f2cbc0731380c26b4ac4f6183dd3a40c8

Deployed Bytecode

0x608060405234801561000f575f80fd5b506004361061006b575f3560e01c80631627540c1461006f57806353a47bb71461008457806357518243146100ad57806379ba5097146100c05780638da5cb5b146100c8578063b6b35272146100da578063f8d3277d14610125575b5f80fd5b61008261007d36600461039e565b610138565b005b600154610097906001600160a01b031681565b6040516100a491906103be565b60405180910390f35b6100826100bb3660046103d2565b610196565b61008261020b565b5f54610097906001600160a01b031681565b6101156100e83660046103d2565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205460ff1690565b60405190151581526020016100a4565b6100826101333660046103d2565b6102d0565b610140610336565b600180546001600160a01b0319166001600160a01b0383161790556040517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce229061018b9083906103be565b60405180910390a150565b61019e610336565b6001600160a01b038083165f9081526002602090815260408083209385168352929052819020805460ff19166001179055517f6661a7108aecd07864384529117d96c319c1163e3010c01390f6b704726e07de906101ff9084908490610403565b60405180910390a15050565b6001546001600160a01b031633146102605760405162461bcd60e51b815260206004820152601360248201527213dddb99590bdb9bdd0b5b9bdb5a5b985d1959606a1b60448201526064015b60405180910390fd5b5f546001546040517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c926102a2926001600160a01b0391821692911690610403565b60405180910390a1600180545f80546001600160a01b03199081166001600160a01b03841617909155169055565b6102d8610336565b6001600160a01b038083165f9081526002602090815260408083209385168352929052819020805460ff19169055517fe0fcf303ba3014f7bddb92283585b57ae29a68f05ceb43d0a0c1b92ad80c613c906101ff9084908490610403565b5f546001600160a01b031633146103815760405162461bcd60e51b815260206004820152600f60248201526e27bbb732b217b737ba16b7bbb732b960891b6044820152606401610257565b565b80356001600160a01b0381168114610399575f80fd5b919050565b5f602082840312156103ae575f80fd5b6103b782610383565b9392505050565b6001600160a01b0391909116815260200190565b5f80604083850312156103e3575f80fd5b6103ec83610383565b91506103fa60208401610383565b90509250929050565b6001600160a01b039283168152911660208201526040019056fea2646970667358221220d435861b40525c5f81abaa21a04df31f5da579ddd54ec987d488c7bae10ede4d64736f6c63430008180033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000919d5a6f2cbc0731380c26b4ac4f6183dd3a40c8

-----Decoded View---------------
Arg [0] : owner (address): 0x919D5a6F2CBc0731380C26B4AC4f6183dD3A40C8

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000919d5a6f2cbc0731380c26b4ac4f6183dd3a40c8


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

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.