ETH Price: $2,285.09 (+0.36%)

Contract

0x1a300c5A5639C4605C1B47F6e079E8b4056a9376
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim201859682024-06-27 22:19:5972 days ago1719526799IN
0x1a300c5A...4056a9376
0 ETH0.000904127.73280472
Withdraw183795162023-10-18 20:07:23325 days ago1697659643IN
0x1a300c5A...4056a9376
0 ETH0.001849813.12983543
Claim176534932023-07-09 3:30:35427 days ago1688873435IN
0x1a300c5A...4056a9376
0 ETH0.0016359713.99210821
Claim166844462023-02-22 14:02:35563 days ago1677074555IN
0x1a300c5A...4056a9376
0 ETH0.0051444943.99975057
Claim165618452023-02-05 9:59:11580 days ago1675591151IN
0x1a300c5A...4056a9376
0 ETH0.0019760816.90100181
Withdraw164533732023-01-21 6:26:35595 days ago1674282395IN
0x1a300c5A...4056a9376
0 ETH0.0023778716.87943266
Claim164406932023-01-19 11:56:35597 days ago1674129395IN
0x1a300c5A...4056a9376
0 ETH0.0018199415.56559907
Claim159948802022-11-18 5:42:59660 days ago1668750179IN
0x1a300c5A...4056a9376
0 ETH0.0016204213.85917099
Deposit159777602022-11-15 20:17:11662 days ago1668543431IN
0x1a300c5A...4056a9376
0 ETH0.002770721.9931987
Claim159070892022-11-05 23:26:59672 days ago1667690819IN
0x1a300c5A...4056a9376
0 ETH0.0014902412.74575917
Claim158865982022-11-03 2:46:11675 days ago1667443571IN
0x1a300c5A...4056a9376
0 ETH0.0016619414.21423386
Withdraw158865952022-11-03 2:45:35675 days ago1667443535IN
0x1a300c5A...4056a9376
0 ETH0.0020836414.78954893
Deposit158790632022-11-02 1:30:11676 days ago1667352611IN
0x1a300c5A...4056a9376
0 ETH0.001741711.01177009
Claim156014692022-09-24 6:37:11714 days ago1664001431IN
0x1a300c5A...4056a9376
0 ETH0.000560274.79193174
Claim155999212022-09-24 1:26:23715 days ago1663982783IN
0x1a300c5A...4056a9376
0 ETH0.000865667.40382122
Deposit155756132022-09-20 15:34:47718 days ago1663688087IN
0x1a300c5A...4056a9376
0 ETH0.0014539910.16208708
Claim155638522022-09-18 23:59:23720 days ago1663545563IN
0x1a300c5A...4056a9376
0 ETH0.000601995.14876347
Claim154994312022-09-08 23:27:01730 days ago1662679621IN
0x1a300c5A...4056a9376
0 ETH0.002379417.75393662
Withdraw154813742022-09-06 2:14:44733 days ago1662430484IN
0x1a300c5A...4056a9376
0 ETH0.001228668.72025537
Claim154813552022-09-06 2:11:53733 days ago1662430313IN
0x1a300c5A...4056a9376
0 ETH0.0013981411.95805249
Claim154768532022-09-05 8:46:02733 days ago1662367562IN
0x1a300c5A...4056a9376
0 ETH0.000935117.99785433
Claim154077462022-08-25 7:13:10744 days ago1661411590IN
0x1a300c5A...4056a9376
0 ETH0.000837427.16234352
Withdraw154077452022-08-25 7:13:02744 days ago1661411582IN
0x1a300c5A...4056a9376
0 ETH0.000922826.644503
Claim153402812022-08-14 14:27:16755 days ago1660487236IN
0x1a300c5A...4056a9376
0 ETH0.0013892111.88169662
Claim153394772022-08-14 11:25:27755 days ago1660476327IN
0x1a300c5A...4056a9376
0 ETH0.0007656.54291595
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
137022732021-11-28 12:03:041014 days ago1638100984  Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StakingRewards

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

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

Contract ABI

[{"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"}]

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

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.