Polygon Sponsored slots available. Book your slot here!
Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
OpeningCeremonyQuest
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity ^0.8.4; // SPDX-License-Identifier: GPL-3.0-or-later import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/access/AccessControl.sol"; /** * Temple opening ceremony contract */ contract OpeningCeremonyQuest is AccessControl { bytes32 public constant CAN_CHANGE_STATE = keccak256("CAN_CHANGE_STATE"); struct QuestData { bytes32 stepWhenLocked; bytes32 stepWhenUnlocked; uint256 lockedUntil; bytes32 enclave; bool completed; } // opening ceremony data from a templar mapping(address => QuestData) public dataOf; // keccak256 encoeded step where caller can set the enclave bytes32 public setEnclaveCondition; // keccak256 encoeded step where caller can mark the quest as complete bytes32 public setCompletedCondition; constructor() { _setupRole(DEFAULT_ADMIN_ROLE, msg.sender); grantRole(CAN_CHANGE_STATE, msg.sender); } function setConditions(bytes32 _setEnclaveCondition, bytes32 _setCompletedCondition) external onlyRole(DEFAULT_ADMIN_ROLE) { setEnclaveCondition = _setEnclaveCondition; setCompletedCondition = _setCompletedCondition; } function setCurrentStep(address templar, bytes32 step) external onlyRole(CAN_CHANGE_STATE) { QuestData storage questData = dataOf[templar]; require(block.timestamp > questData.lockedUntil, "Locked on current step"); dataOf[templar].stepWhenUnlocked = step; } function setCurrentStepWithLock(address templar, bytes32 step, uint256 lockDurationSeconds, bytes32 stepWhenUnlocked) external onlyRole(CAN_CHANGE_STATE) { QuestData storage questData = dataOf[templar]; require(block.timestamp > questData.lockedUntil, "Locked on current step"); dataOf[templar].stepWhenLocked = step; dataOf[templar].stepWhenUnlocked = stepWhenUnlocked; dataOf[templar].lockedUntil = block.timestamp + lockDurationSeconds; } function setEnclave(address templar, bytes32 enclave) external onlyRole(CAN_CHANGE_STATE) { require( keccak256(abi.encode(getCurrentStep(templar))) == setEnclaveCondition && dataOf[templar].enclave == "", "Cannot set enclave at current quest step"); dataOf[templar].enclave = enclave; } function setCompleted(address templar) external onlyRole(CAN_CHANGE_STATE) { require(keccak256(abi.encode(getCurrentStep(templar))) == setCompletedCondition, "Cannot set quest as completed at current step"); dataOf[templar].completed = true; } /** Owner only method to udpate any/all user quest data if required by enclave of order to support questers */ function overrideUserData(address templar, QuestData memory data) external onlyRole(DEFAULT_ADMIN_ROLE) { dataOf[templar] = data; } /** Owner only method to remove a lock for a given user (to speed up testing) */ function removeLock(address templar) external onlyRole(DEFAULT_ADMIN_ROLE) { dataOf[templar].lockedUntil = 0; } function getCurrentStep(address templar) public view returns(bytes32) { QuestData storage questData = dataOf[templar]; if (block.timestamp < questData.lockedUntil) { return questData.stepWhenLocked; } else { return questData.stepWhenUnlocked; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IAccessControl.sol"; import "../utils/Context.sol"; import "../utils/Strings.sol"; import "../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: * * ``` * 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}: * * ``` * 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. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @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 override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @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 override 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. */ function grantRole(bytes32 role, address account) public virtual override 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. */ function revokeRole(bytes32 role, address account) public virtual override 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 granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @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); } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @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. * * _Available since v3.1._ */ 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 `account`. */ function renounceRole(bytes32 role, address account) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"CAN_CHANGE_STATE","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":[{"internalType":"address","name":"","type":"address"}],"name":"dataOf","outputs":[{"internalType":"bytes32","name":"stepWhenLocked","type":"bytes32"},{"internalType":"bytes32","name":"stepWhenUnlocked","type":"bytes32"},{"internalType":"uint256","name":"lockedUntil","type":"uint256"},{"internalType":"bytes32","name":"enclave","type":"bytes32"},{"internalType":"bool","name":"completed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"templar","type":"address"}],"name":"getCurrentStep","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"templar","type":"address"},{"components":[{"internalType":"bytes32","name":"stepWhenLocked","type":"bytes32"},{"internalType":"bytes32","name":"stepWhenUnlocked","type":"bytes32"},{"internalType":"uint256","name":"lockedUntil","type":"uint256"},{"internalType":"bytes32","name":"enclave","type":"bytes32"},{"internalType":"bool","name":"completed","type":"bool"}],"internalType":"struct OpeningCeremonyQuest.QuestData","name":"data","type":"tuple"}],"name":"overrideUserData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"templar","type":"address"}],"name":"removeLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"templar","type":"address"}],"name":"setCompleted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setCompletedCondition","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_setEnclaveCondition","type":"bytes32"},{"internalType":"bytes32","name":"_setCompletedCondition","type":"bytes32"}],"name":"setConditions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"templar","type":"address"},{"internalType":"bytes32","name":"step","type":"bytes32"}],"name":"setCurrentStep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"templar","type":"address"},{"internalType":"bytes32","name":"step","type":"bytes32"},{"internalType":"uint256","name":"lockDurationSeconds","type":"uint256"},{"internalType":"bytes32","name":"stepWhenUnlocked","type":"bytes32"}],"name":"setCurrentStepWithLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"templar","type":"address"},{"internalType":"bytes32","name":"enclave","type":"bytes32"}],"name":"setEnclave","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setEnclaveCondition","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50620000276000801b336200005f60201b60201c565b620000597f1ee6eceadad6b1bcc072a88134ae057441bd9cb5c59bd0552375b0d6dc01249d336200007560201b60201c565b62000997565b620000718282620000be60201b60201c565b5050565b6200008682620001af60201b60201c565b620000a7816200009b620001ce60201b60201c565b620001d660201b60201c565b620000b98383620000be60201b60201c565b505050565b620000d082826200029a60201b60201c565b620001ab57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000150620001ce60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000806000838152602001908152602001600020600101549050919050565b600033905090565b620001e882826200029a60201b60201c565b62000296576200021b8173ffffffffffffffffffffffffffffffffffffffff1660146200030460201b62000c801760201c565b620002368360001c60206200030460201b62000c801760201c565b6040516020016200024992919062000700565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200028d919062000742565b60405180910390fd5b5050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600060028360026200031991906200080c565b620003259190620007af565b67ffffffffffffffff81111562000365577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015620003985781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110620003f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811062000482577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002620004c491906200080c565b620004d09190620007af565b90505b6001811115620005c2577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106200053a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b82828151811062000578577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080620005ba90620008ad565b9050620004d3565b506000841462000609576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006009062000766565b60405180910390fd5b8091505092915050565b6000620006208262000788565b6200062c818562000793565b93506200063e81856020860162000877565b62000649816200090b565b840191505092915050565b6000620006618262000788565b6200066d8185620007a4565b93506200067f81856020860162000877565b80840191505092915050565b60006200069a60208362000793565b9150620006a7826200091c565b602082019050919050565b6000620006c1601783620007a4565b9150620006ce8262000945565b601782019050919050565b6000620006e8601183620007a4565b9150620006f5826200096e565b601182019050919050565b60006200070d82620006b2565b91506200071b828562000654565b91506200072882620006d9565b915062000736828462000654565b91508190509392505050565b600060208201905081810360008301526200075e818462000613565b905092915050565b6000602082019050818103600083015262000781816200068b565b9050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000620007bc826200086d565b9150620007c9836200086d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620008015762000800620008dc565b5b828201905092915050565b600062000819826200086d565b915062000826836200086d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620008625762000861620008dc565b5b828202905092915050565b6000819050919050565b60005b83811015620008975780820151818401526020810190506200087a565b83811115620008a7576000848401525b50505050565b6000620008ba826200086d565b91506000821415620008d157620008d0620008dc565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b611ccb80620009a76000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063734c7055116100ad578063a217fddf11610071578063a217fddf14610302578063b6bd4ee514610320578063bb3d45621461033c578063bd1ff13e14610370578063d547741f1461038e57610121565b8063734c70551461025e57806374fc3f8d1461027a5780638104c78f1461029857806391946932146102b457806391d14854146102d257610121565b80632f2ff15d116100f45780632f2ff15d146101d257806336568abe146101ee578063393a3f291461020a5780634a387bef14610226578063682844b11461024257610121565b806301ffc9a714610126578063248a9ca314610156578063285a08f2146101865780632e9b959d146101b6575b600080fd5b610140600480360381019061013b91906114e0565b6103aa565b60405161014d91906116cf565b60405180910390f35b610170600480360381019061016b919061143f565b610424565b60405161017d91906116ea565b60405180910390f35b6101a0600480360381019061019b919061133b565b610443565b6040516101ad91906116ea565b60405180910390f35b6101d060048036038101906101cb91906113a0565b6104ae565b005b6101ec60048036038101906101e79190611468565b610651565b005b61020860048036038101906102039190611468565b61067a565b005b610224600480360381019061021f9190611364565b6106fd565b005b610240600480360381019061023b919061133b565b610805565b005b61025c60048036038101906102579190611403565b610866565b005b61027860048036038101906102739190611364565b61090b565b005b610282610a49565b60405161028f91906116ea565b60405180910390f35b6102b260048036038101906102ad919061133b565b610a6d565b005b6102bc610b6f565b6040516102c991906116ea565b60405180910390f35b6102ec60048036038101906102e79190611468565b610b75565b6040516102f991906116cf565b60405180910390f35b61030a610bdf565b60405161031791906116ea565b60405180910390f35b61033a600480360381019061033591906114a4565b610be6565b005b6103566004803603810190610351919061133b565b610c0e565b604051610367959493929190611705565b60405180910390f35b610378610c51565b60405161038591906116ea565b60405180910390f35b6103a860048036038101906103a39190611468565b610c57565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061041d575061041c82610f7a565b5b9050919050565b6000806000838152602001908152602001600020600101549050919050565b600080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600201544210156104a05780600001549150506104a9565b80600101549150505b919050565b7f1ee6eceadad6b1bcc072a88134ae057441bd9cb5c59bd0552375b0d6dc01249d6104e0816104db610fe4565b610fec565b6000600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600201544211610569576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610560906117fa565b60405180910390fd5b84600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555082600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555083426106039190611866565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550505050505050565b61065a82610424565b61066b81610666610fe4565b610fec565b6106758383611089565b505050565b610682610fe4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e6906117da565b60405180910390fd5b6106f98282611169565b5050565b7f1ee6eceadad6b1bcc072a88134ae057441bd9cb5c59bd0552375b0d6dc01249d61072f8161072a610fe4565b610fec565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806002015442116107b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107af906117fa565b60405180910390fd5b82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555050505050565b6000801b61081a81610815610fe4565b610fec565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055505050565b6000801b61087b81610876610fe4565b610fec565b81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548160ff021916908315150217905550905050505050565b7f1ee6eceadad6b1bcc072a88134ae057441bd9cb5c59bd0552375b0d6dc01249d61093d81610938610fe4565b610fec565b60025461094984610443565b60405160200161095991906116ea565b604051602081830303815290604052805190602001201480156109be57506000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154145b6109fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f49061179a565b60405180910390fd5b81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550505050565b7f1ee6eceadad6b1bcc072a88134ae057441bd9cb5c59bd0552375b0d6dc01249d81565b7f1ee6eceadad6b1bcc072a88134ae057441bd9cb5c59bd0552375b0d6dc01249d610a9f81610a9a610fe4565b610fec565b600354610aab83610443565b604051602001610abb91906116ea565b6040516020818303038152906040528051906020012014610b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b08906117ba565b60405180910390fd5b60018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160006101000a81548160ff0219169083151502179055505050565b60035481565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b81565b6000801b610bfb81610bf6610fe4565b610fec565b8260028190555081600381905550505050565b60016020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040160009054906101000a900460ff16905085565b60025481565b610c6082610424565b610c7181610c6c610fe4565b610fec565b610c7b8383611169565b505050565b606060006002836002610c9391906118bc565b610c9d9190611866565b67ffffffffffffffff811115610cdc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610d0e5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110610d6c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110610df6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002610e3691906118bc565b610e409190611866565b90505b6001811115610f2c577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110610ee5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080610f25906119c7565b9050610e43565b5060008414610f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f679061177a565b60405180910390fd5b8091505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b610ff68282610b75565b6110855761101b8173ffffffffffffffffffffffffffffffffffffffff166014610c80565b6110298360001c6020610c80565b60405160200161103a929190611695565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107c9190611758565b60405180910390fd5b5050565b6110938282610b75565b61116557600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061110a610fe4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6111738282610b75565b1561124657600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506111eb610fe4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60008135905061125981611c22565b92915050565b60008135905061126e81611c39565b92915050565b60008135905061128381611c50565b92915050565b60008135905061129881611c67565b92915050565b600060a082840312156112b057600080fd5b6112ba60a061181a565b905060006112ca84828501611274565b60008301525060206112de84828501611274565b60208301525060406112f284828501611326565b604083015250606061130684828501611274565b606083015250608061131a8482850161125f565b60808301525092915050565b60008135905061133581611c7e565b92915050565b60006020828403121561134d57600080fd5b600061135b8482850161124a565b91505092915050565b6000806040838503121561137757600080fd5b60006113858582860161124a565b925050602061139685828601611274565b9150509250929050565b600080600080608085870312156113b657600080fd5b60006113c48782880161124a565b94505060206113d587828801611274565b93505060406113e687828801611326565b92505060606113f787828801611274565b91505092959194509250565b60008060c0838503121561141657600080fd5b60006114248582860161124a565b92505060206114358582860161129e565b9150509250929050565b60006020828403121561145157600080fd5b600061145f84828501611274565b91505092915050565b6000806040838503121561147b57600080fd5b600061148985828601611274565b925050602061149a8582860161124a565b9150509250929050565b600080604083850312156114b757600080fd5b60006114c585828601611274565b92505060206114d685828601611274565b9150509250929050565b6000602082840312156114f257600080fd5b600061150084828501611289565b91505092915050565b61151281611928565b82525050565b61152181611934565b82525050565b60006115328261183f565b61153c818561184a565b935061154c818560208601611994565b61155581611a80565b840191505092915050565b600061156b8261183f565b611575818561185b565b9350611585818560208601611994565b80840191505092915050565b600061159e60208361184a565b91506115a982611a91565b602082019050919050565b60006115c160288361184a565b91506115cc82611aba565b604082019050919050565b60006115e4602d8361184a565b91506115ef82611b09565b604082019050919050565b600061160760178361185b565b915061161282611b58565b601782019050919050565b600061162a60118361185b565b915061163582611b81565b601182019050919050565b600061164d602f8361184a565b915061165882611baa565b604082019050919050565b600061167060168361184a565b915061167b82611bf9565b602082019050919050565b61168f8161198a565b82525050565b60006116a0826115fa565b91506116ac8285611560565b91506116b78261161d565b91506116c38284611560565b91508190509392505050565b60006020820190506116e46000830184611509565b92915050565b60006020820190506116ff6000830184611518565b92915050565b600060a08201905061171a6000830188611518565b6117276020830187611518565b6117346040830186611686565b6117416060830185611518565b61174e6080830184611509565b9695505050505050565b600060208201905081810360008301526117728184611527565b905092915050565b6000602082019050818103600083015261179381611591565b9050919050565b600060208201905081810360008301526117b3816115b4565b9050919050565b600060208201905081810360008301526117d3816115d7565b9050919050565b600060208201905081810360008301526117f381611640565b9050919050565b6000602082019050818103600083015261181381611663565b9050919050565b6000611824611835565b905061183082826119f1565b919050565b6000604051905090565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b60006118718261198a565b915061187c8361198a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156118b1576118b0611a22565b5b828201905092915050565b60006118c78261198a565b91506118d28361198a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561190b5761190a611a22565b5b828202905092915050565b60006119218261196a565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156119b2578082015181840152602081019050611997565b838111156119c1576000848401525b50505050565b60006119d28261198a565b915060008214156119e6576119e5611a22565b5b600182039050919050565b6119fa82611a80565b810181811067ffffffffffffffff82111715611a1957611a18611a51565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f43616e6e6f742073657420656e636c6176652061742063757272656e7420717560008201527f6573742073746570000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742073657420717565737420617320636f6d706c6574656420617460008201527f2063757272656e74207374657000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f4c6f636b6564206f6e2063757272656e74207374657000000000000000000000600082015250565b611c2b81611916565b8114611c3657600080fd5b50565b611c4281611928565b8114611c4d57600080fd5b50565b611c5981611934565b8114611c6457600080fd5b50565b611c708161193e565b8114611c7b57600080fd5b50565b611c878161198a565b8114611c9257600080fd5b5056fea2646970667358221220218abf98b52b42fcb4575baed6425dd9c99f5e8a6312ab067a0db62e15a5859364736f6c63430008040033
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.