Source Code
Overview
POL Balance
0 POL
More Info
ContractCreator
Multichain Info
N/A
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
AllowList
Compiler Version
v0.8.25+commit.b61c2a91
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.10; import {NodeOwners} from "./NodeOwners.sol"; contract AllowList is NodeOwners { mapping(bytes32 => mapping(address => bool)) allowList; event UserStateUpdated(bytes32 id, address user, bool state); constructor(address graph, address identity) NodeOwners(graph, identity) {} function setState(bytes32 id, address user, bool state) public nodeOwner(id) { allowList[id][user] = state; emit UserStateUpdated(id, user, state); } function auth(bytes32 id, address user) external view returns (bool isAuthorised) { isAuthorised = allowList[id][user]; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {IContentGraph} from "../IContentGraph.sol"; import {IIdentityRegistry} from "../interfaces/IIdentityRegistry.sol"; /** * @title Node Owners * @author Blockchain Creative Labs */ contract NodeOwners { address contentGraph; address identityRegistry; error NotAuthorized(); constructor(address _graph, address _identity) { contentGraph = _graph; identityRegistry = _identity; } modifier nodeOwner(bytes32 id) { _checkOwner(id); _; } function _checkOwner(bytes32 id) internal view virtual { uint256 token = IContentGraph(contentGraph).getNode(id).token; address owner = IContentGraph(contentGraph).ownerOf(token); address actingAs = IIdentityRegistry(identityRegistry).whoIs(msg.sender); if (actingAs != address(0)) { require(owner == actingAs, "NodeOwners: Caller is not authorized"); } else { revert NotAuthorized(); } } }
// SPDX-License-Identifier: CC0-1.0 pragma solidity ^0.8.0; import "./interfaces/IERC6150.sol"; import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; interface IContentGraph is IERC6150, IERC721 { event Moved(bytes32 _id, bytes32 indexed _from, bytes32 _to); event AccessAuthUpdate(bytes32 _id, address _auth); event ReferenceAuthUpdate(bytes32 _id, address _auth); event URIUpdate(bytes32 _id, string _uri); enum NodeType { ORG, REFERENCE, ASSET } struct ContentNode { bytes32 id; NodeType nodeType; bytes32 referenceOf; string uri; } struct Node { uint256 token; NodeType nodeType; bytes32 id; bytes32 referenceOf; string uri; address accessAuth; address referenceAuth; } /** * @notice Publishes a new set content node (assets/references) to the passed parent id. * @param parentId The id of an ORG node to publish the set of content nodes. * @param content A list of content. */ function publishBulk(bytes32 parentId, ContentNode[] calldata content) external; /** * @notice Publishes a new asset node at a given parent in addition to setting the uri for the asset node. * @param parentId The id of an ORG node to publish the set of content nodes. * @param content A content node to publish. */ function publish(bytes32 parentId, ContentNode calldata content) external; /** * @notice Creates a node of a given type under the parent node provided. * @param id The id of the node to create, must follow correct form based on type. * @param parentId The id of a admin node to publish the node under * @param nodeType The type of node to create, ADMIN, COLLECTION, or ASSET */ function createNode(bytes32 id, bytes32 parentId, NodeType nodeType) external; /** * @notice Creates a node of a given type under the parent node provided. * @param id The id of the node to create, must follow the correct form based on type. * @param parentId The id of a ORG node to publish the node under * @param nodeType The type of node to create, ORG, REFERENCE, or ASSET * @param referenceOf If the type is of REFERENCE the id of the node that is being referenced */ function createNode(bytes32 id, bytes32 parentId, NodeType nodeType, bytes32 referenceOf) external; /** * @notice Moves a node from current parent to a new parent. * @param id The id of the node to move. * @param newParentId The id of an existing admin node to move the node under. */ function move(bytes32 id, bytes32 newParentId) external; /** * @notice Sets the access auth module for a given node. * @param id The id of the node whose auth modules should be set * @param accessAuth The address to the auth module to be used access of node's content. */ function setAccessAuth(bytes32 id, address accessAuth) external; /** * @notice Sets the reference auth module for a given node. * @param id The id of the node whose auth modules should be set * @param referenceAuth The address to the auth module to be used for referencing a node in collection. */ function setReferenceAuth(bytes32 id, address referenceAuth) external; /** * @notice Sets the uri for a node. * @param id The id of the node. * @param uri The URI to the metadata to set for a node. */ function setURI(bytes32 id, string calldata uri) external; /** * @notice Validates if a given user may access the content at a given node. * @param id The id of the node whose content is being accessed. * @param user The address of the user who wishes to access the content. */ function auth(bytes32 id, address user) external view returns (bool); /** * @notice Validates if a given user may reference a given node in a collection. * @param id The id of the node who is being referenced. * @param user The address of the user who wishes to reference the node. */ function refAuth(bytes32 id, address user) external view returns (bool); /** * @notice retrieve node from node id * @param id The id of the node to retrieve. */ function getNode(bytes32 id) external view returns (Node memory node); /** * @dev retrieve node from token id * @param token The tokenId for the node to retrieve. */ function tokenToNode(uint256 token) external view returns (Node memory node); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.10; interface IIdentityRegistry { function registerRoot(address root, string memory name) external; function deregisterRoot(address root) external; function registerIdentity( bytes memory signature, address root, address identity, uint256 expirary, uint256 deadline ) external; function deregisterIdentity(bytes memory signature, address root, address identity, uint256 deadline) external; function whoIs(address identity) external view returns (address root); function getSignature(address _root, address _identity) external view returns (bytes memory signature, bytes32 digest, address root, address identity, uint256 expirary); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; // Note: the ERC-165 identifier for this interface is 0x897e2c73. interface IERC6150 { /* is IERC721, IERC165 */ /** * @notice Emitted when `tokenId` token under `parentId` is minted. * @param minter The address of minter * @param to The address received token * @param parentId The id of parent token, if it's zero, it means minted `tokenId` is a root token. * @param tokenId The id of minted token, required to be greater than zero */ event Minted(address indexed minter, address indexed to, uint256 parentId, uint256 tokenId); /** * @notice Get the parent token of `tokenId` token. * @param tokenId The child token * @return parentId The Parent token found */ function parentOf(uint256 tokenId) external view returns (uint256 parentId); /** * @notice Get the children tokens of `tokenId` token. * @param tokenId The parent token * @return childrenIds The array of children tokens */ function childrenOf(uint256 tokenId) external view returns (uint256[] memory childrenIds); /** * @notice Check the `tokenId` token if it is a root token. * @param tokenId The token want to be checked * @return Return `true` if it is a root token; if not, return `false` */ function isRoot(uint256 tokenId) external view returns (bool); /** * @notice Check the `tokenId` token if it is a leaf token. * @param tokenId The token want to be checked * @return Return `true` if it is a leaf token; if not, return `false` */ function isLeaf(uint256 tokenId) external view returns (bool); } // Note: the ERC-165 identifier for this interface is 0xba541a2e. interface IERC6150Enumerable is IERC6150 /* IERC721Enumerable */ { /** * @notice Get total amount of children tokens under `parentId` token. * @dev If `parentId` is zero, it means get total amount of root tokens. * @return The total amount of children tokens under `parentId` token. */ function childrenCountOf(uint256 parentId) external view returns (uint256); /** * @notice Get the token at the specified index of all children tokens under `parentId` token. * @dev If `parentId` is zero, it means get root token. * @return The token ID at `index` of all chlidren tokens under `parentId` token. */ function childOfParentByIndex(uint256 parentId, uint256 index) external view returns (uint256); /** * @notice Get the index position of specified token in the children enumeration under specified parent token. * @dev Throws if the `tokenId` is not found in the children enumeration. * If `parentId` is zero, means get root token index. * @param parentId The parent token * @param tokenId The specified token to be found * @return The index position of `tokenId` found in the children enumeration */ function indexInChildrenEnumeration(uint256 parentId, uint256 tokenId) external view returns (uint256); } // Note: the ERC-165 identifier for this interface is 0x4ac0aa46. interface IERC6150Burnable is IERC6150 { /** * @notice Burn the `tokenId` token. * @dev Throws if `tokenId` is not a leaf token. * Throws if `tokenId` is not a valid NFT. * Throws if `owner` is not the owner of `tokenId` token. * Throws unless `msg.sender` is the current owner, an authorized operator, or the approved address for this token. * @param tokenId The token to be burnt */ function safeBurn(uint256 tokenId) external; /** * @notice Batch burn tokens. * @dev Throws if one of `tokenIds` is not a leaf token. * Throws if one of `tokenIds` is not a valid NFT. * Throws if `owner` is not the owner of all `tokenIds` tokens. * Throws unless `msg.sender` is the current owner, an authorized operator, or the approved address for all `tokenIds`. * @param tokenIds The tokens to be burnt */ function safeBatchBurn(uint256[] memory tokenIds) external; } // Note: the ERC-165 identifier for this interface is 0xfa574808. interface IERC6150ParentTransferable is IERC6150 { /** * @notice Emitted when the parent of `tokenId` token changed. * @param tokenId The token changed * @param oldParentId Previous parent token * @param newParentId New parent token */ event ParentTransferred(uint256 tokenId, uint256 oldParentId, uint256 newParentId); /** * @notice Transfer parentship of `tokenId` token to a new parent token * @param newParentId New parent token id * @param tokenId The token to be changed */ function transferParent(uint256 newParentId, uint256 tokenId) external; /** * @notice Batch transfer parentship of `tokenIds` to a new parent token * @param newParentId New parent token id * @param tokenIds Array of token ids to be changed */ function batchTransferParent(uint256 newParentId, uint256[] memory tokenIds) external; } // Note: the ERC-165 identifier for this interface is 0x1d04f0b3. interface IERC6150AccessControl is IERC6150 { /** * @notice Check the account whether a admin of `tokenId` token. * @dev Each token can be set more than one admin. Admin have permission to do something to the token, like mint child token, * or burn token, or transfer parentship. * @param tokenId The specified token * @param account The account to be checked * @return If the account has admin permission, return true; otherwise, return false. */ function isAdminOf(uint256 tokenId, address account) external view returns (bool); /** * @notice Check whether the specified parent token and account can mint children tokens * @dev If the `parentId` is zero, check whether account can mint root nodes * @param parentId The specified parent token to be checked * @param account The specified account to be checked * @return If the token and account has mint permission, return true; otherwise, return false. */ function canMintChildren(uint256 parentId, address account) external view returns (bool); /** * @notice Check whether the specified token can be burnt by specified account * @param tokenId The specified token to be checked * @param account The specified account to be checked * @return If the tokenId can be burnt by account, return true; otherwise, return false. */ function canBurnTokenByAccount(uint256 tokenId, address account) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.20; import {IERC165} from "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC-721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC-721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or * {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the address zero. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// 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); }
{ "remappings": [ "ds-test/=lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/", "solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/", "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", "openzeppelin-contracts/=lib/openzeppelin-contracts/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "none", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "cancun", "viaIR": false, "libraries": {} }
[{"inputs":[{"internalType":"address","name":"graph","type":"address"},{"internalType":"address","name":"identity","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"NotAuthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"state","type":"bool"}],"name":"UserStateUpdated","type":"event"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"user","type":"address"}],"name":"auth","outputs":[{"internalType":"bool","name":"isAuthorised","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setState","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052348015600e575f80fd5b5060405161060e38038061060e833981016040819052602b916074565b5f80546001600160a01b039384166001600160a01b0319918216179091556001805492909316911617905560a0565b80516001600160a01b0381168114606f575f80fd5b919050565b5f80604083850312156084575f80fd5b608b83605a565b9150609760208401605a565b90509250929050565b610561806100ad5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806305e5253a14610038578063516a166a1461004d575b5f80fd5b61004b610046366004610324565b610098565b005b61008461005b366004610367565b5f9182526002602090815260408084206001600160a01b03909316845291905290205460ff1690565b604051901515815260200160405180910390f35b826100a28161011a565b5f8481526002602090815260408083206001600160a01b03871680855290835292819020805460ff19168615159081179091558151888152928301939093528101919091527fc03cc572d5c94cd0bacc12ca981549a12df5e09304898daded5c2f22820fa6a69060600160405180910390a150505050565b5f8054604051632864a37f60e11b8152600481018490526001600160a01b03909116906350c946fe906024015f60405180830381865afa158015610160573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101879190810190610479565b515f80546040516331a9108f60e11b81526004810184905292935090916001600160a01b0390911690636352211e90602401602060405180830381865afa1580156101d4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101f89190610532565b6001546040516371d0c75360e01b81523360048201529192505f916001600160a01b03909116906371d0c75390602401602060405180830381865afa158015610243573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102679190610532565b90506001600160a01b038116156102ee57806001600160a01b0316826001600160a01b0316146102e95760405162461bcd60e51b8152602060048201526024808201527f4e6f64654f776e6572733a2043616c6c6572206973206e6f7420617574686f726044820152631a5e995960e21b606482015260840160405180910390fd5b610307565b60405163ea8e4eb560e01b815260040160405180910390fd5b50505050565b6001600160a01b0381168114610321575f80fd5b50565b5f805f60608486031215610336575f80fd5b8335925060208401356103488161030d565b91506040840135801515811461035c575f80fd5b809150509250925092565b5f8060408385031215610378575f80fd5b82359150602083013561038a8161030d565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b60405160e0810167ffffffffffffffff811182821017156103cc576103cc610395565b60405290565b8051600381106103e0575f80fd5b919050565b5f82601f8301126103f4575f80fd5b815167ffffffffffffffff8082111561040f5761040f610395565b604051601f8301601f19908116603f0116810190828211818310171561043757610437610395565b8160405283815286602085880101111561044f575f80fd5b8360208701602083015e5f602085830101528094505050505092915050565b80516103e08161030d565b5f60208284031215610489575f80fd5b815167ffffffffffffffff808211156104a0575f80fd5b9083019060e082860312156104b3575f80fd5b6104bb6103a9565b825181526104cb602084016103d2565b602082015260408301516040820152606083015160608201526080830151828111156104f5575f80fd5b610501878286016103e5565b60808301525061051360a0840161046e565b60a082015261052460c0840161046e565b60c082015295945050505050565b5f60208284031215610542575f80fd5b815161054d8161030d565b939250505056fea164736f6c6343000819000a000000000000000000000000ef2e371bafae46a116519f18a1cff750570e8842000000000000000000000000ee586a3655eb0d017643551e9849ed828fd7c7fa
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610034575f3560e01c806305e5253a14610038578063516a166a1461004d575b5f80fd5b61004b610046366004610324565b610098565b005b61008461005b366004610367565b5f9182526002602090815260408084206001600160a01b03909316845291905290205460ff1690565b604051901515815260200160405180910390f35b826100a28161011a565b5f8481526002602090815260408083206001600160a01b03871680855290835292819020805460ff19168615159081179091558151888152928301939093528101919091527fc03cc572d5c94cd0bacc12ca981549a12df5e09304898daded5c2f22820fa6a69060600160405180910390a150505050565b5f8054604051632864a37f60e11b8152600481018490526001600160a01b03909116906350c946fe906024015f60405180830381865afa158015610160573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101879190810190610479565b515f80546040516331a9108f60e11b81526004810184905292935090916001600160a01b0390911690636352211e90602401602060405180830381865afa1580156101d4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101f89190610532565b6001546040516371d0c75360e01b81523360048201529192505f916001600160a01b03909116906371d0c75390602401602060405180830381865afa158015610243573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102679190610532565b90506001600160a01b038116156102ee57806001600160a01b0316826001600160a01b0316146102e95760405162461bcd60e51b8152602060048201526024808201527f4e6f64654f776e6572733a2043616c6c6572206973206e6f7420617574686f726044820152631a5e995960e21b606482015260840160405180910390fd5b610307565b60405163ea8e4eb560e01b815260040160405180910390fd5b50505050565b6001600160a01b0381168114610321575f80fd5b50565b5f805f60608486031215610336575f80fd5b8335925060208401356103488161030d565b91506040840135801515811461035c575f80fd5b809150509250925092565b5f8060408385031215610378575f80fd5b82359150602083013561038a8161030d565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b60405160e0810167ffffffffffffffff811182821017156103cc576103cc610395565b60405290565b8051600381106103e0575f80fd5b919050565b5f82601f8301126103f4575f80fd5b815167ffffffffffffffff8082111561040f5761040f610395565b604051601f8301601f19908116603f0116810190828211818310171561043757610437610395565b8160405283815286602085880101111561044f575f80fd5b8360208701602083015e5f602085830101528094505050505092915050565b80516103e08161030d565b5f60208284031215610489575f80fd5b815167ffffffffffffffff808211156104a0575f80fd5b9083019060e082860312156104b3575f80fd5b6104bb6103a9565b825181526104cb602084016103d2565b602082015260408301516040820152606083015160608201526080830151828111156104f5575f80fd5b610501878286016103e5565b60808301525061051360a0840161046e565b60a082015261052460c0840161046e565b60c082015295945050505050565b5f60208284031215610542575f80fd5b815161054d8161030d565b939250505056fea164736f6c6343000819000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ef2e371bafae46a116519f18a1cff750570e8842000000000000000000000000ee586a3655eb0d017643551e9849ed828fd7c7fa
-----Decoded View---------------
Arg [0] : graph (address): 0xEF2E371BaFAe46a116519F18A1cfF750570E8842
Arg [1] : identity (address): 0xEe586a3655EB0D017643551e9849ed828Fd7c7FA
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000ef2e371bafae46a116519f18a1cff750570e8842
Arg [1] : 000000000000000000000000ee586a3655eb0d017643551e9849ed828fd7c7fa
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.