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