Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Feature Flag... | 3555437 | 3 days ago | IN | 0 ETH | 0.00000531 | ||||
Grant Role | 3555371 | 3 days ago | IN | 0 ETH | 0.00000461 | ||||
Set Feature Flag... | 3554730 | 3 days ago | IN | 0 ETH | 0.0000053 | ||||
Set Feature Flag... | 3552458 | 3 days ago | IN | 0 ETH | 0.0000053 | ||||
Set Feature Flag... | 3533618 | 3 days ago | IN | 0 ETH | 0.0000047 | ||||
Grant Role | 3533611 | 3 days ago | IN | 0 ETH | 0.00000559 |
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
3398344 | 4 days ago | Contract Creation | 0 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
FeatureFlagRegistry
Compiler Version
v0.8.26+commit.8a97fa7a
ZkSolc Version
v1.5.6
Optimization Enabled:
Yes with Mode 3
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.26; import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; /** * @title FeatureFlagRegistry * @notice A contract for managing feature flags onchain */ contract FeatureFlagRegistry is AccessControl { error Immutable(); event FeatureFlagSet(bytes32 indexed featureFlagHash, address indexed user, bool status); event FeatureFlagImmutable(bytes32 indexed featureFlagHash); bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); mapping(bytes32 => mapping(address => bool)) private _featureFlagStatus; mapping(bytes32 => bool) public featureFlagImmutable; /** * @notice Initializes the contract with an owner who receives the DEFAULT_ADMIN_ROLE * @param owner Address that will be granted the admin role */ constructor(address owner) { _grantRole(DEFAULT_ADMIN_ROLE, owner); } /** * @notice Sets the status of a feature flag for a specific user; specify zero address to set the global status * @dev Only callable by accounts with MANAGER_ROLE * @param featureFlag String identifier of the feature flag * @param user Address of the user to set the status for * @param status Boolean indicating if the feature should be enabled * @custom:throws Immutable if the feature flag has been made immutable */ function setFeatureFlagStatus(string memory featureFlag, address user, bool status) public onlyRole(MANAGER_ROLE) { bytes32 featureFlagHash = _hashFeatureFlag(featureFlag); if (featureFlagImmutable[featureFlagHash]) { revert Immutable(); } _featureFlagStatus[featureFlagHash][user] = status; emit FeatureFlagSet(featureFlagHash, user, status); } /** * @notice Makes a feature flag immutable, preventing future status changes * @dev Only callable by accounts with MANAGER_ROLE * @param featureFlag String identifier of the feature flag * @custom:throws Immutable if the feature flag is already immutable */ function setFeatureFlagImmutable(string memory featureFlag) public onlyRole(MANAGER_ROLE) { bytes32 featureFlagHash = _hashFeatureFlag(featureFlag); if (featureFlagImmutable[featureFlagHash]) { revert Immutable(); } featureFlagImmutable[featureFlagHash] = true; } /** * @notice Checks if a feature flag is enabled for a specific user * @param featureFlag String identifier of the feature flag * @param user Address of the user to check * @return bool True if the feature is enabled for the user */ function isFeatureFlagEnabled(string memory featureFlag, address user) public view returns (bool) { bytes32 featureFlagHash = _hashFeatureFlag(featureFlag); return isFeatureFlagEnabled(featureFlagHash, user); } /** * @notice Checks if a feature flag is enabled for a specific user using the feature flag hash * @dev Implements the logic for checking feature flag status, considering global and user-specific settings * @param featureFlagHash Hash of the feature flag identifier * @param user Address of the user to check * @return bool True if the feature is enabled for the user */ function isFeatureFlagEnabled(bytes32 featureFlagHash, address user) public view returns (bool) { bool globalStatus = _featureFlagStatus[featureFlagHash][address(0)]; if (featureFlagImmutable[featureFlagHash]) { return globalStatus; } else if (globalStatus) { return true; } return _featureFlagStatus[featureFlagHash][user]; } /** * @notice Hashes a feature flag string identifier * @dev Internal helper function to consistently hash feature flag strings * @param featureFlag String identifier to hash * @return bytes32 Keccak256 hash of the feature flag string */ function _hashFeatureFlag(string memory featureFlag) internal pure returns (bytes32) { return keccak256(bytes(featureFlag)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol) pragma solidity ^0.8.20; import {IAccessControl} from "./IAccessControl.sol"; import {Context} from "../utils/Context.sol"; import {ERC165} from "../utils/introspection/ERC165.sol"; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ```solidity * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ```solidity * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules} * to enforce additional security measures for this role. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address account => bool) hasRole; bytes32 adminRole; } mapping(bytes32 role => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with an {AccessControlUnauthorizedAccount} error including the required role. */ modifier onlyRole(bytes32 role) { _checkRole(role); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view virtual returns (bool) { return _roles[role].hasRole[account]; } /** * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()` * is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier. */ function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } /** * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account` * is missing `role`. */ function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert AccessControlUnauthorizedAccount(account, role); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleGranted} event. */ function grantRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleRevoked} event. */ function revokeRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `callerConfirmation`. * * May emit a {RoleRevoked} event. */ function renounceRole(bytes32 role, address callerConfirmation) public virtual { if (callerConfirmation != _msgSender()) { revert AccessControlBadConfirmation(); } _revokeRole(role, callerConfirmation); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } /** * @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted. * * Internal function without access restriction. * * May emit a {RoleGranted} event. */ function _grantRole(bytes32 role, address account) internal virtual returns (bool) { if (!hasRole(role, account)) { _roles[role].hasRole[account] = true; emit RoleGranted(role, account, _msgSender()); return true; } else { return false; } } /** * @dev Attempts to revoke `role` to `account` and returns a boolean indicating if `role` was revoked. * * Internal function without access restriction. * * May emit a {RoleRevoked} event. */ function _revokeRole(bytes32 role, address account) internal virtual returns (bool) { if (hasRole(role, account)) { _roles[role].hasRole[account] = false; emit RoleRevoked(role, account, _msgSender()); return true; } else { return false; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (access/IAccessControl.sol) pragma solidity ^0.8.20; /** * @dev External interface of AccessControl declared to support ERC-165 detection. */ interface IAccessControl { /** * @dev The `account` is missing a role. */ error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); /** * @dev The caller of a function is not the expected one. * * NOTE: Don't confuse with {AccessControlUnauthorizedAccount}. */ error AccessControlBadConfirmation(); /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). * Expected in cases where the role was granted using the internal {AccessControl-_grantRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `callerConfirmation`. */ function renounceRole(bytes32 role, address callerConfirmation) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/ERC165.sol) pragma solidity ^0.8.20; import {IERC165} from "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC-165 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); * } * ``` */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[ERC]. * * 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[ERC 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); }
{ "evmVersion": "cancun", "optimizer": { "enabled": true, "mode": "3" }, "outputSelection": { "*": { "*": [ "abi" ] } }, "detectMissingLibraries": false, "forceEVMLA": false, "enableEraVMExtensions": true, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"Immutable","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"featureFlagHash","type":"bytes32"}],"name":"FeatureFlagImmutable","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"featureFlagHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"FeatureFlagSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"featureFlagImmutable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"featureFlagHash","type":"bytes32"},{"internalType":"address","name":"user","type":"address"}],"name":"isFeatureFlagEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"featureFlag","type":"string"},{"internalType":"address","name":"user","type":"address"}],"name":"isFeatureFlagEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"featureFlag","type":"string"}],"name":"setFeatureFlagImmutable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"featureFlag","type":"string"},{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setFeatureFlagStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
3cda3351000000000000000000000000000000000000000000000000000000000000000001000139df52a59ee933f1e881ea841cefae865773f53f212a76a16ecbacf007000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000200000000000000000000000006f6426a9b93a7567fcccbfe5d0d6f26c1085999b
Deployed Bytecode
0x0003000000000002000000600310027000000107033001970000000100200190000000580000c13d0000008002000039000000400020043f000000040030008c000001fd0000413d000000000201043b000000e002200270000001100020009c000000b10000a13d000001110020009c0000010c0000a13d000001120020009c0000012f0000213d000001150020009c0000013a0000613d000001160020009c000001fd0000c13d000000440030008c000001fd0000413d0000000002000416000000000002004b000001fd0000c13d0000000402100370000000000402043b000001230040009c000001fd0000213d0000002302400039000000000032004b000001fd0000813d0000000405400039000000000251034f000000000202043b000001230020009c0000019d0000213d0000001f0720003900000135077001970000003f077000390000013507700197000001240070009c0000019d0000213d0000008007700039000000400070043f000000800020043f00000000042400190000002404400039000000000034004b000001fd0000213d0000002003500039000000000431034f00000135052001980000001f0620018f000000a0035000390000003f0000613d000000a007000039000000000804034f000000008908043c0000000007970436000000000037004b0000003b0000c13d000000000006004b0000004c0000613d000000000454034f0000000305600210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000000a00220003900000000000204350000002401100370000000000101043b0000010a0010009c000001fd0000213d000300000001001d000000800200043d000000a001000039041903fa0000040f0000000302000029000001450000013d0000000002000416000000000002004b000001fd0000c13d0000001f0230003900000108022001970000008002200039000000400020043f0000001f0430018f00000109053001980000008002500039000000690000613d0000008006000039000000000701034f000000007807043c0000000006860436000000000026004b000000650000c13d000000000004004b000000760000613d000000000151034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000200030008c000001fd0000413d000000800300043d0000010a0030009c000001fd0000213d000000000030043f0000010b01000041000000200010043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039000300000003001d041904140000040f00000003030000290000000100200190000001fd0000613d000000000101043b000000000101041a000000ff00100190000000ac0000c13d000000000030043f0000010b01000041000000200010043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f00000003060000290000000100200190000001fd0000613d000000000101043b000000000201041a000001360220019700000001022001bf000000000021041b0000000001000414000001070010009c0000010701008041000000c0011002100000010d011001c70000800d02000039000000040300003900000000070004110000010e0400004100000000050000190419040f0000040f0000000100200190000001fd0000613d0000002001000039000001000010044300000120000004430000010f010000410000041a0001042e0000011a0020009c000001180000213d0000011e0020009c0000014a0000613d0000011f0020009c000001570000613d000001200020009c000001fd0000c13d000000240030008c000001fd0000413d0000000002000416000000000002004b000001fd0000c13d0000000402100370000000000402043b000001230040009c000001fd0000213d0000002302400039000000000032004b000001fd0000813d0000000405400039000000000251034f000000000202043b0000012e0020009c0000019d0000813d0000001f0720003900000135077001970000003f077000390000013507700197000001240070009c0000019d0000213d0000008007700039000000400070043f000000800020043f00000000042400190000002404400039000000000034004b000001fd0000213d0000002003500039000000000331034f00000135042001980000001f0520018f000000a001400039000000e30000613d000000a006000039000000000703034f000000007807043c0000000006860436000000000016004b000000df0000c13d000000000005004b000000f00000613d000000000343034f0000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000000a001200039000000000001043500000000010004110000010a01100197000000000010043f0000012601000041000000200010043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f0000000100200190000001fd0000613d000000000101043b000000000101041a000000ff00100190000002ea0000c13d0000012a01000041000000000010043f0000000001000411000000040010043f0000012101000041000000240010043f0000012b010000410000041b00010430000001170020009c000001680000613d000001180020009c000001860000613d000001190020009c000001fd0000c13d0000000001000416000000000001004b000001fd0000c13d000000800000043f00000122010000410000041a0001042e0000011b0020009c000001a30000613d0000011c0020009c000001b20000613d0000011d0020009c000001fd0000c13d000000440030008c000001fd0000413d0000000002000416000000000002004b000001fd0000c13d0000002402100370000000000302043b0000010a0030009c000001fd0000213d0000000002000411000000000023004b0000020a0000c13d0000000401100370000000000101043b041903ab0000040f00000000010000190000041a0001042e000001130020009c000001f40000613d000001140020009c000001fd0000c13d0000000001000416000000000001004b000001fd0000c13d0000012101000041000000800010043f00000122010000410000041a0001042e000000440030008c000001fd0000413d0000000002000416000000000002004b000001fd0000c13d0000002402100370000000000202043b0000010a0020009c000001fd0000213d0000000401100370000000000101043b0419032c0000040f000000000001004b0000000001000039000000010100c039000001ab0000013d000000240030008c000001fd0000413d0000000002000416000000000002004b000001fd0000c13d0000000401100370000000000101043b000000000010043f0000000201000039000000200010043f000000400200003900000000010000190000017e0000013d000000240030008c000001fd0000413d0000000002000416000000000002004b000001fd0000c13d0000000401100370000000000101043b0000013200100198000001fd0000c13d000001330010009c00000000020000390000000102006039000001340010009c00000001022061bf000000800020043f00000122010000410000041a0001042e000000440030008c000001fd0000413d0000000002000416000000000002004b000001fd0000c13d0000002402100370000000000302043b0000010a0030009c000001fd0000213d0000000401100370000000000101043b000000000010043f000000200000043f00000040020000390000000001000019000300000003001d041903fa0000040f0000000302000029000000000020043f000000200010043f00000000010000190000004002000039041903fa0000040f000000000101041a000000ff001001900000000001000039000000010100c039000000800010043f00000122010000410000041a0001042e000000640030008c000001fd0000413d0000000002000416000000000002004b000001fd0000c13d0000000402100370000000000402043b000001230040009c000001fd0000213d0000002302400039000000000032004b000001fd0000813d0000000405400039000000000251034f000000000202043b000001230020009c0000019d0000213d0000001f0720003900000135077001970000003f077000390000013507700197000001240070009c0000020e0000a13d0000013001000041000000000010043f0000004101000039000000040010043f00000131010000410000041b00010430000000240030008c000001fd0000413d0000000002000416000000000002004b000001fd0000c13d0000000401100370000000000101043b0419031b0000040f000000400200043d0000000000120435000001070020009c0000010702008041000000400120021000000125011001c70000041a0001042e000000440030008c000001fd0000413d0000000002000416000000000002004b000001fd0000c13d0000000402100370000000000302043b0000002401100370000000000101043b000300000001001d0000010a0010009c000001fd0000213d000000000030043f000000200000043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039000200000003001d041904140000040f0000000100200190000001fd0000613d000000000101043b0000000101100039000000000101041a000100000001001d000000000010043f000000200000043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f0000000100200190000001fd0000613d000000000101043b00000000020004110000010a02200197000000000020043f000000200010043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f00000002030000290000000100200190000001fd0000613d000000000101043b000000000101041a000000ff00100190000002a00000c13d0000012a01000041000000000010043f0000000001000411000000040010043f0000000101000029000000240010043f0000012b010000410000041b00010430000000440030008c000001fd0000413d0000000002000416000000000002004b000001fd0000c13d0000002402100370000000000202043b0000010a0020009c000001ff0000a13d00000000010000190000041b000104300000000401100370000000000101043b000200000001001d000300000002001d0419031b0000040f041903810000040f00000002010000290000000302000029041903ab0000040f00000000010000190000041a0001042e0000012c01000041000000000010043f0000012d010000410000041b000104300000008007700039000000400070043f000000800020043f00000000042400190000002404400039000000000034004b000001fd0000213d0000002003500039000000000431034f00000135052001980000001f0620018f000000a003500039000002210000613d000000a007000039000000000804034f000000008908043c0000000007970436000000000037004b0000021d0000c13d000000000006004b0000022e0000613d000000000454034f0000000305600210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000000a00220003900000000000204350000002402100370000000000302043b0000010a0030009c000001fd0000213d0000004401100370000000000201043b000000000002004b0000000001000039000000010100c039000300000002001d000000000012004b000001fd0000c13d00000000010004110000010a01100197000000000010043f0000012601000041000000200010043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039000200000003001d041904140000040f0000000100200190000001fd0000613d000000000101043b000000000101041a000000ff00100190000001040000613d000000800100043d000001070010009c000001070100804100000060011002100000000002000414000001070020009c0000010702008041000000c002200210000000000121019f00000127011001c70000801002000039041904140000040f0000000100200190000001fd0000613d000000000101043b000100000001001d000000000010043f0000000201000039000000200010043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f0000000100200190000001fd0000613d000000000101043b000000000101041a000000ff00100190000003170000c13d0000000101000029000000000010043f0000000101000039000000200010043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f00000001002001900000000202000029000001fd0000613d000000000101043b000000000020043f000000200010043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f00000002060000290000000100200190000001fd0000613d000000000101043b000000000201041a00000136022001970000000303000029000000000232019f000000000021041b000000400100043d0000000000310435000001070010009c000001070100804100000040011002100000000002000414000001070020009c0000010702008041000000c002200210000000000112019f00000128011001c70000800d02000039000000030300003900000129040000410000000105000029000002e50000013d000000000030043f000000200000043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f0000000100200190000001fd0000613d000000000101043b0000000302000029000000000020043f000000200010043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f00000002030000290000000100200190000001fd0000613d000000000101043b000000000101041a000000ff00100190000002e80000c13d000000000030043f000000200000043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f0000000100200190000001fd0000613d000000000101043b0000000302000029000000000020043f000000200010043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f00000002050000290000000100200190000001fd0000613d000000000101043b000000000201041a000001360220019700000001022001bf000000000021041b0000000001000414000001070010009c0000010701008041000000c0011002100000010d011001c70000800d0200003900000004030000390000010e04000041000000030600002900000000070004110419040f0000040f0000000100200190000001fd0000613d00000000010000190000041a0001042e000000800100043d000001070010009c000001070100804100000060011002100000000002000414000001070020009c0000010702008041000000c002200210000000000121019f00000127011001c70000801002000039041904140000040f0000000100200190000001fd0000613d000000000101043b000300000001001d000000000010043f0000000201000039000000200010043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f0000000100200190000001fd0000613d000000000101043b000000000101041a000000ff00100190000003170000c13d0000000301000029000000000010043f0000000201000039000000200010043f00000040020000390000000001000019041903fa0000040f000000000201041a000001360220019700000001022001bf000000000021041b00000000010000190000041a0001042e0000012f01000041000000000010043f0000012d010000410000041b00010430000000000010043f000000200000043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f00000001002001900000032a0000613d000000000101043b0000000101100039000000000101041a000000000001042d00000000010000190000041b000104300003000000000002000100000002001d000300000001001d000000000010043f0000000101000039000000200010043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f00000001002001900000037f0000613d000000000101043b000000000000043f000000200010043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f00000001002001900000037f0000613d000000000101043b000000000101041a000200000001001d0000000301000029000000000010043f0000000201000039000000200010043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f00000001002001900000037f0000613d0000000202000029000000ff0220018f000000000101043b000000000101041a000000ff001001900000035f0000613d0000000001020019000000000001042d000000000002004b0000000101000039000003630000613d000000000001042d000000200010043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f00000001002001900000037f0000613d000000000101043b00000001020000290000010a02200197000000000020043f000000200010043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f00000001002001900000037f0000613d000000000101043b000000000101041a000000ff0110018f000000000001042d00000000010000190000041b000104300001000000000002000100000001001d000000000010043f000000200000043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f0000000100200190000003a10000613d000000000101043b00000000020004110000010a02200197000000000020043f000000200010043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f0000000100200190000003a10000613d000000000101043b000000000101041a000000ff00100190000003a30000613d000000000001042d00000000010000190000041b000104300000012a01000041000000000010043f0000000001000411000000040010043f0000000101000029000000240010043f0000012b010000410000041b000104300002000000000002000100000002001d000200000001001d000000000010043f000000200000043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f0000000100200190000003f80000613d000000000101043b00000001020000290000010a02200197000100000002001d000000000020043f000000200010043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f0000000100200190000003f80000613d000000000101043b000000000101041a000000ff00100190000003f70000613d0000000201000029000000000010043f000000200000043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f0000000100200190000003f80000613d000000000101043b0000000102000029000000000020043f000000200010043f0000000001000414000001070010009c0000010701008041000000c0011002100000010c011001c70000801002000039041904140000040f0000000100200190000003f80000613d000000000101043b000000000201041a0000013602200197000000000021041b0000000001000414000001070010009c0000010701008041000000c0011002100000010d011001c70000800d02000039000000040300003900000000070004110000013704000041000000020500002900000001060000290419040f0000040f0000000100200190000003f80000613d000000000001042d00000000010000190000041b00010430000001070010009c00000107010080410000004001100210000001070020009c00000107020080410000006002200210000000000112019f0000000002000414000001070020009c0000010702008041000000c002200210000000000112019f0000010d011001c70000801002000039041904140000040f00000001002001900000040d0000613d000000000101043b000000000001042d00000000010000190000041b0001043000000412002104210000000102000039000000000001042d0000000002000019000000000001042d00000417002104230000000102000039000000000001042d0000000002000019000000000001042d00000419000004320000041a0001042e0000041b0001043000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5020000000000000000000000000000000000004000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d00000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000091d1485300000000000000000000000000000000000000000000000000000000b21e0e5600000000000000000000000000000000000000000000000000000000d547741e00000000000000000000000000000000000000000000000000000000d547741f00000000000000000000000000000000000000000000000000000000ec87621c00000000000000000000000000000000000000000000000000000000b21e0e5700000000000000000000000000000000000000000000000000000000bd7b141b0000000000000000000000000000000000000000000000000000000091d1485400000000000000000000000000000000000000000000000000000000a11b420600000000000000000000000000000000000000000000000000000000a217fddf00000000000000000000000000000000000000000000000000000000248a9ca200000000000000000000000000000000000000000000000000000000248a9ca3000000000000000000000000000000000000000000000000000000002f2ff15d0000000000000000000000000000000000000000000000000000000036568abe0000000000000000000000000000000000000000000000000000000001a9f63e0000000000000000000000000000000000000000000000000000000001ffc9a700000000000000000000000000000000000000000000000000000000064f2306241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b080000000000000000000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff7f0000000000000000000000000000000000000020000000000000000000000000e84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee6450200000000000000000000000000000000000000000000a000000000000000000200000000000000000000000000000000000020000000000000000000000000cbe3fedf39753dba00f97a650d3081fd19129802926553218c2ce62a0b1f30ffe2517d3f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000440000000000000000000000006697b2320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000010000000000000000bb7790e6000000000000000000000000000000000000000000000000000000004e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffc9a7000000000000000000000000000000000000000000000000000000007965db0b00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00f6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b2a3c3d5ff0f890c793fcdbe1fda151b334f92f98d44d26366b35730649e687e5
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006f6426a9b93a7567fcccbfe5d0d6f26c1085999b
-----Decoded View---------------
Arg [0] : owner (address): 0x6f6426a9b93a7567fCCcBfE5d0d6F26c1085999b
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000006f6426a9b93a7567fcccbfe5d0d6f26c1085999b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ 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.