Source Code
Overview
ETH Balance
0.000000006 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 7 from a total of 7 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Register Public | 6126405 | 392 days ago | IN | 0 ETH | 0.00402615 | ||||
Unregister | 6123480 | 392 days ago | IN | 0 ETH | 0.00004628 | ||||
Register Public | 6123231 | 392 days ago | IN | 0 ETH | 0.00402615 | ||||
Register Public | 6123229 | 392 days ago | IN | 0 ETH | 0.00402615 | ||||
Register Public | 6123226 | 392 days ago | IN | 0 ETH | 0.00402615 | ||||
Register Public | 6123215 | 392 days ago | IN | 0 ETH | 0.00402615 | ||||
Register Public | 6123213 | 392 days ago | IN | 0 ETH | 0.012678 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
NodeRegistry
Compiler Version
v0.8.25+commit.b61c2a91
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "contracts/access/AccessControl.sol"; import "contracts/utils/ReentrancyGuard.sol"; /* .-'''-. ' _ \ _______ .---. __ __ ___ / /` '. \\ ___ `'. __.....__ | | __.....__ .--. | |/ `.' `. . | \ ' ' |--.\ \ .-'' '. | | .-'' '. |__| | .-. .-. '| ' | '| | \ ' / .-''"'-. `. | | / .-''"'-. `. .--. | | | | | |\ \ / / | | | '/ /________\ \| |/ /________\ \ ____ _____ __ | | | | | | | | `. ` ..' / | | | || || || |`. \ .' / .:--.'. | | | | | | | | '-...-'` | | ' .'\ .-------------'| |\ .-------------' `. `' .' / | \ || | | | | | | | | |___.' /' \ '-.____...---.| | \ '-.____...---. '. .' ,.--. `" __ | || | |__| |__| |__| /_______.'/ `. .' | | `. .' .' `. // \ .'.''| ||__| \_______|/ `''-...... -' '---' `''-...... -' .' .'`. `. \\ // / | |_ .' / `. `.`'--' \ \._,\ '/ '----' '----' `--' `" https://modelex.ai */ contract NodeRegistry is AccessControl, ReentrancyGuard { uint public requiredStakeAmount; uint public lockUpPeriod; address public owner; uint256 public constant NAME_MAX_LENGTH = 32; uint256 public constant DN_MAX_LENGTH = 128; mapping(address => Node) public registry; address[] public publicNodes; address[] public whitelistedNodes; event NodeRegistered(address nodeAddress); event StakeWithdrawn(address nodeAddress); struct Node { string name; string dn; address nodeAddress; uint registeredAtBlock; uint pingAtBlock; uint stake; uint lockUpPeriod; } constructor () { requiredStakeAmount = 1 gwei; lockUpPeriod = 1000; _setupRoles(); } // may need to addres DEFAULT_ADMIN_ROLE in super class bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE"); bytes32 public constant NODE_ROLE = keccak256("NODE_ROLE"); bytes32 public constant WHITELISTED_ROLE = keccak256("WHITELISTED_ROLE"); function _setupRoles() internal { _grantRole(ADMIN_ROLE, msg.sender); } function baseURI() public pure returns (string memory) { return "https://modelex.ai/node"; } function registerPublic(string memory name, string memory dn) public payable { require(bytes(name).length <= NAME_MAX_LENGTH, "Name exceeds maximum length"); require(bytes(dn).length <= NAME_MAX_LENGTH, "Domain name exceeds maximum length"); require(msg.value >= requiredStakeAmount, "Incorrect stake amount"); Node memory node = Node ( name, dn, msg.sender, block.number, block.number, msg.value, lockUpPeriod ); registry[msg.sender] = node; publicNodes.push(msg.sender); _grantRole(NODE_ROLE,msg.sender); emit NodeRegistered(msg.sender); } function ping() public onlyRole(NODE_ROLE){ Node memory node = registry[msg.sender]; require(node.nodeAddress != address(0), "Node not in registry"); node.pingAtBlock = block.number; registry[msg.sender] = node; } function registerWhitelisted(string memory name, string memory dn) public payable onlyRole(WHITELISTED_ROLE) { require(bytes(name).length <= NAME_MAX_LENGTH, "Name exceeds maximum length"); require(bytes(dn).length <= NAME_MAX_LENGTH, "Domain name exceeds maximum length"); Node memory node = Node ( name, dn, msg.sender, block.number, block.number, msg.value, lockUpPeriod ); registry[msg.sender] = node; whitelistedNodes.push(msg.sender); _grantRole(NODE_ROLE,msg.sender); emit NodeRegistered(msg.sender); } function listPublic() public view returns (address[] memory) { return publicNodes; } function listWhitelist() public view returns (address[] memory) { return whitelistedNodes; } function forceUnregister(address nodeAddress) public nonReentrant onlyRole(ADMIN_ROLE) { _revokeRole(WHITELISTED_ROLE, msg.sender); _revokeRole(NODE_ROLE, msg.sender); _removeNode(nodeAddress, publicNodes); _removeNode(nodeAddress, whitelistedNodes); } function _withdrawStake() internal { require(block.number > registry[msg.sender].registeredAtBlock + lockUpPeriod, "Stake is locked"); payable(msg.sender).transfer(registry[msg.sender].stake); } function withdrawStake() public nonReentrant { _withdrawStake(); } function unregister() public nonReentrant { _withdrawStake(); _revokeRole(WHITELISTED_ROLE, msg.sender); _revokeRole(NODE_ROLE, msg.sender); _removeNode(msg.sender, publicNodes); _removeNode(msg.sender, whitelistedNodes); } function lookup(address nodeAddress) public view returns (Node memory node) { return registry[nodeAddress]; } // Function to add an node to the whitelist (to be called by the contract owner or designated administrator) function addToWhitelist(address nodeAddress) public onlyRole(ADMIN_ROLE) { _grantRole(WHITELISTED_ROLE,nodeAddress); } // Function to remove an node from the whitelist function removeFromWhitelist(address nodeAddress) public onlyRole(ADMIN_ROLE) { _revokeRole(WHITELISTED_ROLE, nodeAddress); } function _removeNode(address nodeAddress, address[] storage nodeArray) internal { for (uint i = 0; i < nodeArray.length; i++) { if (nodeArray[i] == nodeAddress) { nodeArray[i] = nodeArray[nodeArray.length - 1]; nodeArray.pop(); break; } } delete registry[nodeAddress]; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol) pragma solidity ^0.8.20; import {IAccessControl} from "contracts/access/IAccessControl.sol"; import {Context} from "contracts/utils/Context.sol"; import {ERC165} from "contracts/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.0.0) (access/IAccessControl.sol) pragma solidity ^0.8.20; /** * @dev External interface of AccessControl declared to support ERC165 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, an admin role * bearer except when using {AccessControl-_setupRole}. */ 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.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.0.0) (utils/introspection/ERC165.sol) pragma solidity ^0.8.20; import {IERC165} from "contracts/utils/introspection/IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` */ 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.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; uint256 private _status; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _status = NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be NOT_ENTERED if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail _status = ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } }
{ "evmVersion": "istanbul", "optimizer": { "enabled": true, "runs": 200 }, "libraries": { "NodeRegistry.sol": {} }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract ABI
API[{"inputs":[],"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":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"nodeAddress","type":"address"}],"name":"NodeRegistered","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"nodeAddress","type":"address"}],"name":"StakeWithdrawn","type":"event"},{"inputs":[],"name":"ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DN_MAX_LENGTH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NAME_MAX_LENGTH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NODE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELISTED_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"nodeAddress","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"nodeAddress","type":"address"}],"name":"forceUnregister","outputs":[],"stateMutability":"nonpayable","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":[],"name":"listPublic","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"listWhitelist","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockUpPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"nodeAddress","type":"address"}],"name":"lookup","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"dn","type":"string"},{"internalType":"address","name":"nodeAddress","type":"address"},{"internalType":"uint256","name":"registeredAtBlock","type":"uint256"},{"internalType":"uint256","name":"pingAtBlock","type":"uint256"},{"internalType":"uint256","name":"stake","type":"uint256"},{"internalType":"uint256","name":"lockUpPeriod","type":"uint256"}],"internalType":"struct NodeRegistry.Node","name":"node","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ping","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"publicNodes","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"dn","type":"string"}],"name":"registerPublic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"dn","type":"string"}],"name":"registerWhitelisted","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"registry","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"dn","type":"string"},{"internalType":"address","name":"nodeAddress","type":"address"},{"internalType":"uint256","name":"registeredAtBlock","type":"uint256"},{"internalType":"uint256","name":"pingAtBlock","type":"uint256"},{"internalType":"uint256","name":"stake","type":"uint256"},{"internalType":"uint256","name":"lockUpPeriod","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"nodeAddress","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requiredStakeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unregister","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedNodes","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStake","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5060018055633b9aca006002556103e860035561002b610030565b610109565b61005a7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217753361005d565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166100ff576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556100b73390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610103565b5060005b92915050565b611bdf806101186000396000f3fe6080604052600436106101cd5760003560e01c80637a3226ec116100f7578063a217fddf11610095578063d547741f11610064578063d547741f14610541578063e43252d714610561578063e79a198f14610581578063fb8957331461059657600080fd5b8063a217fddf146104d4578063aa285742146104e9578063bed9d861146104ff578063d4b6b5da1461051457600080fd5b80638da5cb5b116100d15780638da5cb5b1461046157806391d1485414610481578063972fd6d0146104a15780639d1eb974146104b457600080fd5b80637a3226ec146103ff5780637ce3e3da146104215780638ab1d6811461044157600080fd5b806336568abe1161016f5780636c0360eb1161013e5780636c0360eb146103685780636c6925f9146103b45780636e17ed8a146103ca57806375b238fc146103dd57600080fd5b806336568abe146102e65780635341afd81461030657806354ebba121461031b5780635c36b1861461035357600080fd5b8063148700df116101ab578063148700df1461025c578063248a9ca314610271578063253f4050146102af5780632f2ff15d146102c457600080fd5b806301ffc9a7146101d2578063038defd7146102075780630b1e838d1461023a575b600080fd5b3480156101de57600080fd5b506101f26101ed366004611621565b6105b8565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b5061022761022236600461166e565b6105ef565b6040516101fe97969594939291906116cf565b34801561024657600080fd5b5061024f610744565b6040516101fe9190611728565b34801561026857600080fd5b5061024f6107a6565b34801561027d57600080fd5b506102a161028c366004611775565b60009081526020819052604090206001015490565b6040519081526020016101fe565b3480156102bb57600080fd5b506102a1602081565b3480156102d057600080fd5b506102e46102df36600461178e565b610806565b005b3480156102f257600080fd5b506102e461030136600461178e565b610831565b34801561031257600080fd5b506102a1608081565b34801561032757600080fd5b5061033b610336366004611775565b610869565b6040516001600160a01b0390911681526020016101fe565b34801561035f57600080fd5b506102e4610893565b34801561037457600080fd5b50604080518082018252601781527f68747470733a2f2f6d6f64656c65782e61692f6e6f6465000000000000000000602082015290516101fe91906117ba565b3480156103c057600080fd5b506102a160035481565b6102e46103d8366004611870565b610b0c565b3480156103e957600080fd5b506102a1600080516020611b6a83398151915281565b34801561040b57600080fd5b506102a1600080516020611b8a83398151915281565b34801561042d57600080fd5b5061033b61043c366004611775565b610ce4565b34801561044d57600080fd5b506102e461045c36600461166e565b610cf4565b34801561046d57600080fd5b5060045461033b906001600160a01b031681565b34801561048d57600080fd5b506101f261049c36600461178e565b610d24565b6102e46104af366004611870565b610d4d565b3480156104c057600080fd5b506102e46104cf36600461166e565b610f55565b3480156104e057600080fd5b506102a1600081565b3480156104f557600080fd5b506102a160025481565b34801561050b57600080fd5b506102e4610fca565b34801561052057600080fd5b5061053461052f36600461166e565b610fe5565b6040516101fe91906118d4565b34801561054d57600080fd5b506102e461055c36600461178e565b6111b6565b34801561056d57600080fd5b506102e461057c36600461166e565b6111db565b34801561058d57600080fd5b506102e461120b565b3480156105a257600080fd5b506102a1600080516020611b4a83398151915281565b60006001600160e01b03198216637965db0b60e01b14806105e957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60056020526000908152604090208054819061060a90611955565b80601f016020809104026020016040519081016040528092919081815260200182805461063690611955565b80156106835780601f1061065857610100808354040283529160200191610683565b820191906000526020600020905b81548152906001019060200180831161066657829003601f168201915b50505050509080600101805461069890611955565b80601f01602080910402602001604051908101604052809291908181526020018280546106c490611955565b80156107115780601f106106e657610100808354040283529160200191610711565b820191906000526020600020905b8154815290600101906020018083116106f457829003601f168201915b505050600284015460038501546004860154600587015460069097015495966001600160a01b0390931695919450925087565b6060600780548060200260200160405190810160405280929190818152602001828054801561079c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161077e575b5050505050905090565b6060600680548060200260200160405190810160405280929190818152602001828054801561079c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161077e575050505050905090565b60008281526020819052604090206001015461082181611263565b61082b838361126d565b50505050565b6001600160a01b038116331461085a5760405163334bd91960e11b815260040160405180910390fd5b61086482826112ff565b505050565b6007818154811061087957600080fd5b6000918252602090912001546001600160a01b0316905081565b600080516020611b4a8339815191526108ab81611263565b33600090815260056020526040808220815160e081019092528054829082906108d390611955565b80601f01602080910402602001604051908101604052809291908181526020018280546108ff90611955565b801561094c5780601f106109215761010080835404028352916020019161094c565b820191906000526020600020905b81548152906001019060200180831161092f57829003601f168201915b5050505050815260200160018201805461096590611955565b80601f016020809104026020016040519081016040528092919081815260200182805461099190611955565b80156109de5780601f106109b3576101008083540402835291602001916109de565b820191906000526020600020905b8154815290600101906020018083116109c157829003601f168201915b505050918352505060028201546001600160a01b0390811660208301526003830154604080840191909152600484015460608401526005840154608084015260069093015460a0909201919091529082015191925016610a7c5760405162461bcd60e51b81526020600482015260146024820152734e6f6465206e6f7420696e20726567697374727960601b60448201526064015b60405180910390fd5b43608082015233600090815260056020526040902081518291908190610aa290826119df565b5060208201516001820190610ab790826119df565b5060408201516002820180546001600160a01b0319166001600160a01b03909216919091179055606082015160038201556080820151600482015560a0820151600582015560c0909101516006909101555050565b600080516020611b8a833981519152610b2481611263565b602083511115610b765760405162461bcd60e51b815260206004820152601b60248201527f4e616d652065786365656473206d6178696d756d206c656e67746800000000006044820152606401610a73565b602082511115610b985760405162461bcd60e51b8152600401610a7390611a9f565b6040805160e081018252848152602080820185905233828401819052436060840181905260808401523460a084015260035460c0840152600090815260059091529190912081518291908190610bee90826119df565b5060208201516001820190610c0390826119df565b5060408201516002820180546001600160a01b039092166001600160a01b0319928316179055606083015160038301556080830151600483015560a0830151600583015560c090920151600690910155600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801805490911633908117909155610caa90600080516020611b4a8339815191529061126d565b506040513381527f564728e6a7c8edd446557d94e0339d5e6ca2e05f42188914efdbdc87bcbbabf69060200160405180910390a150505050565b6006818154811061087957600080fd5b600080516020611b6a833981519152610d0c81611263565b610864600080516020611b8a833981519152836112ff565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b602082511115610d9f5760405162461bcd60e51b815260206004820152601b60248201527f4e616d652065786365656473206d6178696d756d206c656e67746800000000006044820152606401610a73565b602081511115610dc15760405162461bcd60e51b8152600401610a7390611a9f565b600254341015610e0c5760405162461bcd60e51b8152602060048201526016602482015275125b98dbdc9c9958dd081cdd185ad948185b5bdd5b9d60521b6044820152606401610a73565b6040805160e081018252838152602080820184905233828401819052436060840181905260808401523460a084015260035460c0840152600090815260059091529190912081518291908190610e6290826119df565b5060208201516001820190610e7790826119df565b5060408201516002820180546001600160a01b039092166001600160a01b0319928316179055606083015160038301556080830151600483015560a0830151600583015560c09092015160069182015580546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01805490911633908117909155610f1c90600080516020611b4a8339815191529061126d565b506040513381527f564728e6a7c8edd446557d94e0339d5e6ca2e05f42188914efdbdc87bcbbabf69060200160405180910390a1505050565b610f5d61136a565b600080516020611b6a833981519152610f7581611263565b610f8d600080516020611b8a833981519152336112ff565b50610fa6600080516020611b4a833981519152336112ff565b50610fb2826006611394565b610fbd826007611394565b50610fc760018055565b50565b610fd261136a565b610fda6114f9565b610fe360018055565b565b61102e6040518060e00160405280606081526020016060815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b03821660009081526005602052604090819020815160e0810190925280548290829061106090611955565b80601f016020809104026020016040519081016040528092919081815260200182805461108c90611955565b80156110d95780601f106110ae576101008083540402835291602001916110d9565b820191906000526020600020905b8154815290600101906020018083116110bc57829003601f168201915b505050505081526020016001820180546110f290611955565b80601f016020809104026020016040519081016040528092919081815260200182805461111e90611955565b801561116b5780601f106111405761010080835404028352916020019161116b565b820191906000526020600020905b81548152906001019060200180831161114e57829003601f168201915b505050918352505060028201546001600160a01b0316602082015260038201546040820152600482015460608201526005820154608082015260069091015460a09091015292915050565b6000828152602081905260409020600101546111d181611263565b61082b83836112ff565b600080516020611b6a8339815191526111f381611263565b610864600080516020611b8a8339815191528361126d565b61121361136a565b61121b6114f9565b611233600080516020611b8a833981519152336112ff565b5061124c600080516020611b4a833981519152336112ff565b50611258336006611394565b610fda336007611394565b610fc78133611596565b60006112798383610d24565b6112f7576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556112af3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016105e9565b5060006105e9565b600061130b8383610d24565b156112f7576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016105e9565b60026001540361138d57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b60005b815481101561149357826001600160a01b03168282815481106113bc576113bc611ae1565b6000918252602090912001546001600160a01b03160361148b57815482906113e690600190611b0d565b815481106113f6576113f6611ae1565b9060005260206000200160009054906101000a90046001600160a01b031682828154811061142657611426611ae1565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508180548061146457611464611b20565b600082815260209020810160001990810180546001600160a01b0319169055019055611493565b600101611397565b506001600160a01b0382166000908152600560205260408120906114b782826115d3565b6114c56001830160006115d3565b506002810180546001600160a01b031916905560006003820181905560048201819055600582018190556006909101555050565b600380543360009081526005602052604090209091015461151a9190611b36565b431161155a5760405162461bcd60e51b815260206004820152600f60248201526e14dd185ad9481a5cc81b1bd8dad959608a1b6044820152606401610a73565b33600081815260056020819052604080832090910154905181156108fc0292818181858888f19350505050158015610fc7573d6000803e3d6000fd5b6115a08282610d24565b6115cf5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610a73565b5050565b5080546115df90611955565b6000825580601f106115ef575050565b601f016020900490600052602060002090810190610fc791905b8082111561161d5760008155600101611609565b5090565b60006020828403121561163357600080fd5b81356001600160e01b03198116811461164b57600080fd5b9392505050565b80356001600160a01b038116811461166957600080fd5b919050565b60006020828403121561168057600080fd5b61164b82611652565b6000815180845260005b818110156116af57602081850181015186830182015201611693565b506000602082860101526020601f19601f83011685010191505092915050565b60e0815260006116e260e083018a611689565b82810360208401526116f4818a611689565b6001600160a01b0398909816604084015250506060810194909452608084019290925260a083015260c09091015292915050565b6020808252825182820181905260009190848201906040850190845b818110156117695783516001600160a01b031683529284019291840191600101611744565b50909695505050505050565b60006020828403121561178757600080fd5b5035919050565b600080604083850312156117a157600080fd5b823591506117b160208401611652565b90509250929050565b60208152600061164b6020830184611689565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126117f457600080fd5b813567ffffffffffffffff8082111561180f5761180f6117cd565b604051601f8301601f19908116603f01168101908282118183101715611837576118376117cd565b8160405283815286602085880101111561185057600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561188357600080fd5b823567ffffffffffffffff8082111561189b57600080fd5b6118a7868387016117e3565b935060208501359150808211156118bd57600080fd5b506118ca858286016117e3565b9150509250929050565b602081526000825160e060208401526118f1610100840182611689565b90506020840151601f1984830301604085015261190e8282611689565b91505060018060a01b03604085015116606084015260608401516080840152608084015160a084015260a084015160c084015260c084015160e08401528091505092915050565b600181811c9082168061196957607f821691505b60208210810361198957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610864576000816000526020600020601f850160051c810160208610156119b85750805b601f850160051c820191505b818110156119d7578281556001016119c4565b505050505050565b815167ffffffffffffffff8111156119f9576119f96117cd565b611a0d81611a078454611955565b8461198f565b602080601f831160018114611a425760008415611a2a5750858301515b600019600386901b1c1916600185901b1785556119d7565b600085815260208120601f198616915b82811015611a7157888601518255948401946001909101908401611a52565b5085821015611a8f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526022908201527f446f6d61696e206e616d652065786365656473206d6178696d756d206c656e676040820152610e8d60f31b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156105e9576105e9611af7565b634e487b7160e01b600052603160045260246000fd5b808201808211156105e9576105e9611af756fe57c872046f094b8a493ec5eb6ea374eafbc3c05951e40de3c4302a41f3f127baa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758429d542926e6695b59ac6fbdcd9b37e8b1aeb757afab06ab60b1bb5878c3b49a2646970667358221220a8becd77439d918534516baa9dbfb605665484367ff937d962ccb21bc118e81c64736f6c63430008190033
Deployed Bytecode
0x6080604052600436106101cd5760003560e01c80637a3226ec116100f7578063a217fddf11610095578063d547741f11610064578063d547741f14610541578063e43252d714610561578063e79a198f14610581578063fb8957331461059657600080fd5b8063a217fddf146104d4578063aa285742146104e9578063bed9d861146104ff578063d4b6b5da1461051457600080fd5b80638da5cb5b116100d15780638da5cb5b1461046157806391d1485414610481578063972fd6d0146104a15780639d1eb974146104b457600080fd5b80637a3226ec146103ff5780637ce3e3da146104215780638ab1d6811461044157600080fd5b806336568abe1161016f5780636c0360eb1161013e5780636c0360eb146103685780636c6925f9146103b45780636e17ed8a146103ca57806375b238fc146103dd57600080fd5b806336568abe146102e65780635341afd81461030657806354ebba121461031b5780635c36b1861461035357600080fd5b8063148700df116101ab578063148700df1461025c578063248a9ca314610271578063253f4050146102af5780632f2ff15d146102c457600080fd5b806301ffc9a7146101d2578063038defd7146102075780630b1e838d1461023a575b600080fd5b3480156101de57600080fd5b506101f26101ed366004611621565b6105b8565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b5061022761022236600461166e565b6105ef565b6040516101fe97969594939291906116cf565b34801561024657600080fd5b5061024f610744565b6040516101fe9190611728565b34801561026857600080fd5b5061024f6107a6565b34801561027d57600080fd5b506102a161028c366004611775565b60009081526020819052604090206001015490565b6040519081526020016101fe565b3480156102bb57600080fd5b506102a1602081565b3480156102d057600080fd5b506102e46102df36600461178e565b610806565b005b3480156102f257600080fd5b506102e461030136600461178e565b610831565b34801561031257600080fd5b506102a1608081565b34801561032757600080fd5b5061033b610336366004611775565b610869565b6040516001600160a01b0390911681526020016101fe565b34801561035f57600080fd5b506102e4610893565b34801561037457600080fd5b50604080518082018252601781527f68747470733a2f2f6d6f64656c65782e61692f6e6f6465000000000000000000602082015290516101fe91906117ba565b3480156103c057600080fd5b506102a160035481565b6102e46103d8366004611870565b610b0c565b3480156103e957600080fd5b506102a1600080516020611b6a83398151915281565b34801561040b57600080fd5b506102a1600080516020611b8a83398151915281565b34801561042d57600080fd5b5061033b61043c366004611775565b610ce4565b34801561044d57600080fd5b506102e461045c36600461166e565b610cf4565b34801561046d57600080fd5b5060045461033b906001600160a01b031681565b34801561048d57600080fd5b506101f261049c36600461178e565b610d24565b6102e46104af366004611870565b610d4d565b3480156104c057600080fd5b506102e46104cf36600461166e565b610f55565b3480156104e057600080fd5b506102a1600081565b3480156104f557600080fd5b506102a160025481565b34801561050b57600080fd5b506102e4610fca565b34801561052057600080fd5b5061053461052f36600461166e565b610fe5565b6040516101fe91906118d4565b34801561054d57600080fd5b506102e461055c36600461178e565b6111b6565b34801561056d57600080fd5b506102e461057c36600461166e565b6111db565b34801561058d57600080fd5b506102e461120b565b3480156105a257600080fd5b506102a1600080516020611b4a83398151915281565b60006001600160e01b03198216637965db0b60e01b14806105e957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60056020526000908152604090208054819061060a90611955565b80601f016020809104026020016040519081016040528092919081815260200182805461063690611955565b80156106835780601f1061065857610100808354040283529160200191610683565b820191906000526020600020905b81548152906001019060200180831161066657829003601f168201915b50505050509080600101805461069890611955565b80601f01602080910402602001604051908101604052809291908181526020018280546106c490611955565b80156107115780601f106106e657610100808354040283529160200191610711565b820191906000526020600020905b8154815290600101906020018083116106f457829003601f168201915b505050600284015460038501546004860154600587015460069097015495966001600160a01b0390931695919450925087565b6060600780548060200260200160405190810160405280929190818152602001828054801561079c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161077e575b5050505050905090565b6060600680548060200260200160405190810160405280929190818152602001828054801561079c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161077e575050505050905090565b60008281526020819052604090206001015461082181611263565b61082b838361126d565b50505050565b6001600160a01b038116331461085a5760405163334bd91960e11b815260040160405180910390fd5b61086482826112ff565b505050565b6007818154811061087957600080fd5b6000918252602090912001546001600160a01b0316905081565b600080516020611b4a8339815191526108ab81611263565b33600090815260056020526040808220815160e081019092528054829082906108d390611955565b80601f01602080910402602001604051908101604052809291908181526020018280546108ff90611955565b801561094c5780601f106109215761010080835404028352916020019161094c565b820191906000526020600020905b81548152906001019060200180831161092f57829003601f168201915b5050505050815260200160018201805461096590611955565b80601f016020809104026020016040519081016040528092919081815260200182805461099190611955565b80156109de5780601f106109b3576101008083540402835291602001916109de565b820191906000526020600020905b8154815290600101906020018083116109c157829003601f168201915b505050918352505060028201546001600160a01b0390811660208301526003830154604080840191909152600484015460608401526005840154608084015260069093015460a0909201919091529082015191925016610a7c5760405162461bcd60e51b81526020600482015260146024820152734e6f6465206e6f7420696e20726567697374727960601b60448201526064015b60405180910390fd5b43608082015233600090815260056020526040902081518291908190610aa290826119df565b5060208201516001820190610ab790826119df565b5060408201516002820180546001600160a01b0319166001600160a01b03909216919091179055606082015160038201556080820151600482015560a0820151600582015560c0909101516006909101555050565b600080516020611b8a833981519152610b2481611263565b602083511115610b765760405162461bcd60e51b815260206004820152601b60248201527f4e616d652065786365656473206d6178696d756d206c656e67746800000000006044820152606401610a73565b602082511115610b985760405162461bcd60e51b8152600401610a7390611a9f565b6040805160e081018252848152602080820185905233828401819052436060840181905260808401523460a084015260035460c0840152600090815260059091529190912081518291908190610bee90826119df565b5060208201516001820190610c0390826119df565b5060408201516002820180546001600160a01b039092166001600160a01b0319928316179055606083015160038301556080830151600483015560a0830151600583015560c090920151600690910155600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801805490911633908117909155610caa90600080516020611b4a8339815191529061126d565b506040513381527f564728e6a7c8edd446557d94e0339d5e6ca2e05f42188914efdbdc87bcbbabf69060200160405180910390a150505050565b6006818154811061087957600080fd5b600080516020611b6a833981519152610d0c81611263565b610864600080516020611b8a833981519152836112ff565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b602082511115610d9f5760405162461bcd60e51b815260206004820152601b60248201527f4e616d652065786365656473206d6178696d756d206c656e67746800000000006044820152606401610a73565b602081511115610dc15760405162461bcd60e51b8152600401610a7390611a9f565b600254341015610e0c5760405162461bcd60e51b8152602060048201526016602482015275125b98dbdc9c9958dd081cdd185ad948185b5bdd5b9d60521b6044820152606401610a73565b6040805160e081018252838152602080820184905233828401819052436060840181905260808401523460a084015260035460c0840152600090815260059091529190912081518291908190610e6290826119df565b5060208201516001820190610e7790826119df565b5060408201516002820180546001600160a01b039092166001600160a01b0319928316179055606083015160038301556080830151600483015560a0830151600583015560c09092015160069182015580546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01805490911633908117909155610f1c90600080516020611b4a8339815191529061126d565b506040513381527f564728e6a7c8edd446557d94e0339d5e6ca2e05f42188914efdbdc87bcbbabf69060200160405180910390a1505050565b610f5d61136a565b600080516020611b6a833981519152610f7581611263565b610f8d600080516020611b8a833981519152336112ff565b50610fa6600080516020611b4a833981519152336112ff565b50610fb2826006611394565b610fbd826007611394565b50610fc760018055565b50565b610fd261136a565b610fda6114f9565b610fe360018055565b565b61102e6040518060e00160405280606081526020016060815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b03821660009081526005602052604090819020815160e0810190925280548290829061106090611955565b80601f016020809104026020016040519081016040528092919081815260200182805461108c90611955565b80156110d95780601f106110ae576101008083540402835291602001916110d9565b820191906000526020600020905b8154815290600101906020018083116110bc57829003601f168201915b505050505081526020016001820180546110f290611955565b80601f016020809104026020016040519081016040528092919081815260200182805461111e90611955565b801561116b5780601f106111405761010080835404028352916020019161116b565b820191906000526020600020905b81548152906001019060200180831161114e57829003601f168201915b505050918352505060028201546001600160a01b0316602082015260038201546040820152600482015460608201526005820154608082015260069091015460a09091015292915050565b6000828152602081905260409020600101546111d181611263565b61082b83836112ff565b600080516020611b6a8339815191526111f381611263565b610864600080516020611b8a8339815191528361126d565b61121361136a565b61121b6114f9565b611233600080516020611b8a833981519152336112ff565b5061124c600080516020611b4a833981519152336112ff565b50611258336006611394565b610fda336007611394565b610fc78133611596565b60006112798383610d24565b6112f7576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556112af3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016105e9565b5060006105e9565b600061130b8383610d24565b156112f7576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016105e9565b60026001540361138d57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b60005b815481101561149357826001600160a01b03168282815481106113bc576113bc611ae1565b6000918252602090912001546001600160a01b03160361148b57815482906113e690600190611b0d565b815481106113f6576113f6611ae1565b9060005260206000200160009054906101000a90046001600160a01b031682828154811061142657611426611ae1565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508180548061146457611464611b20565b600082815260209020810160001990810180546001600160a01b0319169055019055611493565b600101611397565b506001600160a01b0382166000908152600560205260408120906114b782826115d3565b6114c56001830160006115d3565b506002810180546001600160a01b031916905560006003820181905560048201819055600582018190556006909101555050565b600380543360009081526005602052604090209091015461151a9190611b36565b431161155a5760405162461bcd60e51b815260206004820152600f60248201526e14dd185ad9481a5cc81b1bd8dad959608a1b6044820152606401610a73565b33600081815260056020819052604080832090910154905181156108fc0292818181858888f19350505050158015610fc7573d6000803e3d6000fd5b6115a08282610d24565b6115cf5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610a73565b5050565b5080546115df90611955565b6000825580601f106115ef575050565b601f016020900490600052602060002090810190610fc791905b8082111561161d5760008155600101611609565b5090565b60006020828403121561163357600080fd5b81356001600160e01b03198116811461164b57600080fd5b9392505050565b80356001600160a01b038116811461166957600080fd5b919050565b60006020828403121561168057600080fd5b61164b82611652565b6000815180845260005b818110156116af57602081850181015186830182015201611693565b506000602082860101526020601f19601f83011685010191505092915050565b60e0815260006116e260e083018a611689565b82810360208401526116f4818a611689565b6001600160a01b0398909816604084015250506060810194909452608084019290925260a083015260c09091015292915050565b6020808252825182820181905260009190848201906040850190845b818110156117695783516001600160a01b031683529284019291840191600101611744565b50909695505050505050565b60006020828403121561178757600080fd5b5035919050565b600080604083850312156117a157600080fd5b823591506117b160208401611652565b90509250929050565b60208152600061164b6020830184611689565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126117f457600080fd5b813567ffffffffffffffff8082111561180f5761180f6117cd565b604051601f8301601f19908116603f01168101908282118183101715611837576118376117cd565b8160405283815286602085880101111561185057600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561188357600080fd5b823567ffffffffffffffff8082111561189b57600080fd5b6118a7868387016117e3565b935060208501359150808211156118bd57600080fd5b506118ca858286016117e3565b9150509250929050565b602081526000825160e060208401526118f1610100840182611689565b90506020840151601f1984830301604085015261190e8282611689565b91505060018060a01b03604085015116606084015260608401516080840152608084015160a084015260a084015160c084015260c084015160e08401528091505092915050565b600181811c9082168061196957607f821691505b60208210810361198957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610864576000816000526020600020601f850160051c810160208610156119b85750805b601f850160051c820191505b818110156119d7578281556001016119c4565b505050505050565b815167ffffffffffffffff8111156119f9576119f96117cd565b611a0d81611a078454611955565b8461198f565b602080601f831160018114611a425760008415611a2a5750858301515b600019600386901b1c1916600185901b1785556119d7565b600085815260208120601f198616915b82811015611a7157888601518255948401946001909101908401611a52565b5085821015611a8f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526022908201527f446f6d61696e206e616d652065786365656473206d6178696d756d206c656e676040820152610e8d60f31b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156105e9576105e9611af7565b634e487b7160e01b600052603160045260246000fd5b808201808211156105e9576105e9611af756fe57c872046f094b8a493ec5eb6ea374eafbc3c05951e40de3c4302a41f3f127baa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758429d542926e6695b59ac6fbdcd9b37e8b1aeb757afab06ab60b1bb5878c3b49a2646970667358221220a8becd77439d918534516baa9dbfb605665484367ff937d962ccb21bc118e81c64736f6c63430008190033
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.