Source Code
Overview
POL Balance
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": {}
}Contract ABI
API[{"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
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.