Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 14527453 | 964 days ago | IN | 0 ETH | 0.29816842 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
StrongPoolV5
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; import "../lib/openzeppelin/contracts/3.4.1/token/ERC20/IERC20.sol"; import "./lib/SafeMath.sol"; import "./interfaces/VoteInterface.sol"; import "./lib/rewards.sol"; contract StrongPoolV5 { event MinedFor(address indexed miner, uint256 amount); event Mined(address indexed miner, uint256 amount); event MinedForVotesOnly(address indexed miner, uint256 amount); event UnminedForVotesOnly(address indexed miner, uint256 amount); event Unmined(address indexed miner, uint256 amount); event Claimed(address indexed miner, uint256 reward); using SafeMath for uint256; bool public initDone; address public admin; address public pendingAdmin; address public superAdmin; address public pendingSuperAdmin; address public parameterAdmin; address payable public feeCollector; IERC20 public strongToken; VoteInterface public vote; mapping(address => uint256) public minerBalance; uint256 public totalBalance; mapping(address => uint256) public minerBlockLastClaimedOn; mapping(address => uint256) public minerVotes; uint256 public rewardBalance; uint256 public rewardPerBlockNumerator; uint256 public rewardPerBlockDenominator; uint256 public miningFeeNumerator; uint256 public miningFeeDenominator; uint256 public unminingFeeNumerator; uint256 public unminingFeeDenominator; uint256 public claimingFeeNumerator; uint256 public claimingFeeDenominator; mapping(address => uint256) public inboundContractIndex; address[] public inboundContracts; mapping(address => bool) public inboundContractTrusted; uint256 public claimingFeeInWei; bool public removedTokens; uint256 public rewardPerBlockNumeratorNew; uint256 public rewardPerBlockDenominatorNew; uint256 public rewardPerBlockNewEffectiveBlock; function init( address voteAddress, address strongTokenAddress, address adminAddress, address superAdminAddress, uint256 rewardPerBlockNumeratorValue, uint256 rewardPerBlockDenominatorValue, uint256 miningFeeNumeratorValue, uint256 miningFeeDenominatorValue, uint256 unminingFeeNumeratorValue, uint256 unminingFeeDenominatorValue, uint256 claimingFeeNumeratorValue, uint256 claimingFeeDenominatorValue ) public { require(!initDone, "init done"); vote = VoteInterface(voteAddress); strongToken = IERC20(strongTokenAddress); admin = adminAddress; superAdmin = superAdminAddress; rewardPerBlockNumerator = rewardPerBlockNumeratorValue; rewardPerBlockDenominator = rewardPerBlockDenominatorValue; miningFeeNumerator = miningFeeNumeratorValue; miningFeeDenominator = miningFeeDenominatorValue; unminingFeeNumerator = unminingFeeNumeratorValue; unminingFeeDenominator = unminingFeeDenominatorValue; claimingFeeNumerator = claimingFeeNumeratorValue; claimingFeeDenominator = claimingFeeDenominatorValue; initDone = true; } // ADMIN // ************************************************************************************* function updateParameterAdmin(address newParameterAdmin) public { require(newParameterAdmin != address(0), "zero"); require(msg.sender == superAdmin); parameterAdmin = newParameterAdmin; } function updateFeeCollector(address payable newFeeCollector) public { require(newFeeCollector != address(0), "zero"); require(msg.sender == superAdmin); feeCollector = newFeeCollector; } function setPendingAdmin(address newPendingAdmin) public { require(newPendingAdmin != address(0), "zero"); require(msg.sender == admin, "not admin"); pendingAdmin = newPendingAdmin; } function acceptAdmin() public { require(msg.sender == pendingAdmin && msg.sender != address(0), "not pendingAdmin"); admin = pendingAdmin; pendingAdmin = address(0); } function setPendingSuperAdmin(address newPendingSuperAdmin) public { require(newPendingSuperAdmin != address(0), "zero"); require(msg.sender == superAdmin, "not superAdmin"); pendingSuperAdmin = newPendingSuperAdmin; } function acceptSuperAdmin() public { require(msg.sender == pendingSuperAdmin && msg.sender != address(0), "not pendingSuperAdmin"); superAdmin = pendingSuperAdmin; pendingSuperAdmin = address(0); } // INBOUND CONTRACTS // ************************************************************************************* function addInboundContract(address contr) public { require(contr != address(0), "zero"); require(msg.sender == admin || msg.sender == parameterAdmin || msg.sender == superAdmin, "not an admin"); if (inboundContracts.length != 0) { uint256 index = inboundContractIndex[contr]; require(inboundContracts[index] != contr, "exists"); } uint256 len = inboundContracts.length; inboundContractIndex[contr] = len; inboundContractTrusted[contr] = true; inboundContracts.push(contr); } function inboundContractTrustStatus(address contr, bool trustStatus) public { require(contr != address(0), "zero"); require(msg.sender == admin || msg.sender == parameterAdmin || msg.sender == superAdmin, "not an admin"); uint256 index = inboundContractIndex[contr]; require(inboundContracts[index] == contr, "not exists"); inboundContractTrusted[contr] = trustStatus; } // REWARD // ************************************************************************************* function updateRewardPerBlock(uint256 numerator, uint256 denominator) public { require(msg.sender == admin || msg.sender == parameterAdmin || msg.sender == superAdmin, "not an admin"); require(denominator != 0, "invalid value"); rewardPerBlockNumerator = numerator; rewardPerBlockDenominator = denominator; } function deposit(uint256 amount) public { require(msg.sender == superAdmin, "not an admin"); require(amount > 0, "zero"); strongToken.transferFrom(msg.sender, address(this), amount); rewardBalance = rewardBalance.add(amount); } function withdraw(address destination, uint256 amount) public { require(msg.sender == superAdmin, "not an admin"); require(amount > 0, "zero"); require(rewardBalance >= amount, "not enough"); strongToken.transfer(destination, amount); rewardBalance = rewardBalance.sub(amount); } // FEES // ************************************************************************************* function updateMiningFee(uint256 numerator, uint256 denominator) public { require(msg.sender == admin || msg.sender == parameterAdmin || msg.sender == superAdmin, "not an admin"); require(denominator != 0, "invalid value"); miningFeeNumerator = numerator; miningFeeDenominator = denominator; } function updateUnminingFee(uint256 numerator, uint256 denominator) public { require(msg.sender == admin || msg.sender == parameterAdmin || msg.sender == superAdmin, "not an admin"); require(denominator != 0, "invalid value"); unminingFeeNumerator = numerator; unminingFeeDenominator = denominator; } function updateClaimingFee(uint256 numerator, uint256 denominator) public { require(msg.sender == admin || msg.sender == parameterAdmin || msg.sender == superAdmin, "not an admin"); require(denominator != 0, "invalid value"); claimingFeeNumerator = numerator; claimingFeeDenominator = denominator; } // CORE // ************************************************************************************* function mineForVotesOnly(uint256 amount) public { require(amount > 0, "zero"); strongToken.transferFrom(msg.sender, address(this), amount); minerVotes[msg.sender] = minerVotes[msg.sender].add(amount); vote.updateVotes(msg.sender, amount, true); emit MinedForVotesOnly(msg.sender, amount); } function unmineForVotesOnly(uint256 amount) public { require(amount > 0, "zero"); require(minerVotes[msg.sender] >= amount, "not enough"); minerVotes[msg.sender] = minerVotes[msg.sender].sub(amount); vote.updateVotes(msg.sender, amount, false); strongToken.transfer(msg.sender, amount); emit UnminedForVotesOnly(msg.sender, amount); } function mineFor(address miner, uint256 amount) public { require(inboundContractTrusted[msg.sender], "not trusted"); require(amount > 0, "zero"); strongToken.transferFrom(msg.sender, address(this), amount); minerBalance[miner] = minerBalance[miner].add(amount); totalBalance = totalBalance.add(amount); if (minerBlockLastClaimedOn[miner] == 0) { minerBlockLastClaimedOn[miner] = block.number; } vote.updateVotes(miner, amount, true); emit MinedFor(miner, amount); } function mine(uint256 amount) public payable { require(amount > 0, "zero"); uint256 fee = amount.mul(miningFeeNumerator).div(miningFeeDenominator); require(msg.value == fee, "invalid fee"); feeCollector.transfer(msg.value); strongToken.transferFrom(msg.sender, address(this), amount); if (block.number > minerBlockLastClaimedOn[msg.sender]) { uint256 reward = getReward(msg.sender); if (reward > 0) { minerBalance[msg.sender] = minerBalance[msg.sender].add(reward); totalBalance = totalBalance.add(reward); rewardBalance = rewardBalance.sub(reward); vote.updateVotes(msg.sender, reward, true); minerBlockLastClaimedOn[msg.sender] = block.number; } } minerBalance[msg.sender] = minerBalance[msg.sender].add(amount); totalBalance = totalBalance.add(amount); if (minerBlockLastClaimedOn[msg.sender] == 0) { minerBlockLastClaimedOn[msg.sender] = block.number; } vote.updateVotes(msg.sender, amount, true); emit Mined(msg.sender, amount); } function unmine(uint256 amount) public payable { require(amount > 0, "zero"); uint256 fee = amount.mul(unminingFeeNumerator).div(unminingFeeDenominator); require(msg.value == fee, "invalid fee"); require(minerBalance[msg.sender] >= amount, "not enough"); feeCollector.transfer(msg.value); bool unmineAll = (amount == minerBalance[msg.sender]); if (block.number > minerBlockLastClaimedOn[msg.sender]) { uint256 reward = getReward(msg.sender); if (reward > 0) { minerBalance[msg.sender] = minerBalance[msg.sender].add(reward); totalBalance = totalBalance.add(reward); rewardBalance = rewardBalance.sub(reward); vote.updateVotes(msg.sender, reward, true); minerBlockLastClaimedOn[msg.sender] = block.number; } } uint256 amountToUnmine = unmineAll ? minerBalance[msg.sender] : amount; minerBalance[msg.sender] = minerBalance[msg.sender].sub(amountToUnmine); totalBalance = totalBalance.sub(amountToUnmine); strongToken.transfer(msg.sender, amountToUnmine); vote.updateVotes(msg.sender, amountToUnmine, false); if (minerBalance[msg.sender] == 0) { minerBlockLastClaimedOn[msg.sender] = 0; } emit Unmined(msg.sender, amountToUnmine); } function claim(uint256 blockNumber) public payable { require(blockNumber <= block.number, "invalid block number"); require(minerBlockLastClaimedOn[msg.sender] != 0, "error"); require(blockNumber > minerBlockLastClaimedOn[msg.sender], "too soon"); uint256 reward = getRewardByBlock(msg.sender, blockNumber); require(reward > 0, "no reward"); uint256 fee = reward.mul(claimingFeeNumerator).div(claimingFeeDenominator); require(msg.value == fee, "invalid fee"); feeCollector.transfer(msg.value); minerBalance[msg.sender] = minerBalance[msg.sender].add(reward); totalBalance = totalBalance.add(reward); rewardBalance = rewardBalance.sub(reward); minerBlockLastClaimedOn[msg.sender] = blockNumber; vote.updateVotes(msg.sender, reward, true); emit Claimed(msg.sender, reward); } function getReward(address miner) public view returns (uint256) { return getRewardByBlock(miner, block.number); } function getRewardByBlock(address miner, uint256 blockNumber) public view returns (uint256) { uint256 blockLastClaimedOn = minerBlockLastClaimedOn[miner]; if (blockNumber > block.number) return 0; if (blockLastClaimedOn == 0) return 0; if (blockNumber < blockLastClaimedOn) return 0; if (totalBalance == 0) return 0; uint256[2] memory rewardBlocks = rewards.blocks(blockLastClaimedOn, rewardPerBlockNewEffectiveBlock, blockNumber); uint256 rewardOld = rewardPerBlockDenominator > 0 ? rewardBlocks[0].mul(rewardPerBlockNumerator).div(rewardPerBlockDenominator) : 0; uint256 rewardNew = rewardPerBlockDenominatorNew > 0 ? rewardBlocks[1].mul(rewardPerBlockNumeratorNew).div(rewardPerBlockDenominatorNew) : 0; return rewardOld.add(rewardNew).mul(minerBalance[miner]).div(totalBalance); } function updateRewardPerBlockNew( uint256 numerator, uint256 denominator, uint256 effectiveBlock ) public { require(msg.sender == admin || msg.sender == parameterAdmin || msg.sender == superAdmin, "not admin"); rewardPerBlockNumeratorNew = numerator; rewardPerBlockDenominatorNew = denominator; rewardPerBlockNewEffectiveBlock = effectiveBlock != 0 ? effectiveBlock : block.number; } function setTokenContract(IERC20 tokenAddress) external { require(msg.sender == superAdmin, "not an admin"); strongToken = tokenAddress; } function withdrawToken(IERC20 token, address recipient, uint256 amount) external { require(msg.sender == superAdmin, "not an admin"); require(token.transfer(recipient, amount)); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; interface VoteInterface { function getPriorProposalVotes(address account, uint256 blockNumber) external view returns (uint96); function updateVotes( address voter, uint256 rawAmount, bool adding ) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; import "./SafeMath.sol"; library rewards { using SafeMath for uint256; function blocks(uint256 lastClaimedOnBlock, uint256 newRewardBlock, uint256 blockNumber) internal pure returns (uint256[2] memory) { if (lastClaimedOnBlock >= blockNumber) return [uint256(0), uint256(0)]; if (blockNumber <= newRewardBlock || newRewardBlock == 0) { return [blockNumber.sub(lastClaimedOnBlock), uint256(0)]; } else if (lastClaimedOnBlock >= newRewardBlock) { return [uint256(0), blockNumber.sub(lastClaimedOnBlock)]; } else { return [newRewardBlock.sub(lastClaimedOnBlock), blockNumber.sub(newRewardBlock)]; } } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mined","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MinedFor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MinedForVotesOnly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unmined","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnminedForVotesOnly","type":"event"},{"inputs":[],"name":"acceptAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"acceptSuperAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contr","type":"address"}],"name":"addInboundContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claimingFeeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimingFeeInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimingFeeNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeCollector","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"miner","type":"address"}],"name":"getReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"miner","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getRewardByBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"inboundContractIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contr","type":"address"},{"internalType":"bool","name":"trustStatus","type":"bool"}],"name":"inboundContractTrustStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"inboundContractTrusted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"inboundContracts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"voteAddress","type":"address"},{"internalType":"address","name":"strongTokenAddress","type":"address"},{"internalType":"address","name":"adminAddress","type":"address"},{"internalType":"address","name":"superAdminAddress","type":"address"},{"internalType":"uint256","name":"rewardPerBlockNumeratorValue","type":"uint256"},{"internalType":"uint256","name":"rewardPerBlockDenominatorValue","type":"uint256"},{"internalType":"uint256","name":"miningFeeNumeratorValue","type":"uint256"},{"internalType":"uint256","name":"miningFeeDenominatorValue","type":"uint256"},{"internalType":"uint256","name":"unminingFeeNumeratorValue","type":"uint256"},{"internalType":"uint256","name":"unminingFeeDenominatorValue","type":"uint256"},{"internalType":"uint256","name":"claimingFeeNumeratorValue","type":"uint256"},{"internalType":"uint256","name":"claimingFeeDenominatorValue","type":"uint256"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mine","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"miner","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mineFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mineForVotesOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minerBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minerBlockLastClaimedOn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minerVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miningFeeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miningFeeNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"parameterAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingSuperAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removedTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerBlockDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerBlockDenominatorNew","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerBlockNewEffectiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerBlockNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerBlockNumeratorNew","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"setPendingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingSuperAdmin","type":"address"}],"name":"setPendingSuperAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"}],"name":"setTokenContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"strongToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"superAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unmine","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unmineForVotesOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unminingFeeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unminingFeeNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"updateClaimingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newFeeCollector","type":"address"}],"name":"updateFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"updateMiningFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newParameterAdmin","type":"address"}],"name":"updateParameterAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"updateRewardPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"},{"internalType":"uint256","name":"effectiveBlock","type":"uint256"}],"name":"updateRewardPerBlockNew","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"updateUnminingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vote","outputs":[{"internalType":"contract VoteInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50613012806100206000396000f3fe60806040526004361061036b5760003560e01c806399e6f700116101c6578063c415b95c116100f7578063e7f9cefd11610095578063f3fef3a31161006f578063f3fef3a314610b5a578063f426571514610b93578063f851a44014610bb0578063fed0a20e14610bc55761036b565b8063e7f9cefd14610b1b578063ed5998da14610b30578063ef56a08b14610b455761036b565b8063d2c35ce8116100d1578063d2c35ce814610a6d578063d39ca7de14610aa0578063db588ec214610ad3578063e771e91a14610ae85761036b565b8063c415b95c14610a10578063cb454ec914610a25578063ce77beaf14610a585761036b565b8063b6b55f2511610164578063c00007b01161013e578063c00007b014610980578063c0f0622d146109b3578063c2acf7ea146109c8578063c2b2fdca146109fb5761036b565b8063b6b55f25146108dc578063bbcd5bbe14610906578063be69283e146109395761036b565b8063abb1c39b116101a0578063abb1c39b14610828578063ad7a672f14610858578063b0e8a45d1461086d578063b1dfb9b3146108a35761036b565b806399e6f700146107ce578063a84ffad5146107e3578063aa5c3ab4146108135761036b565b806348028d63116102a0578063683a229f1161023e57806387f48f4e1161021857806387f48f4e146107415780638aa9a37f146107565780638b70f35914610786578063965d61b9146107b95761036b565b8063683a229f146106955780637a5d5cf414610717578063857d49d51461072c5761036b565b80634dd18bf51161027a5780634dd18bf5146105fd578063546f9354146106305780635b7f6ea81461066b578063632a9a52146106805761036b565b806348028d63146105a15780634d04ad99146105b65780634d474898146105e05761036b565b80631d851bbd1161030d57806330d6a975116102e757806330d6a975146104e5578063379607f51461051e57806337e4c4ae1461053b57806340b584b41461056e5761036b565b80631d851bbd146104a657806326782247146104bb57806329575f6a146104d05761036b565b80630e18b681116103495780630e18b6811461040c5780630f07aa62146104215780631246af891461046757806319885898146104915761036b565b806301e336671461037057806309a07fd2146103b55780630a8d1be2146103dc575b600080fd5b34801561037c57600080fd5b506103b36004803603606081101561039357600080fd5b506001600160a01b03813581169160208101359091169060400135610bda565b005b3480156103c157600080fd5b506103ca610cb9565b60408051918252519081900360200190f35b3480156103e857600080fd5b506103b3600480360360408110156103ff57600080fd5b5080359060200135610cbf565b34801561041857600080fd5b506103b3610d89565b34801561042d57600080fd5b5061044b6004803603602081101561044457600080fd5b5035610e18565b604080516001600160a01b039092168252519081900360200190f35b34801561047357600080fd5b506103b36004803603602081101561048a57600080fd5b5035610e3f565b34801561049d57600080fd5b506103ca610fd8565b3480156104b257600080fd5b506103ca610fde565b3480156104c757600080fd5b5061044b610fe4565b3480156104dc57600080fd5b5061044b610ff3565b3480156104f157600080fd5b506103b36004803603604081101561050857600080fd5b506001600160a01b038135169060200135611002565b6103b36004803603602081101561053457600080fd5b5035611254565b34801561054757600080fd5b506103b36004803603602081101561055e57600080fd5b50356001600160a01b031661152d565b34801561057a57600080fd5b506103b36004803603602081101561059157600080fd5b50356001600160a01b03166116ec565b3480156105ad57600080fd5b5061044b611769565b3480156105c257600080fd5b506103b3600480360360208110156105d957600080fd5b5035611778565b6103b3600480360360208110156105f657600080fd5b503561195c565b34801561060957600080fd5b506103b36004803603602081101561062057600080fd5b50356001600160a01b0316611cc3565b34801561063c57600080fd5b506103b36004803603604081101561065357600080fd5b506001600160a01b0381351690602001351515611d79565b34801561067757600080fd5b506103ca611ee4565b34801561068c57600080fd5b5061044b611eea565b3480156106a157600080fd5b506103b360048036036101808110156106b957600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c08101359060e0810135906101008101359061012081013590610140810135906101600135611ef9565b34801561072357600080fd5b506103ca611fc7565b34801561073857600080fd5b5061044b611fcd565b34801561074d57600080fd5b506103ca611fdc565b34801561076257600080fd5b506103b36004803603604081101561077957600080fd5b5080359060200135611fe2565b34801561079257600080fd5b506103ca600480360360208110156107a957600080fd5b50356001600160a01b03166120ac565b3480156107c557600080fd5b5061044b6120be565b3480156107da57600080fd5b506103ca6120cd565b3480156107ef57600080fd5b506103b36004803603604081101561080657600080fd5b50803590602001356120d3565b34801561081f57600080fd5b506103ca61219d565b34801561083457600080fd5b506103b36004803603604081101561084b57600080fd5b50803590602001356121a3565b34801561086457600080fd5b506103ca61226d565b34801561087957600080fd5b506103b36004803603606081101561089057600080fd5b5080359060208101359060400135612273565b3480156108af57600080fd5b506103ca600480360360408110156108c657600080fd5b506001600160a01b03813516906020013561230c565b3480156108e857600080fd5b506103b3600480360360208110156108ff57600080fd5b5035612427565b34801561091257600080fd5b506103b36004803603602081101561092957600080fd5b50356001600160a01b031661254c565b34801561094557600080fd5b5061096c6004803603602081101561095c57600080fd5b50356001600160a01b03166125bc565b604080519115158252519081900360200190f35b34801561098c57600080fd5b506103ca600480360360208110156109a357600080fd5b50356001600160a01b03166125d1565b3480156109bf57600080fd5b5061096c6125dd565b3480156109d457600080fd5b506103ca600480360360208110156109eb57600080fd5b50356001600160a01b03166125e6565b348015610a0757600080fd5b506103ca6125f8565b348015610a1c57600080fd5b5061044b6125fe565b348015610a3157600080fd5b506103ca60048036036020811015610a4857600080fd5b50356001600160a01b031661260d565b348015610a6457600080fd5b506103ca61261f565b348015610a7957600080fd5b506103b360048036036020811015610a9057600080fd5b50356001600160a01b0316612625565b348015610aac57600080fd5b506103b360048036036020811015610ac357600080fd5b50356001600160a01b03166126a2565b348015610adf57600080fd5b506103ca612758565b348015610af457600080fd5b506103ca60048036036020811015610b0b57600080fd5b50356001600160a01b031661275e565b348015610b2757600080fd5b506103b3612770565b348015610b3c57600080fd5b506103ca6127f9565b348015610b5157600080fd5b506103ca6127ff565b348015610b6657600080fd5b506103b360048036036040811015610b7d57600080fd5b506001600160a01b038135169060200135612805565b6103b360048036036020811015610ba957600080fd5b503561296b565b348015610bbc57600080fd5b5061044b612d51565b348015610bd157600080fd5b5061096c612d65565b6002546001600160a01b03163314610c28576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b505050506040513d6020811015610ca957600080fd5b5051610cb457600080fd5b505050565b60135481565b60005461010090046001600160a01b0316331480610ce757506004546001600160a01b031633145b80610cfc57506002546001600160a01b031633145b610d3c576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80610d7e576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600d91909155600e55565b6001546001600160a01b031633148015610da257503315155b610de6576040805162461bcd60e51b815260206004820152601060248201526f3737ba103832b73234b733a0b236b4b760811b604482015290519081900360640190fd5b6001805460008054610100600160a81b0319166101006001600160a01b038416021790556001600160a01b0319169055565b60168181548110610e2557fe5b6000918252602090912001546001600160a01b0316905081565b60008111610e7d576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600654604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015610ed757600080fd5b505af1158015610eeb573d6000803e3d6000fd5b505050506040513d6020811015610f0157600080fd5b5050336000908152600b6020526040902054610f1d9082612d6e565b336000818152600b6020526040808220939093556007548351639fb9ec1160e01b81526004810193909352602483018590526001604484015292516001600160a01b0390931692639fb9ec1192606480820193929182900301818387803b158015610f8757600080fd5b505af1158015610f9b573d6000803e3d6000fd5b50506040805184815290513393507ff37db06620b96226404d091596ee3290dd042d17dc5c440a97876ffbb5d0886092509081900360200190a250565b600e5481565b601c5481565b6001546001600160a01b031681565b6002546001600160a01b031681565b3360009081526017602052604090205460ff16611054576040805162461bcd60e51b815260206004820152600b60248201526a1b9bdd081d1c9d5cdd195960aa1b604482015290519081900360640190fd5b60008111611092576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600654604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156110ec57600080fd5b505af1158015611100573d6000803e3d6000fd5b505050506040513d602081101561111657600080fd5b50506001600160a01b03821660009081526008602052604090205461113b9082612d6e565b6001600160a01b0383166000908152600860205260409020556009546111619082612d6e565b6009556001600160a01b0382166000908152600a602052604090205461119d576001600160a01b0382166000908152600a602052604090204390555b60075460408051639fb9ec1160e01b81526001600160a01b038581166004830152602482018590526001604483015291519190921691639fb9ec1191606480830192600092919082900301818387803b1580156111f957600080fd5b505af115801561120d573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693507f4995275d5fede9791a4f176a8aa7d0fea6c316f6ba53693c3acd58ee707a719692509081900360200190a25050565b438111156112a0576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b210313637b1b590373ab6b132b960611b604482015290519081900360640190fd5b336000908152600a60205260409020546112e9576040805162461bcd60e51b815260206004820152600560248201526432b93937b960d91b604482015290519081900360640190fd5b336000908152600a60205260409020548111611337576040805162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b604482015290519081900360640190fd5b6000611343338361230c565b905060008111611386576040805162461bcd60e51b81526020600482015260096024820152681b9bc81c995dd85c9960ba1b604482015290519081900360640190fd5b60006113a96014546113a360135485612dcf90919063ffffffff16565b90612e28565b90508034146113ed576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6005546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611426573d6000803e3d6000fd5b50336000908152600860205260409020546114419083612d6e565b3360009081526008602052604090205560095461145e9083612d6e565b600955600c5461146e9083612e8f565b600c55336000818152600a60205260408082208690556007548151639fb9ec1160e01b81526004810194909452602484018690526001604485015290516001600160a01b0390911692639fb9ec1192606480830193919282900301818387803b1580156114da57600080fd5b505af11580156114ee573d6000803e3d6000fd5b50506040805185815290513393507fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a92509081900360200190a2505050565b6001600160a01b038116611571576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b60005461010090046001600160a01b031633148061159957506004546001600160a01b031633145b806115ae57506002546001600160a01b031633145b6115ee576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60165415611673576001600160a01b038116600081815260156020526040902054601680549192918390811061162057fe5b6000918252602090912001546001600160a01b03161415611671576040805162461bcd60e51b815260206004820152600660248201526565786973747360d01b604482015290519081900360640190fd5b505b601680546001600160a01b0390921660008181526015602090815260408083209590955560179052928320805460ff1916600190811790915582549081018355919092527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242890180546001600160a01b0319169091179055565b6001600160a01b038116611730576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b0316331461174757600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031681565b600081116117b6576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b336000908152600b6020526040902054811115611807576040805162461bcd60e51b815260206004820152600a6024820152690dcdee840cadcdeeaced60b31b604482015290519081900360640190fd5b336000908152600b60205260409020546118219082612e8f565b336000818152600b6020526040808220939093556007548351639fb9ec1160e01b81526004810193909352602483018590526044830182905292516001600160a01b0390931692639fb9ec1192606480820193929182900301818387803b15801561188b57600080fd5b505af115801561189f573d6000803e3d6000fd5b50506006546040805163a9059cbb60e01b81523360048201526024810186905290516001600160a01b03909216935063a9059cbb92506044808201926020929091908290030181600087803b1580156118f757600080fd5b505af115801561190b573d6000803e3d6000fd5b505050506040513d602081101561192157600080fd5b505060408051828152905133917f6d45e65025b4e5354fca7fcb828878818b16573fe504e384472faa881216dd5a919081900360200190a250565b6000811161199a576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b60006119b76010546113a3600f5485612dcf90919063ffffffff16565b90508034146119fb576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6005546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611a34573d6000803e3d6000fd5b50600654604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611a8f57600080fd5b505af1158015611aa3573d6000803e3d6000fd5b505050506040513d6020811015611ab957600080fd5b5050336000908152600a6020526040902054431115611bb6576000611add336125d1565b90508015611bb45733600090815260086020526040902054611aff9082612d6e565b33600090815260086020526040902055600954611b1c9082612d6e565b600955600c54611b2c9082612e8f565b600c5560075460408051639fb9ec1160e01b8152336004820152602481018490526001604482015290516001600160a01b0390921691639fb9ec119160648082019260009290919082900301818387803b158015611b8957600080fd5b505af1158015611b9d573d6000803e3d6000fd5b5050336000908152600a6020526040902043905550505b505b33600090815260086020526040902054611bd09083612d6e565b33600090815260086020526040902055600954611bed9083612d6e565b600955336000908152600a6020526040902054611c1757336000908152600a602052604090204390555b60075460408051639fb9ec1160e01b8152336004820152602481018590526001604482015290516001600160a01b0390921691639fb9ec119160648082019260009290919082900301818387803b158015611c7157600080fd5b505af1158015611c85573d6000803e3d6000fd5b50506040805185815290513393507f3ad10ba9777a3bc21180a465e5459861d07cbdb271af9a0f10c993b365b760f892509081900360200190a25050565b6001600160a01b038116611d07576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b60005461010090046001600160a01b03163314611d57576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216611dbd576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b60005461010090046001600160a01b0316331480611de557506004546001600160a01b031633145b80611dfa57506002546001600160a01b031633145b611e3a576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b6001600160a01b0382166000818152601560205260409020546016805491929183908110611e6457fe5b6000918252602090912001546001600160a01b031614611eb8576040805162461bcd60e51b815260206004820152600a6024820152696e6f742065786973747360b01b604482015290519081900360640190fd5b506001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b600f5481565b6007546001600160a01b031681565b60005460ff1615611f3d576040805162461bcd60e51b8152602060048201526009602482015268696e697420646f6e6560b81b604482015290519081900360640190fd5b600780546001600160a01b03199081166001600160a01b039e8f16179091556006805482169c8e169c909c17909b556000805460028054909d169a8e169a909a17909b55600d97909755600e95909555600f93909355601091909155601155601255601355601455610100600160a81b03191661010091909316029190911760ff19166001179055565b601a5481565b6004546001600160a01b031681565b60145481565b60005461010090046001600160a01b031633148061200a57506004546001600160a01b031633145b8061201f57506002546001600160a01b031633145b61205f576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b806120a1576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b601391909155601455565b600a6020526000908152604090205481565b6006546001600160a01b031681565b600d5481565b60005461010090046001600160a01b03163314806120fb57506004546001600160a01b031633145b8061211057506002546001600160a01b031633145b612150576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80612192576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600f91909155601055565b600c5481565b60005461010090046001600160a01b03163314806121cb57506004546001600160a01b031633145b806121e057506002546001600160a01b031633145b612220576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80612262576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b601191909155601255565b60095481565b60005461010090046001600160a01b031633148061229b57506004546001600160a01b031633145b806122b057506002546001600160a01b031633145b6122ed576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b601a839055601b829055806123025743612304565b805b601c55505050565b6001600160a01b0382166000908152600a602052604081205443831115612337576000915050612421565b80612346576000915050612421565b80831015612358576000915050612421565b600954612369576000915050612421565b612371612f9d565b61237e82601c5486612eec565b9050600080600e54116123925760006123b6565b6123b6600e546113a3600d54856000600281106123ab57fe5b602002015190612dcf565b9050600080601b54116123ca5760006123e3565b6123e3601b546113a3601a54866001600281106123ab57fe5b6009546001600160a01b03891660009081526008602052604090205491925061241a916113a3906124148686612d6e565b90612dcf565b9450505050505b92915050565b6002546001600160a01b03163314612475576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600081116124b3576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600654604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561250d57600080fd5b505af1158015612521573d6000803e3d6000fd5b505050506040513d602081101561253757600080fd5b5050600c546125469082612d6e565b600c5550565b6002546001600160a01b0316331461259a576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60176020526000908152604090205460ff1681565b6000612421824361230c565b60195460ff1681565b60156020526000908152604090205481565b60185481565b6005546001600160a01b031681565b600b6020526000908152604090205481565b60115481565b6001600160a01b038116612669576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b0316331461268057600080fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166126e6576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b03163314612736576040805162461bcd60e51b815260206004820152600e60248201526d3737ba1039bab832b920b236b4b760911b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60125481565b60086020526000908152604090205481565b6003546001600160a01b03163314801561278957503315155b6127d2576040805162461bcd60e51b81526020600482015260156024820152743737ba103832b73234b733a9bab832b920b236b4b760591b604482015290519081900360640190fd5b60038054600280546001600160a01b03199081166001600160a01b03841617909155169055565b601b5481565b60105481565b6002546001600160a01b03163314612853576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60008111612891576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b80600c5410156128d5576040805162461bcd60e51b815260206004820152600a6024820152690dcdee840cadcdeeaced60b31b604482015290519081900360640190fd5b6006546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561292b57600080fd5b505af115801561293f573d6000803e3d6000fd5b505050506040513d602081101561295557600080fd5b5050600c546129649082612e8f565b600c555050565b600081116129a9576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b60006129c66012546113a360115485612dcf90919063ffffffff16565b9050803414612a0a576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b33600090815260086020526040902054821115612a5b576040805162461bcd60e51b815260206004820152600a6024820152690dcdee840cadcdeeaced60b31b604482015290519081900360640190fd5b6005546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015612a94573d6000803e3d6000fd5b5033600090815260086020908152604080832054600a9092529091205490831490431115612ba0576000612ac7336125d1565b90508015612b9e5733600090815260086020526040902054612ae99082612d6e565b33600090815260086020526040902055600954612b069082612d6e565b600955600c54612b169082612e8f565b600c5560075460408051639fb9ec1160e01b8152336004820152602481018490526001604482015290516001600160a01b0390921691639fb9ec119160648082019260009290919082900301818387803b158015612b7357600080fd5b505af1158015612b87573d6000803e3d6000fd5b5050336000908152600a6020526040902043905550505b505b600081612bad5783612bbe565b336000908152600860205260409020545b33600090815260086020526040902054909150612bdb9082612e8f565b33600090815260086020526040902055600954612bf89082612e8f565b6009556006546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015612c4f57600080fd5b505af1158015612c63573d6000803e3d6000fd5b505050506040513d6020811015612c7957600080fd5b505060075460408051639fb9ec1160e01b81523360048201526024810184905260006044820181905291516001600160a01b0390931692639fb9ec119260648084019391929182900301818387803b158015612cd457600080fd5b505af1158015612ce8573d6000803e3d6000fd5b50503360009081526008602052604090205415159150612d15905057336000908152600a60205260408120555b60408051828152905133917f53d02005d2e370ce08a8b60d65e07879891c336e6513821a3923f11854b54027919081900360200190a250505050565b60005461010090046001600160a01b031681565b60005460ff1681565b600082820183811015612dc8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082612dde57506000612421565b82820282848281612deb57fe5b0414612dc85760405162461bcd60e51b8152600401808060200182810382526021815260200180612fbc6021913960400191505060405180910390fd5b6000808211612e7e576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612e8757fe5b049392505050565b600082821115612ee6576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b612ef4612f9d565b818410612f1557506040805180820190915260008082526020820152612dc8565b8282111580612f22575082155b15612f4d576040805180820190915280612f3c8487612e8f565b815260200160008152509050612dc8565b828410612f7957604080518082019091526000815260208101612f708487612e8f565b90529050612dc8565b6040805180820190915280612f8e8587612e8f565b8152602001612f708486612e8f565b6040518060400160405280600290602082028036833750919291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220b0d13df2bcd410788b5c89b61ca011c0a44b65c1d791b7cdf9723d2255379ef964736f6c634300060c0033
Deployed Bytecode
0x60806040526004361061036b5760003560e01c806399e6f700116101c6578063c415b95c116100f7578063e7f9cefd11610095578063f3fef3a31161006f578063f3fef3a314610b5a578063f426571514610b93578063f851a44014610bb0578063fed0a20e14610bc55761036b565b8063e7f9cefd14610b1b578063ed5998da14610b30578063ef56a08b14610b455761036b565b8063d2c35ce8116100d1578063d2c35ce814610a6d578063d39ca7de14610aa0578063db588ec214610ad3578063e771e91a14610ae85761036b565b8063c415b95c14610a10578063cb454ec914610a25578063ce77beaf14610a585761036b565b8063b6b55f2511610164578063c00007b01161013e578063c00007b014610980578063c0f0622d146109b3578063c2acf7ea146109c8578063c2b2fdca146109fb5761036b565b8063b6b55f25146108dc578063bbcd5bbe14610906578063be69283e146109395761036b565b8063abb1c39b116101a0578063abb1c39b14610828578063ad7a672f14610858578063b0e8a45d1461086d578063b1dfb9b3146108a35761036b565b806399e6f700146107ce578063a84ffad5146107e3578063aa5c3ab4146108135761036b565b806348028d63116102a0578063683a229f1161023e57806387f48f4e1161021857806387f48f4e146107415780638aa9a37f146107565780638b70f35914610786578063965d61b9146107b95761036b565b8063683a229f146106955780637a5d5cf414610717578063857d49d51461072c5761036b565b80634dd18bf51161027a5780634dd18bf5146105fd578063546f9354146106305780635b7f6ea81461066b578063632a9a52146106805761036b565b806348028d63146105a15780634d04ad99146105b65780634d474898146105e05761036b565b80631d851bbd1161030d57806330d6a975116102e757806330d6a975146104e5578063379607f51461051e57806337e4c4ae1461053b57806340b584b41461056e5761036b565b80631d851bbd146104a657806326782247146104bb57806329575f6a146104d05761036b565b80630e18b681116103495780630e18b6811461040c5780630f07aa62146104215780631246af891461046757806319885898146104915761036b565b806301e336671461037057806309a07fd2146103b55780630a8d1be2146103dc575b600080fd5b34801561037c57600080fd5b506103b36004803603606081101561039357600080fd5b506001600160a01b03813581169160208101359091169060400135610bda565b005b3480156103c157600080fd5b506103ca610cb9565b60408051918252519081900360200190f35b3480156103e857600080fd5b506103b3600480360360408110156103ff57600080fd5b5080359060200135610cbf565b34801561041857600080fd5b506103b3610d89565b34801561042d57600080fd5b5061044b6004803603602081101561044457600080fd5b5035610e18565b604080516001600160a01b039092168252519081900360200190f35b34801561047357600080fd5b506103b36004803603602081101561048a57600080fd5b5035610e3f565b34801561049d57600080fd5b506103ca610fd8565b3480156104b257600080fd5b506103ca610fde565b3480156104c757600080fd5b5061044b610fe4565b3480156104dc57600080fd5b5061044b610ff3565b3480156104f157600080fd5b506103b36004803603604081101561050857600080fd5b506001600160a01b038135169060200135611002565b6103b36004803603602081101561053457600080fd5b5035611254565b34801561054757600080fd5b506103b36004803603602081101561055e57600080fd5b50356001600160a01b031661152d565b34801561057a57600080fd5b506103b36004803603602081101561059157600080fd5b50356001600160a01b03166116ec565b3480156105ad57600080fd5b5061044b611769565b3480156105c257600080fd5b506103b3600480360360208110156105d957600080fd5b5035611778565b6103b3600480360360208110156105f657600080fd5b503561195c565b34801561060957600080fd5b506103b36004803603602081101561062057600080fd5b50356001600160a01b0316611cc3565b34801561063c57600080fd5b506103b36004803603604081101561065357600080fd5b506001600160a01b0381351690602001351515611d79565b34801561067757600080fd5b506103ca611ee4565b34801561068c57600080fd5b5061044b611eea565b3480156106a157600080fd5b506103b360048036036101808110156106b957600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c08101359060e0810135906101008101359061012081013590610140810135906101600135611ef9565b34801561072357600080fd5b506103ca611fc7565b34801561073857600080fd5b5061044b611fcd565b34801561074d57600080fd5b506103ca611fdc565b34801561076257600080fd5b506103b36004803603604081101561077957600080fd5b5080359060200135611fe2565b34801561079257600080fd5b506103ca600480360360208110156107a957600080fd5b50356001600160a01b03166120ac565b3480156107c557600080fd5b5061044b6120be565b3480156107da57600080fd5b506103ca6120cd565b3480156107ef57600080fd5b506103b36004803603604081101561080657600080fd5b50803590602001356120d3565b34801561081f57600080fd5b506103ca61219d565b34801561083457600080fd5b506103b36004803603604081101561084b57600080fd5b50803590602001356121a3565b34801561086457600080fd5b506103ca61226d565b34801561087957600080fd5b506103b36004803603606081101561089057600080fd5b5080359060208101359060400135612273565b3480156108af57600080fd5b506103ca600480360360408110156108c657600080fd5b506001600160a01b03813516906020013561230c565b3480156108e857600080fd5b506103b3600480360360208110156108ff57600080fd5b5035612427565b34801561091257600080fd5b506103b36004803603602081101561092957600080fd5b50356001600160a01b031661254c565b34801561094557600080fd5b5061096c6004803603602081101561095c57600080fd5b50356001600160a01b03166125bc565b604080519115158252519081900360200190f35b34801561098c57600080fd5b506103ca600480360360208110156109a357600080fd5b50356001600160a01b03166125d1565b3480156109bf57600080fd5b5061096c6125dd565b3480156109d457600080fd5b506103ca600480360360208110156109eb57600080fd5b50356001600160a01b03166125e6565b348015610a0757600080fd5b506103ca6125f8565b348015610a1c57600080fd5b5061044b6125fe565b348015610a3157600080fd5b506103ca60048036036020811015610a4857600080fd5b50356001600160a01b031661260d565b348015610a6457600080fd5b506103ca61261f565b348015610a7957600080fd5b506103b360048036036020811015610a9057600080fd5b50356001600160a01b0316612625565b348015610aac57600080fd5b506103b360048036036020811015610ac357600080fd5b50356001600160a01b03166126a2565b348015610adf57600080fd5b506103ca612758565b348015610af457600080fd5b506103ca60048036036020811015610b0b57600080fd5b50356001600160a01b031661275e565b348015610b2757600080fd5b506103b3612770565b348015610b3c57600080fd5b506103ca6127f9565b348015610b5157600080fd5b506103ca6127ff565b348015610b6657600080fd5b506103b360048036036040811015610b7d57600080fd5b506001600160a01b038135169060200135612805565b6103b360048036036020811015610ba957600080fd5b503561296b565b348015610bbc57600080fd5b5061044b612d51565b348015610bd157600080fd5b5061096c612d65565b6002546001600160a01b03163314610c28576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b505050506040513d6020811015610ca957600080fd5b5051610cb457600080fd5b505050565b60135481565b60005461010090046001600160a01b0316331480610ce757506004546001600160a01b031633145b80610cfc57506002546001600160a01b031633145b610d3c576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80610d7e576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600d91909155600e55565b6001546001600160a01b031633148015610da257503315155b610de6576040805162461bcd60e51b815260206004820152601060248201526f3737ba103832b73234b733a0b236b4b760811b604482015290519081900360640190fd5b6001805460008054610100600160a81b0319166101006001600160a01b038416021790556001600160a01b0319169055565b60168181548110610e2557fe5b6000918252602090912001546001600160a01b0316905081565b60008111610e7d576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600654604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015610ed757600080fd5b505af1158015610eeb573d6000803e3d6000fd5b505050506040513d6020811015610f0157600080fd5b5050336000908152600b6020526040902054610f1d9082612d6e565b336000818152600b6020526040808220939093556007548351639fb9ec1160e01b81526004810193909352602483018590526001604484015292516001600160a01b0390931692639fb9ec1192606480820193929182900301818387803b158015610f8757600080fd5b505af1158015610f9b573d6000803e3d6000fd5b50506040805184815290513393507ff37db06620b96226404d091596ee3290dd042d17dc5c440a97876ffbb5d0886092509081900360200190a250565b600e5481565b601c5481565b6001546001600160a01b031681565b6002546001600160a01b031681565b3360009081526017602052604090205460ff16611054576040805162461bcd60e51b815260206004820152600b60248201526a1b9bdd081d1c9d5cdd195960aa1b604482015290519081900360640190fd5b60008111611092576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600654604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156110ec57600080fd5b505af1158015611100573d6000803e3d6000fd5b505050506040513d602081101561111657600080fd5b50506001600160a01b03821660009081526008602052604090205461113b9082612d6e565b6001600160a01b0383166000908152600860205260409020556009546111619082612d6e565b6009556001600160a01b0382166000908152600a602052604090205461119d576001600160a01b0382166000908152600a602052604090204390555b60075460408051639fb9ec1160e01b81526001600160a01b038581166004830152602482018590526001604483015291519190921691639fb9ec1191606480830192600092919082900301818387803b1580156111f957600080fd5b505af115801561120d573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693507f4995275d5fede9791a4f176a8aa7d0fea6c316f6ba53693c3acd58ee707a719692509081900360200190a25050565b438111156112a0576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b210313637b1b590373ab6b132b960611b604482015290519081900360640190fd5b336000908152600a60205260409020546112e9576040805162461bcd60e51b815260206004820152600560248201526432b93937b960d91b604482015290519081900360640190fd5b336000908152600a60205260409020548111611337576040805162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b604482015290519081900360640190fd5b6000611343338361230c565b905060008111611386576040805162461bcd60e51b81526020600482015260096024820152681b9bc81c995dd85c9960ba1b604482015290519081900360640190fd5b60006113a96014546113a360135485612dcf90919063ffffffff16565b90612e28565b90508034146113ed576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6005546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611426573d6000803e3d6000fd5b50336000908152600860205260409020546114419083612d6e565b3360009081526008602052604090205560095461145e9083612d6e565b600955600c5461146e9083612e8f565b600c55336000818152600a60205260408082208690556007548151639fb9ec1160e01b81526004810194909452602484018690526001604485015290516001600160a01b0390911692639fb9ec1192606480830193919282900301818387803b1580156114da57600080fd5b505af11580156114ee573d6000803e3d6000fd5b50506040805185815290513393507fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a92509081900360200190a2505050565b6001600160a01b038116611571576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b60005461010090046001600160a01b031633148061159957506004546001600160a01b031633145b806115ae57506002546001600160a01b031633145b6115ee576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60165415611673576001600160a01b038116600081815260156020526040902054601680549192918390811061162057fe5b6000918252602090912001546001600160a01b03161415611671576040805162461bcd60e51b815260206004820152600660248201526565786973747360d01b604482015290519081900360640190fd5b505b601680546001600160a01b0390921660008181526015602090815260408083209590955560179052928320805460ff1916600190811790915582549081018355919092527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242890180546001600160a01b0319169091179055565b6001600160a01b038116611730576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b0316331461174757600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031681565b600081116117b6576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b336000908152600b6020526040902054811115611807576040805162461bcd60e51b815260206004820152600a6024820152690dcdee840cadcdeeaced60b31b604482015290519081900360640190fd5b336000908152600b60205260409020546118219082612e8f565b336000818152600b6020526040808220939093556007548351639fb9ec1160e01b81526004810193909352602483018590526044830182905292516001600160a01b0390931692639fb9ec1192606480820193929182900301818387803b15801561188b57600080fd5b505af115801561189f573d6000803e3d6000fd5b50506006546040805163a9059cbb60e01b81523360048201526024810186905290516001600160a01b03909216935063a9059cbb92506044808201926020929091908290030181600087803b1580156118f757600080fd5b505af115801561190b573d6000803e3d6000fd5b505050506040513d602081101561192157600080fd5b505060408051828152905133917f6d45e65025b4e5354fca7fcb828878818b16573fe504e384472faa881216dd5a919081900360200190a250565b6000811161199a576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b60006119b76010546113a3600f5485612dcf90919063ffffffff16565b90508034146119fb576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6005546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611a34573d6000803e3d6000fd5b50600654604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611a8f57600080fd5b505af1158015611aa3573d6000803e3d6000fd5b505050506040513d6020811015611ab957600080fd5b5050336000908152600a6020526040902054431115611bb6576000611add336125d1565b90508015611bb45733600090815260086020526040902054611aff9082612d6e565b33600090815260086020526040902055600954611b1c9082612d6e565b600955600c54611b2c9082612e8f565b600c5560075460408051639fb9ec1160e01b8152336004820152602481018490526001604482015290516001600160a01b0390921691639fb9ec119160648082019260009290919082900301818387803b158015611b8957600080fd5b505af1158015611b9d573d6000803e3d6000fd5b5050336000908152600a6020526040902043905550505b505b33600090815260086020526040902054611bd09083612d6e565b33600090815260086020526040902055600954611bed9083612d6e565b600955336000908152600a6020526040902054611c1757336000908152600a602052604090204390555b60075460408051639fb9ec1160e01b8152336004820152602481018590526001604482015290516001600160a01b0390921691639fb9ec119160648082019260009290919082900301818387803b158015611c7157600080fd5b505af1158015611c85573d6000803e3d6000fd5b50506040805185815290513393507f3ad10ba9777a3bc21180a465e5459861d07cbdb271af9a0f10c993b365b760f892509081900360200190a25050565b6001600160a01b038116611d07576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b60005461010090046001600160a01b03163314611d57576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216611dbd576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b60005461010090046001600160a01b0316331480611de557506004546001600160a01b031633145b80611dfa57506002546001600160a01b031633145b611e3a576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b6001600160a01b0382166000818152601560205260409020546016805491929183908110611e6457fe5b6000918252602090912001546001600160a01b031614611eb8576040805162461bcd60e51b815260206004820152600a6024820152696e6f742065786973747360b01b604482015290519081900360640190fd5b506001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b600f5481565b6007546001600160a01b031681565b60005460ff1615611f3d576040805162461bcd60e51b8152602060048201526009602482015268696e697420646f6e6560b81b604482015290519081900360640190fd5b600780546001600160a01b03199081166001600160a01b039e8f16179091556006805482169c8e169c909c17909b556000805460028054909d169a8e169a909a17909b55600d97909755600e95909555600f93909355601091909155601155601255601355601455610100600160a81b03191661010091909316029190911760ff19166001179055565b601a5481565b6004546001600160a01b031681565b60145481565b60005461010090046001600160a01b031633148061200a57506004546001600160a01b031633145b8061201f57506002546001600160a01b031633145b61205f576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b806120a1576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b601391909155601455565b600a6020526000908152604090205481565b6006546001600160a01b031681565b600d5481565b60005461010090046001600160a01b03163314806120fb57506004546001600160a01b031633145b8061211057506002546001600160a01b031633145b612150576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80612192576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600f91909155601055565b600c5481565b60005461010090046001600160a01b03163314806121cb57506004546001600160a01b031633145b806121e057506002546001600160a01b031633145b612220576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80612262576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b601191909155601255565b60095481565b60005461010090046001600160a01b031633148061229b57506004546001600160a01b031633145b806122b057506002546001600160a01b031633145b6122ed576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b601a839055601b829055806123025743612304565b805b601c55505050565b6001600160a01b0382166000908152600a602052604081205443831115612337576000915050612421565b80612346576000915050612421565b80831015612358576000915050612421565b600954612369576000915050612421565b612371612f9d565b61237e82601c5486612eec565b9050600080600e54116123925760006123b6565b6123b6600e546113a3600d54856000600281106123ab57fe5b602002015190612dcf565b9050600080601b54116123ca5760006123e3565b6123e3601b546113a3601a54866001600281106123ab57fe5b6009546001600160a01b03891660009081526008602052604090205491925061241a916113a3906124148686612d6e565b90612dcf565b9450505050505b92915050565b6002546001600160a01b03163314612475576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600081116124b3576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600654604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561250d57600080fd5b505af1158015612521573d6000803e3d6000fd5b505050506040513d602081101561253757600080fd5b5050600c546125469082612d6e565b600c5550565b6002546001600160a01b0316331461259a576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60176020526000908152604090205460ff1681565b6000612421824361230c565b60195460ff1681565b60156020526000908152604090205481565b60185481565b6005546001600160a01b031681565b600b6020526000908152604090205481565b60115481565b6001600160a01b038116612669576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b0316331461268057600080fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166126e6576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b03163314612736576040805162461bcd60e51b815260206004820152600e60248201526d3737ba1039bab832b920b236b4b760911b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60125481565b60086020526000908152604090205481565b6003546001600160a01b03163314801561278957503315155b6127d2576040805162461bcd60e51b81526020600482015260156024820152743737ba103832b73234b733a9bab832b920b236b4b760591b604482015290519081900360640190fd5b60038054600280546001600160a01b03199081166001600160a01b03841617909155169055565b601b5481565b60105481565b6002546001600160a01b03163314612853576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60008111612891576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b80600c5410156128d5576040805162461bcd60e51b815260206004820152600a6024820152690dcdee840cadcdeeaced60b31b604482015290519081900360640190fd5b6006546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561292b57600080fd5b505af115801561293f573d6000803e3d6000fd5b505050506040513d602081101561295557600080fd5b5050600c546129649082612e8f565b600c555050565b600081116129a9576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b60006129c66012546113a360115485612dcf90919063ffffffff16565b9050803414612a0a576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b33600090815260086020526040902054821115612a5b576040805162461bcd60e51b815260206004820152600a6024820152690dcdee840cadcdeeaced60b31b604482015290519081900360640190fd5b6005546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015612a94573d6000803e3d6000fd5b5033600090815260086020908152604080832054600a9092529091205490831490431115612ba0576000612ac7336125d1565b90508015612b9e5733600090815260086020526040902054612ae99082612d6e565b33600090815260086020526040902055600954612b069082612d6e565b600955600c54612b169082612e8f565b600c5560075460408051639fb9ec1160e01b8152336004820152602481018490526001604482015290516001600160a01b0390921691639fb9ec119160648082019260009290919082900301818387803b158015612b7357600080fd5b505af1158015612b87573d6000803e3d6000fd5b5050336000908152600a6020526040902043905550505b505b600081612bad5783612bbe565b336000908152600860205260409020545b33600090815260086020526040902054909150612bdb9082612e8f565b33600090815260086020526040902055600954612bf89082612e8f565b6009556006546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015612c4f57600080fd5b505af1158015612c63573d6000803e3d6000fd5b505050506040513d6020811015612c7957600080fd5b505060075460408051639fb9ec1160e01b81523360048201526024810184905260006044820181905291516001600160a01b0390931692639fb9ec119260648084019391929182900301818387803b158015612cd457600080fd5b505af1158015612ce8573d6000803e3d6000fd5b50503360009081526008602052604090205415159150612d15905057336000908152600a60205260408120555b60408051828152905133917f53d02005d2e370ce08a8b60d65e07879891c336e6513821a3923f11854b54027919081900360200190a250505050565b60005461010090046001600160a01b031681565b60005460ff1681565b600082820183811015612dc8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082612dde57506000612421565b82820282848281612deb57fe5b0414612dc85760405162461bcd60e51b8152600401808060200182810382526021815260200180612fbc6021913960400191505060405180910390fd5b6000808211612e7e576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612e8757fe5b049392505050565b600082821115612ee6576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b612ef4612f9d565b818410612f1557506040805180820190915260008082526020820152612dc8565b8282111580612f22575082155b15612f4d576040805180820190915280612f3c8487612e8f565b815260200160008152509050612dc8565b828410612f7957604080518082019091526000815260208101612f708487612e8f565b90529050612dc8565b6040805180820190915280612f8e8587612e8f565b8152602001612f708486612e8f565b6040518060400160405280600290602082028036833750919291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220b0d13df2bcd410788b5c89b61ca011c0a44b65c1d791b7cdf9723d2255379ef964736f6c634300060c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.