More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,899 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 15022631 | 912 days ago | IN | 0 ETH | 0.00425279 | ||||
Withdraw | 15016979 | 913 days ago | IN | 0 ETH | 0.00664048 | ||||
Withdraw | 15003807 | 915 days ago | IN | 0 ETH | 0.01239788 | ||||
Redeem | 14435851 | 1007 days ago | IN | 0 ETH | 0.00238327 | ||||
Withdraw | 14435833 | 1007 days ago | IN | 0 ETH | 0.01141338 | ||||
Withdraw | 14418972 | 1009 days ago | IN | 0 ETH | 0.00738013 | ||||
Withdraw | 14407162 | 1011 days ago | IN | 0 ETH | 0.00696599 | ||||
Withdraw | 13917621 | 1087 days ago | IN | 0 ETH | 0.00936538 | ||||
Withdraw | 13896430 | 1090 days ago | IN | 0 ETH | 0.01280912 | ||||
Withdraw | 13887401 | 1092 days ago | IN | 0 ETH | 0.0147834 | ||||
Withdraw | 13850196 | 1097 days ago | IN | 0 ETH | 0.0135002 | ||||
Withdraw | 13559381 | 1143 days ago | IN | 0 ETH | 0.03672098 | ||||
Withdraw | 13556715 | 1144 days ago | IN | 0 ETH | 0.03253808 | ||||
Withdraw | 13547269 | 1145 days ago | IN | 0 ETH | 0.01759938 | ||||
Withdraw | 13527775 | 1148 days ago | IN | 0 ETH | 0.01489321 | ||||
Withdraw | 13485118 | 1155 days ago | IN | 0 ETH | 0.02184166 | ||||
Withdraw | 13484446 | 1155 days ago | IN | 0 ETH | 0.02677222 | ||||
Withdraw | 13484163 | 1155 days ago | IN | 0 ETH | 0.00879204 | ||||
Withdraw | 13479932 | 1156 days ago | IN | 0 ETH | 0.02041838 | ||||
Withdraw | 13479451 | 1156 days ago | IN | 0 ETH | 0.01147714 | ||||
Withdraw | 13477334 | 1156 days ago | IN | 0 ETH | 0.01421044 | ||||
Withdraw | 13474226 | 1157 days ago | IN | 0 ETH | 0.02225707 | ||||
Withdraw | 13473937 | 1157 days ago | IN | 0 ETH | 0.01223415 | ||||
Withdraw | 13457145 | 1159 days ago | IN | 0 ETH | 0.01741949 | ||||
Withdraw | 13453261 | 1160 days ago | IN | 0 ETH | 0.01877972 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ERC20StakingPool
Compiler Version
v0.7.3+commit.9bfce1f6
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; import "./SafeMath.sol"; import "./IERC20.sol"; import "./Context.sol"; import "./ReentrancyGuard.sol"; import "./Ownable.sol"; contract ERC20StakingPool is ReentrancyGuard, Context, Ownable { using SafeMath for uint256; constructor(address _stakeToken, address _rewardToken, address _feeAddress, uint256 _feeRate, uint256 _returnRate) { STAKE_TOKEN = IERC20(_stakeToken); REWARD_TOKEN = IERC20(_rewardToken); feeAddress = _feeAddress; feeRate = _feeRate; returnRate = _returnRate; isFrozen = false; } IERC20 private STAKE_TOKEN; IERC20 private REWARD_TOKEN; address private feeAddress; uint256 private feeRate; uint256 private returnRate; bool private isFrozen; uint256 private frozenTimestamp; address[] private stakers; uint256 public totalStaked = 0; mapping(address => uint256) private stakedBalance; mapping(address => uint256) public lastUpdateTime; mapping(address => uint256) public reward; event Staked(address indexed user, uint256 amount); event Unstake(address indexed user, uint256 amount); event Redeem(address indexed user, uint256 amount); modifier updateReward(address account) { if (account != address(0)) { reward[account] = earned(account); lastUpdateTime[account] = block.timestamp; } _; } function getFeeAddress() public view returns (address) { return feeAddress; } function setFeeAddress(address _feeAddress) public onlyOwner nonReentrant { feeAddress = _feeAddress; } function getFeeRate() public view returns (uint256) { return feeRate; } function setFeeRate(uint256 _feeRate) public onlyOwner nonReentrant { require(_feeRate > 1e3, "Fee rate too small"); feeRate = _feeRate; } function getReturnRate() public view returns(uint256) { return returnRate; } function setReturnRate(uint256 _returnRate) public onlyOwner nonReentrant { require(_returnRate > 1e3, "Return rate too small"); for (uint64 i=0; i < stakers.length; i++) { if (balanceOf(stakers[i]) > 0 ) { manualUpdate(stakers[i]); } } returnRate = _returnRate; } function balanceOf(address account) public view returns (uint256) { return stakedBalance[account]; } function manualUpdate(address account) public { if (account != address(0)) { reward[account] = earned(account); lastUpdateTime[account] = block.timestamp; } } function earned(address account) public view returns (uint256) { uint256 blockTime = block.timestamp; if (isFrozen) { blockTime = frozenTimestamp; } uint256 timeDiff = blockTime.sub(lastUpdateTime[account]); uint256 staked = balanceOf(account); uint256 earnedAmount = computeEarned(timeDiff, staked); return reward[account].add(earnedAmount); } function computeEarned(uint256 timeDiff, uint256 staked) private view returns(uint256) { return timeDiff.mul(1e18).div(86400).mul(staked).div(1e18).mul(returnRate).div(1e18); } function stake(uint256 amount) public updateReward(_msgSender()) nonReentrant { require(amount >= 100, "Too small stake"); require(!isFrozen, "Contract is frozen"); uint256 fee = amount.mul(feeRate).div(1e18); uint256 stakeAmount = amount.sub(fee); if (stakedBalance[_msgSender()] == 0) { stakers.push(_msgSender()); } stakedBalance[_msgSender()] = stakedBalance[_msgSender()].add(stakeAmount); totalStaked = totalStaked.add(stakeAmount); STAKE_TOKEN.transferFrom(_msgSender(), address(this), amount); STAKE_TOKEN.transfer(feeAddress, fee); emit Staked(_msgSender(), stakeAmount); } function withdraw(uint256 amount) public updateReward(_msgSender()) nonReentrant { require(amount > 0, "Cannot withdraw 0"); require(amount <= balanceOf(_msgSender()), "Cannot withdraw more than balance"); STAKE_TOKEN.transfer(_msgSender(), amount); stakedBalance[_msgSender()] = stakedBalance[_msgSender()].sub(amount); if (stakedBalance[_msgSender()] == 0) { for (uint64 i=0; i < stakers.length; i++) { if (stakers[i] == _msgSender()) { stakers[i] = stakers[stakers.length - 1]; stakers.pop(); break; } } } totalStaked = totalStaked.sub(amount); emit Unstake(_msgSender(), amount); } function exit() external { withdraw(balanceOf(_msgSender())); } function redeem() public updateReward(_msgSender()) nonReentrant { require(reward[_msgSender()] > 0, "Nothing to redeem"); uint256 amount = reward[_msgSender()]; reward[_msgSender()] = 0; REWARD_TOKEN.mint(_msgSender(), amount); emit Redeem(_msgSender(), amount); } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; /** * @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) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @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]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; interface IERC1155 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; import "./IERC1155.sol"; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; interface IERC1155Receiver { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns(bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns(bytes4); }
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; import "./Address.sol"; /** * @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); function mint(address to, uint256 amount) external; function burn(uint256 amount) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.4.22 <0.8.0; contract Migrations { address public owner = msg.sender; uint256 public last_completed_migration; modifier restricted() { require( msg.sender == owner, "This function is restricted to the contract's owner" ); _; } function setCompleted(uint256 completed) public restricted { last_completed_migration = completed; } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; /** * @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]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being 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 percentage 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. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () { _status = _NOT_ENTERED; } /** * @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(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; /** * @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. */ 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. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { 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. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_stakeToken","type":"address"},{"internalType":"address","name":"_rewardToken","type":"address"},{"internalType":"address","name":"_feeAddress","type":"address"},{"internalType":"uint256","name":"_feeRate","type":"uint256"},{"internalType":"uint256","name":"_returnRate","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstake","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFeeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReturnRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"manualUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAddress","type":"address"}],"name":"setFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeRate","type":"uint256"}],"name":"setFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_returnRate","type":"uint256"}],"name":"setReturnRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600a5534801561001557600080fd5b50604051620027d9380380620027d9833981810160405260a081101561003a57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050506001600081905550600061008b61022060201b60201c565b905080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35084600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600581905550806006819055506000600760006101000a81548160ff0219169083151502179055505050505050610228565b600033905090565b6125a180620002386000396000f3fe608060405234801561001057600080fd5b50600436106101205760003560e01c806370a08231116100ad5780638da5cb5b116100715780638da5cb5b1461042f578063a694fc3a14610463578063be040fb014610491578063e9fad8ee1461049b578063f2fde38b146104a557610120565b806370a082311461034d578063715018a6146103a5578063817b1cd2146103af57806384e5eed0146103cd5780638705fcd4146103eb57610120565b806337e332bb116100f457806337e332bb1461023157806345596e2e1461024f5780634e7ceacb1461027d57806353ad5256146102b15780636353586b146102f557610120565b80628cc262146101255780632ce9aead1461017d5780632e1a7d4d146101d55780632f9999e714610203575b600080fd5b6101676004803603602081101561013b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104e9565b6040518082815260200191505060405180910390f35b6101bf6004803603602081101561019357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105d8565b6040518082815260200191505060405180910390f35b610201600480360360208110156101eb57600080fd5b81019080803590602001909291905050506105f0565b005b61022f6004803603602081101561021957600080fd5b8101908080359060200190929190505050610be9565b005b610239610e82565b6040518082815260200191505060405180910390f35b61027b6004803603602081101561026557600080fd5b8101908080359060200190929190505050610e8c565b005b610285611060565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102f3600480360360208110156102c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061108a565b005b6103376004803603602081101561030b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611152565b6040518082815260200191505060405180910390f35b61038f6004803603602081101561036357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061116a565b6040518082815260200191505060405180910390f35b6103ad6111b3565b005b6103b761133e565b6040518082815260200191505060405180910390f35b6103d5611344565b6040518082815260200191505060405180910390f35b61042d6004803603602081101561040157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061134e565b005b6104376114e5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61048f6004803603602081101561047957600080fd5b810190808035906020019092919050505061150f565b005b610499611b61565b005b6104a3611f15565b005b6104e7600480360360208110156104bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f2f565b005b600080429050600760009054906101000a900460ff161561050a5760085490505b600061055e600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361213f90919063ffffffff16565b9050600061056b8561116a565b905060006105798383612189565b90506105cd81600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461221d90919063ffffffff16565b945050505050919050565b600c6020528060005260406000206000915090505481565b6105f86122a5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106bd57610635816104e9565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60026000541415610736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600081905550600082116107b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74207769746864726177203000000000000000000000000000000081525060200191505060405180910390fd5b6107c46107bf6122a5565b61116a565b82111561081c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806125046021913960400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6108626122a5565b846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156108b657600080fd5b505af11580156108ca573d6000803e3d6000fd5b505050506040513d60208110156108e057600080fd5b81019080805190602001909291905050505061094b82600b60006109026122a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461213f90919063ffffffff16565b600b60006109576122a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600b60006109a36122a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415610b6d5760005b6009805490508167ffffffffffffffff161015610b6b57610a066122a5565b73ffffffffffffffffffffffffffffffffffffffff1660098267ffffffffffffffff1681548110610a3357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610b5e57600960016009805490500381548110610a8f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098267ffffffffffffffff1681548110610ad157fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009805480610b2457fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610b6b565b80806001019150506109e7565b505b610b8282600a5461213f90919063ffffffff16565b600a81905550610b906122a5565b73ffffffffffffffffffffffffffffffffffffffff167f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd836040518082815260200191505060405180910390a260016000819055505050565b610bf16122a5565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cb3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60026000541415610d2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026000819055506103e88111610dab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f52657475726e207261746520746f6f20736d616c6c000000000000000000000081525060200191505060405180910390fd5b60005b6009805490508167ffffffffffffffff161015610e6f576000610e1160098367ffffffffffffffff1681548110610de157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661116a565b1115610e6257610e6160098267ffffffffffffffff1681548110610e3157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661108a565b5b8080600101915050610dae565b5080600681905550600160008190555050565b6000600654905090565b610e946122a5565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f56576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60026000541415610fcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026000819055506103e8811161104e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f466565207261746520746f6f20736d616c6c000000000000000000000000000081525060200191505060405180910390fd5b80600581905550600160008190555050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461114f576110c7816104e9565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50565b600d6020528060005260406000206000915090505481565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111bb6122a5565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461127d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600a5481565b6000600554905090565b6113566122a5565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611418576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60026000541415611491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260008190555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160008190555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115176122a5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146115dc57611554816104e9565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60026000541415611655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260008190555060648210156116d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f546f6f20736d616c6c207374616b65000000000000000000000000000000000081525060200191505060405180910390fd5b600760009054906101000a900460ff1615611757576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f436f6e74726163742069732066726f7a656e000000000000000000000000000081525060200191505060405180910390fd5b6000611788670de0b6b3a764000061177a600554866122ad90919063ffffffff16565b61233390919063ffffffff16565b9050600061179f828561213f90919063ffffffff16565b90506000600b60006117af6122a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561185b5760096117fa6122a5565b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6118b481600b600061186b6122a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461221d90919063ffffffff16565b600b60006118c06122a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061191381600a5461221d90919063ffffffff16565b600a81905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd61195f6122a5565b30876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156119d157600080fd5b505af11580156119e5573d6000803e3d6000fd5b505050506040513d60208110156119fb57600080fd5b810190808051906020019092919050505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611ac257600080fd5b505af1158015611ad6573d6000803e3d6000fd5b505050506040513d6020811015611aec57600080fd5b810190808051906020019092919050505050611b066122a5565b73ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d826040518082815260200191505060405180910390a2505060016000819055505050565b611b696122a5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611c2e57611ba6816104e9565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60026000541415611ca7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026000819055506000600d6000611cbd6122a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611d6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4e6f7468696e6720746f2072656465656d00000000000000000000000000000081525060200191505060405180910390fd5b6000600d6000611d796122a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600d6000611dc46122a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19611e486122a5565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611e9c57600080fd5b505af1158015611eb0573d6000803e3d6000fd5b50505050611ebc6122a5565b73ffffffffffffffffffffffffffffffffffffffff167f222838db2794d11532d940e8dec38ae307ed0b63cd97c233322e221f998767a6826040518082815260200191505060405180910390a250600160008190555050565b611f2d611f28611f236122a5565b61116a565b6105f0565b565b611f376122a5565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561207f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806125256026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061218183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061237d565b905092915050565b6000612215670de0b6b3a76400006122076006546121f9670de0b6b3a76400006121eb886121dd620151806121cf670de0b6b3a76400008e6122ad90919063ffffffff16565b61233390919063ffffffff16565b6122ad90919063ffffffff16565b61233390919063ffffffff16565b6122ad90919063ffffffff16565b61233390919063ffffffff16565b905092915050565b60008082840190508381101561229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b6000808314156122c0576000905061232d565b60008284029050828482816122d157fe5b0414612328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061254b6021913960400191505060405180910390fd5b809150505b92915050565b600061237583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061243d565b905092915050565b600083831115829061242a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156123ef5780820151818401526020810190506123d4565b50505050905090810190601f16801561241c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831182906124e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156124ae578082015181840152602081019050612493565b50505050905090810190601f1680156124db5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816124f557fe5b04905080915050939250505056fe43616e6e6f74207769746864726177206d6f7265207468616e2062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122019cec1a949a637bcda4c6af9bf1132d923c11739f254b0b020de60540a7a6c2f64736f6c634300070300330000000000000000000000007bce667ef12023dc5f8577d015a2f09d99a5ef580000000000000000000000003ee8ad7543aa49c6099b567477ff091cd592623e0000000000000000000000005a63c3bc618b34590b1d830156886d71a3f48052000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000016345785d8a0000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101205760003560e01c806370a08231116100ad5780638da5cb5b116100715780638da5cb5b1461042f578063a694fc3a14610463578063be040fb014610491578063e9fad8ee1461049b578063f2fde38b146104a557610120565b806370a082311461034d578063715018a6146103a5578063817b1cd2146103af57806384e5eed0146103cd5780638705fcd4146103eb57610120565b806337e332bb116100f457806337e332bb1461023157806345596e2e1461024f5780634e7ceacb1461027d57806353ad5256146102b15780636353586b146102f557610120565b80628cc262146101255780632ce9aead1461017d5780632e1a7d4d146101d55780632f9999e714610203575b600080fd5b6101676004803603602081101561013b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104e9565b6040518082815260200191505060405180910390f35b6101bf6004803603602081101561019357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105d8565b6040518082815260200191505060405180910390f35b610201600480360360208110156101eb57600080fd5b81019080803590602001909291905050506105f0565b005b61022f6004803603602081101561021957600080fd5b8101908080359060200190929190505050610be9565b005b610239610e82565b6040518082815260200191505060405180910390f35b61027b6004803603602081101561026557600080fd5b8101908080359060200190929190505050610e8c565b005b610285611060565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102f3600480360360208110156102c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061108a565b005b6103376004803603602081101561030b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611152565b6040518082815260200191505060405180910390f35b61038f6004803603602081101561036357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061116a565b6040518082815260200191505060405180910390f35b6103ad6111b3565b005b6103b761133e565b6040518082815260200191505060405180910390f35b6103d5611344565b6040518082815260200191505060405180910390f35b61042d6004803603602081101561040157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061134e565b005b6104376114e5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61048f6004803603602081101561047957600080fd5b810190808035906020019092919050505061150f565b005b610499611b61565b005b6104a3611f15565b005b6104e7600480360360208110156104bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f2f565b005b600080429050600760009054906101000a900460ff161561050a5760085490505b600061055e600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361213f90919063ffffffff16565b9050600061056b8561116a565b905060006105798383612189565b90506105cd81600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461221d90919063ffffffff16565b945050505050919050565b600c6020528060005260406000206000915090505481565b6105f86122a5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106bd57610635816104e9565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60026000541415610736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600081905550600082116107b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74207769746864726177203000000000000000000000000000000081525060200191505060405180910390fd5b6107c46107bf6122a5565b61116a565b82111561081c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806125046021913960400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6108626122a5565b846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156108b657600080fd5b505af11580156108ca573d6000803e3d6000fd5b505050506040513d60208110156108e057600080fd5b81019080805190602001909291905050505061094b82600b60006109026122a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461213f90919063ffffffff16565b600b60006109576122a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600b60006109a36122a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415610b6d5760005b6009805490508167ffffffffffffffff161015610b6b57610a066122a5565b73ffffffffffffffffffffffffffffffffffffffff1660098267ffffffffffffffff1681548110610a3357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610b5e57600960016009805490500381548110610a8f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098267ffffffffffffffff1681548110610ad157fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009805480610b2457fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610b6b565b80806001019150506109e7565b505b610b8282600a5461213f90919063ffffffff16565b600a81905550610b906122a5565b73ffffffffffffffffffffffffffffffffffffffff167f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd836040518082815260200191505060405180910390a260016000819055505050565b610bf16122a5565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cb3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60026000541415610d2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026000819055506103e88111610dab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f52657475726e207261746520746f6f20736d616c6c000000000000000000000081525060200191505060405180910390fd5b60005b6009805490508167ffffffffffffffff161015610e6f576000610e1160098367ffffffffffffffff1681548110610de157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661116a565b1115610e6257610e6160098267ffffffffffffffff1681548110610e3157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661108a565b5b8080600101915050610dae565b5080600681905550600160008190555050565b6000600654905090565b610e946122a5565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f56576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60026000541415610fcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026000819055506103e8811161104e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f466565207261746520746f6f20736d616c6c000000000000000000000000000081525060200191505060405180910390fd5b80600581905550600160008190555050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461114f576110c7816104e9565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50565b600d6020528060005260406000206000915090505481565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111bb6122a5565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461127d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600a5481565b6000600554905090565b6113566122a5565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611418576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60026000541415611491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260008190555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160008190555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115176122a5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146115dc57611554816104e9565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60026000541415611655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260008190555060648210156116d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f546f6f20736d616c6c207374616b65000000000000000000000000000000000081525060200191505060405180910390fd5b600760009054906101000a900460ff1615611757576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f436f6e74726163742069732066726f7a656e000000000000000000000000000081525060200191505060405180910390fd5b6000611788670de0b6b3a764000061177a600554866122ad90919063ffffffff16565b61233390919063ffffffff16565b9050600061179f828561213f90919063ffffffff16565b90506000600b60006117af6122a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561185b5760096117fa6122a5565b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6118b481600b600061186b6122a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461221d90919063ffffffff16565b600b60006118c06122a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061191381600a5461221d90919063ffffffff16565b600a81905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd61195f6122a5565b30876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156119d157600080fd5b505af11580156119e5573d6000803e3d6000fd5b505050506040513d60208110156119fb57600080fd5b810190808051906020019092919050505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611ac257600080fd5b505af1158015611ad6573d6000803e3d6000fd5b505050506040513d6020811015611aec57600080fd5b810190808051906020019092919050505050611b066122a5565b73ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d826040518082815260200191505060405180910390a2505060016000819055505050565b611b696122a5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611c2e57611ba6816104e9565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60026000541415611ca7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026000819055506000600d6000611cbd6122a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611d6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4e6f7468696e6720746f2072656465656d00000000000000000000000000000081525060200191505060405180910390fd5b6000600d6000611d796122a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600d6000611dc46122a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19611e486122a5565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611e9c57600080fd5b505af1158015611eb0573d6000803e3d6000fd5b50505050611ebc6122a5565b73ffffffffffffffffffffffffffffffffffffffff167f222838db2794d11532d940e8dec38ae307ed0b63cd97c233322e221f998767a6826040518082815260200191505060405180910390a250600160008190555050565b611f2d611f28611f236122a5565b61116a565b6105f0565b565b611f376122a5565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561207f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806125256026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061218183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061237d565b905092915050565b6000612215670de0b6b3a76400006122076006546121f9670de0b6b3a76400006121eb886121dd620151806121cf670de0b6b3a76400008e6122ad90919063ffffffff16565b61233390919063ffffffff16565b6122ad90919063ffffffff16565b61233390919063ffffffff16565b6122ad90919063ffffffff16565b61233390919063ffffffff16565b905092915050565b60008082840190508381101561229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b6000808314156122c0576000905061232d565b60008284029050828482816122d157fe5b0414612328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061254b6021913960400191505060405180910390fd5b809150505b92915050565b600061237583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061243d565b905092915050565b600083831115829061242a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156123ef5780820151818401526020810190506123d4565b50505050905090810190601f16801561241c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831182906124e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156124ae578082015181840152602081019050612493565b50505050905090810190601f1680156124db5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816124f557fe5b04905080915050939250505056fe43616e6e6f74207769746864726177206d6f7265207468616e2062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122019cec1a949a637bcda4c6af9bf1132d923c11739f254b0b020de60540a7a6c2f64736f6c63430007030033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007bce667ef12023dc5f8577d015a2f09d99a5ef580000000000000000000000003ee8ad7543aa49c6099b567477ff091cd592623e0000000000000000000000005a63c3bc618b34590b1d830156886d71a3f48052000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000016345785d8a0000
-----Decoded View---------------
Arg [0] : _stakeToken (address): 0x7BCe667EF12023dc5f8577D015a2F09d99a5ef58
Arg [1] : _rewardToken (address): 0x3eE8aD7543AA49C6099B567477Ff091Cd592623e
Arg [2] : _feeAddress (address): 0x5A63C3bC618B34590B1d830156886d71a3f48052
Arg [3] : _feeRate (uint256): 10000000000000000
Arg [4] : _returnRate (uint256): 100000000000000000
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000007bce667ef12023dc5f8577d015a2f09d99a5ef58
Arg [1] : 0000000000000000000000003ee8ad7543aa49c6099b567477ff091cd592623e
Arg [2] : 0000000000000000000000005a63c3bc618b34590b1d830156886d71a3f48052
Arg [3] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [4] : 000000000000000000000000000000000000000000000000016345785d8a0000
Deployed Bytecode Sourcemap
186:4558:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2488:381;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;921:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3697:677;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1888:302;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1801:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1649:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1368:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2304:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;974:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2194:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1683:145:8;;;:::i;:::-;;833:30:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1568:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1455:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1060:77:8;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3058:635:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4455:287;;;:::i;:::-;;4378:69;;;:::i;:::-;;1977:240:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2488:381:2;2542:7;2557:17;2577:15;2557:35;;2602:8;;;;;;;;;;;2598:56;;;2632:15;;2620:27;;2598:56;2659:16;2678:38;2692:14;:23;2707:7;2692:23;;;;;;;;;;;;;;;;2678:9;:13;;:38;;;;:::i;:::-;2659:57;;2722:14;2739:18;2749:7;2739:9;:18::i;:::-;2722:35;;2763:20;2786:31;2800:8;2810:6;2786:13;:31::i;:::-;2763:54;;2831:33;2851:12;2831:6;:15;2838:7;2831:15;;;;;;;;;;;;;;;;:19;;:33;;;;:::i;:::-;2824:40;;;;;;2488:381;;;:::o;921:49::-;;;;;;;;;;;;;;;;;:::o;3697:677::-;3751:12;:10;:12::i;:::-;1252:1;1233:21;;:7;:21;;;1229:124;;1282:15;1289:7;1282:6;:15::i;:::-;1264:6;:15;1271:7;1264:15;;;;;;;;;;;;;;;:33;;;;1331:15;1305:14;:23;1320:7;1305:23;;;;;;;;;;;;;;;:41;;;;1229:124;1679:1:9::1;2259:7;;:19;;2251:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;1679:1;2389:7;:18;;;;3801:1:2::2;3792:6;:10;3784:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;3848:23;3858:12;:10;:12::i;:::-;3848:9;:23::i;:::-;3838:6;:33;;3830:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3915:11;;;;;;;;;;;:20;;;3936:12;:10;:12::i;:::-;3950:6;3915:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;3993:39;4025:6;3993:13;:27;4007:12;:10;:12::i;:::-;3993:27;;;;;;;;;;;;;;;;:31;;:39;;;;:::i;:::-;3963:13;:27;3977:12;:10;:12::i;:::-;3963:27;;;;;;;;;;;;;;;:69;;;;4073:1;4042:13;:27;4056:12;:10;:12::i;:::-;4042:27;;;;;;;;;;;;;;;;:32;4038:249;;;4089:8;4084:197;4105:7;:14;;;;4101:1;:18;;;4084:197;;;4154:12;:10;:12::i;:::-;4140:26;;:7;4148:1;4140:10;;;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;4136:137;;;4193:7;4218:1;4201:7;:14;;;;:18;4193:27;;;;;;;;;;;;;;;;;;;;;;;;;4180:7;4188:1;4180:10;;;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;4232:7;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4257:5;;4136:137;4121:3;;;;;;;4084:197;;;;4038:249;4306:23;4322:6;4306:11;;:15;;:23;;;;:::i;:::-;4292:11;:37;;;;4348:12;:10;:12::i;:::-;4340:29;;;4362:6;4340:29;;;;;;;;;;;;;;;;;;1636:1:9::1;2562:7;:22;;;;3697:677:2::0;;:::o;1888:302::-;1274:12:8;:10;:12::i;:::-;1264:22;;:6;;;;;;;;;;;:22;;;1256:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1679:1:9::1;2259:7;;:19;;2251:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;1679:1;2389:7;:18;;;;1990:3:2::2;1976:11;:17;1968:51;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;2030:8;2025:131;2046:7;:14;;;;2042:1;:18;;;2025:131;;;2103:1;2079:21;2089:7;2097:1;2089:10;;;;;;;;;;;;;;;;;;;;;;;;;;;2079:9;:21::i;:::-;:25;2075:75;;;2117:24;2130:7;2138:1;2130:10;;;;;;;;;;;;;;;;;;;;;;;;;;;2117:12;:24::i;:::-;2075:75;2062:3;;;;;;;2025:131;;;;2174:11;2161:10;:24;;;;1636:1:9::1;2562:7;:22;;;;1888:302:2::0;:::o;1801:83::-;1847:7;1869:10;;1862:17;;1801:83;:::o;1649:148::-;1274:12:8;:10;:12::i;:::-;1264:22;;:6;;;;;;;;;;;:22;;;1256:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1679:1:9::1;2259:7;;:19;;2251:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;1679:1;2389:7;:18;;;;1742:3:2::2;1731:8;:14;1723:45;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;1784:8;1774:7;:18;;;;1636:1:9::1;2562:7;:22;;;;1649:148:2::0;:::o;1368:83::-;1414:7;1436:10;;;;;;;;;;;1429:17;;1368:83;:::o;2304:180::-;2379:1;2360:21;;:7;:21;;;2356:124;;2409:15;2416:7;2409:6;:15::i;:::-;2391:6;:15;2398:7;2391:15;;;;;;;;;;;;;;;:33;;;;2458:15;2432:14;:23;2447:7;2432:23;;;;;;;;;;;;;;;:41;;;;2356:124;2304:180;:::o;974:41::-;;;;;;;;;;;;;;;;;:::o;2194:106::-;2251:7;2273:13;:22;2287:7;2273:22;;;;;;;;;;;;;;;;2266:29;;2194:106;;;:::o;1683:145:8:-;1274:12;:10;:12::i;:::-;1264:22;;:6;;;;;;;;;;;:22;;;1256:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1789:1:::1;1752:40;;1773:6;;;;;;;;;;;1752:40;;;;;;;;;;;;1819:1;1802:6;;:19;;;;;;;;;;;;;;;;;;1683:145::o:0;833:30:2:-;;;;:::o;1568:77::-;1611:7;1633;;1626:14;;1568:77;:::o;1455:109::-;1274:12:8;:10;:12::i;:::-;1264:22;;:6;;;;;;;;;;;:22;;;1256:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1679:1:9::1;2259:7;;:19;;2251:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;1679:1;2389:7;:18;;;;1548:11:2::2;1535:10;;:24;;;;;;;;;;;;;;;;;;1636:1:9::1;2562:7;:22;;;;1455:109:2::0;:::o;1060:77:8:-;1098:7;1124:6;;;;;;;;;;;1117:13;;1060:77;:::o;3058:635:2:-;3109:12;:10;:12::i;:::-;1252:1;1233:21;;:7;:21;;;1229:124;;1282:15;1289:7;1282:6;:15::i;:::-;1264:6;:15;1271:7;1264:15;;;;;;;;;;;;;;;:33;;;;1331:15;1305:14;:23;1320:7;1305:23;;;;;;;;;;;;;;;:41;;;;1229:124;1679:1:9::1;2259:7;;:19;;2251:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;1679:1;2389:7;:18;;;;3160:3:2::2;3150:6;:13;;3142:41;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;3198:8;;;;;;;;;;;3197:9;3189:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;3235:11;3249:29;3273:4;3249:19;3260:7;;3249:6;:10;;:19;;;;:::i;:::-;:23;;:29;;;;:::i;:::-;3235:43;;3284:19;3306:15;3317:3;3306:6;:10;;:15;;;;:::i;:::-;3284:37;;3362:1;3331:13;:27;3345:12;:10;:12::i;:::-;3331:27;;;;;;;;;;;;;;;;:32;3327:79;;;3373:7;3386:12;:10;:12::i;:::-;3373:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3327:79;3442:44;3474:11;3442:13;:27;3456:12;:10;:12::i;:::-;3442:27;;;;;;;;;;;;;;;;:31;;:44;;;;:::i;:::-;3412:13;:27;3426:12;:10;:12::i;:::-;3412:27;;;;;;;;;;;;;;;:74;;;;3506:28;3522:11;3506;;:15;;:28;;;;:::i;:::-;3492:11;:42;;;;3540:11;;;;;;;;;;;:24;;;3565:12;:10;:12::i;:::-;3587:4;3594:6;3540:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;3607:11;;;;;;;;;;;:20;;;3628:10;;;;;;;;;;;3640:3;3607:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;3662:12;:10;:12::i;:::-;3655:33;;;3676:11;3655:33;;;;;;;;;;;;;;;;;;2418:1:9;;1636::::1;2562:7;:22;;;;3058:635:2::0;;:::o;4455:287::-;4493:12;:10;:12::i;:::-;1252:1;1233:21;;:7;:21;;;1229:124;;1282:15;1289:7;1282:6;:15::i;:::-;1264:6;:15;1271:7;1264:15;;;;;;;;;;;;;;;:33;;;;1331:15;1305:14;:23;1320:7;1305:23;;;;;;;;;;;;;;;:41;;;;1229:124;1679:1:9::1;2259:7;;:19;;2251:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;1679:1;2389:7;:18;;;;4557:1:2::2;4534:6;:20;4541:12;:10;:12::i;:::-;4534:20;;;;;;;;;;;;;;;;:24;4526:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;4586:14;4603:6;:20;4610:12;:10;:12::i;:::-;4603:20;;;;;;;;;;;;;;;;4586:37;;4652:1;4629:6;:20;4636:12;:10;:12::i;:::-;4629:20;;;;;;;;;;;;;;;:24;;;;4659:12;;;;;;;;;;;:17;;;4677:12;:10;:12::i;:::-;4691:6;4659:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;4716:12;:10;:12::i;:::-;4709:28;;;4730:6;4709:28;;;;;;;;;;;;;;;;;;2418:1:9;1636::::1;2562:7;:22;;;;4455:287:2::0;:::o;4378:69::-;4409:33;4418:23;4428:12;:10;:12::i;:::-;4418:9;:23::i;:::-;4409:8;:33::i;:::-;4378:69::o;1977:240:8:-;1274:12;:10;:12::i;:::-;1264:22;;:6;;;;;;;;;;;:22;;;1256:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2085:1:::1;2065:22;;:8;:22;;;;2057:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2174:8;2145:38;;2166:6;;;;;;;;;;;2145:38;;;;;;;;;;;;2202:8;2193:6;;:17;;;;;;;;;;;;;;;;;;1977:240:::0;:::o;1320:134:10:-;1378:7;1404:43;1408:1;1411;1404:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1397:50;;1320:134;;;;:::o;2872:182:2:-;2950:7;2972:77;3044:4;2972:67;3028:10;;2972:51;3018:4;2972:41;3006:6;2972:29;2995:5;2972:18;2985:4;2972:8;:12;;:18;;;;:::i;:::-;:22;;:29;;;;:::i;:::-;:33;;:41;;;;:::i;:::-;:45;;:51;;;;:::i;:::-;:55;;:67;;;;:::i;:::-;:71;;:77;;;;:::i;:::-;2965:84;;2872:182;;;;:::o;873:176:10:-;931:7;950:9;966:1;962;:5;950:17;;990:1;985;:6;;977:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1041:1;1034:8;;;873:176;;;;:::o;589:104:1:-;642:15;676:10;669:17;;589:104;:::o;2179:459:10:-;2237:7;2483:1;2478;:6;2474:45;;;2507:1;2500:8;;;;2474:45;2529:9;2545:1;2541;:5;2529:17;;2573:1;2568;2564;:5;;;;;;:10;2556:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2630:1;2623:8;;;2179:459;;;;;:::o;3100:130::-;3158:7;3184:39;3188:1;3191;3184:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3177:46;;3100:130;;;;:::o;1745:187::-;1831:7;1863:1;1858;:6;;1866:12;1850:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1889:9;1905:1;1901;:5;1889:17;;1924:1;1917:8;;;1745:187;;;;;:::o;3712:272::-;3798:7;3829:1;3825;:5;3832:12;3817:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3855:9;3871:1;3867;:5;;;;;;3855:17;;3976:1;3969:8;;;3712:272;;;;;:::o
Swarm Source
ipfs://19cec1a949a637bcda4c6af9bf1132d923c11739f254b0b020de60540a7a6c2f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.093125 | 1,678.1647 | $156.28 |
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.