Source Code
Latest 25 from a total of 566 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Get Reward | 10872663 | 2021 days ago | IN | 0 ETH | 0.00764252 | ||||
| Exit | 10849821 | 2024 days ago | IN | 0 ETH | 0.01238901 | ||||
| Exit | 10845806 | 2025 days ago | IN | 0 ETH | 0.01347678 | ||||
| Exit | 10840173 | 2026 days ago | IN | 0 ETH | 0.01397058 | ||||
| Exit | 10836450 | 2026 days ago | IN | 0 ETH | 0.01273588 | ||||
| Exit | 10831053 | 2027 days ago | IN | 0 ETH | 0.01203019 | ||||
| Exit | 10825127 | 2028 days ago | IN | 0 ETH | 0.00876322 | ||||
| Withdraw | 10824893 | 2028 days ago | IN | 0 ETH | 0.00657424 | ||||
| Get Reward | 10824882 | 2028 days ago | IN | 0 ETH | 0.00638375 | ||||
| Exit | 10824661 | 2028 days ago | IN | 0 ETH | 0.00592576 | ||||
| Get Reward | 10824650 | 2028 days ago | IN | 0 ETH | 0.00641971 | ||||
| Exit | 10823738 | 2028 days ago | IN | 0 ETH | 0.01194808 | ||||
| Exit | 10823387 | 2028 days ago | IN | 0 ETH | 0.01093923 | ||||
| Withdraw | 10823329 | 2028 days ago | IN | 0 ETH | 0.0079642 | ||||
| Get Reward | 10823323 | 2028 days ago | IN | 0 ETH | 0.00644243 | ||||
| Withdraw | 10822820 | 2028 days ago | IN | 0 ETH | 0.01380483 | ||||
| Get Reward | 10822421 | 2028 days ago | IN | 0 ETH | 0.00921417 | ||||
| Withdraw | 10822407 | 2028 days ago | IN | 0 ETH | 0.01426886 | ||||
| Exit | 10822080 | 2028 days ago | IN | 0 ETH | 0.01543354 | ||||
| Exit | 10822047 | 2028 days ago | IN | 0 ETH | 0.01688177 | ||||
| Exit | 10822023 | 2028 days ago | IN | 0 ETH | 0.01798689 | ||||
| Exit | 10821986 | 2028 days ago | IN | 0 ETH | 0.01443188 | ||||
| Exit | 10821924 | 2028 days ago | IN | 0 ETH | 0.01113451 | ||||
| Exit | 10821813 | 2028 days ago | IN | 0 ETH | 0.01304328 | ||||
| Exit | 10821770 | 2028 days ago | IN | 0 ETH | 0.00962936 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BoostRewardsPool
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-09-01
*/
//SPDX-License-Identifier: MIT
/*
* MIT License
* ===========
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
*/
pragma solidity ^0.5.17;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a >= b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two numbers. The result is rounded towards
* zero.
*/
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow, so we distribute
return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
}
}
pragma solidity ^0.5.17;
/**
* @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;
}
}
pragma solidity ^0.5.17;
/*
* @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.
*/
contract Context {
// Empty internal constructor, to prevent people from mistakenly deploying
// an instance of this contract, which should be used via inheritance.
constructor () internal { }
// solhint-disable-previous-line no-empty-blocks
function _msgSender() internal view returns (address payable) {
return msg.sender;
}
function _msgData() internal view returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
pragma solidity ^0.5.17;
/**
* @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.
*
* 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.
*/
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 () internal {
_owner = _msgSender();
emit OwnershipTransferred(address(0), _owner);
}
/**
* @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(isOwner(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Returns true if the caller is the current owner.
*/
function isOwner() public view returns (bool) {
return _msgSender() == _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 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 onlyOwner {
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
*/
function _transferOwnership(address newOwner) internal {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
pragma solidity ^0.5.17;
/**
* @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);
}
interface IERC20Burnable {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
function burn(uint256 amount) external;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
pragma solidity ^0.5.17;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* This test is non-exhaustive, and there may be false-negatives: during the
* execution of a contract's constructor, its address will be reported as
* not containing 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.
*/
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.
// 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 != 0x0 && codehash != accountHash);
}
/**
* @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");
}
}
pragma solidity ^0.5.17;
/**
* @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");
}
}
}
pragma solidity ^0.5.17;
contract LPTokenWrapper {
using SafeMath for uint256;
using SafeERC20 for IERC20;
IERC20 public stakeToken;
uint256 private _totalSupply;
mapping(address => uint256) private _balances;
constructor(IERC20 _stakeToken) public {
stakeToken = _stakeToken;
}
function totalSupply() public view returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function stake(uint256 amount) public {
_totalSupply = _totalSupply.add(amount);
_balances[msg.sender] = _balances[msg.sender].add(amount);
// safeTransferFrom shifted to last line of overridden method
}
function withdraw(uint256 amount) public {
_totalSupply = _totalSupply.sub(amount);
_balances[msg.sender] = _balances[msg.sender].sub(amount);
// safeTransfer shifted to last line of overridden method
}
}
interface UniswapRouter {
function WETH() external pure returns (address);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
}
interface IGovernance {
function getStablecoin() external view returns (address);
}
contract BoostRewardsPool is LPTokenWrapper, Ownable {
IERC20 public boostToken;
address public governance;
address public governanceSetter;
UniswapRouter public uniswapRouter;
address public stablecoin;
uint256 public constant MAX_NUM_BOOSTERS = 5;
uint256 public tokenCapAmount;
uint256 public starttime;
uint256 public duration;
uint256 public periodFinish = 0;
uint256 public rewardRate = 0;
uint256 public lastUpdateTime;
uint256 public rewardPerTokenStored;
mapping(address => uint256) public userRewardPerTokenPaid;
mapping(address => uint256) public rewards;
// booster variables
// variables to keep track of totalSupply and balances (after accounting for multiplier)
uint256 public boostedTotalSupply;
mapping(address => uint256) public boostedBalances;
mapping(address => uint256) public numBoostersBought; // each booster = 5% increase in stake amt
mapping(address => uint256) public nextBoostPurchaseTime; // timestamp for which user is eligible to purchase another booster
uint256 public boosterPrice = PRECISION;
uint256 internal constant PRECISION = 1e18;
event RewardAdded(uint256 reward);
event RewardPaid(address indexed user, uint256 reward);
modifier checkStart() {
require(block.timestamp >= starttime,"not start");
_;
}
modifier updateReward(address account) {
rewardPerTokenStored = rewardPerToken();
lastUpdateTime = lastTimeRewardApplicable();
if (account != address(0)) {
rewards[account] = earned(account);
userRewardPerTokenPaid[account] = rewardPerTokenStored;
}
_;
}
constructor(
uint256 _tokenCapAmount,
IERC20 _stakeToken,
IERC20 _boostToken,
address _governanceSetter,
UniswapRouter _uniswapRouter,
uint256 _starttime,
uint256 _duration
) public LPTokenWrapper(_stakeToken) {
tokenCapAmount = _tokenCapAmount;
boostToken = _boostToken;
boostToken.approve(address(_uniswapRouter), uint256(-1));
governanceSetter = _governanceSetter;
uniswapRouter = _uniswapRouter;
starttime = _starttime;
duration = _duration;
}
function lastTimeRewardApplicable() public view returns (uint256) {
return Math.min(block.timestamp, periodFinish);
}
function rewardPerToken() public view returns (uint256) {
if (boostedTotalSupply == 0) {
return rewardPerTokenStored;
}
return
rewardPerTokenStored.add(
lastTimeRewardApplicable()
.sub(lastUpdateTime)
.mul(rewardRate)
.mul(1e18)
.div(boostedTotalSupply)
);
}
function earned(address account) public view returns (uint256) {
return
boostedBalances[account]
.mul(rewardPerToken().sub(userRewardPerTokenPaid[account]))
.div(1e18)
.add(rewards[account]);
}
// stake visibility is public as overriding LPTokenWrapper's stake() function
function stake(uint256 amount) public updateReward(msg.sender) checkStart {
require(amount > 0, "Cannot stake 0");
super.stake(amount);
// check user cap
require(
balanceOf(msg.sender) <= tokenCapAmount || block.timestamp >= starttime.add(86400),
"token cap exceeded"
);
// update boosted balance and supply
updateBoostBalanceAndSupply(msg.sender);
// transfer token last, to follow CEI pattern
stakeToken.safeTransferFrom(msg.sender, address(this), amount);
}
function withdraw(uint256 amount) public updateReward(msg.sender) checkStart {
require(amount > 0, "Cannot withdraw 0");
super.withdraw(amount);
// update boosted balance and supply
updateBoostBalanceAndSupply(msg.sender);
stakeToken.safeTransfer(msg.sender, amount);
}
function exit() external {
withdraw(balanceOf(msg.sender));
getReward();
}
function getReward() public updateReward(msg.sender) checkStart {
uint256 reward = earned(msg.sender);
if (reward > 0) {
rewards[msg.sender] = 0;
boostToken.safeTransfer(msg.sender, reward);
emit RewardPaid(msg.sender, reward);
}
}
function boost() external updateReward(msg.sender) checkStart {
require(
// 2 days after starttime
block.timestamp > starttime.add(172800) &&
block.timestamp > nextBoostPurchaseTime[msg.sender],
"early boost purchase"
);
// increase next purchase eligibility by an hour
nextBoostPurchaseTime[msg.sender] = block.timestamp.add(3600);
// increase no. of boosters bought
uint256 booster = numBoostersBought[msg.sender].add(1);
numBoostersBought[msg.sender] = booster;
require(booster <= MAX_NUM_BOOSTERS, "max boosters bought");
// save current booster price, since transfer is done last
booster = boosterPrice;
// increase next booster price by 5%
boosterPrice = boosterPrice.mul(105).div(100);
// update boosted balance and supply
updateBoostBalanceAndSupply(msg.sender);
boostToken.safeTransferFrom(msg.sender, address(this), booster);
IERC20Burnable burnableBoostToken = IERC20Burnable(address(boostToken));
// if governance not set, burn all
if (governance == address(0)) {
burnableBoostToken.burn(booster);
return;
}
// otherwise, burn 50%
uint256 burnAmount = booster.div(2);
burnableBoostToken.burn(burnAmount);
booster = booster.sub(burnAmount);
// swap to stablecoin, transferred to governance
address[] memory routeDetails = new address[](3);
routeDetails[0] = address(boostToken);
routeDetails[1] = uniswapRouter.WETH();
routeDetails[2] = stablecoin;
uniswapRouter.swapExactTokensForTokens(
booster,
0,
routeDetails,
governance,
block.timestamp + 100
);
}
function notifyRewardAmount(uint256 reward)
external
onlyOwner
updateReward(address(0))
{
rewardRate = reward.div(duration);
lastUpdateTime = starttime;
periodFinish = starttime.add(duration);
emit RewardAdded(reward);
}
function setGovernance(address _governance)
external
{
require(msg.sender == governanceSetter, "only setter");
governance = _governance;
stablecoin = IGovernance(governance).getStablecoin();
governanceSetter = address(0);
}
function updateBoostBalanceAndSupply(address user) internal {
// subtract existing balance from boostedSupply
boostedTotalSupply = boostedTotalSupply.sub(boostedBalances[user]);
// calculate and update new boosted balance (user's balance has been updated by parent method)
// each booster adds 5% to stake amount
uint256 newBoostBalance = balanceOf(user).mul(numBoostersBought[user].mul(5).add(100)).div(100);
boostedBalances[user] = newBoostBalance;
// update boostedSupply
boostedTotalSupply = boostedTotalSupply.add(newBoostBalance);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"uint256","name":"_tokenCapAmount","type":"uint256"},{"internalType":"contract IERC20","name":"_stakeToken","type":"address"},{"internalType":"contract IERC20","name":"_boostToken","type":"address"},{"internalType":"address","name":"_governanceSetter","type":"address"},{"internalType":"contract UniswapRouter","name":"_uniswapRouter","type":"address"},{"internalType":"uint256","name":"_starttime","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"}],"payable":false,"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":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"constant":true,"inputs":[],"name":"MAX_NUM_BOOSTERS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"boost","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"boostToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boostedBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"boostedTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"boosterPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"getReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"governanceSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nextBoostPurchaseTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numBoostersBought","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":true,"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stablecoin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stakeToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"starttime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenCapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract UniswapRouter","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526000600c556000600d55670de0b6b3a76400006016553480156200002757600080fd5b5060405162001f3138038062001f31833981810160405260e08110156200004d57600080fd5b508051602082015160408301516060840151608085015160a086015160c090960151600080546001600160a01b0319166001600160a01b03871617905594959394929391929091906200009f620001cd565b600380546001600160a01b0319166001600160a01b0392831617908190556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36009879055600480546001600160a01b0319166001600160a01b03878116919091178083556040805163095ea7b360e01b81528784169481019490945260001960248501525191169163095ea7b39160448083019260209291908290030181600087803b1580156200015c57600080fd5b505af115801562000171573d6000803e3d6000fd5b505050506040513d60208110156200018857600080fd5b5050600680546001600160a01b039586166001600160a01b0319918216179091556007805494909516931692909217909255600a91909155600b5550620001d1915050565b3390565b611d5080620001e16000396000f3fe608060405234801561001057600080fd5b50600436106102765760003560e01c806380faa57d11610160578063b0b34949116100d8578063e72c3c421161008c578063e9fad8ee11610071578063e9fad8ee146104fe578063ebe2b12b14610506578063f2fde38b1461050e57610276565b8063e72c3c42146104d0578063e9cbd822146104f657610276565b8063c8f33c91116100bd578063c8f33c91146104b8578063cd3daf9d146104c0578063df136d65146104c857610276565b8063b0b34949146104a8578063c8360c5a146104b057610276565b80638da5cb5b1161012f578063a66f42c011610114578063a66f42c01461045d578063a694fc3a14610465578063ab033ea91461048257610276565b80638da5cb5b146104395780638f32d59b1461044157610276565b806380faa57d146103fb5780638112643c146104035780638b8763471461040b5780638da588971461043157610276565b80633d18b912116101f357806364044fd9116101c2578063715018a6116101a7578063715018a6146103e3578063735de9f7146103eb5780637b0a47ee146103f357610276565b806364044fd91461039757806370a08231146103bd57610276565b80633d18b9121461037757806351ed6a301461037f5780635aa6e675146103875780635be4d8001461038f57610276565b806318160ddd1161024a5780633a589b971161022f5780633a589b97146103105780633ba35551146103345780633c6b16ab1461035a57610276565b806318160ddd146102e95780632e1a7d4d146102f157610276565b80628cc2621461027b57806304058165146102b35780630700037d146102bb5780630fb5a6b4146102e1575b600080fd5b6102a16004803603602081101561029157600080fd5b50356001600160a01b0316610534565b60408051918252519081900360200190f35b6102a16105ca565b6102a1600480360360208110156102d157600080fd5b50356001600160a01b03166105d0565b6102a16105e2565b6102a16105e8565b61030e6004803603602081101561030757600080fd5b50356105ef565b005b610318610729565b604080516001600160a01b039092168252519081900360200190f35b6102a16004803603602081101561034a57600080fd5b50356001600160a01b0316610738565b61030e6004803603602081101561037057600080fd5b503561074a565b61030e61086b565b610318610993565b6103186109a2565b6102a16109b1565b6102a1600480360360208110156103ad57600080fd5b50356001600160a01b03166109b7565b6102a1600480360360208110156103d357600080fd5b50356001600160a01b03166109c9565b61030e6109e4565b610318610a9f565b6102a1610aae565b6102a1610ab4565b6102a1610ac7565b6102a16004803603602081101561042157600080fd5b50356001600160a01b0316610acd565b6102a1610adf565b610318610ae5565b610449610af4565b604080519115158252519081900360200190f35b61030e610b1a565b61030e6004803603602081101561047b57600080fd5b5035611121565b61030e6004803603602081101561049857600080fd5b50356001600160a01b03166112d7565b610318611431565b6102a1611440565b6102a1611445565b6102a161144b565b6102a16114a5565b6102a1600480360360208110156104e657600080fd5b50356001600160a01b03166114ab565b6103186114bd565b61030e6114cc565b6102a16114e7565b61030e6004803603602081101561052457600080fd5b50356001600160a01b03166114ed565b6001600160a01b03811660009081526011602090815260408083205460109092528220546105c491906105b890670de0b6b3a7640000906105ac906105879061057b61144b565b9063ffffffff61154f16565b6001600160a01b0388166000908152601360205260409020549063ffffffff61159816565b9063ffffffff6115f116565b9063ffffffff61163316565b92915050565b60165481565b60116020526000908152604090205481565b600b5481565b6001545b90565b336105f861144b565b600f55610603610ab4565b600e556001600160a01b0381161561064a5761061e81610534565b6001600160a01b038216600090815260116020908152604080832093909355600f546010909152919020555b600a544210156106a1576040805162461bcd60e51b815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600082116106f6576040805162461bcd60e51b815260206004820152601160248201527f43616e6e6f742077697468647261772030000000000000000000000000000000604482015290519081900360640190fd5b6106ff8261168d565b610708336116d6565b600054610725906001600160a01b0316338463ffffffff61178016565b5050565b6004546001600160a01b031681565b60136020526000908152604090205481565b610752610af4565b6107a3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60006107ad61144b565b600f556107b8610ab4565b600e556001600160a01b038116156107ff576107d381610534565b6001600160a01b038216600090815260116020908152604080832093909355600f546010909152919020555b600b5461081390839063ffffffff6115f116565b600d55600a54600e819055600b54610831919063ffffffff61163316565b600c556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15050565b3361087461144b565b600f5561087f610ab4565b600e556001600160a01b038116156108c65761089a81610534565b6001600160a01b038216600090815260116020908152604080832093909355600f546010909152919020555b600a5442101561091d576040805162461bcd60e51b815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600061092833610534565b905080156107255733600081815260116020526040812055600454610959916001600160a01b039091169083611780565b60408051828152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25050565b6000546001600160a01b031681565b6005546001600160a01b031681565b60095481565b60156020526000908152604090205481565b6001600160a01b031660009081526002602052604090205490565b6109ec610af4565b610a3d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6007546001600160a01b031681565b600d5481565b6000610ac242600c54611805565b905090565b60125481565b60106020526000908152604090205481565b600a5481565b6003546001600160a01b031690565b6003546000906001600160a01b0316610b0b61181b565b6001600160a01b031614905090565b33610b2361144b565b600f55610b2e610ab4565b600e556001600160a01b03811615610b7557610b4981610534565b6001600160a01b038216600090815260116020908152604080832093909355600f546010909152919020555b600a54421015610bcc576040805162461bcd60e51b815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600a54610be2906202a30063ffffffff61163316565b42118015610bfe57503360009081526015602052604090205442115b610c4f576040805162461bcd60e51b815260206004820152601460248201527f6561726c7920626f6f7374207075726368617365000000000000000000000000604482015290519081900360640190fd5b610c6142610e1063ffffffff61163316565b336000908152601560209081526040808320939093556014905290812054610c9090600163ffffffff61163316565b33600090815260146020526040902081905590506005811115610cfa576040805162461bcd60e51b815260206004820152601360248201527f6d617820626f6f737465727320626f7567687400000000000000000000000000604482015290519081900360640190fd5b50601654610d1460646105ac83606963ffffffff61159816565b601655610d20336116d6565b600454610d3e906001600160a01b031633308463ffffffff61181f16565b6004546005546001600160a01b039182169116610dba57806001600160a01b03166342966c68836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d9b57600080fd5b505af1158015610daf573d6000803e3d6000fd5b50505050505061111e565b6000610dcd83600263ffffffff6115f116565b9050816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610e1557600080fd5b505af1158015610e29573d6000803e3d6000fd5b50505050610e40818461154f90919063ffffffff16565b6040805160038082526080820190925291945060609190602082018380388339505060045482519293506001600160a01b031691839150600090610e8057fe5b6001600160a01b03928316602091820292909201810191909152600754604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015610eed57600080fd5b505afa158015610f01573d6000803e3d6000fd5b505050506040513d6020811015610f1757600080fd5b5051815182906001908110610f2857fe5b6001600160a01b039283166020918202929092010152600854825191169082906002908110610f5357fe5b6001600160a01b039283166020918202929092018101919091526007546005546040517f38ed173900000000000000000000000000000000000000000000000000000000815260048101898152600060248301819052928616606483810182905242016084840181905260a060448501908152895160a4860152895196909816976338ed1739978d978b969495939460c4019187810191028083838b5b83811015611008578181015183820152602001610ff0565b505050509050019650505050505050600060405180830381600087803b15801561103157600080fd5b505af1158015611045573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561108c57600080fd5b81019080805160405193929190846401000000008211156110ac57600080fd5b9083019060208201858111156110c157600080fd5b82518660208202830111640100000000821117156110de57600080fd5b82525081516020918201928201910280838360005b8381101561110b5781810151838201526020016110f3565b5050505090500160405250505050505050505b50565b3361112a61144b565b600f55611135610ab4565b600e556001600160a01b0381161561117c5761115081610534565b6001600160a01b038216600090815260116020908152604080832093909355600f546010909152919020555b600a544210156111d3576040805162461bcd60e51b815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008211611228576040805162461bcd60e51b815260206004820152600e60248201527f43616e6e6f74207374616b652030000000000000000000000000000000000000604482015290519081900360640190fd5b611231826118ad565b60095461123d336109c9565b11158061125f5750600a5461125b906201518063ffffffff61163316565b4210155b6112b0576040805162461bcd60e51b815260206004820152601260248201527f746f6b656e206361702065786365656465640000000000000000000000000000604482015290519081900360640190fd5b6112b9336116d6565b600054610725906001600160a01b031633308563ffffffff61181f16565b6006546001600160a01b03163314611336576040805162461bcd60e51b815260206004820152600b60248201527f6f6e6c7920736574746572000000000000000000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038381169190911791829055604080517fb6f673120000000000000000000000000000000000000000000000000000000081529051929091169163b6f6731291600480820192602092909190829003018186803b1580156113c357600080fd5b505afa1580156113d7573d6000803e3d6000fd5b505050506040513d60208110156113ed57600080fd5b5051600880546001600160a01b039092167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617905560068054909116905550565b6006546001600160a01b031681565b600581565b600e5481565b6000601254600014156114615750600f546105ec565b610ac26114966012546105ac670de0b6b3a764000061148a600d5461148a600e5461057b610ab4565b9063ffffffff61159816565b600f549063ffffffff61163316565b600f5481565b60146020526000908152604090205481565b6008546001600160a01b031681565b6114dd6114d8336109c9565b6105ef565b6114e561086b565b565b600c5481565b6114f5610af4565b611546576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61111e816118e3565b600061159183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061199c565b9392505050565b6000826115a7575060006105c4565b828202828482816115b457fe5b04146115915760405162461bcd60e51b8152600401808060200182810382526021815260200180611cd16021913960400191505060405180910390fd5b600061159183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611a33565b600082820183811015611591576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001546116a0908263ffffffff61154f16565b600155336000908152600260205260409020546116c3908263ffffffff61154f16565b3360009081526002602052604090205550565b6001600160a01b0381166000908152601360205260409020546012546117019163ffffffff61154f16565b6012556001600160a01b038116600090815260146020526040812054611748906064906105ac9061173f9083906105b890600563ffffffff61159816565b61148a866109c9565b6001600160a01b0383166000908152601360205260409020819055601254909150611779908263ffffffff61163316565b6012555050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611800908490611a98565b505050565b60008183106118145781611591565b5090919050565b3390565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526118a7908590611a98565b50505050565b6001546118c0908263ffffffff61163316565b600155336000908152600260205260409020546116c3908263ffffffff61163316565b6001600160a01b0381166119285760405162461bcd60e51b8152600401808060200182810382526026815260200180611cab6026913960400191505060405180910390fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008184841115611a2b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156119f05781810151838201526020016119d8565b50505050905090810190601f168015611a1d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183611a825760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156119f05781810151838201526020016119d8565b506000838581611a8e57fe5b0495945050505050565b611aaa826001600160a01b0316611c6e565b611afb576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310611b5757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611b1a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611bb9576040519150601f19603f3d011682016040523d82523d6000602084013e611bbe565b606091505b509150915081611c15576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156118a757808060200190516020811015611c3157600080fd5b50516118a75760405162461bcd60e51b815260040180806020018281038252602a815260200180611cf2602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590611ca25750808214155b94935050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820bb7c3f0874db24c2ae4e78bc02f9530b133105ba4af11e2d5f9947b7d372de5964736f6c634300051100320000000000000000000000000000000000000000000000044de4890408881e60000000000000000000000000c00e94cb662c3520282e6f5717214004a7f268880000000000000000000000003e780920601d61cedb860fe9c4a90c9ea6a35e78000000000000000000000000f0d3db2e1752fe133d6c5ee0fcbbb0632f745a050000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000005f4e45d00000000000000000000000000000000000000000000000000000000000093a80
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102765760003560e01c806380faa57d11610160578063b0b34949116100d8578063e72c3c421161008c578063e9fad8ee11610071578063e9fad8ee146104fe578063ebe2b12b14610506578063f2fde38b1461050e57610276565b8063e72c3c42146104d0578063e9cbd822146104f657610276565b8063c8f33c91116100bd578063c8f33c91146104b8578063cd3daf9d146104c0578063df136d65146104c857610276565b8063b0b34949146104a8578063c8360c5a146104b057610276565b80638da5cb5b1161012f578063a66f42c011610114578063a66f42c01461045d578063a694fc3a14610465578063ab033ea91461048257610276565b80638da5cb5b146104395780638f32d59b1461044157610276565b806380faa57d146103fb5780638112643c146104035780638b8763471461040b5780638da588971461043157610276565b80633d18b912116101f357806364044fd9116101c2578063715018a6116101a7578063715018a6146103e3578063735de9f7146103eb5780637b0a47ee146103f357610276565b806364044fd91461039757806370a08231146103bd57610276565b80633d18b9121461037757806351ed6a301461037f5780635aa6e675146103875780635be4d8001461038f57610276565b806318160ddd1161024a5780633a589b971161022f5780633a589b97146103105780633ba35551146103345780633c6b16ab1461035a57610276565b806318160ddd146102e95780632e1a7d4d146102f157610276565b80628cc2621461027b57806304058165146102b35780630700037d146102bb5780630fb5a6b4146102e1575b600080fd5b6102a16004803603602081101561029157600080fd5b50356001600160a01b0316610534565b60408051918252519081900360200190f35b6102a16105ca565b6102a1600480360360208110156102d157600080fd5b50356001600160a01b03166105d0565b6102a16105e2565b6102a16105e8565b61030e6004803603602081101561030757600080fd5b50356105ef565b005b610318610729565b604080516001600160a01b039092168252519081900360200190f35b6102a16004803603602081101561034a57600080fd5b50356001600160a01b0316610738565b61030e6004803603602081101561037057600080fd5b503561074a565b61030e61086b565b610318610993565b6103186109a2565b6102a16109b1565b6102a1600480360360208110156103ad57600080fd5b50356001600160a01b03166109b7565b6102a1600480360360208110156103d357600080fd5b50356001600160a01b03166109c9565b61030e6109e4565b610318610a9f565b6102a1610aae565b6102a1610ab4565b6102a1610ac7565b6102a16004803603602081101561042157600080fd5b50356001600160a01b0316610acd565b6102a1610adf565b610318610ae5565b610449610af4565b604080519115158252519081900360200190f35b61030e610b1a565b61030e6004803603602081101561047b57600080fd5b5035611121565b61030e6004803603602081101561049857600080fd5b50356001600160a01b03166112d7565b610318611431565b6102a1611440565b6102a1611445565b6102a161144b565b6102a16114a5565b6102a1600480360360208110156104e657600080fd5b50356001600160a01b03166114ab565b6103186114bd565b61030e6114cc565b6102a16114e7565b61030e6004803603602081101561052457600080fd5b50356001600160a01b03166114ed565b6001600160a01b03811660009081526011602090815260408083205460109092528220546105c491906105b890670de0b6b3a7640000906105ac906105879061057b61144b565b9063ffffffff61154f16565b6001600160a01b0388166000908152601360205260409020549063ffffffff61159816565b9063ffffffff6115f116565b9063ffffffff61163316565b92915050565b60165481565b60116020526000908152604090205481565b600b5481565b6001545b90565b336105f861144b565b600f55610603610ab4565b600e556001600160a01b0381161561064a5761061e81610534565b6001600160a01b038216600090815260116020908152604080832093909355600f546010909152919020555b600a544210156106a1576040805162461bcd60e51b815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600082116106f6576040805162461bcd60e51b815260206004820152601160248201527f43616e6e6f742077697468647261772030000000000000000000000000000000604482015290519081900360640190fd5b6106ff8261168d565b610708336116d6565b600054610725906001600160a01b0316338463ffffffff61178016565b5050565b6004546001600160a01b031681565b60136020526000908152604090205481565b610752610af4565b6107a3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60006107ad61144b565b600f556107b8610ab4565b600e556001600160a01b038116156107ff576107d381610534565b6001600160a01b038216600090815260116020908152604080832093909355600f546010909152919020555b600b5461081390839063ffffffff6115f116565b600d55600a54600e819055600b54610831919063ffffffff61163316565b600c556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15050565b3361087461144b565b600f5561087f610ab4565b600e556001600160a01b038116156108c65761089a81610534565b6001600160a01b038216600090815260116020908152604080832093909355600f546010909152919020555b600a5442101561091d576040805162461bcd60e51b815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600061092833610534565b905080156107255733600081815260116020526040812055600454610959916001600160a01b039091169083611780565b60408051828152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25050565b6000546001600160a01b031681565b6005546001600160a01b031681565b60095481565b60156020526000908152604090205481565b6001600160a01b031660009081526002602052604090205490565b6109ec610af4565b610a3d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6007546001600160a01b031681565b600d5481565b6000610ac242600c54611805565b905090565b60125481565b60106020526000908152604090205481565b600a5481565b6003546001600160a01b031690565b6003546000906001600160a01b0316610b0b61181b565b6001600160a01b031614905090565b33610b2361144b565b600f55610b2e610ab4565b600e556001600160a01b03811615610b7557610b4981610534565b6001600160a01b038216600090815260116020908152604080832093909355600f546010909152919020555b600a54421015610bcc576040805162461bcd60e51b815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600a54610be2906202a30063ffffffff61163316565b42118015610bfe57503360009081526015602052604090205442115b610c4f576040805162461bcd60e51b815260206004820152601460248201527f6561726c7920626f6f7374207075726368617365000000000000000000000000604482015290519081900360640190fd5b610c6142610e1063ffffffff61163316565b336000908152601560209081526040808320939093556014905290812054610c9090600163ffffffff61163316565b33600090815260146020526040902081905590506005811115610cfa576040805162461bcd60e51b815260206004820152601360248201527f6d617820626f6f737465727320626f7567687400000000000000000000000000604482015290519081900360640190fd5b50601654610d1460646105ac83606963ffffffff61159816565b601655610d20336116d6565b600454610d3e906001600160a01b031633308463ffffffff61181f16565b6004546005546001600160a01b039182169116610dba57806001600160a01b03166342966c68836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d9b57600080fd5b505af1158015610daf573d6000803e3d6000fd5b50505050505061111e565b6000610dcd83600263ffffffff6115f116565b9050816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610e1557600080fd5b505af1158015610e29573d6000803e3d6000fd5b50505050610e40818461154f90919063ffffffff16565b6040805160038082526080820190925291945060609190602082018380388339505060045482519293506001600160a01b031691839150600090610e8057fe5b6001600160a01b03928316602091820292909201810191909152600754604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015610eed57600080fd5b505afa158015610f01573d6000803e3d6000fd5b505050506040513d6020811015610f1757600080fd5b5051815182906001908110610f2857fe5b6001600160a01b039283166020918202929092010152600854825191169082906002908110610f5357fe5b6001600160a01b039283166020918202929092018101919091526007546005546040517f38ed173900000000000000000000000000000000000000000000000000000000815260048101898152600060248301819052928616606483810182905242016084840181905260a060448501908152895160a4860152895196909816976338ed1739978d978b969495939460c4019187810191028083838b5b83811015611008578181015183820152602001610ff0565b505050509050019650505050505050600060405180830381600087803b15801561103157600080fd5b505af1158015611045573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561108c57600080fd5b81019080805160405193929190846401000000008211156110ac57600080fd5b9083019060208201858111156110c157600080fd5b82518660208202830111640100000000821117156110de57600080fd5b82525081516020918201928201910280838360005b8381101561110b5781810151838201526020016110f3565b5050505090500160405250505050505050505b50565b3361112a61144b565b600f55611135610ab4565b600e556001600160a01b0381161561117c5761115081610534565b6001600160a01b038216600090815260116020908152604080832093909355600f546010909152919020555b600a544210156111d3576040805162461bcd60e51b815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008211611228576040805162461bcd60e51b815260206004820152600e60248201527f43616e6e6f74207374616b652030000000000000000000000000000000000000604482015290519081900360640190fd5b611231826118ad565b60095461123d336109c9565b11158061125f5750600a5461125b906201518063ffffffff61163316565b4210155b6112b0576040805162461bcd60e51b815260206004820152601260248201527f746f6b656e206361702065786365656465640000000000000000000000000000604482015290519081900360640190fd5b6112b9336116d6565b600054610725906001600160a01b031633308563ffffffff61181f16565b6006546001600160a01b03163314611336576040805162461bcd60e51b815260206004820152600b60248201527f6f6e6c7920736574746572000000000000000000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038381169190911791829055604080517fb6f673120000000000000000000000000000000000000000000000000000000081529051929091169163b6f6731291600480820192602092909190829003018186803b1580156113c357600080fd5b505afa1580156113d7573d6000803e3d6000fd5b505050506040513d60208110156113ed57600080fd5b5051600880546001600160a01b039092167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617905560068054909116905550565b6006546001600160a01b031681565b600581565b600e5481565b6000601254600014156114615750600f546105ec565b610ac26114966012546105ac670de0b6b3a764000061148a600d5461148a600e5461057b610ab4565b9063ffffffff61159816565b600f549063ffffffff61163316565b600f5481565b60146020526000908152604090205481565b6008546001600160a01b031681565b6114dd6114d8336109c9565b6105ef565b6114e561086b565b565b600c5481565b6114f5610af4565b611546576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61111e816118e3565b600061159183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061199c565b9392505050565b6000826115a7575060006105c4565b828202828482816115b457fe5b04146115915760405162461bcd60e51b8152600401808060200182810382526021815260200180611cd16021913960400191505060405180910390fd5b600061159183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611a33565b600082820183811015611591576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001546116a0908263ffffffff61154f16565b600155336000908152600260205260409020546116c3908263ffffffff61154f16565b3360009081526002602052604090205550565b6001600160a01b0381166000908152601360205260409020546012546117019163ffffffff61154f16565b6012556001600160a01b038116600090815260146020526040812054611748906064906105ac9061173f9083906105b890600563ffffffff61159816565b61148a866109c9565b6001600160a01b0383166000908152601360205260409020819055601254909150611779908263ffffffff61163316565b6012555050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611800908490611a98565b505050565b60008183106118145781611591565b5090919050565b3390565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526118a7908590611a98565b50505050565b6001546118c0908263ffffffff61163316565b600155336000908152600260205260409020546116c3908263ffffffff61163316565b6001600160a01b0381166119285760405162461bcd60e51b8152600401808060200182810382526026815260200180611cab6026913960400191505060405180910390fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008184841115611a2b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156119f05781810151838201526020016119d8565b50505050905090810190601f168015611a1d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183611a825760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156119f05781810151838201526020016119d8565b506000838581611a8e57fe5b0495945050505050565b611aaa826001600160a01b0316611c6e565b611afb576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310611b5757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611b1a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611bb9576040519150601f19603f3d011682016040523d82523d6000602084013e611bbe565b606091505b509150915081611c15576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156118a757808060200190516020811015611c3157600080fd5b50516118a75760405162461bcd60e51b815260040180806020018281038252602a815260200180611cf2602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590611ca25750808214155b94935050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820bb7c3f0874db24c2ae4e78bc02f9530b133105ba4af11e2d5f9947b7d372de5964736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000044de4890408881e60000000000000000000000000c00e94cb662c3520282e6f5717214004a7f268880000000000000000000000003e780920601d61cedb860fe9c4a90c9ea6a35e78000000000000000000000000f0d3db2e1752fe133d6c5ee0fcbbb0632f745a050000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000005f4e45d00000000000000000000000000000000000000000000000000000000000093a80
-----Decoded View---------------
Arg [0] : _tokenCapAmount (uint256): 79399737980864700000
Arg [1] : _stakeToken (address): 0xc00e94Cb662C3520282E6f5717214004A7f26888
Arg [2] : _boostToken (address): 0x3e780920601D61cEdb860fe9c4a90c9EA6A35E78
Arg [3] : _governanceSetter (address): 0xf0d3Db2e1752fE133d6C5Ee0FcbBB0632F745A05
Arg [4] : _uniswapRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [5] : _starttime (uint256): 1598965200
Arg [6] : _duration (uint256): 604800
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000044de4890408881e60
Arg [1] : 000000000000000000000000c00e94cb662c3520282e6f5717214004a7f26888
Arg [2] : 0000000000000000000000003e780920601d61cedb860fe9c4a90c9ea6a35e78
Arg [3] : 000000000000000000000000f0d3db2e1752fe133d6c5ee0fcbbb0632f745a05
Arg [4] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [5] : 000000000000000000000000000000000000000000000000000000005f4e45d0
Arg [6] : 0000000000000000000000000000000000000000000000000000000000093a80
Deployed Bytecode Sourcemap
22763:7819:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22763:7819:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25692:271;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25692:271:0;-1:-1:-1;;;;;25692:271:0;;:::i;:::-;;;;;;;;;;;;;;;;23872:39;;;:::i;23367:42::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23367:42:0;-1:-1:-1;;;;;23367:42:0;;:::i;23121:23::-;;;:::i;21674:91::-;;;:::i;26648:339::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26648:339:0;;:::i;:::-;;22823:24;;;:::i;:::-;;;;-1:-1:-1;;;;;22823:24:0;;;;;;;;;;;;;;23582:50;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23582:50:0;-1:-1:-1;;;;;23582:50:0;;:::i;29368:293::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29368:293:0;;:::i;27100:302::-;;;:::i;21462:24::-;;;:::i;22854:25::-;;;:::i;23054:29::-;;;:::i;23741:56::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23741:56:0;-1:-1:-1;;;;;23741:56:0;;:::i;21773:110::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21773:110:0;-1:-1:-1;;;;;21773:110:0;;:::i;10203:140::-;;;:::i;22924:34::-;;;:::i;23189:29::-;;;:::i;25115:131::-;;;:::i;23542:33::-;;;:::i;23303:57::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23303:57:0;-1:-1:-1;;;;;23303:57:0;;:::i;23090:24::-;;;:::i;9392:79::-;;;:::i;9758:94::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;27414:1946;;;:::i;26054:586::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26054:586:0;;:::i;29673:278::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29673:278:0;-1:-1:-1;;;;;29673:278:0;;:::i;22886:31::-;;;:::i;23003:44::-;;;:::i;23225:29::-;;;:::i;25254:430::-;;;:::i;23261:35::-;;;:::i;23639:52::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23639:52:0;-1:-1:-1;;;;;23639:52:0;;:::i;22965:25::-;;;:::i;26995:97::-;;;:::i;23151:31::-;;;:::i;10498:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10498:109:0;-1:-1:-1;;;;;10498:109:0;;:::i;25692:271::-;-1:-1:-1;;;;;25938:16:0;;25746:7;25938:16;;;:7;:16;;;;;;;;;25854:22;:31;;;;;;25786:169;;25938:16;25786:129;;25910:4;;25786:101;;25833:53;;:16;:14;:16::i;:::-;:20;:53;:20;:53;:::i;:::-;-1:-1:-1;;;;;25786:24:0;;;;;;:15;:24;;;;;;;:101;:46;:101;:::i;:::-;:123;:129;:123;:129;:::i;:::-;:151;:169;:151;:169;:::i;:::-;25766:189;25692:271;-1:-1:-1;;25692:271:0:o;23872:39::-;;;;:::o;23367:42::-;;;;;;;;;;;;;:::o;23121:23::-;;;;:::o;21674:91::-;21745:12;;21674:91;;:::o;26648:339::-;26702:10;24255:16;:14;:16::i;:::-;24232:20;:39;24299:26;:24;:26::i;:::-;24282:14;:43;-1:-1:-1;;;;;24340:21:0;;;24336:157;;24397:15;24404:7;24397:6;:15::i;:::-;-1:-1:-1;;;;;24378:16:0;;;;;;:7;:16;;;;;;;;:34;;;;24461:20;;24427:22;:31;;;;;;:54;24336:157;24132:9;;24113:15;:28;;24105:49;;;;;-1:-1:-1;;;24105:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26753:1;26744:6;:10;26736:40;;;;;-1:-1:-1;;;26736:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26787:22;26802:6;26787:14;:22::i;:::-;26876:39;26904:10;26876:27;:39::i;:::-;26936:10;;:43;;-1:-1:-1;;;;;26936:10:0;26960;26972:6;26936:43;:23;:43;:::i;:::-;26648:339;;:::o;22823:24::-;;;-1:-1:-1;;;;;22823:24:0;;:::o;23582:50::-;;;;;;;;;;;;;:::o;29368:293::-;9604:9;:7;:9::i;:::-;9596:54;;;;;-1:-1:-1;;;9596:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29479:1;24255:16;:14;:16::i;:::-;24232:20;:39;24299:26;:24;:26::i;:::-;24282:14;:43;-1:-1:-1;;;;;24340:21:0;;;24336:157;;24397:15;24404:7;24397:6;:15::i;:::-;-1:-1:-1;;;;;24378:16:0;;;;;;:7;:16;;;;;;;;:34;;;;24461:20;;24427:22;:31;;;;;;:54;24336:157;29523:8;;29512:20;;:6;;:20;:10;:20;:::i;:::-;29499:10;:33;29560:9;;29543:14;:26;;;29609:8;;29595:23;;29560:9;29595:23;:13;:23;:::i;:::-;29580:12;:38;29634:19;;;;;;;;;;;;;;;;;9661:1;29368:293;:::o;27100:302::-;27141:10;24255:16;:14;:16::i;:::-;24232:20;:39;24299:26;:24;:26::i;:::-;24282:14;:43;-1:-1:-1;;;;;24340:21:0;;;24336:157;;24397:15;24404:7;24397:6;:15::i;:::-;-1:-1:-1;;;;;24378:16:0;;;;;;:7;:16;;;;;;;;:34;;;;24461:20;;24427:22;:31;;;;;;:54;24336:157;24132:9;;24113:15;:28;;24105:49;;;;;-1:-1:-1;;;24105:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27175:14;27192:18;27199:10;27192:6;:18::i;:::-;27175:35;-1:-1:-1;27225:10:0;;27221:174;;27260:10;27274:1;27252:19;;;:7;:19;;;;;:23;27290:10;;:43;;-1:-1:-1;;;;;27290:10:0;;;;27326:6;27290:23;:43::i;:::-;27353:30;;;;;;;;27364:10;;27353:30;;;;;;;;;;24165:1;27100:302;:::o;21462:24::-;;;-1:-1:-1;;;;;21462:24:0;;:::o;22854:25::-;;;-1:-1:-1;;;;;22854:25:0;;:::o;23054:29::-;;;;:::o;23741:56::-;;;;;;;;;;;;;:::o;21773:110::-;-1:-1:-1;;;;;21857:18:0;21830:7;21857:18;;;:9;:18;;;;;;;21773:110::o;10203:140::-;9604:9;:7;:9::i;:::-;9596:54;;;;;-1:-1:-1;;;9596:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10286:6;;10265:40;;10302:1;;-1:-1:-1;;;;;10286:6:0;;10265:40;;10302:1;;10265:40;10316:6;:19;;;;;;10203:140::o;22924:34::-;;;-1:-1:-1;;;;;22924:34:0;;:::o;23189:29::-;;;;:::o;25115:131::-;25172:7;25199:39;25208:15;25225:12;;25199:8;:39::i;:::-;25192:46;;25115:131;:::o;23542:33::-;;;;:::o;23303:57::-;;;;;;;;;;;;;:::o;23090:24::-;;;;:::o;9392:79::-;9457:6;;-1:-1:-1;;;;;9457:6:0;9392:79;:::o;9758:94::-;9838:6;;9798:4;;-1:-1:-1;;;;;9838:6:0;9822:12;:10;:12::i;:::-;-1:-1:-1;;;;;9822:22:0;;9815:29;;9758:94;:::o;27414:1946::-;27453:10;24255:16;:14;:16::i;:::-;24232:20;:39;24299:26;:24;:26::i;:::-;24282:14;:43;-1:-1:-1;;;;;24340:21:0;;;24336:157;;24397:15;24404:7;24397:6;:15::i;:::-;-1:-1:-1;;;;;24378:16:0;;;;;;:7;:16;;;;;;;;:34;;;;24461:20;;24427:22;:31;;;;;;:54;24336:157;24132:9;;24113:15;:28;;24105:49;;;;;-1:-1:-1;;;24105:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27566:9;;:21;;27580:6;27566:21;:13;:21;:::i;:::-;27548:15;:39;:107;;;;-1:-1:-1;27644:10:0;27622:33;;;;:21;:33;;;;;;27604:15;:51;27548:107;27487:216;;;;;-1:-1:-1;;;27487:216:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27818:25;:15;27838:4;27818:25;:19;:25;:::i;:::-;27804:10;27782:33;;;;:21;:33;;;;;;;;:61;;;;27926:17;:29;;;;;;:36;;27960:1;27926:36;:33;:36;:::i;:::-;27991:10;27973:29;;;;:17;:29;;;;;:39;;;27908:54;-1:-1:-1;23046:1:0;28031:27;;;28023:59;;;;;-1:-1:-1;;;28023:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28173:12:0;;28257:30;28283:3;28257:21;28173:12;28274:3;28257:21;:16;:21;:::i;:30::-;28242:12;:45;28354:39;28382:10;28354:27;:39::i;:::-;28414:10;;:63;;-1:-1:-1;;;;;28414:10:0;28442;28462:4;28469:7;28414:63;:27;:63;:::i;:::-;28557:10;;28628;;-1:-1:-1;;;;;28557:10:0;;;;28628;28624:110;;28669:18;-1:-1:-1;;;;;28669:23:0;;28693:7;28669:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28669:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28669:32:0;;;;28716:7;;;;28624:110;28778:18;28799:14;:7;28811:1;28799:14;:11;:14;:::i;:::-;28778:35;;28824:18;-1:-1:-1;;;;;28824:23:0;;28848:10;28824:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28824:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28824:35:0;;;;28880:23;28892:10;28880:7;:11;;:23;;;;:::i;:::-;29014:16;;;29028:1;29014:16;;;;;;;;;28870:33;;-1:-1:-1;28982:29:0;;29014:16;;;;28982:29;;105:10:-1;29014:16:0;88:34:-1;-1:-1;;29067:10:0;;29041:15;;;;-1:-1:-1;;;;;;29067:10:0;;29041:15;;-1:-1:-1;29067:10:0;;29041:15;;;;-1:-1:-1;;;;;29041:37:0;;;:15;;;;;;;;;;:37;;;;29107:13;;:20;;;;;;;;:13;;;;;:18;;:20;;;;;29041:15;;29107:20;;;;;:13;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;29107:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29107:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29107:20:0;29089:15;;:12;;29102:1;;29089:15;;;;;;-1:-1:-1;;;;;29089:38:0;;;:15;;;;;;;;;:38;29156:10;;29138:15;;29156:10;;;29138:12;;29151:1;;29138:15;;;;;;-1:-1:-1;;;;;29138:28:0;;;:15;;;;;;;;;;:28;;;;29177:13;;29295:10;;29177:175;;;;;;;;;;;:13;:175;;;;;;29295:10;;;29338:3;29177:175;;;;;;29320:15;:21;29177:175;;;;;;;;;;;;;;;;;;;;;:13;;;;;:38;;29230:7;;29268:12;;29295:10;;29320:21;;29177:175;;;;;;;;;;;:13;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29177:175:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29177:175:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29177:175:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;29177:175:0;80:15:-1;;;97:9;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;29177:175:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;29177:175:0;;421:4:-1;412:14;;;;29177:175:0;;;;;412:14:-1;29177:175: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;29177:175:0;;;;;;;;;;;;24165:1;;;;;27414:1946;:::o;26054:586::-;26105:10;24255:16;:14;:16::i;:::-;24232:20;:39;24299:26;:24;:26::i;:::-;24282:14;:43;-1:-1:-1;;;;;24340:21:0;;;24336:157;;24397:15;24404:7;24397:6;:15::i;:::-;-1:-1:-1;;;;;24378:16:0;;;;;;:7;:16;;;;;;;;:34;;;;24461:20;;24427:22;:31;;;;;;:54;24336:157;24132:9;;24113:15;:28;;24105:49;;;;;-1:-1:-1;;;24105:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26156:1;26147:6;:10;26139:37;;;;;-1:-1:-1;;;26139:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26187:19;26199:6;26187:11;:19::i;:::-;26293:14;;26268:21;26278:10;26268:9;:21::i;:::-;:39;;:82;;;-1:-1:-1;26330:9:0;;:20;;26344:5;26330:20;:13;:20;:::i;:::-;26311:15;:39;;26268:82;26246:150;;;;;-1:-1:-1;;;26246:150:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26455:39;26483:10;26455:27;:39::i;:::-;26570:10;;:62;;-1:-1:-1;;;;;26570:10:0;26598;26618:4;26625:6;26570:62;:27;:62;:::i;29673:278::-;29773:16;;-1:-1:-1;;;;;29773:16:0;29759:10;:30;29751:54;;;;;-1:-1:-1;;;29751:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29816:10;:24;;;;-1:-1:-1;;;;;29816:24:0;;;;;;;;;;;29864:39;;;;;;;;29876:10;;;;;29864:37;;:39;;;;;;;;;;;;;;;29876:10;29864:39;;;5:2:-1;;;;30:1;27;20:12;5:2;29864:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29864:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29864:39:0;29851:10;:52;;-1:-1:-1;;;;;29851:52:0;;;;;;;;;;29914:16;:29;;;;;;;-1:-1:-1;29673:278:0:o;22886:31::-;;;-1:-1:-1;;;;;22886:31:0;;:::o;23003:44::-;23046:1;23003:44;:::o;23225:29::-;;;;:::o;25254:430::-;25301:7;25325:18;;25347:1;25325:23;25321:83;;;-1:-1:-1;25372:20:0;;25365:27;;25321:83;25434:242;25477:184;25642:18;;25477:138;25610:4;25477:106;25572:10;;25477:68;25530:14;;25477:26;:24;:26::i;:68::-;:94;:106;:94;:106;:::i;:184::-;25434:20;;;:242;:24;:242;:::i;23261:35::-;;;;:::o;23639:52::-;;;;;;;;;;;;;:::o;22965:25::-;;;-1:-1:-1;;;;;22965:25:0;;:::o;26995:97::-;27031:31;27040:21;27050:10;27040:9;:21::i;:::-;27031:8;:31::i;:::-;27073:11;:9;:11::i;:::-;26995:97::o;23151:31::-;;;;:::o;10498:109::-;9604:9;:7;:9::i;:::-;9596:54;;;;;-1:-1:-1;;;9596:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10571:28;10590:8;10571:18;:28::i;3250:136::-;3308:7;3335:43;3339:1;3342;3335:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3328:50;3250:136;-1:-1:-1;;;3250:136:0:o;4166:471::-;4224:7;4469:6;4465:47;;-1:-1:-1;4499:1:0;4492:8;;4465:47;4536:5;;;4540:1;4536;:5;:1;4560:5;;;;;:10;4552:56;;;;-1:-1:-1;;;4552:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5105:132;5163:7;5190:39;5194:1;5197;5190:39;;;;;;;;;;;;;;;;;:3;:39::i;2794:181::-;2852:7;2884:5;;;2908:6;;;;2900:46;;;;;-1:-1:-1;;;2900:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;22134:234;22201:12;;:24;;22218:6;22201:24;:16;:24;:::i;:::-;22186:12;:39;22270:10;22260:21;;;;:9;:21;;;;;;:33;;22286:6;22260:33;:25;:33;:::i;:::-;22246:10;22236:21;;;;:9;:21;;;;;:57;-1:-1:-1;22134:234:0:o;29963:616::-;-1:-1:-1;;;;;30136:21:0;;;;;;:15;:21;;;;;;30113:18;;:45;;;:22;:45;:::i;:::-;30092:18;:66;-1:-1:-1;;;;;30368:23:0;;30322;30368;;;:17;:23;;;;;;30348:69;;30413:3;;30348:60;;30368:39;;30413:3;;30368:30;;30396:1;30368:30;:27;:30;:::i;:39::-;30348:15;30358:4;30348:9;:15::i;:69::-;-1:-1:-1;;;;;30428:21:0;;;;;;:15;:21;;;;;:39;;;30532:18;;30322:95;;-1:-1:-1;30532:39:0;;30322:95;30532:39;:22;:39;:::i;:::-;30511:18;:60;-1:-1:-1;;29963:616:0:o;18173:176::-;18282:58;;;-1:-1:-1;;;;;18282:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;18282:58:0;;;;;;;;25:18:-1;;61:17;;18282:58:0;182:15:-1;18305:23:0;179:29:-1;160:49;;18256:85:0;;18275:5;;18256:18;:85::i;:::-;18173:176;;;:::o;1509:106::-;1567:7;1598:1;1594;:5;:13;;1606:1;1594:13;;;-1:-1:-1;1602:1:0;;1509:106;-1:-1:-1;1509:106:0:o;8198:98::-;8278:10;8198:98;:::o;18357:204::-;18484:68;;;-1:-1:-1;;;;;18484:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;18484:68:0;;;;;;;;25:18:-1;;61:17;;18484:68:0;182:15:-1;18507:27:0;179:29:-1;160:49;;18458:95:0;;18477:5;;18458:18;:95::i;:::-;18357:204;;;;:::o;21891:235::-;21955:12;;:24;;21972:6;21955:24;:16;:24;:::i;:::-;21940:12;:39;22024:10;22014:21;;;;:9;:21;;;;;;:33;;22040:6;22014:33;:25;:33;:::i;10713:229::-;-1:-1:-1;;;;;10787:22:0;;10779:73;;;;-1:-1:-1;;;10779:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10889:6;;10868:38;;-1:-1:-1;;;;;10868:38:0;;;;10889:6;;10868:38;;10889:6;;10868:38;10917:6;:17;;;;-1:-1:-1;;;;;10917:17:0;;;;;;;;;;10713:229::o;3723:192::-;3809:7;3845:12;3837:6;;;;3829:29;;;;-1:-1:-1;;;3829:29: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;3829:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3881:5:0;;;3723:192::o;5767:345::-;5853:7;5955:12;5948:5;5940:28;;;;-1:-1:-1;;;5940:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5940:28:0;;5979:9;5995:1;5991;:5;;;;;;;5767:345;-1:-1:-1;;;;;5767:345:0:o;20212:1114::-;20816:27;20824:5;-1:-1:-1;;;;;20816:25:0;;:27::i;:::-;20808:71;;;;;-1:-1:-1;;;20808:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20953:12;20967:23;21002:5;-1:-1:-1;;;;;20994:19:0;21014:4;20994:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;20994: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;;20952:67:0;;;;21038:7;21030:52;;;;;-1:-1:-1;;;21030:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21099:17;;:21;21095:224;;21241:10;21230:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21230:30:0;21222:85;;;;-1:-1:-1;;;21222:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15076:810;15136:4;15795:20;;15638:66;15835:15;;;;;:42;;;15866:11;15854:8;:23;;15835:42;15827:51;15076:810;-1:-1:-1;;;;15076:810:0:o
Swarm Source
bzzr://bb7c3f0874db24c2ae4e78bc02f9530b133105ba4af11e2d5f9947b7d372de59
Loading...
Loading
Loading...
Loading
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.