Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,587 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 20185968 | 72 days ago | IN | 0 ETH | 0.00090412 | ||||
Withdraw | 18379516 | 325 days ago | IN | 0 ETH | 0.0018498 | ||||
Claim | 17653493 | 427 days ago | IN | 0 ETH | 0.00163597 | ||||
Claim | 16684446 | 563 days ago | IN | 0 ETH | 0.00514449 | ||||
Claim | 16561845 | 580 days ago | IN | 0 ETH | 0.00197608 | ||||
Withdraw | 16453373 | 595 days ago | IN | 0 ETH | 0.00237787 | ||||
Claim | 16440693 | 597 days ago | IN | 0 ETH | 0.00181994 | ||||
Claim | 15994880 | 660 days ago | IN | 0 ETH | 0.00162042 | ||||
Deposit | 15977760 | 662 days ago | IN | 0 ETH | 0.0027707 | ||||
Claim | 15907089 | 672 days ago | IN | 0 ETH | 0.00149024 | ||||
Claim | 15886598 | 675 days ago | IN | 0 ETH | 0.00166194 | ||||
Withdraw | 15886595 | 675 days ago | IN | 0 ETH | 0.00208364 | ||||
Deposit | 15879063 | 676 days ago | IN | 0 ETH | 0.0017417 | ||||
Claim | 15601469 | 714 days ago | IN | 0 ETH | 0.00056027 | ||||
Claim | 15599921 | 715 days ago | IN | 0 ETH | 0.00086566 | ||||
Deposit | 15575613 | 718 days ago | IN | 0 ETH | 0.00145399 | ||||
Claim | 15563852 | 720 days ago | IN | 0 ETH | 0.00060199 | ||||
Claim | 15499431 | 730 days ago | IN | 0 ETH | 0.0023794 | ||||
Withdraw | 15481374 | 733 days ago | IN | 0 ETH | 0.00122866 | ||||
Claim | 15481355 | 733 days ago | IN | 0 ETH | 0.00139814 | ||||
Claim | 15476853 | 733 days ago | IN | 0 ETH | 0.00093511 | ||||
Claim | 15407746 | 744 days ago | IN | 0 ETH | 0.00083742 | ||||
Withdraw | 15407745 | 744 days ago | IN | 0 ETH | 0.00092282 | ||||
Claim | 15340281 | 755 days ago | IN | 0 ETH | 0.00138921 | ||||
Claim | 15339477 | 755 days ago | IN | 0 ETH | 0.000765 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
13702273 | 1014 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
StakingRewards
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-28 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.10; /* . ":" ___:____ |"\/"| ,' `. \ / | O \___/ | ~^~^~^~^~^~^~^~^~^~^~^~^~ Whales Game | Generative Yield NFTs Mint tokens and earn KRILL with this new blockchain based game! Battle it out to see who can generate the most yield. Website: https://whales.game/ */ interface MetadataInterface { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 _tokenId) external view returns (string memory); function deploySetWhalesGame(WhalesGame _wg) external; } interface Callable { function tokenCallback(address _from, uint256 _tokens, bytes calldata _data) external returns (bool); } interface Receiver { function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns (bytes4); } interface Router { function WETH() external pure returns (address); function factory() external pure returns (address); } interface Factory { function getPair(address, address) external view returns (address); function createPair(address, address) external returns (address); } interface Pair { function token0() external view returns (address); function totalSupply() external view returns (uint256); function balanceOf(address) external view returns (uint256); function allowance(address, address) external view returns (uint256); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function transfer(address, uint256) external returns (bool); function transferFrom(address, address, uint256) external returns (bool); } contract KRILL { uint256 constant private UINT_MAX = type(uint256).max; uint256 constant private TRANSFER_FEE = 1; // 1% per transfer string constant public name = "Krill Token"; string constant public symbol = "KRILL"; uint8 constant public decimals = 18; struct User { uint256 balance; mapping(address => uint256) allowance; } struct Info { uint256 totalSupply; mapping(address => User) users; mapping(address => bool) toWhitelist; mapping(address => bool) fromWhitelist; address owner; Router router; Pair pair; bool weth0; WhalesGame wg; StakingRewards stakingRewards; } Info private info; event Transfer(address indexed from, address indexed to, uint256 tokens); event Approval(address indexed owner, address indexed spender, uint256 tokens); event WhitelistUpdated(address indexed user, bool fromWhitelisted, bool toWhitelisted); modifier _onlyOwner() { require(msg.sender == owner()); _; } constructor() { info.router = Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); info.pair = Pair(Factory(info.router.factory()).createPair(info.router.WETH(), address(this))); info.weth0 = info.pair.token0() == info.router.WETH(); info.owner = msg.sender; } function setOwner(address _owner) external _onlyOwner { info.owner = _owner; } function setWhitelisted(address _address, bool _fromWhitelisted, bool _toWhitelisted) external _onlyOwner { info.fromWhitelist[_address] = _fromWhitelisted; info.toWhitelist[_address] = _toWhitelisted; emit WhitelistUpdated(_address, _fromWhitelisted, _toWhitelisted); } function deploySetWhalesGame(WhalesGame _wg) external { require(tx.origin == owner() && stakingRewardsAddress() == address(0x0)); info.wg = _wg; info.stakingRewards = new StakingRewards(info.wg, info.pair); _approve(address(this), stakingRewardsAddress(), UINT_MAX); } function mint(address _receiver, uint256 _tokens) external { require(msg.sender == address(info.wg)); info.totalSupply += _tokens; info.users[_receiver].balance += _tokens; emit Transfer(address(0x0), _receiver, _tokens); } function burn(uint256 _tokens) external { require(balanceOf(msg.sender) >= _tokens); info.totalSupply -= _tokens; info.users[msg.sender].balance -= _tokens; emit Transfer(msg.sender, address(0x0), _tokens); } function transfer(address _to, uint256 _tokens) external returns (bool) { return _transfer(msg.sender, _to, _tokens); } function approve(address _spender, uint256 _tokens) external returns (bool) { return _approve(msg.sender, _spender, _tokens); } function transferFrom(address _from, address _to, uint256 _tokens) external returns (bool) { uint256 _allowance = allowance(_from, msg.sender); require(_allowance >= _tokens); if (_allowance != UINT_MAX) { info.users[_from].allowance[msg.sender] -= _tokens; } return _transfer(_from, _to, _tokens); } function transferAndCall(address _to, uint256 _tokens, bytes calldata _data) external returns (bool) { uint256 _balanceBefore = balanceOf(_to); _transfer(msg.sender, _to, _tokens); uint256 _tokensReceived = balanceOf(_to) - _balanceBefore; uint32 _size; assembly { _size := extcodesize(_to) } if (_size > 0) { require(Callable(_to).tokenCallback(msg.sender, _tokensReceived, _data)); } return true; } function whalesGameAddress() public view returns (address) { return address(info.wg); } function pairAddress() external view returns (address) { return address(info.pair); } function stakingRewardsAddress() public view returns (address) { return address(info.stakingRewards); } function owner() public view returns (address) { return info.owner; } function isFromWhitelisted(address _address) public view returns (bool) { return info.fromWhitelist[_address]; } function isToWhitelisted(address _address) public view returns (bool) { return info.toWhitelist[_address]; } function totalSupply() public view returns (uint256) { return info.totalSupply; } function balanceOf(address _user) public view returns (uint256) { return info.users[_user].balance; } function allowance(address _user, address _spender) public view returns (uint256) { return info.users[_user].allowance[_spender]; } function allInfoFor(address _user) external view returns (uint256 totalTokens, uint256 totalLPTokens, uint256 wethReserve, uint256 krillReserve, uint256 userAllowance, uint256 userBalance, uint256 userLPBalance) { totalTokens = totalSupply(); totalLPTokens = info.pair.totalSupply(); (uint256 _res0, uint256 _res1, ) = info.pair.getReserves(); wethReserve = info.weth0 ? _res0 : _res1; krillReserve = info.weth0 ? _res1 : _res0; userAllowance = allowance(_user, whalesGameAddress()); userBalance = balanceOf(_user); userLPBalance = info.pair.balanceOf(_user); } function _approve(address _owner, address _spender, uint256 _tokens) internal returns (bool) { info.users[_owner].allowance[_spender] = _tokens; emit Approval(_owner, _spender, _tokens); return true; } function _transfer(address _from, address _to, uint256 _tokens) internal returns (bool) { require(balanceOf(_from) >= _tokens); info.users[_from].balance -= _tokens; uint256 _fee = 0; if (!(_from == stakingRewardsAddress() || _to == stakingRewardsAddress() || _to == whalesGameAddress() || isFromWhitelisted(_from) || isToWhitelisted(_to))) { _fee = _tokens * TRANSFER_FEE / 100; address _this = address(this); info.users[_this].balance += _fee; emit Transfer(_from, _this, _fee); info.stakingRewards.disburse(balanceOf(_this)); } info.users[_to].balance += _tokens - _fee; emit Transfer(_from, _to, _tokens - _fee); return true; } } contract StakingRewards { uint256 constant private FLOAT_SCALAR = 2**64; struct User { uint256 deposited; int256 scaledPayout; } struct Info { uint256 totalDeposited; uint256 scaledRewardsPerToken; uint256 pendingRewards; mapping(address => User) users; WhalesGame wg; KRILL krill; Pair pair; } Info private info; event Deposit(address indexed user, uint256 amount); event Withdraw(address indexed user, uint256 amount); event Claim(address indexed user, uint256 amount); event Reward(uint256 amount); constructor(WhalesGame _wg, Pair _pair) { info.wg = _wg; info.krill = KRILL(msg.sender); info.pair = _pair; } function disburse(uint256 _amount) external { if (_amount > 0) { info.krill.transferFrom(msg.sender, address(this), _amount); _disburse(_amount); } } function deposit(uint256 _amount) external { depositFor(_amount, msg.sender); } function depositFor(uint256 _amount, address _user) public { require(_amount > 0); _update(); info.pair.transferFrom(msg.sender, address(this), _amount); info.totalDeposited += _amount; info.users[_user].deposited += _amount; info.users[_user].scaledPayout += int256(_amount * info.scaledRewardsPerToken); emit Deposit(_user, _amount); } function withdrawAll() external { uint256 _deposited = depositedOf(msg.sender); if (_deposited > 0) { withdraw(_deposited); } } function withdraw(uint256 _amount) public { require(_amount > 0 && _amount <= depositedOf(msg.sender)); _update(); info.totalDeposited -= _amount; info.users[msg.sender].deposited -= _amount; info.users[msg.sender].scaledPayout -= int256(_amount * info.scaledRewardsPerToken); info.pair.transfer(msg.sender, _amount); emit Withdraw(msg.sender, _amount); } function claim() external { _update(); uint256 _rewards = rewardsOf(msg.sender); if (_rewards > 0) { info.users[msg.sender].scaledPayout += int256(_rewards * FLOAT_SCALAR); info.krill.transfer(msg.sender, _rewards); emit Claim(msg.sender, _rewards); } } function totalDeposited() public view returns (uint256) { return info.totalDeposited; } function depositedOf(address _user) public view returns (uint256) { return info.users[_user].deposited; } function rewardsOf(address _user) public view returns (uint256) { return uint256(int256(info.scaledRewardsPerToken * depositedOf(_user)) - info.users[_user].scaledPayout) / FLOAT_SCALAR; } function allInfoFor(address _user) external view returns (uint256 totalLPDeposited, uint256 totalLPTokens, uint256 wethReserve, uint256 krillReserve, uint256 userBalance, uint256 userAllowance, uint256 userDeposited, uint256 userRewards) { totalLPDeposited = totalDeposited(); ( , totalLPTokens, wethReserve, krillReserve, , , ) = info.krill.allInfoFor(address(this)); userBalance = info.pair.balanceOf(_user); userAllowance = info.pair.allowance(_user, address(this)); userDeposited = depositedOf(_user); userRewards = rewardsOf(_user); } function _update() internal { address _this = address(this); uint256 _balanceBefore = info.krill.balanceOf(_this); info.wg.claim(); _disburse(info.krill.balanceOf(_this) - _balanceBefore); } function _disburse(uint256 _amount) internal { if (_amount > 0) { if (totalDeposited() == 0) { info.pendingRewards += _amount; } else { info.scaledRewardsPerToken += (_amount + info.pendingRewards) * FLOAT_SCALAR / totalDeposited(); info.pendingRewards = 0; } emit Reward(_amount); } } } contract WhalesGame { uint256 constant public ETH_MINTABLE_SUPPLY = 2000; uint256 constant public WHITELIST_ETH_MINTABLE_SUPPLY = 8000; uint256 constant public KRILL_MINTABLE_SUPPLY = 40000; uint256 constant public MAX_SUPPLY = ETH_MINTABLE_SUPPLY + WHITELIST_ETH_MINTABLE_SUPPLY + KRILL_MINTABLE_SUPPLY; uint256 constant public INITIAL_MINT_COST_ETH = 0.05 ether; uint256 constant public KRILL_PER_DAY_PER_FISHERMAN = 1e22; // 10,000 uint256 constant private KRILL_COST_ADD = 1e4; uint256 constant private KRILL_COST_EXPONENT = 3; uint256 constant private KRILL_COST_SCALER = 2e10; // KRILL minted tokens = 0, minting cost = 20,000 // KRILL minted tokens = 40k, minting cost = 2,500,000 uint256 constant private FLOAT_SCALAR = 2**64; uint256 constant private WHALE_MODULUS = 10; // 1 in 10 uint256 constant private WHALES_CUT = 20; // 20% of all yield uint256 constant private STAKING_CUT = 25; // 25% of minting costs uint256 constant private DEV_TOKENS = 50; uint256 constant private OPENING_DELAY = 2 hours; uint256 constant private WHITELIST_DURATION = 8 hours; struct User { uint256 balance; mapping(uint256 => uint256) list; mapping(address => bool) approved; mapping(uint256 => uint256) indexOf; uint256 rewards; uint256 lastUpdated; uint256 krillPerDay; uint256 whales; int256 scaledPayout; } struct Token { address owner; address approved; bytes32 seed; bool isWhale; } struct Info { uint256 totalSupply; uint256 totalWhales; uint256 ethMintedTokens; uint256 krillMintedTokens; uint256 scaledRewardsPerWhale; uint256 openingTime; uint256 whitelistExpiry; mapping(uint256 => Token) list; mapping(address => User) users; mapping(uint256 => uint256) claimedBitMap; bytes32 merkleRoot; MetadataInterface metadata; address owner; KRILL krill; StakingRewards stakingRewards; } Info private info; mapping(bytes4 => bool) public supportsInterface; event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); event Mint(address indexed owner, uint256 indexed tokenId, bytes32 seed, bool isWhale); event ClaimFishermenRewards(address indexed user, uint256 amount); event ClaimWhaleRewards(address indexed user, uint256 amount); event Reward(address indexed user, uint256 amount); event WhalesReward(uint256 amount); event StakingReward(uint256 amount); modifier _onlyOwner() { require(msg.sender == owner()); _; } constructor(MetadataInterface _metadata, KRILL _krill, bytes32 _merkleRoot) { info.metadata = _metadata; info.metadata.deploySetWhalesGame(this); info.krill = _krill; info.krill.deploySetWhalesGame(this); info.stakingRewards = StakingRewards(info.krill.stakingRewardsAddress()); info.krill.approve(stakingRewardsAddress(), type(uint256).max); info.merkleRoot = _merkleRoot; info.owner = 0x99A768bd14Ea62FaADA61F2c7f123303CDAa69fC; info.openingTime = block.timestamp + OPENING_DELAY; info.whitelistExpiry = block.timestamp + OPENING_DELAY + WHITELIST_DURATION; supportsInterface[0x01ffc9a7] = true; // ERC-165 supportsInterface[0x80ac58cd] = true; // ERC-721 supportsInterface[0x5b5e139f] = true; // Metadata supportsInterface[0x780e9d63] = true; // Enumerable for (uint256 i = 0; i < DEV_TOKENS; i++) { _mint(0xa1450E7D547b4748fc94C8C98C9dB667eaD31cF8); } } function setOwner(address _owner) external _onlyOwner { info.owner = _owner; } function setMetadata(MetadataInterface _metadata) external _onlyOwner { info.metadata = _metadata; } function withdraw() external { address _this = address(this); require(_this.balance > 0); payable(0xFaDED72464D6e76e37300B467673b36ECc4d2ccF).transfer(_this.balance / 2); // 50% total payable(0x1cC79d49ce5b9519C912D810E39025DD27d1F033).transfer(_this.balance / 10); // 5% total payable(0xa1450E7D547b4748fc94C8C98C9dB667eaD31cF8).transfer(_this.balance); // 45% total } receive() external payable { mintManyWithETH(msg.value / INITIAL_MINT_COST_ETH); } function mintWithETH() external payable { mintManyWithETH(1); } function mintManyWithETH(uint256 _tokens) public payable { require(isOpen()); require(_tokens > 0); if (whitelistExpired()) { require(totalSupply() - krillMintedTokens() + _tokens <= ETH_MINTABLE_SUPPLY + WHITELIST_ETH_MINTABLE_SUPPLY); } else { require(ethMintedTokens() + _tokens <= ETH_MINTABLE_SUPPLY); } uint256 _cost = _tokens * INITIAL_MINT_COST_ETH; require(msg.value >= _cost); info.ethMintedTokens += _tokens; for (uint256 i = 0; i < _tokens; i++) { _mint(msg.sender); } if (msg.value > _cost) { payable(msg.sender).transfer(msg.value - _cost); } } function mintWithProof(uint256 _index, address _account, bytes32[] calldata _merkleProof) external payable { require(isOpen()); require(!whitelistExpired() && whitelistMintedTokens() < WHITELIST_ETH_MINTABLE_SUPPLY); require(msg.value >= INITIAL_MINT_COST_ETH); require(!proofClaimed(_index)); bytes32 _node = keccak256(abi.encodePacked(_index, _account)); require(_verify(_merkleProof, _node)); uint256 _claimedWordIndex = _index / 256; uint256 _claimedBitIndex = _index % 256; info.claimedBitMap[_claimedWordIndex] = info.claimedBitMap[_claimedWordIndex] | (1 << _claimedBitIndex); _mint(_account); if (msg.value > INITIAL_MINT_COST_ETH) { payable(msg.sender).transfer(msg.value - INITIAL_MINT_COST_ETH); } } function mint() external { mintMany(1); } function mintMany(uint256 _tokens) public { require(isOpen()); require(_tokens > 0 && krillMintedTokens() + _tokens <= KRILL_MINTABLE_SUPPLY); uint256 _cost = calculateKrillMintCost(_tokens); info.krill.transferFrom(msg.sender, address(this), _cost); uint256 _stakingReward = _cost * STAKING_CUT / 100; info.stakingRewards.disburse(_stakingReward); emit StakingReward(_stakingReward); info.krill.burn(info.krill.balanceOf(address(this))); info.krillMintedTokens += _tokens; for (uint256 i = 0; i < _tokens; i++) { _mint(msg.sender); } } function claim() external { claimFishermenRewards(); claimWhaleRewards(); } function claimFishermenRewards() public { _update(msg.sender); uint256 _rewards = info.users[msg.sender].rewards; if (_rewards > 0) { info.users[msg.sender].rewards = 0; info.krill.mint(msg.sender, _rewards); emit ClaimFishermenRewards(msg.sender, _rewards); } } function claimWhaleRewards() public { uint256 _rewards = whaleRewardsOf(msg.sender); if (_rewards > 0) { info.users[msg.sender].scaledPayout += int256(_rewards * FLOAT_SCALAR); info.krill.mint(msg.sender, _rewards); emit ClaimWhaleRewards(msg.sender, _rewards); } } function approve(address _approved, uint256 _tokenId) external { require(msg.sender == ownerOf(_tokenId)); info.list[_tokenId].approved = _approved; emit Approval(msg.sender, _approved, _tokenId); } function setApprovalForAll(address _operator, bool _approved) external { info.users[msg.sender].approved[_operator] = _approved; emit ApprovalForAll(msg.sender, _operator, _approved); } function transferFrom(address _from, address _to, uint256 _tokenId) external { _transfer(_from, _to, _tokenId); } function safeTransferFrom(address _from, address _to, uint256 _tokenId) external { safeTransferFrom(_from, _to, _tokenId, ""); } function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory _data) public { _transfer(_from, _to, _tokenId); uint32 _size; assembly { _size := extcodesize(_to) } if (_size > 0) { require(Receiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data) == 0x150b7a02); } } function name() external view returns (string memory) { return info.metadata.name(); } function symbol() external view returns (string memory) { return info.metadata.symbol(); } function tokenURI(uint256 _tokenId) external view returns (string memory) { return info.metadata.tokenURI(_tokenId); } function krillAddress() external view returns (address) { return address(info.krill); } function pairAddress() external view returns (address) { return info.krill.pairAddress(); } function stakingRewardsAddress() public view returns (address) { return address(info.stakingRewards); } function merkleRoot() public view returns (bytes32) { return info.merkleRoot; } function openingTime() public view returns (uint256) { return info.openingTime; } function isOpen() public view returns (bool) { return block.timestamp > openingTime(); } function whitelistExpiry() public view returns (uint256) { return info.whitelistExpiry; } function whitelistExpired() public view returns (bool) { return block.timestamp > whitelistExpiry(); } function owner() public view returns (address) { return info.owner; } function totalSupply() public view returns (uint256) { return info.totalSupply; } function ethMintedTokens() public view returns (uint256) { return info.ethMintedTokens; } function krillMintedTokens() public view returns (uint256) { return info.krillMintedTokens; } function whitelistMintedTokens() public view returns (uint256) { return totalSupply() - ethMintedTokens() - krillMintedTokens(); } function totalWhales() public view returns (uint256) { return info.totalWhales; } function totalFishermen() public view returns (uint256) { return totalSupply() - totalWhales(); } function totalKrillPerDay() external view returns (uint256) { return totalFishermen() * KRILL_PER_DAY_PER_FISHERMAN; } function currentKrillMintCost() public view returns (uint256) { return krillMintCost(krillMintedTokens()); } function krillMintCost(uint256 _krillMintedTokens) public pure returns (uint256) { return (_krillMintedTokens + KRILL_COST_ADD)**KRILL_COST_EXPONENT * KRILL_COST_SCALER; } function calculateKrillMintCost(uint256 _tokens) public view returns (uint256 cost) { cost = 0; for (uint256 i = 0; i < _tokens; i++) { cost += krillMintCost(krillMintedTokens() + i); } } function fishermenRewardsOf(address _owner) public view returns (uint256) { uint256 _pending = 0; uint256 _last = info.users[_owner].lastUpdated; if (_last < block.timestamp) { uint256 _diff = block.timestamp - _last; _pending += ownerKrillPerDay(_owner) * _diff * (100 - WHALES_CUT) / 8640000; } return info.users[_owner].rewards + _pending; } function whaleRewardsOf(address _owner) public view returns (uint256) { return uint256(int256(info.scaledRewardsPerWhale * whalesOf(_owner)) - info.users[_owner].scaledPayout) / FLOAT_SCALAR; } function balanceOf(address _owner) public view returns (uint256) { return info.users[_owner].balance; } function whalesOf(address _owner) public view returns (uint256) { return info.users[_owner].whales; } function fishermenOf(address _owner) public view returns (uint256) { return balanceOf(_owner) - whalesOf(_owner); } function ownerOf(uint256 _tokenId) public view returns (address) { require(_tokenId < totalSupply()); return info.list[_tokenId].owner; } function getApproved(uint256 _tokenId) public view returns (address) { require(_tokenId < totalSupply()); return info.list[_tokenId].approved; } function isApprovedForAll(address _owner, address _operator) public view returns (bool) { return info.users[_owner].approved[_operator]; } function getSeed(uint256 _tokenId) public view returns (bytes32) { require(_tokenId < totalSupply()); return info.list[_tokenId].seed; } function getIsWhale(uint256 _tokenId) public view returns (bool) { require(_tokenId < totalSupply()); return info.list[_tokenId].isWhale; } function tokenByIndex(uint256 _index) public view returns (uint256) { require(_index < totalSupply()); return _index; } function tokenOfOwnerByIndex(address _owner, uint256 _index) public view returns (uint256) { require(_index < balanceOf(_owner)); return info.users[_owner].list[_index]; } function ownerKrillPerDay(address _owner) public view returns (uint256 amount) { return info.users[_owner].krillPerDay; } function proofClaimed(uint256 _index) public view returns (bool) { uint256 _claimedWordIndex = _index / 256; uint256 _claimedBitIndex = _index % 256; uint256 _claimedWord = info.claimedBitMap[_claimedWordIndex]; uint256 _mask = (1 << _claimedBitIndex); return _claimedWord & _mask == _mask; } function getToken(uint256 _tokenId) public view returns (address tokenOwner, address approved, bytes32 seed, bool isWhale) { return (ownerOf(_tokenId), getApproved(_tokenId), getSeed(_tokenId), getIsWhale(_tokenId)); } function getTokens(uint256[] memory _tokenIds) public view returns (address[] memory owners, address[] memory approveds, bytes32[] memory seeds, bool[] memory isWhales) { uint256 _length = _tokenIds.length; owners = new address[](_length); approveds = new address[](_length); seeds = new bytes32[](_length); isWhales = new bool[](_length); for (uint256 i = 0; i < _length; i++) { (owners[i], approveds[i], seeds[i], isWhales[i]) = getToken(_tokenIds[i]); } } function getTokensTable(uint256 _limit, uint256 _page, bool _isAsc) external view returns (uint256[] memory tokenIds, address[] memory owners, address[] memory approveds, bytes32[] memory seeds, bool[] memory isWhales, uint256 totalTokens, uint256 totalPages) { require(_limit > 0); totalTokens = totalSupply(); if (totalTokens > 0) { totalPages = (totalTokens / _limit) + (totalTokens % _limit == 0 ? 0 : 1); require(_page < totalPages); uint256 _offset = _limit * _page; if (_page == totalPages - 1 && totalTokens % _limit != 0) { _limit = totalTokens % _limit; } tokenIds = new uint256[](_limit); for (uint256 i = 0; i < _limit; i++) { tokenIds[i] = tokenByIndex(_isAsc ? _offset + i : totalTokens - _offset - i - 1); } } else { totalPages = 0; tokenIds = new uint256[](0); } (owners, approveds, seeds, isWhales) = getTokens(tokenIds); } function getOwnerTokensTable(address _owner, uint256 _limit, uint256 _page, bool _isAsc) external view returns (uint256[] memory tokenIds, address[] memory approveds, bytes32[] memory seeds, bool[] memory isWhales, uint256 totalTokens, uint256 totalPages) { require(_limit > 0); totalTokens = balanceOf(_owner); if (totalTokens > 0) { totalPages = (totalTokens / _limit) + (totalTokens % _limit == 0 ? 0 : 1); require(_page < totalPages); uint256 _offset = _limit * _page; if (_page == totalPages - 1 && totalTokens % _limit != 0) { _limit = totalTokens % _limit; } tokenIds = new uint256[](_limit); for (uint256 i = 0; i < _limit; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, _isAsc ? _offset + i : totalTokens - _offset - i - 1); } } else { totalPages = 0; tokenIds = new uint256[](0); } ( , approveds, seeds, isWhales) = getTokens(tokenIds); } function allMintingInfo() external view returns (uint256 ethMinted, uint256 whitelistMinted, uint256 krillMinted, uint256 currentKrillCost, uint256 whitelistExpiryTime, bool hasWhitelistExpired, uint256 openTime, bool open) { return (ethMintedTokens(), whitelistMintedTokens(), krillMintedTokens(), currentKrillMintCost(), whitelistExpiry(), whitelistExpired(), openingTime(), isOpen()); } function allInfoFor(address _owner) external view returns (uint256 supply, uint256 whales, uint256 ownerBalance, uint256 ownerWhales, uint256 ownerFishermenRewards, uint256 ownerWhaleRewards, uint256 ownerDailyKrill) { return (totalSupply(), totalWhales(), balanceOf(_owner), whalesOf(_owner), fishermenRewardsOf(_owner), whaleRewardsOf(_owner), ownerKrillPerDay(_owner)); } function _mint(address _receiver) internal { require(msg.sender == tx.origin); require(totalSupply() < MAX_SUPPLY); uint256 _tokenId = info.totalSupply++; Token storage _newToken = info.list[_tokenId]; _newToken.owner = _receiver; bytes32 _seed = keccak256(abi.encodePacked(_tokenId, _receiver, blockhash(block.number - 1), gasleft())); _newToken.seed = _seed; _newToken.isWhale = _tokenId < DEV_TOKENS || _tokenId % WHALE_MODULUS == 0; if (_newToken.isWhale) { info.totalWhales++; info.users[_receiver].whales++; info.users[_receiver].scaledPayout += int256(info.scaledRewardsPerWhale); } else { _update(_receiver); info.users[_receiver].krillPerDay += KRILL_PER_DAY_PER_FISHERMAN; } uint256 _index = info.users[_receiver].balance++; info.users[_receiver].indexOf[_tokenId] = _index + 1; info.users[_receiver].list[_index] = _tokenId; emit Transfer(address(0x0), _receiver, _tokenId); emit Mint(_receiver, _tokenId, _seed, _newToken.isWhale); } function _transfer(address _from, address _to, uint256 _tokenId) internal { address _owner = ownerOf(_tokenId); address _approved = getApproved(_tokenId); require(_from == _owner); require(msg.sender == _owner || msg.sender == _approved || isApprovedForAll(_owner, msg.sender)); info.list[_tokenId].owner = _to; if (_approved != address(0x0)) { info.list[_tokenId].approved = address(0x0); emit Approval(address(0x0), address(0x0), _tokenId); } if (getIsWhale(_tokenId)) { info.users[_from].whales--; info.users[_from].scaledPayout -= int256(info.scaledRewardsPerWhale); info.users[_to].whales++; info.users[_to].scaledPayout += int256(info.scaledRewardsPerWhale); } else { _update(_from); info.users[_from].krillPerDay -= KRILL_PER_DAY_PER_FISHERMAN; _update(_to); info.users[_to].krillPerDay += KRILL_PER_DAY_PER_FISHERMAN; } uint256 _index = info.users[_from].indexOf[_tokenId] - 1; uint256 _moved = info.users[_from].list[info.users[_from].balance - 1]; info.users[_from].list[_index] = _moved; info.users[_from].indexOf[_moved] = _index + 1; info.users[_from].balance--; delete info.users[_from].indexOf[_tokenId]; uint256 _newIndex = info.users[_to].balance++; info.users[_to].indexOf[_tokenId] = _newIndex + 1; info.users[_to].list[_newIndex] = _tokenId; emit Transfer(_from, _to, _tokenId); } function _update(address _owner) internal { uint256 _last = info.users[_owner].lastUpdated; if (_last < block.timestamp) { uint256 _diff = block.timestamp - _last; uint256 _rewards = ownerKrillPerDay(_owner) * _diff / 86400; uint256 _whalesCut = _rewards * WHALES_CUT / 100; info.scaledRewardsPerWhale += _whalesCut * FLOAT_SCALAR / totalWhales(); emit WhalesReward(_whalesCut); info.users[_owner].lastUpdated = block.timestamp; info.users[_owner].rewards += _rewards - _whalesCut; emit Reward(_owner, _rewards - _whalesCut); } } function _verify(bytes32[] memory _proof, bytes32 _leaf) internal view returns (bool) { require(_leaf != merkleRoot()); bytes32 _computedHash = _leaf; for (uint256 i = 0; i < _proof.length; i++) { bytes32 _proofElement = _proof[i]; if (_computedHash <= _proofElement) { _computedHash = keccak256(abi.encodePacked(_computedHash, _proofElement)); } else { _computedHash = keccak256(abi.encodePacked(_proofElement, _computedHash)); } } return _computedHash == merkleRoot(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract WhalesGame","name":"_wg","type":"address"},{"internalType":"contract Pair","name":"_pair","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":"Claim","type":"event"},{"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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Reward","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":"address","name":"_user","type":"address"}],"name":"allInfoFor","outputs":[{"internalType":"uint256","name":"totalLPDeposited","type":"uint256"},{"internalType":"uint256","name":"totalLPTokens","type":"uint256"},{"internalType":"uint256","name":"wethReserve","type":"uint256"},{"internalType":"uint256","name":"krillReserve","type":"uint256"},{"internalType":"uint256","name":"userBalance","type":"uint256"},{"internalType":"uint256","name":"userAllowance","type":"uint256"},{"internalType":"uint256","name":"userDeposited","type":"uint256"},{"internalType":"uint256","name":"userRewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"depositFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"depositedOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"disburse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"rewardsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDeposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620016ef380380620016ef8339818101604052810190620000379190620001e2565b81600060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600060050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600060060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000229565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200013d8262000110565b9050919050565b6000620001518262000130565b9050919050565b620001638162000144565b81146200016f57600080fd5b50565b600081519050620001838162000158565b92915050565b6000620001968262000110565b9050919050565b6000620001aa8262000189565b9050919050565b620001bc816200019d565b8114620001c857600080fd5b50565b600081519050620001dc81620001b1565b92915050565b60008060408385031215620001fc57620001fb6200010b565b5b60006200020c8582860162000172565b92505060206200021f85828601620001cb565b9150509250929050565b6114b680620002396000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80635c99d8cc116100665780635c99d8cc1461014c578063853828b61461017c578063b6b55f2514610186578063bd77ac2c146101a2578063ff50abdc146101be5761009e565b80632e1a7d4d146100a357806336efd16f146100bf578063479ba7ae146100db5780634e71d92d1461010b57806357f6b81214610115575b600080fd5b6100bd60048036038101906100b89190610e3f565b6101dc565b005b6100d960048036038101906100d49190610eca565b6103dd565b005b6100f560048036038101906100f09190610f0a565b6105cd565b6040516101029190610f46565b60405180910390f35b610113610653565b005b61012f600480360381019061012a9190610f0a565b6107d7565b604051610143989796959493929190610f61565b60405180910390f35b61016660048036038101906101619190610f0a565b610a0a565b6040516101739190610f46565b60405180910390f35b610184610a58565b005b6101a0600480360381019061019b9190610e3f565b610a7b565b005b6101bc60048036038101906101b79190610e3f565b610a88565b005b6101c6610b44565b6040516101d39190610f46565b60405180910390f35b6000811180156101f457506101f033610a0a565b8111155b6101fd57600080fd5b610205610b50565b80600080016000828254610219919061100e565b9250508190555080600060030160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254610275919061100e565b925050819055506000600101548161028d9190611042565b600060030160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008282546102e191906110a6565b92505081905550600060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610348929190611149565b6020604051808303816000875af1158015610367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038b91906111aa565b503373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364826040516103d29190610f46565b60405180910390a250565b600082116103ea57600080fd5b6103f2610b50565b600060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401610454939291906111d7565b6020604051808303816000875af1158015610473573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049791906111aa565b50816000800160008282546104ac919061120e565b9250508190555081600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254610508919061120e565b92505081905550600060010154826105209190611042565b600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008282546105749190611264565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c836040516105c19190610f46565b60405180910390a25050565b600068010000000000000000600060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461062884610a0a565b6000600101546106389190611042565b61064291906110a6565b61064c9190611327565b9050919050565b61065b610b50565b6000610666336105cd565b905060008111156107d45768010000000000000000816106869190611042565b600060030160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008282546106da9190611264565b92505081905550600060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610741929190611149565b6020604051808303816000875af1158015610760573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078491906111aa565b503373ffffffffffffffffffffffffffffffffffffffff167f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4826040516107cb9190610f46565b60405180910390a25b50565b6000806000806000806000806107eb610b44565b9750600060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166357f6b812306040518263ffffffff1660e01b815260040161084b9190611358565b60e060405180830381865afa158015610868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088c9190611388565b90919293949550909150905050809750819850829950505050600060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b81526004016109039190611358565b602060405180830381865afa158015610920573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610944919061142a565b9350600060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e8a306040518363ffffffff1660e01b81526004016109a6929190611457565b602060405180830381865afa1580156109c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e7919061142a565b92506109f289610a0a565b91506109fd896105cd565b9050919395975091939597565b60008060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b6000610a6333610a0a565b90506000811115610a7857610a77816101dc565b5b50565b610a8581336103dd565b50565b6000811115610b4157600060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610af3939291906111d7565b6020604051808303816000875af1158015610b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3691906111aa565b50610b4081610d32565b5b50565b60008060000154905090565b600030905060008060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610bb49190611358565b602060405180830381865afa158015610bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf5919061142a565b9050600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634e71d92d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c6457600080fd5b505af1158015610c78573d6000803e3d6000fd5b50505050610d2e81600060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401610cde9190611358565b602060405180830381865afa158015610cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1f919061142a565b610d29919061100e565b610d32565b5050565b6000811115610e01576000610d45610b44565b1415610d6c578060006002016000828254610d60919061120e565b92505081905550610dc9565b610d74610b44565b6801000000000000000060006002015483610d8f919061120e565b610d999190611042565b610da39190611327565b60006001016000828254610db7919061120e565b92505081905550600080600201819055505b7f3ac0594a85a20354f9dc74f33728416d19ce00d04a406c108cc2dcf2cecea13481604051610df89190610f46565b60405180910390a15b50565b600080fd5b6000819050919050565b610e1c81610e09565b8114610e2757600080fd5b50565b600081359050610e3981610e13565b92915050565b600060208284031215610e5557610e54610e04565b5b6000610e6384828501610e2a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610e9782610e6c565b9050919050565b610ea781610e8c565b8114610eb257600080fd5b50565b600081359050610ec481610e9e565b92915050565b60008060408385031215610ee157610ee0610e04565b5b6000610eef85828601610e2a565b9250506020610f0085828601610eb5565b9150509250929050565b600060208284031215610f2057610f1f610e04565b5b6000610f2e84828501610eb5565b91505092915050565b610f4081610e09565b82525050565b6000602082019050610f5b6000830184610f37565b92915050565b600061010082019050610f77600083018b610f37565b610f84602083018a610f37565b610f916040830189610f37565b610f9e6060830188610f37565b610fab6080830187610f37565b610fb860a0830186610f37565b610fc560c0830185610f37565b610fd260e0830184610f37565b9998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061101982610e09565b915061102483610e09565b92508282101561103757611036610fdf565b5b828203905092915050565b600061104d82610e09565b915061105883610e09565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561109157611090610fdf565b5b828202905092915050565b6000819050919050565b60006110b18261109c565b91506110bc8361109c565b9250827f8000000000000000000000000000000000000000000000000000000000000000018212600084121516156110f7576110f6610fdf565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821360008412161561112f5761112e610fdf565b5b828203905092915050565b61114381610e8c565b82525050565b600060408201905061115e600083018561113a565b61116b6020830184610f37565b9392505050565b60008115159050919050565b61118781611172565b811461119257600080fd5b50565b6000815190506111a48161117e565b92915050565b6000602082840312156111c0576111bf610e04565b5b60006111ce84828501611195565b91505092915050565b60006060820190506111ec600083018661113a565b6111f9602083018561113a565b6112066040830184610f37565b949350505050565b600061121982610e09565b915061122483610e09565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561125957611258610fdf565b5b828201905092915050565b600061126f8261109c565b915061127a8361109c565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038313600083121516156112b5576112b4610fdf565b5b817f80000000000000000000000000000000000000000000000000000000000000000383126000831216156112ed576112ec610fdf565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061133282610e09565b915061133d83610e09565b92508261134d5761134c6112f8565b5b828204905092915050565b600060208201905061136d600083018461113a565b92915050565b60008151905061138281610e13565b92915050565b600080600080600080600060e0888a0312156113a7576113a6610e04565b5b60006113b58a828b01611373565b97505060206113c68a828b01611373565b96505060406113d78a828b01611373565b95505060606113e88a828b01611373565b94505060806113f98a828b01611373565b93505060a061140a8a828b01611373565b92505060c061141b8a828b01611373565b91505092959891949750929550565b6000602082840312156114405761143f610e04565b5b600061144e84828501611373565b91505092915050565b600060408201905061146c600083018561113a565b611479602083018461113a565b939250505056fea2646970667358221220795594f2fe07a454decd154a2e9c7744cd6f0aae312bc6290ac096a11381bb9f64736f6c634300080a00330000000000000000000000001ebb218415b1f70aeff54041c743082f183318ce00000000000000000000000099ef226531aea4e34f3188ab83ae110e3c4d3447
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80635c99d8cc116100665780635c99d8cc1461014c578063853828b61461017c578063b6b55f2514610186578063bd77ac2c146101a2578063ff50abdc146101be5761009e565b80632e1a7d4d146100a357806336efd16f146100bf578063479ba7ae146100db5780634e71d92d1461010b57806357f6b81214610115575b600080fd5b6100bd60048036038101906100b89190610e3f565b6101dc565b005b6100d960048036038101906100d49190610eca565b6103dd565b005b6100f560048036038101906100f09190610f0a565b6105cd565b6040516101029190610f46565b60405180910390f35b610113610653565b005b61012f600480360381019061012a9190610f0a565b6107d7565b604051610143989796959493929190610f61565b60405180910390f35b61016660048036038101906101619190610f0a565b610a0a565b6040516101739190610f46565b60405180910390f35b610184610a58565b005b6101a0600480360381019061019b9190610e3f565b610a7b565b005b6101bc60048036038101906101b79190610e3f565b610a88565b005b6101c6610b44565b6040516101d39190610f46565b60405180910390f35b6000811180156101f457506101f033610a0a565b8111155b6101fd57600080fd5b610205610b50565b80600080016000828254610219919061100e565b9250508190555080600060030160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254610275919061100e565b925050819055506000600101548161028d9190611042565b600060030160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008282546102e191906110a6565b92505081905550600060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610348929190611149565b6020604051808303816000875af1158015610367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038b91906111aa565b503373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364826040516103d29190610f46565b60405180910390a250565b600082116103ea57600080fd5b6103f2610b50565b600060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401610454939291906111d7565b6020604051808303816000875af1158015610473573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049791906111aa565b50816000800160008282546104ac919061120e565b9250508190555081600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254610508919061120e565b92505081905550600060010154826105209190611042565b600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008282546105749190611264565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c836040516105c19190610f46565b60405180910390a25050565b600068010000000000000000600060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461062884610a0a565b6000600101546106389190611042565b61064291906110a6565b61064c9190611327565b9050919050565b61065b610b50565b6000610666336105cd565b905060008111156107d45768010000000000000000816106869190611042565b600060030160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008282546106da9190611264565b92505081905550600060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610741929190611149565b6020604051808303816000875af1158015610760573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078491906111aa565b503373ffffffffffffffffffffffffffffffffffffffff167f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4826040516107cb9190610f46565b60405180910390a25b50565b6000806000806000806000806107eb610b44565b9750600060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166357f6b812306040518263ffffffff1660e01b815260040161084b9190611358565b60e060405180830381865afa158015610868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088c9190611388565b90919293949550909150905050809750819850829950505050600060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b81526004016109039190611358565b602060405180830381865afa158015610920573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610944919061142a565b9350600060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e8a306040518363ffffffff1660e01b81526004016109a6929190611457565b602060405180830381865afa1580156109c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e7919061142a565b92506109f289610a0a565b91506109fd896105cd565b9050919395975091939597565b60008060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b6000610a6333610a0a565b90506000811115610a7857610a77816101dc565b5b50565b610a8581336103dd565b50565b6000811115610b4157600060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610af3939291906111d7565b6020604051808303816000875af1158015610b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3691906111aa565b50610b4081610d32565b5b50565b60008060000154905090565b600030905060008060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610bb49190611358565b602060405180830381865afa158015610bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf5919061142a565b9050600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634e71d92d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c6457600080fd5b505af1158015610c78573d6000803e3d6000fd5b50505050610d2e81600060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401610cde9190611358565b602060405180830381865afa158015610cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1f919061142a565b610d29919061100e565b610d32565b5050565b6000811115610e01576000610d45610b44565b1415610d6c578060006002016000828254610d60919061120e565b92505081905550610dc9565b610d74610b44565b6801000000000000000060006002015483610d8f919061120e565b610d999190611042565b610da39190611327565b60006001016000828254610db7919061120e565b92505081905550600080600201819055505b7f3ac0594a85a20354f9dc74f33728416d19ce00d04a406c108cc2dcf2cecea13481604051610df89190610f46565b60405180910390a15b50565b600080fd5b6000819050919050565b610e1c81610e09565b8114610e2757600080fd5b50565b600081359050610e3981610e13565b92915050565b600060208284031215610e5557610e54610e04565b5b6000610e6384828501610e2a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610e9782610e6c565b9050919050565b610ea781610e8c565b8114610eb257600080fd5b50565b600081359050610ec481610e9e565b92915050565b60008060408385031215610ee157610ee0610e04565b5b6000610eef85828601610e2a565b9250506020610f0085828601610eb5565b9150509250929050565b600060208284031215610f2057610f1f610e04565b5b6000610f2e84828501610eb5565b91505092915050565b610f4081610e09565b82525050565b6000602082019050610f5b6000830184610f37565b92915050565b600061010082019050610f77600083018b610f37565b610f84602083018a610f37565b610f916040830189610f37565b610f9e6060830188610f37565b610fab6080830187610f37565b610fb860a0830186610f37565b610fc560c0830185610f37565b610fd260e0830184610f37565b9998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061101982610e09565b915061102483610e09565b92508282101561103757611036610fdf565b5b828203905092915050565b600061104d82610e09565b915061105883610e09565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561109157611090610fdf565b5b828202905092915050565b6000819050919050565b60006110b18261109c565b91506110bc8361109c565b9250827f8000000000000000000000000000000000000000000000000000000000000000018212600084121516156110f7576110f6610fdf565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821360008412161561112f5761112e610fdf565b5b828203905092915050565b61114381610e8c565b82525050565b600060408201905061115e600083018561113a565b61116b6020830184610f37565b9392505050565b60008115159050919050565b61118781611172565b811461119257600080fd5b50565b6000815190506111a48161117e565b92915050565b6000602082840312156111c0576111bf610e04565b5b60006111ce84828501611195565b91505092915050565b60006060820190506111ec600083018661113a565b6111f9602083018561113a565b6112066040830184610f37565b949350505050565b600061121982610e09565b915061122483610e09565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561125957611258610fdf565b5b828201905092915050565b600061126f8261109c565b915061127a8361109c565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038313600083121516156112b5576112b4610fdf565b5b817f80000000000000000000000000000000000000000000000000000000000000000383126000831216156112ed576112ec610fdf565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061133282610e09565b915061133d83610e09565b92508261134d5761134c6112f8565b5b828204905092915050565b600060208201905061136d600083018461113a565b92915050565b60008151905061138281610e13565b92915050565b600080600080600080600060e0888a0312156113a7576113a6610e04565b5b60006113b58a828b01611373565b97505060206113c68a828b01611373565b96505060406113d78a828b01611373565b95505060606113e88a828b01611373565b94505060806113f98a828b01611373565b93505060a061140a8a828b01611373565b92505060c061141b8a828b01611373565b91505092959891949750929550565b6000602082840312156114405761143f610e04565b5b600061144e84828501611373565b91505092915050565b600060408201905061146c600083018561113a565b611479602083018461113a565b939250505056fea2646970667358221220795594f2fe07a454decd154a2e9c7744cd6f0aae312bc6290ac096a11381bb9f64736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001ebb218415b1f70aeff54041c743082f183318ce00000000000000000000000099ef226531aea4e34f3188ab83ae110e3c4d3447
-----Decoded View---------------
Arg [0] : _wg (address): 0x1Ebb218415B1f70aeFf54041c743082f183318cE
Arg [1] : _pair (address): 0x99EF226531aEa4E34f3188aB83Ae110E3C4d3447
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000001ebb218415b1f70aeff54041c743082f183318ce
Arg [1] : 00000000000000000000000099ef226531aea4e34f3188ab83ae110e3c4d3447
Deployed Bytecode Sourcemap
7680:3642:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9141:378;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8629:360;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10024:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9524:279;;;:::i;:::-;;10222:559;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;9908:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8994:142;;;:::i;:::-;;8540:84;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8370:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9811:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9141:378;9206:1;9196:7;:11;:49;;;;;9222:23;9234:10;9222:11;:23::i;:::-;9211:7;:34;;9196:49;9188:58;;;;;;9251:9;:7;:9::i;:::-;9288:7;9265:4;:19;;;:30;;;;;;;:::i;:::-;;;;;;;;9336:7;9300:4;:10;;:22;9311:10;9300:22;;;;;;;;;;;;;;;:32;;;:43;;;;;;;:::i;:::-;;;;;;;;9404:4;:26;;;9394:7;:36;;;;:::i;:::-;9348:4;:10;;:22;9359:10;9348:22;;;;;;;;;;;;;;;:35;;;:83;;;;;;;:::i;:::-;;;;;;;;9436:4;:9;;;;;;;;;;;;:18;;;9455:10;9467:7;9436:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9494:10;9485:29;;;9506:7;9485:29;;;;;;:::i;:::-;;;;;;;;9141:378;:::o;8629:360::-;8711:1;8701:7;:11;8693:20;;;;;;8718:9;:7;:9::i;:::-;8732:4;:9;;;;;;;;;;;;:22;;;8755:10;8775:4;8782:7;8732:58;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8818:7;8795:4;:19;;;:30;;;;;;;:::i;:::-;;;;;;;;8861:7;8830:4;:10;;:17;8841:5;8830:17;;;;;;;;;;;;;;;:27;;;:38;;;;;;;:::i;:::-;;;;;;;;8924:4;:26;;;8914:7;:36;;;;:::i;:::-;8873:4;:10;;:17;8884:5;8873:17;;;;;;;;;;;;;;;:30;;;:78;;;;;;;:::i;:::-;;;;;;;;8969:5;8961:23;;;8976:7;8961:23;;;;;;:::i;:::-;;;;;;;;8629:360;;:::o;10024:193::-;10079:7;7750:5;10166:4;:10;;:17;10177:5;10166:17;;;;;;;;;;;;;;;:30;;;10144:18;10156:5;10144:11;:18::i;:::-;10115:4;:26;;;:47;;;;:::i;:::-;10108:88;;;;:::i;:::-;10100:112;;;;:::i;:::-;10093:119;;10024:193;;;:::o;9524:279::-;9555:9;:7;:9::i;:::-;9569:16;9588:21;9598:10;9588:9;:21::i;:::-;9569:40;;9629:1;9618:8;:12;9614:185;;;7750:5;9684:8;:23;;;;:::i;:::-;9638:4;:10;;:22;9649:10;9638:22;;;;;;;;;;;;;;;:35;;;:70;;;;;;;:::i;:::-;;;;;;;;9714:4;:10;;;;;;;;;;;;:19;;;9734:10;9746:8;9714:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9772:10;9766:27;;;9784:8;9766:27;;;;;;:::i;:::-;;;;;;;;9614:185;9550:253;9524:279::o;10222:559::-;10280:24;10306:21;10329:19;10350:20;10372:19;10393:21;10416;10439:19;10484:16;:14;:16::i;:::-;10465:35;;10559:4;:10;;;;;;;;;;;;:21;;;10589:4;10559:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10505:90;;;;;;;;;;;;;;;;;;;;;;;;;10614:4;:9;;;;;;;;;;;;:19;;;10634:5;10614:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10600:40;;10661:4;:9;;;;;;;;;;;;:19;;;10681:5;10696:4;10661:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10645:57;;10723:18;10735:5;10723:11;:18::i;:::-;10707:34;;10760:16;10770:5;10760:9;:16::i;:::-;10746:30;;10222:559;;;;;;;;;:::o;9908:110::-;9965:7;9986:4;:10;;:17;9997:5;9986:17;;;;;;;;;;;;;;;:27;;;9979:34;;9908:110;;;:::o;8994:142::-;9031:18;9052:23;9064:10;9052:11;:23::i;:::-;9031:44;;9097:1;9084:10;:14;9080:52;;;9106:20;9115:10;9106:8;:20::i;:::-;9080:52;9026:110;8994:142::o;8540:84::-;8588:31;8599:7;8608:10;8588;:31::i;:::-;8540:84;:::o;8370:165::-;8433:1;8423:7;:11;8419:112;;;8442:4;:10;;;;;;;;;;;;:23;;;8466:10;8486:4;8493:7;8442:59;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8507:18;8517:7;8507:9;:18::i;:::-;8419:112;8370:165;:::o;9811:92::-;9858:7;9879:4;:19;;;9872:26;;9811:92;:::o;10786:204::-;10819:13;10843:4;10819:29;;10853:22;10878:4;:10;;;;;;;;;;;;:20;;;10899:5;10878:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10853:52;;10910:4;:7;;;;;;;;;;;;:13;;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10930:55;10970:14;10940:4;:10;;;;;;;;;;;;:20;;;10961:5;10940:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;;;:::i;:::-;10930:9;:55::i;:::-;10814:176;;10786:204::o;10995:324::-;11059:1;11049:7;:11;11045:270;;;11092:1;11072:16;:14;:16::i;:::-;:21;11068:216;;;11125:7;11102:4;:19;;;:30;;;;;;;:::i;:::-;;;;;;;;11068:216;;;11231:16;:14;:16::i;:::-;7750:5;11193:4;:19;;;11183:7;:29;;;;:::i;:::-;11182:46;;;;:::i;:::-;:65;;;;:::i;:::-;11152:4;:26;;;:95;;;;;;;:::i;:::-;;;;;;;;11276:1;11254:4;:19;;:23;;;;11068:216;11294:15;11301:7;11294:15;;;;;;:::i;:::-;;;;;;;;11045:270;10995:324;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:126::-;1062:7;1102:42;1095:5;1091:54;1080:65;;1025:126;;;:::o;1157:96::-;1194:7;1223:24;1241:5;1223:24;:::i;:::-;1212:35;;1157:96;;;:::o;1259:122::-;1332:24;1350:5;1332:24;:::i;:::-;1325:5;1322:35;1312:63;;1371:1;1368;1361:12;1312:63;1259:122;:::o;1387:139::-;1433:5;1471:6;1458:20;1449:29;;1487:33;1514:5;1487:33;:::i;:::-;1387:139;;;;:::o;1532:474::-;1600:6;1608;1657:2;1645:9;1636:7;1632:23;1628:32;1625:119;;;1663:79;;:::i;:::-;1625:119;1783:1;1808:53;1853:7;1844:6;1833:9;1829:22;1808:53;:::i;:::-;1798:63;;1754:117;1910:2;1936:53;1981:7;1972:6;1961:9;1957:22;1936:53;:::i;:::-;1926:63;;1881:118;1532:474;;;;;:::o;2012:329::-;2071:6;2120:2;2108:9;2099:7;2095:23;2091:32;2088:119;;;2126:79;;:::i;:::-;2088:119;2246:1;2271:53;2316:7;2307:6;2296:9;2292:22;2271:53;:::i;:::-;2261:63;;2217:117;2012:329;;;;:::o;2347:118::-;2434:24;2452:5;2434:24;:::i;:::-;2429:3;2422:37;2347:118;;:::o;2471:222::-;2564:4;2602:2;2591:9;2587:18;2579:26;;2615:71;2683:1;2672:9;2668:17;2659:6;2615:71;:::i;:::-;2471:222;;;;:::o;2699:997::-;2988:4;3026:3;3015:9;3011:19;3003:27;;3040:71;3108:1;3097:9;3093:17;3084:6;3040:71;:::i;:::-;3121:72;3189:2;3178:9;3174:18;3165:6;3121:72;:::i;:::-;3203;3271:2;3260:9;3256:18;3247:6;3203:72;:::i;:::-;3285;3353:2;3342:9;3338:18;3329:6;3285:72;:::i;:::-;3367:73;3435:3;3424:9;3420:19;3411:6;3367:73;:::i;:::-;3450;3518:3;3507:9;3503:19;3494:6;3450:73;:::i;:::-;3533;3601:3;3590:9;3586:19;3577:6;3533:73;:::i;:::-;3616;3684:3;3673:9;3669:19;3660:6;3616:73;:::i;:::-;2699:997;;;;;;;;;;;:::o;3702:180::-;3750:77;3747:1;3740:88;3847:4;3844:1;3837:15;3871:4;3868:1;3861:15;3888:191;3928:4;3948:20;3966:1;3948:20;:::i;:::-;3943:25;;3982:20;4000:1;3982:20;:::i;:::-;3977:25;;4021:1;4018;4015:8;4012:34;;;4026:18;;:::i;:::-;4012:34;4071:1;4068;4064:9;4056:17;;3888:191;;;;:::o;4085:348::-;4125:7;4148:20;4166:1;4148:20;:::i;:::-;4143:25;;4182:20;4200:1;4182:20;:::i;:::-;4177:25;;4370:1;4302:66;4298:74;4295:1;4292:81;4287:1;4280:9;4273:17;4269:105;4266:131;;;4377:18;;:::i;:::-;4266:131;4425:1;4422;4418:9;4407:20;;4085:348;;;;:::o;4439:76::-;4475:7;4504:5;4493:16;;4439:76;;;:::o;4521:527::-;4560:4;4580:19;4597:1;4580:19;:::i;:::-;4575:24;;4613:19;4630:1;4613:19;:::i;:::-;4608:24;;4802:1;4734:66;4730:74;4727:1;4723:82;4718:1;4715;4711:9;4704:17;4700:106;4697:132;;;4809:18;;:::i;:::-;4697:132;4988:1;4920:66;4916:74;4913:1;4909:82;4905:1;4902;4898:9;4894:98;4891:124;;;4995:18;;:::i;:::-;4891:124;5040:1;5037;5033:9;5025:17;;4521:527;;;;:::o;5054:118::-;5141:24;5159:5;5141:24;:::i;:::-;5136:3;5129:37;5054:118;;:::o;5178:332::-;5299:4;5337:2;5326:9;5322:18;5314:26;;5350:71;5418:1;5407:9;5403:17;5394:6;5350:71;:::i;:::-;5431:72;5499:2;5488:9;5484:18;5475:6;5431:72;:::i;:::-;5178:332;;;;;:::o;5516:90::-;5550:7;5593:5;5586:13;5579:21;5568:32;;5516:90;;;:::o;5612:116::-;5682:21;5697:5;5682:21;:::i;:::-;5675:5;5672:32;5662:60;;5718:1;5715;5708:12;5662:60;5612:116;:::o;5734:137::-;5788:5;5819:6;5813:13;5804:22;;5835:30;5859:5;5835:30;:::i;:::-;5734:137;;;;:::o;5877:345::-;5944:6;5993:2;5981:9;5972:7;5968:23;5964:32;5961:119;;;5999:79;;:::i;:::-;5961:119;6119:1;6144:61;6197:7;6188:6;6177:9;6173:22;6144:61;:::i;:::-;6134:71;;6090:125;5877:345;;;;:::o;6228:442::-;6377:4;6415:2;6404:9;6400:18;6392:26;;6428:71;6496:1;6485:9;6481:17;6472:6;6428:71;:::i;:::-;6509:72;6577:2;6566:9;6562:18;6553:6;6509:72;:::i;:::-;6591;6659:2;6648:9;6644:18;6635:6;6591:72;:::i;:::-;6228:442;;;;;;:::o;6676:305::-;6716:3;6735:20;6753:1;6735:20;:::i;:::-;6730:25;;6769:20;6787:1;6769:20;:::i;:::-;6764:25;;6923:1;6855:66;6851:74;6848:1;6845:81;6842:107;;;6929:18;;:::i;:::-;6842:107;6973:1;6970;6966:9;6959:16;;6676:305;;;;:::o;6987:525::-;7026:3;7045:19;7062:1;7045:19;:::i;:::-;7040:24;;7078:19;7095:1;7078:19;:::i;:::-;7073:24;;7266:1;7198:66;7194:74;7191:1;7187:82;7182:1;7179;7175:9;7168:17;7164:106;7161:132;;;7273:18;;:::i;:::-;7161:132;7453:1;7385:66;7381:74;7378:1;7374:82;7370:1;7367;7363:9;7359:98;7356:124;;;7460:18;;:::i;:::-;7356:124;7504:1;7501;7497:9;7490:16;;6987:525;;;;:::o;7518:180::-;7566:77;7563:1;7556:88;7663:4;7660:1;7653:15;7687:4;7684:1;7677:15;7704:185;7744:1;7761:20;7779:1;7761:20;:::i;:::-;7756:25;;7795:20;7813:1;7795:20;:::i;:::-;7790:25;;7834:1;7824:35;;7839:18;;:::i;:::-;7824:35;7881:1;7878;7874:9;7869:14;;7704:185;;;;:::o;7895:222::-;7988:4;8026:2;8015:9;8011:18;8003:26;;8039:71;8107:1;8096:9;8092:17;8083:6;8039:71;:::i;:::-;7895:222;;;;:::o;8123:143::-;8180:5;8211:6;8205:13;8196:22;;8227:33;8254:5;8227:33;:::i;:::-;8123:143;;;;:::o;8272:1291::-;8396:6;8404;8412;8420;8428;8436;8444;8493:3;8481:9;8472:7;8468:23;8464:33;8461:120;;;8500:79;;:::i;:::-;8461:120;8620:1;8645:64;8701:7;8692:6;8681:9;8677:22;8645:64;:::i;:::-;8635:74;;8591:128;8758:2;8784:64;8840:7;8831:6;8820:9;8816:22;8784:64;:::i;:::-;8774:74;;8729:129;8897:2;8923:64;8979:7;8970:6;8959:9;8955:22;8923:64;:::i;:::-;8913:74;;8868:129;9036:2;9062:64;9118:7;9109:6;9098:9;9094:22;9062:64;:::i;:::-;9052:74;;9007:129;9175:3;9202:64;9258:7;9249:6;9238:9;9234:22;9202:64;:::i;:::-;9192:74;;9146:130;9315:3;9342:64;9398:7;9389:6;9378:9;9374:22;9342:64;:::i;:::-;9332:74;;9286:130;9455:3;9482:64;9538:7;9529:6;9518:9;9514:22;9482:64;:::i;:::-;9472:74;;9426:130;8272:1291;;;;;;;;;;:::o;9569:351::-;9639:6;9688:2;9676:9;9667:7;9663:23;9659:32;9656:119;;;9694:79;;:::i;:::-;9656:119;9814:1;9839:64;9895:7;9886:6;9875:9;9871:22;9839:64;:::i;:::-;9829:74;;9785:128;9569:351;;;;:::o;9926:332::-;10047:4;10085:2;10074:9;10070:18;10062:26;;10098:71;10166:1;10155:9;10151:17;10142:6;10098:71;:::i;:::-;10179:72;10247:2;10236:9;10232:18;10223:6;10179:72;:::i;:::-;9926:332;;;;;:::o
Swarm Source
ipfs://795594f2fe07a454decd154a2e9c7744cd6f0aae312bc6290ac096a11381bb9f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.