false
false
0
The new Blockscout UI is now open source! Learn how to deploy it here
- We're indexing this chain right now. Some of the counts may be inaccurate.

Contract Address Details

0x09eb271b444d1db7163c8555919dE85b20Be7D1d

Contract Name
WhitelistRegistry
Creator
0x077675–fb67cc at 0xdb0269–b4f81e
Balance
0 ETH
Tokens
Fetching tokens...
Transactions
Fetching transactions...
Transfers
Fetching transfers...
Gas Used
Fetching gas used...
Last Balance Update
3526071
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
WhitelistRegistry




Optimization enabled
true
Compiler version
v0.8.12+commit.f00d7308




Optimization runs
10
EVM Version
london




Verified at
2024-06-07T13:16:48.586949Z

contracts/WhitelistRegistry.sol

// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.12;
import "./interfaces/IWhitelistRegistry.sol";

contract WhitelistRegistry is IWhitelistRegistry {
    /**
     * @dev info, per address, of permissions. 0 = no permissions, 1 = whitelisted. This is only relevant for vaults with whitelists.
     */
    mapping(address => mapping(address => uint256)) public permissions;

    mapping(address => address) public whitelistManagers;

    /**
     * @dev add whitelist permissions for any number of addresses.
     * @param _vaultAddress the vault whose whitelist will be edited
     * @param _addresses the addresses to be added to the whitelist
     */
    function addPermissions(
        address _vaultAddress,
        address[] calldata _addresses
    ) external {
        // Make sure caller is authorized
        require(
            msg.sender == whitelistManagers[_vaultAddress],
            "Only Whitelist Manager"
        );
        mapping(address => uint256) storage _permissions = permissions[
            _vaultAddress
        ];
        // Add permissions
        uint256 addressCount = _addresses.length;
        for (uint256 i; i != addressCount; ++i) {
            _permissions[_addresses[i]] = 1;
        }
        emit PermissionsAdded(msg.sender, _vaultAddress, _addresses);
    }

    /**
     * @dev function meant to be called by contracts (usually in initializer) to register a whitelist manager for that contract
     * @param manager the address of the vault's whitelist manager
     * No access control, since any given contract can only modify their own data here.
     */
    function registerWhitelistManager(address manager) external {
        whitelistManagers[msg.sender] = manager;
        emit ManagerAdded(msg.sender, manager);
    }

    /**
     * @dev add whitelist permissions for any number of addresses.
     * @param _vaultAddress the vault whose whitelist will be edited
     * @param _addresses the addresses to be removed from the whitelist
     */
    function revokePermissions(
        address _vaultAddress,
        address[] calldata _addresses
    ) external {
        // Make sure caller is authorized
        require(
            msg.sender == whitelistManagers[_vaultAddress],
            "Only Whitelist Manager"
        );

        mapping(address => uint256) storage _permissions = permissions[
            _vaultAddress
        ];
        // Add permissions
        uint256 addressCount = _addresses.length;
        for (uint256 i; i != addressCount; ++i) {
            _permissions[_addresses[i]] = 0;
        }
        emit PermissionsRemoved(msg.sender, _vaultAddress, _addresses);
    }
}
        

contracts/interfaces/IWhitelistRegistry.sol

// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.12;

interface IWhitelistRegistry {
    event PermissionsAdded(
        address whitelistManager,
        address vault,
        address[] addressesAdded
    );
    event PermissionsRemoved(
        address whitelistManager,
        address vault,
        address[] addressesRemoved
    );
    event ManagerAdded(address vaultAddress, address manager);

    function addPermissions(
        address _vaultAddress,
        address[] calldata _addresses
    ) external;

    function registerWhitelistManager(address manager) external;

    function revokePermissions(
        address _vaultAddress,
        address[] calldata _addresses
    ) external;
}
          

Compiler Settings

{"outputSelection":{"*":{"*":["*"],"":["*"]}},"optimizer":{"runs":10,"enabled":true},"metadata":{"useLiteralContent":true,"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"london"}
              

Contract ABI

[{"type":"event","name":"ManagerAdded","inputs":[{"type":"address","name":"vaultAddress","internalType":"address","indexed":false},{"type":"address","name":"manager","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"PermissionsAdded","inputs":[{"type":"address","name":"whitelistManager","internalType":"address","indexed":false},{"type":"address","name":"vault","internalType":"address","indexed":false},{"type":"address[]","name":"addressesAdded","internalType":"address[]","indexed":false}],"anonymous":false},{"type":"event","name":"PermissionsRemoved","inputs":[{"type":"address","name":"whitelistManager","internalType":"address","indexed":false},{"type":"address","name":"vault","internalType":"address","indexed":false},{"type":"address[]","name":"addressesRemoved","internalType":"address[]","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addPermissions","inputs":[{"type":"address","name":"_vaultAddress","internalType":"address"},{"type":"address[]","name":"_addresses","internalType":"address[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"permissions","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"registerWhitelistManager","inputs":[{"type":"address","name":"manager","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"revokePermissions","inputs":[{"type":"address","name":"_vaultAddress","internalType":"address"},{"type":"address[]","name":"_addresses","internalType":"address[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"whitelistManagers","inputs":[{"type":"address","name":"","internalType":"address"}]}]
              

Contract Creation Code

0x608060405234801561001057600080fd5b50610561806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630773e6ba1461005c5780631f9838b51461007157806331e8e0a2146100ac57806380300623146100ed578063ed316ad914610100575b600080fd5b61006f61006a36600461037d565b610113565b005b61009961007f366004610402565b600060208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b6100d56100ba366004610435565b6001602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016100a3565b61006f6100fb36600461037d565b610213565b61006f61010e366004610435565b6102fb565b6001600160a01b038381166000908152600160205260409020541633146101555760405162461bcd60e51b815260040161014c90610457565b60405180910390fd5b6001600160a01b03831660009081526020819052604081209082905b8181146101ce57600183600087878581811061018f5761018f610487565b90506020020160208101906101a49190610435565b6001600160a01b031681526020810191909152604001600020556101c78161049d565b9050610171565b507fd5ae75a4db3730e774830e7c64b00258bd9b241c6042829e01eeb1596ccd200b3386868660405161020494939291906104c6565b60405180910390a15050505050565b6001600160a01b0383811660009081526001602052604090205416331461024c5760405162461bcd60e51b815260040161014c90610457565b6001600160a01b03831660009081526020819052604081209082905b8181146102c557600083600087878581811061028657610286610487565b905060200201602081019061029b9190610435565b6001600160a01b031681526020810191909152604001600020556102be8161049d565b9050610268565b507ffa59fdd7b076c65cfaf469a2ad3da44044ca6a834b1d4f536a09c6bbdfefff083386868660405161020494939291906104c6565b3360008181526001602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f05a4006f300442cf8b7fdb885f5ee958812020bffb5c5a8e655fde64e5f987ed910160405180910390a150565b80356001600160a01b038116811461037857600080fd5b919050565b60008060006040848603121561039257600080fd5b61039b84610361565b925060208401356001600160401b03808211156103b757600080fd5b818601915086601f8301126103cb57600080fd5b8135818111156103da57600080fd5b8760208260051b85010111156103ef57600080fd5b6020830194508093505050509250925092565b6000806040838503121561041557600080fd5b61041e83610361565b915061042c60208401610361565b90509250929050565b60006020828403121561044757600080fd5b61045082610361565b9392505050565b60208082526016908201527527b7363c902bb434ba32b634b9ba1026b0b730b3b2b960511b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156104bf57634e487b7160e01b600052601160045260246000fd5b5060010190565b6001600160a01b0385811682528481166020808401919091526060604084018190528301849052600091859160808501845b8781101561051d578361050a86610361565b16825293820193908201906001016104f8565b50999850505050505050505056fea2646970667358221220456a474e9225754a7063d53e5803643ebab3da13bf39335fa7cca59b0b4c888564736f6c634300080c0033

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106100575760003560e01c80630773e6ba1461005c5780631f9838b51461007157806331e8e0a2146100ac57806380300623146100ed578063ed316ad914610100575b600080fd5b61006f61006a36600461037d565b610113565b005b61009961007f366004610402565b600060208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b6100d56100ba366004610435565b6001602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016100a3565b61006f6100fb36600461037d565b610213565b61006f61010e366004610435565b6102fb565b6001600160a01b038381166000908152600160205260409020541633146101555760405162461bcd60e51b815260040161014c90610457565b60405180910390fd5b6001600160a01b03831660009081526020819052604081209082905b8181146101ce57600183600087878581811061018f5761018f610487565b90506020020160208101906101a49190610435565b6001600160a01b031681526020810191909152604001600020556101c78161049d565b9050610171565b507fd5ae75a4db3730e774830e7c64b00258bd9b241c6042829e01eeb1596ccd200b3386868660405161020494939291906104c6565b60405180910390a15050505050565b6001600160a01b0383811660009081526001602052604090205416331461024c5760405162461bcd60e51b815260040161014c90610457565b6001600160a01b03831660009081526020819052604081209082905b8181146102c557600083600087878581811061028657610286610487565b905060200201602081019061029b9190610435565b6001600160a01b031681526020810191909152604001600020556102be8161049d565b9050610268565b507ffa59fdd7b076c65cfaf469a2ad3da44044ca6a834b1d4f536a09c6bbdfefff083386868660405161020494939291906104c6565b3360008181526001602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f05a4006f300442cf8b7fdb885f5ee958812020bffb5c5a8e655fde64e5f987ed910160405180910390a150565b80356001600160a01b038116811461037857600080fd5b919050565b60008060006040848603121561039257600080fd5b61039b84610361565b925060208401356001600160401b03808211156103b757600080fd5b818601915086601f8301126103cb57600080fd5b8135818111156103da57600080fd5b8760208260051b85010111156103ef57600080fd5b6020830194508093505050509250925092565b6000806040838503121561041557600080fd5b61041e83610361565b915061042c60208401610361565b90509250929050565b60006020828403121561044757600080fd5b61045082610361565b9392505050565b60208082526016908201527527b7363c902bb434ba32b634b9ba1026b0b730b3b2b960511b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156104bf57634e487b7160e01b600052601160045260246000fd5b5060010190565b6001600160a01b0385811682528481166020808401919091526060604084018190528301849052600091859160808501845b8781101561051d578361050a86610361565b16825293820193908201906001016104f8565b50999850505050505050505056fea2646970667358221220456a474e9225754a7063d53e5803643ebab3da13bf39335fa7cca59b0b4c888564736f6c634300080c0033