Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
0x60c06040 | 19863500 | 336 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
AdminACLV0
Compiler Version
v0.8.22+commit.4fc1097e
Optimization Enabled:
Yes with 10 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.22; import "./interfaces/v0.8.x/IAdminACLV0.sol"; import {IAdminACLV0_Extended} from "./interfaces/v0.8.x/IAdminACLV0_Extended.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, IAdminACLV0_Extended, 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 || // @dev IAdminACLV0_Extended added after original deployments, so do not rely on it // being present in all AdminACLV0 contracts. interfaceId == type(IAdminACLV0_Extended).interfaceId || super.supportsInterface(interfaceId); } }
// 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/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/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/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); }
// SPDX-License-Identifier: LGPL-3.0-only // Created By: Art Blocks Inc. pragma solidity ^0.8.0; import "./IAdminACLV0.sol"; interface IAdminACLV0_Extended is IAdminACLV0 { /** * @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; }
// 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); }
{ "optimizer": { "enabled": true, "runs": 10 }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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
60c0604052600a608090815269041646d696e41434c56360b41b60a05260009061002990826100ef565b5034801561003657600080fd5b50600180546001600160a01b031916331790556101ae565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061007857607f821691505b60208210810361009857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156100ea576000816000526020600020601f850160051c810160208610156100c75750805b601f850160051c820191505b818110156100e6578281556001016100d3565b5050505b505050565b81516001600160401b038111156101085761010861004e565b61011c816101168454610064565b8461009e565b602080601f83116001811461015157600084156101395750858301515b600019600386901b1c1916600185901b1785556100e6565b600085815260208120601f198616915b8281101561018057888601518255948401946001909101908401610161565b508582101561019e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610762806101bd6000396000f3fe608060405234801561001057600080fd5b506004361061006d5760003560e01c806301ffc9a71461007257806305de62c01461009a57806329575f6a146100be578063377a7d1a146100de578063985d1968146100f3578063bcc91a1014610106578063c81a396e14610119575b600080fd5b6100856100803660046104a9565b61012e565b60405190151581526020015b60405180910390f35b6100856100a83660046104e2565b50506001546001600160a01b0391821691161490565b6001546100d1906001600160a01b031681565b6040516100919190610525565b6100f16100ec366004610539565b610180565b005b6100f16101013660046105be565b610218565b6100f16101143660046105d9565b610298565b6101216103fe565b604051610091919061060c565b60006001600160e01b03198216633001c1ef60e21b148061015f57506001600160e01b03198216631bbd3e8d60e11b145b8061017a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001546001600160a01b031633146101b35760405162461bcd60e51b81526004016101aa9061065b565b60405180910390fd5b600180546001600160a01b038581166001600160a01b0319831681179093556040519116919082907f3f6845104f9728af7979eed8814320daba008953c8db93b9fe32602d1f34b4759061020a9087908790610684565b60405180910390a350505050565b6001546001600160a01b031633146102425760405162461bcd60e51b81526004016101aa9061065b565b806001600160a01b031663715018a66040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561027d57600080fd5b505af1158015610291573d6000803e3d6000fd5b5050505050565b6001546001600160a01b031633146102c25760405162461bcd60e51b81526004016101aa9061065b565b6040516301ffc9a760e01b8152633001c1ef60e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801561030d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033191906106d0565b61039c5760405162461bcd60e51b815260206004820152603660248201527f41646d696e41434c56303a206e65772061646d696e2041434c20646f6573206e60448201527506f7420737570706f7274204941646d696e41434c56360541b60648201526084016101aa565b60405163f2fde38b60e01b81526001600160a01b0383169063f2fde38b906103c8908490600401610525565b600060405180830381600087803b1580156103e257600080fd5b505af11580156103f6573d6000803e3d6000fd5b505050505050565b6000805461040b906106f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610437906106f2565b80156104845780601f1061045957610100808354040283529160200191610484565b820191906000526020600020905b81548152906001019060200180831161046757829003601f168201915b505050505081565b80356001600160e01b0319811681146104a457600080fd5b919050565b6000602082840312156104bb57600080fd5b6104c48261048c565b9392505050565b80356001600160a01b03811681146104a457600080fd5b6000806000606084860312156104f757600080fd5b610500846104cb565b925061050e602085016104cb565b915061051c6040850161048c565b90509250925092565b6001600160a01b0391909116815260200190565b60008060006040848603121561054e57600080fd5b610557846104cb565b925060208401356001600160401b038082111561057357600080fd5b818601915086601f83011261058757600080fd5b81358181111561059657600080fd5b8760208260051b85010111156105ab57600080fd5b6020830194508093505050509250925092565b6000602082840312156105d057600080fd5b6104c4826104cb565b600080604083850312156105ec57600080fd5b6105f5836104cb565b9150610603602084016104cb565b90509250929050565b60006020808352835180602085015260005b8181101561063a5785810183015185820160400152820161061e565b506000604082860101526040601f19601f8301168501019250505092915050565b6020808252600f908201526e27b7363c9039bab832b920b236b4b760891b604082015260600190565b60208082528181018390526000908460408401835b868110156106c5576001600160a01b036106b2846104cb565b1682529183019190830190600101610699565b509695505050505050565b6000602082840312156106e257600080fd5b815180151581146104c457600080fd5b600181811c9082168061070657607f821691505b60208210810361072657634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220830f3c30ad4d14df1865965a76cbb302e6938979ee6e646e3a277a8abebb5fd164736f6c63430008160033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061006d5760003560e01c806301ffc9a71461007257806305de62c01461009a57806329575f6a146100be578063377a7d1a146100de578063985d1968146100f3578063bcc91a1014610106578063c81a396e14610119575b600080fd5b6100856100803660046104a9565b61012e565b60405190151581526020015b60405180910390f35b6100856100a83660046104e2565b50506001546001600160a01b0391821691161490565b6001546100d1906001600160a01b031681565b6040516100919190610525565b6100f16100ec366004610539565b610180565b005b6100f16101013660046105be565b610218565b6100f16101143660046105d9565b610298565b6101216103fe565b604051610091919061060c565b60006001600160e01b03198216633001c1ef60e21b148061015f57506001600160e01b03198216631bbd3e8d60e11b145b8061017a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001546001600160a01b031633146101b35760405162461bcd60e51b81526004016101aa9061065b565b60405180910390fd5b600180546001600160a01b038581166001600160a01b0319831681179093556040519116919082907f3f6845104f9728af7979eed8814320daba008953c8db93b9fe32602d1f34b4759061020a9087908790610684565b60405180910390a350505050565b6001546001600160a01b031633146102425760405162461bcd60e51b81526004016101aa9061065b565b806001600160a01b031663715018a66040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561027d57600080fd5b505af1158015610291573d6000803e3d6000fd5b5050505050565b6001546001600160a01b031633146102c25760405162461bcd60e51b81526004016101aa9061065b565b6040516301ffc9a760e01b8152633001c1ef60e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801561030d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033191906106d0565b61039c5760405162461bcd60e51b815260206004820152603660248201527f41646d696e41434c56303a206e65772061646d696e2041434c20646f6573206e60448201527506f7420737570706f7274204941646d696e41434c56360541b60648201526084016101aa565b60405163f2fde38b60e01b81526001600160a01b0383169063f2fde38b906103c8908490600401610525565b600060405180830381600087803b1580156103e257600080fd5b505af11580156103f6573d6000803e3d6000fd5b505050505050565b6000805461040b906106f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610437906106f2565b80156104845780601f1061045957610100808354040283529160200191610484565b820191906000526020600020905b81548152906001019060200180831161046757829003601f168201915b505050505081565b80356001600160e01b0319811681146104a457600080fd5b919050565b6000602082840312156104bb57600080fd5b6104c48261048c565b9392505050565b80356001600160a01b03811681146104a457600080fd5b6000806000606084860312156104f757600080fd5b610500846104cb565b925061050e602085016104cb565b915061051c6040850161048c565b90509250925092565b6001600160a01b0391909116815260200190565b60008060006040848603121561054e57600080fd5b610557846104cb565b925060208401356001600160401b038082111561057357600080fd5b818601915086601f83011261058757600080fd5b81358181111561059657600080fd5b8760208260051b85010111156105ab57600080fd5b6020830194508093505050509250925092565b6000602082840312156105d057600080fd5b6104c4826104cb565b600080604083850312156105ec57600080fd5b6105f5836104cb565b9150610603602084016104cb565b90509250929050565b60006020808352835180602085015260005b8181101561063a5785810183015185820160400152820161061e565b506000604082860101526040601f19601f8301168501019250505092915050565b6020808252600f908201526e27b7363c9039bab832b920b236b4b760891b604082015260600190565b60208082528181018390526000908460408401835b868110156106c5576001600160a01b036106b2846104cb565b1682529183019190830190600101610699565b509695505050505050565b6000602082840312156106e257600080fd5b815180151581146104c457600080fd5b600181811c9082168061070657607f821691505b60208210810361072657634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220830f3c30ad4d14df1865965a76cbb302e6938979ee6e646e3a277a8abebb5fd164736f6c63430008160033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
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.