Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
AdminACLV0
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 25 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; import "./interfaces/0.8.x/IAdminACLV0.sol"; import "@openzeppelin-4.7/contracts/access/Ownable.sol"; import "@openzeppelin-4.7/contracts/utils/introspection/ERC165.sol"; /** * @title Admin ACL contract, V0. * @author Art Blocks Inc. * @notice Privileged Roles and Ownership: * This contract has a single superAdmin that passes all ACL checks. All checks * for any other address will return false. * The superAdmin can be changed by the current superAdmin. * Care must be taken to ensure that the admin ACL contract is secure behind a * multi-sig or other secure access control mechanism. */ contract AdminACLV0 is IAdminACLV0, ERC165 { string public AdminACLType = "AdminACLV0"; /// superAdmin is the only address that passes any and all ACL checks address public superAdmin; constructor() { superAdmin = msg.sender; } /** * @notice Allows superAdmin change the superAdmin address. * @param _newSuperAdmin The new superAdmin address. * @param _genArt721CoreAddressesToUpdate Array of genArt721Core * addresses to update to the new superAdmin, for indexing purposes only. * @dev this function is gated to only superAdmin address. */ function changeSuperAdmin( address _newSuperAdmin, address[] calldata _genArt721CoreAddressesToUpdate ) external { require(msg.sender == superAdmin, "Only superAdmin"); address previousSuperAdmin = superAdmin; superAdmin = _newSuperAdmin; emit SuperAdminTransferred( previousSuperAdmin, _newSuperAdmin, _genArt721CoreAddressesToUpdate ); } /** * Calls transferOwnership on other contract from this contract. * This is useful for updating to a new AdminACL contract. * @dev this function is gated to only superAdmin address. * @dev This implementation requires that the new AdminACL contract * broadcasts support of IAdminACLV0 via ERC165 interface detection. */ function transferOwnershipOn(address _contract, address _newAdminACL) external { require(msg.sender == superAdmin, "Only superAdmin"); // ensure new AdminACL contract supports IAdminACLV0 require( ERC165(_newAdminACL).supportsInterface( type(IAdminACLV0).interfaceId ), "AdminACLV0: new admin ACL does not support IAdminACLV0" ); Ownable(_contract).transferOwnership(_newAdminACL); } /** * @notice Calls renounceOwnership on other contract from this contract. * @dev this function is gated to only superAdmin address. */ function renounceOwnershipOn(address _contract) external { require(msg.sender == superAdmin, "Only superAdmin"); Ownable(_contract).renounceOwnership(); } /** * @notice Checks if sender `_sender` is allowed to call function with selector * `_selector` on contract `_contract`. Returns true if sender is superAdmin. */ function allowed( address _sender, address, /*_contract*/ bytes4 /*_selector*/ ) external view returns (bool) { return superAdmin == _sender; } /** * @inheritdoc ERC165 */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165) returns (bool) { return interfaceId == type(IAdminACLV0).interfaceId || super.supportsInterface(interfaceId); } }
// SPDX-License-Identifier: LGPL-3.0-only // Created By: Art Blocks Inc. pragma solidity ^0.8.0; interface IAdminACLV0 { /** * @notice Token ID `_tokenId` minted to `_to`. * @param previousSuperAdmin The previous superAdmin address. * @param newSuperAdmin The new superAdmin address. * @param genArt721CoreAddressesToUpdate Array of genArt721Core * addresses to update to the new superAdmin, for indexing purposes only. */ event SuperAdminTransferred( address indexed previousSuperAdmin, address indexed newSuperAdmin, address[] genArt721CoreAddressesToUpdate ); /// Type of the Admin ACL contract, e.g. "AdminACLV0" function AdminACLType() external view returns (string memory); /// super admin address function superAdmin() external view returns (address); /** * @notice Calls transferOwnership on other contract from this contract. * This is useful for updating to a new AdminACL contract. * @dev this function should be gated to only superAdmin-like addresses. */ function transferOwnershipOn(address _contract, address _newAdminACL) external; /** * @notice Calls renounceOwnership on other contract from this contract. * @dev this function should be gated to only superAdmin-like addresses. */ function renounceOwnershipOn(address _contract) external; /** * @notice Checks if sender `_sender` is allowed to call function with selector * `_selector` on contract `_contract`. */ function allowed( address _sender, address _contract, bytes4 _selector ) external returns (bool); }
// 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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// 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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": true, "runs": 25 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousSuperAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newSuperAdmin","type":"address"},{"indexed":false,"internalType":"address[]","name":"genArt721CoreAddressesToUpdate","type":"address[]"}],"name":"SuperAdminTransferred","type":"event"},{"inputs":[],"name":"AdminACLType","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"allowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newSuperAdmin","type":"address"},{"internalType":"address[]","name":"_genArt721CoreAddressesToUpdate","type":"address[]"}],"name":"changeSuperAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"renounceOwnershipOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"superAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"address","name":"_newAdminACL","type":"address"}],"name":"transferOwnershipOn","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c0604052600a608090815269041646d696e41434c56360b41b60a05260009061002990826100ed565b5034801561003657600080fd5b50600180546001600160a01b031916331790556101ac565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061007857607f821691505b60208210810361009857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156100e857600081815260208120601f850160051c810160208610156100c55750805b601f850160051c820191505b818110156100e4578281556001016100d1565b5050505b505050565b81516001600160401b038111156101065761010661004e565b61011a816101148454610064565b8461009e565b602080601f83116001811461014f57600084156101375750858301515b600019600386901b1c1916600185901b1785556100e4565b600085815260208120601f198616915b8281101561017e5788860151825594840194600190910190840161015f565b508582101561019c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610747806101bb6000396000f3fe608060405234801561001057600080fd5b506004361061006d5760003560e01c806301ffc9a71461007257806305de62c01461009a57806329575f6a146100be578063377a7d1a146100de578063985d1968146100f3578063bcc91a1014610106578063c81a396e14610119575b600080fd5b61008561008036600461048e565b61012e565b60405190151581526020015b60405180910390f35b6100856100a83660046104c7565b50506001546001600160a01b0391821691161490565b6001546100d1906001600160a01b031681565b604051610091919061050a565b6100f16100ec36600461051e565b610165565b005b6100f16101013660046105a4565b6101fd565b6100f16101143660046105bf565b61027d565b6101216103e3565b60405161009191906105f2565b60006001600160e01b03198216633001c1ef60e21b148061015f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001546001600160a01b031633146101985760405162461bcd60e51b815260040161018f90610640565b60405180910390fd5b600180546001600160a01b038581166001600160a01b0319831681179093556040519116919082907f3f6845104f9728af7979eed8814320daba008953c8db93b9fe32602d1f34b475906101ef9087908790610669565b60405180910390a350505050565b6001546001600160a01b031633146102275760405162461bcd60e51b815260040161018f90610640565b806001600160a01b031663715018a66040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561026257600080fd5b505af1158015610276573d6000803e3d6000fd5b5050505050565b6001546001600160a01b031633146102a75760405162461bcd60e51b815260040161018f90610640565b6040516301ffc9a760e01b8152633001c1ef60e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156102f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031691906106b5565b6103815760405162461bcd60e51b815260206004820152603660248201527f41646d696e41434c56303a206e65772061646d696e2041434c20646f6573206e60448201527506f7420737570706f7274204941646d696e41434c56360541b606482015260840161018f565b60405163f2fde38b60e01b81526001600160a01b0383169063f2fde38b906103ad90849060040161050a565b600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505050565b600080546103f0906106d7565b80601f016020809104026020016040519081016040528092919081815260200182805461041c906106d7565b80156104695780601f1061043e57610100808354040283529160200191610469565b820191906000526020600020905b81548152906001019060200180831161044c57829003601f168201915b505050505081565b80356001600160e01b03198116811461048957600080fd5b919050565b6000602082840312156104a057600080fd5b6104a982610471565b9392505050565b80356001600160a01b038116811461048957600080fd5b6000806000606084860312156104dc57600080fd5b6104e5846104b0565b92506104f3602085016104b0565b915061050160408501610471565b90509250925092565b6001600160a01b0391909116815260200190565b60008060006040848603121561053357600080fd5b61053c846104b0565b9250602084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057c57600080fd5b8760208260051b850101111561059157600080fd5b6020830194508093505050509250925092565b6000602082840312156105b657600080fd5b6104a9826104b0565b600080604083850312156105d257600080fd5b6105db836104b0565b91506105e9602084016104b0565b90509250929050565b600060208083528351808285015260005b8181101561061f57858101830151858201604001528201610603565b506000604082860101526040601f19601f8301168501019250505092915050565b6020808252600f908201526e27b7363c9039bab832b920b236b4b760891b604082015260600190565b60208082528181018390526000908460408401835b868110156106aa576001600160a01b03610697846104b0565b168252918301919083019060010161067e565b509695505050505050565b6000602082840312156106c757600080fd5b815180151581146104a957600080fd5b600181811c908216806106eb57607f821691505b60208210810361070b57634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220899acb856082b0cc64c04e5933547dd482fcfe33cc537cda679c1460809939bc64736f6c63430008110033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061006d5760003560e01c806301ffc9a71461007257806305de62c01461009a57806329575f6a146100be578063377a7d1a146100de578063985d1968146100f3578063bcc91a1014610106578063c81a396e14610119575b600080fd5b61008561008036600461048e565b61012e565b60405190151581526020015b60405180910390f35b6100856100a83660046104c7565b50506001546001600160a01b0391821691161490565b6001546100d1906001600160a01b031681565b604051610091919061050a565b6100f16100ec36600461051e565b610165565b005b6100f16101013660046105a4565b6101fd565b6100f16101143660046105bf565b61027d565b6101216103e3565b60405161009191906105f2565b60006001600160e01b03198216633001c1ef60e21b148061015f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001546001600160a01b031633146101985760405162461bcd60e51b815260040161018f90610640565b60405180910390fd5b600180546001600160a01b038581166001600160a01b0319831681179093556040519116919082907f3f6845104f9728af7979eed8814320daba008953c8db93b9fe32602d1f34b475906101ef9087908790610669565b60405180910390a350505050565b6001546001600160a01b031633146102275760405162461bcd60e51b815260040161018f90610640565b806001600160a01b031663715018a66040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561026257600080fd5b505af1158015610276573d6000803e3d6000fd5b5050505050565b6001546001600160a01b031633146102a75760405162461bcd60e51b815260040161018f90610640565b6040516301ffc9a760e01b8152633001c1ef60e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156102f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031691906106b5565b6103815760405162461bcd60e51b815260206004820152603660248201527f41646d696e41434c56303a206e65772061646d696e2041434c20646f6573206e60448201527506f7420737570706f7274204941646d696e41434c56360541b606482015260840161018f565b60405163f2fde38b60e01b81526001600160a01b0383169063f2fde38b906103ad90849060040161050a565b600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505050565b600080546103f0906106d7565b80601f016020809104026020016040519081016040528092919081815260200182805461041c906106d7565b80156104695780601f1061043e57610100808354040283529160200191610469565b820191906000526020600020905b81548152906001019060200180831161044c57829003601f168201915b505050505081565b80356001600160e01b03198116811461048957600080fd5b919050565b6000602082840312156104a057600080fd5b6104a982610471565b9392505050565b80356001600160a01b038116811461048957600080fd5b6000806000606084860312156104dc57600080fd5b6104e5846104b0565b92506104f3602085016104b0565b915061050160408501610471565b90509250925092565b6001600160a01b0391909116815260200190565b60008060006040848603121561053357600080fd5b61053c846104b0565b9250602084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057c57600080fd5b8760208260051b850101111561059157600080fd5b6020830194508093505050509250925092565b6000602082840312156105b657600080fd5b6104a9826104b0565b600080604083850312156105d257600080fd5b6105db836104b0565b91506105e9602084016104b0565b90509250929050565b600060208083528351808285015260005b8181101561061f57858101830151858201604001528201610603565b506000604082860101526040601f19601f8301168501019250505092915050565b6020808252600f908201526e27b7363c9039bab832b920b236b4b760891b604082015260600190565b60208082528181018390526000908460408401835b868110156106aa576001600160a01b03610697846104b0565b168252918301919083019060010161067e565b509695505050505050565b6000602082840312156106c757600080fd5b815180151581146104a957600080fd5b600181811c908216806106eb57607f821691505b60208210810361070b57634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220899acb856082b0cc64c04e5933547dd482fcfe33cc537cda679c1460809939bc64736f6c63430008110033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.