Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 27 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 12250375 | 1307 days ago | IN | 0 ETH | 0.00652452 | ||||
Claim | 12250363 | 1307 days ago | IN | 0 ETH | 0.0029265 | ||||
Exchange | 12233271 | 1309 days ago | IN | 0 ETH | 0.07732944 | ||||
Set Exchange Rat... | 11995154 | 1346 days ago | IN | 0 ETH | 0.00350497 | ||||
Set Exchange Rat... | 11918930 | 1358 days ago | IN | 0 ETH | 0.00521173 | ||||
Owner Mint | 11886574 | 1363 days ago | IN | 0 ETH | 0.04319715 | ||||
Exchange | 11857047 | 1367 days ago | IN | 0 ETH | 0.05017471 | ||||
Owner Mint | 11840366 | 1370 days ago | IN | 0 ETH | 0.02969331 | ||||
Claim | 11816100 | 1373 days ago | IN | 0 ETH | 0.01300992 | ||||
Owner Mint | 11813070 | 1374 days ago | IN | 0 ETH | 0.0302993 | ||||
Exchange | 11801315 | 1376 days ago | IN | 0 ETH | 0.04758898 | ||||
Exchange | 11795115 | 1377 days ago | IN | 0 ETH | 0.06497428 | ||||
Exchange | 11795050 | 1377 days ago | IN | 0 ETH | 0.07383037 | ||||
Owner Mint | 11794714 | 1377 days ago | IN | 0 ETH | 0.0605986 | ||||
Exchange | 11794181 | 1377 days ago | IN | 0 ETH | 0.04846378 | ||||
Exchange | 11793674 | 1377 days ago | IN | 0 ETH | 0.06235342 | ||||
Exchange | 11790061 | 1377 days ago | IN | 0 ETH | 0.05948419 | ||||
Exchange | 11789027 | 1378 days ago | IN | 0 ETH | 0.08156611 | ||||
Exchange | 11783388 | 1378 days ago | IN | 0 ETH | 0.04583938 | ||||
Exchange | 11783233 | 1378 days ago | IN | 0 ETH | 0.04991708 | ||||
Set Exchange Rat... | 11783227 | 1378 days ago | IN | 0 ETH | 0.00478504 | ||||
Set Exchange Rat... | 11781053 | 1379 days ago | IN | 0 ETH | 0.00420596 | ||||
Owner Mint | 11780802 | 1379 days ago | IN | 0 ETH | 0.01204608 | ||||
Set White List | 11780713 | 1379 days ago | IN | 0 ETH | 0.00665844 | ||||
Set Exchange Rat... | 11780711 | 1379 days ago | IN | 0 ETH | 0.01204168 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TokenExchange
Compiler Version
v0.5.16+commit.9c3226ce
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-02-03 */ // Dependency file: @openzeppelin/contracts/token/ERC20/IERC20.sol // pragma solidity ^0.5.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ 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); } // Dependency file: @openzeppelin/contracts/math/SafeMath.sol // pragma solidity ^0.5.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, 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) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message 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. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // Dependency file: @openzeppelin/contracts/utils/Address.sol // pragma solidity ^0.5.5; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [// importANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * // importANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } } // Dependency file: @openzeppelin/contracts/token/ERC20/SafeERC20.sol // pragma solidity ^0.5.0; // import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; // import "@openzeppelin/contracts/math/SafeMath.sol"; // import "@openzeppelin/contracts/utils/Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // Dependency file: contracts/interfaces/IPOWToken.sol // pragma solidity >=0.5.0; interface IPOWToken { function updateIncomeRate() external; function incomeToken() external view returns(uint256); function incomeRate() external view returns(uint256); function startMiningTime() external view returns (uint256); function mint(address to, uint value) external; function remainingAmount() external view returns(uint256); function rewardToken() external view returns(uint256); function stakingRewardRate() external view returns(uint256); function lpStakingRewardRate() external view returns(uint256); function lpStaking2RewardRate() external view returns(uint256); function rewardPeriodFinish() external view returns(uint256); function claimIncome(address to, uint256 amount) external; function claimReward(address to, uint256 amount) external; function weiToIncomeTokenValue(uint256 amount) external view returns (uint256); function lpStakingSupply() external view returns(uint256); function lpStaking2Supply() external view returns(uint256); function updateStakingPoolsIncome() external; function updateStakingPoolsReward() external; function getStakingRewardRate(address _pool) external view returns(uint256); function getLpStakingSupply(address _pool) external view returns(uint256); function isStakingPool(address _pool) external view returns (bool); function minter() external view returns(address); } // Dependency file: contracts/interfaces/IERC20Detail.sol // pragma solidity >=0.5.0; interface IERC20Detail { function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); } // Dependency file: contracts/modules/ReentrancyGuard.sol // pragma solidity >=0.5.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. * * _Since v2.5.0:_ this module is now much more gas efficient, given net gas * metering changes introduced in the Istanbul hardfork. */ contract ReentrancyGuard { bool private _notEntered; function initialize() internal { // Storing an initial non-zero value makes deployment a bit more // expensive, but in exchange the refund on every call to nonReentrant // will be lower in amount. Since refunds are capped to a percetange of // the total transaction's gas, it is best to keep them low in cases // like this one, to increase the likelihood of the full refund coming // into effect. _notEntered = true; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_notEntered, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _notEntered = false; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _notEntered = true; } } // Dependency file: contracts/modules/Ownable.sol // pragma solidity >=0.5.0; contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner, 'Ownable: FORBIDDEN'); _; } function transferOwnership(address newOwner) external onlyOwner { require(newOwner != address(0), "new owner is the zero address"); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } // Dependency file: contracts/modules/Paramable.sol // pragma solidity >=0.5.0; // import 'contracts/modules/Ownable.sol'; contract Paramable is Ownable { address public paramSetter; event ParamSetterChanged(address indexed previousSetter, address indexed newSetter); constructor() public { paramSetter = msg.sender; } modifier onlyParamSetter() { require(msg.sender == owner || msg.sender == paramSetter, "!paramSetter"); _; } function setParamSetter(address _paramSetter) external onlyOwner { require(_paramSetter != address(0), "param setter is the zero address"); emit ParamSetterChanged(paramSetter, _paramSetter); paramSetter = _paramSetter; } } // Root file: contracts/TokenExchange.sol pragma solidity >=0.5.0; // import '/Users/tercel/work/bmining/bmining-protocol/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol'; // import "@openzeppelin/contracts/math/SafeMath.sol"; // import '/Users/tercel/work/bmining/bmining-protocol/node_modules/@openzeppelin/contracts/token/ERC20/SafeERC20.sol'; // import "contracts/interfaces/IPOWToken.sol"; // import "contracts/interfaces/IERC20Detail.sol"; // import "contracts/modules/ReentrancyGuard.sol"; // import 'contracts/modules/Paramable.sol'; contract TokenExchange is Paramable, ReentrancyGuard{ using SafeMath for uint256; using SafeERC20 for IERC20; bool private initialized; uint256 public constant exchangeRateAmplifier = 1000; address public hashRateToken; address[] public exchangeTokens; mapping (address => uint256) public exchangeRates; mapping (address => bool) public isWhiteListed; function initialize(address _hashRateToken) public { require(!initialized, "already initialized"); require(IPOWToken(_hashRateToken).minter() == address(this), 'invalid hashRateToken'); super.initialize(); initialized = true; hashRateToken = _hashRateToken; } function setWhiteLists (address[] calldata _users, bool[] calldata _values) external onlyOwner { require(_users.length == _values.length, 'invalid parameters'); for (uint i=0; i<_users.length; i++){ _setWhiteList(_users[i], _values[i]); } } function setWhiteList (address _user, bool _value) external onlyOwner { require(isWhiteListed[_user] != _value, 'no change'); _setWhiteList(_user, _value); } function _setWhiteList (address _user, bool _value) internal { emit ChangedWhiteList(_user, isWhiteListed[_user], _value); isWhiteListed[_user] = _value; } function countExchangeTokens() public view returns (uint256) { return exchangeTokens.length; } function setExchangeRate(address _exchangeToken, uint256 _exchangeRate) external onlyParamSetter { exchangeRates[_exchangeToken] = _exchangeRate; bool found = false; for(uint256 i; i<exchangeTokens.length; i++) { if(exchangeTokens[i] == _exchangeToken) { found = true; break; } } if(!found) { exchangeTokens.push(_exchangeToken); } } function remainingAmount() public view returns(uint256) { return IPOWToken(hashRateToken).remainingAmount(); } function needAmount(address exchangeToken, uint256 amount) public view returns (uint256) { uint256 hashRateTokenDecimal = IERC20Detail(hashRateToken).decimals(); uint256 exchangeTokenDecimal = IERC20Detail(exchangeToken).decimals(); uint256 hashRateTokenAmplifier = 10**hashRateTokenDecimal; uint256 exchangeTokenAmplifier = 10**exchangeTokenDecimal; return amount.mul(exchangeRates[exchangeToken]).mul(exchangeTokenAmplifier).div(hashRateTokenAmplifier).div(exchangeRateAmplifier); } function exchange(address exchangeToken, uint256 amount, address to) external nonReentrant { require(amount > 0, "Cannot exchange 0"); require(exchangeRates[exchangeToken] > 0, "exchangeRates is 0"); require(amount <= remainingAmount(), "not sufficient supply"); uint256 token_amount = needAmount(exchangeToken, amount); IERC20(exchangeToken).safeTransferFrom(msg.sender, address(this), token_amount); IPOWToken(hashRateToken).mint(to, amount); emit Exchanged(msg.sender, exchangeToken, amount, token_amount); } function ownerMint(uint256 amount, address to) external onlyOwner { IPOWToken(hashRateToken).mint(to, amount); } function claim(address _token, uint256 _amount) external { require(isWhiteListed[msg.sender], "sender is not in whitelist"); if (_token == address(0)) { safeTransferETH(msg.sender, _amount); } else { IERC20(_token).safeTransfer(msg.sender, _amount); } } function safeTransferETH(address to, uint amount) internal { address(uint160(to)).transfer(amount); } event Exchanged(address indexed user, address indexed token, uint256 amount, uint256 token_amount); event ChangedWhiteList(address indexed _user, bool _old, bool _new); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"bool","name":"_old","type":"bool"},{"indexed":false,"internalType":"bool","name":"_new","type":"bool"}],"name":"ChangedWhiteList","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"token_amount","type":"uint256"}],"name":"Exchanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousSetter","type":"address"},{"indexed":true,"internalType":"address","name":"newSetter","type":"address"}],"name":"ParamSetterChanged","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"claim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"countExchangeTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"exchangeToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"exchange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"exchangeRateAmplifier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exchangeRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"exchangeTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hashRateToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_hashRateToken","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhiteListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"exchangeToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"needAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"ownerMint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paramSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"remainingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_exchangeToken","type":"address"},{"internalType":"uint256","name":"_exchangeRate","type":"uint256"}],"name":"setExchangeRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_paramSetter","type":"address"}],"name":"setParamSetter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setWhiteList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"bool[]","name":"_values","type":"bool[]"}],"name":"setWhiteLists","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260008054336001600160a01b031991821681178355600180549092161790556115e890819061003390396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063a50a1fe6116100ad578063c4d66de811610071578063c4d66de81461039f578063d52c57e0146103c5578063d9a27c6e146103f1578063eb6ee0a11461041d578063f2fde38b1461042557610121565b8063a50a1fe614610257578063aa3166b41461025f578063aad3ec9614610285578063bd5c5420146102b1578063c39c4a0c146102dd57610121565b806385c15d9a116100f457806385c15d9a146101bb5780638d14e127146101e15780638da5cb5b146102115780638f72d54514610219578063a250bc6b1461022157610121565b80631047928014610126578063404771261461014057806343217fe4146101795780636f9170f614610181575b600080fd5b61012e61044b565b60408051918252519081900360200190f35b61015d6004803603602081101561015657600080fd5b5035610451565b604080516001600160a01b039092168252519081900360200190f35b61012e610478565b6101a76004803603602081101561019757600080fd5b50356001600160a01b031661047e565b604080519115158252519081900360200190f35b61012e600480360360208110156101d157600080fd5b50356001600160a01b0316610493565b61020f600480360360408110156101f757600080fd5b506001600160a01b03813516906020013515156104a5565b005b61015d610567565b61015d610576565b61020f6004803603606081101561023757600080fd5b506001600160a01b03813581169160208101359160409091013516610585565b61012e6107e0565b61020f6004803603602081101561027557600080fd5b50356001600160a01b0316610856565b61020f6004803603604081101561029b57600080fd5b506001600160a01b038135169060200135610961565b61020f600480360360408110156102c757600080fd5b506001600160a01b0381351690602001356109fc565b61020f600480360360408110156102f357600080fd5b81019060208101813564010000000081111561030e57600080fd5b82018360208201111561032057600080fd5b8035906020019184602083028401116401000000008311171561034257600080fd5b91939092909160208101903564010000000081111561036057600080fd5b82018360208201111561037257600080fd5b8035906020019184602083028401116401000000008311171561039457600080fd5b509092509050610b20565b61020f600480360360208110156103b557600080fd5b50356001600160a01b0316610c10565b61020f600480360360408110156103db57600080fd5b50803590602001356001600160a01b0316610d65565b61012e6004803603604081101561040757600080fd5b506001600160a01b038135169060200135610e2a565b61015d610f90565b61020f6004803603602081101561043b57600080fd5b50356001600160a01b0316610f9f565b60035490565b6003818154811061045e57fe5b6000918252602090912001546001600160a01b0316905081565b6103e881565b60056020526000908152604090205460ff1681565b60046020526000908152604090205481565b6000546001600160a01b031633146104f9576040805162461bcd60e51b815260206004820152601260248201527127bbb730b136329d102327a92124a22222a760711b604482015290519081900360640190fd5b6001600160a01b03821660009081526005602052604090205460ff1615158115151415610559576040805162461bcd60e51b81526020600482015260096024820152686e6f206368616e676560b81b604482015290519081900360640190fd5b61056382826110a9565b5050565b6000546001600160a01b031681565b6002546001600160a01b031681565b600154600160a01b900460ff166105e3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6001805460ff60a01b1916905581610636576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f742065786368616e6765203607c1b604482015290519081900360640190fd5b6001600160a01b038316600090815260046020526040902054610695576040805162461bcd60e51b8152602060048201526012602482015271065786368616e6765526174657320697320360741b604482015290519081900360640190fd5b61069d6107e0565b8211156106e9576040805162461bcd60e51b81526020600482015260156024820152746e6f742073756666696369656e7420737570706c7960581b604482015290519081900360640190fd5b60006106f58484610e2a565b90506107126001600160a01b03851633308463ffffffff61113316565b600254604080516340c10f1960e01b81526001600160a01b03858116600483015260248201879052915191909216916340c10f1991604480830192600092919082900301818387803b15801561076757600080fd5b505af115801561077b573d6000803e3d6000fd5b5050604080518681526020810185905281516001600160a01b03891694503393507f9a406bc63ac2307f5ee52002fb44c825e70ce5c177ca9cd148425d32053ed68d929181900390910190a350506001805460ff60a01b1916600160a01b1790555050565b600254604080516352850ff360e11b815290516000926001600160a01b03169163a50a1fe6916004808301926020929190829003018186803b15801561082557600080fd5b505afa158015610839573d6000803e3d6000fd5b505050506040513d602081101561084f57600080fd5b5051905090565b6000546001600160a01b031633146108aa576040805162461bcd60e51b815260206004820152601260248201527127bbb730b136329d102327a92124a22222a760711b604482015290519081900360640190fd5b6001600160a01b038116610905576040805162461bcd60e51b815260206004820181905260248201527f706172616d2073657474657220697320746865207a65726f2061646472657373604482015290519081900360640190fd5b6001546040516001600160a01b038084169216907fbdb27c45e7cebea53416bc78c5bfc5014c1efa4cfd3a2cc9398aeb9aaa617fb590600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526005602052604090205460ff166109c5576040805162461bcd60e51b815260206004820152601a60248201527f73656e646572206973206e6f7420696e2077686974656c697374000000000000604482015290519081900360640190fd5b6001600160a01b0382166109e2576109dd3382611193565b610563565b6105636001600160a01b038316338363ffffffff6111c916565b6000546001600160a01b0316331480610a1f57506001546001600160a01b031633145b610a5f576040805162461bcd60e51b815260206004820152600c60248201526b10b830b930b6a9b2ba3a32b960a11b604482015290519081900360640190fd5b6001600160a01b0382166000908152600460205260408120829055805b600354811015610ac957836001600160a01b031660038281548110610a9d57fe5b6000918252602090912001546001600160a01b03161415610ac15760019150610ac9565b600101610a7c565b5080610b1b57600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0385161790555b505050565b6000546001600160a01b03163314610b74576040805162461bcd60e51b815260206004820152601260248201527127bbb730b136329d102327a92124a22222a760711b604482015290519081900360640190fd5b828114610bbd576040805162461bcd60e51b8152602060048201526012602482015271696e76616c696420706172616d657465727360701b604482015290519081900360640190fd5b60005b83811015610c0957610c01858583818110610bd757fe5b905060200201356001600160a01b0316848484818110610bf357fe5b9050602002013515156110a9565b600101610bc0565b5050505050565b600154600160a81b900460ff1615610c65576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b306001600160a01b0316816001600160a01b031663075461726040518163ffffffff1660e01b815260040160206040518083038186803b158015610ca857600080fd5b505afa158015610cbc573d6000803e3d6000fd5b505050506040513d6020811015610cd257600080fd5b50516001600160a01b031614610d27576040805162461bcd60e51b815260206004820152601560248201527434b73b30b634b2103430b9b42930ba32aa37b5b2b760591b604482015290519081900360640190fd5b610d2f61121b565b6001805460ff60a81b1916600160a81b179055600280546001600160a01b039092166001600160a01b0319909216919091179055565b6000546001600160a01b03163314610db9576040805162461bcd60e51b815260206004820152601260248201527127bbb730b136329d102327a92124a22222a760711b604482015290519081900360640190fd5b600254604080516340c10f1960e01b81526001600160a01b03848116600483015260248201869052915191909216916340c10f1991604480830192600092919082900301818387803b158015610e0e57600080fd5b505af1158015610e22573d6000803e3d6000fd5b505050505050565b600080600260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610e7b57600080fd5b505afa158015610e8f573d6000803e3d6000fd5b505050506040513d6020811015610ea557600080fd5b50516040805163313ce56760e01b8152905160ff90921692506000916001600160a01b0387169163313ce567916004808301926020929190829003018186803b158015610ef157600080fd5b505afa158015610f05573d6000803e3d6000fd5b505050506040513d6020811015610f1b57600080fd5b50516001600160a01b03861660009081526004602052604090205460ff9091169150600a83810a919083900a90610f83906103e890610f7790859082908690610f6b908d9063ffffffff61123016565b9063ffffffff61123016565b9063ffffffff61129016565b9450505050505b92915050565b6001546001600160a01b031681565b6000546001600160a01b03163314610ff3576040805162461bcd60e51b815260206004820152601260248201527127bbb730b136329d102327a92124a22222a760711b604482015290519081900360640190fd5b6001600160a01b03811661104e576040805162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f2061646472657373000000604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821660008181526005602090815260409182902054825160ff909116151581528415159181019190915281517f2df7084b6719371943496da07fe6285f216dd865c7759a0ee22e689e85eb3b7d929181900390910190a26001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261118d9085906112d2565b50505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610b1b573d6000803e3d6000fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610b1b9084906112d2565b6001805460ff60a01b1916600160a01b179055565b60008261123f57506000610f8a565b8282028284828161124c57fe5b04146112895760405162461bcd60e51b81526004018080602001828103825260218152602001806115696021913960400191505060405180910390fd5b9392505050565b600061128983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061148a565b6112e4826001600160a01b031661152c565b611335576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106113735780518252601f199092019160209182019101611354565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146113d5576040519150601f19603f3d011682016040523d82523d6000602084013e6113da565b606091505b509150915081611431576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561118d5780806020019051602081101561144d57600080fd5b505161118d5760405162461bcd60e51b815260040180806020018281038252602a81526020018061158a602a913960400191505060405180910390fd5b600081836115165760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156114db5781810151838201526020016114c3565b50505050905090810190601f1680156115085780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161152257fe5b0495945050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061156057508115155b94935050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820341cdeb8d3654716aa2742715ddda360a2c27ab1563668ed228d30d576bba64764736f6c63430005100032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101215760003560e01c8063a50a1fe6116100ad578063c4d66de811610071578063c4d66de81461039f578063d52c57e0146103c5578063d9a27c6e146103f1578063eb6ee0a11461041d578063f2fde38b1461042557610121565b8063a50a1fe614610257578063aa3166b41461025f578063aad3ec9614610285578063bd5c5420146102b1578063c39c4a0c146102dd57610121565b806385c15d9a116100f457806385c15d9a146101bb5780638d14e127146101e15780638da5cb5b146102115780638f72d54514610219578063a250bc6b1461022157610121565b80631047928014610126578063404771261461014057806343217fe4146101795780636f9170f614610181575b600080fd5b61012e61044b565b60408051918252519081900360200190f35b61015d6004803603602081101561015657600080fd5b5035610451565b604080516001600160a01b039092168252519081900360200190f35b61012e610478565b6101a76004803603602081101561019757600080fd5b50356001600160a01b031661047e565b604080519115158252519081900360200190f35b61012e600480360360208110156101d157600080fd5b50356001600160a01b0316610493565b61020f600480360360408110156101f757600080fd5b506001600160a01b03813516906020013515156104a5565b005b61015d610567565b61015d610576565b61020f6004803603606081101561023757600080fd5b506001600160a01b03813581169160208101359160409091013516610585565b61012e6107e0565b61020f6004803603602081101561027557600080fd5b50356001600160a01b0316610856565b61020f6004803603604081101561029b57600080fd5b506001600160a01b038135169060200135610961565b61020f600480360360408110156102c757600080fd5b506001600160a01b0381351690602001356109fc565b61020f600480360360408110156102f357600080fd5b81019060208101813564010000000081111561030e57600080fd5b82018360208201111561032057600080fd5b8035906020019184602083028401116401000000008311171561034257600080fd5b91939092909160208101903564010000000081111561036057600080fd5b82018360208201111561037257600080fd5b8035906020019184602083028401116401000000008311171561039457600080fd5b509092509050610b20565b61020f600480360360208110156103b557600080fd5b50356001600160a01b0316610c10565b61020f600480360360408110156103db57600080fd5b50803590602001356001600160a01b0316610d65565b61012e6004803603604081101561040757600080fd5b506001600160a01b038135169060200135610e2a565b61015d610f90565b61020f6004803603602081101561043b57600080fd5b50356001600160a01b0316610f9f565b60035490565b6003818154811061045e57fe5b6000918252602090912001546001600160a01b0316905081565b6103e881565b60056020526000908152604090205460ff1681565b60046020526000908152604090205481565b6000546001600160a01b031633146104f9576040805162461bcd60e51b815260206004820152601260248201527127bbb730b136329d102327a92124a22222a760711b604482015290519081900360640190fd5b6001600160a01b03821660009081526005602052604090205460ff1615158115151415610559576040805162461bcd60e51b81526020600482015260096024820152686e6f206368616e676560b81b604482015290519081900360640190fd5b61056382826110a9565b5050565b6000546001600160a01b031681565b6002546001600160a01b031681565b600154600160a01b900460ff166105e3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6001805460ff60a01b1916905581610636576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f742065786368616e6765203607c1b604482015290519081900360640190fd5b6001600160a01b038316600090815260046020526040902054610695576040805162461bcd60e51b8152602060048201526012602482015271065786368616e6765526174657320697320360741b604482015290519081900360640190fd5b61069d6107e0565b8211156106e9576040805162461bcd60e51b81526020600482015260156024820152746e6f742073756666696369656e7420737570706c7960581b604482015290519081900360640190fd5b60006106f58484610e2a565b90506107126001600160a01b03851633308463ffffffff61113316565b600254604080516340c10f1960e01b81526001600160a01b03858116600483015260248201879052915191909216916340c10f1991604480830192600092919082900301818387803b15801561076757600080fd5b505af115801561077b573d6000803e3d6000fd5b5050604080518681526020810185905281516001600160a01b03891694503393507f9a406bc63ac2307f5ee52002fb44c825e70ce5c177ca9cd148425d32053ed68d929181900390910190a350506001805460ff60a01b1916600160a01b1790555050565b600254604080516352850ff360e11b815290516000926001600160a01b03169163a50a1fe6916004808301926020929190829003018186803b15801561082557600080fd5b505afa158015610839573d6000803e3d6000fd5b505050506040513d602081101561084f57600080fd5b5051905090565b6000546001600160a01b031633146108aa576040805162461bcd60e51b815260206004820152601260248201527127bbb730b136329d102327a92124a22222a760711b604482015290519081900360640190fd5b6001600160a01b038116610905576040805162461bcd60e51b815260206004820181905260248201527f706172616d2073657474657220697320746865207a65726f2061646472657373604482015290519081900360640190fd5b6001546040516001600160a01b038084169216907fbdb27c45e7cebea53416bc78c5bfc5014c1efa4cfd3a2cc9398aeb9aaa617fb590600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526005602052604090205460ff166109c5576040805162461bcd60e51b815260206004820152601a60248201527f73656e646572206973206e6f7420696e2077686974656c697374000000000000604482015290519081900360640190fd5b6001600160a01b0382166109e2576109dd3382611193565b610563565b6105636001600160a01b038316338363ffffffff6111c916565b6000546001600160a01b0316331480610a1f57506001546001600160a01b031633145b610a5f576040805162461bcd60e51b815260206004820152600c60248201526b10b830b930b6a9b2ba3a32b960a11b604482015290519081900360640190fd5b6001600160a01b0382166000908152600460205260408120829055805b600354811015610ac957836001600160a01b031660038281548110610a9d57fe5b6000918252602090912001546001600160a01b03161415610ac15760019150610ac9565b600101610a7c565b5080610b1b57600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0385161790555b505050565b6000546001600160a01b03163314610b74576040805162461bcd60e51b815260206004820152601260248201527127bbb730b136329d102327a92124a22222a760711b604482015290519081900360640190fd5b828114610bbd576040805162461bcd60e51b8152602060048201526012602482015271696e76616c696420706172616d657465727360701b604482015290519081900360640190fd5b60005b83811015610c0957610c01858583818110610bd757fe5b905060200201356001600160a01b0316848484818110610bf357fe5b9050602002013515156110a9565b600101610bc0565b5050505050565b600154600160a81b900460ff1615610c65576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b306001600160a01b0316816001600160a01b031663075461726040518163ffffffff1660e01b815260040160206040518083038186803b158015610ca857600080fd5b505afa158015610cbc573d6000803e3d6000fd5b505050506040513d6020811015610cd257600080fd5b50516001600160a01b031614610d27576040805162461bcd60e51b815260206004820152601560248201527434b73b30b634b2103430b9b42930ba32aa37b5b2b760591b604482015290519081900360640190fd5b610d2f61121b565b6001805460ff60a81b1916600160a81b179055600280546001600160a01b039092166001600160a01b0319909216919091179055565b6000546001600160a01b03163314610db9576040805162461bcd60e51b815260206004820152601260248201527127bbb730b136329d102327a92124a22222a760711b604482015290519081900360640190fd5b600254604080516340c10f1960e01b81526001600160a01b03848116600483015260248201869052915191909216916340c10f1991604480830192600092919082900301818387803b158015610e0e57600080fd5b505af1158015610e22573d6000803e3d6000fd5b505050505050565b600080600260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610e7b57600080fd5b505afa158015610e8f573d6000803e3d6000fd5b505050506040513d6020811015610ea557600080fd5b50516040805163313ce56760e01b8152905160ff90921692506000916001600160a01b0387169163313ce567916004808301926020929190829003018186803b158015610ef157600080fd5b505afa158015610f05573d6000803e3d6000fd5b505050506040513d6020811015610f1b57600080fd5b50516001600160a01b03861660009081526004602052604090205460ff9091169150600a83810a919083900a90610f83906103e890610f7790859082908690610f6b908d9063ffffffff61123016565b9063ffffffff61123016565b9063ffffffff61129016565b9450505050505b92915050565b6001546001600160a01b031681565b6000546001600160a01b03163314610ff3576040805162461bcd60e51b815260206004820152601260248201527127bbb730b136329d102327a92124a22222a760711b604482015290519081900360640190fd5b6001600160a01b03811661104e576040805162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f2061646472657373000000604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821660008181526005602090815260409182902054825160ff909116151581528415159181019190915281517f2df7084b6719371943496da07fe6285f216dd865c7759a0ee22e689e85eb3b7d929181900390910190a26001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261118d9085906112d2565b50505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610b1b573d6000803e3d6000fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610b1b9084906112d2565b6001805460ff60a01b1916600160a01b179055565b60008261123f57506000610f8a565b8282028284828161124c57fe5b04146112895760405162461bcd60e51b81526004018080602001828103825260218152602001806115696021913960400191505060405180910390fd5b9392505050565b600061128983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061148a565b6112e4826001600160a01b031661152c565b611335576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106113735780518252601f199092019160209182019101611354565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146113d5576040519150601f19603f3d011682016040523d82523d6000602084013e6113da565b606091505b509150915081611431576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561118d5780806020019051602081101561144d57600080fd5b505161118d5760405162461bcd60e51b815260040180806020018281038252602a81526020018061158a602a913960400191505060405180910390fd5b600081836115165760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156114db5781810151838201526020016114c3565b50505050905090810190601f1680156115085780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161152257fe5b0495945050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061156057508115155b94935050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820341cdeb8d3654716aa2742715ddda360a2c27ab1563668ed228d30d576bba64764736f6c63430005100032
Deployed Bytecode Sourcemap
21723:4002:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21723:4002:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23108:108;;;:::i;:::-;;;;;;;;;;;;;;;;21975:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21975:31:0;;:::i;:::-;;;;-1:-1:-1;;;;;21975:31:0;;;;;;;;;;;;;;21881:52;;;:::i;22069:46::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22069:46:0;-1:-1:-1;;;;;22069:46:0;;:::i;:::-;;;;;;;;;;;;;;;;;;22013:49;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22013:49:0;-1:-1:-1;;;;;22013:49:0;;:::i;22734:180::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22734:180:0;;;;;;;;;;:::i;:::-;;19848:20;;;:::i;21940:28::-;;;:::i;24373:583::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;24373:583:0;;;;;;;;;;;;;;;;;:::i;23697:124::-;;;:::i;20890:253::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20890:253:0;-1:-1:-1;;;;;20890:253:0;;:::i;25098:320::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;25098:320:0;;;;;;;;:::i;23224:465::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;23224:465:0;;;;;;;;:::i;22441:285::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22441:285:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;22441:285:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;22441:285:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;22441:285:0;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;22441:285:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;22441:285:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;22441:285:0;;-1:-1:-1;22441:285:0;-1:-1:-1;22441:285:0;:::i;22124:309::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22124:309:0;-1:-1:-1;;;;;22124:309:0;;:::i;24964:126::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24964:126:0;;;;;;-1:-1:-1;;;;;24964:126:0;;:::i;23829:536::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;23829:536:0;;;;;;;;:::i;20552:26::-;;;:::i;20145:227::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20145:227:0;-1:-1:-1;;;;;20145:227:0;;:::i;23108:108::-;23187:14;:21;23108:108;:::o;21975:31::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21975:31:0;;-1:-1:-1;21975:31:0;:::o;21881:52::-;21929:4;21881:52;:::o;22069:46::-;;;;;;;;;;;;;;;:::o;22013:49::-;;;;;;;;;;;;;:::o;22734:180::-;20089:5;;-1:-1:-1;;;;;20089:5:0;20075:10;:19;20067:50;;;;;-1:-1:-1;;;20067:50:0;;;;;;;;;;;;-1:-1:-1;;;20067:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22823:20:0;;;;;;:13;:20;;;;;;;;:30;;;;;;;22815:52;;;;;-1:-1:-1;;;22815:52:0;;;;;;;;;;;;-1:-1:-1;;;22815:52:0;;;;;;;;;;;;;;;22878:28;22892:5;22899:6;22878:13;:28::i;:::-;22734:180;;:::o;19848:20::-;;;-1:-1:-1;;;;;19848:20:0;;:::o;21940:28::-;;;-1:-1:-1;;;;;21940:28:0;;:::o;24373:583::-;19402:11;;-1:-1:-1;;;19402:11:0;;;;19394:55;;;;;-1:-1:-1;;;19394:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19527:11;:19;;-1:-1:-1;;;;19527:19:0;;;24483:10;24475:40;;;;;-1:-1:-1;;;24475:40:0;;;;;;;;;;;;-1:-1:-1;;;24475:40:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24534:28:0;;24565:1;24534:28;;;:13;:28;;;;;;24526:63;;;;;-1:-1:-1;;;24526:63:0;;;;;;;;;;;;-1:-1:-1;;;24526:63:0;;;;;;;;;;;;;;;24618:17;:15;:17::i;:::-;24608:6;:27;;24600:61;;;;;-1:-1:-1;;;24600:61:0;;;;;;;;;;;;-1:-1:-1;;;24600:61:0;;;;;;;;;;;;;;;24674:20;24697:33;24708:13;24723:6;24697:10;:33::i;:::-;24674:56;-1:-1:-1;24741:79:0;-1:-1:-1;;;;;24741:38:0;;24780:10;24800:4;24674:56;24741:79;:38;:79;:::i;:::-;24841:13;;24831:41;;;-1:-1:-1;;;24831:41:0;;-1:-1:-1;;;;;24831:41:0;;;;;;;;;;;;;;;24841:13;;;;;24831:29;;:41;;;;;24841:13;;24831:41;;;;;;;24841:13;;24831:41;;;5:2:-1;;;;30:1;27;20:12;5:2;24831:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24890:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;24890:58:0;;;-1:-1:-1;24900:10:0;;-1:-1:-1;24890:58:0;;;;;;;;;;;-1:-1:-1;;19721:4:0;19707:18;;-1:-1:-1;;;;19707:18:0;-1:-1:-1;;;19707:18:0;;;-1:-1:-1;;24373:583:0:o;23697:124::-;23781:13;;23771:42;;;-1:-1:-1;;;23771:42:0;;;;23744:7;;-1:-1:-1;;;;;23781:13:0;;23771:40;;:42;;;;;;;;;;;;;;23781:13;23771:42;;;5:2:-1;;;;30:1;27;20:12;5:2;23771:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23771:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23771:42:0;;-1:-1:-1;23697:124:0;:::o;20890:253::-;20089:5;;-1:-1:-1;;;;;20089:5:0;20075:10;:19;20067:50;;;;;-1:-1:-1;;;20067:50:0;;;;;;;;;;;;-1:-1:-1;;;20067:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20974:26:0;;20966:71;;;;;-1:-1:-1;;;20966:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21072:11;;21053:45;;-1:-1:-1;;;;;21053:45:0;;;;21072:11;;21053:45;;21072:11;;21053:45;21109:11;:26;;-1:-1:-1;;;;;;21109:26:0;-1:-1:-1;;;;;21109:26:0;;;;;;;;;;20890:253::o;25098:320::-;25188:10;25174:25;;;;:13;:25;;;;;;;;25166:64;;;;;-1:-1:-1;;;25166:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25245:20:0;;25241:170;;25282:36;25298:10;25310:7;25282:15;:36::i;:::-;25241:170;;;25351:48;-1:-1:-1;;;;;25351:27:0;;25379:10;25391:7;25351:48;:27;:48;:::i;23224:465::-;20811:5;;-1:-1:-1;;;;;20811:5:0;20797:10;:19;;:48;;-1:-1:-1;20834:11:0;;-1:-1:-1;;;;;20834:11:0;20820:10;:25;20797:48;20789:73;;;;;-1:-1:-1;;;20789:73:0;;;;;;;;;;;;-1:-1:-1;;;20789:73:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23332:29:0;;;;;;:13;:29;;;;;:45;;;:29;23417:182;23434:14;:21;23432:23;;23417:182;;;23501:14;-1:-1:-1;;;;;23480:35:0;:14;23495:1;23480:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23480:17:0;:35;23477:111;;;23544:4;23536:12;;23567:5;;23477:111;23457:3;;23417:182;;;;23613:5;23609:73;;23635:14;27:10:-1;;39:1;23:18;;45:23;;-1:-1;23635:35:0;;;;;;;;-1:-1:-1;;;;;;23635:35:0;-1:-1:-1;;;;;23635:35:0;;;;;23609:73;20873:1;23224:465;;:::o;22441:285::-;20089:5;;-1:-1:-1;;;;;20089:5:0;20075:10;:19;20067:50;;;;;-1:-1:-1;;;20067:50:0;;;;;;;;;;;;-1:-1:-1;;;20067:50:0;;;;;;;;;;;;;;;22555:31;;;22547:62;;;;;-1:-1:-1;;;22547:62:0;;;;;;;;;;;;-1:-1:-1;;;22547:62:0;;;;;;;;;;;;;;;22625:6;22620:99;22635:15;;;22620:99;;;22671:36;22685:6;;22692:1;22685:9;;;;;;;;;;;;;-1:-1:-1;;;;;22685:9:0;22696:7;;22704:1;22696:10;;;;;;;;;;;;;;;22671:13;:36::i;:::-;22652:3;;22620:99;;;;22441:285;;;;:::o;22124:309::-;22195:11;;-1:-1:-1;;;22195:11:0;;;;22194:12;22186:44;;;;;-1:-1:-1;;;22186:44:0;;;;;;;;;;;;-1:-1:-1;;;22186:44:0;;;;;;;;;;;;;;;22295:4;-1:-1:-1;;;;;22249:51:0;22259:14;-1:-1:-1;;;;;22249:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22249:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22249:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22249:34:0;-1:-1:-1;;;;;22249:51:0;;22241:85;;;;;-1:-1:-1;;;22241:85:0;;;;;;;;;;;;-1:-1:-1;;;22241:85:0;;;;;;;;;;;;;;;22337:18;:16;:18::i;:::-;22380:4;22366:18;;-1:-1:-1;;;;22366:18:0;-1:-1:-1;;;22366:18:0;;;22395:13;:30;;-1:-1:-1;;;;;22395:30:0;;;-1:-1:-1;;;;;;22395:30:0;;;;;;;;;22124:309::o;24964:126::-;20089:5;;-1:-1:-1;;;;;20089:5:0;20075:10;:19;20067:50;;;;;-1:-1:-1;;;20067:50:0;;;;;;;;;;;;-1:-1:-1;;;20067:50:0;;;;;;;;;;;;;;;25051:13;;25041:41;;;-1:-1:-1;;;25041:41:0;;-1:-1:-1;;;;;25041:41:0;;;;;;;;;;;;;;;25051:13;;;;;25041:29;;:41;;;;;25051:13;;25041:41;;;;;;;25051:13;;25041:41;;;5:2:-1;;;;30:1;27;20:12;5:2;25041:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25041:41:0;;;;24964:126;;:::o;23829:536::-;23909:7;23929:28;23973:13;;;;;;;;;-1:-1:-1;;;;;23973:13:0;-1:-1:-1;;;;;23960:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23960:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23960:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23960:38:0;24040;;;-1:-1:-1;;;24040:38:0;;;;23929:69;;;;;-1:-1:-1;24009:28:0;;-1:-1:-1;;;;;24040:36:0;;;;;:38;;;;;23960;;24040;;;;;;;:36;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;24040:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24040:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24040:38:0;-1:-1:-1;;;;;24245:28:0;;24089:30;24245:28;;;:13;24040:38;24245:28;;;;;24009:69;;;;;-1:-1:-1;24122:2:0;:24;;;;24190;;;;;24234:123;;21929:4;;24234:96;;24122:24;;24234:96;;24190:24;;24234:40;;:6;;:40;:10;:40;:::i;:::-;:44;:68;:44;:68;:::i;:::-;:72;:96;:72;:96;:::i;:123::-;24227:130;;;;;;23829:536;;;;;:::o;20552:26::-;;;-1:-1:-1;;;;;20552:26:0;;:::o;20145:227::-;20089:5;;-1:-1:-1;;;;;20089:5:0;20075:10;:19;20067:50;;;;;-1:-1:-1;;;20067:50:0;;;;;;;;;;;;-1:-1:-1;;;20067:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20228:22:0;;20220:64;;;;;-1:-1:-1;;;20220:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20321:5;;;20300:37;;-1:-1:-1;;;;;20300:37:0;;;;20321:5;;;20300:37;;;20348:5;:16;;-1:-1:-1;;;;;;20348:16:0;-1:-1:-1;;;;;20348:16:0;;;;;;;;;;20145:227::o;22922:178::-;-1:-1:-1;;;;;22999:53:0;;23023:20;;;;:13;:20;;;;;;;;;;22999:53;;23023:20;;;;22999:53;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23063:20:0;;;;;;;;:13;:20;;;;;:29;;-1:-1:-1;;23063:29:0;;;;;;;;;;22922:178::o;12548:204::-;12675:68;;;-1:-1:-1;;;;;12675:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12675:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;12649:95:0;;12668:5;;12649:18;:95::i;:::-;12548:204;;;;:::o;25426:115::-;25496:37;;-1:-1:-1;;;;;25496:29:0;;;:37;;;;;25526:6;;25496:37;;;;25526:6;25496:29;:37;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;12364:176:0;12473:58;;;-1:-1:-1;;;;;12473:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12473:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;12447:85:0;;12466:5;;12447:18;:85::i;18417:486::-;18891:4;18877:18;;-1:-1:-1;;;;18877:18:0;-1:-1:-1;;;18877:18:0;;;18417:486::o;5198:471::-;5256:7;5501:6;5497:47;;-1:-1:-1;5531:1:0;5524:8;;5497:47;5568:5;;;5572:1;5568;:5;:1;5592:5;;;;;:10;5584:56;;;;-1:-1:-1;;;5584:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5660:1;5198:471;-1:-1:-1;;;5198:471:0:o;6137:132::-;6195:7;6222:39;6226:1;6229;6222:39;;;;;;;;;;;;;;;;;:3;:39::i;14403:1114::-;15007:27;15015:5;-1:-1:-1;;;;;15007:25:0;;:27::i;:::-;14999:71;;;;;-1:-1:-1;;;14999:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15144:12;15158:23;15193:5;-1:-1:-1;;;;;15185:19:0;15205:4;15185:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;15185:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;15143:67:0;;;;15229:7;15221:52;;;;;-1:-1:-1;;;15221:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15290:17;;:21;15286:224;;15432:10;15421:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15421:30:0;15413:85;;;;-1:-1:-1;;;15413:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6799:345;6885:7;6987:12;6980:5;6972:28;;;;-1:-1:-1;;;6972:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6972:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7011:9;7027:1;7023;:5;;;;;;;6799:345;-1:-1:-1;;;;;6799:345:0:o;9205:619::-;9265:4;9733:20;;9576:66;9773:23;;;;;;:42;;-1:-1:-1;9800:15:0;;;9773:42;9765:51;9205:619;-1:-1:-1;;;;9205:619:0:o
Swarm Source
bzzr://341cdeb8d3654716aa2742715ddda360a2c27ab1563668ed228d30d576bba647
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.