Source Code
Latest 25 from a total of 126 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Emergency Withdr... | 13537513 | 1610 days ago | IN | 0 ETH | 0.01217371 | ||||
| Withdraw | 13195003 | 1663 days ago | IN | 0 ETH | 0.01539832 | ||||
| Transfer Ownersh... | 12707353 | 1739 days ago | IN | 0 ETH | 0.00028617 | ||||
| Deposit | 12699641 | 1740 days ago | IN | 0 ETH | 0.00244754 | ||||
| Withdraw | 12693713 | 1741 days ago | IN | 0 ETH | 0.00191756 | ||||
| Withdraw | 12692316 | 1741 days ago | IN | 0 ETH | 0.00155786 | ||||
| Withdraw | 12692265 | 1741 days ago | IN | 0 ETH | 0.00301285 | ||||
| Withdraw | 12692200 | 1741 days ago | IN | 0 ETH | 0.00138443 | ||||
| Withdraw | 12690928 | 1741 days ago | IN | 0 ETH | 0.00246484 | ||||
| Withdraw | 12690903 | 1741 days ago | IN | 0 ETH | 0.00239696 | ||||
| Withdraw | 12690746 | 1741 days ago | IN | 0 ETH | 0.00369759 | ||||
| Withdraw | 12690453 | 1742 days ago | IN | 0 ETH | 0.00143803 | ||||
| Withdraw | 12690351 | 1742 days ago | IN | 0 ETH | 0.00164323 | ||||
| Withdraw | 12690347 | 1742 days ago | IN | 0 ETH | 0.00131819 | ||||
| Emergency Withdr... | 12690225 | 1742 days ago | IN | 0 ETH | 0.00227181 | ||||
| Withdraw | 12690216 | 1742 days ago | IN | 0 ETH | 0.00179754 | ||||
| Withdraw | 12690212 | 1742 days ago | IN | 0 ETH | 0.00239672 | ||||
| Emergency Withdr... | 12690097 | 1742 days ago | IN | 0 ETH | 0.00123327 | ||||
| Withdraw | 12690046 | 1742 days ago | IN | 0 ETH | 0.00133218 | ||||
| Withdraw | 12689936 | 1742 days ago | IN | 0 ETH | 0.00164323 | ||||
| Withdraw | 12689929 | 1742 days ago | IN | 0 ETH | 0.00232811 | ||||
| Withdraw | 12689849 | 1742 days ago | IN | 0 ETH | 0.00091075 | ||||
| Withdraw | 12689619 | 1742 days ago | IN | 0 ETH | 0.00174651 | ||||
| Withdraw | 12689616 | 1742 days ago | IN | 0 ETH | 0.00136948 | ||||
| Withdraw | 12689614 | 1742 days ago | IN | 0 ETH | 0.0059924 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MasterChef
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-05-28
*/
// Sources flattened with hardhat v2.2.1 https://hardhat.org
// SPDX-License-Identifier: MIT
// File @openzeppelin/contracts/token/ERC20/IERC20.sol@v4.1.0
pragma solidity ^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 @openzeppelin/contracts/utils/Address.sol@v4.1.0
pragma solidity ^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/utils/SafeERC20.sol@v4.1.0
pragma solidity ^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 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) + value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
uint256 newAllowance = oldAllowance - value;
_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/math/SafeMath.sol@v4.1.0
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
* now has built in overflow checking.
*/
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) {
unchecked {
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) {
unchecked {
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) {
unchecked {
// 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) {
unchecked {
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) {
unchecked {
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) {
return a + b;
}
/**
* @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 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) {
return a * b;
}
/**
* @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.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
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) {
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) {
unchecked {
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.
*
* 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).
*
* 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) {
unchecked {
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) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
// File @openzeppelin/contracts/utils/Context.sol@v4.1.0
pragma solidity ^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 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) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// File @openzeppelin/contracts/access/Ownable.sol@v4.1.0
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual 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;
}
}
// File contracts/interfaces/IConsolidatedFund.sol
pragma solidity 0.8.4;
interface IConsolidatedFund {
function balance(address _token) external view returns (uint256);
function transferTo(
address _token,
address _receiver,
uint256 _amount
) external;
}
// File contracts/MasterChef.sol
pragma solidity >0.6.12;
// MasterChef is the master of Sushi. He can make Sushi and he is a fair guy.
//
// Note that it's ownable and the owner wields tremendous power. The ownership
// will be transferred to a governance smart contract once STEEL is sufficiently
// distributed and the community can show to govern itself.
//
// Have fun reading it. Hopefully it's bug-free. God bless.
contract MasterChef 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 STEELs
// entitled to a user but is pending to be distributed is:
//
// pending reward = (user.amount * pool.accSushiPerShare) - user.rewardDebt
//
// Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens:
// 1. The pool's `accSushiPerShare` (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. STEELs to distribute per block.
uint256 lastRewardBlock; // Last block number that STEELs distribution occurs.
uint256 accRewardPerShare; // Accumulated STEELs per share, times 1e12. See below.
}
// The reward TOKEN!
IERC20 public rewardToken;
// reward tokens created per block.
uint256 public rewardPerBlock;
uint256 public BONUS_MULTIPLIER = 1;
address public fund;
// Info of each pool.
PoolInfo[] public poolInfo;
// Info of each user that stakes LP tokens.
mapping(uint256 => mapping(address => UserInfo)) public userInfo;
// Total allocation poitns. Must be the sum of all allocation points in all pools.
uint256 public totalAllocPoint = 0;
// The block number when reward mining starts.
uint256 public startBlock;
event Deposit(address indexed user, uint256 indexed pid, uint256 amount);
event Withdraw(address indexed user, uint256 indexed pid, uint256 amount);
event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount);
constructor(
IERC20 _rewardToken,
address _fund,
uint256 _rewardPerBlock,
uint256 _startBlock
) {
rewardToken = _rewardToken;
rewardPerBlock = _rewardPerBlock;
startBlock = _startBlock;
fund = _fund;
}
function fundBalance() external view returns (uint256) {
return IConsolidatedFund(fund).balance(address(rewardToken));
}
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,
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, accRewardPerShare: 0}));
}
// Update the given pool's reward allocation point. Can only be called by the owner.
function set(
uint256 _pid,
uint256 _allocPoint,
bool _withUpdate
) public onlyOwner {
if (_withUpdate) {
massUpdatePools();
}
totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint);
poolInfo[_pid].allocPoint = _allocPoint;
}
function setfund(address _fund) external onlyOwner {
require(_fund != address(0), "Invalid zero address");
fund = _fund;
}
// View function to see pending reward tokens on frontend.
function pendingReward(uint256 _pid, address _user) external view returns (uint256) {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][_user];
uint256 accRewardPerShare = pool.accRewardPerShare;
uint256 lpSupply = pool.lpToken.balanceOf(address(this));
if (block.number > pool.lastRewardBlock && lpSupply != 0) {
uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number);
uint256 addedReward = multiplier.mul(rewardPerBlock).mul(pool.allocPoint).div(totalAllocPoint);
accRewardPerShare = accRewardPerShare.add(addedReward.mul(1e12).div(lpSupply));
}
return user.amount.mul(accRewardPerShare).div(1e12).sub(user.rewardDebt);
}
function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) {
return _to.sub(_from).mul(BONUS_MULTIPLIER);
}
// 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 reward = multiplier.mul(rewardPerBlock).mul(pool.allocPoint).div(totalAllocPoint);
pool.accRewardPerShare = pool.accRewardPerShare.add(reward.mul(1e12).div(lpSupply));
pool.lastRewardBlock = block.number;
}
// Deposit LP tokens to MasterChef for reward token 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.accRewardPerShare).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.accRewardPerShare).div(1e12);
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.accRewardPerShare).div(1e12).sub(user.rewardDebt);
safeRewardTransfer(msg.sender, pending);
user.amount = user.amount.sub(_amount);
user.rewardDebt = user.amount.mul(pool.accRewardPerShare).div(1e12);
pool.lpToken.safeTransfer(address(msg.sender), _amount);
emit Withdraw(msg.sender, _pid, _amount);
}
// 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;
}
// Safe rewward token transfer function, just in case if rounding error causes pool to not have enough reward tokens.
function safeRewardTransfer(address _to, uint256 _amount) internal {
IConsolidatedFund(fund).transferTo(address(rewardToken), _to, _amount);
}
function setRewardPerBlock(uint256 _rewardPerBlock) external onlyOwner {
massUpdatePools();
rewardPerBlock = _rewardPerBlock;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC20","name":"_rewardToken","type":"address"},{"internalType":"address","name":"_fund","type":"address"},{"internalType":"uint256","name":"_rewardPerBlock","type":"uint256"},{"internalType":"uint256","name":"_startBlock","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":"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":"bool","name":"_withUpdate","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","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":[],"name":"fund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"pendingReward","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":"accRewardPerShare","type":"uint256"}],"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":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardPerBlock","type":"uint256"}],"name":"setRewardPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fund","type":"address"}],"name":"setfund","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
6080604052600160035560006007553480156200001b57600080fd5b5060405162001d0138038062001d018339810160408190526200003e91620000ba565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b039586166001600160a01b031991821617909155600292909255600855600480549290931691161790556200011f565b60008060008060808587031215620000d0578384fd5b8451620000dd8162000106565b6020860151909450620000f08162000106565b6040860151606090960151949790965092505050565b6001600160a01b03811681146200011c57600080fd5b50565b611bd2806200012f6000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c8063715018a6116100e357806398969e821161008c578063e2bbb15811610066578063e2bbb1581461038d578063f2fde38b146103a0578063f7c618c1146103b357600080fd5b806398969e8214610347578063b60d42881461035a578063bb872b4a1461037a57600080fd5b80638da5cb5b116100bd5780638da5cb5b146102ae5780638dbb1e3a146102ed57806393f1a40b1461030057600080fd5b8063715018a6146102945780638aa285501461029c5780638ae39cac146102a557600080fd5b806348cd4cb111610145578063581f41661161011f578063581f416614610266578063630b5ba11461027957806364482f791461028157600080fd5b806348cd4cb11461023757806351eb05a6146102405780635312ea8e1461025357600080fd5b80631eaaa045116101765780631eaaa045146102075780633c0679451461021c578063441a3e701461022457600080fd5b8063081e3eda1461019d5780631526fe27146101b457806317caf6f1146101fe575b600080fd5b6005545b6040519081526020015b60405180910390f35b6101c76101c23660046118d5565b6103d3565b6040805173ffffffffffffffffffffffffffffffffffffffff909516855260208501939093529183015260608201526080016101ab565b6101a160075481565b61021a610215366004611934565b610424565b005b6101a16105f2565b61021a610232366004611975565b6106a2565b6101a160085481565b61021a61024e3660046118d5565b61084f565b61021a6102613660046118d5565b6109d2565b61021a61027436600461189d565b610aa8565b61021a610bed565b61021a61028f366004611996565b610c18565b61021a610d6c565b6101a160035481565b6101a160025481565b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ab565b6101a16102fb366004611975565b610e5c565b61033261030e366004611905565b60066020908152600092835260408084209091529082529020805460019091015482565b604080519283526020830191909152016101ab565b6101a1610355366004611905565b610e77565b6004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61021a6103883660046118d5565b611030565b61021a61039b366004611975565b6110be565b61021a6103ae36600461189d565b6111fd565b6001546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b600581815481106103e357600080fd5b6000918252602090912060049091020180546001820154600283015460039093015473ffffffffffffffffffffffffffffffffffffffff9092169350919084565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b80156104b8576104b8610bed565b600060085443116104cb576008546104cd565b435b6007549091506104dd90856113ae565b6007556040805160808101825273ffffffffffffffffffffffffffffffffffffffff94851681526020810195865290810191825260006060820181815260058054600181018255925291517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0600490920291820180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919096161790945593517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db1840155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db28301555090517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db390910155565b600480546001546040517fe3d670d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935260009291169063e3d670d79060240160206040518083038186803b15801561066557600080fd5b505afa158015610679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069d91906118ed565b905090565b6000600583815481106106de577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083208684526006825260408085203386529092529220805460049092029092019250831115610771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f77697468647261773a206e6f7420676f6f64000000000000000000000000000060448201526064016104a1565b61077a8461084f565b60006107b482600101546107ae64e8d4a510006107a8876003015487600001546113ba90919063ffffffff16565b906113c6565b906113d2565b90506107c033826113de565b81546107cc90856113d2565b80835560038401546107e99164e8d4a51000916107a891906113ba565b600183015582546108119073ffffffffffffffffffffffffffffffffffffffff16338661147a565b604051848152859033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689060200160405180910390a35050505050565b60006005828154811061088b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600402019050806002015443116108aa575050565b80546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a082319060240160206040518083038186803b15801561091357600080fd5b505afa158015610927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094b91906118ed565b90508061095d57504360029091015550565b600061096d836002015443610e5c565b9050600061099a6007546107a88660010154610994600254876113ba90919063ffffffff16565b906113ba565b90506109bd6109b2846107a88464e8d4a510006113ba565b6003860154906113ae565b60038501555050436002909201919091555050565b600060058281548110610a0e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020808320858452600682526040808520338087529352909320805460049093029093018054909450610a609273ffffffffffffffffffffffffffffffffffffffff91909116919061147a565b8054604051908152839033907fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959060200160405180910390a360008082556001909101555050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a1565b73ffffffffffffffffffffffffffffffffffffffff8116610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f496e76616c6964207a65726f206164647265737300000000000000000000000060448201526064016104a1565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60055460005b81811015610c1457610c048161084f565b610c0d81611b01565b9050610bf3565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a1565b8015610ca757610ca7610bed565b610d1182610d0b60058681548110610ce8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060040201600101546007546113d290919063ffffffff16565b906113ae565b6007819055508160058481548110610d52577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906004020160010181905550505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ded576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a1565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600354600090610e709061099484866113d2565b9392505050565b60008060058481548110610eb4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000918252602080832087845260068252604080852073ffffffffffffffffffffffffffffffffffffffff8981168752935280852060049485029092016003810154815492517f70a08231000000000000000000000000000000000000000000000000000000008152309681019690965290965091949193919216906370a082319060240160206040518083038186803b158015610f5157600080fd5b505afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8991906118ed565b9050836002015443118015610f9d57508015155b15610ffd576000610fb2856002015443610e5c565b90506000610fd96007546107a88860010154610994600254876113ba90919063ffffffff16565b9050610ff8610ff1846107a88464e8d4a510006113ba565b85906113ae565b935050505b61102583600101546107ae64e8d4a510006107a88688600001546113ba90919063ffffffff16565b979650505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146110b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a1565b6110b9610bed565b600255565b6000600583815481106110fa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000918252602080832086845260068252604080852033865290925292206004909102909101915061112b8461084f565b80541561116e57600061116082600101546107ae64e8d4a510006107a8876003015487600001546113ba90919063ffffffff16565b905061116c33826113de565b505b81546111929073ffffffffffffffffffffffffffffffffffffffff16333086611553565b805461119e90846113ae565b80825560038301546111bb9164e8d4a51000916107a891906113ba565b6001820155604051838152849033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159060200160405180910390a350505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461127e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a1565b73ffffffffffffffffffffffffffffffffffffffff8116611321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104a1565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000610e708284611a30565b6000610e708284611a81565b6000610e708284611a48565b6000610e708284611abe565b600480546001546040517fa5f2a15200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821693810193909352848116602484015260448301849052169063a5f2a15290606401600060405180830381600087803b15801561145e57600080fd5b505af1158015611472573d6000803e3d6000fd5b505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261154e9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526115b7565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115b19085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016114cc565b50505050565b6000611619826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166116c39092919063ffffffff16565b80519091501561154e578080602001905181019061163791906118b9565b61154e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016104a1565b60606116d284846000856116da565b949350505050565b60608247101561176c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016104a1565b843b6117d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104a1565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516117fd91906119c3565b60006040518083038185875af1925050503d806000811461183a576040519150601f19603f3d011682016040523d82523d6000602084013e61183f565b606091505b509150915061102582828660608315611859575081610e70565b8251156118695782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a191906119df565b6000602082840312156118ae578081fd5b8135610e7081611b69565b6000602082840312156118ca578081fd5b8151610e7081611b8e565b6000602082840312156118e6578081fd5b5035919050565b6000602082840312156118fe578081fd5b5051919050565b60008060408385031215611917578081fd5b82359150602083013561192981611b69565b809150509250929050565b600080600060608486031215611948578081fd5b83359250602084013561195a81611b69565b9150604084013561196a81611b8e565b809150509250925092565b60008060408385031215611987578182fd5b50508035926020909101359150565b6000806000606084860312156119aa578283fd5b8335925060208401359150604084013561196a81611b8e565b600082516119d5818460208701611ad5565b9190910192915050565b60208152600082518060208401526119fe816040850160208701611ad5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008219821115611a4357611a43611b3a565b500190565b600082611a7c577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ab957611ab9611b3a565b500290565b600082821015611ad057611ad0611b3a565b500390565b60005b83811015611af0578181015183820152602001611ad8565b838111156115b15750506000910152565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611b3357611b33611b3a565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611b8b57600080fd5b50565b8015158114611b8b57600080fdfea2646970667358221220268eb54a7d73423c3e7a379db1fa1d0e97c68953e11656e501ebbd091cde298464736f6c6343000804003300000000000000000000000084810bcf08744d5862b8181f12d17bfd57d3b0780000000000000000000000007fffa34b95b8234b454f311e23ed15179ff3ab1b00000000000000000000000000000000000000000000000001aa535d3d0c00000000000000000000000000000000000000000000000000000000000000bf0d04
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101985760003560e01c8063715018a6116100e357806398969e821161008c578063e2bbb15811610066578063e2bbb1581461038d578063f2fde38b146103a0578063f7c618c1146103b357600080fd5b806398969e8214610347578063b60d42881461035a578063bb872b4a1461037a57600080fd5b80638da5cb5b116100bd5780638da5cb5b146102ae5780638dbb1e3a146102ed57806393f1a40b1461030057600080fd5b8063715018a6146102945780638aa285501461029c5780638ae39cac146102a557600080fd5b806348cd4cb111610145578063581f41661161011f578063581f416614610266578063630b5ba11461027957806364482f791461028157600080fd5b806348cd4cb11461023757806351eb05a6146102405780635312ea8e1461025357600080fd5b80631eaaa045116101765780631eaaa045146102075780633c0679451461021c578063441a3e701461022457600080fd5b8063081e3eda1461019d5780631526fe27146101b457806317caf6f1146101fe575b600080fd5b6005545b6040519081526020015b60405180910390f35b6101c76101c23660046118d5565b6103d3565b6040805173ffffffffffffffffffffffffffffffffffffffff909516855260208501939093529183015260608201526080016101ab565b6101a160075481565b61021a610215366004611934565b610424565b005b6101a16105f2565b61021a610232366004611975565b6106a2565b6101a160085481565b61021a61024e3660046118d5565b61084f565b61021a6102613660046118d5565b6109d2565b61021a61027436600461189d565b610aa8565b61021a610bed565b61021a61028f366004611996565b610c18565b61021a610d6c565b6101a160035481565b6101a160025481565b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ab565b6101a16102fb366004611975565b610e5c565b61033261030e366004611905565b60066020908152600092835260408084209091529082529020805460019091015482565b604080519283526020830191909152016101ab565b6101a1610355366004611905565b610e77565b6004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61021a6103883660046118d5565b611030565b61021a61039b366004611975565b6110be565b61021a6103ae36600461189d565b6111fd565b6001546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b600581815481106103e357600080fd5b6000918252602090912060049091020180546001820154600283015460039093015473ffffffffffffffffffffffffffffffffffffffff9092169350919084565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b80156104b8576104b8610bed565b600060085443116104cb576008546104cd565b435b6007549091506104dd90856113ae565b6007556040805160808101825273ffffffffffffffffffffffffffffffffffffffff94851681526020810195865290810191825260006060820181815260058054600181018255925291517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0600490920291820180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919096161790945593517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db1840155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db28301555090517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db390910155565b600480546001546040517fe3d670d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935260009291169063e3d670d79060240160206040518083038186803b15801561066557600080fd5b505afa158015610679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069d91906118ed565b905090565b6000600583815481106106de577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083208684526006825260408085203386529092529220805460049092029092019250831115610771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f77697468647261773a206e6f7420676f6f64000000000000000000000000000060448201526064016104a1565b61077a8461084f565b60006107b482600101546107ae64e8d4a510006107a8876003015487600001546113ba90919063ffffffff16565b906113c6565b906113d2565b90506107c033826113de565b81546107cc90856113d2565b80835560038401546107e99164e8d4a51000916107a891906113ba565b600183015582546108119073ffffffffffffffffffffffffffffffffffffffff16338661147a565b604051848152859033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689060200160405180910390a35050505050565b60006005828154811061088b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600402019050806002015443116108aa575050565b80546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a082319060240160206040518083038186803b15801561091357600080fd5b505afa158015610927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094b91906118ed565b90508061095d57504360029091015550565b600061096d836002015443610e5c565b9050600061099a6007546107a88660010154610994600254876113ba90919063ffffffff16565b906113ba565b90506109bd6109b2846107a88464e8d4a510006113ba565b6003860154906113ae565b60038501555050436002909201919091555050565b600060058281548110610a0e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020808320858452600682526040808520338087529352909320805460049093029093018054909450610a609273ffffffffffffffffffffffffffffffffffffffff91909116919061147a565b8054604051908152839033907fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959060200160405180910390a360008082556001909101555050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a1565b73ffffffffffffffffffffffffffffffffffffffff8116610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f496e76616c6964207a65726f206164647265737300000000000000000000000060448201526064016104a1565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60055460005b81811015610c1457610c048161084f565b610c0d81611b01565b9050610bf3565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a1565b8015610ca757610ca7610bed565b610d1182610d0b60058681548110610ce8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060040201600101546007546113d290919063ffffffff16565b906113ae565b6007819055508160058481548110610d52577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906004020160010181905550505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ded576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a1565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600354600090610e709061099484866113d2565b9392505050565b60008060058481548110610eb4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000918252602080832087845260068252604080852073ffffffffffffffffffffffffffffffffffffffff8981168752935280852060049485029092016003810154815492517f70a08231000000000000000000000000000000000000000000000000000000008152309681019690965290965091949193919216906370a082319060240160206040518083038186803b158015610f5157600080fd5b505afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8991906118ed565b9050836002015443118015610f9d57508015155b15610ffd576000610fb2856002015443610e5c565b90506000610fd96007546107a88860010154610994600254876113ba90919063ffffffff16565b9050610ff8610ff1846107a88464e8d4a510006113ba565b85906113ae565b935050505b61102583600101546107ae64e8d4a510006107a88688600001546113ba90919063ffffffff16565b979650505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146110b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a1565b6110b9610bed565b600255565b6000600583815481106110fa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000918252602080832086845260068252604080852033865290925292206004909102909101915061112b8461084f565b80541561116e57600061116082600101546107ae64e8d4a510006107a8876003015487600001546113ba90919063ffffffff16565b905061116c33826113de565b505b81546111929073ffffffffffffffffffffffffffffffffffffffff16333086611553565b805461119e90846113ae565b80825560038301546111bb9164e8d4a51000916107a891906113ba565b6001820155604051838152849033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159060200160405180910390a350505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461127e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a1565b73ffffffffffffffffffffffffffffffffffffffff8116611321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104a1565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000610e708284611a30565b6000610e708284611a81565b6000610e708284611a48565b6000610e708284611abe565b600480546001546040517fa5f2a15200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821693810193909352848116602484015260448301849052169063a5f2a15290606401600060405180830381600087803b15801561145e57600080fd5b505af1158015611472573d6000803e3d6000fd5b505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261154e9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526115b7565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115b19085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016114cc565b50505050565b6000611619826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166116c39092919063ffffffff16565b80519091501561154e578080602001905181019061163791906118b9565b61154e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016104a1565b60606116d284846000856116da565b949350505050565b60608247101561176c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016104a1565b843b6117d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104a1565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516117fd91906119c3565b60006040518083038185875af1925050503d806000811461183a576040519150601f19603f3d011682016040523d82523d6000602084013e61183f565b606091505b509150915061102582828660608315611859575081610e70565b8251156118695782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a191906119df565b6000602082840312156118ae578081fd5b8135610e7081611b69565b6000602082840312156118ca578081fd5b8151610e7081611b8e565b6000602082840312156118e6578081fd5b5035919050565b6000602082840312156118fe578081fd5b5051919050565b60008060408385031215611917578081fd5b82359150602083013561192981611b69565b809150509250929050565b600080600060608486031215611948578081fd5b83359250602084013561195a81611b69565b9150604084013561196a81611b8e565b809150509250925092565b60008060408385031215611987578182fd5b50508035926020909101359150565b6000806000606084860312156119aa578283fd5b8335925060208401359150604084013561196a81611b8e565b600082516119d5818460208701611ad5565b9190910192915050565b60208152600082518060208401526119fe816040850160208701611ad5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008219821115611a4357611a43611b3a565b500190565b600082611a7c577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ab957611ab9611b3a565b500290565b600082821015611ad057611ad0611b3a565b500390565b60005b83811015611af0578181015183820152602001611ad8565b838111156115b15750506000910152565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611b3357611b33611b3a565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611b8b57600080fd5b50565b8015158114611b8b57600080fdfea2646970667358221220268eb54a7d73423c3e7a379db1fa1d0e97c68953e11656e501ebbd091cde298464736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000084810bcf08744d5862b8181f12d17bfd57d3b0780000000000000000000000007fffa34b95b8234b454f311e23ed15179ff3ab1b00000000000000000000000000000000000000000000000001aa535d3d0c00000000000000000000000000000000000000000000000000000000000000bf0d04
-----Decoded View---------------
Arg [0] : _rewardToken (address): 0x84810bcF08744d5862B8181f12d17bfd57d3b078
Arg [1] : _fund (address): 0x7FFFA34b95B8234b454f311E23Ed15179ff3ab1B
Arg [2] : _rewardPerBlock (uint256): 120000000000000000
Arg [3] : _startBlock (uint256): 12520708
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000084810bcf08744d5862b8181f12d17bfd57d3b078
Arg [1] : 0000000000000000000000007fffa34b95b8234b454f311e23ed15179ff3ab1b
Arg [2] : 00000000000000000000000000000000000000000000000001aa535d3d0c0000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000bf0d04
Deployed Bytecode Sourcemap
26398:8302:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29017:95;29089:8;:15;29017:95;;;7543:25:1;;;7531:2;7516:18;29017:95:0;;;;;;;;27968:26;;;;;;:::i;:::-;;:::i;:::-;;;;4126:42:1;4114:55;;;4096:74;;4201:2;4186:18;;4179:34;;;;4229:18;;;4222:34;4287:2;4272:18;;4265:34;4083:3;4068:19;27968:26:0;4050:255:1;28209:34:0;;;;;;29281:486;;;;;;:::i;:::-;;:::i;:::-;;28875:134;;;:::i;33167:658::-;;;;;;:::i;:::-;;:::i;28302:25::-;;;;;;31693:683;;;;;;:::i;:::-;;:::i;33896:356::-;;;;;;:::i;:::-;;:::i;30211:145::-;;;;;;:::i;:::-;;:::i;31437:180::-;;;:::i;29865:338::-;;;;;;:::i;:::-;;:::i;25099:148::-;;;:::i;27873:35::-;;;;;;27837:29;;;;;;24448:87;24494:7;24521:6;;;24448:87;;;2848:42:1;2836:55;;;2818:74;;2806:2;2791:18;24448:87:0;2773:125:1;31211:143:0;;;;;;:::i;:::-;;:::i;28050:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7753:25:1;;;7809:2;7794:18;;7787:34;;;;7726:18;28050:64:0;7708:119:1;30428:775:0;;;;;;:::i;:::-;;:::i;27915:19::-;;;;;;;;;34547:150;;;;;;:::i;:::-;;:::i;32453:662::-;;;;;;:::i;:::-;;:::i;25402:244::-;;;;;;:::i;:::-;;:::i;27764:25::-;;;;;;;;;27968:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27968:26:0;;;:::o;29281:486::-;24494:7;24521:6;24668:23;24521:6;23085:10;24668:23;24660:68;;;;;;;6122:2:1;24660:68:0;;;6104:21:1;;;6141:18;;;6134:30;6200:34;6180:18;;;6173:62;6252:18;;24660:68:0;;;;;;;;;29416:11:::1;29412:61;;;29444:17;:15;:17::i;:::-;29483:23;29524:10;;29509:12;:25;:53;;29552:10;;29509:53;;;29537:12;29509:53;29591:15;::::0;29483:79;;-1:-1:-1;29591:32:0::1;::::0;29611:11;29591:19:::1;:32::i;:::-;29573:15;:50:::0;29648:110:::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;29648:110:0;;;;;;29634:8:::1;:125:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;;-1:-1:-1;29634:125:0;;;;;;;29281:486::o;28875:134::-;28966:4;;;;28988:11;28948:53;;;;;28966:4;28988:11;;;28948:53;;;2818:74:1;;;;28921:7:0;;28966:4;;;28948:31;;2791:18:1;;28948:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28941:60;;28875:134;:::o;33167:658::-;33234:21;33258:8;33267:4;33258:14;;;;;;;;;;;;;;;;;;;;;;;;33307;;;:8;:14;;;;;;33322:10;33307:26;;;;;;;33352:11;;33258:14;;;;;;;;-1:-1:-1;33352:22:0;-1:-1:-1;33352:22:0;33344:53;;;;;;;6841:2:1;33344:53:0;;;6823:21:1;6880:2;6860:18;;;6853:30;6919:20;6899:18;;;6892:48;6957:18;;33344:53:0;6813:168:1;33344:53:0;33408:16;33419:4;33408:10;:16::i;:::-;33435:15;33453:70;33507:4;:15;;;33453:49;33497:4;33453:39;33469:4;:22;;;33453:4;:11;;;:15;;:39;;;;:::i;:::-;:43;;:49::i;:::-;:53;;:70::i;:::-;33435:88;;33534:39;33553:10;33565:7;33534:18;:39::i;:::-;33598:11;;:24;;33614:7;33598:15;:24::i;:::-;33584:38;;;33667:22;;;;33651:49;;33695:4;;33651:39;;33584:38;33651:15;:39::i;:49::-;33633:15;;;:67;33711:12;;:55;;:12;;33745:10;33758:7;33711:25;:55::i;:::-;33782:35;;7543:25:1;;;33803:4:0;;33791:10;;33782:35;;7531:2:1;7516:18;33782:35:0;;;;;;;33167:658;;;;;:::o;31693:683::-;31745:21;31769:8;31778:4;31769:14;;;;;;;;;;;;;;;;;;;;;;;;;;31745:38;;31814:4;:20;;;31798:12;:36;31794:75;;31851:7;31693:683;:::o;31794:75::-;31898:12;;:37;;;;;31929:4;31898:37;;;2818:74:1;31879:16:0;;31898:12;;;:22;;2791:18:1;;31898:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31879:56;-1:-1:-1;31950:13:0;31946:102;;-1:-1:-1;32003:12:0;31980:20;;;;:35;-1:-1:-1;31693:683:0:o;31946:102::-;32058:18;32079:49;32093:4;:20;;;32115:12;32079:13;:49::i;:::-;32058:70;;32139:14;32156:72;32212:15;;32156:51;32191:4;:15;;;32156:30;32171:14;;32156:10;:14;;:30;;;;:::i;:::-;:34;;:51::i;:72::-;32139:89;-1:-1:-1;32264:58:0;32291:30;32312:8;32291:16;32139:89;32302:4;32291:10;:16::i;:30::-;32264:22;;;;;:26;:58::i;:::-;32239:22;;;:83;-1:-1:-1;;32356:12:0;32333:20;;;;:35;;;;-1:-1:-1;;31693:683:0:o;33896:356::-;33955:21;33979:8;33988:4;33979:14;;;;;;;;;;;;;;;;;;;;;;;;34028;;;:8;:14;;;;;;34043:10;34028:26;;;;;;;;34112:11;;33979:14;;;;;;;34065:12;;33979:14;;-1:-1:-1;34065:59:0;;34028:26;34065:12;;;;;34043:10;34065:25;:59::i;:::-;34176:11;;34140:48;;7543:25:1;;;34170:4:0;;34158:10;;34140:48;;7531:2:1;7516:18;34140:48:0;;;;;;;34213:1;34199:15;;;34225;;;;:19;-1:-1:-1;;33896:356:0:o;30211:145::-;24494:7;24521:6;24668:23;24521:6;23085:10;24668:23;24660:68;;;;;;;6122:2:1;24660:68:0;;;6104:21:1;;;6141:18;;;6134:30;6200:34;6180:18;;;6173:62;6252:18;;24660:68:0;6094:182:1;24660:68:0;30281:19:::1;::::0;::::1;30273:52;;;::::0;::::1;::::0;;5366:2:1;30273:52:0::1;::::0;::::1;5348:21:1::0;5405:2;5385:18;;;5378:30;5444:22;5424:18;;;5417:50;5484:18;;30273:52:0::1;5338:170:1::0;30273:52:0::1;30336:4;:12:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;30211:145::o;31437:180::-;31499:8;:15;31482:14;31525:85;31553:6;31547:3;:12;31525:85;;;31583:15;31594:3;31583:10;:15::i;:::-;31561:5;;;:::i;:::-;;;31525:85;;;;31437:180;:::o;29865:338::-;24494:7;24521:6;24668:23;24521:6;23085:10;24668:23;24660:68;;;;;;;6122:2:1;24660:68:0;;;6104:21:1;;;6141:18;;;6134:30;6200:34;6180:18;;;6173:62;6252:18;;24660:68:0;6094:182:1;24660:68:0;29997:11:::1;29993:61;;;30025:17;:15;:17::i;:::-;30082:63;30133:11;30082:46;30102:8;30111:4;30102:14;;;;;;;;;;;;;;;;;;;;;;;;;;:25;;;30082:15;;:19;;:46;;;;:::i;:::-;:50:::0;::::1;:63::i;:::-;30064:15;:81;;;;30184:11;30156:8;30165:4;30156:14;;;;;;;;;;;;;;;;;;;;;;;;;;:25;;:39;;;;29865:338:::0;;;:::o;25099:148::-;24494:7;24521:6;24668:23;24521:6;23085:10;24668:23;24660:68;;;;;;;6122:2:1;24660:68:0;;;6104:21:1;;;6141:18;;;6134:30;6200:34;6180:18;;;6173:62;6252:18;;24660:68:0;6094:182:1;24660:68:0;25206:1:::1;25190:6:::0;;25169:40:::1;::::0;::::1;25190:6:::0;;::::1;::::0;25169:40:::1;::::0;25206:1;;25169:40:::1;25237:1;25220:19:::0;;;::::1;::::0;;25099:148::o;31211:143::-;31329:16;;31283:7;;31310:36;;:14;:3;31318:5;31310:7;:14::i;:36::-;31303:43;31211:143;-1:-1:-1;;;31211:143:0:o;30428:775::-;30503:7;30523:21;30547:8;30556:4;30547:14;;;;;;;;;;;;;;;;;;;;;;;;30596;;;:8;:14;;;;;;:21;;;;;;;;;;;30547:14;;;;;;;30656:22;;;;30708:12;;:37;;;;;30739:4;30708:37;;;2818:74:1;;;;30547:14:0;;-1:-1:-1;30596:21:0;;30656:22;;30547:14;;30708:12;;:22;;2791:18:1;;30708:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30689:56;;30775:4;:20;;;30760:12;:35;:52;;;;-1:-1:-1;30799:13:0;;;30760:52;30756:357;;;30829:18;30850:49;30864:4;:20;;;30886:12;30850:13;:49::i;:::-;30829:70;;30914:19;30936:72;30992:15;;30936:51;30971:4;:15;;;30936:30;30951:14;;30936:10;:14;;:30;;;;:::i;:72::-;30914:94;-1:-1:-1;31043:58:0;31065:35;31091:8;31065:21;30914:94;31081:4;31065:15;:21::i;:35::-;31043:17;;:21;:58::i;:::-;31023:78;;30756:357;;;31130:65;31179:4;:15;;;31130:44;31169:4;31130:34;31146:17;31130:4;:11;;;:15;;:34;;;;:::i;:65::-;31123:72;30428:775;-1:-1:-1;;;;;;;30428:775:0:o;34547:150::-;24494:7;24521:6;24668:23;24521:6;23085:10;24668:23;24660:68;;;;;;;6122:2:1;24660:68:0;;;6104:21:1;;;6141:18;;;6134:30;6200:34;6180:18;;;6173:62;6252:18;;24660:68:0;6094:182:1;24660:68:0;34629:17:::1;:15;:17::i;:::-;34657:14;:32:::0;34547:150::o;32453:662::-;32519:21;32543:8;32552:4;32543:14;;;;;;;;;;;;;;;;;;;;;;;;32592;;;:8;:14;;;;;;32607:10;32592:26;;;;;;;32543:14;;;;;;;;-1:-1:-1;32629:16:0;32601:4;32629:10;:16::i;:::-;32660:11;;:15;32656:190;;32692:15;32710:70;32764:4;:15;;;32710:49;32754:4;32710:39;32726:4;:22;;;32710:4;:11;;;:15;;:39;;;;:::i;:70::-;32692:88;;32795:39;32814:10;32826:7;32795:18;:39::i;:::-;32656:190;;32856:12;;:74;;:12;;32894:10;32915:4;32922:7;32856:29;:74::i;:::-;32955:11;;:24;;32971:7;32955:15;:24::i;:::-;32941:38;;;33024:22;;;;33008:49;;33052:4;;33008:39;;32941:38;33008:15;:39::i;:49::-;32990:15;;;:67;33073:34;;7543:25:1;;;33093:4:0;;33081:10;;33073:34;;7531:2:1;7516:18;33073:34:0;;;;;;;32453:662;;;;:::o;25402:244::-;24494:7;24521:6;24668:23;24521:6;23085:10;24668:23;24660:68;;;;;;;6122:2:1;24660:68:0;;;6104:21:1;;;6141:18;;;6134:30;6200:34;6180:18;;;6173:62;6252:18;;24660:68:0;6094:182:1;24660:68:0;25491:22:::1;::::0;::::1;25483:73;;;::::0;::::1;::::0;;4959:2:1;25483:73:0::1;::::0;::::1;4941:21:1::0;4998:2;4978:18;;;4971:30;5037:34;5017:18;;;5010:62;5108:8;5088:18;;;5081:36;5134:19;;25483:73:0::1;4931:228:1::0;25483:73:0::1;25593:6;::::0;;25572:38:::1;::::0;::::1;::::0;;::::1;::::0;25593:6;::::1;::::0;25572:38:::1;::::0;::::1;25621:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;25402:244::o;17987:98::-;18045:7;18072:5;18076:1;18072;:5;:::i;18725:98::-;18783:7;18810:5;18814:1;18810;:5;:::i;19124:98::-;19182:7;19209:5;19213:1;19209;:5;:::i;18368:98::-;18426:7;18453:5;18457:1;18453;:5;:::i;34383:156::-;34479:4;;;;34504:11;34461:70;;;;;34479:4;34504:11;;;34461:70;;;3166:34:1;;;;3236:15;;;3216:18;;;3209:43;3268:18;;;3261:34;;;34479:4:0;;34461:34;;3078:18:1;;34461:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34383:156;;:::o;11822:211::-;11966:58;;3510:42:1;3498:55;;11966:58:0;;;3480:74:1;3570:18;;;3563:34;;;11939:86:0;;11959:5;;11989:23;;3453:18:1;;11966:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11939:19;:86::i;:::-;11822:211;;;:::o;12041:248::-;12212:68;;3115:42:1;3184:15;;;12212:68:0;;;3166:34:1;3236:15;;3216:18;;;3209:43;3268:18;;;3261:34;;;12185:96:0;;12205:5;;12235:27;;3078:18:1;;12212:68:0;3060:241:1;12185:96:0;12041:248;;;;:::o;14412:774::-;14836:23;14862:69;14890:4;14862:69;;;;;;;;;;;;;;;;;14870:5;14862:27;;;;:69;;;;;:::i;:::-;14946:17;;14836:95;;-1:-1:-1;14946:21:0;14942:237;;15101:10;15090:30;;;;;;;;;;;;:::i;:::-;15082:85;;;;;;;7188:2:1;15082:85:0;;;7170:21:1;7227:2;7207:18;;;7200:30;7266:34;7246:18;;;7239:62;7337:12;7317:18;;;7310:40;7367:19;;15082:85:0;7160:232:1;6642:229:0;6779:12;6811:52;6833:6;6841:4;6847:1;6850:12;6811:21;:52::i;:::-;6804:59;6642:229;-1:-1:-1;;;;6642:229:0:o;7762:571::-;7932:12;7990:5;7965:21;:30;;7957:81;;;;;;;5715:2:1;7957:81:0;;;5697:21:1;5754:2;5734:18;;;5727:30;5793:34;5773:18;;;5766:62;5864:8;5844:18;;;5837:36;5890:19;;7957:81:0;5687:228:1;7957:81:0;4082:20;;8049:60;;;;;;;6483:2:1;8049:60:0;;;6465:21:1;6522:2;6502:18;;;6495:30;6561:31;6541:18;;;6534:59;6610:18;;8049:60:0;6455:179:1;8049:60:0;8183:12;8197:23;8224:6;:11;;8243:5;8250:4;8224:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8182:73;;;;8273:52;8291:7;8300:10;8312:12;10561;10590:7;10586:595;;;-1:-1:-1;10621:10:0;10614:17;;10586:595;10735:17;;:21;10731:439;;10998:10;10992:17;11059:15;11046:10;11042:2;11038:19;11031:44;10946:148;11141:12;11134:20;;;;;;;;;;;:::i;14:257:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;276:255::-;343:6;396:2;384:9;375:7;371:23;367:32;364:2;;;417:6;409;402:22;364:2;454:9;448:16;473:28;495:5;473:28;:::i;536:190::-;595:6;648:2;636:9;627:7;623:23;619:32;616:2;;;669:6;661;654:22;616:2;-1:-1:-1;697:23:1;;606:120;-1:-1:-1;606:120:1:o;731:194::-;801:6;854:2;842:9;833:7;829:23;825:32;822:2;;;875:6;867;860:22;822:2;-1:-1:-1;903:16:1;;812:113;-1:-1:-1;812:113:1:o;930:325::-;998:6;1006;1059:2;1047:9;1038:7;1034:23;1030:32;1027:2;;;1080:6;1072;1065:22;1027:2;1121:9;1108:23;1098:33;;1181:2;1170:9;1166:18;1153:32;1194:31;1219:5;1194:31;:::i;:::-;1244:5;1234:15;;;1017:238;;;;;:::o;1260:473::-;1347:6;1355;1363;1416:2;1404:9;1395:7;1391:23;1387:32;1384:2;;;1437:6;1429;1422:22;1384:2;1478:9;1465:23;1455:33;;1538:2;1527:9;1523:18;1510:32;1551:31;1576:5;1551:31;:::i;:::-;1601:5;-1:-1:-1;1658:2:1;1643:18;;1630:32;1671:30;1630:32;1671:30;:::i;:::-;1720:7;1710:17;;;1374:359;;;;;:::o;1738:258::-;1806:6;1814;1867:2;1855:9;1846:7;1842:23;1838:32;1835:2;;;1888:6;1880;1873:22;1835:2;-1:-1:-1;;1916:23:1;;;1986:2;1971:18;;;1958:32;;-1:-1:-1;1825:171:1:o;2001:387::-;2075:6;2083;2091;2144:2;2132:9;2123:7;2119:23;2115:32;2112:2;;;2165:6;2157;2150:22;2112:2;2206:9;2193:23;2183:33;;2263:2;2252:9;2248:18;2235:32;2225:42;;2317:2;2306:9;2302:18;2289:32;2330:28;2352:5;2330:28;:::i;2393:274::-;2522:3;2560:6;2554:13;2576:53;2622:6;2617:3;2610:4;2602:6;2598:17;2576:53;:::i;:::-;2645:16;;;;;2530:137;-1:-1:-1;;2530:137:1:o;4310:442::-;4459:2;4448:9;4441:21;4422:4;4491:6;4485:13;4534:6;4529:2;4518:9;4514:18;4507:34;4550:66;4609:6;4604:2;4593:9;4589:18;4584:2;4576:6;4572:15;4550:66;:::i;:::-;4668:2;4656:15;4673:66;4652:88;4637:104;;;;4743:2;4633:113;;4431:321;-1:-1:-1;;4431:321:1:o;7832:128::-;7872:3;7903:1;7899:6;7896:1;7893:13;7890:2;;;7909:18;;:::i;:::-;-1:-1:-1;7945:9:1;;7880:80::o;7965:274::-;8005:1;8031;8021:2;;8066:77;8063:1;8056:88;8167:4;8164:1;8157:15;8195:4;8192:1;8185:15;8021:2;-1:-1:-1;8224:9:1;;8011:228::o;8244:::-;8284:7;8410:1;8342:66;8338:74;8335:1;8332:81;8327:1;8320:9;8313:17;8309:105;8306:2;;;8417:18;;:::i;:::-;-1:-1:-1;8457:9:1;;8296:176::o;8477:125::-;8517:4;8545:1;8542;8539:8;8536:2;;;8550:18;;:::i;:::-;-1:-1:-1;8587:9:1;;8526:76::o;8607:258::-;8679:1;8689:113;8703:6;8700:1;8697:13;8689:113;;;8779:11;;;8773:18;8760:11;;;8753:39;8725:2;8718:10;8689:113;;;8820:6;8817:1;8814:13;8811:2;;;-1:-1:-1;;8855:1:1;8837:16;;8830:27;8660:205::o;8870:195::-;8909:3;8940:66;8933:5;8930:77;8927:2;;;9010:18;;:::i;:::-;-1:-1:-1;9057:1:1;9046:13;;8917:148::o;9070:184::-;9122:77;9119:1;9112:88;9219:4;9216:1;9209:15;9243:4;9240:1;9233:15;9259:154;9345:42;9338:5;9334:54;9327:5;9324:65;9314:2;;9403:1;9400;9393:12;9314:2;9304:109;:::o;9418:118::-;9504:5;9497:13;9490:21;9483:5;9480:32;9470:2;;9526:1;9523;9516:12
Swarm Source
ipfs://268eb54a7d73423c3e7a379db1fa1d0e97c68953e11656e501ebbd091cde2984
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.