Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
18260543 | 476 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
Team
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-02 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; interface Callable { function tokenCallback(address _from, uint256 _tokens, bytes calldata _data) external returns (bool); } interface Router { struct ExactInputSingleParams { address tokenIn; address tokenOut; uint24 fee; address recipient; uint256 amountIn; uint256 amountOutMinimum; uint160 sqrtPriceLimitX96; } function factory() external view returns (address); function positionManager() external view returns (address); function WETH9() external view returns (address); function exactInputSingle(ExactInputSingleParams calldata) external payable returns (uint256); } interface Factory { function createPool(address _tokenA, address _tokenB, uint24 _fee) external returns (address); } interface Pool { function initialize(uint160 _sqrtPriceX96) external; } interface PositionManager { struct MintParams { address token0; address token1; uint24 fee; int24 tickLower; int24 tickUpper; uint256 amount0Desired; uint256 amount1Desired; uint256 amount0Min; uint256 amount1Min; address recipient; uint256 deadline; } struct CollectParams { uint256 tokenId; address recipient; uint128 amount0Max; uint128 amount1Max; } function mint(MintParams calldata) external payable returns (uint256 tokenId, uint128 liquidity, uint256 amount0, uint256 amount1); function collect(CollectParams calldata) external payable returns (uint256 amount0, uint256 amount1); } interface ERC20 { function balanceOf(address) external view returns (uint256); function transfer(address, uint256) external returns (bool); } interface WETH is ERC20 { function withdraw(uint256) external; } contract Team { Router constant private ROUTER = Router(0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45); struct Share { address payable user; uint256 shares; } Share[] public shares; uint256 public totalShares; ERC20 public token; function initialize(address _creator) external { require(totalShares == 0); token = ERC20(msg.sender); _addShare(_creator, 3); _addShare(0xe6c791FBd46dB3f4EdA5f7Bb76474F4FA530733E, 2); _addShare(0xc28C9da0F8a500DFfC16Ff09a3DD1Cc4c530D346, 1); } receive() external payable {} function withdrawETH() public { uint256 _balance = address(this).balance; if (_balance > 0) { for (uint256 i = 0; i < shares.length; i++) { Share memory _share = shares[i]; !_share.user.send(_balance * _share.shares / totalShares); } } } function withdrawToken(ERC20 _token) public { WETH _weth = WETH(ROUTER.WETH9()); if (address(_token) == address(_weth)) { _weth.withdraw(_weth.balanceOf(address(this))); withdrawETH(); } else { uint256 _balance = _token.balanceOf(address(this)); if (_balance > 0) { for (uint256 i = 0; i < shares.length; i++) { Share memory _share = shares[i]; _token.transfer(_share.user, _balance * _share.shares / totalShares); } } } } function withdrawWETH() public { withdrawToken(ERC20(ROUTER.WETH9())); } function withdrawFees() external { withdrawWETH(); withdrawToken(token); } function _addShare(address _user, uint256 _shares) internal { shares.push(Share(payable(_user), _shares)); totalShares += _shares; } } contract Token { uint256 constant private UINT_MAX = type(uint256).max; uint128 constant private UINT128_MAX = type(uint128).max; uint256 constant private MAX_NAME_LENGTH = 32; uint256 constant private MIN_SUPPLY = 1e16; // 0.01 tokens uint256 constant private MAX_SUPPLY = 1e33; // 1 quadrillion tokens uint256 constant private PERCENT_PRECISION = 1000; // 1 = 0.1% Router constant private ROUTER = Router(0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45); int24 constant internal MIN_TICK = -887272; int24 constant internal MAX_TICK = -MIN_TICK; uint160 constant internal MIN_SQRT_RATIO = 4295128739; uint160 constant internal MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342; string public name; string public symbol; uint8 constant public decimals = 18; string constant public source = "Created with Bossman's Bakery (bakery.mullet.capital)!"; struct User { uint256 balance; mapping(address => uint256) allowance; } struct Info { bool locked; Team team; address pool; address creator; uint256 totalSupply; uint256 initialMarketCap; uint256 upperMarketCap; uint256 concentratedPercent; uint256 creatorFee; mapping(address => User) users; uint256 lowerPositionId; uint256 upperPositionId; } Info private info; event Transfer(address indexed from, address indexed to, uint256 tokens); event Approval(address indexed owner, address indexed spender, uint256 tokens); function lock() external { require(!info.locked); require(totalSupply() == 0); info.locked = true; } function initialize(address _creator, string memory _name, string memory _symbol, uint256 _totalSupply, uint256 _initialMarketCap, uint256 _upperMarketCap, uint256 _concentratedPercent, uint256 _creatorFee) external payable { require(!info.locked); require(totalSupply() == 0); require(bytes(_name).length > 0 && bytes(_name).length <= MAX_NAME_LENGTH); require(bytes(_symbol).length > 0 && bytes(_symbol).length <= MAX_NAME_LENGTH); require(_totalSupply >= MIN_SUPPLY && _totalSupply <= MAX_SUPPLY); require(_initialMarketCap > 0 && _upperMarketCap > _initialMarketCap); require(_concentratedPercent < PERCENT_PRECISION); require(_creatorFee < PERCENT_PRECISION); info.team = new Team(); info.team.initialize(_creator); info.creator = _creator; name = _name; symbol = _symbol; info.totalSupply = _totalSupply; info.users[address(this)].balance = _totalSupply; emit Transfer(address(0x0), address(this), _totalSupply); info.initialMarketCap = _initialMarketCap; info.upperMarketCap = _upperMarketCap; info.concentratedPercent = _concentratedPercent; info.creatorFee = _creatorFee; _createLP(_initialMarketCap, _upperMarketCap, _concentratedPercent, _creatorFee); } function collectTradingFees() external { PositionManager _pm = PositionManager(ROUTER.positionManager()); if (info.lowerPositionId != 0) { _pm.collect(PositionManager.CollectParams({ tokenId: info.lowerPositionId, recipient: team(), amount0Max: UINT128_MAX, amount1Max: UINT128_MAX })); } _pm.collect(PositionManager.CollectParams({ tokenId: info.upperPositionId, recipient: team(), amount0Max: UINT128_MAX, amount1Max: UINT128_MAX })); info.team.withdrawFees(); } 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) { unchecked { 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) { _transfer(msg.sender, _to, _tokens); uint32 _size; assembly { _size := extcodesize(_to) } if (_size > 0) { require(Callable(_to).tokenCallback(msg.sender, _tokens, _data)); } return true; } function creator() public view returns (address) { return info.creator; } function team() public view returns (address) { return address(info.team); } function pool() public view returns (address) { return info.pool; } 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 positions() external view returns (uint256 lower, uint256 upper) { return (info.lowerPositionId, info.upperPositionId); } function initialMarketCap() external view returns (string memory) { return string(abi.encodePacked(_uint2str(info.initialMarketCap, 18, 5), " ETH")); } function upperMarketCap() external view returns (string memory) { return string(abi.encodePacked(_uint2str(info.upperMarketCap, 18, 5), " ETH")); } function concentratedPercent() external view returns (string memory) { return string(abi.encodePacked(_uint2str(info.concentratedPercent * 100, 3, 3), "%")); } function creatorFee() external view returns (string memory) { return string(abi.encodePacked(_uint2str(info.creatorFee * 100, 3, 3), "%")); } function _createLP(uint256 _initialMarketCap, uint256 _upperMarketCap, uint256 _concentratedPercent, uint256 _creatorFee) internal { unchecked { address _this = address(this); address _weth = ROUTER.WETH9(); bool _weth0 = _weth < _this; (uint160 _initialSqrtPrice, ) = _getPriceAndTickFromValues(_weth0, totalSupply(), _initialMarketCap); info.pool = Factory(ROUTER.factory()).createPool(_this, _weth, 10000); Pool(pool()).initialize(_initialSqrtPrice); PositionManager _pm = PositionManager(ROUTER.positionManager()); _approve(_this, address(_pm), totalSupply()); ( , int24 _minTick) = _getPriceAndTickFromValues(_weth0, totalSupply(), _initialMarketCap); ( , int24 _maxTick) = _getPriceAndTickFromValues(_weth0, totalSupply(), _upperMarketCap); uint256 _concentratedTokens = _concentratedPercent * totalSupply() / PERCENT_PRECISION; if (_concentratedTokens > 0) { if (_creatorFee > 0) { _pm.mint(PositionManager.MintParams({ token0: _weth0 ? _weth : _this, token1: !_weth0 ? _weth : _this, fee: 10000, tickLower: _weth0 ? _minTick - 200 : _minTick, tickUpper: !_weth0 ? _minTick + 200 : _minTick, amount0Desired: _weth0 ? 0 : _concentratedTokens * _creatorFee / PERCENT_PRECISION, amount1Desired: !_weth0 ? 0 : _concentratedTokens * _creatorFee / PERCENT_PRECISION, amount0Min: 0, amount1Min: 0, recipient: creator(), deadline: block.timestamp })); } (info.lowerPositionId, , , ) = _pm.mint(PositionManager.MintParams({ token0: _weth0 ? _weth : _this, token1: !_weth0 ? _weth : _this, fee: 10000, tickLower: _weth0 ? _minTick - 200 : _minTick, tickUpper: !_weth0 ? _minTick + 200 : _minTick, amount0Desired: _weth0 ? 0 : _concentratedTokens * (PERCENT_PRECISION - _creatorFee) / PERCENT_PRECISION, amount1Desired: !_weth0 ? 0 : _concentratedTokens * (PERCENT_PRECISION - _creatorFee) / PERCENT_PRECISION, amount0Min: 0, amount1Min: 0, recipient: _this, deadline: block.timestamp })); _minTick = _weth0 ? _minTick - 200 : _minTick + 200; } if (_creatorFee > 0) { _pm.mint(PositionManager.MintParams({ token0: _weth0 ? _weth : _this, token1: !_weth0 ? _weth : _this, fee: 10000, tickLower: _weth0 ? _maxTick : _minTick, tickUpper: !_weth0 ? _maxTick : _minTick, amount0Desired: _weth0 ? 0 : (totalSupply() - _concentratedTokens) * _creatorFee / PERCENT_PRECISION, amount1Desired: !_weth0 ? 0 : (totalSupply() - _concentratedTokens) * _creatorFee / PERCENT_PRECISION, amount0Min: 0, amount1Min: 0, recipient: creator(), deadline: block.timestamp })); } (info.upperPositionId, , , ) = _pm.mint(PositionManager.MintParams({ token0: _weth0 ? _weth : _this, token1: !_weth0 ? _weth : _this, fee: 10000, tickLower: _weth0 ? _maxTick : _minTick, tickUpper: !_weth0 ? _maxTick : _minTick, amount0Desired: _weth0 ? 0 : (totalSupply() - _concentratedTokens) * (PERCENT_PRECISION - _creatorFee) / PERCENT_PRECISION, amount1Desired: !_weth0 ? 0 : (totalSupply() - _concentratedTokens) * (PERCENT_PRECISION - _creatorFee) / PERCENT_PRECISION, amount0Min: 0, amount1Min: 0, recipient: _this, deadline: block.timestamp })); if (_this.balance > 0) { ROUTER.exactInputSingle{value:_this.balance}(Router.ExactInputSingleParams({ tokenIn: _weth, tokenOut: _this, fee: 10000, recipient: creator(), amountIn: _this.balance, amountOutMinimum: 0, sqrtPriceLimitX96: 0 })); } } } 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) { unchecked { require(_tokens > 0); require(balanceOf(_from) >= _tokens); info.users[_from].balance -= _tokens; info.users[_to].balance += _tokens; emit Transfer(_from, _to, _tokens); return true; } } function _getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) { unchecked { uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick)); require(absTick <= uint256(int256(MAX_TICK)), 'T'); uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000; if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128; if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128; if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128; if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128; if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128; if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128; if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128; if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128; if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128; if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128; if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128; if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128; if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128; if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128; if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128; if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128; if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128; if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128; if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128; if (tick > 0) ratio = type(uint256).max / ratio; sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1)); } } function _getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) { unchecked { require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R'); uint256 ratio = uint256(sqrtPriceX96) << 32; uint256 r = ratio; uint256 msb = 0; assembly { let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) msb := or(msb, f) r := shr(f, r) } assembly { let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF)) msb := or(msb, f) r := shr(f, r) } assembly { let f := shl(5, gt(r, 0xFFFFFFFF)) msb := or(msb, f) r := shr(f, r) } assembly { let f := shl(4, gt(r, 0xFFFF)) msb := or(msb, f) r := shr(f, r) } assembly { let f := shl(3, gt(r, 0xFF)) msb := or(msb, f) r := shr(f, r) } assembly { let f := shl(2, gt(r, 0xF)) msb := or(msb, f) r := shr(f, r) } assembly { let f := shl(1, gt(r, 0x3)) msb := or(msb, f) r := shr(f, r) } assembly { let f := gt(r, 0x1) msb := or(msb, f) } if (msb >= 128) r = ratio >> (msb - 127); else r = ratio << (127 - msb); int256 log_2 = (int256(msb) - 128) << 64; assembly { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(63, f)) r := shr(f, r) } assembly { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(62, f)) r := shr(f, r) } assembly { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(61, f)) r := shr(f, r) } assembly { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(60, f)) r := shr(f, r) } assembly { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(59, f)) r := shr(f, r) } assembly { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(58, f)) r := shr(f, r) } assembly { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(57, f)) r := shr(f, r) } assembly { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(56, f)) r := shr(f, r) } assembly { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(55, f)) r := shr(f, r) } assembly { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(54, f)) r := shr(f, r) } assembly { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(53, f)) r := shr(f, r) } assembly { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(52, f)) r := shr(f, r) } assembly { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(51, f)) r := shr(f, r) } assembly { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(50, f)) } int256 log_sqrt10001 = log_2 * 255738958999603826347141; int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128); int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128); tick = tickLow == tickHi ? tickLow : _getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow; } } function _sqrt(uint256 _n) internal pure returns (uint256 result) { unchecked { uint256 _tmp = (_n + 1) / 2; result = _n; while (_tmp < result) { result = _tmp; _tmp = (_n / _tmp + _tmp) / 2; } } } function _getPriceAndTickFromValues(bool _weth0, uint256 _tokens, uint256 _weth) internal pure returns (uint160 price, int24 tick) { uint160 _tmpPrice = uint160(_sqrt(2**192 / (!_weth0 ? _tokens : _weth) * (_weth0 ? _tokens : _weth))); tick = _getTickAtSqrtRatio(_tmpPrice); tick = tick - (tick % 200); price = _getSqrtRatioAtTick(tick); } function _uint2str(uint256 _value, uint256 _scale, uint256 _maxDecimals) internal pure returns (string memory str) { uint256 _d = _scale > _maxDecimals ? _maxDecimals : _scale; uint256 _n = _value / 10**(_scale > _d ? _scale - _d : 0); if (_n == 0) { return "0"; } uint256 _digits = 1; uint256 _tmp = _n; while (_tmp > 9) { _tmp /= 10; _digits++; } _tmp = _digits > _d ? _digits : _d + 1; uint256 _offset = (_tmp > _d + 1 ? _tmp - _d - 1 > _d ? _d : _tmp - _d - 1 : 0); for (uint256 i = 0; i < _tmp - _offset; i++) { uint256 _dec = i < _tmp - _digits ? 0 : (_n / (10**(_tmp - i - 1))) % 10; bytes memory _char = new bytes(1); _char[0] = bytes1(uint8(_dec) + 48); str = string(abi.encodePacked(str, string(_char))); if (i < _tmp - _d - 1) { if ((i + 1) % 3 == (_tmp - _d) % 3) { str = string(abi.encodePacked(str, ",")); } } else { if ((_n / 10**_offset) % 10**(_tmp - _offset - i - 1) == 0) { break; } else if (i == _tmp - _d - 1) { str = string(abi.encodePacked(str, ".")); } } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_creator","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"shares","outputs":[{"internalType":"address payable","name":"user","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"_token","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561000f575f80fd5b5061084d8061001d5f395ff3fe60806040526004361061007c575f3560e01c8063894760691161004c5780638947606914610117578063c4d66de814610136578063e086e5ec14610155578063fc0c546a14610169575f80fd5b80633a98ef3914610087578063476343ee146100af5780634c02f62e146100c557806357a858fc146100d9575f80fd5b3661008357005b5f80fd5b348015610092575f80fd5b5061009c60015481565b6040519081526020015b60405180910390f35b3480156100ba575f80fd5b506100c36101a0565b005b3480156100d0575f80fd5b506100c36101bf565b3480156100e4575f80fd5b506100f86100f33660046106ea565b610236565b604080516001600160a01b0390931683526020830191909152016100a6565b348015610122575f80fd5b506100c3610131366004610715565b61026b565b348015610141575f80fd5b506100c3610150366004610715565b61052f565b348015610160575f80fd5b506100c3610599565b348015610174575f80fd5b50600254610188906001600160a01b031681565b6040516001600160a01b0390911681526020016100a6565b6101a86101bf565b6002546101bd906001600160a01b031661026b565b565b6101bd7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610212573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101319190610737565b5f8181548110610244575f80fd5b5f918252602090912060029091020180546001909101546001600160a01b03909116915082565b5f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102e09190610737565b9050806001600160a01b0316826001600160a01b0316036103c0576040516370a0823160e01b81523060048201526001600160a01b03821690632e1a7d4d9082906370a0823190602401602060405180830381865afa158015610345573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103699190610752565b6040518263ffffffff1660e01b815260040161038791815260200190565b5f604051808303815f87803b15801561039e575f80fd5b505af11580156103b0573d5f803e3d5ffd5b505050506103bc610599565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610404573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104289190610752565b9050801561052a575f5b5f54811015610528575f80828154811061044e5761044e610769565b5f9182526020918290206040805180820190915260029092020180546001600160a01b03908116808452600192830154948401859052915492945088169263a9059cbb929061049d9088610791565b6104a791906107ae565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156104ef573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061051391906107cd565b50508080610520906107ec565b915050610432565b505b505050565b6001541561053b575f80fd5b600280546001600160a01b0319163317905561055881600361063c565b61057773e6c791fbd46db3f4eda5f7bb76474f4fa530733e600261063c565b61059673c28c9da0f8a500dffc16ff09a3dd1cc4c530d346600161063c565b50565b478015610596575f5b5f548110156103bc575f8082815481106105be576105be610769565b5f9182526020918290206040805180820190915260029092020180546001600160a01b03168083526001918201549383018490529054919350916108fc91906106079087610791565b61061191906107ae565b6040518115909202915f818181858888f1935050505050508080610634906107ec565b9150506105a2565b604080518082019091526001600160a01b038381168252602082018381525f80546001808201835582805294517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563600290920291820180546001600160a01b031916919095161790935590517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564909201919091558154839291906106e1908490610804565b90915550505050565b5f602082840312156106fa575f80fd5b5035919050565b6001600160a01b0381168114610596575f80fd5b5f60208284031215610725575f80fd5b813561073081610701565b9392505050565b5f60208284031215610747575f80fd5b815161073081610701565b5f60208284031215610762575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176107a8576107a861077d565b92915050565b5f826107c857634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156107dd575f80fd5b81518015158114610730575f80fd5b5f600182016107fd576107fd61077d565b5060010190565b808201808211156107a8576107a861077d56fea26469706673582212205a7d6207f78ca60fa96c729b5948f291193052a1303377654ac9c3ef10d5ae3a64736f6c63430008150033
Deployed Bytecode
0x60806040526004361061007c575f3560e01c8063894760691161004c5780638947606914610117578063c4d66de814610136578063e086e5ec14610155578063fc0c546a14610169575f80fd5b80633a98ef3914610087578063476343ee146100af5780634c02f62e146100c557806357a858fc146100d9575f80fd5b3661008357005b5f80fd5b348015610092575f80fd5b5061009c60015481565b6040519081526020015b60405180910390f35b3480156100ba575f80fd5b506100c36101a0565b005b3480156100d0575f80fd5b506100c36101bf565b3480156100e4575f80fd5b506100f86100f33660046106ea565b610236565b604080516001600160a01b0390931683526020830191909152016100a6565b348015610122575f80fd5b506100c3610131366004610715565b61026b565b348015610141575f80fd5b506100c3610150366004610715565b61052f565b348015610160575f80fd5b506100c3610599565b348015610174575f80fd5b50600254610188906001600160a01b031681565b6040516001600160a01b0390911681526020016100a6565b6101a86101bf565b6002546101bd906001600160a01b031661026b565b565b6101bd7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610212573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101319190610737565b5f8181548110610244575f80fd5b5f918252602090912060029091020180546001909101546001600160a01b03909116915082565b5f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102e09190610737565b9050806001600160a01b0316826001600160a01b0316036103c0576040516370a0823160e01b81523060048201526001600160a01b03821690632e1a7d4d9082906370a0823190602401602060405180830381865afa158015610345573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103699190610752565b6040518263ffffffff1660e01b815260040161038791815260200190565b5f604051808303815f87803b15801561039e575f80fd5b505af11580156103b0573d5f803e3d5ffd5b505050506103bc610599565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610404573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104289190610752565b9050801561052a575f5b5f54811015610528575f80828154811061044e5761044e610769565b5f9182526020918290206040805180820190915260029092020180546001600160a01b03908116808452600192830154948401859052915492945088169263a9059cbb929061049d9088610791565b6104a791906107ae565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156104ef573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061051391906107cd565b50508080610520906107ec565b915050610432565b505b505050565b6001541561053b575f80fd5b600280546001600160a01b0319163317905561055881600361063c565b61057773e6c791fbd46db3f4eda5f7bb76474f4fa530733e600261063c565b61059673c28c9da0f8a500dffc16ff09a3dd1cc4c530d346600161063c565b50565b478015610596575f5b5f548110156103bc575f8082815481106105be576105be610769565b5f9182526020918290206040805180820190915260029092020180546001600160a01b03168083526001918201549383018490529054919350916108fc91906106079087610791565b61061191906107ae565b6040518115909202915f818181858888f1935050505050508080610634906107ec565b9150506105a2565b604080518082019091526001600160a01b038381168252602082018381525f80546001808201835582805294517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563600290920291820180546001600160a01b031916919095161790935590517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564909201919091558154839291906106e1908490610804565b90915550505050565b5f602082840312156106fa575f80fd5b5035919050565b6001600160a01b0381168114610596575f80fd5b5f60208284031215610725575f80fd5b813561073081610701565b9392505050565b5f60208284031215610747575f80fd5b815161073081610701565b5f60208284031215610762575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176107a8576107a861077d565b92915050565b5f826107c857634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156107dd575f80fd5b81518015158114610730575f80fd5b5f600182016107fd576107fd61077d565b5060010190565b808201808211156107a8576107a861077d56fea26469706673582212205a7d6207f78ca60fa96c729b5948f291193052a1303377654ac9c3ef10d5ae3a64736f6c63430008150033
Deployed Bytecode Sourcemap
1753:1623:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1952:26;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;1952:26:0;;;;;;;;3144:82;;;;;;;;;;;;;:::i;:::-;;3062:77;;;;;;;;;;;;;:::i;1927:21::-;;;;;;;;;;-1:-1:-1;1927:21:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;589:32:1;;;571:51;;653:2;638:18;;631:34;;;;544:18;1927:21:0;381:290:1;2579:478:0;;;;;;;;;;-1:-1:-1;2579:478:0;;;;;:::i;:::-;;:::i;2008:261::-;;;;;;;;;;-1:-1:-1;2008:261:0;;;;;:::i;:::-;;:::i;2308:266::-;;;;;;;;;;;;;:::i;1982:18::-;;;;;;;;;;-1:-1:-1;1982:18:0;;;;-1:-1:-1;;;;;1982:18:0;;;;;;-1:-1:-1;;;;;1527:32:1;;;1509:51;;1497:2;1482:18;1982::0;1350:216:1;3144:82:0;3182:14;:12;:14::i;:::-;3215:5;;3201:20;;-1:-1:-1;;;;;3215:5:0;3201:13;:20::i;:::-;3144:82::o;3062:77::-;3098:36;1813:42;-1:-1:-1;;;;;3118:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1927:21::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1927:21:0;;;;-1:-1:-1;1927:21:0;:::o;2579:478::-;2628:10;1813:42;-1:-1:-1;;;;;2646:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2628:33;;2697:5;-1:-1:-1;;;;;2670:33:0;2678:6;-1:-1:-1;;;;;2670:33:0;;2666:387;;2726:30;;-1:-1:-1;;;2726:30:0;;2750:4;2726:30;;;1509:51:1;-1:-1:-1;;;;;2711:14:0;;;;;;;2726:15;;1482:18:1;;2726:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2711:46;;;;;;;;;;;;;160:25:1;;148:2;133:18;;14:177;2711:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2763:13;:11;:13::i;:::-;2623:434;2579:478;:::o;2666:387::-;2813:31;;-1:-1:-1;;;2813:31:0;;2838:4;2813:31;;;1509:51:1;2794:16:0;;-1:-1:-1;;;;;2813:16:0;;;;;1482:18:1;;2813:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2794:50;-1:-1:-1;2854:12:0;;2850:198;;2880:9;2875:167;2899:6;:13;2895:17;;2875:167;;;2927:19;2949:6;2956:1;2949:9;;;;;;;;:::i;:::-;;;;;;;;;;2927:31;;;;;;;;;2949:9;;;;;2927:31;;-1:-1:-1;;;;;2927:31:0;;;;;;;;;;;;;;;;;3022:11;;2927:31;;-1:-1:-1;2966:15:0;;;;;3022:11;2995:24;;:8;:24;:::i;:::-;:38;;;;:::i;:::-;2966:68;;-1:-1:-1;;;;;;2966:68:0;;;;;;;-1:-1:-1;;;;;589:32:1;;;2966:68:0;;;571:51:1;638:18;;;631:34;544:18;;2966:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2919:123;2914:3;;;;;:::i;:::-;;;;2875:167;;;;2850:198;2788:265;2623:434;2579:478;:::o;2008:261::-;2068:11;;:16;2060:25;;;;;;2090:5;:25;;-1:-1:-1;;;;;;2090:25:0;2104:10;2090:25;;;2120:22;2130:8;2140:1;2120:9;:22::i;:::-;2147:56;2157:42;2201:1;2147:9;:56::i;:::-;2208;2218:42;2262:1;2208:9;:56::i;:::-;2008:261;:::o;2308:266::-;2362:21;2392:12;;2388:182;;2417:9;2412:153;2436:6;:13;2432:17;;2412:153;;;2463:19;2485:6;2492:1;2485:9;;;;;;;;:::i;:::-;;;;;;;;;;2463:31;;;;;;;;;2485:9;;;;;2463:31;;-1:-1:-1;;;;;2463:31:0;;;;;;;;;;;;;;;2546:11;;2463:31;;-1:-1:-1;2463:31:0;2502:56;;2546:11;2519:24;;:8;:24;:::i;:::-;:38;;;;:::i;:::-;2502:56;;;;;;;;;;;;;;;;;;;;;2501:57;2456:109;2451:3;;;;;:::i;:::-;;;;2412:153;;3233:140;3310:30;;;;;;;;;-1:-1:-1;;;;;3310:30:0;;;;;;;;;;;-1:-1:-1;3298:43:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3298:43:0;;;;;;;;;;;;;;;;;;;3346:22;;3310:30;;3298:43;-1:-1:-1;3346:22:0;;3310:30;;3346:22;:::i;:::-;;;;-1:-1:-1;;;;3233:140:0:o;196:180:1:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:1;;196:180;-1:-1:-1;196:180:1:o;676:138::-;-1:-1:-1;;;;;758:31:1;;748:42;;738:70;;804:1;801;794:12;819:267;891:6;944:2;932:9;923:7;919:23;915:32;912:52;;;960:1;957;950:12;912:52;999:9;986:23;1018:38;1050:5;1018:38;:::i;:::-;1075:5;819:267;-1:-1:-1;;;819:267:1:o;1571:258::-;1641:6;1694:2;1682:9;1673:7;1669:23;1665:32;1662:52;;;1710:1;1707;1700:12;1662:52;1742:9;1736:16;1761:38;1793:5;1761:38;:::i;2042:184::-;2112:6;2165:2;2153:9;2144:7;2140:23;2136:32;2133:52;;;2181:1;2178;2171:12;2133:52;-1:-1:-1;2204:16:1;;2042:184;-1:-1:-1;2042:184:1:o;2231:127::-;2292:10;2287:3;2283:20;2280:1;2273:31;2323:4;2320:1;2313:15;2347:4;2344:1;2337:15;2363:127;2424:10;2419:3;2415:20;2412:1;2405:31;2455:4;2452:1;2445:15;2479:4;2476:1;2469:15;2495:168;2568:9;;;2599;;2616:15;;;2610:22;;2596:37;2586:71;;2637:18;;:::i;:::-;2495:168;;;;:::o;2668:217::-;2708:1;2734;2724:132;;2778:10;2773:3;2769:20;2766:1;2759:31;2813:4;2810:1;2803:15;2841:4;2838:1;2831:15;2724:132;-1:-1:-1;2870:9:1;;2668:217::o;3177:277::-;3244:6;3297:2;3285:9;3276:7;3272:23;3268:32;3265:52;;;3313:1;3310;3303:12;3265:52;3345:9;3339:16;3398:5;3391:13;3384:21;3377:5;3374:32;3364:60;;3420:1;3417;3410:12;3459:135;3498:3;3519:17;;;3516:43;;3539:18;;:::i;:::-;-1:-1:-1;3586:1:1;3575:13;;3459:135::o;3599:125::-;3664:9;;;3685:10;;;3682:36;;;3698:18;;:::i
Swarm Source
ipfs://5a7d6207f78ca60fa96c729b5948f291193052a1303377654ac9c3ef10d5ae3a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.