Polygon Sponsored slots available. Book your slot here!
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 | 590 days 11 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 0x418544C79fDAeD6aB1E63d612cc7C8A297358683
Contract Name:
TutellusClientsVault
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 "@openzeppelin/contracts-upgradeable/utils/cryptography/MerkleProofUpgradeable.sol"; import "./utils/AccessControlProxyPausable.sol"; import "./interfaces/ITutellusERC20.sol"; contract TutellusClientsVault is AccessControlProxyPausable { address public token; bytes32 public merkleRoot; string public uri; mapping(address => uint256) private _alreadyClaimed; event Claim(uint256 index, address account, uint256 amount); event UpdateMerkleRoot(bytes32 merkleRoot, string uri); function updateMerkleRoot(bytes32 merkleRoot_, string memory uri_) public onlyRole(DEFAULT_ADMIN_ROLE){ merkleRoot = merkleRoot_; uri = uri_; emit UpdateMerkleRoot(merkleRoot, uri); } function alreadyClaimed(address account) public view returns(uint256){ return _alreadyClaimed[account]; } function leftToClaim(uint256 index, address account, uint256 amount, bytes32[] calldata merkleProof) public view returns(uint256) { bytes32 node = keccak256(abi.encodePacked(index, account, amount)); require(MerkleProofUpgradeable.verify(merkleProof, merkleRoot, node), "TutellusClientsVault: Invalid proof."); uint256 alreadyClaimed_ = alreadyClaimed(account); if(amount > alreadyClaimed_){ return amount - alreadyClaimed_; }else{ return 0; } } function claim(uint256 index, address account, uint256 amount, bytes32[] calldata merkleProof) external whenNotPaused { uint256 claimed = leftToClaim(index, account, amount, merkleProof); require(claimed > 0,"TutellusClientsVault: Nothing to claim."); _alreadyClaimed[account] += claimed; ITutellusERC20 tokenInterface = ITutellusERC20(token); tokenInterface.transfer(account, amount); emit Claim(index, account, claimed); } constructor(address rolemanager, address token_) { __TutellusClientsVault_init(rolemanager, token_); } function __TutellusClientsVault_init(address rolemanager, address token_) internal initializer { __AccessControlProxyPausable_init(rolemanager); __TutellusClientsVault_init_unchained(token_); } function __TutellusClientsVault_init_unchained(address token_) internal initializer { token = token_; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProofUpgradeable { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } // Check if the computed hash (root) is equal to the provided root return computedHash == root; } }
// 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: 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: 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"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","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":"bytes32","name":"merkleRoot","type":"bytes32"},{"indexed":false,"internalType":"string","name":"uri","type":"string"}],"name":"UpdateMerkleRoot","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"}],"name":"alreadyClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claim","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":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"leftToClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":[],"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"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot_","type":"bytes32"},{"internalType":"string","name":"uri_","type":"string"}],"name":"updateMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620026d2380380620026d2833981810160405281019062000037919062000786565b6200004982826200005160201b60201c565b5050620008be565b600060019054906101000a900460ff168062000078575060008054906101000a900460ff16155b620000ba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000b190620007ee565b60405180910390fd5b60008060019054906101000a900460ff1615905080156200010b576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6200011c836200015460201b60201c565b6200012d826200025560201b60201c565b80156200014f5760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff16806200017b575060008054906101000a900460ff16155b620001bd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001b490620007ee565b60405180910390fd5b60008060019054906101000a900460ff1615905080156200020e576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6200021e6200037660201b60201c565b6200022f826200047560201b60201c565b8015620002515760008060016101000a81548160ff0219169083151502179055505b5050565b600060019054906101000a900460ff16806200027c575060008054906101000a900460ff16155b620002be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002b590620007ee565b60405180910390fd5b60008060019054906101000a900460ff1615905080156200030f576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b81606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015620003725760008060016101000a81548160ff0219169083151502179055505b5050565b600060019054906101000a900460ff16806200039d575060008054906101000a900460ff16155b620003df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003d690620007ee565b60405180910390fd5b60008060019054906101000a900460ff16159050801562000430576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620004406200059660201b60201c565b620004506200067560201b60201c565b8015620004725760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806200049c575060008054906101000a900460ff16155b620004de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004d590620007ee565b60405180910390fd5b60008060019054906101000a900460ff1615905080156200052f576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b81606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015620005925760008060016101000a81548160ff0219169083151502179055505b5050565b600060019054906101000a900460ff1680620005bd575060008054906101000a900460ff16155b620005ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005f690620007ee565b60405180910390fd5b60008060019054906101000a900460ff16159050801562000650576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015620006725760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806200069c575060008054906101000a900460ff16155b620006de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d590620007ee565b60405180910390fd5b60008060019054906101000a900460ff1615905080156200072f576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6000603360006101000a81548160ff02191690831515021790555080156200076c5760008060016101000a81548160ff0219169083151502179055505b50565b6000815190506200078081620008a4565b92915050565b600080604083850312156200079a57600080fd5b6000620007aa858286016200076f565b9250506020620007bd858286016200076f565b9150509250929050565b6000620007d6602e8362000810565b9150620007e38262000855565b604082019050919050565b600060208201905081810360008301526200080981620007c7565b9050919050565b600082825260208201905092915050565b60006200082e8262000835565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b620008af8162000821565b8114620008bb57600080fd5b50565b611e0480620008ce6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806391d148541161008c578063e63ab1e911610066578063e63ab1e914610211578063eac989f81461022f578063f54b893b1461024d578063fc0c546a1461027d576100ea565b806391d14854146101a7578063a217fddf146101d7578063e48034b5146101f5576100ea565b8063510eff4c116100c8578063510eff4c1461013357806358aba00f146101635780635c975abb1461017f5780638456cb591461019d576100ea565b80632e7ba6ef146100ef5780632eb4a7ab1461010b5780633f4ba83a14610129575b600080fd5b610109600480360381019061010491906112b4565b61029b565b005b610113610486565b6040516101209190611696565b60405180910390f35b61013161048c565b005b61014d600480360381019061014891906112b4565b610559565b60405161015a91906117cc565b60405180910390f35b61017d600480360381019061017891906111d2565b610650565b005b61018761073a565b604051610194919061167b565b60405180910390f35b6101a5610751565b005b6101c160048036038101906101bc9190611224565b61081e565b6040516101ce919061167b565b60405180910390f35b6101df6108da565b6040516101ec9190611696565b60405180910390f35b61020f600480360381019061020a9190611260565b6108e1565b005b6102196109e5565b6040516102269190611696565b60405180910390f35b610237610a09565b604051610244919061170a565b60405180910390f35b610267600480360381019061026291906111d2565b610a97565b60405161027491906117cc565b60405180910390f35b610285610ae0565b6040516102929190611637565b60405180910390f35b6102a361073a565b156102e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102da9061178c565b60405180910390fd5b60006102f28686868686610559565b905060008111610337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032e906117ac565b60405180910390fd5b80606960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461038691906118b0565b925050819055506000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87876040518363ffffffff1660e01b81526004016103ef929190611652565b602060405180830381600087803b15801561040957600080fd5b505af115801561041d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044191906111fb565b507f3ed1528b0fdc7c5207c1bf935e34a667e13656b9ed165260c522be0bc544f303878784604051610475939291906117e7565b60405180910390a150505050505050565b60675481565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60003390506104bc828261081e565b6104dd8273ffffffffffffffffffffffffffffffffffffffff166014610b06565b6104eb8460001c6020610b06565b6040516020016104fc9291906115c0565b6040516020818303038152906040529061054c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610543919061170a565b60405180910390fd5b50610555610e00565b5050565b600080868686604051602001610571939291906115fa565b6040516020818303038152906040528051906020012090506105d7848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060675483610ea2565b610616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060d9061176c565b60405180910390fd5b600061062187610a97565b9050808611156106405780866106379190611960565b92505050610647565b6000925050505b95945050505050565b6000801b6000339050610663828261081e565b6106848273ffffffffffffffffffffffffffffffffffffffff166014610b06565b6106928460001c6020610b06565b6040516020016106a39291906115c0565b604051602081830303815290604052906106f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ea919061170a565b60405180910390fd5b5082606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000603360009054906101000a900460ff16905090565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6000339050610781828261081e565b6107a28273ffffffffffffffffffffffffffffffffffffffff166014610b06565b6107b08460001c6020610b06565b6040516020016107c19291906115c0565b60405160208183030381529060405290610811576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610808919061170a565b60405180910390fd5b5061081a610f7e565b5050565b600080606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166391d1485485856040518363ffffffff1660e01b81526004016108819291906116b1565b60206040518083038186803b15801561089957600080fd5b505afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d191906111fb565b91505092915050565b6000801b81565b6000801b60003390506108f4828261081e565b6109158273ffffffffffffffffffffffffffffffffffffffff166014610b06565b6109238460001c6020610b06565b6040516020016109349291906115c0565b60405160208183030381529060405290610984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097b919061170a565b60405180910390fd5b508360678190555082606890805190602001906109a2929190611029565b507f6746d20118e403b63707d33894226f34b7f86abb8560997d1a6e57230337270c60675460686040516109d79291906116da565b60405180910390a150505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60688054610a1690611a52565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4290611a52565b8015610a8f5780601f10610a6457610100808354040283529160200191610a8f565b820191906000526020600020905b815481529060010190602001808311610a7257829003601f168201915b505050505081565b6000606960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060006002836002610b199190611906565b610b2391906118b0565b67ffffffffffffffff811115610b62577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610b945781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110610bf2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110610c7c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002610cbc9190611906565b610cc691906118b0565b90505b6001811115610db2577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110610d2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110610d6b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080610dab90611a28565b9050610cc9565b5060008414610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded9061172c565b60405180910390fd5b8091505092915050565b610e0861073a565b610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e9061174c565b60405180910390fd5b6000603360006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610e8b611021565b604051610e989190611637565b60405180910390a1565b60008082905060005b8551811015610f70576000868281518110610eef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311610f30578281604051602001610f13929190611594565b604051602081830303815290604052805190602001209250610f5c565b8083604051602001610f43929190611594565b6040516020818303038152906040528051906020012092505b508080610f6890611ab5565b915050610eab565b508381149150509392505050565b610f8661073a565b15610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd9061178c565b60405180910390fd5b6001603360006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861100a611021565b6040516110179190611637565b60405180910390a1565b600033905090565b82805461103590611a52565b90600052602060002090601f016020900481019282611057576000855561109e565b82601f1061107057805160ff191683800117855561109e565b8280016001018555821561109e579182015b8281111561109d578251825591602001919060010190611082565b5b5090506110ab91906110af565b5090565b5b808211156110c85760008160009055506001016110b0565b5090565b60006110df6110da84611843565b61181e565b9050828152602081018484840111156110f757600080fd5b6111028482856119e6565b509392505050565b60008135905061111981611d72565b92915050565b60008083601f84011261113157600080fd5b8235905067ffffffffffffffff81111561114a57600080fd5b60208301915083602082028301111561116257600080fd5b9250929050565b60008151905061117881611d89565b92915050565b60008135905061118d81611da0565b92915050565b600082601f8301126111a457600080fd5b81356111b48482602086016110cc565b91505092915050565b6000813590506111cc81611db7565b92915050565b6000602082840312156111e457600080fd5b60006111f28482850161110a565b91505092915050565b60006020828403121561120d57600080fd5b600061121b84828501611169565b91505092915050565b6000806040838503121561123757600080fd5b60006112458582860161117e565b92505060206112568582860161110a565b9150509250929050565b6000806040838503121561127357600080fd5b60006112818582860161117e565b925050602083013567ffffffffffffffff81111561129e57600080fd5b6112aa85828601611193565b9150509250929050565b6000806000806000608086880312156112cc57600080fd5b60006112da888289016111bd565b95505060206112eb8882890161110a565b94505060406112fc888289016111bd565b935050606086013567ffffffffffffffff81111561131957600080fd5b6113258882890161111f565b92509250509295509295909350565b61133d81611994565b82525050565b61135461134f82611994565b611afe565b82525050565b611363816119a6565b82525050565b611372816119b2565b82525050565b611389611384826119b2565b611b10565b82525050565b600061139a82611889565b6113a48185611894565b93506113b48185602086016119f5565b6113bd81611bc3565b840191505092915050565b60006113d382611889565b6113dd81856118a5565b93506113ed8185602086016119f5565b80840191505092915050565b6000815461140681611a52565b6114108186611894565b9450600182166000811461142b576001811461143d57611470565b60ff1983168652602086019350611470565b61144685611874565b60005b8381101561146857815481890152600182019150602081019050611449565b808801955050505b50505092915050565b6000611486602083611894565b915061149182611be1565b602082019050919050565b60006114a96024836118a5565b91506114b482611c0a565b602482019050919050565b60006114cc601483611894565b91506114d782611c59565b602082019050919050565b60006114ef602483611894565b91506114fa82611c82565b604082019050919050565b6000611512601083611894565b915061151d82611cd1565b602082019050919050565b6000611535602783611894565b915061154082611cfa565b604082019050919050565b60006115586011836118a5565b915061156382611d49565b601182019050919050565b611577816119dc565b82525050565b61158e611589826119dc565b611b2c565b82525050565b60006115a08285611378565b6020820191506115b08284611378565b6020820191508190509392505050565b60006115cb8261149c565b91506115d782856113c8565b91506115e28261154b565b91506115ee82846113c8565b91508190509392505050565b6000611606828661157d565b6020820191506116168285611343565b601482019150611626828461157d565b602082019150819050949350505050565b600060208201905061164c6000830184611334565b92915050565b60006040820190506116676000830185611334565b611674602083018461156e565b9392505050565b6000602082019050611690600083018461135a565b92915050565b60006020820190506116ab6000830184611369565b92915050565b60006040820190506116c66000830185611369565b6116d36020830184611334565b9392505050565b60006040820190506116ef6000830185611369565b818103602083015261170181846113f9565b90509392505050565b60006020820190508181036000830152611724818461138f565b905092915050565b6000602082019050818103600083015261174581611479565b9050919050565b60006020820190508181036000830152611765816114bf565b9050919050565b60006020820190508181036000830152611785816114e2565b9050919050565b600060208201905081810360008301526117a581611505565b9050919050565b600060208201905081810360008301526117c581611528565b9050919050565b60006020820190506117e1600083018461156e565b92915050565b60006060820190506117fc600083018661156e565b6118096020830185611334565b611816604083018461156e565b949350505050565b6000611828611839565b90506118348282611a84565b919050565b6000604051905090565b600067ffffffffffffffff82111561185e5761185d611b94565b5b61186782611bc3565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b60006118bb826119dc565b91506118c6836119dc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156118fb576118fa611b36565b5b828201905092915050565b6000611911826119dc565b915061191c836119dc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561195557611954611b36565b5b828202905092915050565b600061196b826119dc565b9150611976836119dc565b92508282101561198957611988611b36565b5b828203905092915050565b600061199f826119bc565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015611a135780820151818401526020810190506119f8565b83811115611a22576000848401525b50505050565b6000611a33826119dc565b91506000821415611a4757611a46611b36565b5b600182039050919050565b60006002820490506001821680611a6a57607f821691505b60208210811415611a7e57611a7d611b65565b5b50919050565b611a8d82611bc3565b810181811067ffffffffffffffff82111715611aac57611aab611b94565b5b80604052505050565b6000611ac0826119dc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611af357611af2611b36565b5b600182019050919050565b6000611b0982611b1a565b9050919050565b6000819050919050565b6000611b2582611bd4565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f416363657373436f6e74726f6c50726f78795061757361626c653a206163636f60008201527f756e742000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f547574656c6c7573436c69656e74735661756c743a20496e76616c696420707260008201527f6f6f662e00000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f547574656c6c7573436c69656e74735661756c743a204e6f7468696e6720746f60008201527f20636c61696d2e00000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b611d7b81611994565b8114611d8657600080fd5b50565b611d92816119a6565b8114611d9d57600080fd5b50565b611da9816119b2565b8114611db457600080fd5b50565b611dc0816119dc565b8114611dcb57600080fd5b5056fea2646970667358221220f30b8b577c37573788333c7671163a79315a7296e4e88d8fa0479d3232133e6a64736f6c6343000802003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
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.