Source Code
Latest 25 from a total of 2,791 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 24499702 | 36 hrs ago | IN | 0 ETH | 0.00001316 | ||||
| Withdraw | 24342932 | 23 days ago | IN | 0 ETH | 0.00007778 | ||||
| Withdraw | 24106686 | 56 days ago | IN | 0 ETH | 0.00000457 | ||||
| Withdraw | 24051791 | 64 days ago | IN | 0 ETH | 0.00025875 | ||||
| Deposit | 23948271 | 78 days ago | IN | 0 ETH | 0.00022263 | ||||
| Withdraw | 23948107 | 78 days ago | IN | 0 ETH | 0.00028252 | ||||
| Withdraw | 23724886 | 109 days ago | IN | 0 ETH | 0.00038652 | ||||
| Withdraw | 23659424 | 119 days ago | IN | 0 ETH | 0.00026478 | ||||
| Withdraw | 23487835 | 143 days ago | IN | 0 ETH | 0.00004224 | ||||
| Deposit | 23487831 | 143 days ago | IN | 0 ETH | 0.00005501 | ||||
| Withdraw | 23458941 | 147 days ago | IN | 0 ETH | 0.00001009 | ||||
| Deposit | 23458914 | 147 days ago | IN | 0 ETH | 0.00001315 | ||||
| Withdraw | 23411839 | 153 days ago | IN | 0 ETH | 0.00007555 | ||||
| Deposit | 23411831 | 153 days ago | IN | 0 ETH | 0.00012416 | ||||
| Deposit | 22986748 | 213 days ago | IN | 0 ETH | 0.00027159 | ||||
| Withdraw | 22934045 | 220 days ago | IN | 0 ETH | 0.00150107 | ||||
| Withdraw | 22709836 | 251 days ago | IN | 0 ETH | 0.00007344 | ||||
| Deposit | 22709348 | 251 days ago | IN | 0 ETH | 0.00007013 | ||||
| Withdraw | 22707642 | 252 days ago | IN | 0 ETH | 0.00007045 | ||||
| Deposit | 22707634 | 252 days ago | IN | 0 ETH | 0.00009341 | ||||
| Withdraw | 22638735 | 261 days ago | IN | 0 ETH | 0.00024297 | ||||
| Deposit | 22638730 | 261 days ago | IN | 0 ETH | 0.00036433 | ||||
| Withdraw | 22053742 | 343 days ago | IN | 0 ETH | 0.00007737 | ||||
| Deposit | 22053361 | 343 days ago | IN | 0 ETH | 0.00010866 | ||||
| Withdraw | 21942148 | 359 days ago | IN | 0 ETH | 0.00047187 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 24499702 | 36 hrs ago | 0.51898826 ETH | ||||
| Transfer | 24499702 | 36 hrs ago | 0.04406314 ETH | ||||
| Transfer | 24499702 | 36 hrs ago | 0.04406314 ETH | ||||
| Transfer | 24342932 | 23 days ago | 0.02658547 ETH | ||||
| Transfer | 24342932 | 23 days ago | 0.01424105 ETH | ||||
| Transfer | 24342932 | 23 days ago | 0.01424105 ETH | ||||
| Transfer | 24106686 | 56 days ago | 0.10738621 ETH | ||||
| Transfer | 24106686 | 56 days ago | 0.00525318 ETH | ||||
| Transfer | 24106686 | 56 days ago | 0.00525318 ETH | ||||
| Transfer | 24051791 | 64 days ago | 0.03080053 ETH | ||||
| Transfer | 24051791 | 64 days ago | 0.0658395 ETH | ||||
| Transfer | 24051791 | 64 days ago | 0.0658395 ETH | ||||
| Transfer | 23948107 | 78 days ago | 0.00276019 ETH | ||||
| Transfer | 23948107 | 78 days ago | 0.02402324 ETH | ||||
| Transfer | 23948107 | 78 days ago | 0.02402324 ETH | ||||
| Transfer | 23724886 | 109 days ago | 0.17058962 ETH | ||||
| Transfer | 23724886 | 109 days ago | 0.0360766 ETH | ||||
| Transfer | 23724886 | 109 days ago | 0.0360766 ETH | ||||
| Transfer | 23659424 | 119 days ago | 0.32922425 ETH | ||||
| Transfer | 23659424 | 119 days ago | 0.03819869 ETH | ||||
| Transfer | 23659424 | 119 days ago | 0.03819869 ETH | ||||
| Transfer | 23487831 | 143 days ago | 0.01043063 ETH | ||||
| Transfer | 23487831 | 143 days ago | 0.00566022 ETH | ||||
| Transfer | 23487831 | 143 days ago | 0.00566022 ETH | ||||
| Transfer | 23458914 | 147 days ago | 0.06871445 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
JayLiquidityStaking
Compiler Version
v0.8.16+commit.07a7930e
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.16;
import {ReentrancyGuard} from "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import {IERC20, SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import {JayFeeSplitter} from "./JayFeeSplitter.sol";
contract JayLiquidityStaking is ReentrancyGuard, Ownable {
using SafeERC20 for IERC20;
JayFeeSplitter FEE_ADDRESS;
uint256 private constant FACTOR = 10 ** 18;
IERC20 public immutable liquidityToken;
struct UserInfo {
uint256 shares; // shares of token staked
uint256 rewardPerTokenOnEntry; // user reward per token paid
}
// Reward per token stored
uint256 public rewardPerTokenStored;
uint256 public totalAmountStaked;
uint256 public previusRewardTotal;
mapping(address => UserInfo) public userInfo;
bool public init = false;
bool public start = false;
event Deposit(address indexed user, uint256 amount);
event Harvest(address indexed user, uint256 harvestedAmount);
event Withdraw(address indexed user, uint256 amount);
constructor(address _liquidityToken) {
liquidityToken = IERC20(_liquidityToken);
}
function setFeeAddress(address _address) external onlyOwner {
require(_address != address(0x0));
FEE_ADDRESS = JayFeeSplitter(payable(_address));
}
function initalize(
uint256 _initialLPs,
address[] memory _addresses,
uint256[] memory _balances
) public onlyOwner {
require(!init, "Contract already initialized");
init = true;
uint256 total = 0;
for (uint256 i = 0; i < _addresses.length; i++) {
userInfo[_addresses[i]] = UserInfo({
shares: _balances[i],
rewardPerTokenOnEntry: 0
});
total += _balances[i];
}
require(total == _initialLPs, "Totals dont match");
totalAmountStaked = total;
liquidityToken.transferFrom(msg.sender, address(this), _initialLPs);
}
// start trading
function setStart() public onlyOwner {
start = true;
}
/*
* Name: sendEth
* Purpose: Tranfer ETH tokens
* Parameters:
* - @param 1: Address
* - @param 2: Value
* Return: n/a
*/
function sendEth(uint256 _value) private {
(bool success, ) = msg.sender.call{value: _value}("");
require(success, "ETH Transfer failed.");
}
/**
* @notice Claim reward tokens that are pending
*/
function claim() private returns (uint256) {
// Retrieve pending rewards
FEE_ADDRESS.splitFees();
// Get the balance of the contract
uint256 contractBalance = address(this).balance;
// Update rewardPerTokenStored in contract state after rewards are added from FEE_ADDRESS
rewardPerTokenStored =
rewardPerTokenStored +
((contractBalance - previusRewardTotal) * (FACTOR)) /
(totalAmountStaked);
// Get the users pending rewards based on their current share balance
uint256 pendingRewards = (userInfo[msg.sender].shares *
(rewardPerTokenStored -
userInfo[msg.sender].rewardPerTokenOnEntry)) / (FACTOR);
// Save the contract balance so it equals the balaance AFTER the users eth is tranfered in deposit/withdraw
previusRewardTotal = contractBalance - (pendingRewards);
emit Harvest(msg.sender, pendingRewards);
return pendingRewards;
}
/**
* @notice Deposit staked tokens and collect reward tokens
*/
function deposit(uint256 amount) external nonReentrant {
// Get the users pending rewards and update contract state
// If no tokens are currently staked reset the contract
uint256 pendingRewards = 0;
if (totalAmountStaked > 0) pendingRewards = claim();
else {
rewardPerTokenStored = 0;
previusRewardTotal = 0;
}
// Update the users share information
userInfo[msg.sender].shares += amount;
_setUserEntry();
// Increase totalAmountStaked
totalAmountStaked += amount;
// Transfer liquidity from user to contract
liquidityToken.safeTransferFrom(msg.sender, address(this), amount);
// Send pending eth reward to user
if (pendingRewards > 0) {
sendEth(pendingRewards);
}
emit Deposit(msg.sender, amount);
}
/**
* @notice Withdraw staked tokens and collect reward tokens
*/
function withdraw(uint256 amount) external nonReentrant {
require(start);
// Get the users pending rewards and update contract state
uint256 pendingRewards = claim();
// Update the users share information
userInfo[msg.sender].shares -= amount;
_setUserEntry();
// Adjust total amount staked
totalAmountStaked -= amount;
// Transfer liquidity to user from contract
liquidityToken.safeTransfer(msg.sender, amount);
// Send pending eth reward to user
if (pendingRewards > 0) {
sendEth(pendingRewards);
}
emit Withdraw(msg.sender, amount);
}
function getReward(address _address) public view returns (uint256) {
if (totalAmountStaked > 0) {
uint256 _rewardPerTokenStored = rewardPerTokenStored +
((address(this).balance +
(address(FEE_ADDRESS).balance) -
(previusRewardTotal)) * (FACTOR)) /
(totalAmountStaked);
return
(userInfo[_address].shares *
(_rewardPerTokenStored -
userInfo[_address].rewardPerTokenOnEntry)) / (FACTOR);
} else {
return 0;
}
}
function _setUserEntry() internal {
if (userInfo[msg.sender].shares == 0) {
userInfo[msg.sender].rewardPerTokenOnEntry = 0;
} else {
userInfo[msg.sender].rewardPerTokenOnEntry = rewardPerTokenStored;
}
}
function getStaked(address _address) public view returns (uint256) {
return userInfo[_address].shares;
}
function getTotalStaked() public view returns (uint256) {
return totalAmountStaked;
}
function getBal() public view returns (uint256) {
return address(this).balance;
}
function getRewardPerTokenStored() public view returns (uint256) {
if (totalAmountStaked > 0)
return
rewardPerTokenStored +
((address(this).balance +
(address(FEE_ADDRESS).balance) -
(previusRewardTotal)) * (FACTOR)) /
(totalAmountStaked);
else return 0;
}
receive() external payable {}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
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 {
_transferOwnership(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");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";
/**
* @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.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead 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, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override 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 this function is
* overridden;
*
* 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 virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, 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}.
*
* NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, 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}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(
address from,
address to,
uint256 amount
) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
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) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + 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) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `from` to `to`.
*
* This 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:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(
address from,
address to,
uint256 amount
) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, 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:
*
* - `account` 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 += amount;
unchecked {
// Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
_afterTokenTransfer(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);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
// Overflow not possible: amount <= accountBalance <= totalSupply.
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(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 Updates `owner` s allowance for `spender` based on spent `amount`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(
address owner,
address spender,
uint256 amount
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
/**
* @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 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 {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
*
* Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
* need to send a transaction, and thus is not required to hold Ether at all.
*/
interface IERC20Permit {
/**
* @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
* given ``owner``'s signed approval.
*
* IMPORTANT: The same issues {IERC20-approve} has related to transaction
* ordering also apply here.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `deadline` must be a timestamp in the future.
* - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
* over the EIP712-formatted function arguments.
* - the signature must use ``owner``'s current nonce (see {nonces}).
*
* For more information on the signature format, see the
* https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
* section].
*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
/**
* @dev Returns the current nonce for `owner`. This value must be
* included whenever a signature is generated for {permit}.
*
* Every successful call to {permit} increases ``owner``'s nonce by one. This
* prevents a signature from being used multiple times.
*/
function nonces(address owner) external view returns (uint256);
/**
* @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
*/
// solhint-disable-next-line func-name-mixedcase
function DOMAIN_SEPARATOR() external view returns (bytes32);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)
pragma solidity ^0.8.0;
import "../ERC20.sol";
import "../../../utils/Context.sol";
/**
* @dev Extension of {ERC20} that allows token holders to destroy both their own
* tokens and those that they have an allowance for, in a way that can be
* recognized off-chain (via event analysis).
*/
abstract contract ERC20Burnable is Context, ERC20 {
/**
* @dev Destroys `amount` tokens from the caller.
*
* See {ERC20-_burn}.
*/
function burn(uint256 amount) public virtual {
_burn(_msgSender(), amount);
}
/**
* @dev Destroys `amount` tokens from `account`, deducting from the caller's
* allowance.
*
* See {ERC20-_burn} and {ERC20-allowance}.
*
* Requirements:
*
* - the caller must have allowance for ``accounts``'s tokens of at least
* `amount`.
*/
function burnFrom(address account, uint256 amount) public virtual {
_spendAllowance(account, _msgSender(), amount);
_burn(account, amount);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
import "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @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);
/**
* @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 `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, 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 `from` to `to` 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 from,
address to,
uint256 amount
) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.0;
import "../IERC20.sol";
import "../extensions/draft-IERC20Permit.sol";
import "../../../utils/Address.sol";
/**
* @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'
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));
}
}
function safePermit(
IERC20Permit token,
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) internal {
uint256 nonceBefore = token.nonces(owner);
token.permit(owner, spender, value, deadline, v, r, s);
uint256 nonceAfter = token.nonces(owner);
require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
}
/**
* @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
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @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
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 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");
(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 functionCallWithValue(target, data, 0, "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");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, 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) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, 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) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
// 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
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
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) {
return msg.data;
}
}//SPDX-License-Identifier: MIT
pragma solidity 0.8.16;
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import {ReentrancyGuard} from "@openzeppelin/contracts/security/ReentrancyGuard.sol";
contract JayFeeSplitter is Ownable, ReentrancyGuard {
address payable private TEAM_WALLET;
address payable private LP_WALLET;
address payable private NFT_WALLET;
uint256 public constant MIN = 1 * 10 ** 15;
constructor() {}
/*
* Name: splitFees
* Purpose: Tranfer ETH to staking contracts and team
* Parameters: n/a
* Return: n/a
*/
function splitFees() external nonReentrant {
uint256 eth = address(this).balance / (3);
if (eth > MIN) {
sendEth(TEAM_WALLET, eth);
sendEth(LP_WALLET, eth);
sendEth(NFT_WALLET, eth);
}
}
function setTEAMWallet(address _address) external onlyOwner {
require(_address != address(0x0));
TEAM_WALLET = payable(_address);
}
function setNFTWallet(address _address) external onlyOwner {
require(_address != address(0x0));
NFT_WALLET = payable(_address);
}
function setLPWallet(address _address) external onlyOwner {
require(_address != address(0x0));
LP_WALLET = payable(_address);
}
/*
* Name: sendEth
* Purpose: Tranfer ETH tokens
* Parameters:
* - @param 1: Address
* - @param 2: Value
* Return: n/a
*/
function sendEth(address _address, uint256 _value) internal {
(bool success, ) = _address.call{value: _value}("");
require(success, "ETH Transfer failed.");
}
receive() external payable {}
}{
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_liquidityToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"harvestedAmount","type":"uint256"}],"name":"Harvest","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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"init","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_initialLPs","type":"uint256"},{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_balances","type":"uint256[]"}],"name":"initalize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"previusRewardTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAmountStaked","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":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"rewardPerTokenOnEntry","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60a06040526000600760006101000a81548160ff0219169083151502179055506000600760016101000a81548160ff0219169083151502179055503480156200004757600080fd5b50604051620026063803806200260683398181016040528101906200006d919062000208565b60016000819055506200009562000089620000d060201b60201c565b620000d860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050506200023a565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001d082620001a3565b9050919050565b620001e281620001c3565b8114620001ee57600080fd5b50565b6000815190506200020281620001d7565b92915050565b6000602082840312156200022157620002206200019e565b5b60006200023184828501620001f1565b91505092915050565b60805161239b6200026b6000396000818161057401528181610698015281816108610152610b19015261239b6000f3fe6080604052600436106101235760003560e01c80638d869342116100a0578063df136d6511610064578063df136d65146103bb578063e1c7392a146103e6578063e34d5d2714610411578063f2fde38b1461043c578063fe961f61146104655761012a565b80638d869342146102d45780638da5cb5b146102ff578063b6b55f251461032a578063be9a655514610353578063c00007b01461037e5761012a565b8063399080ec116100e7578063399080ec1461020357806343cd8f7e1461024057806354cde9f81461026b578063715018a6146102945780638705fcd4146102ab5761012a565b80630917e7761461012f5780631959a0021461015a57806325caa262146101985780632e1a7d4d146101c357806335975a37146101ec5761012a565b3661012a57005b600080fd5b34801561013b57600080fd5b50610144610490565b60405161015191906116af565b60405180910390f35b34801561016657600080fd5b50610181600480360381019061017c919061173c565b61049a565b60405161018f929190611769565b60405180910390f35b3480156101a457600080fd5b506101ad6104be565b6040516101ba91906116af565b60405180910390f35b3480156101cf57600080fd5b506101ea60048036038101906101e591906117be565b6104c6565b005b3480156101f857600080fd5b50610201610625565b005b34801561020f57600080fd5b5061022a6004803603810190610225919061173c565b61064a565b60405161023791906116af565b60405180910390f35b34801561024c57600080fd5b50610255610696565b604051610262919061184a565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d9190611a81565b6106ba565b005b3480156102a057600080fd5b506102a9610906565b005b3480156102b757600080fd5b506102d260048036038101906102cd919061173c565b61091a565b005b3480156102e057600080fd5b506102e961099f565b6040516102f691906116af565b60405180910390f35b34801561030b57600080fd5b50610314610a39565b6040516103219190611b1b565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c91906117be565b610a63565b005b34801561035f57600080fd5b50610368610bcb565b6040516103759190611b51565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a0919061173c565b610bde565b6040516103b291906116af565b60405180910390f35b3480156103c757600080fd5b506103d0610d2d565b6040516103dd91906116af565b60405180910390f35b3480156103f257600080fd5b506103fb610d33565b6040516104089190611b51565b60405180910390f35b34801561041d57600080fd5b50610426610d46565b60405161043391906116af565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e919061173c565b610d4c565b005b34801561047157600080fd5b5061047a610dcf565b60405161048791906116af565b60405180910390f35b6000600454905090565b60066020528060005260406000206000915090508060000154908060010154905082565b600047905090565b6104ce610dd5565b600760019054906101000a900460ff166104e757600080fd5b60006104f1610e24565b905081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282546105459190611b9b565b9250508190555061055461100a565b81600460008282546105669190611b9b565b925050819055506105b833837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166110ed9092919063ffffffff16565b60008111156105cb576105ca81611173565b5b3373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648360405161061191906116af565b60405180910390a250610622611223565b50565b61062d61122d565b6001600760016101000a81548160ff021916908315150217905550565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6106c261122d565b600760009054906101000a900460ff1615610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070990611c2c565b60405180910390fd5b6001600760006101000a81548160ff0219169083151502179055506000805b835181101561081557604051806040016040528084838151811061075857610757611c4c565b5b6020026020010151815260200160008152506006600086848151811061078157610780611c4c565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050508281815181106107ed576107ec611c4c565b5b6020026020010151826108009190611c7b565b9150808061080d90611caf565b915050610731565b50838114610858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084f90611d43565b60405180910390fd5b806004819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b81526004016108bc93929190611d63565b6020604051808303816000875af11580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff9190611dc6565b5050505050565b61090e61122d565b61091860006112ab565b565b61092261122d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361095b57600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806004541115610a3157600454670de0b6b3a7640000600554600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1631476109ff9190611c7b565b610a099190611b9b565b610a139190611df3565b610a1d9190611e7c565b600354610a2a9190611c7b565b9050610a36565b600090505b90565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a6b610dd5565b6000806004541115610a8657610a7f610e24565b9050610a97565b600060038190555060006005819055505b81600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254610ae99190611c7b565b92505081905550610af861100a565b8160046000828254610b0a9190611c7b565b92505081905550610b5e3330847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611371909392919063ffffffff16565b6000811115610b7157610b7081611173565b5b3373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c83604051610bb791906116af565b60405180910390a250610bc8611223565b50565b600760019054906101000a900460ff1681565b6000806004541115610d23576000600454670de0b6b3a7640000600554600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163147610c409190611c7b565b610c4a9190611b9b565b610c549190611df3565b610c5e9190611e7c565b600354610c6b9190611c7b565b9050670de0b6b3a7640000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015482610cc49190611b9b565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610d119190611df3565b610d1b9190611e7c565b915050610d28565b600090505b919050565b60035481565b600760009054906101000a900460ff1681565b60055481565b610d5461122d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba90611f1f565b60405180910390fd5b610dcc816112ab565b50565b60045481565b600260005403610e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1190611f8b565b60405180910390fd5b6002600081905550565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f61510896040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e9057600080fd5b505af1158015610ea4573d6000803e3d6000fd5b505050506000479050600454670de0b6b3a764000060055483610ec79190611b9b565b610ed19190611df3565b610edb9190611e7c565b600354610ee89190611c7b565b6003819055506000670de0b6b3a7640000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600354610f499190611b9b565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610f969190611df3565b610fa09190611e7c565b90508082610fae9190611b9b565b6005819055503373ffffffffffffffffffffffffffffffffffffffff167fc9695243a805adb74c91f28311176c65b417e842d5699893cef56d18bfa48cba82604051610ffa91906116af565b60405180910390a2809250505090565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154036110a1576000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506110eb565b600354600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b565b61116e8363a9059cbb60e01b848460405160240161110c929190611fab565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506113fa565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff168260405161119990612005565b60006040518083038185875af1925050503d80600081146111d6576040519150601f19603f3d011682016040523d82523d6000602084013e6111db565b606091505b505090508061121f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121690612066565b60405180910390fd5b5050565b6001600081905550565b6112356114c1565b73ffffffffffffffffffffffffffffffffffffffff16611253610a39565b73ffffffffffffffffffffffffffffffffffffffff16146112a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a0906120d2565b60405180910390fd5b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6113f4846323b872dd60e01b85858560405160240161139293929190611d63565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506113fa565b50505050565b600061145c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166114c99092919063ffffffff16565b90506000815111156114bc578080602001905181019061147c9190611dc6565b6114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290612164565b60405180910390fd5b5b505050565b600033905090565b60606114d884846000856114e1565b90509392505050565b606082471015611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d906121f6565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161154f919061227c565b60006040518083038185875af1925050503d806000811461158c576040519150601f19603f3d011682016040523d82523d6000602084013e611591565b606091505b50915091506115a2878383876115ae565b92505050949350505050565b60608315611610576000835103611608576115c885611623565b611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe906122df565b60405180910390fd5b5b82905061161b565b61161a8383611646565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156116595781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d9190612343565b60405180910390fd5b6000819050919050565b6116a981611696565b82525050565b60006020820190506116c460008301846116a0565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611709826116de565b9050919050565b611719816116fe565b811461172457600080fd5b50565b60008135905061173681611710565b92915050565b600060208284031215611752576117516116d4565b5b600061176084828501611727565b91505092915050565b600060408201905061177e60008301856116a0565b61178b60208301846116a0565b9392505050565b61179b81611696565b81146117a657600080fd5b50565b6000813590506117b881611792565b92915050565b6000602082840312156117d4576117d36116d4565b5b60006117e2848285016117a9565b91505092915050565b6000819050919050565b600061181061180b611806846116de565b6117eb565b6116de565b9050919050565b6000611822826117f5565b9050919050565b600061183482611817565b9050919050565b61184481611829565b82525050565b600060208201905061185f600083018461183b565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6118b38261186a565b810181811067ffffffffffffffff821117156118d2576118d161187b565b5b80604052505050565b60006118e56116ca565b90506118f182826118aa565b919050565b600067ffffffffffffffff8211156119115761191061187b565b5b602082029050602081019050919050565b600080fd5b600061193a611935846118f6565b6118db565b9050808382526020820190506020840283018581111561195d5761195c611922565b5b835b8181101561198657806119728882611727565b84526020840193505060208101905061195f565b5050509392505050565b600082601f8301126119a5576119a4611865565b5b81356119b5848260208601611927565b91505092915050565b600067ffffffffffffffff8211156119d9576119d861187b565b5b602082029050602081019050919050565b60006119fd6119f8846119be565b6118db565b90508083825260208201905060208402830185811115611a2057611a1f611922565b5b835b81811015611a495780611a3588826117a9565b845260208401935050602081019050611a22565b5050509392505050565b600082601f830112611a6857611a67611865565b5b8135611a788482602086016119ea565b91505092915050565b600080600060608486031215611a9a57611a996116d4565b5b6000611aa8868287016117a9565b935050602084013567ffffffffffffffff811115611ac957611ac86116d9565b5b611ad586828701611990565b925050604084013567ffffffffffffffff811115611af657611af56116d9565b5b611b0286828701611a53565b9150509250925092565b611b15816116fe565b82525050565b6000602082019050611b306000830184611b0c565b92915050565b60008115159050919050565b611b4b81611b36565b82525050565b6000602082019050611b666000830184611b42565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611ba682611696565b9150611bb183611696565b9250828203905081811115611bc957611bc8611b6c565b5b92915050565b600082825260208201905092915050565b7f436f6e747261637420616c726561647920696e697469616c697a656400000000600082015250565b6000611c16601c83611bcf565b9150611c2182611be0565b602082019050919050565b60006020820190508181036000830152611c4581611c09565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611c8682611696565b9150611c9183611696565b9250828201905080821115611ca957611ca8611b6c565b5b92915050565b6000611cba82611696565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611cec57611ceb611b6c565b5b600182019050919050565b7f546f74616c7320646f6e74206d61746368000000000000000000000000000000600082015250565b6000611d2d601183611bcf565b9150611d3882611cf7565b602082019050919050565b60006020820190508181036000830152611d5c81611d20565b9050919050565b6000606082019050611d786000830186611b0c565b611d856020830185611b0c565b611d9260408301846116a0565b949350505050565b611da381611b36565b8114611dae57600080fd5b50565b600081519050611dc081611d9a565b92915050565b600060208284031215611ddc57611ddb6116d4565b5b6000611dea84828501611db1565b91505092915050565b6000611dfe82611696565b9150611e0983611696565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e4257611e41611b6c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611e8782611696565b9150611e9283611696565b925082611ea257611ea1611e4d565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611f09602683611bcf565b9150611f1482611ead565b604082019050919050565b60006020820190508181036000830152611f3881611efc565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000611f75601f83611bcf565b9150611f8082611f3f565b602082019050919050565b60006020820190508181036000830152611fa481611f68565b9050919050565b6000604082019050611fc06000830185611b0c565b611fcd60208301846116a0565b9392505050565b600081905092915050565b50565b6000611fef600083611fd4565b9150611ffa82611fdf565b600082019050919050565b600061201082611fe2565b9150819050919050565b7f455448205472616e73666572206661696c65642e000000000000000000000000600082015250565b6000612050601483611bcf565b915061205b8261201a565b602082019050919050565b6000602082019050818103600083015261207f81612043565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006120bc602083611bcf565b91506120c782612086565b602082019050919050565b600060208201905081810360008301526120eb816120af565b9050919050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b600061214e602a83611bcf565b9150612159826120f2565b604082019050919050565b6000602082019050818103600083015261217d81612141565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006121e0602683611bcf565b91506121eb82612184565b604082019050919050565b6000602082019050818103600083015261220f816121d3565b9050919050565b600081519050919050565b60005b8381101561223f578082015181840152602081019050612224565b60008484015250505050565b600061225682612216565b6122608185611fd4565b9350612270818560208601612221565b80840191505092915050565b6000612288828461224b565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006122c9601d83611bcf565b91506122d482612293565b602082019050919050565b600060208201905081810360008301526122f8816122bc565b9050919050565b600081519050919050565b6000612315826122ff565b61231f8185611bcf565b935061232f818560208601612221565b6123388161186a565b840191505092915050565b6000602082019050818103600083015261235d818461230a565b90509291505056fea26469706673582212209a68b0b9aff5fab453886e16f5f60a81ffe8d4b70d581a8cfdd6a887e3ae981f64736f6c63430008100033000000000000000000000000eb7b5294c79b0369315ed7fe76b52d3108b0a62d
Deployed Bytecode
0x6080604052600436106101235760003560e01c80638d869342116100a0578063df136d6511610064578063df136d65146103bb578063e1c7392a146103e6578063e34d5d2714610411578063f2fde38b1461043c578063fe961f61146104655761012a565b80638d869342146102d45780638da5cb5b146102ff578063b6b55f251461032a578063be9a655514610353578063c00007b01461037e5761012a565b8063399080ec116100e7578063399080ec1461020357806343cd8f7e1461024057806354cde9f81461026b578063715018a6146102945780638705fcd4146102ab5761012a565b80630917e7761461012f5780631959a0021461015a57806325caa262146101985780632e1a7d4d146101c357806335975a37146101ec5761012a565b3661012a57005b600080fd5b34801561013b57600080fd5b50610144610490565b60405161015191906116af565b60405180910390f35b34801561016657600080fd5b50610181600480360381019061017c919061173c565b61049a565b60405161018f929190611769565b60405180910390f35b3480156101a457600080fd5b506101ad6104be565b6040516101ba91906116af565b60405180910390f35b3480156101cf57600080fd5b506101ea60048036038101906101e591906117be565b6104c6565b005b3480156101f857600080fd5b50610201610625565b005b34801561020f57600080fd5b5061022a6004803603810190610225919061173c565b61064a565b60405161023791906116af565b60405180910390f35b34801561024c57600080fd5b50610255610696565b604051610262919061184a565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d9190611a81565b6106ba565b005b3480156102a057600080fd5b506102a9610906565b005b3480156102b757600080fd5b506102d260048036038101906102cd919061173c565b61091a565b005b3480156102e057600080fd5b506102e961099f565b6040516102f691906116af565b60405180910390f35b34801561030b57600080fd5b50610314610a39565b6040516103219190611b1b565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c91906117be565b610a63565b005b34801561035f57600080fd5b50610368610bcb565b6040516103759190611b51565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a0919061173c565b610bde565b6040516103b291906116af565b60405180910390f35b3480156103c757600080fd5b506103d0610d2d565b6040516103dd91906116af565b60405180910390f35b3480156103f257600080fd5b506103fb610d33565b6040516104089190611b51565b60405180910390f35b34801561041d57600080fd5b50610426610d46565b60405161043391906116af565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e919061173c565b610d4c565b005b34801561047157600080fd5b5061047a610dcf565b60405161048791906116af565b60405180910390f35b6000600454905090565b60066020528060005260406000206000915090508060000154908060010154905082565b600047905090565b6104ce610dd5565b600760019054906101000a900460ff166104e757600080fd5b60006104f1610e24565b905081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282546105459190611b9b565b9250508190555061055461100a565b81600460008282546105669190611b9b565b925050819055506105b833837f000000000000000000000000eb7b5294c79b0369315ed7fe76b52d3108b0a62d73ffffffffffffffffffffffffffffffffffffffff166110ed9092919063ffffffff16565b60008111156105cb576105ca81611173565b5b3373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648360405161061191906116af565b60405180910390a250610622611223565b50565b61062d61122d565b6001600760016101000a81548160ff021916908315150217905550565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b7f000000000000000000000000eb7b5294c79b0369315ed7fe76b52d3108b0a62d81565b6106c261122d565b600760009054906101000a900460ff1615610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070990611c2c565b60405180910390fd5b6001600760006101000a81548160ff0219169083151502179055506000805b835181101561081557604051806040016040528084838151811061075857610757611c4c565b5b6020026020010151815260200160008152506006600086848151811061078157610780611c4c565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050508281815181106107ed576107ec611c4c565b5b6020026020010151826108009190611c7b565b9150808061080d90611caf565b915050610731565b50838114610858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084f90611d43565b60405180910390fd5b806004819055507f000000000000000000000000eb7b5294c79b0369315ed7fe76b52d3108b0a62d73ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b81526004016108bc93929190611d63565b6020604051808303816000875af11580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff9190611dc6565b5050505050565b61090e61122d565b61091860006112ab565b565b61092261122d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361095b57600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806004541115610a3157600454670de0b6b3a7640000600554600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1631476109ff9190611c7b565b610a099190611b9b565b610a139190611df3565b610a1d9190611e7c565b600354610a2a9190611c7b565b9050610a36565b600090505b90565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a6b610dd5565b6000806004541115610a8657610a7f610e24565b9050610a97565b600060038190555060006005819055505b81600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254610ae99190611c7b565b92505081905550610af861100a565b8160046000828254610b0a9190611c7b565b92505081905550610b5e3330847f000000000000000000000000eb7b5294c79b0369315ed7fe76b52d3108b0a62d73ffffffffffffffffffffffffffffffffffffffff16611371909392919063ffffffff16565b6000811115610b7157610b7081611173565b5b3373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c83604051610bb791906116af565b60405180910390a250610bc8611223565b50565b600760019054906101000a900460ff1681565b6000806004541115610d23576000600454670de0b6b3a7640000600554600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163147610c409190611c7b565b610c4a9190611b9b565b610c549190611df3565b610c5e9190611e7c565b600354610c6b9190611c7b565b9050670de0b6b3a7640000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015482610cc49190611b9b565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610d119190611df3565b610d1b9190611e7c565b915050610d28565b600090505b919050565b60035481565b600760009054906101000a900460ff1681565b60055481565b610d5461122d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba90611f1f565b60405180910390fd5b610dcc816112ab565b50565b60045481565b600260005403610e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1190611f8b565b60405180910390fd5b6002600081905550565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f61510896040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e9057600080fd5b505af1158015610ea4573d6000803e3d6000fd5b505050506000479050600454670de0b6b3a764000060055483610ec79190611b9b565b610ed19190611df3565b610edb9190611e7c565b600354610ee89190611c7b565b6003819055506000670de0b6b3a7640000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600354610f499190611b9b565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610f969190611df3565b610fa09190611e7c565b90508082610fae9190611b9b565b6005819055503373ffffffffffffffffffffffffffffffffffffffff167fc9695243a805adb74c91f28311176c65b417e842d5699893cef56d18bfa48cba82604051610ffa91906116af565b60405180910390a2809250505090565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154036110a1576000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506110eb565b600354600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b565b61116e8363a9059cbb60e01b848460405160240161110c929190611fab565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506113fa565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff168260405161119990612005565b60006040518083038185875af1925050503d80600081146111d6576040519150601f19603f3d011682016040523d82523d6000602084013e6111db565b606091505b505090508061121f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121690612066565b60405180910390fd5b5050565b6001600081905550565b6112356114c1565b73ffffffffffffffffffffffffffffffffffffffff16611253610a39565b73ffffffffffffffffffffffffffffffffffffffff16146112a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a0906120d2565b60405180910390fd5b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6113f4846323b872dd60e01b85858560405160240161139293929190611d63565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506113fa565b50505050565b600061145c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166114c99092919063ffffffff16565b90506000815111156114bc578080602001905181019061147c9190611dc6565b6114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290612164565b60405180910390fd5b5b505050565b600033905090565b60606114d884846000856114e1565b90509392505050565b606082471015611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d906121f6565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161154f919061227c565b60006040518083038185875af1925050503d806000811461158c576040519150601f19603f3d011682016040523d82523d6000602084013e611591565b606091505b50915091506115a2878383876115ae565b92505050949350505050565b60608315611610576000835103611608576115c885611623565b611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe906122df565b60405180910390fd5b5b82905061161b565b61161a8383611646565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156116595781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d9190612343565b60405180910390fd5b6000819050919050565b6116a981611696565b82525050565b60006020820190506116c460008301846116a0565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611709826116de565b9050919050565b611719816116fe565b811461172457600080fd5b50565b60008135905061173681611710565b92915050565b600060208284031215611752576117516116d4565b5b600061176084828501611727565b91505092915050565b600060408201905061177e60008301856116a0565b61178b60208301846116a0565b9392505050565b61179b81611696565b81146117a657600080fd5b50565b6000813590506117b881611792565b92915050565b6000602082840312156117d4576117d36116d4565b5b60006117e2848285016117a9565b91505092915050565b6000819050919050565b600061181061180b611806846116de565b6117eb565b6116de565b9050919050565b6000611822826117f5565b9050919050565b600061183482611817565b9050919050565b61184481611829565b82525050565b600060208201905061185f600083018461183b565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6118b38261186a565b810181811067ffffffffffffffff821117156118d2576118d161187b565b5b80604052505050565b60006118e56116ca565b90506118f182826118aa565b919050565b600067ffffffffffffffff8211156119115761191061187b565b5b602082029050602081019050919050565b600080fd5b600061193a611935846118f6565b6118db565b9050808382526020820190506020840283018581111561195d5761195c611922565b5b835b8181101561198657806119728882611727565b84526020840193505060208101905061195f565b5050509392505050565b600082601f8301126119a5576119a4611865565b5b81356119b5848260208601611927565b91505092915050565b600067ffffffffffffffff8211156119d9576119d861187b565b5b602082029050602081019050919050565b60006119fd6119f8846119be565b6118db565b90508083825260208201905060208402830185811115611a2057611a1f611922565b5b835b81811015611a495780611a3588826117a9565b845260208401935050602081019050611a22565b5050509392505050565b600082601f830112611a6857611a67611865565b5b8135611a788482602086016119ea565b91505092915050565b600080600060608486031215611a9a57611a996116d4565b5b6000611aa8868287016117a9565b935050602084013567ffffffffffffffff811115611ac957611ac86116d9565b5b611ad586828701611990565b925050604084013567ffffffffffffffff811115611af657611af56116d9565b5b611b0286828701611a53565b9150509250925092565b611b15816116fe565b82525050565b6000602082019050611b306000830184611b0c565b92915050565b60008115159050919050565b611b4b81611b36565b82525050565b6000602082019050611b666000830184611b42565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611ba682611696565b9150611bb183611696565b9250828203905081811115611bc957611bc8611b6c565b5b92915050565b600082825260208201905092915050565b7f436f6e747261637420616c726561647920696e697469616c697a656400000000600082015250565b6000611c16601c83611bcf565b9150611c2182611be0565b602082019050919050565b60006020820190508181036000830152611c4581611c09565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611c8682611696565b9150611c9183611696565b9250828201905080821115611ca957611ca8611b6c565b5b92915050565b6000611cba82611696565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611cec57611ceb611b6c565b5b600182019050919050565b7f546f74616c7320646f6e74206d61746368000000000000000000000000000000600082015250565b6000611d2d601183611bcf565b9150611d3882611cf7565b602082019050919050565b60006020820190508181036000830152611d5c81611d20565b9050919050565b6000606082019050611d786000830186611b0c565b611d856020830185611b0c565b611d9260408301846116a0565b949350505050565b611da381611b36565b8114611dae57600080fd5b50565b600081519050611dc081611d9a565b92915050565b600060208284031215611ddc57611ddb6116d4565b5b6000611dea84828501611db1565b91505092915050565b6000611dfe82611696565b9150611e0983611696565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e4257611e41611b6c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611e8782611696565b9150611e9283611696565b925082611ea257611ea1611e4d565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611f09602683611bcf565b9150611f1482611ead565b604082019050919050565b60006020820190508181036000830152611f3881611efc565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000611f75601f83611bcf565b9150611f8082611f3f565b602082019050919050565b60006020820190508181036000830152611fa481611f68565b9050919050565b6000604082019050611fc06000830185611b0c565b611fcd60208301846116a0565b9392505050565b600081905092915050565b50565b6000611fef600083611fd4565b9150611ffa82611fdf565b600082019050919050565b600061201082611fe2565b9150819050919050565b7f455448205472616e73666572206661696c65642e000000000000000000000000600082015250565b6000612050601483611bcf565b915061205b8261201a565b602082019050919050565b6000602082019050818103600083015261207f81612043565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006120bc602083611bcf565b91506120c782612086565b602082019050919050565b600060208201905081810360008301526120eb816120af565b9050919050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b600061214e602a83611bcf565b9150612159826120f2565b604082019050919050565b6000602082019050818103600083015261217d81612141565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006121e0602683611bcf565b91506121eb82612184565b604082019050919050565b6000602082019050818103600083015261220f816121d3565b9050919050565b600081519050919050565b60005b8381101561223f578082015181840152602081019050612224565b60008484015250505050565b600061225682612216565b6122608185611fd4565b9350612270818560208601612221565b80840191505092915050565b6000612288828461224b565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006122c9601d83611bcf565b91506122d482612293565b602082019050919050565b600060208201905081810360008301526122f8816122bc565b9050919050565b600081519050919050565b6000612315826122ff565b61231f8185611bcf565b935061232f818560208601612221565b6123388161186a565b840191505092915050565b6000602082019050818103600083015261235d818461230a565b90509291505056fea26469706673582212209a68b0b9aff5fab453886e16f5f60a81ffe8d4b70d581a8cfdd6a887e3ae981f64736f6c63430008100033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000eb7b5294c79b0369315ed7fe76b52d3108b0a62d
-----Decoded View---------------
Arg [0] : _liquidityToken (address): 0xEb7b5294c79b0369315Ed7fE76b52d3108B0A62D
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000eb7b5294c79b0369315ed7fe76b52d3108b0a62d
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.