ERC-20
Overview
Max Total Supply
389,584,278.546075909831306835 sGEN
Holders
210
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
351,527.773342831251999323 sGENValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
GenesisAutoCompoundStaking
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// Website: https://genesisdao.io/ // X: https://x.com/0xGenesisDAO // Discord: https://discord.gg/genesisdao // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // & // (&&&&&&&&&&&&&&&&&&&&&&&&&&&* // &&&&&&&&&&&&&&&&&&&&&@,,@@@@&&&&&&&&&&& // &&&&&&&&&&&&&&&&&&&&&,,,,,,,,,*@@@&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&&&&&,,,,,,,,,,,@@@@@@@&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&&@,,,,,,,,,,,@@@@@@@@@@&&&&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&@,,,,,,,,,,,*@@@@@@@@@@&&&&&&&&&@,,,,,#@@@@&&&&&& // &&&&&&&&&&&&#,,,,,,,,,,,@@@@@@@@@@@&&&&&&&&&*,,,,,,,,,,,,@@@@&&&&&& // &&&&&&&&&@..,,.,,,,,@@@@@@@@@@&&&&&&&&&&@,,,,,,,,,,,,,,,,,@@@@&&&&&&& // #&&&&&&&&&&@..,,,,,%@@@@@@@@&&&&&&&&&@,,,,,,,,,,,,@@,,,,,,,,@@@@&&&&&&&& // &&&&&&&&&&&&@..,,,,,&@@@@&&&&&&&&&..,,,,,,,,,,@@@@@@@@,,,,,,,@@@@&&&&&&&&&& // &&&&&&&&&&&&&@..,,,,,&@@@@&&&&&&&&@..,,,,,@@@@@@@@@@@@@,,,,,,,@@@@&&&&&&&&&&* // &&&&&&&&&&&&&@..,,,,,&@@@@&&&&&&&&@@@@@@@@@@@@@@&&&&&&@,,,,,,,@@@@&&&&&&&&&&& // &&&&&&&&&&&&&&@..,,,,@@@@@@&&&&&&&&&&&&@@@@@@&&&&&&&&&&@@,,,,,,@@@@&&&&&&&&&&&& // &&&&&&&&&&&&&&@@@@@@@@//*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,@@@@@@@@@@@@&&&&&&&&&&&& // &&&&&&&&&&&&&&&@@@/**,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*@@@@@@@@@&&&&&&&&&&&&& // &&&&&&&&&&&&&&&@.....,.,,@@@@@@@@@@@@@@@@@@@@@@@@@@&&%@@@@@@/*,,@@@@&&&&&&&&&&&& // &&&&&&&&&&&&&&@....,,,,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/**,,,,@@@@&&&&&&&&&&&& // &&&&&&&&&&&&&&@....,,,,@@@@&&&&&&&&&&&&&&&&&&&&&&&&&&&&@,,,,,,,@@@@&&&&&&&&&&&& // &&&&&&&&&&&&&&@....,,,,@@@@&&&&&&&&&@,,,,,@@@@&&&&&&&&&@,,,,,,,@@@@&&&&&&&&&&&& // &&&&&&&&&&&&&@....,,,,@@@@&&&&&,,,,,,,,,,,,@@@@&&&&&&&@,,,,,,,@@@@&&&&&&&&&&& // &&&&&&&&&&&&&@....,,,,@@@@,,,,,,,,,,,,,,@@@@@@@&&&&&&&@,,,,,,,@@@@&&&&&&&&&&* // &&&&&&&&&&&&@....,,,,,,,,,,,,,,,,,@@@@@@@@@@@&&&&&&&&,,,,,,,,@@@@&&&&&&&&&& // /&&&&&&&&&&@....,,,,,,,,,,,@@@@@@@@@@@@&&&&&&&&@,,,,,,,,,,,,@@@@&&&&&&&& // &&&&&&&&&@@....,,,,,@@@@@@@@@@@@&&&&&&&&&,,,,,,,,,,,,,@@@@@@@@&&&&&&& // &&&&&&&&&@@@@@@@@@@@@@@@@&&&&&&&&&&@,,,,,,,,,,,,@@@@@@@@@@@&&&&&&&& // &&&&&&&&&&@@@@@@@@&&&&&&&&&&@,,,,,,,,,,,,@@@@@@@@@@@&&&&&&&&&&& // &&&&&&&&&&&&&&&&&&&&&&..,,,,,,,,,,(@@@@@@@@@@&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&&@...,,,,,,@@@@@@@@@@&&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&@@@@@@@@@@@@@@@@&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&@@@@@@@@@&&&&&&&&&&&&&&&&&& // *&&&&&&&&&&&&&&&&&&&&&&&&&&& import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; interface IERC20MintableBurnable is IERC20 { function mint(address account, uint256 amount) external; function burn(uint256 amount) external; } contract GenesisAutoCompoundStaking is IERC20, Ownable { uint256 private constant MAX_UINT256 = type(uint256).max; uint256 private constant SCALE = 1e18; uint256 private constant ONE_YEAR = 365 days; uint256 private constant MAX_STAKE_TAX = 500; // 5% uint256 private constant MAX_UNSTAKE_TAX = 1500; // 15% uint256 private constant PERCENTAGE_BASE = 10000; // 100% string public name = "Genesis Staking"; string public symbol = "sGEN"; uint8 public decimals = 18; address public baseToken; address public liquidityPool; address public treasury; uint256 public fixedAPR = 50 ether; uint256 public dynamicAPRMinCap = 30 ether; uint256 public dynamicAPRMaxCap = 70 ether; uint256 public dynamicAPRConstant = 1 ether; uint256 public rebaseInterval = 8 hours; uint256 public stakeTax = 500; uint256 public unstakeTax = 500; uint256 public stakeStartTime; uint256 public lastRebaseTime; uint256 public totalGons; uint256 public totalSupplyTokens; uint256 public gonsPerFragment = 1e9; uint256 public initialMaxSupply; uint256 public maxSupply; uint256 public maxGons; uint256 public warmupPeriod; mapping(address => uint256) private _gonBalances; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => uint256) public stakeTimes; event Mint(address indexed wallet, uint256 amount, uint256 gonsAdded, uint256 gonsPerFragment, uint256 newTotalSupply); event Burn(address indexed wallet, uint256 amount, uint256 gonsRemoved, uint256 gonsPerFragment, uint256 newTotalSupply); event Stake(address indexed user, uint256 amount, uint256 taxAmount, uint256 mintedTokens); event Unstake(address indexed user, uint256 amount, uint256 taxAmount, uint256 returnedTokens); event Rebase( uint256 fixedAPR, uint256 dynamicAPR, uint256 rebaseAPR, uint256 lastRebaseTime, uint256 rebaseCount, uint256 maxSupply, uint256 supplyDelta, uint256 gonsPerFragment, uint256 currentSupply ); event BaseTokenSet(address indexed baseToken); event LiquidityPoolSet(address indexed liquidityPool); event APRParamsSet(uint256 fixedAPR, uint256 dynamicAPRMinCap, uint256 dynamicAPRMaxCap, uint256 dynamicAPRConstant); event RebaseIntervalSet(uint256 rebaseInterval); event StakeTaxSet(uint256 stakeTax); event UnstakeTaxSet(uint256 unstakeTax); event StakeStartTimeSet(uint256 stakeStartTime); event TreasurySet(address indexed treasury); constructor( address _baseToken, address _liquidityPool, address _treasury, uint256 _stakeStartTime ) Ownable(msg.sender) { baseToken = _baseToken; liquidityPool = _liquidityPool; treasury = _treasury; stakeStartTime = _stakeStartTime; maxSupply = IERC20MintableBurnable(baseToken).totalSupply() + 1 ether; initialMaxSupply = maxSupply; maxGons = MAX_UINT256 - (MAX_UINT256 % maxSupply); gonsPerFragment = maxGons / maxSupply; _mint(address(this), 1 ether); warmupPeriod = 60; emit BaseTokenSet(_baseToken); emit LiquidityPoolSet(_liquidityPool); emit TreasurySet(_treasury); emit StakeStartTimeSet(_stakeStartTime); } function setBaseToken(address _baseToken) external onlyOwner { baseToken = _baseToken; emit BaseTokenSet(_baseToken); } function setLiquidityPool(address _liquidityPool) external onlyOwner { liquidityPool = _liquidityPool; emit LiquidityPoolSet(_liquidityPool); } function setAprParameters( uint256 _fixedAPR, uint256 _dynamicAPRMinCap, uint256 _dynamicAPRMaxCap, uint256 _dynamicAPRConstant ) external onlyOwner { require(_dynamicAPRMinCap <= _dynamicAPRMaxCap, "Min cap higher than max cap"); fixedAPR = _fixedAPR; dynamicAPRMinCap = _dynamicAPRMinCap; dynamicAPRMaxCap = _dynamicAPRMaxCap; dynamicAPRConstant = _dynamicAPRConstant; emit APRParamsSet(_fixedAPR, _dynamicAPRMinCap, _dynamicAPRMaxCap, _dynamicAPRConstant); } function setRebaseInterval(uint256 _rebaseInterval) external onlyOwner { rebaseInterval = _rebaseInterval; emit RebaseIntervalSet(_rebaseInterval); } function setStakeTax(uint256 _stakeTax) external onlyOwner { require(_stakeTax <= MAX_STAKE_TAX, "Stake tax too high"); stakeTax = _stakeTax; emit StakeTaxSet(_stakeTax); } function setUnstakeTax(uint256 _unstakeTax) external onlyOwner { require(_unstakeTax <= MAX_UNSTAKE_TAX, "Unstake tax too high"); unstakeTax = _unstakeTax; emit UnstakeTaxSet(_unstakeTax); } function setTreasury(address _treasury) external onlyOwner { treasury = _treasury; emit TreasurySet(_treasury); } function setStakeStartTime(uint256 _stakeStartTime) external onlyOwner { require(block.timestamp < stakeStartTime, "Staking already started"); stakeStartTime = _stakeStartTime; emit StakeStartTimeSet(_stakeStartTime); } function setWarmupPeriod(uint256 _warmupPeriod) external onlyOwner { require(_warmupPeriod > 0, "Warmup period too low"); require(_warmupPeriod <= 1 days, "Warmup period too high"); warmupPeriod = _warmupPeriod; } function _mint(address account, uint256 amount) internal { require(account != address(0), "ERC20: mint to the zero address"); uint256 gonsToAdd = amount * gonsPerFragment; totalGons += gonsToAdd; totalSupplyTokens += amount; _gonBalances[account] += gonsToAdd; emit Mint(account, amount, gonsToAdd, gonsPerFragment, totalSupplyTokens); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal { require(account != address(0), "ERC20: burn from the zero address"); uint256 gonsToRemove = amount * gonsPerFragment; totalGons -= gonsToRemove; totalSupplyTokens -= amount; _gonBalances[account] -= gonsToRemove; emit Burn(account, amount, gonsToRemove, gonsPerFragment, totalSupplyTokens); emit Transfer(account, address(0), amount); } function rebase() public { if (block.timestamp < stakeStartTime) return; uint256 timeToUse = lastRebaseTime > 0 ? lastRebaseTime : stakeStartTime; uint256 rebaseCount = (block.timestamp - timeToUse) / rebaseInterval; if (rebaseCount == 0) return; uint256 fixedApr = getFixedAPR(); uint256 dynamicApr = getDynamicAPR(); uint256 finalApr = fixedApr + dynamicApr; uint256 intervalsPerYear = ONE_YEAR / rebaseInterval; uint256 intervalAPR = finalApr / intervalsPerYear; uint256 supplyDelta = (maxSupply * intervalAPR) / SCALE / 100; if (supplyDelta == 0) { lastRebaseTime = timeToUse + rebaseInterval * rebaseCount; return; } if (supplyDelta > maxSupply) { supplyDelta = maxSupply; } maxSupply += supplyDelta; gonsPerFragment = maxGons / maxSupply; totalSupplyTokens = totalGons / gonsPerFragment; lastRebaseTime = timeToUse + rebaseInterval * rebaseCount; emit Rebase( fixedApr, dynamicApr, intervalAPR, timeToUse, rebaseCount, maxSupply, supplyDelta, gonsPerFragment, totalSupplyTokens ); } function stake(uint256 amount) external { rebase(); require(IERC20(baseToken).transferFrom(msg.sender, address(this), amount), "Transfer failed"); uint256 taxAmount = (amount * stakeTax) / PERCENTAGE_BASE; uint256 netAmount = amount - taxAmount; IERC20MintableBurnable(baseToken).burn(netAmount); if (taxAmount > 0) { IERC20(baseToken).transfer(treasury, taxAmount); } _mint(msg.sender, netAmount); if (warmupPeriod > 0) { stakeTimes[msg.sender] = block.timestamp; } emit Stake(msg.sender, amount, taxAmount, netAmount); } function unstake(uint256 amount) external { require(block.timestamp - stakeTimes[msg.sender] >= warmupPeriod, "Warmup period not over"); rebase(); uint256 gonsToRemove = amount * gonsPerFragment; require(_gonBalances[msg.sender] >= gonsToRemove, "Insufficient balance"); _burn(msg.sender, amount); IERC20MintableBurnable(baseToken).mint(address(this), amount); uint256 taxAmount = (amount * unstakeTax) / PERCENTAGE_BASE; uint256 netAmount = amount - taxAmount; IERC20(baseToken).transfer(msg.sender, netAmount); if (taxAmount > 0) { IERC20(baseToken).transfer(treasury, taxAmount); } emit Unstake(msg.sender, amount, taxAmount, netAmount); } function _transfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(_gonBalances[sender] >= amount * gonsPerFragment, "ERC20: transfer amount exceeds balance"); require(sender == address(0) || recipient != address(this), "ERC20: transfer to staking contract"); rebase(); uint256 taxAmount = ((stakeTax + unstakeTax) * amount) / PERCENTAGE_BASE; uint256 netAmount = amount - taxAmount; uint256 gonsToTransfer = netAmount * gonsPerFragment; uint256 gonsTaxAmount = taxAmount * gonsPerFragment; _gonBalances[sender] -= (gonsToTransfer + gonsTaxAmount); _gonBalances[recipient] += gonsToTransfer; if (gonsTaxAmount > 0) { _gonBalances[treasury] += gonsTaxAmount; } emit Transfer(sender, recipient, netAmount); } function getFixedAPR() public view returns (uint256) { return fixedAPR; } function getDynamicAPR() public view returns (uint256) { uint256 totalStaked = totalSupplyTokens; uint256 lpBalance = IERC20(baseToken).balanceOf(liquidityPool); if (lpBalance <= 0) { revert("LP balance zero"); } if (dynamicAPRConstant <= 0) { revert("Dynamic APR constant zero"); } uint256 ratio = (totalStaked * SCALE) / lpBalance; if (ratio > 10 * SCALE) { ratio = 10 * SCALE; } uint256 scaledRatio = (ratio * dynamicAPRConstant) / SCALE; uint256 logInput = SCALE + scaledRatio; uint256 logValue = log10(logInput); uint256 apyValue = dynamicAPRMaxCap - ((dynamicAPRMaxCap - dynamicAPRMinCap) * logValue) / log10(dynamicAPRConstant * 10); if (apyValue < dynamicAPRMinCap) { apyValue = dynamicAPRMinCap; } return apyValue; } function getFinalAPR() public view returns (uint256) { return getFixedAPR() + getDynamicAPR(); } function log10(uint256 x) internal view returns (uint256) { if (x <= 0) { revert("Log zero"); } uint256 result = 0; while (x >= 10 * SCALE) { x /= 10; result += SCALE; } for (uint8 i = 0; i < 18; ++i) { x = (x * x) / SCALE; if (x >= 10 * SCALE) { x /= 10; result += SCALE / (2 ** (i + 1)); } } return result; } function balanceOf(address account) public view override returns (uint256) { return _gonBalances[account] / gonsPerFragment; } function totalSupply() public view override returns (uint256) { return totalSupplyTokens; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(msg.sender, spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { uint256 currentAllowance = _allowances[sender][msg.sender]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); _transfer(sender, recipient, amount); _approve(sender, msg.sender, currentAllowance - amount); return true; } function _approve(address owner, address spender, uint256 amount) internal { 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); } function timeTillNextRebase() public view returns (uint256) { if (block.timestamp < stakeStartTime) { return stakeStartTime - block.timestamp; } return rebaseInterval - ((block.timestamp - stakeStartTime) % rebaseInterval); } function totalTokensAtNextRebase() public view returns (uint256) { uint256 fixedApr = getFixedAPR(); uint256 dynamicApr = getDynamicAPR(); uint256 finalApr = fixedApr + dynamicApr; uint256 intervalsPerYear = ONE_YEAR / rebaseInterval; uint256 intervalAPR = finalApr / intervalsPerYear; uint256 supplyDelta = (totalSupplyTokens * intervalAPR) / SCALE / 100; return supplyDelta; } function tokensForAddressAtNextRebase(address account) public view returns (uint256) { uint256 supplyDelta = totalTokensAtNextRebase(); uint256 userBalance = balanceOf(account); uint256 userShare = (userBalance * SCALE) / totalSupplyTokens; return (supplyDelta * userShare) / SCALE / 100; } function tokensDeductedForUnstaking(uint256 amount) public view returns (uint256) { uint256 taxAmount = (amount * unstakeTax) / PERCENTAGE_BASE; return taxAmount; } function tokensDeductedForStaking(uint256 amount) public view returns (uint256) { uint256 taxAmount = (amount * stakeTax) / PERCENTAGE_BASE; return taxAmount; } function index() public view returns (uint256) { return balanceOf(address(this)); } function totalTokensRewarded() public view returns (uint256) { return maxSupply - initialMaxSupply; } function emergencyWithdraw(address token, address to, uint256 amount) external onlyOwner { require(token != address(this), "Cannot withdraw staking token"); IERC20(token).transfer(to, amount); } function emergencyEthWithdraw(address to, uint256 amount) external onlyOwner { payable(to).transfer(amount); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @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 value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` 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 value) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @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 { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _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 v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_baseToken","type":"address"},{"internalType":"address","name":"_liquidityPool","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"uint256","name":"_stakeStartTime","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fixedAPR","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dynamicAPRMinCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dynamicAPRMaxCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dynamicAPRConstant","type":"uint256"}],"name":"APRParamsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"baseToken","type":"address"}],"name":"BaseTokenSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gonsRemoved","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gonsPerFragment","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalSupply","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"liquidityPool","type":"address"}],"name":"LiquidityPoolSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gonsAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gonsPerFragment","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalSupply","type":"uint256"}],"name":"Mint","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":false,"internalType":"uint256","name":"fixedAPR","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dynamicAPR","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rebaseAPR","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastRebaseTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rebaseCount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"supplyDelta","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gonsPerFragment","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentSupply","type":"uint256"}],"name":"Rebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rebaseInterval","type":"uint256"}],"name":"RebaseIntervalSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"taxAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedTokens","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"stakeStartTime","type":"uint256"}],"name":"StakeStartTimeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"stakeTax","type":"uint256"}],"name":"StakeTaxSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"treasury","type":"address"}],"name":"TreasurySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"taxAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"returnedTokens","type":"uint256"}],"name":"Unstake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"unstakeTax","type":"uint256"}],"name":"UnstakeTaxSet","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dynamicAPRConstant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dynamicAPRMaxCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dynamicAPRMinCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyEthWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fixedAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDynamicAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFinalAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFixedAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gonsPerFragment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"index","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRebaseTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxGons","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebaseInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fixedAPR","type":"uint256"},{"internalType":"uint256","name":"_dynamicAPRMinCap","type":"uint256"},{"internalType":"uint256","name":"_dynamicAPRMaxCap","type":"uint256"},{"internalType":"uint256","name":"_dynamicAPRConstant","type":"uint256"}],"name":"setAprParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_baseToken","type":"address"}],"name":"setBaseToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityPool","type":"address"}],"name":"setLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rebaseInterval","type":"uint256"}],"name":"setRebaseInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakeStartTime","type":"uint256"}],"name":"setStakeStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakeTax","type":"uint256"}],"name":"setStakeTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_unstakeTax","type":"uint256"}],"name":"setUnstakeTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_warmupPeriod","type":"uint256"}],"name":"setWarmupPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakeTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakeTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeTillNextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokensDeductedForStaking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokensDeductedForUnstaking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"tokensForAddressAtNextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalGons","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupplyTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensAtNextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensRewarded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakeTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"warmupPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c0604052600f60809081526e47656e65736973205374616b696e6760881b60a05260019061002e9082610534565b5060408051808201909152600481526339a3a2a760e11b60208201526002906100579082610534565b506003805460ff191660121790556802b5e3af16b18800006006556801a055690d9db800006007556803cb71f51fc5580000600855670de0b6b3a7640000600955617080600a556101f4600b819055600c55633b9aca006011553480156100bc575f80fd5b50604051612b75380380612b758339810160408190526100db91610609565b338061010157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61010a816102ef565b5060038054610100600160a81b0319166101006001600160a01b0387811682029290921792839055600480546001600160a01b031990811688851617825560058054909116878516179055600d859055604080516318160ddd60e01b8152905192909404909216926318160ddd92818101926020929091908290030181865afa158015610199573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101bd9190610651565b6101cf90670de0b6b3a764000061067c565b601381905560128190556101e4905f196106a9565b6101ef905f196106bc565b6014819055601354610200916106cf565b60115561021530670de0b6b3a764000061033e565b603c6015556040516001600160a01b038516907f9ee7d7a42466d19669fb88ad7a5b03861d6abd7d2a681c83dd982207cfaeb370905f90a26040516001600160a01b038416907fe57f71636571365571c0eaeaeb54e1d9e0065804f056a57a2a29448524f7d18a905f90a26040516001600160a01b038316907f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f905f90a26040518181527fd1c4f5d3748426e79e1bbf9eef6e637b3b173e57084ada1e37330d9a31e06f759060200160405180910390a1505050506106f9565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166103945760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016100f8565b5f601154826103a391906106e2565b905080600f5f8282546103b6919061067c565b925050819055508160105f8282546103ce919061067c565b90915550506001600160a01b0383165f90815260166020526040812080548392906103fa90849061067c565b909155505060115460105460408051858152602081018590529081019290925260608201526001600160a01b038416907f94c792774c59479f7bd68442f3af3691c02123a5aabee8b6f9116d8af8aa66699060800160405180910390a26040518281526001600160a01b038416905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806104c457607f821691505b6020821081036104e257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561052f57805f5260205f20601f840160051c8101602085101561050d5750805b601f840160051c820191505b8181101561052c575f8155600101610519565b50505b505050565b81516001600160401b0381111561054d5761054d61049c565b6105618161055b84546104b0565b846104e8565b6020601f821160018114610593575f831561057c5750848201515b5f19600385901b1c1916600184901b17845561052c565b5f84815260208120601f198516915b828110156105c257878501518255602094850194600190920191016105a2565b50848210156105df57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b80516001600160a01b0381168114610604575f80fd5b919050565b5f805f806080858703121561061c575f80fd5b610625856105ee565b9350610633602086016105ee565b9250610641604086016105ee565b6060959095015193969295505050565b5f60208284031215610661575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561068f5761068f610668565b92915050565b634e487b7160e01b5f52601260045260245ffd5b5f826106b7576106b7610695565b500690565b8181038181111561068f5761068f610668565b5f826106dd576106dd610695565b500490565b808202811582820484141761068f5761068f610668565b61246f806107065f395ff3fe608060405234801561000f575f80fd5b5060043610610367575f3560e01c80637419f190116101c9578063c4968c9a116100fe578063dd62ed3e1161009e578063ecdd98be11610079578063ecdd98be146106ba578063ef037fb9146106c3578063f0f44260146106d6578063f2fde38b146106e9575f80fd5b8063dd62ed3e14610666578063deac361a1461069e578063e63ea408146106a7575f80fd5b8063cca1ef6e116100d9578063cca1ef6e1461062e578063d5abeb0114610641578063d5e1fc1f1461064a578063d9565b031461065d575f80fd5b8063c4968c9a146105fa578063c55dae6314610603578063cc1b63d51461061b575f80fd5b80639d0487bc11610169578063a85667c511610144578063a85667c5146105c4578063a9059cbb146105d7578063af14052c146105ea578063be8edf5c146105f2575f80fd5b80639d0487bc1461058b578063a4168bcf1461059e578063a694fc3a146105b1575f80fd5b806389edeb74116101a457806389edeb74146105575780638bd1d033146105605780638da5cb5b1461057357806395d89b4114610583575f80fd5b80637419f1901461053c5780637ed8f6531461054557806383e373b01461054e575f80fd5b80632e187a681161029f57806351d4a5801161023f578063663dcdbc1161021a578063663dcdbc14610506578063665a11ca1461050e57806370a0823114610521578063715018a614610534575f80fd5b806351d4a580146104ca578063529bed7f146104d357806361d027b3146104db575f80fd5b80634508a6cc1161027a5780634508a6cc1461049e57806345885bfe146104b15780634a7c4d18146104b95780634befa981146104c2575f80fd5b80632e187a681461046d57806330643c4114610476578063313ce5671461047f575f80fd5b806316bb6c131161030a5780631ad25ffb116102e55780631ad25ffb1461042057806323b872dd1461043f5780632986c0e5146104525780632e17de781461045a575f80fd5b806316bb6c13146103fc57806318160ddd1461040f5780631924063e14610417575f80fd5b8063095ea7b311610345578063095ea7b3146103b157806309bc773f146103d45780630f336d48146103eb578063118ab4e1146103f3575f80fd5b8063018770201461036b57806306fdde031461038057806307ec35a21461039e575b5f80fd5b61037e61037936600461210f565b6106fc565b005b61038861074d565b6040516103959190612128565b60405180910390f35b61037e6103ac36600461215d565b6107d9565b6103c46103bf366004612174565b61086b565b6040519015158152602001610395565b6103dd600b5481565b604051908152602001610395565b6103dd610881565b6103dd60065481565b61037e61040a36600461210f565b610a90565b6010546103dd565b6103dd600e5481565b6103dd61042e36600461210f565b60186020525f908152604090205481565b6103c461044d36600461219c565b610ae9565b6103dd610b97565b61037e61046836600461215d565b610ba6565b6103dd60105481565b6103dd60125481565b60035461048c9060ff1681565b60405160ff9091168152602001610395565b6103dd6104ac36600461215d565b610e53565b6006546103dd565b6103dd60095481565b6103dd610e77565b6103dd60075481565b6103dd610e8d565b6005546104ee906001600160a01b031681565b6040516001600160a01b039091168152602001610395565b6103dd610ecd565b6004546104ee906001600160a01b031681565b6103dd61052f36600461210f565b610ede565b61037e610f04565b6103dd600d5481565b6103dd60115481565b6103dd600c5481565b6103dd600a5481565b61037e61056e3660046121d6565b610f17565b5f546001600160a01b03166104ee565b610388610fd1565b61037e61059936600461215d565b610fde565b6103dd6105ac36600461215d565b611062565b61037e6105bf36600461215d565b611075565b61037e6105d236600461215d565b6112b0565b6103c46105e5366004612174565b611350565b61037e61135c565b6103dd61152c565b6103dd60145481565b6003546104ee9061010090046001600160a01b031681565b61037e61062936600461215d565b6115a1565b6103dd61063c36600461210f565b61162f565b6103dd60135481565b61037e610658366004612174565b61169d565b6103dd60085481565b6103dd610674366004612205565b6001600160a01b039182165f90815260176020908152604080832093909416825291909152205490565b6103dd60155481565b61037e6106b536600461219c565b6116dd565b6103dd600f5481565b61037e6106d136600461215d565b6117b3565b61037e6106e436600461210f565b6117f0565b61037e6106f736600461210f565b611841565b61070461187e565b600480546001600160a01b0319166001600160a01b0383169081179091556040517fe57f71636571365571c0eaeaeb54e1d9e0065804f056a57a2a29448524f7d18a905f90a250565b6001805461075a90612236565b80601f016020809104026020016040519081016040528092919081815260200182805461078690612236565b80156107d15780601f106107a8576101008083540402835291602001916107d1565b820191905f5260205f20905b8154815290600101906020018083116107b457829003601f168201915b505050505081565b6107e161187e565b6105dc81111561082f5760405162461bcd60e51b81526020600482015260146024820152730aadce6e8c2d6ca40e8c2f040e8dede40d0d2ced60631b60448201526064015b60405180910390fd5b600c8190556040518181527f9a094848248314ee3f45b23fdb2e11de1fc9715cd5391c24a64adcc415747f9c906020015b60405180910390a150565b5f6108773384846118aa565b5060015b92915050565b601054600354600480546040516370a0823160e01b81526001600160a01b03918216928101929092525f93928492610100909104909116906370a0823190602401602060405180830381865afa1580156108dd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610901919061226e565b90505f81116109445760405162461bcd60e51b815260206004820152600f60248201526e4c502062616c616e6365207a65726f60881b6044820152606401610826565b5f600954116109955760405162461bcd60e51b815260206004820152601960248201527f44796e616d69632041505220636f6e7374616e74207a65726f000000000000006044820152606401610826565b5f816109a9670de0b6b3a764000085612299565b6109b391906122c4565b90506109c8670de0b6b3a7640000600a612299565b8111156109e5576109e2670de0b6b3a7640000600a612299565b90505b5f670de0b6b3a7640000600954836109fd9190612299565b610a0791906122c4565b90505f610a1c82670de0b6b3a76400006122d7565b90505f610a28826119ce565b90505f610a42600954600a610a3d9190612299565b6119ce565b82600754600854610a5391906122ea565b610a5d9190612299565b610a6791906122c4565b600854610a7491906122ea565b9050600754811015610a8557506007545b979650505050505050565b610a9861187e565b60038054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f9ee7d7a42466d19669fb88ad7a5b03861d6abd7d2a681c83dd982207cfaeb370905f90a250565b6001600160a01b0383165f90815260176020908152604080832033845290915281205482811015610b6d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610826565b610b78858585611ae1565b610b8c8533610b8786856122ea565b6118aa565b506001949350505050565b5f610ba130610ede565b905090565b601554335f90815260186020526040902054610bc290426122ea565b1015610c095760405162461bcd60e51b81526020600482015260166024820152752bb0b936bab8103832b934b7b2103737ba1037bb32b960511b6044820152606401610826565b610c1161135c565b5f60115482610c209190612299565b335f90815260166020526040902054909150811115610c785760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610826565b610c823383611def565b6003546040516340c10f1960e01b8152306004820152602481018490526101009091046001600160a01b0316906340c10f19906044015f604051808303815f87803b158015610ccf575f80fd5b505af1158015610ce1573d5f803e3d5ffd5b505050505f612710600c5484610cf79190612299565b610d0191906122c4565b90505f610d0e82856122ea565b60035460405163a9059cbb60e01b81523360048201526024810183905291925061010090046001600160a01b03169063a9059cbb906044016020604051808303815f875af1158015610d62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8691906122fd565b508115610e0a5760035460055460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101859052610100909204169063a9059cbb906044016020604051808303815f875af1158015610de4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0891906122fd565b505b604080518581526020810184905290810182905233907ffbd65cfd6de1493db337385c0712095397ecbd0504df64b861cdfceb80c7b4229060600160405180910390a250505050565b5f80612710600c5484610e669190612299565b610e7091906122c4565b9392505050565b5f610e80610881565b600654610ba191906122d7565b5f600d54421015610ea65742600d54610ba191906122ea565b600a54600d54610eb690426122ea565b610ec0919061231c565b600a54610ba191906122ea565b5f601254601354610ba191906122ea565b6011546001600160a01b0382165f90815260166020526040812054909161087b916122c4565b610f0c61187e565b610f155f611f4f565b565b610f1f61187e565b81831115610f6f5760405162461bcd60e51b815260206004820152601b60248201527f4d696e2063617020686967686572207468616e206d61782063617000000000006044820152606401610826565b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f56868216d91d6464abc5e886219763832e60a15138e4b9b39622e814215ccc7c9060800160405180910390a150505050565b6002805461075a90612236565b610fe661187e565b6101f481111561102d5760405162461bcd60e51b81526020600482015260126024820152710a6e8c2d6ca40e8c2f040e8dede40d0d2ced60731b6044820152606401610826565b600b8190556040518181527f6c994dc858e5a5188d7777e7e8b12d2d8a21f3a28c8fccaaa98c166215da99e490602001610860565b5f80612710600b5484610e669190612299565b61107d61135c565b6003546040516323b872dd60e01b8152336004820152306024820152604481018390526101009091046001600160a01b0316906323b872dd906064016020604051808303815f875af11580156110d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f991906122fd565b6111375760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610826565b5f612710600b54836111499190612299565b61115391906122c4565b90505f61116082846122ea565b600354604051630852cd8d60e31b81526004810183905291925061010090046001600160a01b0316906342966c68906024015f604051808303815f87803b1580156111a9575f80fd5b505af11580156111bb573d5f803e3d5ffd5b505050505f8211156112445760035460055460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101859052610100909204169063a9059cbb906044016020604051808303815f875af115801561121e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124291906122fd565b505b61124e3382611f9e565b6015541561126857335f9081526018602052604090204290555b604080518481526020810184905290810182905233907ff556991011e831bcfac4f406d547e5e32cdd98267efab83935230d5f8d02c4469060600160405180910390a2505050565b6112b861187e565b5f81116112ff5760405162461bcd60e51b81526020600482015260156024820152745761726d757020706572696f6420746f6f206c6f7760581b6044820152606401610826565b6201518081111561134b5760405162461bcd60e51b81526020600482015260166024820152750aec2e4daeae040e0cae4d2dec840e8dede40d0d2ced60531b6044820152606401610826565b601555565b5f610877338484611ae1565b600d5442101561136857565b5f80600e541161137a57600d5461137e565b600e545b90505f600a54824261139091906122ea565b61139a91906122c4565b9050805f036113a7575050565b5f6113b160065490565b90505f6113bc610881565b90505f6113c982846122d7565b90505f600a546301e133806113de91906122c4565b90505f6113eb82846122c4565b90505f6064670de0b6b3a7640000836013546114079190612299565b61141191906122c4565b61141b91906122c4565b9050805f036114495786600a546114329190612299565b61143c90896122d7565b600e555050505050505050565b60135481111561145857506013545b8060135f82825461146991906122d7565b909155505060135460145461147e91906122c4565b6011819055600f5461149091906122c4565b601055600a546114a1908890612299565b6114ab90896122d7565b600e55601354601154601054604080518a8152602081018a9052808201879052606081018d9052608081018c905260a081019490945260c0840185905260e0840192909252610100830152517f82ec6dc57ebf74c563b660545554cb4bb01fc6e3e89020f8f47dd324e64eeaf4918190036101200190a15050505050505050565b5f8061153760065490565b90505f611542610881565b90505f61154f82846122d7565b90505f600a546301e1338061156491906122c4565b90505f61157182846122c4565b90505f6064670de0b6b3a76400008360105461158d9190612299565b61159791906122c4565b610a8591906122c4565b6115a961187e565b600d5442106115fa5760405162461bcd60e51b815260206004820152601760248201527f5374616b696e6720616c726561647920737461727465640000000000000000006044820152606401610826565b600d8190556040518181527fd1c4f5d3748426e79e1bbf9eef6e637b3b173e57084ada1e37330d9a31e06f7590602001610860565b5f8061163961152c565b90505f61164584610ede565b90505f601054670de0b6b3a76400008361165f9190612299565b61166991906122c4565b90506064670de0b6b3a76400006116808386612299565b61168a91906122c4565b61169491906122c4565b95945050505050565b6116a561187e565b6040516001600160a01b0383169082156108fc029083905f818181858888f193505050501580156116d8573d5f803e3d5ffd5b505050565b6116e561187e565b306001600160a01b0384160361173d5760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f74207769746864726177207374616b696e6720746f6b656e0000006044820152606401610826565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015611789573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ad91906122fd565b50505050565b6117bb61187e565b600a8190556040518181527fa0df1b641bcb350bfc38973452497c08c1314b4788866ea2c6eaab659573df2490602001610860565b6117f861187e565b600580546001600160a01b0319166001600160a01b0383169081179091556040517f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f905f90a250565b61184961187e565b6001600160a01b03811661187257604051631e4fbdf760e01b81525f6004820152602401610826565b61187b81611f4f565b50565b5f546001600160a01b03163314610f155760405163118cdaa760e01b8152336004820152602401610826565b6001600160a01b03831661190c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610826565b6001600160a01b03821661196d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610826565b6001600160a01b038381165f8181526017602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f808211611a095760405162461bcd60e51b81526020600482015260086024820152674c6f67207a65726f60c01b6044820152606401610826565b5f5b611a1e670de0b6b3a7640000600a612299565b8310611a4a57611a2f600a846122c4565b9250611a43670de0b6b3a7640000826122d7565b9050611a0b565b5f5b60128160ff161015611ada57670de0b6b3a7640000611a6b8580612299565b611a7591906122c4565b9350611a8a670de0b6b3a7640000600a612299565b8410611ad257611a9b600a856122c4565b9350611aa881600161232f565b611ab390600261242b565b611ac590670de0b6b3a76400006122c4565b611acf90836122d7565b91505b600101611a4c565b5092915050565b6001600160a01b038316611b455760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610826565b6001600160a01b038216611ba75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610826565b601154611bb49082612299565b6001600160a01b0384165f908152601660205260409020541015611c295760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610826565b6001600160a01b0383161580611c4857506001600160a01b0382163014155b611ca05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f207374616b696e6720636f6e74726044820152621858dd60ea1b6064820152608401610826565b611ca861135c565b5f61271082600c54600b54611cbd91906122d7565b611cc79190612299565b611cd191906122c4565b90505f611cde82846122ea565b90505f60115482611cef9190612299565b90505f60115484611d009190612299565b9050611d0c81836122d7565b6001600160a01b0388165f9081526016602052604081208054909190611d339084906122ea565b90915550506001600160a01b0386165f9081526016602052604081208054849290611d5f9084906122d7565b90915550508015611d99576005546001600160a01b03165f9081526016602052604081208054839290611d939084906122d7565b90915550505b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611dde91815260200190565b60405180910390a350505050505050565b6001600160a01b038216611e4f5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610826565b5f60115482611e5e9190612299565b905080600f5f828254611e7191906122ea565b925050819055508160105f828254611e8991906122ea565b90915550506001600160a01b0383165f9081526016602052604081208054839290611eb59084906122ea565b909155505060115460105460408051858152602081018590529081019290925260608201526001600160a01b038416907f4d667732637549615f3cd28023b13380094dd975c0ac7c1b26916a8b1363b7ec9060800160405180910390a26040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016119c1565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216611ff45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610826565b5f601154826120039190612299565b905080600f5f82825461201691906122d7565b925050819055508160105f82825461202e91906122d7565b90915550506001600160a01b0383165f908152601660205260408120805483929061205a9084906122d7565b909155505060115460105460408051858152602081018590529081019290925260608201526001600160a01b038416907f94c792774c59479f7bd68442f3af3691c02123a5aabee8b6f9116d8af8aa66699060800160405180910390a26040518281526001600160a01b038416905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016119c1565b80356001600160a01b038116811461210a575f80fd5b919050565b5f6020828403121561211f575f80fd5b610e70826120f4565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561216d575f80fd5b5035919050565b5f8060408385031215612185575f80fd5b61218e836120f4565b946020939093013593505050565b5f805f606084860312156121ae575f80fd5b6121b7846120f4565b92506121c5602085016120f4565b929592945050506040919091013590565b5f805f80608085870312156121e9575f80fd5b5050823594602084013594506040840135936060013592509050565b5f8060408385031215612216575f80fd5b61221f836120f4565b915061222d602084016120f4565b90509250929050565b600181811c9082168061224a57607f821691505b60208210810361226857634e487b7160e01b5f52602260045260245ffd5b50919050565b5f6020828403121561227e575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761087b5761087b612285565b634e487b7160e01b5f52601260045260245ffd5b5f826122d2576122d26122b0565b500490565b8082018082111561087b5761087b612285565b8181038181111561087b5761087b612285565b5f6020828403121561230d575f80fd5b81518015158114610e70575f80fd5b5f8261232a5761232a6122b0565b500690565b60ff818116838216019081111561087b5761087b612285565b6001815b60018411156123835780850481111561236757612367612285565b600184161561237557908102905b60019390931c92800261234c565b935093915050565b5f826123995750600161087b565b816123a557505f61087b565b81600181146123bb57600281146123c5576123e1565b600191505061087b565b60ff8411156123d6576123d6612285565b50506001821b61087b565b5060208310610133831016604e8410600b8410161715612404575081810a61087b565b6124105f198484612348565b805f190482111561242357612423612285565b029392505050565b5f610e7060ff84168361238b56fea264697066735822122003b4b213befa6deb16930713ccee489ace9097411f30b8e73c7bb3c49a43411a64736f6c634300081a003300000000000000000000000099999999999997fceb5549c58ab66df52385ca4d000000000000000000000000a93e7cd5dd6d228e67cbfdcb5523d4346c312b8700000000000000000000000031b6a4dca90fabf29879143ca5bb2c10e8a11e4c00000000000000000000000000000000000000000000000000000000667f3260
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610367575f3560e01c80637419f190116101c9578063c4968c9a116100fe578063dd62ed3e1161009e578063ecdd98be11610079578063ecdd98be146106ba578063ef037fb9146106c3578063f0f44260146106d6578063f2fde38b146106e9575f80fd5b8063dd62ed3e14610666578063deac361a1461069e578063e63ea408146106a7575f80fd5b8063cca1ef6e116100d9578063cca1ef6e1461062e578063d5abeb0114610641578063d5e1fc1f1461064a578063d9565b031461065d575f80fd5b8063c4968c9a146105fa578063c55dae6314610603578063cc1b63d51461061b575f80fd5b80639d0487bc11610169578063a85667c511610144578063a85667c5146105c4578063a9059cbb146105d7578063af14052c146105ea578063be8edf5c146105f2575f80fd5b80639d0487bc1461058b578063a4168bcf1461059e578063a694fc3a146105b1575f80fd5b806389edeb74116101a457806389edeb74146105575780638bd1d033146105605780638da5cb5b1461057357806395d89b4114610583575f80fd5b80637419f1901461053c5780637ed8f6531461054557806383e373b01461054e575f80fd5b80632e187a681161029f57806351d4a5801161023f578063663dcdbc1161021a578063663dcdbc14610506578063665a11ca1461050e57806370a0823114610521578063715018a614610534575f80fd5b806351d4a580146104ca578063529bed7f146104d357806361d027b3146104db575f80fd5b80634508a6cc1161027a5780634508a6cc1461049e57806345885bfe146104b15780634a7c4d18146104b95780634befa981146104c2575f80fd5b80632e187a681461046d57806330643c4114610476578063313ce5671461047f575f80fd5b806316bb6c131161030a5780631ad25ffb116102e55780631ad25ffb1461042057806323b872dd1461043f5780632986c0e5146104525780632e17de781461045a575f80fd5b806316bb6c13146103fc57806318160ddd1461040f5780631924063e14610417575f80fd5b8063095ea7b311610345578063095ea7b3146103b157806309bc773f146103d45780630f336d48146103eb578063118ab4e1146103f3575f80fd5b8063018770201461036b57806306fdde031461038057806307ec35a21461039e575b5f80fd5b61037e61037936600461210f565b6106fc565b005b61038861074d565b6040516103959190612128565b60405180910390f35b61037e6103ac36600461215d565b6107d9565b6103c46103bf366004612174565b61086b565b6040519015158152602001610395565b6103dd600b5481565b604051908152602001610395565b6103dd610881565b6103dd60065481565b61037e61040a36600461210f565b610a90565b6010546103dd565b6103dd600e5481565b6103dd61042e36600461210f565b60186020525f908152604090205481565b6103c461044d36600461219c565b610ae9565b6103dd610b97565b61037e61046836600461215d565b610ba6565b6103dd60105481565b6103dd60125481565b60035461048c9060ff1681565b60405160ff9091168152602001610395565b6103dd6104ac36600461215d565b610e53565b6006546103dd565b6103dd60095481565b6103dd610e77565b6103dd60075481565b6103dd610e8d565b6005546104ee906001600160a01b031681565b6040516001600160a01b039091168152602001610395565b6103dd610ecd565b6004546104ee906001600160a01b031681565b6103dd61052f36600461210f565b610ede565b61037e610f04565b6103dd600d5481565b6103dd60115481565b6103dd600c5481565b6103dd600a5481565b61037e61056e3660046121d6565b610f17565b5f546001600160a01b03166104ee565b610388610fd1565b61037e61059936600461215d565b610fde565b6103dd6105ac36600461215d565b611062565b61037e6105bf36600461215d565b611075565b61037e6105d236600461215d565b6112b0565b6103c46105e5366004612174565b611350565b61037e61135c565b6103dd61152c565b6103dd60145481565b6003546104ee9061010090046001600160a01b031681565b61037e61062936600461215d565b6115a1565b6103dd61063c36600461210f565b61162f565b6103dd60135481565b61037e610658366004612174565b61169d565b6103dd60085481565b6103dd610674366004612205565b6001600160a01b039182165f90815260176020908152604080832093909416825291909152205490565b6103dd60155481565b61037e6106b536600461219c565b6116dd565b6103dd600f5481565b61037e6106d136600461215d565b6117b3565b61037e6106e436600461210f565b6117f0565b61037e6106f736600461210f565b611841565b61070461187e565b600480546001600160a01b0319166001600160a01b0383169081179091556040517fe57f71636571365571c0eaeaeb54e1d9e0065804f056a57a2a29448524f7d18a905f90a250565b6001805461075a90612236565b80601f016020809104026020016040519081016040528092919081815260200182805461078690612236565b80156107d15780601f106107a8576101008083540402835291602001916107d1565b820191905f5260205f20905b8154815290600101906020018083116107b457829003601f168201915b505050505081565b6107e161187e565b6105dc81111561082f5760405162461bcd60e51b81526020600482015260146024820152730aadce6e8c2d6ca40e8c2f040e8dede40d0d2ced60631b60448201526064015b60405180910390fd5b600c8190556040518181527f9a094848248314ee3f45b23fdb2e11de1fc9715cd5391c24a64adcc415747f9c906020015b60405180910390a150565b5f6108773384846118aa565b5060015b92915050565b601054600354600480546040516370a0823160e01b81526001600160a01b03918216928101929092525f93928492610100909104909116906370a0823190602401602060405180830381865afa1580156108dd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610901919061226e565b90505f81116109445760405162461bcd60e51b815260206004820152600f60248201526e4c502062616c616e6365207a65726f60881b6044820152606401610826565b5f600954116109955760405162461bcd60e51b815260206004820152601960248201527f44796e616d69632041505220636f6e7374616e74207a65726f000000000000006044820152606401610826565b5f816109a9670de0b6b3a764000085612299565b6109b391906122c4565b90506109c8670de0b6b3a7640000600a612299565b8111156109e5576109e2670de0b6b3a7640000600a612299565b90505b5f670de0b6b3a7640000600954836109fd9190612299565b610a0791906122c4565b90505f610a1c82670de0b6b3a76400006122d7565b90505f610a28826119ce565b90505f610a42600954600a610a3d9190612299565b6119ce565b82600754600854610a5391906122ea565b610a5d9190612299565b610a6791906122c4565b600854610a7491906122ea565b9050600754811015610a8557506007545b979650505050505050565b610a9861187e565b60038054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f9ee7d7a42466d19669fb88ad7a5b03861d6abd7d2a681c83dd982207cfaeb370905f90a250565b6001600160a01b0383165f90815260176020908152604080832033845290915281205482811015610b6d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610826565b610b78858585611ae1565b610b8c8533610b8786856122ea565b6118aa565b506001949350505050565b5f610ba130610ede565b905090565b601554335f90815260186020526040902054610bc290426122ea565b1015610c095760405162461bcd60e51b81526020600482015260166024820152752bb0b936bab8103832b934b7b2103737ba1037bb32b960511b6044820152606401610826565b610c1161135c565b5f60115482610c209190612299565b335f90815260166020526040902054909150811115610c785760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610826565b610c823383611def565b6003546040516340c10f1960e01b8152306004820152602481018490526101009091046001600160a01b0316906340c10f19906044015f604051808303815f87803b158015610ccf575f80fd5b505af1158015610ce1573d5f803e3d5ffd5b505050505f612710600c5484610cf79190612299565b610d0191906122c4565b90505f610d0e82856122ea565b60035460405163a9059cbb60e01b81523360048201526024810183905291925061010090046001600160a01b03169063a9059cbb906044016020604051808303815f875af1158015610d62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8691906122fd565b508115610e0a5760035460055460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101859052610100909204169063a9059cbb906044016020604051808303815f875af1158015610de4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0891906122fd565b505b604080518581526020810184905290810182905233907ffbd65cfd6de1493db337385c0712095397ecbd0504df64b861cdfceb80c7b4229060600160405180910390a250505050565b5f80612710600c5484610e669190612299565b610e7091906122c4565b9392505050565b5f610e80610881565b600654610ba191906122d7565b5f600d54421015610ea65742600d54610ba191906122ea565b600a54600d54610eb690426122ea565b610ec0919061231c565b600a54610ba191906122ea565b5f601254601354610ba191906122ea565b6011546001600160a01b0382165f90815260166020526040812054909161087b916122c4565b610f0c61187e565b610f155f611f4f565b565b610f1f61187e565b81831115610f6f5760405162461bcd60e51b815260206004820152601b60248201527f4d696e2063617020686967686572207468616e206d61782063617000000000006044820152606401610826565b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f56868216d91d6464abc5e886219763832e60a15138e4b9b39622e814215ccc7c9060800160405180910390a150505050565b6002805461075a90612236565b610fe661187e565b6101f481111561102d5760405162461bcd60e51b81526020600482015260126024820152710a6e8c2d6ca40e8c2f040e8dede40d0d2ced60731b6044820152606401610826565b600b8190556040518181527f6c994dc858e5a5188d7777e7e8b12d2d8a21f3a28c8fccaaa98c166215da99e490602001610860565b5f80612710600b5484610e669190612299565b61107d61135c565b6003546040516323b872dd60e01b8152336004820152306024820152604481018390526101009091046001600160a01b0316906323b872dd906064016020604051808303815f875af11580156110d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f991906122fd565b6111375760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610826565b5f612710600b54836111499190612299565b61115391906122c4565b90505f61116082846122ea565b600354604051630852cd8d60e31b81526004810183905291925061010090046001600160a01b0316906342966c68906024015f604051808303815f87803b1580156111a9575f80fd5b505af11580156111bb573d5f803e3d5ffd5b505050505f8211156112445760035460055460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101859052610100909204169063a9059cbb906044016020604051808303815f875af115801561121e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124291906122fd565b505b61124e3382611f9e565b6015541561126857335f9081526018602052604090204290555b604080518481526020810184905290810182905233907ff556991011e831bcfac4f406d547e5e32cdd98267efab83935230d5f8d02c4469060600160405180910390a2505050565b6112b861187e565b5f81116112ff5760405162461bcd60e51b81526020600482015260156024820152745761726d757020706572696f6420746f6f206c6f7760581b6044820152606401610826565b6201518081111561134b5760405162461bcd60e51b81526020600482015260166024820152750aec2e4daeae040e0cae4d2dec840e8dede40d0d2ced60531b6044820152606401610826565b601555565b5f610877338484611ae1565b600d5442101561136857565b5f80600e541161137a57600d5461137e565b600e545b90505f600a54824261139091906122ea565b61139a91906122c4565b9050805f036113a7575050565b5f6113b160065490565b90505f6113bc610881565b90505f6113c982846122d7565b90505f600a546301e133806113de91906122c4565b90505f6113eb82846122c4565b90505f6064670de0b6b3a7640000836013546114079190612299565b61141191906122c4565b61141b91906122c4565b9050805f036114495786600a546114329190612299565b61143c90896122d7565b600e555050505050505050565b60135481111561145857506013545b8060135f82825461146991906122d7565b909155505060135460145461147e91906122c4565b6011819055600f5461149091906122c4565b601055600a546114a1908890612299565b6114ab90896122d7565b600e55601354601154601054604080518a8152602081018a9052808201879052606081018d9052608081018c905260a081019490945260c0840185905260e0840192909252610100830152517f82ec6dc57ebf74c563b660545554cb4bb01fc6e3e89020f8f47dd324e64eeaf4918190036101200190a15050505050505050565b5f8061153760065490565b90505f611542610881565b90505f61154f82846122d7565b90505f600a546301e1338061156491906122c4565b90505f61157182846122c4565b90505f6064670de0b6b3a76400008360105461158d9190612299565b61159791906122c4565b610a8591906122c4565b6115a961187e565b600d5442106115fa5760405162461bcd60e51b815260206004820152601760248201527f5374616b696e6720616c726561647920737461727465640000000000000000006044820152606401610826565b600d8190556040518181527fd1c4f5d3748426e79e1bbf9eef6e637b3b173e57084ada1e37330d9a31e06f7590602001610860565b5f8061163961152c565b90505f61164584610ede565b90505f601054670de0b6b3a76400008361165f9190612299565b61166991906122c4565b90506064670de0b6b3a76400006116808386612299565b61168a91906122c4565b61169491906122c4565b95945050505050565b6116a561187e565b6040516001600160a01b0383169082156108fc029083905f818181858888f193505050501580156116d8573d5f803e3d5ffd5b505050565b6116e561187e565b306001600160a01b0384160361173d5760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f74207769746864726177207374616b696e6720746f6b656e0000006044820152606401610826565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015611789573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ad91906122fd565b50505050565b6117bb61187e565b600a8190556040518181527fa0df1b641bcb350bfc38973452497c08c1314b4788866ea2c6eaab659573df2490602001610860565b6117f861187e565b600580546001600160a01b0319166001600160a01b0383169081179091556040517f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f905f90a250565b61184961187e565b6001600160a01b03811661187257604051631e4fbdf760e01b81525f6004820152602401610826565b61187b81611f4f565b50565b5f546001600160a01b03163314610f155760405163118cdaa760e01b8152336004820152602401610826565b6001600160a01b03831661190c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610826565b6001600160a01b03821661196d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610826565b6001600160a01b038381165f8181526017602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f808211611a095760405162461bcd60e51b81526020600482015260086024820152674c6f67207a65726f60c01b6044820152606401610826565b5f5b611a1e670de0b6b3a7640000600a612299565b8310611a4a57611a2f600a846122c4565b9250611a43670de0b6b3a7640000826122d7565b9050611a0b565b5f5b60128160ff161015611ada57670de0b6b3a7640000611a6b8580612299565b611a7591906122c4565b9350611a8a670de0b6b3a7640000600a612299565b8410611ad257611a9b600a856122c4565b9350611aa881600161232f565b611ab390600261242b565b611ac590670de0b6b3a76400006122c4565b611acf90836122d7565b91505b600101611a4c565b5092915050565b6001600160a01b038316611b455760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610826565b6001600160a01b038216611ba75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610826565b601154611bb49082612299565b6001600160a01b0384165f908152601660205260409020541015611c295760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610826565b6001600160a01b0383161580611c4857506001600160a01b0382163014155b611ca05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f207374616b696e6720636f6e74726044820152621858dd60ea1b6064820152608401610826565b611ca861135c565b5f61271082600c54600b54611cbd91906122d7565b611cc79190612299565b611cd191906122c4565b90505f611cde82846122ea565b90505f60115482611cef9190612299565b90505f60115484611d009190612299565b9050611d0c81836122d7565b6001600160a01b0388165f9081526016602052604081208054909190611d339084906122ea565b90915550506001600160a01b0386165f9081526016602052604081208054849290611d5f9084906122d7565b90915550508015611d99576005546001600160a01b03165f9081526016602052604081208054839290611d939084906122d7565b90915550505b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611dde91815260200190565b60405180910390a350505050505050565b6001600160a01b038216611e4f5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610826565b5f60115482611e5e9190612299565b905080600f5f828254611e7191906122ea565b925050819055508160105f828254611e8991906122ea565b90915550506001600160a01b0383165f9081526016602052604081208054839290611eb59084906122ea565b909155505060115460105460408051858152602081018590529081019290925260608201526001600160a01b038416907f4d667732637549615f3cd28023b13380094dd975c0ac7c1b26916a8b1363b7ec9060800160405180910390a26040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016119c1565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216611ff45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610826565b5f601154826120039190612299565b905080600f5f82825461201691906122d7565b925050819055508160105f82825461202e91906122d7565b90915550506001600160a01b0383165f908152601660205260408120805483929061205a9084906122d7565b909155505060115460105460408051858152602081018590529081019290925260608201526001600160a01b038416907f94c792774c59479f7bd68442f3af3691c02123a5aabee8b6f9116d8af8aa66699060800160405180910390a26040518281526001600160a01b038416905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016119c1565b80356001600160a01b038116811461210a575f80fd5b919050565b5f6020828403121561211f575f80fd5b610e70826120f4565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561216d575f80fd5b5035919050565b5f8060408385031215612185575f80fd5b61218e836120f4565b946020939093013593505050565b5f805f606084860312156121ae575f80fd5b6121b7846120f4565b92506121c5602085016120f4565b929592945050506040919091013590565b5f805f80608085870312156121e9575f80fd5b5050823594602084013594506040840135936060013592509050565b5f8060408385031215612216575f80fd5b61221f836120f4565b915061222d602084016120f4565b90509250929050565b600181811c9082168061224a57607f821691505b60208210810361226857634e487b7160e01b5f52602260045260245ffd5b50919050565b5f6020828403121561227e575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761087b5761087b612285565b634e487b7160e01b5f52601260045260245ffd5b5f826122d2576122d26122b0565b500490565b8082018082111561087b5761087b612285565b8181038181111561087b5761087b612285565b5f6020828403121561230d575f80fd5b81518015158114610e70575f80fd5b5f8261232a5761232a6122b0565b500690565b60ff818116838216019081111561087b5761087b612285565b6001815b60018411156123835780850481111561236757612367612285565b600184161561237557908102905b60019390931c92800261234c565b935093915050565b5f826123995750600161087b565b816123a557505f61087b565b81600181146123bb57600281146123c5576123e1565b600191505061087b565b60ff8411156123d6576123d6612285565b50506001821b61087b565b5060208310610133831016604e8410600b8410161715612404575081810a61087b565b6124105f198484612348565b805f190482111561242357612423612285565b029392505050565b5f610e7060ff84168361238b56fea264697066735822122003b4b213befa6deb16930713ccee489ace9097411f30b8e73c7bb3c49a43411a64736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000099999999999997fceb5549c58ab66df52385ca4d000000000000000000000000a93e7cd5dd6d228e67cbfdcb5523d4346c312b8700000000000000000000000031b6a4dca90fabf29879143ca5bb2c10e8a11e4c00000000000000000000000000000000000000000000000000000000667f3260
-----Decoded View---------------
Arg [0] : _baseToken (address): 0x99999999999997fceB5549c58aB66dF52385ca4d
Arg [1] : _liquidityPool (address): 0xa93E7cd5Dd6d228e67cbFdcb5523D4346c312B87
Arg [2] : _treasury (address): 0x31B6A4DCA90FABf29879143CA5bB2c10E8A11e4c
Arg [3] : _stakeStartTime (uint256): 1719612000
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000099999999999997fceb5549c58ab66df52385ca4d
Arg [1] : 000000000000000000000000a93e7cd5dd6d228e67cbfdcb5523d4346c312b87
Arg [2] : 00000000000000000000000031b6a4dca90fabf29879143ca5bb2c10e8a11e4c
Arg [3] : 00000000000000000000000000000000000000000000000000000000667f3260
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.