More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 433 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 12584505 | 1147 days ago | IN | 0 ETH | 0.00061186 | ||||
Withdraw | 12584500 | 1147 days ago | IN | 0 ETH | 0.00079245 | ||||
Withdraw | 12457971 | 1167 days ago | IN | 0 ETH | 0.00329267 | ||||
Withdraw | 12308282 | 1190 days ago | IN | 0 ETH | 0.00299781 | ||||
Withdraw | 12308276 | 1190 days ago | IN | 0 ETH | 0.00225544 | ||||
Withdraw | 12293122 | 1192 days ago | IN | 0 ETH | 0.00412913 | ||||
Withdraw | 12177417 | 1210 days ago | IN | 0 ETH | 0.0071957 | ||||
Withdraw | 12073575 | 1226 days ago | IN | 0 ETH | 0.00720001 | ||||
Withdraw | 11985080 | 1240 days ago | IN | 0 ETH | 0.00384487 | ||||
Deposit | 11982721 | 1240 days ago | IN | 0 ETH | 0.00518817 | ||||
Withdraw | 11753533 | 1275 days ago | IN | 0 ETH | 0.00425599 | ||||
Withdraw | 11753532 | 1275 days ago | IN | 0 ETH | 0.00524211 | ||||
Withdraw | 11668251 | 1288 days ago | IN | 0 ETH | 0.00676283 | ||||
Withdraw | 11659513 | 1290 days ago | IN | 0 ETH | 0.00256445 | ||||
Deposit | 11659485 | 1290 days ago | IN | 0 ETH | 0.0036041 | ||||
Withdraw | 11651296 | 1291 days ago | IN | 0 ETH | 0.00826091 | ||||
Withdraw | 11646797 | 1292 days ago | IN | 0 ETH | 0.00435339 | ||||
Withdraw | 11646755 | 1292 days ago | IN | 0 ETH | 0.00374176 | ||||
Withdraw | 11643755 | 1292 days ago | IN | 0 ETH | 0.00524793 | ||||
Withdraw | 11619442 | 1296 days ago | IN | 0 ETH | 0.00789757 | ||||
Withdraw | 11618921 | 1296 days ago | IN | 0 ETH | 0.00558443 | ||||
Withdraw | 11602206 | 1299 days ago | IN | 0 ETH | 0.01667533 | ||||
Withdraw | 11592492 | 1300 days ago | IN | 0 ETH | 0.01076997 | ||||
Withdraw | 11590811 | 1300 days ago | IN | 0 ETH | 0.00889872 | ||||
Deposit | 11573462 | 1303 days ago | IN | 0 ETH | 0.00281073 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
StonkMarketMaker
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-12 */ /** *Submitted for verification at Etherscan.io on 2020-11-11 */ // File: node_modules\@openzeppelin\contracts\token\ERC20\IERC20.sol pragma solidity ^0.6.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\math\SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: node_modules\@openzeppelin\contracts\utils\Address.sol pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin\contracts\token\ERC20\SafeERC20.sol pragma solidity ^0.6.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: node_modules\@openzeppelin\contracts\GSN\Context.sol pragma solidity ^0.6.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: @openzeppelin\contracts\access\Ownable.sol pragma solidity ^0.6.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. */ 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; } } // File: @openzeppelin\contracts\token\ERC20\ERC20.sol pragma solidity ^0.6.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } // File: contracts\StonkERC20.sol pragma solidity >=0.6.0; contract StonkERC20 is ERC20 { constructor(uint256 amount) public ERC20("STONK", "STONK") { _mint(msg.sender, amount); } } // File: contracts\StonkMarketMaker.sol pragma solidity >=0.6; contract StonkMarketMaker is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; 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 STONKs // entitled to a user but is pending to be distributed is: // // pending reward = (user.amount * pool.accStonkPerShare) - user.rewardDebt // // Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens: // 1. The pool's `accStonkPerShare`, (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. } struct PoolInfo { IERC20 lpToken; // Address of LP token contract. uint256 allocPoint; // How many allocation points assigned to this pool. STONKs to distribute per block. uint256 lastRewardBlock; // Last block number that STONKs distribution occurs. uint256 accStonkPerShare; // Accumulated STONK rewards per share, times 1e12. See below. } StonkERC20 public stonk; address public treasury; PoolInfo[] public poolInfo; mapping(uint256 => mapping(address => UserInfo)) public userInfo; mapping(address => uint256) public tokenPID; uint256 public totalAllocPoint = 0; uint256 public treasuryFee = 1000; uint256 public stonkPerBlock; uint256 public rewardsStartBlock; uint256 public rewardsEndBlock; 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( StonkERC20 _stonk, address _treasury, uint256 _rewardsEndBlock, uint256 _totalStonkRewards ) public { stonk = _stonk; treasury = _treasury; rewardsEndBlock = _rewardsEndBlock; rewardsStartBlock = block.number; stonkPerBlock = _totalStonkRewards.div( rewardsEndBlock.sub(rewardsStartBlock) ); } function poolLength() external view returns (uint256) { return poolInfo.length; } // Add a new lp to the pool. Can only be called by the owner. function addPool( uint256 _allocPoint, IERC20 _lpToken, bool _withUpdate ) public onlyOwner { require(tokenPID[address(_lpToken)] == 0, 'addPool: Duplicate token pool.'); if (_withUpdate) { massUpdatePools(); } totalAllocPoint = totalAllocPoint.add(_allocPoint); poolInfo.push( PoolInfo({ lpToken: _lpToken, allocPoint: _allocPoint, lastRewardBlock: block.number, accStonkPerShare: 0 }) ); tokenPID[address(_lpToken)] = poolInfo.length; } // Update treasury address by the previous treasury. function setTreasury(address _treasury) public { require(msg.sender == treasury, 'setTreasury: wut?'); treasury = _treasury; } // Update treasury fee, capped at 10%. function setTreasuryFee(uint256 _treasuryFee) external onlyOwner { require(_treasuryFee <= 1000, 'setTreasuryFee: max fee is 10%'); treasuryFee = _treasuryFee; } // Update the allocation points of a specific pool function setPoolAlloc( uint256 _pid, uint256 _allocPoint, bool _withUpdate ) public onlyOwner { if (_withUpdate) { massUpdatePools(); } totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add( _allocPoint ); poolInfo[_pid].allocPoint = _allocPoint; } // View function to see pending STONKs on frontend. function pendingStonk(uint256 _pid, address _user) public view returns (uint256) { PoolInfo memory pool = poolInfo[_pid]; UserInfo memory user = userInfo[_pid][_user]; uint256 accStonkPerShare = pool.accStonkPerShare; uint256 lpSupply = pool.lpToken.balanceOf(address(this)); uint256 blockNumber = block.number < rewardsEndBlock ? block.number : rewardsEndBlock; if (blockNumber > pool.lastRewardBlock && lpSupply != 0) { uint256 multiplier = blockNumber.sub(pool.lastRewardBlock); uint256 stonkReward = multiplier .mul(stonkPerBlock) .mul(pool.allocPoint) .div(totalAllocPoint); uint256 treasuryReward = stonkReward.mul(treasuryFee).div(10000); uint256 poolReward = stonkReward.sub(treasuryReward); accStonkPerShare = accStonkPerShare.add( poolReward.mul(1e12).div(lpSupply) ); } return user.amount.mul(accStonkPerShare).div(1e12).sub(user.rewardDebt); } // View function to calculate the total pending STONKs of address across all pools function totalPendingStonk(address _user) public view returns (uint256) { uint256 total = 0; uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { total = total.add(pendingStonk(pid, _user)); } return total; } // Update reward variables 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]; uint256 blockNumber = block.number < rewardsEndBlock ? block.number : rewardsEndBlock; if (blockNumber <= pool.lastRewardBlock) { return; } uint256 lpSupply = pool.lpToken.balanceOf(address(this)); if (lpSupply == 0) { pool.lastRewardBlock = blockNumber; return; } uint256 multiplier = blockNumber.sub(pool.lastRewardBlock); uint256 stonkReward = multiplier .mul(stonkPerBlock) .mul(pool.allocPoint) .div(totalAllocPoint); uint256 treasuryReward = stonkReward.mul(treasuryFee).div(10000); uint256 poolReward = stonkReward.sub(treasuryReward); safeStonkTransfer(treasury, treasuryReward); pool.accStonkPerShare = pool.accStonkPerShare.add( poolReward.mul(1e12).div(lpSupply) ); pool.lastRewardBlock = blockNumber; } function transferPendingRewards(uint256 _pid) public { updatePool(_pid); PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; uint256 pending = user.amount.mul(pool.accStonkPerShare).div(1e12).sub(user.rewardDebt); user.rewardDebt = user.amount.mul(pool.accStonkPerShare).div(1e12); if (pending > 0) { safeStonkTransfer(msg.sender, pending); } } // Deposit LP tokens to StonkMarketMaker for STONK allocation. function deposit(uint256 _pid, uint256 _amount) public { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; if (user.amount > 0) { transferPendingRewards(_pid); } if (_amount > 0) { pool.lpToken.safeTransferFrom( address(msg.sender), address(this), _amount ); user.amount = user.amount.add(_amount); } user.rewardDebt = user.amount.mul(pool.accStonkPerShare).div(1e12); emit Deposit(msg.sender, _pid, _amount); } // Withdraw LP tokens from StonkMarketMaker. 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'); transferPendingRewards(_pid); if (_amount > 0) { user.amount = user.amount.sub(_amount); pool.lpToken.safeTransfer(address(msg.sender), _amount); } user.rewardDebt = user.amount.mul(pool.accStonkPerShare).div(1e12); 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]; uint256 amount = user.amount; user.amount = 0; user.rewardDebt = 0; pool.lpToken.safeTransfer(address(msg.sender), amount); emit EmergencyWithdraw(msg.sender, _pid, amount); } // Safe stonk transfer function, just in case if rounding error causes pool to not have enough STONKs. function safeStonkTransfer(address _to, uint256 _amount) internal { uint256 stonkBal = stonk.balanceOf(address(this)); if (_amount > stonkBal) { stonk.transfer(_to, stonkBal); } else { stonk.transfer(_to, _amount); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract StonkERC20","name":"_stonk","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"uint256","name":"_rewardsEndBlock","type":"uint256"},{"internalType":"uint256","name":"_totalStonkRewards","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":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"addPool","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":"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":"pendingStonk","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":"accStonkPerShare","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":"rewardsEndBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsStartBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"setPoolAlloc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"setTreasuryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stonk","outputs":[{"internalType":"contract StonkERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stonkPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenPID","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":"_user","type":"address"}],"name":"totalPendingStonk","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":"transferPendingRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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
608060405260006006556103e86007553480156200001c57600080fd5b5060405162001ca938038062001ca9833981810160405260808110156200004257600080fd5b50805160208201516040830151606090930151919290916000620000656200012d565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b03199081166001600160a01b038781169190911790925560028054909116918516919091179055600a8290554360098190556200011f906200010a90849062000131602090811b6200120117901c565b826200018260201b6200124a1790919060201c565b60085550620002d092505050565b3390565b60006200017b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250620001cc60201b60201c565b9392505050565b60006200017b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200026760201b60201c565b600081848411156200025f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200022357818101518382015260200162000209565b50505050905090810190601f168015620002515780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183620002b95760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156200022357818101518382015260200162000209565b506000838581620002c657fe5b0495945050505050565b6119c980620002e06000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806377e741c7116100de578063ce872d8711610097578063e369fd2a11610071578063e369fd2a1461040a578063f0f4426014610412578063f150bcb314610438578063f2fde38b146104645761018e565b8063ce872d87146103b9578063db3447b0146103c1578063e2bbb158146103e75761018e565b806377e741c7146102ed5780637abceffd1461030a5780638da5cb5b1461033e57806393f1a40b146103465780639fb79dbc1461038b578063cc32d176146103b15761018e565b8063441a3e701161014b5780635312ea8e116101255780635312ea8e1461029c57806361d027b3146102b9578063630b5ba1146102dd578063715018a6146102e55761018e565b8063441a3e701461023157806347f8e5761461025457806351eb05a61461027f5761018e565b8063081e3eda1461019357806309a38694146101ad57806311afbed2146101cc5780631526fe27146101d457806317caf6f1146102215780633ed5d18314610229575b600080fd5b61019b61048a565b60408051918252519081900360200190f35b6101ca600480360360208110156101c357600080fd5b5035610490565b005b61019b610546565b6101f1600480360360208110156101ea57600080fd5b503561054c565b604080516001600160a01b0390951685526020850193909352838301919091526060830152519081900360800190f35b61019b61058d565b61019b610593565b6101ca6004803603604081101561024757600080fd5b5080359060200135610599565b6101ca6004803603606081101561026a57600080fd5b508035906020810135906040013515156106ad565b6101ca6004803603602081101561029557600080fd5b503561077e565b6101ca600480360360208110156102b257600080fd5b5035610910565b6102c16109a9565b604080516001600160a01b039092168252519081900360200190f35b6101ca6109b8565b6101ca6109db565b6101ca6004803603602081101561030357600080fd5b5035610a7d565b6101ca6004803603606081101561032057600080fd5b508035906001600160a01b0360208201351690604001351515610b31565b6102c1610d14565b6103726004803603604081101561035c57600080fd5b50803590602001356001600160a01b0316610d23565b6040805192835260208301919091528051918290030190f35b61019b600480360360208110156103a157600080fd5b50356001600160a01b0316610d47565b61019b610d59565b61019b610d5f565b61019b600480360360208110156103d757600080fd5b50356001600160a01b0316610d65565b6101ca600480360360408110156103fd57600080fd5b5080359060200135610d9e565b6102c1610e70565b6101ca6004803603602081101561042857600080fd5b50356001600160a01b0316610e7f565b61019b6004803603604081101561044e57600080fd5b50803590602001356001600160a01b0316610ef4565b6101ca6004803603602081101561047a57600080fd5b50356001600160a01b0316611109565b60035490565b6104998161077e565b6000600382815481106104a857fe5b600091825260208083208584526004808352604080862033875290935291842060018101549390920201600381015482549195509193926105059290916104ff9164e8d4a51000916104f99161128c565b9061124a565b90611201565b905061052b64e8d4a510006104f98560030154856000015461128c90919063ffffffff16565b600183015580156105405761054033826112e5565b50505050565b60085481565b6003818154811061055957fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b60065481565b60095481565b6000600383815481106105a857fe5b600091825260208083208684526004808352604080862033875290935291909320805492909102909201925083111561061d576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b61062684610490565b82156106505780546106389084611201565b81558154610650906001600160a01b03163385611476565b6003820154815461066b9164e8d4a51000916104f99161128c565b6001820155604080518481529051859133917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a350505050565b6106b56114c8565b6000546001600160a01b03908116911614610705576040805162461bcd60e51b8152602060048201819052602482015260008051602061194a833981519152604482015290519081900360640190fd5b8015610713576107136109b8565b6107508261074a6003868154811061072757fe5b90600052602060002090600402016001015460065461120190919063ffffffff16565b906114cc565b600681905550816003848154811061076457fe5b906000526020600020906004020160010181905550505050565b60006003828154811061078d57fe5b906000526020600020906004020190506000600a5443106107b057600a546107b2565b435b9050816002015481116107c657505061090d565b8154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561081057600080fd5b505afa158015610824573d6000803e3d6000fd5b505050506040513d602081101561083a57600080fd5b505190508061084f575060029091015561090d565b600061086884600201548461120190919063ffffffff16565b905060006108956006546104f9876001015461088f6008548761128c90919063ffffffff16565b9061128c565b905060006108b46127106104f96007548561128c90919063ffffffff16565b905060006108c28383611201565b6002549091506108db906001600160a01b0316836112e5565b6108fc6108f1866104f98464e8d4a5100061128c565b6003890154906114cc565b600388015550505050600290920155505b50565b60006003828154811061091f57fe5b6000918252602080832085845260048083526040808620338088529452852080548682556001820196909655930201805490945091929161096c916001600160a01b039091169083611476565b604080518281529051859133917fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959181900360200190a350505050565b6002546001600160a01b031681565b60035460005b818110156109d7576109cf8161077e565b6001016109be565b5050565b6109e36114c8565b6000546001600160a01b03908116911614610a33576040805162461bcd60e51b8152602060048201819052602482015260008051602061194a833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610a856114c8565b6000546001600160a01b03908116911614610ad5576040805162461bcd60e51b8152602060048201819052602482015260008051602061194a833981519152604482015290519081900360640190fd5b6103e8811115610b2c576040805162461bcd60e51b815260206004820152601e60248201527f73657454726561737572794665653a206d617820666565206973203130250000604482015290519081900360640190fd5b600755565b610b396114c8565b6000546001600160a01b03908116911614610b89576040805162461bcd60e51b8152602060048201819052602482015260008051602061194a833981519152604482015290519081900360640190fd5b6001600160a01b03821660009081526005602052604090205415610bf4576040805162461bcd60e51b815260206004820152601e60248201527f616464506f6f6c3a204475706c696361746520746f6b656e20706f6f6c2e0000604482015290519081900360640190fd5b8015610c0257610c026109b8565b600654610c0f90846114cc565b60065550604080516080810182526001600160a01b039283168082526020808301958652438385019081526000606085018181526003805460018101825581845296517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b600490980297880180546001600160a01b03191691909a161790985597517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c86015590517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d85015595517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85e9093019290925592549284526005905290912055565b6000546001600160a01b031690565b60046020908152600092835260408084209091529082529020805460019091015482565b60056020526000908152604090205481565b60075481565b600a5481565b6003546000908190815b81811015610d9557610d8b610d848287610ef4565b84906114cc565b9250600101610d6f565b50909392505050565b600060038381548110610dad57fe5b600091825260208083208684526004808352604080862033875290935291909320805492909102909201925015610de757610de784610490565b8215610e13578154610e04906001600160a01b0316333086611526565b8054610e1090846114cc565b81555b60038201548154610e2e9164e8d4a51000916104f99161128c565b6001820155604080518481529051859133917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a350505050565b6001546001600160a01b031681565b6002546001600160a01b03163314610ed2576040805162461bcd60e51b815260206004820152601160248201527073657454726561737572793a207775743f60781b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000610efe6118b7565b60038481548110610f0b57fe5b600091825260209182902060408051608081018252600490930290910180546001600160a01b0316835260018101549383019390935260028301549082015260039091015460608201529050610f5f6118e8565b5060008481526004602081815260408084206001600160a01b0380891686529083528185208251808401845281548152600190910154818501526060870151875184516370a0823160e01b81523097810197909752935191969095909493909216926370a082319260248082019391829003018186803b158015610fe257600080fd5b505afa158015610ff6573d6000803e3d6000fd5b505050506040513d602081101561100c57600080fd5b5051600a54909150600090431061102557600a54611027565b435b905084604001518111801561103b57508115155b156110d357600061105986604001518361120190919063ffffffff16565b905060006110806006546104f9896020015161088f6008548761128c90919063ffffffff16565b9050600061109f6127106104f96007548561128c90919063ffffffff16565b905060006110ad8383611201565b90506110cc6110c5876104f98464e8d4a5100061128c565b88906114cc565b9650505050505b6110fb84602001516104ff64e8d4a510006104f987896000015161128c90919063ffffffff16565b955050505050505b92915050565b6111116114c8565b6000546001600160a01b03908116911614611161576040805162461bcd60e51b8152602060048201819052602482015260008051602061194a833981519152604482015290519081900360640190fd5b6001600160a01b0381166111a65760405162461bcd60e51b81526004018080602001828103825260268152602001806119036026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600061124383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611580565b9392505050565b600061124383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611617565b60008261129b57506000611103565b828202828482816112a857fe5b04146112435760405162461bcd60e51b81526004018080602001828103825260218152602001806119296021913960400191505060405180910390fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561133057600080fd5b505afa158015611344573d6000803e3d6000fd5b505050506040513d602081101561135a57600080fd5b50519050808211156113ee576001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156113bc57600080fd5b505af11580156113d0573d6000803e3d6000fd5b505050506040513d60208110156113e657600080fd5b506114719050565b6001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561144457600080fd5b505af1158015611458573d6000803e3d6000fd5b505050506040513d602081101561146e57600080fd5b50505b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261147190849061167c565b3390565b600082820183811015611243576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261054090859061167c565b6000818484111561160f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156115d45781810151838201526020016115bc565b50505050905090810190601f1680156116015780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836116665760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156115d45781810151838201526020016115bc565b50600083858161167257fe5b0495945050505050565b60606116d1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661172d9092919063ffffffff16565b805190915015611471578080602001905160208110156116f057600080fd5b50516114715760405162461bcd60e51b815260040180806020018281038252602a81526020018061196a602a913960400191505060405180910390fd5b606061173c8484600085611744565b949350505050565b606061174f856118b1565b6117a0576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106117df5780518252601f1990920191602091820191016117c0565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611841576040519150601f19603f3d011682016040523d82523d6000602084013e611846565b606091505b5091509150811561185a57915061173c9050565b80511561186a5780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156115d45781810151838201526020016115bc565b3b151590565b604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b60405180604001604052806000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212206e4db08fe41affe1f0cc72eb85ace437ea7979bad4af4bb0419d0ecaeac0800b64736f6c634300060c003300000000000000000000000060ca261e14f26e8daae8b1a7f8e783d64859126c0000000000000000000000007fcb8aaea5f30620aa69d1978f1dc814cf0502ad0000000000000000000000000000000000000000000000000000000000b194f000000000000000000000000000000000000000000000025f273933db57000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806377e741c7116100de578063ce872d8711610097578063e369fd2a11610071578063e369fd2a1461040a578063f0f4426014610412578063f150bcb314610438578063f2fde38b146104645761018e565b8063ce872d87146103b9578063db3447b0146103c1578063e2bbb158146103e75761018e565b806377e741c7146102ed5780637abceffd1461030a5780638da5cb5b1461033e57806393f1a40b146103465780639fb79dbc1461038b578063cc32d176146103b15761018e565b8063441a3e701161014b5780635312ea8e116101255780635312ea8e1461029c57806361d027b3146102b9578063630b5ba1146102dd578063715018a6146102e55761018e565b8063441a3e701461023157806347f8e5761461025457806351eb05a61461027f5761018e565b8063081e3eda1461019357806309a38694146101ad57806311afbed2146101cc5780631526fe27146101d457806317caf6f1146102215780633ed5d18314610229575b600080fd5b61019b61048a565b60408051918252519081900360200190f35b6101ca600480360360208110156101c357600080fd5b5035610490565b005b61019b610546565b6101f1600480360360208110156101ea57600080fd5b503561054c565b604080516001600160a01b0390951685526020850193909352838301919091526060830152519081900360800190f35b61019b61058d565b61019b610593565b6101ca6004803603604081101561024757600080fd5b5080359060200135610599565b6101ca6004803603606081101561026a57600080fd5b508035906020810135906040013515156106ad565b6101ca6004803603602081101561029557600080fd5b503561077e565b6101ca600480360360208110156102b257600080fd5b5035610910565b6102c16109a9565b604080516001600160a01b039092168252519081900360200190f35b6101ca6109b8565b6101ca6109db565b6101ca6004803603602081101561030357600080fd5b5035610a7d565b6101ca6004803603606081101561032057600080fd5b508035906001600160a01b0360208201351690604001351515610b31565b6102c1610d14565b6103726004803603604081101561035c57600080fd5b50803590602001356001600160a01b0316610d23565b6040805192835260208301919091528051918290030190f35b61019b600480360360208110156103a157600080fd5b50356001600160a01b0316610d47565b61019b610d59565b61019b610d5f565b61019b600480360360208110156103d757600080fd5b50356001600160a01b0316610d65565b6101ca600480360360408110156103fd57600080fd5b5080359060200135610d9e565b6102c1610e70565b6101ca6004803603602081101561042857600080fd5b50356001600160a01b0316610e7f565b61019b6004803603604081101561044e57600080fd5b50803590602001356001600160a01b0316610ef4565b6101ca6004803603602081101561047a57600080fd5b50356001600160a01b0316611109565b60035490565b6104998161077e565b6000600382815481106104a857fe5b600091825260208083208584526004808352604080862033875290935291842060018101549390920201600381015482549195509193926105059290916104ff9164e8d4a51000916104f99161128c565b9061124a565b90611201565b905061052b64e8d4a510006104f98560030154856000015461128c90919063ffffffff16565b600183015580156105405761054033826112e5565b50505050565b60085481565b6003818154811061055957fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b60065481565b60095481565b6000600383815481106105a857fe5b600091825260208083208684526004808352604080862033875290935291909320805492909102909201925083111561061d576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b61062684610490565b82156106505780546106389084611201565b81558154610650906001600160a01b03163385611476565b6003820154815461066b9164e8d4a51000916104f99161128c565b6001820155604080518481529051859133917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a350505050565b6106b56114c8565b6000546001600160a01b03908116911614610705576040805162461bcd60e51b8152602060048201819052602482015260008051602061194a833981519152604482015290519081900360640190fd5b8015610713576107136109b8565b6107508261074a6003868154811061072757fe5b90600052602060002090600402016001015460065461120190919063ffffffff16565b906114cc565b600681905550816003848154811061076457fe5b906000526020600020906004020160010181905550505050565b60006003828154811061078d57fe5b906000526020600020906004020190506000600a5443106107b057600a546107b2565b435b9050816002015481116107c657505061090d565b8154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561081057600080fd5b505afa158015610824573d6000803e3d6000fd5b505050506040513d602081101561083a57600080fd5b505190508061084f575060029091015561090d565b600061086884600201548461120190919063ffffffff16565b905060006108956006546104f9876001015461088f6008548761128c90919063ffffffff16565b9061128c565b905060006108b46127106104f96007548561128c90919063ffffffff16565b905060006108c28383611201565b6002549091506108db906001600160a01b0316836112e5565b6108fc6108f1866104f98464e8d4a5100061128c565b6003890154906114cc565b600388015550505050600290920155505b50565b60006003828154811061091f57fe5b6000918252602080832085845260048083526040808620338088529452852080548682556001820196909655930201805490945091929161096c916001600160a01b039091169083611476565b604080518281529051859133917fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959181900360200190a350505050565b6002546001600160a01b031681565b60035460005b818110156109d7576109cf8161077e565b6001016109be565b5050565b6109e36114c8565b6000546001600160a01b03908116911614610a33576040805162461bcd60e51b8152602060048201819052602482015260008051602061194a833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610a856114c8565b6000546001600160a01b03908116911614610ad5576040805162461bcd60e51b8152602060048201819052602482015260008051602061194a833981519152604482015290519081900360640190fd5b6103e8811115610b2c576040805162461bcd60e51b815260206004820152601e60248201527f73657454726561737572794665653a206d617820666565206973203130250000604482015290519081900360640190fd5b600755565b610b396114c8565b6000546001600160a01b03908116911614610b89576040805162461bcd60e51b8152602060048201819052602482015260008051602061194a833981519152604482015290519081900360640190fd5b6001600160a01b03821660009081526005602052604090205415610bf4576040805162461bcd60e51b815260206004820152601e60248201527f616464506f6f6c3a204475706c696361746520746f6b656e20706f6f6c2e0000604482015290519081900360640190fd5b8015610c0257610c026109b8565b600654610c0f90846114cc565b60065550604080516080810182526001600160a01b039283168082526020808301958652438385019081526000606085018181526003805460018101825581845296517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b600490980297880180546001600160a01b03191691909a161790985597517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c86015590517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d85015595517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85e9093019290925592549284526005905290912055565b6000546001600160a01b031690565b60046020908152600092835260408084209091529082529020805460019091015482565b60056020526000908152604090205481565b60075481565b600a5481565b6003546000908190815b81811015610d9557610d8b610d848287610ef4565b84906114cc565b9250600101610d6f565b50909392505050565b600060038381548110610dad57fe5b600091825260208083208684526004808352604080862033875290935291909320805492909102909201925015610de757610de784610490565b8215610e13578154610e04906001600160a01b0316333086611526565b8054610e1090846114cc565b81555b60038201548154610e2e9164e8d4a51000916104f99161128c565b6001820155604080518481529051859133917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a350505050565b6001546001600160a01b031681565b6002546001600160a01b03163314610ed2576040805162461bcd60e51b815260206004820152601160248201527073657454726561737572793a207775743f60781b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000610efe6118b7565b60038481548110610f0b57fe5b600091825260209182902060408051608081018252600490930290910180546001600160a01b0316835260018101549383019390935260028301549082015260039091015460608201529050610f5f6118e8565b5060008481526004602081815260408084206001600160a01b0380891686529083528185208251808401845281548152600190910154818501526060870151875184516370a0823160e01b81523097810197909752935191969095909493909216926370a082319260248082019391829003018186803b158015610fe257600080fd5b505afa158015610ff6573d6000803e3d6000fd5b505050506040513d602081101561100c57600080fd5b5051600a54909150600090431061102557600a54611027565b435b905084604001518111801561103b57508115155b156110d357600061105986604001518361120190919063ffffffff16565b905060006110806006546104f9896020015161088f6008548761128c90919063ffffffff16565b9050600061109f6127106104f96007548561128c90919063ffffffff16565b905060006110ad8383611201565b90506110cc6110c5876104f98464e8d4a5100061128c565b88906114cc565b9650505050505b6110fb84602001516104ff64e8d4a510006104f987896000015161128c90919063ffffffff16565b955050505050505b92915050565b6111116114c8565b6000546001600160a01b03908116911614611161576040805162461bcd60e51b8152602060048201819052602482015260008051602061194a833981519152604482015290519081900360640190fd5b6001600160a01b0381166111a65760405162461bcd60e51b81526004018080602001828103825260268152602001806119036026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600061124383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611580565b9392505050565b600061124383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611617565b60008261129b57506000611103565b828202828482816112a857fe5b04146112435760405162461bcd60e51b81526004018080602001828103825260218152602001806119296021913960400191505060405180910390fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561133057600080fd5b505afa158015611344573d6000803e3d6000fd5b505050506040513d602081101561135a57600080fd5b50519050808211156113ee576001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156113bc57600080fd5b505af11580156113d0573d6000803e3d6000fd5b505050506040513d60208110156113e657600080fd5b506114719050565b6001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561144457600080fd5b505af1158015611458573d6000803e3d6000fd5b505050506040513d602081101561146e57600080fd5b50505b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261147190849061167c565b3390565b600082820183811015611243576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261054090859061167c565b6000818484111561160f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156115d45781810151838201526020016115bc565b50505050905090810190601f1680156116015780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836116665760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156115d45781810151838201526020016115bc565b50600083858161167257fe5b0495945050505050565b60606116d1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661172d9092919063ffffffff16565b805190915015611471578080602001905160208110156116f057600080fd5b50516114715760405162461bcd60e51b815260040180806020018281038252602a81526020018061196a602a913960400191505060405180910390fd5b606061173c8484600085611744565b949350505050565b606061174f856118b1565b6117a0576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106117df5780518252601f1990920191602091820191016117c0565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611841576040519150601f19603f3d011682016040523d82523d6000602084013e611846565b606091505b5091509150811561185a57915061173c9050565b80511561186a5780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156115d45781810151838201526020016115bc565b3b151590565b604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b60405180604001604052806000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212206e4db08fe41affe1f0cc72eb85ace437ea7979bad4af4bb0419d0ecaeac0800b64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000060ca261e14f26e8daae8b1a7f8e783d64859126c0000000000000000000000007fcb8aaea5f30620aa69d1978f1dc814cf0502ad0000000000000000000000000000000000000000000000000000000000b194f000000000000000000000000000000000000000000000025f273933db57000000
-----Decoded View---------------
Arg [0] : _stonk (address): 0x60CA261e14F26e8daaE8B1a7F8e783D64859126c
Arg [1] : _treasury (address): 0x7fCb8aAeA5f30620Aa69d1978F1dC814Cf0502ad
Arg [2] : _rewardsEndBlock (uint256): 11638000
Arg [3] : _totalStonkRewards (uint256): 11200000000000000000000
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000060ca261e14f26e8daae8b1a7f8e783d64859126c
Arg [1] : 0000000000000000000000007fcb8aaea5f30620aa69d1978f1dc814cf0502ad
Arg [2] : 0000000000000000000000000000000000000000000000000000000000b194f0
Arg [3] : 00000000000000000000000000000000000000000000025f273933db57000000
Deployed Bytecode Sourcemap
32624:8949:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34878:89;;;:::i;:::-;;;;;;;;;;;;;;;;39118:435;;;;;;;;;;;;;;;;-1:-1:-1;39118:435:0;;:::i;:::-;;34132:28;;;:::i;33905:26::-;;;;;;;;;;;;;;;;-1:-1:-1;33905:26:0;;:::i;:::-;;;;-1:-1:-1;;;;;33905:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34055:34;;;:::i;34165:32::-;;;:::i;40240:533::-;;;;;;;;;;;;;;;;-1:-1:-1;40240:533:0;;;;;;;:::i;36078:325::-;;;;;;;;;;;;;;;;-1:-1:-1;36078:325:0;;;;;;;;;;;;;;:::i;38160:952::-;;;;;;;;;;;;;;;;-1:-1:-1;38160:952:0;;:::i;40840:361::-;;;;;;;;;;;;;;;;-1:-1:-1;40840:361:0;;:::i;33875:23::-;;;:::i;:::-;;;;-1:-1:-1;;;;;33875:23:0;;;;;;;;;;;;;;37926:162;;;:::i;20781:148::-;;;:::i;35844:174::-;;;;;;;;;;;;;;;;-1:-1:-1;35844:174:0;;:::i;35038:557::-;;;;;;;;;;;;;;;;-1:-1:-1;35038:557:0;;;-1:-1:-1;;;;;35038:557:0;;;;;;;;;;;;:::i;20139:79::-;;;:::i;33936:64::-;;;;;;;;;;;;;;;;-1:-1:-1;33936:64:0;;;;;;-1:-1:-1;;;;;33936:64:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34005:43;;;;;;;;;;;;;;;;-1:-1:-1;34005:43:0;-1:-1:-1;;;;;34005:43:0;;:::i;34094:33::-;;;:::i;34202:30::-;;;:::i;37574:273::-;;;;;;;;;;;;;;;;-1:-1:-1;37574:273:0;-1:-1:-1;;;;;37574:273:0;;:::i;39625:561::-;;;;;;;;;;;;;;;;-1:-1:-1;39625:561:0;;;;;;;:::i;33847:23::-;;;:::i;35657:139::-;;;;;;;;;;;;;;;;-1:-1:-1;35657:139:0;-1:-1:-1;;;;;35657:139:0;;:::i;36464:1018::-;;;;;;;;;;;;;;;;-1:-1:-1;36464:1018:0;;;;;;-1:-1:-1;;;;;36464:1018:0;;:::i;21084:244::-;;;;;;;;;;;;;;;;-1:-1:-1;21084:244:0;-1:-1:-1;;;;;21084:244:0;;:::i;34878:89::-;34946:8;:15;34878:89;:::o;39118:435::-;39178:16;39189:4;39178:10;:16::i;:::-;39203:21;39227:8;39236:4;39227:14;;;;;;;;;;;;;;;;39272;;;39227;39272;;;;;;;39287:10;39272:26;;;;;;;;39378:15;;;;39227:14;;;;;39341:21;;;;39325:11;;39227:14;;-1:-1:-1;39272:26:0;;39227:14;39325:69;;39378:15;;39325:48;;39368:4;;39325:38;;:15;:38::i;:::-;:42;;:48::i;:::-;:52;;:69::i;:::-;39307:87;;39419:48;39462:4;39419:38;39435:4;:21;;;39419:4;:11;;;:15;;:38;;;;:::i;:48::-;39401:15;;;:66;39480:11;;39476:72;;39502:38;39520:10;39532:7;39502:17;:38::i;:::-;39118:435;;;;:::o;34132:28::-;;;;:::o;33905:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33905:26:0;;;;-1:-1:-1;33905:26:0;;;:::o;34055:34::-;;;;:::o;34165:32::-;;;;:::o;40240:533::-;40303:21;40327:8;40336:4;40327:14;;;;;;;;;;;;;;;;40372;;;40327;40372;;;;;;;40387:10;40372:26;;;;;;;;;40415:11;;40327:14;;;;;;;;-1:-1:-1;;;40415:22:0;40407:53;;;;;-1:-1:-1;;;40407:53:0;;;;;;;;;;;;-1:-1:-1;;;40407:53:0;;;;;;;;;;;;;;;40469:28;40492:4;40469:22;:28::i;:::-;40510:11;;40506:138;;40546:11;;:24;;40562:7;40546:15;:24::i;:::-;40532:38;;40581:12;;:55;;-1:-1:-1;;;;;40581:12:0;40615:10;40628:7;40581:25;:55::i;:::-;40686:21;;;;40670:11;;:48;;40713:4;;40670:38;;:15;:38::i;:48::-;40652:15;;;:66;40732:35;;;;;;;;40753:4;;40741:10;;40732:35;;;;;;;;;40240:533;;;;:::o;36078:325::-;20361:12;:10;:12::i;:::-;20351:6;;-1:-1:-1;;;;;20351:6:0;;;:22;;;20343:67;;;;;-1:-1:-1;;;20343:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20343:67:0;;;;;;;;;;;;;;;36201:11:::1;36197:51;;;36223:17;:15;:17::i;:::-;36274:77;36333:11;36274:46;36294:8;36303:4;36294:14;;;;;;;;;;;;;;;;;;:25;;;36274:15;;:19;;:46;;;;:::i;:::-;:50:::0;::::1;:77::i;:::-;36256:15;:95;;;;36386:11;36358:8;36367:4;36358:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;36078:325:::0;;;:::o;38160:952::-;38208:21;38232:8;38241:4;38232:14;;;;;;;;;;;;;;;;;;38208:38;;38253:19;38290:15;;38275:12;:30;:77;;38337:15;;38275:77;;;38315:12;38275:77;38253:99;;38380:4;:20;;;38365:11;:35;38361:64;;38411:7;;;;38361:64;38452:12;;:37;;;-1:-1:-1;;;38452:37:0;;38483:4;38452:37;;;;;;38433:16;;-1:-1:-1;;;;;38452:12:0;;:22;;:37;;;;;;;;;;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38452:37:0;;-1:-1:-1;38502:13:0;38498:85;;-1:-1:-1;38526:20:0;;;;:34;38569:7;;38498:85;38591:18;38612:37;38628:4;:20;;;38612:11;:15;;:37;;;;:::i;:::-;38591:58;;38656:19;38678:95;38757:15;;38678:66;38728:4;:15;;;38678:37;38701:13;;38678:10;:22;;:37;;;;:::i;:::-;:49;;:66::i;:95::-;38656:117;;38782:22;38807:39;38840:5;38807:28;38823:11;;38807;:15;;:28;;;;:::i;:39::-;38782:64;-1:-1:-1;38853:18:0;38874:31;:11;38782:64;38874:15;:31::i;:::-;38932:8;;38853:52;;-1:-1:-1;38914:43:0;;-1:-1:-1;;;;;38932:8:0;38942:14;38914:17;:43::i;:::-;38990:75;39024:34;39049:8;39024:20;:10;39039:4;39024:14;:20::i;:34::-;38990:21;;;;;:25;:75::i;:::-;38966:21;;;:99;-1:-1:-1;;;;39072:20:0;;;;:34;-1:-1:-1;38160:952:0;;:::o;40840:361::-;40895:21;40919:8;40928:4;40919:14;;;;;;;;;;;;;;;;40964;;;40919;40964;;;;;;;40979:10;40964:26;;;;;;;41014:11;;41034:15;;;-1:-1:-1;41056:15:0;;:19;;;;40919:14;;;41084:12;;40919:14;;-1:-1:-1;40964:26:0;;41014:11;41084:54;;-1:-1:-1;;;;;41084:12:0;;;;41014:11;41084:25;:54::i;:::-;41152:43;;;;;;;;41182:4;;41170:10;;41152:43;;;;;;;;;40840:361;;;;:::o;33875:23::-;;;-1:-1:-1;;;;;33875:23:0;;:::o;37926:162::-;37984:8;:15;37967:14;38008:75;38036:6;38030:3;:12;38008:75;;;38060:15;38071:3;38060:10;:15::i;:::-;38044:5;;38008:75;;;;37926:162;:::o;20781:148::-;20361:12;:10;:12::i;:::-;20351:6;;-1:-1:-1;;;;;20351:6:0;;;:22;;;20343:67;;;;;-1:-1:-1;;;20343:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20343:67:0;;;;;;;;;;;;;;;20888:1:::1;20872:6:::0;;20851:40:::1;::::0;-1:-1:-1;;;;;20872:6:0;;::::1;::::0;20851:40:::1;::::0;20888:1;;20851:40:::1;20919:1;20902:19:::0;;-1:-1:-1;;;;;;20902:19:0::1;::::0;;20781:148::o;35844:174::-;20361:12;:10;:12::i;:::-;20351:6;;-1:-1:-1;;;;;20351:6:0;;;:22;;;20343:67;;;;;-1:-1:-1;;;20343:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20343:67:0;;;;;;;;;;;;;;;35940:4:::1;35924:12;:20;;35916:63;;;::::0;;-1:-1:-1;;;35916:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;35986:11;:26:::0;35844:174::o;35038:557::-;20361:12;:10;:12::i;:::-;20351:6;;-1:-1:-1;;;;;20351:6:0;;;:22;;;20343:67;;;;;-1:-1:-1;;;20343:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20343:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;35163:27:0;::::1;;::::0;;;:8:::1;:27;::::0;;;;;:32;35155:75:::1;;;::::0;;-1:-1:-1;;;35155:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;35243:11;35239:51;;;35265:17;:15;:17::i;:::-;35316:15;::::0;:32:::1;::::0;35336:11;35316:19:::1;:32::i;:::-;35298:15;:50:::0;-1:-1:-1;35379:151:0::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;35379:151:0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;35478:12:::1;35379:151:::0;;;;;;-1:-1:-1;35379:151:0;;;;;;35357:8:::1;:180:::0;;::::1;::::0;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;35357:180:0::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;;;;35574:15;;35544:27;;;:8:::1;:27:::0;;;;;:45;35038:557::o;20139:79::-;20177:7;20204:6;-1:-1:-1;;;;;20204:6:0;20139:79;:::o;33936:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34005:43::-;;;;;;;;;;;;;:::o;34094:33::-;;;;:::o;34202:30::-;;;;:::o;37574:273::-;37694:8;:15;37637:7;;;;;37718:103;37746:6;37740:3;:12;37718:103;;;37778:35;37788:24;37801:3;37806:5;37788:12;:24::i;:::-;37778:5;;:9;:35::i;:::-;37770:43;-1:-1:-1;37754:5:0;;37718:103;;;-1:-1:-1;37836:5:0;;37574:273;-1:-1:-1;;;37574:273:0:o;39625:561::-;39687:21;39711:8;39720:4;39711:14;;;;;;;;;;;;;;;;39756;;;39711;39756;;;;;;;39771:10;39756:26;;;;;;;;;39795:11;;39711:14;;;;;;;;-1:-1:-1;39795:15:0;39791:66;;39821:28;39844:4;39821:22;:28::i;:::-;39869:11;;39865:193;;39891:12;;:110;;-1:-1:-1;;;;;39891:12:0;39939:10;39969:4;39985:7;39891:29;:110::i;:::-;40026:11;;:24;;40042:7;40026:15;:24::i;:::-;40012:38;;39865:193;40100:21;;;;40084:11;;:48;;40127:4;;40084:38;;:15;:38::i;:48::-;40066:15;;;:66;40146:34;;;;;;;;40166:4;;40154:10;;40146:34;;;;;;;;;39625:561;;;;:::o;33847:23::-;;;-1:-1:-1;;;;;33847:23:0;;:::o;35657:139::-;35733:8;;-1:-1:-1;;;;;35733:8:0;35719:10;:22;35711:52;;;;;-1:-1:-1;;;35711:52:0;;;;;;;;;;;;-1:-1:-1;;;35711:52:0;;;;;;;;;;;;;;;35770:8;:20;;-1:-1:-1;;;;;;35770:20:0;-1:-1:-1;;;;;35770:20:0;;;;;;;;;;35657:139::o;36464:1018::-;36551:7;36570:20;;:::i;:::-;36593:8;36602:4;36593:14;;;;;;;;;;;;;;;;;36570:37;;;;;;;;36593:14;;;;;;;36570:37;;-1:-1:-1;;;;;36570:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36614:20:0;;:::i;:::-;-1:-1:-1;36637:14:0;;;;:8;:14;;;;;;;;-1:-1:-1;;;;;36637:21:0;;;;;;;;;;;36614:44;;;;;;;;;;;;;;;;;;;;36694:21;;;;36741:12;;:37;;-1:-1:-1;;;36741:37:0;;36772:4;36741:37;;;;;;;;;36614:44;;36694:21;;36637:14;;36741:22;;;;;;;:37;;;;;;;;;;;:22;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36741:37:0;36822:15;;36741:37;;-1:-1:-1;36785:19:0;;36807:12;:30;:77;;36869:15;;36807:77;;;36847:12;36807:77;36785:99;;36911:4;:20;;;36897:11;:34;:51;;;;-1:-1:-1;36935:13:0;;;36897:51;36893:504;;;36959:18;36980:37;36996:4;:20;;;36980:11;:15;;:37;;;;:::i;:::-;36959:58;;37026:19;37048:101;37133:15;;37048:70;37102:4;:15;;;37048:39;37073:13;;37048:10;:24;;:39;;;;:::i;:101::-;37026:123;;37160:22;37185:39;37218:5;37185:28;37201:11;;37185;:15;;:28;;;;:::i;:39::-;37160:64;-1:-1:-1;37233:18:0;37254:31;:11;37160:64;37254:15;:31::i;:::-;37233:52;-1:-1:-1;37315:74:0;37346:34;37371:8;37346:20;37233:52;37361:4;37346:14;:20::i;:34::-;37315:16;;:20;:74::i;:::-;37296:93;;36893:504;;;;;37412:64;37460:4;:15;;;37412:43;37450:4;37412:33;37428:16;37412:4;:11;;;:15;;:33;;;;:::i;:64::-;37405:71;;;;;;;36464:1018;;;;;:::o;21084:244::-;20361:12;:10;:12::i;:::-;20351:6;;-1:-1:-1;;;;;20351:6:0;;;:22;;;20343:67;;;;;-1:-1:-1;;;20343:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20343:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21173:22:0;::::1;21165:73;;;;-1:-1:-1::0;;;21165:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21275:6;::::0;;21254:38:::1;::::0;-1:-1:-1;;;;;21254:38:0;;::::1;::::0;21275:6;::::1;::::0;21254:38:::1;::::0;::::1;21303:6;:17:::0;;-1:-1:-1;;;;;;21303:17:0::1;-1:-1:-1::0;;;;;21303:17:0;;;::::1;::::0;;;::::1;::::0;;21084:244::o;4281:136::-;4339:7;4366:43;4370:1;4373;4366:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4359:50;4281:136;-1:-1:-1;;;4281:136:0:o;6118:132::-;6176:7;6203:39;6207:1;6210;6203:39;;;;;;;;;;;;;;;;;:3;:39::i;5171:471::-;5229:7;5474:6;5470:47;;-1:-1:-1;5504:1:0;5497:8;;5470:47;5541:5;;;5545:1;5541;:5;:1;5565:5;;;;;:10;5557:56;;;;-1:-1:-1;;;5557:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41313:257;41405:5;;:30;;;-1:-1:-1;;;41405:30:0;;41429:4;41405:30;;;;;;41386:16;;-1:-1:-1;;;;;41405:5:0;;:15;;:30;;;;;;;;;;;;;;:5;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41405:30:0;;-1:-1:-1;41448:18:0;;;41444:121;;;41477:5;;:29;;;-1:-1:-1;;;41477:29:0;;-1:-1:-1;;;;;41477:29:0;;;;;;;;;;;;;;;:5;;;;;:14;;:29;;;;;;;;;;;;;;:5;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41444:121:0;;-1:-1:-1;41444:121:0;;41529:5;;:28;;;-1:-1:-1;;;41529:28:0;;-1:-1:-1;;;;;41529:28:0;;;;;;;;;;;;;;;:5;;;;;:14;;:28;;;;;;;;;;;;;;:5;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41444:121:0;41313:257;;;:::o;14987:177::-;15097:58;;;-1:-1:-1;;;;;15097:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15097:58:0;-1:-1:-1;;;15097:58:0;;;15070:86;;15090:5;;15070:19;:86::i;18695:106::-;18783:10;18695:106;:::o;3817:181::-;3875:7;3907:5;;;3931:6;;;;3923:46;;;;;-1:-1:-1;;;3923:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;15172:205;15300:68;;;-1:-1:-1;;;;;15300:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15300:68:0;-1:-1:-1;;;15300:68:0;;;15273:96;;15293:5;;15273:19;:96::i;4720:192::-;4806:7;4842:12;4834:6;;;;4826:29;;;;-1:-1:-1;;;4826:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4878:5:0;;;4720:192::o;6746:278::-;6832:7;6867:12;6860:5;6852:28;;;;-1:-1:-1;;;6852:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6891:9;6907:1;6903;:5;;;;;;;6746:278;-1:-1:-1;;;;;6746:278:0:o;17292:761::-;17716:23;17742:69;17770:4;17742:69;;;;;;;;;;;;;;;;;17750:5;-1:-1:-1;;;;;17742:27:0;;;:69;;;;;:::i;:::-;17826:17;;17716:95;;-1:-1:-1;17826:21:0;17822:224;;17968:10;17957:30;;;;;;;;;;;;;;;-1:-1:-1;17957:30:0;17949:85;;;;-1:-1:-1;;;17949:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11970:196;12073:12;12105:53;12128:6;12136:4;12142:1;12145:12;12105:22;:53::i;:::-;12098:60;11970:196;-1:-1:-1;;;;11970:196:0:o;13347:979::-;13477:12;13510:18;13521:6;13510:10;:18::i;:::-;13502:60;;;;;-1:-1:-1;;;13502:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13636:12;13650:23;13677:6;-1:-1:-1;;;;;13677:11:0;13697:8;13708:4;13677:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13677:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13635:78;;;;13728:7;13724:595;;;13759:10;-1:-1:-1;13752:17:0;;-1:-1:-1;13752:17:0;13724:595;13873:17;;:21;13869:439;;14136:10;14130:17;14197:15;14184:10;14180:2;14176:19;14169:44;14084:148;14272:20;;-1:-1:-1;;;14272:20:0;;;;;;;;;;;;;;;;;14279:12;;14272:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9052:422;9419:20;9458:8;;;9052:422::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://6e4db08fe41affe1f0cc72eb85ace437ea7979bad4af4bb0419d0ecaeac0800b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.305455 | 920.3234 | $281.12 |
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.