Feature Tip: Add private address tag to any address under My Name Tag !
Latest 25 from a total of 3,851 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 23046936 | 97 days ago | IN | 0 ETH | 0.00038666 | ||||
| Withdraw | 18320793 | 758 days ago | IN | 0 ETH | 0.00133875 | ||||
| Withdraw | 16509161 | 1012 days ago | IN | 0 ETH | 0.00234145 | ||||
| Withdraw | 16450855 | 1020 days ago | IN | 0 ETH | 0.00268603 | ||||
| Claim | 14275896 | 1350 days ago | IN | 0 ETH | 0.00568388 | ||||
| Withdraw | 14110697 | 1375 days ago | IN | 0 ETH | 0.00948527 | ||||
| Withdraw | 14066073 | 1382 days ago | IN | 0 ETH | 0.01085387 | ||||
| Withdraw | 13938628 | 1402 days ago | IN | 0 ETH | 0.01164488 | ||||
| Claim | 13859651 | 1414 days ago | IN | 0 ETH | 0.01094394 | ||||
| Claim | 13859620 | 1414 days ago | IN | 0 ETH | 0.00469131 | ||||
| Withdraw | 13593236 | 1456 days ago | IN | 0 ETH | 0.0114436 | ||||
| Withdraw | 13515958 | 1468 days ago | IN | 0 ETH | 0.01562302 | ||||
| Withdraw | 13449955 | 1479 days ago | IN | 0 ETH | 0.00856709 | ||||
| Withdraw | 13447431 | 1479 days ago | IN | 0 ETH | 0.00508355 | ||||
| Claim | 13442456 | 1480 days ago | IN | 0 ETH | 0.00620906 | ||||
| Claim | 13299992 | 1502 days ago | IN | 0 ETH | 0.00583805 | ||||
| Deposit | 13279917 | 1505 days ago | IN | 0 ETH | 0.00900412 | ||||
| Withdraw | 13246541 | 1510 days ago | IN | 0 ETH | 0.00575218 | ||||
| Withdraw | 13217185 | 1515 days ago | IN | 0 ETH | 0.00563035 | ||||
| Withdraw | 13170145 | 1522 days ago | IN | 0 ETH | 0.00937054 | ||||
| Withdraw | 13167093 | 1523 days ago | IN | 0 ETH | 0.01578792 | ||||
| Withdraw | 13161095 | 1524 days ago | IN | 0 ETH | 0.012108 | ||||
| Withdraw | 13081782 | 1536 days ago | IN | 0 ETH | 0.00673194 | ||||
| Withdraw | 13070094 | 1538 days ago | IN | 0 ETH | 0.0056298 | ||||
| Withdraw | 13042627 | 1542 days ago | IN | 0 ETH | 0.00389561 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ConvexMasterChef
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-05-17
*/
// SPDX-License-Identifier: MIT
// File: @openzeppelin\contracts\math\SafeMath.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b > a) return (false, 0);
return (true, a - b);
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b == 0) return (false, 0);
return (true, a / b);
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b == 0) return (false, 0);
return (true, a % b);
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a, "SafeMath: subtraction overflow");
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) return 0;
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
require(b > 0, "SafeMath: division by zero");
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b > 0, "SafeMath: modulo by zero");
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
return a - b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryDiv}.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
return a % b;
}
}
// File: @openzeppelin\contracts\token\ERC20\IERC20.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// File: node_modules\@openzeppelin\contracts\utils\Address.sol
pragma solidity >=0.6.2 <0.8.0;
/**
* @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 on 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");
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: value }(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.staticcall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.delegatecall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
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);
}
}
}
}
// File: @openzeppelin\contracts\token\ERC20\SafeERC20.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @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 IERC20;` 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));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
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. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "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");
}
}
}
// File: @openzeppelin\contracts\utils\Context.sol
pragma solidity >=0.6.0 <0.8.0;
/*
* @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;
}
}
// File: contracts\interfaces\IRewarder.sol
pragma solidity 0.6.12;
interface IRewarder {
using SafeERC20 for IERC20;
function onReward(uint256 pid, address user, address recipient, uint256 sushiAmount, uint256 newLpAmount) external;
function pendingTokens(uint256 pid, address user, uint256 sushiAmount) external view returns (IERC20[] memory, uint256[] memory);
}
// File: contracts\ConvexMasterChef.sol
pragma solidity 0.6.12;
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 {
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;
}
}
contract ConvexMasterChef is Ownable {
using SafeMath for uint256;
using SafeERC20 for IERC20;
// Info of each user.
struct UserInfo {
uint256 amount; // How many LP tokens the user has provided.
uint256 rewardDebt; // Reward debt. See explanation below.
//
// We do some fancy math here. Basically, any point in time, the amount of CVXs
// entitled to a user but is pending to be distributed is:
//
// pending reward = (user.amount * pool.accCvxPerShare) - user.rewardDebt
//
// Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens:
// 1. The pool's `accCvxPerShare` (and `lastRewardBlock`) gets updated.
// 2. User receives the pending reward sent to his/her address.
// 3. User's `amount` gets updated.
// 4. User's `rewardDebt` gets updated.
}
// Info of each pool.
struct PoolInfo {
IERC20 lpToken; // Address of LP token contract.
uint256 allocPoint; // How many allocation points assigned to this pool. CVX to distribute per block.
uint256 lastRewardBlock; // Last block number that CVXs distribution occurs.
uint256 accCvxPerShare; // Accumulated CVXs per share, times 1e12. See below.
IRewarder rewarder;
}
//cvx
IERC20 public cvx;
// Block number when bonus CVX period ends.
uint256 public bonusEndBlock;
// CVX tokens created per block.
uint256 public rewardPerBlock;
// Bonus muliplier for early cvx makers.
uint256 public constant BONUS_MULTIPLIER = 2;
// Info of each pool.
PoolInfo[] public poolInfo;
// Info of each user that stakes LP tokens.
mapping(uint256 => mapping(address => UserInfo)) public userInfo;
// Total allocation points. Must be the sum of all allocation points in all pools.
uint256 public totalAllocPoint = 0;
// The block number when CVX mining starts.
uint256 public startBlock;
// Events
event Deposit(address indexed user, uint256 indexed pid, uint256 amount);
event Withdraw(address indexed user, uint256 indexed pid, uint256 amount);
event RewardPaid(address indexed user, uint256 indexed pid, uint256 amount);
event EmergencyWithdraw(
address indexed user,
uint256 indexed pid,
uint256 amount
);
constructor(
IERC20 _cvx,
uint256 _rewardPerBlock,
uint256 _startBlock,
uint256 _bonusEndBlock
) public {
cvx = _cvx;
rewardPerBlock = _rewardPerBlock;
bonusEndBlock = _bonusEndBlock;
startBlock = _startBlock;
}
function poolLength() external view returns (uint256) {
return poolInfo.length;
}
// Add a new lp to the pool. Can only be called by the owner.
// XXX DO NOT add the same LP token more than once. Rewards will be messed up if you do.
function add(
uint256 _allocPoint,
IERC20 _lpToken,
IRewarder _rewarder,
bool _withUpdate
) public onlyOwner {
if (_withUpdate) {
massUpdatePools();
}
uint256 lastRewardBlock = block.number > startBlock
? block.number
: startBlock;
totalAllocPoint = totalAllocPoint.add(_allocPoint);
poolInfo.push(
PoolInfo({
lpToken: _lpToken,
allocPoint: _allocPoint,
lastRewardBlock: lastRewardBlock,
accCvxPerShare: 0,
rewarder: _rewarder
})
);
}
// Update the given pool's CVX allocation point. Can only be called by the owner.
function set(
uint256 _pid,
uint256 _allocPoint,
IRewarder _rewarder,
bool _withUpdate,
bool _updateRewarder
) public onlyOwner {
if (_withUpdate) {
massUpdatePools();
}
totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(
_allocPoint
);
poolInfo[_pid].allocPoint = _allocPoint;
if(_updateRewarder){
poolInfo[_pid].rewarder = _rewarder;
}
}
// Return reward multiplier over the given _from to _to block.
function getMultiplier(uint256 _from, uint256 _to)
public
view
returns (uint256)
{
if (_to <= bonusEndBlock) {
return _to.sub(_from).mul(BONUS_MULTIPLIER);
} else if (_from >= bonusEndBlock) {
return _to.sub(_from);
} else {
return
bonusEndBlock.sub(_from).mul(BONUS_MULTIPLIER).add(
_to.sub(bonusEndBlock)
);
}
}
// View function to see pending CVXs on frontend.
function pendingCvx(uint256 _pid, address _user)
external
view
returns (uint256)
{
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][_user];
uint256 accCvxPerShare = pool.accCvxPerShare;
uint256 lpSupply = pool.lpToken.balanceOf(address(this));
if (block.number > pool.lastRewardBlock && lpSupply != 0) {
uint256 multiplier = getMultiplier(
pool.lastRewardBlock,
block.number
);
uint256 cvxReward = multiplier
.mul(rewardPerBlock)
.mul(pool.allocPoint)
.div(totalAllocPoint);
accCvxPerShare = accCvxPerShare.add(
cvxReward.mul(1e12).div(lpSupply)
);
}
return user.amount.mul(accCvxPerShare).div(1e12).sub(user.rewardDebt);
}
// Update reward vairables for all pools. Be careful of gas spending!
function massUpdatePools() public {
uint256 length = poolInfo.length;
for (uint256 pid = 0; pid < length; ++pid) {
updatePool(pid);
}
}
// Update reward variables of the given pool to be up-to-date.
function updatePool(uint256 _pid) public {
PoolInfo storage pool = poolInfo[_pid];
if (block.number <= pool.lastRewardBlock) {
return;
}
uint256 lpSupply = pool.lpToken.balanceOf(address(this));
if (lpSupply == 0) {
pool.lastRewardBlock = block.number;
return;
}
uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number);
uint256 cvxReward = multiplier
.mul(rewardPerBlock)
.mul(pool.allocPoint)
.div(totalAllocPoint);
//cvx.mint(address(this), cvxReward);
pool.accCvxPerShare = pool.accCvxPerShare.add(
cvxReward.mul(1e12).div(lpSupply)
);
pool.lastRewardBlock = block.number;
}
// Deposit LP tokens to MasterChef for CVX allocation.
function deposit(uint256 _pid, uint256 _amount) public {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][msg.sender];
updatePool(_pid);
if (user.amount > 0) {
uint256 pending = user
.amount
.mul(pool.accCvxPerShare)
.div(1e12)
.sub(user.rewardDebt);
safeRewardTransfer(msg.sender, pending);
}
pool.lpToken.safeTransferFrom(
address(msg.sender),
address(this),
_amount
);
user.amount = user.amount.add(_amount);
user.rewardDebt = user.amount.mul(pool.accCvxPerShare).div(1e12);
//extra rewards
IRewarder _rewarder = pool.rewarder;
if (address(_rewarder) != address(0)) {
_rewarder.onReward(_pid, msg.sender, msg.sender, 0, user.amount);
}
emit Deposit(msg.sender, _pid, _amount);
}
// Withdraw LP tokens from MasterChef.
function withdraw(uint256 _pid, uint256 _amount) public {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][msg.sender];
require(user.amount >= _amount, "withdraw: not good");
updatePool(_pid);
uint256 pending = user.amount.mul(pool.accCvxPerShare).div(1e12).sub(
user.rewardDebt
);
safeRewardTransfer(msg.sender, pending);
user.amount = user.amount.sub(_amount);
user.rewardDebt = user.amount.mul(pool.accCvxPerShare).div(1e12);
pool.lpToken.safeTransfer(address(msg.sender), _amount);
//extra rewards
IRewarder _rewarder = pool.rewarder;
if (address(_rewarder) != address(0)) {
_rewarder.onReward(_pid, msg.sender, msg.sender, pending, user.amount);
}
emit RewardPaid(msg.sender, _pid, pending);
emit Withdraw(msg.sender, _pid, _amount);
}
function claim(uint256 _pid, address _account) external{
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][_account];
updatePool(_pid);
uint256 pending = user.amount.mul(pool.accCvxPerShare).div(1e12).sub(
user.rewardDebt
);
safeRewardTransfer(_account, pending);
user.rewardDebt = user.amount.mul(pool.accCvxPerShare).div(1e12);
//extra rewards
IRewarder _rewarder = pool.rewarder;
if (address(_rewarder) != address(0)) {
_rewarder.onReward(_pid, _account, _account, pending, user.amount);
}
emit RewardPaid(_account, _pid, pending);
}
// Withdraw without caring about rewards. EMERGENCY ONLY.
function emergencyWithdraw(uint256 _pid) public {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][msg.sender];
pool.lpToken.safeTransfer(address(msg.sender), user.amount);
emit EmergencyWithdraw(msg.sender, _pid, user.amount);
user.amount = 0;
user.rewardDebt = 0;
//extra rewards
IRewarder _rewarder = pool.rewarder;
if (address(_rewarder) != address(0)) {
_rewarder.onReward(_pid, msg.sender, msg.sender, 0, 0);
}
}
// Safe cvx transfer function, just in case if rounding error causes pool to not have enough CVXs.
function safeRewardTransfer(address _to, uint256 _amount) internal {
uint256 cvxBal = cvx.balanceOf(address(this));
if (_amount > cvxBal) {
cvx.safeTransfer(_to, cvxBal);
} else {
cvx.safeTransfer(_to, _amount);
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC20","name":"_cvx","type":"address"},{"internalType":"uint256","name":"_rewardPerBlock","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"},{"internalType":"uint256","name":"_bonusEndBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"BONUS_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"contract IRewarder","name":"_rewarder","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bonusEndBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_account","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cvx","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingCvx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accCvxPerShare","type":"uint256"},{"internalType":"contract IRewarder","name":"rewarder","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IRewarder","name":"_rewarder","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"},{"internalType":"bool","name":"_updateRewarder","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","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":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052600060065534801561001557600080fd5b50604051611a2f380380611a2f8339818101604052608081101561003857600080fd5b508051602082015160408301516060909301519192909160006100596100d8565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b0319166001600160a01b0395909516949094179093556003919091556002919091556007556100dc565b3390565b611944806100eb6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80637ca7d8bf116100b8578063923c1d611161007c578063923c1d611461030e57806393f1a40b14610316578063c71b4b431461035b578063ddd5e1b214610399578063e2bbb158146103c5578063f2fde38b146103e857610142565b80637ca7d8bf1461028b5780638aa28550146102b75780638ae39cac146102bf5780638da5cb5b146102c75780638dbb1e3a146102eb57610142565b8063441a3e701161010a578063441a3e701461021657806348cd4cb11461023957806351eb05a6146102415780635312ea8e1461025e578063630b5ba11461027b578063715018a61461028357610142565b8063081e3eda146101475780631526fe271461016157806317caf6f1146101c25780631aed6553146101ca5780633deb2c10146101d2575b600080fd5b61014f61040e565b60408051918252519081900360200190f35b61017e6004803603602081101561017757600080fd5b5035610414565b60405180866001600160a01b03168152602001858152602001848152602001838152602001826001600160a01b031681526020019550505050505060405180910390f35b61014f61045f565b61014f610465565b610214600480360360a08110156101e857600080fd5b508035906020810135906001600160a01b0360408201351690606081013515159060800135151561046b565b005b6102146004803603604081101561022c57600080fd5b5080359060200135610588565b61014f6107a7565b6102146004803603602081101561025757600080fd5b50356107ad565b6102146004803603602081101561027457600080fd5b50356108dd565b610214610a04565b610214610a27565b61014f600480360360408110156102a157600080fd5b50803590602001356001600160a01b0316610ac9565b61014f610c28565b61014f610c2d565b6102cf610c33565b604080516001600160a01b039092168252519081900360200190f35b61014f6004803603604081101561030157600080fd5b5080359060200135610c42565b6102cf610ca8565b6103426004803603604081101561032c57600080fd5b50803590602001356001600160a01b0316610cb7565b6040805192835260208301919091528051918290030190f35b6102146004803603608081101561037157600080fd5b508035906001600160a01b036020820135811691604081013590911690606001351515610cdb565b610214600480360360408110156103af57600080fd5b50803590602001356001600160a01b0316610e95565b610214600480360360408110156103db57600080fd5b5080359060200135611017565b610214600480360360208110156103fe57600080fd5b50356001600160a01b03166111ae565b60045490565b6004818154811061042157fe5b6000918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b0393841695509193909290911685565b60065481565b60025481565b6104736112a6565b6000546001600160a01b039081169116146104c3576040805162461bcd60e51b815260206004820181905260248201526000805160206118c5833981519152604482015290519081900360640190fd5b81156104d1576104d1610a04565b61050e84610508600488815481106104e557fe5b9060005260206000209060050201600101546006546112aa90919063ffffffff16565b90611307565b600681905550836004868154811061052257fe5b906000526020600020906005020160010181905550801561058157826004868154811061054b57fe5b906000526020600020906005020160040160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b5050505050565b60006004838154811061059757fe5b600091825260208083208684526005808352604080862033875290935291909320805492909102909201925083111561060c576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b610615846107ad565b600061064f826001015461064964e8d4a510006106438760030154876000015461136890919063ffffffff16565b906113c1565b906112aa565b905061065b3382611428565b815461066790856112aa565b80835560038401546106849164e8d4a51000916106439190611368565b6001830155825461069f906001600160a01b031633866114e1565b60048301546001600160a01b03168015610731578254604080516344af0fa760e01b81526004810189905233602482018190526044820152606481018590526084810192909252516001600160a01b038316916344af0fa79160a480830192600092919082900301818387803b15801561071857600080fd5b505af115801561072c573d6000803e3d6000fd5b505050505b604080518381529051879133917fd6f2c8500df5b44f11e9e48b91ff9f1b9d81bc496d55570c2b1b75bf65243f519181900360200190a3604080518681529051879133917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a3505050505050565b60075481565b6000600482815481106107bc57fe5b90600052602060002090600502019050806002015443116107dd57506108da565b8054604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561082757600080fd5b505afa15801561083b573d6000803e3d6000fd5b505050506040513d602081101561085157600080fd5b50519050806108675750436002909101556108da565b6000610877836002015443610c42565b905060006108a4600654610643866001015461089e6003548761136890919063ffffffff16565b90611368565b90506108c76108bc846106438464e8d4a51000611368565b600386015490611307565b6003850155505043600290920191909155505b50565b6000600482815481106108ec57fe5b6000918252602080832085845260058083526040808620338088529452909420805494909302018054909450919261092e926001600160a01b031691906114e1565b80546040805191825251849133917fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959181900360200190a36000808255600182015560048201546001600160a01b031680156109fe57604080516344af0fa760e01b815260048101869052336024820181905260448201526000606482018190526084820181905291516001600160a01b038416926344af0fa79260a4808201939182900301818387803b1580156109e557600080fd5b505af11580156109f9573d6000803e3d6000fd5b505050505b50505050565b60045460005b81811015610a2357610a1b816107ad565b600101610a0a565b5050565b610a2f6112a6565b6000546001600160a01b03908116911614610a7f576040805162461bcd60e51b815260206004820181905260248201526000805160206118c5833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60008060048481548110610ad957fe5b60009182526020808320878452600580835260408086206001600160a01b03808b16885290855281872060039390960290930191820154825482516370a0823160e01b815230600482015292519398509596909590949316926370a0823192602480840193829003018186803b158015610b5257600080fd5b505afa158015610b66573d6000803e3d6000fd5b505050506040513d6020811015610b7c57600080fd5b5051600285015490915043118015610b9357508015155b15610bf3576000610ba8856002015443610c42565b90506000610bcf600654610643886001015461089e6003548761136890919063ffffffff16565b9050610bee610be7846106438464e8d4a51000611368565b8590611307565b935050505b610c1b836001015461064964e8d4a5100061064386886000015461136890919063ffffffff16565b9450505050505b92915050565b600281565b60035481565b6000546001600160a01b031690565b60006002548211610c6357610c5c600261089e84866112aa565b9050610c22565b6002548310610c7657610c5c82846112aa565b610c5c610c8e600254846112aa90919063ffffffff16565b610508600261089e876002546112aa90919063ffffffff16565b6001546001600160a01b031681565b60056020908152600092835260408084209091529082529020805460019091015482565b610ce36112a6565b6000546001600160a01b03908116911614610d33576040805162461bcd60e51b815260206004820181905260248201526000805160206118c5833981519152604482015290519081900360640190fd5b8015610d4157610d41610a04565b60006007544311610d5457600754610d56565b435b600654909150610d669086611307565b6006556040805160a0810182526001600160a01b0395861681526020810196875290810191825260006060820181815294861660808301908152600480546001810182559252915160059091027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b810180549288166001600160a01b031993841617905596517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c88015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d87015592517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e86015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19f9094018054949093169390911692909217905550565b600060048381548110610ea457fe5b60009182526020808320868452600580835260408086206001600160a01b03891687529093529190932091029091019150610ede846107ad565b6000610f0c826001015461064964e8d4a510006106438760030154876000015461136890919063ffffffff16565b9050610f188482611428565b60038301548254610f339164e8d4a510009161064391611368565b600183015560048301546001600160a01b03168015610fcf578254604080516344af0fa760e01b8152600481018990526001600160a01b038881166024830181905260448301526064820186905260848201939093529051918316916344af0fa79160a48082019260009290919082900301818387803b158015610fb657600080fd5b505af1158015610fca573d6000803e3d6000fd5b505050505b60408051838152905187916001600160a01b038816917fd6f2c8500df5b44f11e9e48b91ff9f1b9d81bc496d55570c2b1b75bf65243f519181900360200190a3505050505050565b60006004838154811061102657fe5b60009182526020808320868452600580835260408086203387529093529190932091029091019150611057846107ad565b80541561109a57600061108c826001015461064964e8d4a510006106438760030154876000015461136890919063ffffffff16565b90506110983382611428565b505b81546110b1906001600160a01b0316333086611533565b80546110bd9084611307565b80825560038301546110da9164e8d4a51000916106439190611368565b600182015560048201546001600160a01b03168015611170578154604080516344af0fa760e01b81526004810188905233602482018190526044820152600060648201819052608482019390935290516001600160a01b038416926344af0fa79260a4808201939182900301818387803b15801561115757600080fd5b505af115801561116b573d6000803e3d6000fd5b505050505b604080518581529051869133917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a35050505050565b6111b66112a6565b6000546001600160a01b03908116911614611206576040805162461bcd60e51b815260206004820181905260248201526000805160206118c5833981519152604482015290519081900360640190fd5b6001600160a01b03811661124b5760405162461bcd60e51b81526004018080602001828103825260268152602001806118586026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082821115611301576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015611361576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008261137757506000610c22565b8282028284828161138457fe5b04146113615760405162461bcd60e51b81526004018080602001828103825260218152602001806118a46021913960400191505060405180910390fd5b6000808211611417576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161142057fe5b049392505050565b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561147357600080fd5b505afa158015611487573d6000803e3d6000fd5b505050506040513d602081101561149d57600080fd5b50519050808211156114c5576001546114c0906001600160a01b031684836114e1565b6114dc565b6001546114dc906001600160a01b031684846114e1565b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526114dc908490611589565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526109fe9085905b60606115de826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661163a9092919063ffffffff16565b8051909150156114dc578080602001905160208110156115fd57600080fd5b50516114dc5760405162461bcd60e51b815260040180806020018281038252602a8152602001806118e5602a913960400191505060405180910390fd5b60606116498484600085611651565b949350505050565b6060824710156116925760405162461bcd60e51b815260040180806020018281038252602681526020018061187e6026913960400191505060405180910390fd5b61169b856117ad565b6116ec576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061172b5780518252601f19909201916020918201910161170c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461178d576040519150601f19603f3d011682016040523d82523d6000602084013e611792565b606091505b50915091506117a28282866117b3565b979650505050505050565b3b151590565b606083156117c2575081611361565b8251156117d25782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561181c578181015183820152602001611804565b50505050905090810190601f1680156118495780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220330c0ba850fe0e8d780ae414ec1695710d65d8841af1c4a0c05fe7a8d1f22fe464736f6c634300060c00330000000000000000000000004e3fbd56cd56c3e72c1403e103b45db9da5b9d2b000000000000000000000000000000000000000000000000279b05e6fe718d710000000000000000000000000000000000000000000000000000000000bdff3d0000000000000000000000000000000000000000000000000000000000bf5d3d
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101425760003560e01c80637ca7d8bf116100b8578063923c1d611161007c578063923c1d611461030e57806393f1a40b14610316578063c71b4b431461035b578063ddd5e1b214610399578063e2bbb158146103c5578063f2fde38b146103e857610142565b80637ca7d8bf1461028b5780638aa28550146102b75780638ae39cac146102bf5780638da5cb5b146102c75780638dbb1e3a146102eb57610142565b8063441a3e701161010a578063441a3e701461021657806348cd4cb11461023957806351eb05a6146102415780635312ea8e1461025e578063630b5ba11461027b578063715018a61461028357610142565b8063081e3eda146101475780631526fe271461016157806317caf6f1146101c25780631aed6553146101ca5780633deb2c10146101d2575b600080fd5b61014f61040e565b60408051918252519081900360200190f35b61017e6004803603602081101561017757600080fd5b5035610414565b60405180866001600160a01b03168152602001858152602001848152602001838152602001826001600160a01b031681526020019550505050505060405180910390f35b61014f61045f565b61014f610465565b610214600480360360a08110156101e857600080fd5b508035906020810135906001600160a01b0360408201351690606081013515159060800135151561046b565b005b6102146004803603604081101561022c57600080fd5b5080359060200135610588565b61014f6107a7565b6102146004803603602081101561025757600080fd5b50356107ad565b6102146004803603602081101561027457600080fd5b50356108dd565b610214610a04565b610214610a27565b61014f600480360360408110156102a157600080fd5b50803590602001356001600160a01b0316610ac9565b61014f610c28565b61014f610c2d565b6102cf610c33565b604080516001600160a01b039092168252519081900360200190f35b61014f6004803603604081101561030157600080fd5b5080359060200135610c42565b6102cf610ca8565b6103426004803603604081101561032c57600080fd5b50803590602001356001600160a01b0316610cb7565b6040805192835260208301919091528051918290030190f35b6102146004803603608081101561037157600080fd5b508035906001600160a01b036020820135811691604081013590911690606001351515610cdb565b610214600480360360408110156103af57600080fd5b50803590602001356001600160a01b0316610e95565b610214600480360360408110156103db57600080fd5b5080359060200135611017565b610214600480360360208110156103fe57600080fd5b50356001600160a01b03166111ae565b60045490565b6004818154811061042157fe5b6000918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b0393841695509193909290911685565b60065481565b60025481565b6104736112a6565b6000546001600160a01b039081169116146104c3576040805162461bcd60e51b815260206004820181905260248201526000805160206118c5833981519152604482015290519081900360640190fd5b81156104d1576104d1610a04565b61050e84610508600488815481106104e557fe5b9060005260206000209060050201600101546006546112aa90919063ffffffff16565b90611307565b600681905550836004868154811061052257fe5b906000526020600020906005020160010181905550801561058157826004868154811061054b57fe5b906000526020600020906005020160040160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b5050505050565b60006004838154811061059757fe5b600091825260208083208684526005808352604080862033875290935291909320805492909102909201925083111561060c576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b610615846107ad565b600061064f826001015461064964e8d4a510006106438760030154876000015461136890919063ffffffff16565b906113c1565b906112aa565b905061065b3382611428565b815461066790856112aa565b80835560038401546106849164e8d4a51000916106439190611368565b6001830155825461069f906001600160a01b031633866114e1565b60048301546001600160a01b03168015610731578254604080516344af0fa760e01b81526004810189905233602482018190526044820152606481018590526084810192909252516001600160a01b038316916344af0fa79160a480830192600092919082900301818387803b15801561071857600080fd5b505af115801561072c573d6000803e3d6000fd5b505050505b604080518381529051879133917fd6f2c8500df5b44f11e9e48b91ff9f1b9d81bc496d55570c2b1b75bf65243f519181900360200190a3604080518681529051879133917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a3505050505050565b60075481565b6000600482815481106107bc57fe5b90600052602060002090600502019050806002015443116107dd57506108da565b8054604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561082757600080fd5b505afa15801561083b573d6000803e3d6000fd5b505050506040513d602081101561085157600080fd5b50519050806108675750436002909101556108da565b6000610877836002015443610c42565b905060006108a4600654610643866001015461089e6003548761136890919063ffffffff16565b90611368565b90506108c76108bc846106438464e8d4a51000611368565b600386015490611307565b6003850155505043600290920191909155505b50565b6000600482815481106108ec57fe5b6000918252602080832085845260058083526040808620338088529452909420805494909302018054909450919261092e926001600160a01b031691906114e1565b80546040805191825251849133917fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959181900360200190a36000808255600182015560048201546001600160a01b031680156109fe57604080516344af0fa760e01b815260048101869052336024820181905260448201526000606482018190526084820181905291516001600160a01b038416926344af0fa79260a4808201939182900301818387803b1580156109e557600080fd5b505af11580156109f9573d6000803e3d6000fd5b505050505b50505050565b60045460005b81811015610a2357610a1b816107ad565b600101610a0a565b5050565b610a2f6112a6565b6000546001600160a01b03908116911614610a7f576040805162461bcd60e51b815260206004820181905260248201526000805160206118c5833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60008060048481548110610ad957fe5b60009182526020808320878452600580835260408086206001600160a01b03808b16885290855281872060039390960290930191820154825482516370a0823160e01b815230600482015292519398509596909590949316926370a0823192602480840193829003018186803b158015610b5257600080fd5b505afa158015610b66573d6000803e3d6000fd5b505050506040513d6020811015610b7c57600080fd5b5051600285015490915043118015610b9357508015155b15610bf3576000610ba8856002015443610c42565b90506000610bcf600654610643886001015461089e6003548761136890919063ffffffff16565b9050610bee610be7846106438464e8d4a51000611368565b8590611307565b935050505b610c1b836001015461064964e8d4a5100061064386886000015461136890919063ffffffff16565b9450505050505b92915050565b600281565b60035481565b6000546001600160a01b031690565b60006002548211610c6357610c5c600261089e84866112aa565b9050610c22565b6002548310610c7657610c5c82846112aa565b610c5c610c8e600254846112aa90919063ffffffff16565b610508600261089e876002546112aa90919063ffffffff16565b6001546001600160a01b031681565b60056020908152600092835260408084209091529082529020805460019091015482565b610ce36112a6565b6000546001600160a01b03908116911614610d33576040805162461bcd60e51b815260206004820181905260248201526000805160206118c5833981519152604482015290519081900360640190fd5b8015610d4157610d41610a04565b60006007544311610d5457600754610d56565b435b600654909150610d669086611307565b6006556040805160a0810182526001600160a01b0395861681526020810196875290810191825260006060820181815294861660808301908152600480546001810182559252915160059091027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b810180549288166001600160a01b031993841617905596517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c88015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d87015592517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e86015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19f9094018054949093169390911692909217905550565b600060048381548110610ea457fe5b60009182526020808320868452600580835260408086206001600160a01b03891687529093529190932091029091019150610ede846107ad565b6000610f0c826001015461064964e8d4a510006106438760030154876000015461136890919063ffffffff16565b9050610f188482611428565b60038301548254610f339164e8d4a510009161064391611368565b600183015560048301546001600160a01b03168015610fcf578254604080516344af0fa760e01b8152600481018990526001600160a01b038881166024830181905260448301526064820186905260848201939093529051918316916344af0fa79160a48082019260009290919082900301818387803b158015610fb657600080fd5b505af1158015610fca573d6000803e3d6000fd5b505050505b60408051838152905187916001600160a01b038816917fd6f2c8500df5b44f11e9e48b91ff9f1b9d81bc496d55570c2b1b75bf65243f519181900360200190a3505050505050565b60006004838154811061102657fe5b60009182526020808320868452600580835260408086203387529093529190932091029091019150611057846107ad565b80541561109a57600061108c826001015461064964e8d4a510006106438760030154876000015461136890919063ffffffff16565b90506110983382611428565b505b81546110b1906001600160a01b0316333086611533565b80546110bd9084611307565b80825560038301546110da9164e8d4a51000916106439190611368565b600182015560048201546001600160a01b03168015611170578154604080516344af0fa760e01b81526004810188905233602482018190526044820152600060648201819052608482019390935290516001600160a01b038416926344af0fa79260a4808201939182900301818387803b15801561115757600080fd5b505af115801561116b573d6000803e3d6000fd5b505050505b604080518581529051869133917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a35050505050565b6111b66112a6565b6000546001600160a01b03908116911614611206576040805162461bcd60e51b815260206004820181905260248201526000805160206118c5833981519152604482015290519081900360640190fd5b6001600160a01b03811661124b5760405162461bcd60e51b81526004018080602001828103825260268152602001806118586026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082821115611301576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015611361576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008261137757506000610c22565b8282028284828161138457fe5b04146113615760405162461bcd60e51b81526004018080602001828103825260218152602001806118a46021913960400191505060405180910390fd5b6000808211611417576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161142057fe5b049392505050565b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561147357600080fd5b505afa158015611487573d6000803e3d6000fd5b505050506040513d602081101561149d57600080fd5b50519050808211156114c5576001546114c0906001600160a01b031684836114e1565b6114dc565b6001546114dc906001600160a01b031684846114e1565b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526114dc908490611589565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526109fe9085905b60606115de826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661163a9092919063ffffffff16565b8051909150156114dc578080602001905160208110156115fd57600080fd5b50516114dc5760405162461bcd60e51b815260040180806020018281038252602a8152602001806118e5602a913960400191505060405180910390fd5b60606116498484600085611651565b949350505050565b6060824710156116925760405162461bcd60e51b815260040180806020018281038252602681526020018061187e6026913960400191505060405180910390fd5b61169b856117ad565b6116ec576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061172b5780518252601f19909201916020918201910161170c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461178d576040519150601f19603f3d011682016040523d82523d6000602084013e611792565b606091505b50915091506117a28282866117b3565b979650505050505050565b3b151590565b606083156117c2575081611361565b8251156117d25782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561181c578181015183820152602001611804565b50505050905090810190601f1680156118495780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220330c0ba850fe0e8d780ae414ec1695710d65d8841af1c4a0c05fe7a8d1f22fe464736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004e3fbd56cd56c3e72c1403e103b45db9da5b9d2b000000000000000000000000000000000000000000000000279b05e6fe718d710000000000000000000000000000000000000000000000000000000000bdff3d0000000000000000000000000000000000000000000000000000000000bf5d3d
-----Decoded View---------------
Arg [0] : _cvx (address): 0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B
Arg [1] : _rewardPerBlock (uint256): 2853881278538812785
Arg [2] : _startBlock (uint256): 12451645
Arg [3] : _bonusEndBlock (uint256): 12541245
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000004e3fbd56cd56c3e72c1403e103b45db9da5b9d2b
Arg [1] : 000000000000000000000000000000000000000000000000279b05e6fe718d71
Arg [2] : 0000000000000000000000000000000000000000000000000000000000bdff3d
Arg [3] : 0000000000000000000000000000000000000000000000000000000000bf5d3d
Deployed Bytecode Sourcemap
25276:10770:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28008:95;;;:::i;:::-;;;;;;;;;;;;;;;;26960:26;;;;;;;;;;;;;;;;-1:-1:-1;26960:26:0;;:::i;:::-;;;;;-1:-1:-1;;;;;26960:26:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26960:26:0;;;;;;;;;;;;;;;;;;;27201:34;;;:::i;26725:28::-;;;:::i;29051:514::-;;;;;;;;;;;;;;;;-1:-1:-1;29051:514:0;;;;;;;;-1:-1:-1;;;;;29051:514:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;33351:949;;;;;;;;;;;;;;;;-1:-1:-1;33351:949:0;;;;;;;:::i;27291:25::-;;;:::i;31443:796::-;;;;;;;;;;;;;;;;-1:-1:-1;31443:796:0;;:::i;35089:558::-;;;;;;;;;;;;;;;;-1:-1:-1;35089:558:0;;:::i;31187:180::-;;;:::i;24685:148::-;;;:::i;30184:920::-;;;;;;;;;;;;;;;;-1:-1:-1;30184:920:0;;;;;;-1:-1:-1;;;;;30184:920:0;;:::i;26880:44::-;;;:::i;26798:29::-;;;:::i;24043:79::-;;;:::i;:::-;;;;-1:-1:-1;;;;;24043:79:0;;;;;;;;;;;;;;29641:480;;;;;;;;;;;;;;;;-1:-1:-1;29641:480:0;;;;;;;:::i;26652:17::-;;;:::i;27042:64::-;;;;;;;;;;;;;;;;-1:-1:-1;27042:64:0;;;;;;-1:-1:-1;;;;;27042:64:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28272:684;;;;;;;;;;;;;;;;-1:-1:-1;28272:684:0;;;-1:-1:-1;;;;;28272:684:0;;;;;;;;;;;;;;;;;;;;;:::i;34308:710::-;;;;;;;;;;;;;;;;-1:-1:-1;34308:710:0;;;;;;-1:-1:-1;;;;;34308:710:0;;:::i;32307:992::-;;;;;;;;;;;;;;;;-1:-1:-1;32307:992:0;;;;;;;:::i;24988:281::-;;;;;;;;;;;;;;;;-1:-1:-1;24988:281:0;-1:-1:-1;;;;;24988:281:0;;:::i;28008:95::-;28080:8;:15;28008:95;:::o;26960:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26960:26:0;;;;-1:-1:-1;26960:26:0;;;;;;;;:::o;27201:34::-;;;;:::o;26725:28::-;;;;:::o;29051:514::-;24265:12;:10;:12::i;:::-;24255:6;;-1:-1:-1;;;;;24255:6:0;;;:22;;;24247:67;;;;;-1:-1:-1;;;24247:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24247:67:0;;;;;;;;;;;;;;;29244:11:::1;29240:61;;;29272:17;:15;:17::i;:::-;29329:87;29394:11;29329:46;29349:8;29358:4;29349:14;;;;;;;;;;;;;;;;;;:25;;;29329:15;;:19;;:46;;;;:::i;:::-;:50:::0;::::1;:87::i;:::-;29311:15;:105;;;;29455:11;29427:8;29436:4;29427:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;29480:15;29477:81;;;29537:9;29511:8;29520:4;29511:14;;;;;;;;;;;;;;;;;;:23;;;:35;;;;;-1:-1:-1::0;;;;;29511:35:0::1;;;;;-1:-1:-1::0;;;;;29511:35:0::1;;;;;;29477:81;29051:514:::0;;;;;:::o;33351:949::-;33418:21;33442:8;33451:4;33442:14;;;;;;;;;;;;;;;;33491;;;33442;33491;;;;;;;33506:10;33491:26;;;;;;;;;33536:11;;33442:14;;;;;;;;-1:-1:-1;;;33536:22:0;33528:53;;;;;-1:-1:-1;;;33528:53:0;;;;;;;;;;;;-1:-1:-1;;;33528:53:0;;;;;;;;;;;;;;;33592:16;33603:4;33592:10;:16::i;:::-;33619:15;33637:91;33702:4;:15;;;33637:46;33678:4;33637:36;33653:4;:19;;;33637:4;:11;;;:15;;:36;;;;:::i;:::-;:40;;:46::i;:::-;:50;;:91::i;:::-;33619:109;;33739:39;33758:10;33770:7;33739:18;:39::i;:::-;33803:11;;:24;;33819:7;33803:15;:24::i;:::-;33789:38;;;33872:19;;;;33856:46;;33897:4;;33856:36;;33789:38;33856:15;:36::i;:46::-;33838:15;;;:64;33913:12;;:55;;-1:-1:-1;;;;;33913:12:0;33947:10;33960:7;33913:25;:55::i;:::-;34028:13;;;;-1:-1:-1;;;;;34028:13:0;34056:32;;34052:135;;34163:11;;34105:70;;;-1:-1:-1;;;34105:70:0;;;;;;;;34130:10;34105:70;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34105:18:0;;;;;:70;;;;;34163:11;;34105:70;;;;;;;34163:11;34105:18;:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34052:135;34204:37;;;;;;;;34227:4;;34215:10;;34204:37;;;;;;;;;34257:35;;;;;;;;34278:4;;34266:10;;34257:35;;;;;;;;;33351:949;;;;;;:::o;27291:25::-;;;;:::o;31443:796::-;31495:21;31519:8;31528:4;31519:14;;;;;;;;;;;;;;;;;;31495:38;;31564:4;:20;;;31548:12;:36;31544:75;;31601:7;;;31544:75;31648:12;;:37;;;-1:-1:-1;;;31648:37:0;;31679:4;31648:37;;;;;;31629:16;;-1:-1:-1;;;;;31648:12:0;;:22;;:37;;;;;;;;;;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31648:37:0;;-1:-1:-1;31700:13:0;31696:102;;-1:-1:-1;31753:12:0;31730:20;;;;:35;31780:7;;31696:102;31808:18;31829:49;31843:4;:20;;;31865:12;31829:13;:49::i;:::-;31808:70;;31889:17;31909:114;32007:15;;31909:79;31972:4;:15;;;31909:44;31938:14;;31909:10;:28;;:44;;;;:::i;:::-;:62;;:79::i;:114::-;31889:134;-1:-1:-1;32103:82:0;32141:33;32165:8;32141:19;31889:134;32155:4;32141:13;:19::i;:33::-;32103:19;;;;;:23;:82::i;:::-;32081:19;;;:104;-1:-1:-1;;32219:12:0;32196:20;;;;:35;;;;-1:-1:-1;31443:796:0;;:::o;35089:558::-;35148:21;35172:8;35181:4;35172:14;;;;;;;;;;;;;;;;35221;;;35172;35221;;;;;;;35236:10;35221:26;;;;;;;;35305:11;;35172:14;;;;;35258:12;;35172:14;;-1:-1:-1;35221:26:0;;35258:59;;-1:-1:-1;;;;;35258:12:0;;35236:10;35258:25;:59::i;:::-;35369:11;;35333:48;;;;;;;35363:4;;35351:10;;35333:48;;;;;;;;;35406:1;35392:15;;;35418;;;:19;35497:13;;;;-1:-1:-1;;;;;35497:13:0;35525:32;;35521:119;;35574:54;;;-1:-1:-1;;;35574:54:0;;;;;;;;35599:10;35574:54;;;;;;;;;;35623:1;35574:54;;;;;;;;;;;;;;-1:-1:-1;;;;;35574:18:0;;;;;:54;;;;;;;;;;;35623:1;35574:18;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35521:119;35089:558;;;;:::o;31187:180::-;31249:8;:15;31232:14;31275:85;31303:6;31297:3;:12;31275:85;;;31333:15;31344:3;31333:10;:15::i;:::-;31311:5;;31275:85;;;;31187:180;:::o;24685:148::-;24265:12;:10;:12::i;:::-;24255:6;;-1:-1:-1;;;;;24255:6:0;;;:22;;;24247:67;;;;;-1:-1:-1;;;24247:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24247:67:0;;;;;;;;;;;;;;;24792:1:::1;24776:6:::0;;24755:40:::1;::::0;-1:-1:-1;;;;;24776:6:0;;::::1;::::0;24755:40:::1;::::0;24792:1;;24755:40:::1;24823:1;24806:19:::0;;-1:-1:-1;;;;;;24806:19:0::1;::::0;;24685:148::o;30184:920::-;30283:7;30308:21;30332:8;30341:4;30332:14;;;;;;;;;;;;;;;;30381;;;30332;30381;;;;;;;-1:-1:-1;;;;;30381:21:0;;;;;;;;;;;30438:19;30332:14;;;;;;;30438:19;;;;30487:12;;:37;;-1:-1:-1;;;30487:37:0;;30518:4;30487:37;;;;;;30332:14;;-1:-1:-1;30381:21:0;;30438:19;;30332:14;;30487:12;;;:22;;:37;;;;;;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30487:37:0;30554:20;;;;30487:37;;-1:-1:-1;30539:12:0;:35;:52;;;;-1:-1:-1;30578:13:0;;;30539:52;30535:482;;;30608:18;30629:98;30661:4;:20;;;30700:12;30629:13;:98::i;:::-;30608:119;;30742:17;30762:126;30872:15;;30762:87;30833:4;:15;;;30762:48;30795:14;;30762:10;:32;;:48;;;;:::i;:126::-;30742:146;-1:-1:-1;30920:85:0;30957:33;30981:8;30957:19;30742:146;30971:4;30957:13;:19::i;:33::-;30920:14;;:18;:85::i;:::-;30903:102;;30535:482;;;31034:62;31080:4;:15;;;31034:41;31070:4;31034:31;31050:14;31034:4;:11;;;:15;;:31;;;;:::i;:62::-;31027:69;;;;;;30184:920;;;;;:::o;26880:44::-;26923:1;26880:44;:::o;26798:29::-;;;;:::o;24043:79::-;24081:7;24108:6;-1:-1:-1;;;;;24108:6:0;24043:79;:::o;29641:480::-;29740:7;29776:13;;29769:3;:20;29765:349;;29813:36;26923:1;29813:14;:3;29821:5;29813:7;:14::i;:36::-;29806:43;;;;29765:349;29880:13;;29871:5;:22;29867:247;;29917:14;:3;29925:5;29917:7;:14::i;29867:247::-;29988:114;30061:22;30069:13;;30061:3;:7;;:22;;;;:::i;:::-;29988:46;26923:1;29988:24;30006:5;29988:13;;:17;;:24;;;;:::i;26652:17::-;;;-1:-1:-1;;;;;26652:17:0;;:::o;27042:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28272:684::-;24265:12;:10;:12::i;:::-;24255:6;;-1:-1:-1;;;;;24255:6:0;;;:22;;;24247:67;;;;;-1:-1:-1;;;24247:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24247:67:0;;;;;;;;;;;;;;;28437:11:::1;28433:61;;;28465:17;:15;:17::i;:::-;28504:23;28545:10;;28530:12;:25;:79;;28599:10;;28530:79;;;28571:12;28530:79;28638:15;::::0;28504:105;;-1:-1:-1;28638:32:0::1;::::0;28658:11;28638:19:::1;:32::i;:::-;28620:15;:50:::0;28709:228:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;28709:228:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;28709:228:0;;;;;;;;::::1;::::0;;;;;;28681:8:::1;:267:::0;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;-1:-1:-1::0;;;;;;28681:267:0;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;28272:684:0:o;34308:710::-;34374:21;34398:8;34407:4;34398:14;;;;;;;;;;;;;;;;34447;;;34398;34447;;;;;;;-1:-1:-1;;;;;34447:24:0;;;;;;;;;;;34398:14;;;;;;-1:-1:-1;34484:16:0;34456:4;34484:10;:16::i;:::-;34511:15;34529:91;34594:4;:15;;;34529:46;34570:4;34529:36;34545:4;:19;;;34529:4;:11;;;:15;;:36;;;;:::i;:91::-;34511:109;;34631:37;34650:8;34660:7;34631:18;:37::i;:::-;34713:19;;;;34697:11;;:46;;34738:4;;34697:36;;:15;:36::i;:46::-;34679:15;;;:64;34803:13;;;;-1:-1:-1;;;;;34803:13:0;34831:32;;34827:131;;34934:11;;34880:66;;;-1:-1:-1;;;34880:66:0;;;;;;;;-1:-1:-1;;;;;34880:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:18;;;;;;:66;;;;;34934:11;;34880:66;;;;;;;;34934:11;34880:18;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34827:131;34975:35;;;;;;;;34996:4;;-1:-1:-1;;;;;34975:35:0;;;;;;;;;;;;34308:710;;;;;;:::o;32307:992::-;32373:21;32397:8;32406:4;32397:14;;;;;;;;;;;;;;;;32446;;;32397;32446;;;;;;;32461:10;32446:26;;;;;;;;;32397:14;;;;;;-1:-1:-1;32483:16:0;32455:4;32483:10;:16::i;:::-;32514:11;;:15;32510:259;;32546:15;32564:139;32687:4;:15;;;32564:100;32659:4;32564:72;32616:4;:19;;;32564:4;:29;;;:51;;:72;;;;:::i;:139::-;32546:157;;32718:39;32737:10;32749:7;32718:18;:39::i;:::-;32510:259;;32779:12;;:124;;-1:-1:-1;;;;;32779:12:0;32831:10;32865:4;32885:7;32779:29;:124::i;:::-;32928:11;;:24;;32944:7;32928:15;:24::i;:::-;32914:38;;;32997:19;;;;32981:46;;33022:4;;32981:36;;32914:38;32981:15;:36::i;:46::-;32963:15;;;:64;33087:13;;;;-1:-1:-1;;;;;33087:13:0;33115:32;;33111:129;;33216:11;;33164:64;;;-1:-1:-1;;;33164:64:0;;;;;;;;33189:10;33164:64;;;;;;;;;;33213:1;33164:64;;;;;;;;;;;;;;;-1:-1:-1;;;;;33164:18:0;;;;;:64;;;;;;;;;;;33213:1;33164:18;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33111:129;33257:34;;;;;;;;33277:4;;33265:10;;33257:34;;;;;;;;;32307:992;;;;;:::o;24988:281::-;24265:12;:10;:12::i;:::-;24255:6;;-1:-1:-1;;;;;24255:6:0;;;:22;;;24247:67;;;;;-1:-1:-1;;;24247:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24247:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25091:22:0;::::1;25069:110;;;;-1:-1:-1::0;;;25069:110:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25216:6;::::0;;25195:38:::1;::::0;-1:-1:-1;;;;;25195:38:0;;::::1;::::0;25216:6;::::1;::::0;25195:38:::1;::::0;::::1;25244:6;:17:::0;;-1:-1:-1;;;;;;25244:17:0::1;-1:-1:-1::0;;;;;25244:17:0;;;::::1;::::0;;;::::1;::::0;;24988:281::o;22703:106::-;22791:10;22703:106;:::o;3288:158::-;3346:7;3379:1;3374;:6;;3366:49;;;;;-1:-1:-1;;;3366:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3433:5:0;;;3288:158::o;2826:179::-;2884:7;2916:5;;;2940:6;;;;2932:46;;;;;-1:-1:-1;;;2932:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2996:1;2826:179;-1:-1:-1;;;2826:179:0:o;3705:220::-;3763:7;3787:6;3783:20;;-1:-1:-1;3802:1:0;3795:8;;3783:20;3826:5;;;3830:1;3826;:5;:1;3850:5;;;;;:10;3842:56;;;;-1:-1:-1;;;3842:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4403:153;4461:7;4493:1;4489;:5;4481:44;;;;;-1:-1:-1;;;4481:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4547:1;4543;:5;;;;;;;4403:153;-1:-1:-1;;;4403:153:0:o;35759:282::-;35854:3;;:28;;;-1:-1:-1;;;35854:28:0;;35876:4;35854:28;;;;;;35837:14;;-1:-1:-1;;;;;35854:3:0;;:13;;:28;;;;;;;;;;;;;;:3;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35854:28:0;;-1:-1:-1;35897:16:0;;;35893:141;;;35930:3;;:29;;-1:-1:-1;;;;;35930:3:0;35947;35952:6;35930:16;:29::i;:::-;35893:141;;;35992:3;;:30;;-1:-1:-1;;;;;35992:3:0;36009;36014:7;35992:16;:30::i;:::-;35759:282;;;:::o;18998:177::-;19108:58;;;-1:-1:-1;;;;;19108:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19108:58:0;-1:-1:-1;;;19108:58:0;;;19081:86;;19101:5;;19081:19;:86::i;19183:205::-;19311:68;;;-1:-1:-1;;;;;19311:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19311:68:0;-1:-1:-1;;;19311:68:0;;;19284:96;;19304:5;;21303:761;21727:23;21753:69;21781:4;21753:69;;;;;;;;;;;;;;;;;21761:5;-1:-1:-1;;;;;21753:27:0;;;:69;;;;;:::i;:::-;21837:17;;21727:95;;-1:-1:-1;21837:21:0;21833:224;;21979:10;21968:30;;;;;;;;;;;;;;;-1:-1:-1;21968:30:0;21960:85;;;;-1:-1:-1;;;21960:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14001:195;14104:12;14136:52;14158:6;14166:4;14172:1;14175:12;14136:21;:52::i;:::-;14129:59;14001:195;-1:-1:-1;;;;14001:195:0:o;15053:530::-;15180:12;15238:5;15213:21;:30;;15205:81;;;;-1:-1:-1;;;15205:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15305:18;15316:6;15305:10;:18::i;:::-;15297:60;;;;;-1:-1:-1;;;15297:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15431:12;15445:23;15472:6;-1:-1:-1;;;;;15472:11:0;15492:5;15500:4;15472:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15472:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15430:75;;;;15523:52;15541:7;15550:10;15562:12;15523:17;:52::i;:::-;15516:59;15053:530;-1:-1:-1;;;;;;;15053:530:0:o;11083:422::-;11450:20;11489:8;;;11083:422::o;17593:742::-;17708:12;17737:7;17733:595;;;-1:-1:-1;17768:10:0;17761:17;;17733:595;17882:17;;:21;17878:439;;18145:10;18139:17;18206:15;18193:10;18189:2;18185:19;18178:44;18093:148;18288:12;18281:20;;-1:-1:-1;;;18281:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://330c0ba850fe0e8d780ae414ec1695710d65d8841af1c4a0c05fe7a8d1f22fe4
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.