Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x65b77FDF8b55057794a5399918ad2A55d27fa395
Contract Name:
TutellusStaking
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 "./utils/AccessControlProxyPausable.sol"; import "./interfaces/ITutellusERC20.sol"; import "./interfaces/ITutellusRewardsVault.sol"; contract TutellusStaking is AccessControlProxyPausable { address public token; address public vault; bool public autoreward; uint256 public balance; uint256 public minFee; uint256 public maxFee; uint256 public accRewardsPerShare; uint256 private _released; uint public lastUpdate; uint public feeInterval; uint public stakers; struct UserInfo { uint256 amount; uint256 rewardDebt; uint256 notClaimed; uint endInterval; uint256 minFee; uint256 maxFee; uint256 feeInterval; } mapping(address=>UserInfo) private _userInfo; event Claim(address account); event Deposit(address account, uint256 amount); event Withdraw(address account, uint256 amount, uint256 burned); event Rewards(address account, uint256 amount); event SyncBalance(address account, uint256 amount); event ToggleAutoreward(bool autoreward); event Update(uint256 balance, uint256 accRewardsPerShare, uint lastUpdate, uint stakers); event UpdateUserInfo(address account, uint256 amount, uint256 rewardDebt, uint256 notClaimed, uint endInterval); event SetFees(uint256 minFee, uint256 maxFee); event SetFeeInterval(uint feeInterval); event Migrate(address from, address to, address account, uint256 amount, bytes response); function _update() internal { if (block.number <= lastUpdate) { return; } ITutellusRewardsVault rewardsInterface = ITutellusRewardsVault(vault); uint256 released = rewardsInterface.releasedId(address(this)) - _released; _released += released; if(balance > 0) { accRewardsPerShare += (released * 1e18 / balance); } lastUpdate = block.number; } // Sets maximum and minimum fees function setFees(uint256 minFee_, uint256 maxFee_) public onlyRole(DEFAULT_ADMIN_ROLE) { require(minFee_ <= maxFee_, "TutellusStaking: mininum fee must be greater or equal than maximum fee"); require(minFee_ <= 1e20 && maxFee_ <= 1e20, "TutellusStaking: fees must be less than 100e18"); minFee = minFee_; maxFee = maxFee_; emit SetFees(minFee, maxFee); } // Sets fee interval (blocks) for staking function setFeeInterval(uint feeInterval_) public onlyRole(DEFAULT_ADMIN_ROLE) { feeInterval = feeInterval_; emit SetFeeInterval(feeInterval); } // Updates rewards for an account function _updateRewards(address account) internal { UserInfo storage user = _userInfo[account]; uint256 diff = accRewardsPerShare - user.rewardDebt; user.notClaimed = diff * user.amount / 1e18; user.rewardDebt = accRewardsPerShare; } // Deposits tokens for staking function depositFrom(address account, uint256 amount) public whenNotPaused { require(amount > 0, "TutellusStaking: amount must be over zero"); UserInfo storage user = _userInfo[account]; _update(); _updateRewards(account); if(user.amount == 0) { stakers += 1; } user.endInterval = block.number + feeInterval; user.minFee = minFee; user.maxFee = maxFee; user.feeInterval = feeInterval; user.amount += amount; balance += amount; ITutellusERC20 tokenInterface = ITutellusERC20(token); require(tokenInterface.balanceOf(account) >= amount, "TutellusStaking: user has not enough balance"); require(tokenInterface.allowance(account, address(this)) >= amount, "TutellusStaking: amount exceeds allowance"); if(autoreward) { _reward(account); } require(tokenInterface.transferFrom(account, address(this), amount), "TutellusStaking: deposit transfer failed"); emit Update(balance, accRewardsPerShare, lastUpdate, stakers); emit UpdateUserInfo(account, user.amount, user.rewardDebt, user.notClaimed, user.endInterval); emit Deposit(account, amount); } // Withdraws tokens from staking function withdraw(uint256 amount) public whenNotPaused returns (uint256) { require(amount > 0, "TutellusStaking: amount must be over zero"); address account = msg.sender; UserInfo storage user = _userInfo[account]; require(amount <= user.amount, "TutellusStaking: user has not enough staking balance"); _update(); _updateRewards(account); user.rewardDebt = accRewardsPerShare; user.amount -= amount; balance -= amount; if(user.amount == 0) { stakers -= 1; } ITutellusERC20 tokenInterface = ITutellusERC20(token); uint256 burned = amount * getFee(account) / 1e20; amount -= burned; if(autoreward) { _reward(account); } if(burned > 0){ tokenInterface.burn(burned); } require(tokenInterface.transfer(account, amount), "TutellusStaking: withdraw transfer failed"); emit Update(balance, accRewardsPerShare, lastUpdate, stakers); emit UpdateUserInfo(account, user.amount, user.rewardDebt, user.notClaimed, user.endInterval); emit Withdraw(account, amount, burned); return amount; } // Claims rewards function claim() public whenNotPaused { address account = msg.sender; UserInfo storage user = _userInfo[account]; _update(); _updateRewards(account); require(user.notClaimed > 0, "TutellusStaking: nothing to claim"); _reward(account); emit Update(balance, accRewardsPerShare, lastUpdate, stakers); emit UpdateUserInfo(account, user.amount, user.rewardDebt, user.notClaimed, user.endInterval); emit Claim(account); } // Toggles autoreward function toggleAutoreward() public onlyRole(DEFAULT_ADMIN_ROLE) { autoreward = !autoreward; emit ToggleAutoreward(autoreward); } function _reward(address account) internal { ITutellusRewardsVault rewardsInterface = ITutellusRewardsVault(vault); uint256 amount = _userInfo[account].notClaimed; if(amount > 0) { _userInfo[account].notClaimed = 0; rewardsInterface.distributeTokens(account, amount); emit Rewards(account, amount); } } // Gets current fee for a user function getFee(address account) public view returns(uint256) { UserInfo memory user = _userInfo[account]; uint256 fee = block.number < user.endInterval ? user.feeInterval > 0 ? user.maxFee * (user.endInterval - block.number) / user.feeInterval : user.minFee : user.minFee; return fee > user.minFee ? fee : user.minFee; } // Gets blocks until endInverval function getBlocksLeft(address account) public view returns (uint) { if(block.number > _userInfo[account].endInterval) { return 0; } else { return _userInfo[account].endInterval - block.number; } } // Gets user pending rewards function pendingRewards(address user_) public view returns(uint256) { UserInfo memory user = _userInfo[user_]; uint256 rewards = user.notClaimed; if(balance > 0){ ITutellusRewardsVault rewardsInterface = ITutellusRewardsVault(vault); uint256 released = rewardsInterface.releasedId(address(this)) - _released; uint256 total = (released * 1e18 / balance); rewards += (accRewardsPerShare - user.rewardDebt + total) * user.amount / 1e18; } return rewards; } constructor (address token_, address rolemanager, address vault_, uint256 minFee_, uint256 maxFee_, uint feeInterval_) { __TutellusStaking_init(token_, rolemanager, vault_, minFee_, maxFee_, feeInterval_); } function __TutellusStaking_init(address token_, address rolemanager, address vault_, uint256 minFee_, uint256 maxFee_, uint feeInterval_) internal initializer { __AccessControlProxyPausable_init(rolemanager); __TutellusStaking_init_unchained(token_, vault_, minFee_, maxFee_, feeInterval_); } function __TutellusStaking_init_unchained(address token_, address vault_, uint256 minFee_, uint256 maxFee_, uint feeInterval_) internal initializer { token = token_; vault = vault_; setFees(minFee_, maxFee_); setFeeInterval(feeInterval_); autoreward = true; lastUpdate = block.number; } // Gets token gap function getTokenGap() public view returns (uint256) { ITutellusERC20 tokenInterface = ITutellusERC20(token); uint256 tokenBalance = tokenInterface.balanceOf(address(this)); return tokenBalance - balance; } // Synchronizes balance, transfering the gap to an external account function syncBalance(address account) public onlyRole(DEFAULT_ADMIN_ROLE) { ITutellusERC20 tokenInterface = ITutellusERC20(token); uint256 gap = getTokenGap(); require(gap > 0, "TutellusStaking: there is no gap"); tokenInterface.transfer(account, gap); emit SyncBalance(account, gap); } // Gets user staking balance function getUserBalance(address user_) public view returns(uint256){ UserInfo memory user = _userInfo[user_]; return user.amount; } function migrate(address to) public returns (bytes memory){ address account = msg.sender; uint256 amount = withdraw(_userInfo[account].amount); (bool success, bytes memory response) = to.call( abi.encodeWithSignature("depositFrom(address,uint256)", account, amount) ); require(success, 'TutellusStaking: migration failed'); emit Migrate(address(this), to, account, amount, response); return response; } }
// 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: Unlicense pragma solidity ^0.8.0; interface ITutellusRewardsVault { function add(address account, uint256[] memory allocation) external; function updateAllocation(uint256[] memory allocation) external; function released() external view returns (uint256); function availableId(address account) external view returns (uint256); function releasedRange(uint from, uint to) external view returns (uint256); function releasedId(address account) external view returns (uint256); function distributeTokens(address account, uint256 amount) external; function info(address account) external view; }
// 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":"token_","type":"address"},{"internalType":"address","name":"rolemanager","type":"address"},{"internalType":"address","name":"vault_","type":"address"},{"internalType":"uint256","name":"minFee_","type":"uint256"},{"internalType":"uint256","name":"maxFee_","type":"uint256"},{"internalType":"uint256","name":"feeInterval_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"response","type":"bytes"}],"name":"Migrate","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"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Rewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"feeInterval","type":"uint256"}],"name":"SetFeeInterval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxFee","type":"uint256"}],"name":"SetFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SyncBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"autoreward","type":"bool"}],"name":"ToggleAutoreward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accRewardsPerShare","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastUpdate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakers","type":"uint256"}],"name":"Update","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"notClaimed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endInterval","type":"uint256"}],"name":"UpdateUserInfo","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burned","type":"uint256"}],"name":"Withdraw","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":[],"name":"accRewardsPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoreward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balance","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"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getBlocksLeft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenGap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user_","type":"address"}],"name":"getUserBalance","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":"lastUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"migrate","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"user_","type":"address"}],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeInterval_","type":"uint256"}],"name":"setFeeInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minFee_","type":"uint256"},{"internalType":"uint256","name":"maxFee_","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"syncBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleAutoreward","outputs":[],"stateMutability":"nonpayable","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":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200503e3803806200503e833981810160405281019062000037919062000efa565b6200004d8686868686866200005960201b60201c565b50505050505062001696565b600060019054906101000a900460ff168062000080575060008054906101000a900460ff16155b620000c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000b99062001228565b60405180910390fd5b60008060019054906101000a900460ff16159050801562000113576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b62000124866200016460201b60201c565b6200013987868686866200026560201b60201c565b80156200015b5760008060016101000a81548160ff0219169083151502179055505b50505050505050565b600060019054906101000a900460ff16806200018b575060008054906101000a900460ff16155b620001cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001c49062001228565b60405180910390fd5b60008060019054906101000a900460ff1615905080156200021e576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6200022e6200041060201b60201c565b6200023f826200050f60201b60201c565b8015620002615760008060016101000a81548160ff0219169083151502179055505b5050565b600060019054906101000a900460ff16806200028c575060008054906101000a900460ff16155b620002ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002c59062001228565b60405180910390fd5b60008060019054906101000a900460ff1615905080156200031f576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b85606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003b384846200063060201b60201c565b620003c482620007f960201b60201c565b6001606760146101000a81548160ff02191690831515021790555043606d819055508015620004085760008060016101000a81548160ff0219169083151502179055505b505050505050565b600060019054906101000a900460ff168062000437575060008054906101000a900460ff16155b62000479576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004709062001228565b60405180910390fd5b60008060019054906101000a900460ff161590508015620004ca576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620004da6200090b60201b60201c565b620004ea620009ea60201b60201c565b80156200050c5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff168062000536575060008054906101000a900460ff16155b62000578576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200056f9062001228565b60405180910390fd5b60008060019054906101000a900460ff161590508015620005c9576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b81606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080156200062c5760008060016101000a81548160ff0219169083151502179055505b5050565b6000801b60003390506200064b828262000ae460201b60201c565b620006798273ffffffffffffffffffffffffffffffffffffffff16601462000ba660201b620020e81760201c565b620006948460001c602062000ba660201b620020e81760201c565b604051602001620006a792919062001151565b60405160208183030381529060405290620006fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f19190620011c0565b60405180910390fd5b508284111562000741576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007389062001206565b60405180910390fd5b68056bc75e2d63100000841115801562000764575068056bc75e2d631000008311155b620007a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200079d906200124a565b60405180910390fd5b8360698190555082606a819055507f3be6e637f54f081a2dd12982cfd58481304fc98b604b18fa8ed4aa4e4a9d1532606954606a54604051620007eb92919062001289565b60405180910390a150505050565b6000801b600033905062000814828262000ae460201b60201c565b620008428273ffffffffffffffffffffffffffffffffffffffff16601462000ba660201b620020e81760201c565b6200085d8460001c602062000ba660201b620020e81760201c565b6040516020016200087092919062001151565b60405160208183030381529060405290620008c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ba9190620011c0565b60405180910390fd5b5082606e819055507f3c4855c88fd8a474116d68903d5709038a6f57f15646d976d5abdbbc5818ca0d606e54604051620008fe91906200126c565b60405180910390a1505050565b600060019054906101000a900460ff168062000932575060008054906101000a900460ff16155b62000974576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200096b9062001228565b60405180910390fd5b60008060019054906101000a900460ff161590508015620009c5576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015620009e75760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff168062000a11575060008054906101000a900460ff16155b62000a53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a4a9062001228565b60405180910390fd5b60008060019054906101000a900460ff16159050801562000aa4576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6000603360006101000a81548160ff021916908315150217905550801562000ae15760008060016101000a81548160ff0219169083151502179055505b50565b600080606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166391d1485485856040518363ffffffff1660e01b815260040162000b4992919062001193565b60206040518083038186803b15801562000b6257600080fd5b505afa15801562000b77573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b9d919062000f90565b91505092915050565b60606000600283600262000bbb91906200133a565b62000bc79190620012dd565b67ffffffffffffffff81111562000c07577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801562000c3a5781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811062000c99577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811062000d24577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600262000d6691906200133a565b62000d729190620012dd565b90505b600181111562000e64577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811062000ddc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b82828151811062000e1a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508062000e5c9062001425565b905062000d75565b506000841462000eab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ea290620011e4565b60405180910390fd5b8091505092915050565b60008151905062000ec68162001648565b92915050565b60008151905062000edd8162001662565b92915050565b60008151905062000ef4816200167c565b92915050565b60008060008060008060c0878903121562000f1457600080fd5b600062000f2489828a0162000eb5565b965050602062000f3789828a0162000eb5565b955050604062000f4a89828a0162000eb5565b945050606062000f5d89828a0162000ee3565b935050608062000f7089828a0162000ee3565b92505060a062000f8389828a0162000ee3565b9150509295509295509295565b60006020828403121562000fa357600080fd5b600062000fb38482850162000ecc565b91505092915050565b62000fc7816200139b565b82525050565b62000fd881620013bb565b82525050565b600062000feb82620012b6565b62000ff78185620012c1565b935062001009818560208601620013ef565b620010148162001483565b840191505092915050565b60006200102c82620012b6565b620010388185620012d2565b93506200104a818560208601620013ef565b80840191505092915050565b600062001065602083620012c1565b9150620010728262001494565b602082019050919050565b60006200108c602483620012d2565b91506200109982620014bd565b602482019050919050565b6000620010b3604683620012c1565b9150620010c0826200150c565b606082019050919050565b6000620010da602e83620012c1565b9150620010e78262001581565b604082019050919050565b600062001101602e83620012c1565b91506200110e82620015d0565b604082019050919050565b600062001128601183620012d2565b915062001135826200161f565b601182019050919050565b6200114b81620013e5565b82525050565b60006200115e826200107d565b91506200116c82856200101f565b9150620011798262001119565b91506200118782846200101f565b91508190509392505050565b6000604082019050620011aa600083018562000fcd565b620011b9602083018462000fbc565b9392505050565b60006020820190508181036000830152620011dc818462000fde565b905092915050565b60006020820190508181036000830152620011ff8162001056565b9050919050565b600060208201905081810360008301526200122181620010a4565b9050919050565b600060208201905081810360008301526200124381620010cb565b9050919050565b600060208201905081810360008301526200126581620010f2565b9050919050565b600060208201905062001283600083018462001140565b92915050565b6000604082019050620012a0600083018562001140565b620012af602083018462001140565b9392505050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000620012ea82620013e5565b9150620012f783620013e5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200132f576200132e62001454565b5b828201905092915050565b60006200134782620013e5565b91506200135483620013e5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001390576200138f62001454565b5b828202905092915050565b6000620013a882620013c5565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200140f578082015181840152602081019050620013f2565b838111156200141f576000848401525b50505050565b60006200143282620013e5565b9150600082141562001449576200144862001454565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f416363657373436f6e74726f6c50726f78795061757361626c653a206163636f60008201527f756e742000000000000000000000000000000000000000000000000000000000602082015250565b7f547574656c6c75735374616b696e673a206d696e696e756d20666565206d757360008201527f742062652067726561746572206f7220657175616c207468616e206d6178696d60208201527f756d206665650000000000000000000000000000000000000000000000000000604082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f547574656c6c75735374616b696e673a2066656573206d757374206265206c6560008201527f7373207468616e20313030653138000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b62001653816200139b565b81146200165f57600080fd5b50565b6200166d81620013af565b81146200167957600080fd5b50565b6200168781620013e5565b81146200169357600080fd5b50565b61399880620016a66000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637cbaccd511610104578063b88c9148116100a2578063e63ab1e911610071578063e63ab1e91461050f578063fbfa77cf1461052d578063fc0c546a1461054b578063fed1252a14610569576101da565b8063b88c914814610475578063c0463711146104a5578063ce5494bb146104c3578063e0adaca2146104f3576101da565b80638d048056116100de5780638d048056146103d957806391d1485414610409578063a217fddf14610439578063b69ef8a814610457576101da565b80637cbaccd51461039557806381fb5cfb146103b35780638456cb59146103cf576101da565b8063477348921161017c5780635a3c978b1161014b5780635a3c978b146103315780635c975abb1461034f57806366b0bebc1461036d5780636ca569c11461038b576101da565b806347734892146102bd5780634e71d92d146102ed5780635129338c146102f757806358aba00f14610315576101da565b806324ec7590116101b857806324ec7590146102355780632e1a7d4d1461025357806331d7a262146102835780633f4ba83a146102b3576101da565b806301f59d16146101df5780630b78f9c0146101fd57806315cc36f214610219575b600080fd5b6101e7610587565b6040516101f491906131a4565b60405180910390f35b610217600480360381019061021291906129ec565b61058d565b005b610233600480360381019061022e91906128f9565b610726565b005b61023d610c17565b60405161024a91906131a4565b60405180910390f35b61026d6004803603810190610268919061299a565b610c1d565b60405161027a91906131a4565b60405180910390f35b61029d600480360381019061029891906128d0565b61104d565b6040516102aa91906131a4565b60405180910390f35b6102bb611236565b005b6102d760048036038101906102d291906128d0565b611303565b6040516102e491906131a4565b60405180910390f35b6102f56113a5565b005b6102ff611565565b60405161030c91906131a4565b60405180910390f35b61032f600480360381019061032a91906128d0565b61162f565b005b610339611719565b6040516103469190612f41565b60405180910390f35b61035761172c565b6040516103649190612f41565b60405180910390f35b610375611743565b60405161038291906131a4565b60405180910390f35b610393611749565b005b61039d611861565b6040516103aa91906131a4565b60405180910390f35b6103cd60048036038101906103c8919061299a565b611867565b005b6103d7611950565b005b6103f360048036038101906103ee91906128d0565b611a1d565b60405161040091906131a4565b60405180910390f35b610423600480360381019061041e919061295e565b611ac8565b6040516104309190612f41565b60405180910390f35b610441611b84565b60405161044e9190612f5c565b60405180910390f35b61045f611b8b565b60405161046c91906131a4565b60405180910390f35b61048f600480360381019061048a91906128d0565b611b91565b60405161049c91906131a4565b60405180910390f35b6104ad611ca5565b6040516104ba91906131a4565b60405180910390f35b6104dd60048036038101906104d891906128d0565b611cab565b6040516104ea9190612fa0565b60405180910390f35b61050d600480360381019061050891906128d0565b611e8a565b005b610517612072565b6040516105249190612f5c565b60405180910390f35b610535612096565b6040516105429190612db9565b60405180910390f35b6105536120bc565b6040516105609190612db9565b60405180910390f35b6105716120e2565b60405161057e91906131a4565b60405180910390f35b606a5481565b6000801b60003390506105a08282611ac8565b6105c18273ffffffffffffffffffffffffffffffffffffffff1660146120e8565b6105cf8460001c60206120e8565b6040516020016105e0929190612d7f565b60405160208183030381529060405290610630576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106279190612fc2565b60405180910390fd5b5082841115610674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066b90613024565b60405180910390fd5b68056bc75e2d631000008411158015610696575068056bc75e2d631000008311155b6106d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cc90613104565b60405180910390fd5b8360698190555082606a819055507f3be6e637f54f081a2dd12982cfd58481304fc98b604b18fa8ed4aa4e4a9d1532606954606a546040516107189291906131bf565b60405180910390a150505050565b61072e61172c565b1561076e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076590613044565b60405180910390fd5b600081116107b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a890613064565b60405180910390fd5b6000607060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506107fc6123e2565b6108058361251b565b60008160000154141561082d576001606f6000828254610825919061327b565b925050819055505b606e544361083b919061327b565b81600301819055506069548160040181905550606a548160050181905550606e54816006018190555081816000016000828254610878919061327b565b925050819055508160686000828254610891919061327b565b925050819055506000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828173ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b81526004016108f99190612db9565b60206040518083038186803b15801561091157600080fd5b505afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094991906129c3565b101561098a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098190613084565b60405180910390fd5b828173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e86306040518363ffffffff1660e01b81526004016109c6929190612dd4565b60206040518083038186803b1580156109de57600080fd5b505afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1691906129c3565b1015610a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4e906130c4565b60405180910390fd5b606760149054906101000a900460ff1615610a7657610a75846125af565b5b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd8530866040518463ffffffff1660e01b8152600401610ab393929190612e57565b602060405180830381600087803b158015610acd57600080fd5b505af1158015610ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b059190612935565b610b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3b90613124565b60405180910390fd5b7fce49b138f2621300a7043a61f472ccfd643162bdf3efb11354e22d5273b77a71606854606b54606d54606f54604051610b8194939291906131e8565b60405180910390a17fda0c5744e922c38dc93f40ffd95d1e27696bee87f5cbd024bd5df1d168caa5a8848360000154846001015485600201548660030154604051610bd0959493929190612eee565b60405180910390a17fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c8484604051610c09929190612e8e565b60405180910390a150505050565b60695481565b6000610c2761172c565b15610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e90613044565b60405180910390fd5b60008211610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190613064565b60405180910390fd5b60003390506000607060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000154841115610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d30906130a4565b60405180910390fd5b610d416123e2565b610d4a8261251b565b606b54816001018190555083816000016000828254610d69919061335c565b925050819055508360686000828254610d82919061335c565b92505081905550600081600001541415610db1576001606f6000828254610da9919061335c565b925050819055505b6000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600068056bc75e2d63100000610ded85611b91565b87610df89190613302565b610e0291906132d1565b90508086610e10919061335c565b9550606760149054906101000a900460ff1615610e3157610e30846125af565b5b6000811115610ea6578173ffffffffffffffffffffffffffffffffffffffff166342966c68826040518263ffffffff1660e01b8152600401610e7391906131a4565b600060405180830381600087803b158015610e8d57600080fd5b505af1158015610ea1573d6000803e3d6000fd5b505050505b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85886040518363ffffffff1660e01b8152600401610ee1929190612e8e565b602060405180830381600087803b158015610efb57600080fd5b505af1158015610f0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f339190612935565b610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f69906130e4565b60405180910390fd5b7fce49b138f2621300a7043a61f472ccfd643162bdf3efb11354e22d5273b77a71606854606b54606d54606f54604051610faf94939291906131e8565b60405180910390a17fda0c5744e922c38dc93f40ffd95d1e27696bee87f5cbd024bd5df1d168caa5a8848460000154856001015486600201548760030154604051610ffe959493929190612eee565b60405180910390a17ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56884878360405161103993929190612eb7565b60405180910390a185945050505050919050565b600080607060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152505090506000816040015190506000606854111561122c576000606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000606c548273ffffffffffffffffffffffffffffffffffffffff1663ae7928bf306040518263ffffffff1660e01b815260040161115b9190612db9565b60206040518083038186803b15801561117357600080fd5b505afa158015611187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab91906129c3565b6111b5919061335c565b90506000606854670de0b6b3a7640000836111d09190613302565b6111da91906132d1565b9050670de0b6b3a76400008560000151828760200151606b546111fd919061335c565b611207919061327b565b6112119190613302565b61121b91906132d1565b84611226919061327b565b93505050505b8092505050919050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60003390506112668282611ac8565b6112878273ffffffffffffffffffffffffffffffffffffffff1660146120e8565b6112958460001c60206120e8565b6040516020016112a6929190612d7f565b604051602081830303815290604052906112f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ed9190612fc2565b60405180910390fd5b506112ff61271a565b5050565b600080607060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152505090508060000151915050919050565b6113ad61172c565b156113ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e490613044565b60405180910390fd5b60003390506000607060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061143d6123e2565b6114468261251b565b600081600201541161148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148490613164565b60405180910390fd5b611496826125af565b7fce49b138f2621300a7043a61f472ccfd643162bdf3efb11354e22d5273b77a71606854606b54606d54606f546040516114d394939291906131e8565b60405180910390a17fda0c5744e922c38dc93f40ffd95d1e27696bee87f5cbd024bd5df1d168caa5a8828260000154836001015484600201548560030154604051611522959493929190612eee565b60405180910390a17f0c7ef932d3b91976772937f18d5ef9b39a9930bef486b576c374f047c4b512dc826040516115599190612db9565b60405180910390a15050565b600080606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115c89190612db9565b60206040518083038186803b1580156115e057600080fd5b505afa1580156115f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161891906129c3565b905060685481611628919061335c565b9250505090565b6000801b60003390506116428282611ac8565b6116638273ffffffffffffffffffffffffffffffffffffffff1660146120e8565b6116718460001c60206120e8565b604051602001611682929190612d7f565b604051602081830303815290604052906116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c99190612fc2565b60405180910390fd5b5082606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b606760149054906101000a900460ff1681565b6000603360009054906101000a900460ff16905090565b606e5481565b6000801b600033905061175c8282611ac8565b61177d8273ffffffffffffffffffffffffffffffffffffffff1660146120e8565b61178b8460001c60206120e8565b60405160200161179c929190612d7f565b604051602081830303815290604052906117ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e39190612fc2565b60405180910390fd5b50606760149054906101000a900460ff1615606760146101000a81548160ff0219169083151502179055507fbab7db190deaf2eccaf17b4e82ea10dce1e26f8a605ec9681ca8183b2de399fe606760149054906101000a900460ff166040516118559190612f41565b60405180910390a15050565b606b5481565b6000801b600033905061187a8282611ac8565b61189b8273ffffffffffffffffffffffffffffffffffffffff1660146120e8565b6118a98460001c60206120e8565b6040516020016118ba929190612d7f565b6040516020818303038152906040529061190a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119019190612fc2565b60405180910390fd5b5082606e819055507f3c4855c88fd8a474116d68903d5709038a6f57f15646d976d5abdbbc5818ca0d606e5460405161194391906131a4565b60405180910390a1505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60003390506119808282611ac8565b6119a18273ffffffffffffffffffffffffffffffffffffffff1660146120e8565b6119af8460001c60206120e8565b6040516020016119c0929190612d7f565b60405160208183030381529060405290611a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a079190612fc2565b60405180910390fd5b50611a196127bc565b5050565b6000607060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154431115611a725760009050611ac3565b43607060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154611ac0919061335c565b90505b919050565b600080606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166391d1485485856040518363ffffffff1660e01b8152600401611b2b929190612f77565b60206040518083038186803b158015611b4357600080fd5b505afa158015611b57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7b9190612935565b91505092915050565b6000801b81565b60685481565b600080607060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815250509050600081606001514310611c3d578160800151611c83565b60008260c0015111611c53578160800151611c82565b8160c00151438360600151611c68919061335c565b8360a00151611c779190613302565b611c8191906132d1565b5b5b905081608001518111611c9a578160800151611c9c565b805b92505050919050565b606d5481565b606060003390506000611cff607060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610c1d565b90506000808573ffffffffffffffffffffffffffffffffffffffff168484604051602401611d2e929190612e8e565b6040516020818303038152906040527f15cc36f2000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611db89190612d68565b6000604051808303816000865af19150503d8060008114611df5576040519150601f19603f3d011682016040523d82523d6000602084013e611dfa565b606091505b509150915081611e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3690613144565b60405180910390fd5b7f6e05dc9f1838831eddd36138c9d51903718a470d488ca366c8469614074a97bd3087868685604051611e76959493929190612dfd565b60405180910390a180945050505050919050565b6000801b6000339050611e9d8282611ac8565b611ebe8273ffffffffffffffffffffffffffffffffffffffff1660146120e8565b611ecc8460001c60206120e8565b604051602001611edd929190612d7f565b60405160208183030381529060405290611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f249190612fc2565b60405180910390fd5b506000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611f5f611565565b905060008111611fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9b90613184565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86836040518363ffffffff1660e01b8152600401611fdf929190612e8e565b602060405180830381600087803b158015611ff957600080fd5b505af115801561200d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120319190612935565b507fd43c97094d4b3522923f3751f896fb88ef95d5e1d310aea58b936625fd7c5d0c8582604051612063929190612e8e565b60405180910390a15050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606f5481565b6060600060028360026120fb9190613302565b612105919061327b565b67ffffffffffffffff811115612144577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121765781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106121d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061225e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261229e9190613302565b6122a8919061327b565b90505b6001811115612394577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612310577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b82828151811061234d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061238d90613415565b90506122ab565b50600084146123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf90612fe4565b60405180910390fd5b8091505092915050565b606d5443116123f057612519565b6000606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000606c548273ffffffffffffffffffffffffffffffffffffffff1663ae7928bf306040518263ffffffff1660e01b81526004016124559190612db9565b60206040518083038186803b15801561246d57600080fd5b505afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a591906129c3565b6124af919061335c565b905080606c60008282546124c3919061327b565b925050819055506000606854111561250f57606854670de0b6b3a7640000826124ec9190613302565b6124f691906132d1565b606b6000828254612507919061327b565b925050819055505b43606d8190555050505b565b6000607060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160010154606b54612572919061335c565b9050670de0b6b3a764000082600001548261258d9190613302565b61259791906132d1565b8260020181905550606b548260010181905550505050565b6000606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000607060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015490506000811115612715576000607060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055508173ffffffffffffffffffffffffffffffffffffffff1663158a498884836040518363ffffffff1660e01b81526004016126a9929190612e8e565b600060405180830381600087803b1580156126c357600080fd5b505af11580156126d7573d6000803e3d6000fd5b505050507fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a838260405161270c929190612e8e565b60405180910390a15b505050565b61272261172c565b612761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275890613004565b60405180910390fd5b6000603360006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6127a561285f565b6040516127b29190612db9565b60405180910390a1565b6127c461172c565b15612804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fb90613044565b60405180910390fd5b6001603360006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861284861285f565b6040516128559190612db9565b60405180910390a1565b600033905090565b60008135905061287681613906565b92915050565b60008151905061288b8161391d565b92915050565b6000813590506128a081613934565b92915050565b6000813590506128b58161394b565b92915050565b6000815190506128ca8161394b565b92915050565b6000602082840312156128e257600080fd5b60006128f084828501612867565b91505092915050565b6000806040838503121561290c57600080fd5b600061291a85828601612867565b925050602061292b858286016128a6565b9150509250929050565b60006020828403121561294757600080fd5b60006129558482850161287c565b91505092915050565b6000806040838503121561297157600080fd5b600061297f85828601612891565b925050602061299085828601612867565b9150509250929050565b6000602082840312156129ac57600080fd5b60006129ba848285016128a6565b91505092915050565b6000602082840312156129d557600080fd5b60006129e3848285016128bb565b91505092915050565b600080604083850312156129ff57600080fd5b6000612a0d858286016128a6565b9250506020612a1e858286016128a6565b9150509250929050565b612a3181613390565b82525050565b612a40816133a2565b82525050565b612a4f816133ae565b82525050565b6000612a608261322d565b612a6a8185613243565b9350612a7a8185602086016133e2565b612a838161349d565b840191505092915050565b6000612a998261322d565b612aa38185613254565b9350612ab38185602086016133e2565b80840191505092915050565b6000612aca82613238565b612ad4818561325f565b9350612ae48185602086016133e2565b612aed8161349d565b840191505092915050565b6000612b0382613238565b612b0d8185613270565b9350612b1d8185602086016133e2565b80840191505092915050565b6000612b3660208361325f565b9150612b41826134ae565b602082019050919050565b6000612b59602483613270565b9150612b64826134d7565b602482019050919050565b6000612b7c60148361325f565b9150612b8782613526565b602082019050919050565b6000612b9f60468361325f565b9150612baa8261354f565b606082019050919050565b6000612bc260108361325f565b9150612bcd826135c4565b602082019050919050565b6000612be560298361325f565b9150612bf0826135ed565b604082019050919050565b6000612c08602c8361325f565b9150612c138261363c565b604082019050919050565b6000612c2b60348361325f565b9150612c368261368b565b604082019050919050565b6000612c4e60298361325f565b9150612c59826136da565b604082019050919050565b6000612c7160298361325f565b9150612c7c82613729565b604082019050919050565b6000612c94602e8361325f565b9150612c9f82613778565b604082019050919050565b6000612cb760288361325f565b9150612cc2826137c7565b604082019050919050565b6000612cda60218361325f565b9150612ce582613816565b604082019050919050565b6000612cfd60218361325f565b9150612d0882613865565b604082019050919050565b6000612d20601183613270565b9150612d2b826138b4565b601182019050919050565b6000612d4360208361325f565b9150612d4e826138dd565b602082019050919050565b612d62816133d8565b82525050565b6000612d748284612a8e565b915081905092915050565b6000612d8a82612b4c565b9150612d968285612af8565b9150612da182612d13565b9150612dad8284612af8565b91508190509392505050565b6000602082019050612dce6000830184612a28565b92915050565b6000604082019050612de96000830185612a28565b612df66020830184612a28565b9392505050565b600060a082019050612e126000830188612a28565b612e1f6020830187612a28565b612e2c6040830186612a28565b612e396060830185612d59565b8181036080830152612e4b8184612a55565b90509695505050505050565b6000606082019050612e6c6000830186612a28565b612e796020830185612a28565b612e866040830184612d59565b949350505050565b6000604082019050612ea36000830185612a28565b612eb06020830184612d59565b9392505050565b6000606082019050612ecc6000830186612a28565b612ed96020830185612d59565b612ee66040830184612d59565b949350505050565b600060a082019050612f036000830188612a28565b612f106020830187612d59565b612f1d6040830186612d59565b612f2a6060830185612d59565b612f376080830184612d59565b9695505050505050565b6000602082019050612f566000830184612a37565b92915050565b6000602082019050612f716000830184612a46565b92915050565b6000604082019050612f8c6000830185612a46565b612f996020830184612a28565b9392505050565b60006020820190508181036000830152612fba8184612a55565b905092915050565b60006020820190508181036000830152612fdc8184612abf565b905092915050565b60006020820190508181036000830152612ffd81612b29565b9050919050565b6000602082019050818103600083015261301d81612b6f565b9050919050565b6000602082019050818103600083015261303d81612b92565b9050919050565b6000602082019050818103600083015261305d81612bb5565b9050919050565b6000602082019050818103600083015261307d81612bd8565b9050919050565b6000602082019050818103600083015261309d81612bfb565b9050919050565b600060208201905081810360008301526130bd81612c1e565b9050919050565b600060208201905081810360008301526130dd81612c41565b9050919050565b600060208201905081810360008301526130fd81612c64565b9050919050565b6000602082019050818103600083015261311d81612c87565b9050919050565b6000602082019050818103600083015261313d81612caa565b9050919050565b6000602082019050818103600083015261315d81612ccd565b9050919050565b6000602082019050818103600083015261317d81612cf0565b9050919050565b6000602082019050818103600083015261319d81612d36565b9050919050565b60006020820190506131b96000830184612d59565b92915050565b60006040820190506131d46000830185612d59565b6131e16020830184612d59565b9392505050565b60006080820190506131fd6000830187612d59565b61320a6020830186612d59565b6132176040830185612d59565b6132246060830184612d59565b95945050505050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613286826133d8565b9150613291836133d8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132c6576132c561343f565b5b828201905092915050565b60006132dc826133d8565b91506132e7836133d8565b9250826132f7576132f661346e565b5b828204905092915050565b600061330d826133d8565b9150613318836133d8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133515761335061343f565b5b828202905092915050565b6000613367826133d8565b9150613372836133d8565b9250828210156133855761338461343f565b5b828203905092915050565b600061339b826133b8565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156134005780820151818401526020810190506133e5565b8381111561340f576000848401525b50505050565b6000613420826133d8565b915060008214156134345761343361343f565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f416363657373436f6e74726f6c50726f78795061757361626c653a206163636f60008201527f756e742000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f547574656c6c75735374616b696e673a206d696e696e756d20666565206d757360008201527f742062652067726561746572206f7220657175616c207468616e206d6178696d60208201527f756d206665650000000000000000000000000000000000000000000000000000604082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f547574656c6c75735374616b696e673a20616d6f756e74206d7573742062652060008201527f6f766572207a65726f0000000000000000000000000000000000000000000000602082015250565b7f547574656c6c75735374616b696e673a207573657220686173206e6f7420656e60008201527f6f7567682062616c616e63650000000000000000000000000000000000000000602082015250565b7f547574656c6c75735374616b696e673a207573657220686173206e6f7420656e60008201527f6f756768207374616b696e672062616c616e6365000000000000000000000000602082015250565b7f547574656c6c75735374616b696e673a20616d6f756e7420657863656564732060008201527f616c6c6f77616e63650000000000000000000000000000000000000000000000602082015250565b7f547574656c6c75735374616b696e673a207769746864726177207472616e736660008201527f6572206661696c65640000000000000000000000000000000000000000000000602082015250565b7f547574656c6c75735374616b696e673a2066656573206d757374206265206c6560008201527f7373207468616e20313030653138000000000000000000000000000000000000602082015250565b7f547574656c6c75735374616b696e673a206465706f736974207472616e73666560008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b7f547574656c6c75735374616b696e673a206d6967726174696f6e206661696c6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f547574656c6c75735374616b696e673a206e6f7468696e6720746f20636c616960008201527f6d00000000000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f547574656c6c75735374616b696e673a207468657265206973206e6f20676170600082015250565b61390f81613390565b811461391a57600080fd5b50565b613926816133a2565b811461393157600080fd5b50565b61393d816133ae565b811461394857600080fd5b50565b613954816133d8565b811461395f57600080fd5b5056fea26469706673582212206eda215e79f7d5fc3ec94f1a4c3342f25b920c5413191e6ad84acbdd7025efe764736f6c63430008020033000000000000000000000000ce9a30c3b300d1c0c06d0c1ef2f5e7ae0e474cf9000000000000000000000000edfb8b686903c6eb56b069e9d42d40c918a093a100000000000000000000000014cb53cfa6c7fe6a3d84dad8882df25aa997fef7000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000013c680
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.