Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0xb4ebbb59cf80b7cd7cb97cf4e3424af05f44c79f533d0e0bece91cd81096b971 | 20208514 | 599 days 8 hrs ago | 0xf33dce7f829157500a5351475384d54e45c7aff6 | Contract Creation | 0 MATIC |
[ Download CSV Export ]
Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x47373472cc70815216dF914F7744C132DB944e6D
Contract Name:
TutellusHoldersVault
Compiler Version
v0.8.2+commit.661d1103
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; import "./interfaces/ITutellusERC20.sol"; import "./utils/AccessControlProxyPausable.sol"; contract TutellusHoldersVault is AccessControlProxyPausable { address public token; uint private _startBlock; uint private _endBlock; uint256 private _limit; uint256 private _minted; mapping(address=>uint256) public distributed; mapping(address=>uint256) public allocated; event Update(address account); event Distribute(address sender, address account, uint256 amount); event Add(address holder, uint256 allocated); event AddBatch(uint256 length); event Init(uint startBlock, uint endBlock, uint256 limit); constructor(address rolemanager, address token_, uint256 limit, uint256 startBlock_, uint endBlock_) { require(endBlock_ > startBlock_, "TutellusHoldersVault: start block exceeds end block"); __TutellusHoldersVault_init(rolemanager, token_, limit, startBlock_, endBlock_); } function __TutellusHoldersVault_init(address rolemanager, address token_, uint256 limit, uint256 startBlock_, uint endBlock_) internal initializer { __AccessControlProxyPausable_init(rolemanager); __TutellusHoldersVault_init_unchained(token_, limit, startBlock_, endBlock_); } function __TutellusHoldersVault_init_unchained(address token_, uint256 limit, uint256 startBlock_, uint endBlock_) internal initializer { token = token_; _limit = limit; _startBlock = startBlock_; _endBlock = endBlock_; emit Init(_startBlock, _endBlock, limit); } function released(address account) public view returns(uint256) { uint current = block.number; if (current > _endBlock) { return allocated[account]; } else if (current < _startBlock) { return 0; } else { uint blocks = current - _startBlock; return allocated[account] * blocks / (_endBlock - _startBlock); } } function available(address account) public view returns(uint256) { return released(account) - distributed[account]; } function distribute(address account) public whenNotPaused { ITutellusERC20 tokenInterface = ITutellusERC20(token); uint256 amount = available(account); require(amount > 0, "TutellusHoldersVault: no available tokens"); distributed[account] += amount; tokenInterface.transfer(account, amount); emit Distribute(msg.sender, account, amount); } function claim() public { address account = msg.sender; distribute(account); } function addBatch(address[] memory account, uint256[] memory allocated_) public onlyRole(DEFAULT_ADMIN_ROLE) { require(account.length == allocated_.length, 'TutellusHoldersVault: length must be the same'); require(account.length != 0, 'TutellusHoldersVault: length cannot be null'); uint256 length = account.length; for(uint256 i=0; i< account.length; i++) { add(account[i], allocated_[i]); } emit AddBatch(length); } function add(address account, uint256 allocated_) public onlyRole(DEFAULT_ADMIN_ROLE) { require(allocated_ > 0, "TutellusHoldersVault: cannot mint 0 tokens"); _minted += allocated_; require(_minted <= _limit, "TutellusHoldersVault: minted exceeds limit"); allocated[account] += allocated_; ITutellusERC20 tokenInterface = ITutellusERC20(token); tokenInterface.mint(address(this), allocated_); emit Add(account, allocated_); } }
// SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; interface ITutellusERC20 { /** * @dev Returns the amount of tokens burned. */ function burned() external view returns (uint256); /** * @dev Mints `amount` tokens to `account`. */ function mint(address account, uint256 amount) external; /** * @dev Burns `amount` tokens. */ function burn(uint256 amount) external; /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; import "@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol"; abstract contract AccessControlProxyPausable is PausableUpgradeable { address private _manager; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); modifier onlyRole(bytes32 role) { address account = msg.sender; require(hasRole(role, account), string( abi.encodePacked( "AccessControlProxyPausable: account ", StringsUpgradeable.toHexString(uint160(account), 20), " is missing role ", StringsUpgradeable.toHexString(uint256(role), 32) ) )); _; } function hasRole(bytes32 role, address account) public view returns (bool) { IAccessControlUpgradeable manager = IAccessControlUpgradeable(_manager); return manager.hasRole(role, account); } function __AccessControlProxyPausable_init(address manager) internal initializer { __Pausable_init(); __AccessControlProxyPausable_init_unchained(manager); } function __AccessControlProxyPausable_init_unchained(address manager) internal initializer { _manager = manager; } function pause() public onlyRole(PAUSER_ROLE){ _pause(); } function unpause() public onlyRole(PAUSER_ROLE){ _unpause(); } function updateManager(address manager) public onlyRole(DEFAULT_ADMIN_ROLE) { _manager = manager; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControlUpgradeable { /** * @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; import "../utils/ContextUpgradeable.sol"; import "../proxy/utils/Initializable.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract PausableUpgradeable is Initializable, ContextUpgradeable { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ function __Pausable_init() internal initializer { __Context_init_unchained(); __Pausable_init_unchained(); } function __Pausable_init_unchained() internal initializer { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } uint256[49] private __gap; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library StringsUpgradeable { 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 "../proxy/utils/Initializable.sol"; /** * @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 ContextUpgradeable is Initializable { function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } uint256[50] private __gap; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { require(_initializing || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"rolemanager","type":"address"},{"internalType":"address","name":"token_","type":"address"},{"internalType":"uint256","name":"limit","type":"uint256"},{"internalType":"uint256","name":"startBlock_","type":"uint256"},{"internalType":"uint256","name":"endBlock_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"allocated","type":"uint256"}],"name":"Add","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"length","type":"uint256"}],"name":"AddBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Distribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"startBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"limit","type":"uint256"}],"name":"Init","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Update","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"allocated_","type":"uint256"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"account","type":"address[]"},{"internalType":"uint256[]","name":"allocated_","type":"uint256[]"}],"name":"addBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allocated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"available","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"distributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"updateManager","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002b5838038062002b58833981810160405281019062000037919062000847565b8181116200007c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000739062000928565b60405180910390fd5b6200009185858585856200009c60201b60201c565b505050505062000aca565b600060019054906101000a900460ff1680620000c3575060008054906101000a900460ff16155b62000105576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000fc906200094a565b60405180910390fd5b60008060019054906101000a900460ff16159050801562000156576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6200016786620001a560201b60201c565b6200017b85858585620002a660201b60201c565b80156200019d5760008060016101000a81548160ff0219169083151502179055505b505050505050565b600060019054906101000a900460ff1680620001cc575060008054906101000a900460ff16155b6200020e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000205906200094a565b60405180910390fd5b60008060019054906101000a900460ff1615905080156200025f576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6200026f6200042060201b60201c565b62000280826200051f60201b60201c565b8015620002a25760008060016101000a81548160ff0219169083151502179055505b5050565b600060019054906101000a900460ff1680620002cd575060008054906101000a900460ff16155b6200030f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000306906200094a565b60405180910390fd5b60008060019054906101000a900460ff16159050801562000360576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b84606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360698190555082606781905550816068819055507ff1bd4f3fcb4e0b193abc7e4002c0284e25086269a02de2e4c52045a91f64703760675460685486604051620003ef939291906200096c565b60405180910390a18015620004195760008060016101000a81548160ff0219169083151502179055505b5050505050565b600060019054906101000a900460ff168062000447575060008054906101000a900460ff16155b62000489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000480906200094a565b60405180910390fd5b60008060019054906101000a900460ff161590508015620004da576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620004ea6200064060201b60201c565b620004fa6200071f60201b60201c565b80156200051c5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff168062000546575060008054906101000a900460ff16155b62000588576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200057f906200094a565b60405180910390fd5b60008060019054906101000a900460ff161590508015620005d9576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b81606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080156200063c5760008060016101000a81548160ff0219169083151502179055505b5050565b600060019054906101000a900460ff168062000667575060008054906101000a900460ff16155b620006a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006a0906200094a565b60405180910390fd5b60008060019054906101000a900460ff161590508015620006fa576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b80156200071c5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff168062000746575060008054906101000a900460ff16155b62000788576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200077f906200094a565b60405180910390fd5b60008060019054906101000a900460ff161590508015620007d9576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6000603360006101000a81548160ff0219169083151502179055508015620008165760008060016101000a81548160ff0219169083151502179055505b50565b6000815190506200082a8162000a96565b92915050565b600081519050620008418162000ab0565b92915050565b600080600080600060a086880312156200086057600080fd5b6000620008708882890162000819565b9550506020620008838882890162000819565b9450506040620008968882890162000830565b9350506060620008a98882890162000830565b9250506080620008bc8882890162000830565b9150509295509295909350565b6000620008d8603383620009a9565b9150620008e582620009f8565b604082019050919050565b6000620008ff602e83620009a9565b91506200090c8262000a47565b604082019050919050565b6200092281620009ee565b82525050565b600060208201905081810360008301526200094381620008c9565b9050919050565b600060208201905081810360008301526200096581620008f0565b9050919050565b600060608201905062000983600083018662000917565b62000992602083018562000917565b620009a1604083018462000917565b949350505050565b600082825260208201905092915050565b6000620009c782620009ce565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b7f547574656c6c7573486f6c646572735661756c743a20737461727420626c6f6360008201527f6b206578636565647320656e6420626c6f636b00000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b62000aa181620009ba565b811462000aad57600080fd5b50565b62000abb81620009ee565b811462000ac757600080fd5b50565b61207e8062000ada6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806363453ae111610097578063a217fddf11610066578063a217fddf14610285578063e63ab1e9146102a3578063f5d82b6b146102c1578063fc0c546a146102dd57610100565b806363453ae1146101ff5780638456cb591461021b57806391d14854146102255780639852595c1461025557610100565b80634e71d92d116100d35780634e71d92d1461018b578063578bcf351461019557806358aba00f146101c55780635c975abb146101e157610100565b80630d12cc681461010557806310098ad5146101215780633f4ba83a146101515780634225e5bb1461015b575b600080fd5b61011f600480360381019061011a91906114c8565b6102fb565b005b61013b60048036038101906101369190611463565b610516565b60405161014891906119d3565b60405180910390f35b610159610572565b005b61017560048036038101906101709190611463565b61063f565b60405161018291906119d3565b60405180910390f35b610193610657565b005b6101af60048036038101906101aa9190611463565b610668565b6040516101bc91906119d3565b60405180910390f35b6101df60048036038101906101da9190611463565b610680565b005b6101e961076a565b6040516101f69190611852565b60405180910390f35b61021960048036038101906102149190611463565b610781565b005b610223610964565b005b61023f600480360381019061023a919061155d565b610a31565b60405161024c9190611852565b60405180910390f35b61026f600480360381019061026a9190611463565b610aed565b60405161027c91906119d3565b60405180910390f35b61028d610bda565b60405161029a919061186d565b60405180910390f35b6102ab610be1565b6040516102b8919061186d565b60405180910390f35b6102db60048036038101906102d6919061148c565b610c05565b005b6102e5610e76565b6040516102f291906117d7565b60405180910390f35b6000801b600033905061030e8282610a31565b61032f8273ffffffffffffffffffffffffffffffffffffffff166014610e9c565b61033d8460001c6020610e9c565b60405160200161034e92919061179d565b6040516020818303038152906040529061039e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039591906118b1565b60405180910390fd5b5082518451146103e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103da90611993565b60405180910390fd5b600084511415610428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041f90611913565b60405180910390fd5b60008451905060005b85518110156104d7576104c4868281518110610476577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518683815181106104b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610c05565b80806104cf90611c87565b915050610431565b507fe351c81cda952efe4c68a918ba81ae9e5c09180bd25019fcd5d971e1050fbb888160405161050791906119d3565b60405180910390a15050505050565b6000606b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461056183610aed565b61056b9190611b73565b9050919050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60003390506105a28282610a31565b6105c38273ffffffffffffffffffffffffffffffffffffffff166014610e9c565b6105d18460001c6020610e9c565b6040516020016105e292919061179d565b60405160208183030381529060405290610632576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062991906118b1565b60405180910390fd5b5061063b611196565b5050565b606c6020528060005260406000206000915090505481565b600033905061066581610781565b50565b606b6020528060005260406000206000915090505481565b6000801b60003390506106938282610a31565b6106b48273ffffffffffffffffffffffffffffffffffffffff166014610e9c565b6106c28460001c6020610e9c565b6040516020016106d392919061179d565b60405160208183030381529060405290610723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071a91906118b1565b60405180910390fd5b5082606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000603360009054906101000a900460ff16905090565b61078961076a565b156107c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c090611973565b60405180910390fd5b6000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060006107fb83610516565b905060008111610840576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610837906119b3565b60405180910390fd5b80606b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461088f9190611a92565b925050819055508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b81526004016108d1929190611829565b602060405180830381600087803b1580156108eb57600080fd5b505af11580156108ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109239190611534565b507fafdc1eb311d58306e249917b5ca0044a827a66f0ec535c334d63372c4055d364338483604051610957939291906117f2565b60405180910390a1505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60003390506109948282610a31565b6109b58273ffffffffffffffffffffffffffffffffffffffff166014610e9c565b6109c38460001c6020610e9c565b6040516020016109d492919061179d565b60405160208183030381529060405290610a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1b91906118b1565b60405180910390fd5b50610a2d611238565b5050565b600080606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166391d1485485856040518363ffffffff1660e01b8152600401610a94929190611888565b60206040518083038186803b158015610aac57600080fd5b505afa158015610ac0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae49190611534565b91505092915050565b600080439050606854811115610b4557606c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915050610bd5565b606754811015610b59576000915050610bd5565b600060675482610b699190611b73565b9050606754606854610b7b9190611b73565b81606c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bc69190611b19565b610bd09190611ae8565b925050505b919050565b6000801b81565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6000801b6000339050610c188282610a31565b610c398273ffffffffffffffffffffffffffffffffffffffff166014610e9c565b610c478460001c6020610e9c565b604051602001610c5892919061179d565b60405160208183030381529060405290610ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9f91906118b1565b60405180910390fd5b5060008311610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce390611953565b60405180910390fd5b82606a6000828254610cfe9190611a92565b92505081905550606954606a541115610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4390611933565b60405180910390fd5b82606c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d9b9190611a92565b925050819055506000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166340c10f1930866040518363ffffffff1660e01b8152600401610e04929190611829565b600060405180830381600087803b158015610e1e57600080fd5b505af1158015610e32573d6000803e3d6000fd5b505050507f2728c9d3205d667bbc0eefdfeda366261b4d021949630c047f3e5834b30611ab8585604051610e67929190611829565b60405180910390a15050505050565b606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060006002836002610eaf9190611b19565b610eb99190611a92565b67ffffffffffffffff811115610ef8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610f2a5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110610f88577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611012577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026110529190611b19565b61105c9190611a92565b90505b6001811115611148577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106110c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110611101577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061114190611c2c565b905061105f565b506000841461118c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611183906118d3565b60405180910390fd5b8091505092915050565b61119e61076a565b6111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d4906118f3565b60405180910390fd5b6000603360006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6112216112db565b60405161122e91906117d7565b60405180910390a1565b61124061076a565b15611280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127790611973565b60405180910390fd5b6001603360006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112c46112db565b6040516112d191906117d7565b60405180910390a1565b600033905090565b60006112f66112f184611a13565b6119ee565b9050808382526020820190508285602086028201111561131557600080fd5b60005b85811015611345578161132b88826113bb565b845260208401935060208301925050600181019050611318565b5050509392505050565b600061136261135d84611a3f565b6119ee565b9050808382526020820190508285602086028201111561138157600080fd5b60005b858110156113b15781611397888261144e565b845260208401935060208301925050600181019050611384565b5050509392505050565b6000813590506113ca81611fec565b92915050565b600082601f8301126113e157600080fd5b81356113f18482602086016112e3565b91505092915050565b600082601f83011261140b57600080fd5b813561141b84826020860161134f565b91505092915050565b60008151905061143381612003565b92915050565b6000813590506114488161201a565b92915050565b60008135905061145d81612031565b92915050565b60006020828403121561147557600080fd5b6000611483848285016113bb565b91505092915050565b6000806040838503121561149f57600080fd5b60006114ad858286016113bb565b92505060206114be8582860161144e565b9150509250929050565b600080604083850312156114db57600080fd5b600083013567ffffffffffffffff8111156114f557600080fd5b611501858286016113d0565b925050602083013567ffffffffffffffff81111561151e57600080fd5b61152a858286016113fa565b9150509250929050565b60006020828403121561154657600080fd5b600061155484828501611424565b91505092915050565b6000806040838503121561157057600080fd5b600061157e85828601611439565b925050602061158f858286016113bb565b9150509250929050565b6115a281611ba7565b82525050565b6115b181611bb9565b82525050565b6115c081611bc5565b82525050565b60006115d182611a6b565b6115db8185611a76565b93506115eb818560208601611bf9565b6115f481611d5d565b840191505092915050565b600061160a82611a6b565b6116148185611a87565b9350611624818560208601611bf9565b80840191505092915050565b600061163d602083611a76565b915061164882611d6e565b602082019050919050565b6000611660602483611a87565b915061166b82611d97565b602482019050919050565b6000611683601483611a76565b915061168e82611de6565b602082019050919050565b60006116a6602b83611a76565b91506116b182611e0f565b604082019050919050565b60006116c9602a83611a76565b91506116d482611e5e565b604082019050919050565b60006116ec602a83611a76565b91506116f782611ead565b604082019050919050565b600061170f601083611a76565b915061171a82611efc565b602082019050919050565b6000611732602d83611a76565b915061173d82611f25565b604082019050919050565b6000611755602983611a76565b915061176082611f74565b604082019050919050565b6000611778601183611a87565b915061178382611fc3565b601182019050919050565b61179781611bef565b82525050565b60006117a882611653565b91506117b482856115ff565b91506117bf8261176b565b91506117cb82846115ff565b91508190509392505050565b60006020820190506117ec6000830184611599565b92915050565b60006060820190506118076000830186611599565b6118146020830185611599565b611821604083018461178e565b949350505050565b600060408201905061183e6000830185611599565b61184b602083018461178e565b9392505050565b600060208201905061186760008301846115a8565b92915050565b600060208201905061188260008301846115b7565b92915050565b600060408201905061189d60008301856115b7565b6118aa6020830184611599565b9392505050565b600060208201905081810360008301526118cb81846115c6565b905092915050565b600060208201905081810360008301526118ec81611630565b9050919050565b6000602082019050818103600083015261190c81611676565b9050919050565b6000602082019050818103600083015261192c81611699565b9050919050565b6000602082019050818103600083015261194c816116bc565b9050919050565b6000602082019050818103600083015261196c816116df565b9050919050565b6000602082019050818103600083015261198c81611702565b9050919050565b600060208201905081810360008301526119ac81611725565b9050919050565b600060208201905081810360008301526119cc81611748565b9050919050565b60006020820190506119e8600083018461178e565b92915050565b60006119f8611a09565b9050611a048282611c56565b919050565b6000604051905090565b600067ffffffffffffffff821115611a2e57611a2d611d2e565b5b602082029050602081019050919050565b600067ffffffffffffffff821115611a5a57611a59611d2e565b5b602082029050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000611a9d82611bef565b9150611aa883611bef565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611add57611adc611cd0565b5b828201905092915050565b6000611af382611bef565b9150611afe83611bef565b925082611b0e57611b0d611cff565b5b828204905092915050565b6000611b2482611bef565b9150611b2f83611bef565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611b6857611b67611cd0565b5b828202905092915050565b6000611b7e82611bef565b9150611b8983611bef565b925082821015611b9c57611b9b611cd0565b5b828203905092915050565b6000611bb282611bcf565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015611c17578082015181840152602081019050611bfc565b83811115611c26576000848401525b50505050565b6000611c3782611bef565b91506000821415611c4b57611c4a611cd0565b5b600182039050919050565b611c5f82611d5d565b810181811067ffffffffffffffff82111715611c7e57611c7d611d2e565b5b80604052505050565b6000611c9282611bef565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611cc557611cc4611cd0565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f416363657373436f6e74726f6c50726f78795061757361626c653a206163636f60008201527f756e742000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f547574656c6c7573486f6c646572735661756c743a206c656e6774682063616e60008201527f6e6f74206265206e756c6c000000000000000000000000000000000000000000602082015250565b7f547574656c6c7573486f6c646572735661756c743a206d696e7465642065786360008201527f65656473206c696d697400000000000000000000000000000000000000000000602082015250565b7f547574656c6c7573486f6c646572735661756c743a2063616e6e6f74206d696e60008201527f74203020746f6b656e7300000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f547574656c6c7573486f6c646572735661756c743a206c656e677468206d757360008201527f74206265207468652073616d6500000000000000000000000000000000000000602082015250565b7f547574656c6c7573486f6c646572735661756c743a206e6f20617661696c616260008201527f6c6520746f6b656e730000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b611ff581611ba7565b811461200057600080fd5b50565b61200c81611bb9565b811461201757600080fd5b50565b61202381611bc5565b811461202e57600080fd5b50565b61203a81611bef565b811461204557600080fd5b5056fea2646970667358221220b43bae1c4422f56f7404d891fd634166f2cb8d6e6c66ef03e8426b192ddce46864736f6c6343000802003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
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.