Source Code
Overview
S Balance
More Info
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
19117037 | 22 hrs ago | 0 S | ||||
19116711 | 22 hrs ago | 0 S | ||||
19116711 | 22 hrs ago | 0 S | ||||
19090754 | 25 hrs ago | 0 S | ||||
19090754 | 25 hrs ago | 0 S | ||||
19090419 | 25 hrs ago | 0 S | ||||
19089747 | 25 hrs ago | 0 S | ||||
19089747 | 25 hrs ago | 0 S | ||||
19079062 | 26 hrs ago | 0 S | ||||
19079062 | 26 hrs ago | 0 S | ||||
19078930 | 26 hrs ago | 0 S | ||||
19078930 | 26 hrs ago | 0 S | ||||
19055312 | 28 hrs ago | 0 S | ||||
19055312 | 28 hrs ago | 0 S | ||||
19051155 | 29 hrs ago | 0 S | ||||
19051155 | 29 hrs ago | 0 S | ||||
19048846 | 29 hrs ago | 0 S | ||||
19048846 | 29 hrs ago | 0 S | ||||
19047441 | 29 hrs ago | 0 S | ||||
19047441 | 29 hrs ago | 0 S | ||||
19046722 | 29 hrs ago | 0 S | ||||
19046722 | 29 hrs ago | 0 S | ||||
19046022 | 29 hrs ago | 0 S | ||||
19046022 | 29 hrs ago | 0 S | ||||
19042154 | 30 hrs ago | 0 S |
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x4654b67B...9e48f4EB6 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
SlsV1Factory
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Unlicense pragma solidity ^0.8.10; import "./SlsV1Pair.sol"; import "./interfaces/ISlsV1Pair.sol"; import "./interfaces/ISLSErrors.sol"; contract SlsV1Factory is IErrors { address public feePool; address public feeToSetter; mapping(address => mapping(address => address)) public pairs; address[] public allPairs; event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); constructor(address _feeToSetter) { feeToSetter = _feeToSetter; } function createPair( address tokenA, address tokenB ) public returns (address pair) { require(tokenA != tokenB, Sls_Error(SlsError.IDENTICAL_ADDRESSES)); (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require( tokenA != address(0) && tokenB != address(0), Sls_Error(SlsError.ZERO_ADDRESS) ); require( pairs[tokenA][tokenB] == address(0), Sls_Error(SlsError.PAIR_EXISTS) ); bytes32 salt = keccak256(abi.encodePacked(token0, token1)); pair = address(new SlsV1Pair{salt: salt}()); ISlsV1Pair(pair).initialize(token0, token1); pairs[token0][token1] = pair; pairs[token1][token0] = pair; allPairs.push(pair); emit PairCreated(token0, token1, pair, allPairs.length); } function setFeeTo(address _feeTo) external { require(msg.sender == feeToSetter, Sls_Error(SlsError.FORBIDDEN)); feePool = _feeTo; } function setFeeToSetter(address _feeToSetter) external { require(msg.sender == feeToSetter, Sls_Error(SlsError.FORBIDDEN)); feeToSetter = _feeToSetter; } }
// SPDX-License-Identifier: Unlicense pragma solidity ^0.8.10; import "solmate/tokens/ERC20.sol"; import "./libraries/Math.sol"; import "./libraries/UQ112x112.sol"; import "./interfaces/ISLSErrors.sol"; import "./interfaces/ISlsV1Factory.sol"; interface IERC20 { function balanceOf(address) external returns (uint256); function transfer(address to, uint256 amount) external; } error AlreadyInitialized(); contract SlsV1Pair is ERC20, IErrors, Math { using UQ112x112 for uint224; uint256 constant MINIMUM_LIQUIDITY = 1000; address public factory; address public token0; address public token1; uint112 private reserve0; uint112 private reserve1; uint32 private blockTimestampLast; uint256 public price0CumulativeLast; uint256 public price1CumulativeLast; uint public kLast; bool private isEntered; event Burn( address indexed sender, uint256 amount0, uint256 amount1, address to ); event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Sync(uint256 reserve0, uint256 reserve1); event Swap( address indexed sender, uint256 amount0Out, uint256 amount1Out, address indexed to ); modifier nonReentrant() { require(!isEntered, Sls_Error(SlsError.LOCKED)); isEntered = true; _; isEntered = false; } constructor() ERC20("SLS V1", "SLS-V1", 18) { factory = msg.sender; } function initialize(address token0_, address token1_) public { require( token0 == address(0) && token1 == address(0), Sls_Error(SlsError.ALREADY_INITIALIZED) ); require(msg.sender == factory, Sls_Error(SlsError.FORBIDDEN)); token0 = token0_; token1 = token1_; } function mint( address to ) external nonReentrant returns (uint256 liquidity) { (uint112 reserve0_, uint112 reserve1_, ) = getReserves(); uint256 balance0 = IERC20(token0).balanceOf(address(this)); uint256 balance1 = IERC20(token1).balanceOf(address(this)); uint256 amount0 = balance0 - reserve0_; uint256 amount1 = balance1 - reserve1_; bool feeOn = _mintFee(reserve0_, reserve1_); uint256 _totalSupply = totalSupply; if (_totalSupply == 0) { liquidity = Math.sqrt(amount0 * amount1) - MINIMUM_LIQUIDITY; _mint(address(0), MINIMUM_LIQUIDITY); } else { liquidity = Math.min( (amount0 * _totalSupply) / reserve0_, (amount1 * _totalSupply) / reserve1_ ); } require( liquidity > 0, Sls_Error(SlsError.INSUFFICIENT_LIQUIDITY_MINTED) ); _mint(to, liquidity); _update(balance0, balance1, reserve0_, reserve1_); if (feeOn) { kLast = uint256(reserve0_) * uint256(reserve1_); } emit Mint(to, amount0, amount1); } function _mintFee( uint112 _reserve0, uint112 _reserve1 ) private returns (bool feeOn) { address feeTo = ISlsV1Factory(factory).feePool(); feeOn = feeTo != address(0); uint256 _kLast = kLast; if (feeOn) { if (_kLast != 0) { uint256 rootK = Math.sqrt( uint256(_reserve0) * uint256(_reserve1) ); uint256 rootKLast = Math.sqrt(_kLast); if (rootK > rootKLast) { uint256 numerator = totalSupply * (rootK - rootKLast); uint256 denominator = (rootK * 5) + rootKLast; // 0.3% fee >> 1000 - 997 = 3 (based on bps) uint256 feeLiquidity = numerator / denominator; if (feeLiquidity > 0) { _mint(feeTo, feeLiquidity); } } } } else if (_kLast != 0) { kLast = 0; } } function burn( address to ) external nonReentrant returns (uint256 amount0, uint256 amount1) { (uint112 reserve0_, uint112 reserve1_, ) = getReserves(); uint256 balance0 = IERC20(token0).balanceOf(address(this)); uint256 balance1 = IERC20(token1).balanceOf(address(this)); uint256 liquidity = balanceOf[address(this)]; bool feeOn = _mintFee(reserve0_, reserve1_); uint _totalSupply = totalSupply; amount0 = (liquidity * balance0) / _totalSupply; amount1 = (liquidity * balance1) / _totalSupply; require( amount0 > 0 && amount1 > 0, Sls_Error(SlsError.INSUFFICIENT_LIQUIDITY_BURNED) ); _burn(address(this), liquidity); _safeTransfer(token0, to, amount0); _safeTransfer(token1, to, amount1); balance0 = IERC20(token0).balanceOf(address(this)); balance1 = IERC20(token1).balanceOf(address(this)); _update(balance0, balance1, reserve0_, reserve1_); if (feeOn) { kLast = uint(reserve0_) * uint(reserve1_); } emit Burn(msg.sender, amount0, amount1, to); } function swap( uint256 amount0Out, uint256 amount1Out, address to ) external nonReentrant { require( amount0Out > 0 || amount1Out > 0, Sls_Error(SlsError.INSUFFICIENT_OUTPUT_AMOUNT) ); (uint112 reserve0_, uint112 reserve1_, ) = getReserves(); require( amount0Out < reserve0_ && amount1Out < reserve1_, Sls_Error(SlsError.INSUFFICIENT_LIQUIDITY) ); if (amount0Out > 0) _safeTransfer(token0, to, amount0Out); if (amount1Out > 0) _safeTransfer(token1, to, amount1Out); uint256 balance0 = IERC20(token0).balanceOf(address(this)); uint256 balance1 = IERC20(token1).balanceOf(address(this)); uint256 amount0In = balance0 > reserve0 - amount0Out ? balance0 - (reserve0 - amount0Out) : 0; uint256 amount1In = balance1 > reserve1 - amount1Out ? balance1 - (reserve1 - amount1Out) : 0; require( amount0In > 0 || amount1In > 0, Sls_Error(SlsError.INSUFFICIENT_INPUT_AMOUNT) ); // Adjusted = balance before swap - swap fee; fee stays in the contract uint256 balance0Adjusted = (balance0 * 1000) - (amount0In * 3); uint256 balance1Adjusted = (balance1 * 1000) - (amount1In * 3); require( (balance0Adjusted * balance1Adjusted) >= uint256(reserve0_) * uint256(reserve1_) * (1000 ** 2), Sls_Error(SlsError.K_ERROR) ); _update(balance0, balance1, reserve0_, reserve1_); emit Swap(msg.sender, amount0Out, amount1Out, to); } function sync() external nonReentrant { (uint112 reserve0_, uint112 reserve1_, ) = getReserves(); _update( IERC20(token0).balanceOf(address(this)), IERC20(token1).balanceOf(address(this)), reserve0_, reserve1_ ); } function skim(address to) external nonReentrant { address _token0 = token0; // gas savings address _token1 = token1; // gas savings _safeTransfer( _token0, to, IERC20(_token0).balanceOf(address(this)) - (reserve0) ); _safeTransfer( _token1, to, IERC20(_token1).balanceOf(address(this)) - (reserve1) ); } function getReserves() public view returns (uint112, uint112, uint32) { return (reserve0, reserve1, blockTimestampLast); } // // // // PRIVATE // // // function _update( uint256 balance0, uint256 balance1, uint112 reserve0_, uint112 reserve1_ ) private { require( balance0 <= type(uint112).max && balance1 <= type(uint112).max, Sls_Error(SlsError.OVERFLOW) ); unchecked { uint32 timeElapsed = uint32(block.timestamp) - blockTimestampLast; if (timeElapsed > 0 && reserve0_ > 0 && reserve1_ > 0) { price0CumulativeLast += uint256(UQ112x112.encode(reserve1_).uqdiv(reserve0_)) * timeElapsed; price1CumulativeLast += uint256(UQ112x112.encode(reserve0_).uqdiv(reserve1_)) * timeElapsed; } } reserve0 = uint112(balance0); reserve1 = uint112(balance1); blockTimestampLast = uint32(block.timestamp); emit Sync(reserve0, reserve1); } function _safeTransfer(address token, address to, uint256 value) private { (bool success, bytes memory data) = token.call( abi.encodeWithSignature("transfer(address,uint256)", to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), Sls_Error(SlsError.TRANSFER_FAILED) ); } }
// SPDX-License-Identifier: Unlicense pragma solidity ^0.8.10; interface ISlsV1Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance( address owner, address spender ) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom( address from, address to, uint value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit( address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn( address indexed sender, uint amount0, uint amount1, address indexed to ); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to) external; function skim(address to) external; function sync() external; function initialize(address, address) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IErrors { enum SlsError { NO_ERROR, // 0 UNAUTHORIZED, // 1 IDENTICAL_ADDRESSES, // 2 ZERO_ADDRESS, // 3 BAD_INPUT, //4 PAIR_EXISTS, // 5 LOCKED, // 6 FORBIDDEN, // 7 TRANSFER_FAILED, // 8 EXPIRED, // 9 INSUFFICIENT_LIQUIDITY, // 10 INSUFFICIENT_INPUT_AMOUNT, // 11 INSUFFICIENT_OUTPUT_AMOUNT, // 12 INSUFFICIENT_A_AMOUNT, // 13 INSUFFICIENT_B_AMOUNT, //14 INVALID_PATH, // 15 INSUFFICIENT_LIQUIDITY_MINTED, // 16 OVERFLOW, // 17 INSUFFICIENT_LIQUIDITY_BURNED, // 18 INVALID_TO, // 19 K_ERROR, // 20 EXCESSIVE_INPUT_AMOUNT, // 21 ALREADY_INITIALIZED // 22 } error Sls_Error(SlsError errorID); error Sls_Router_Error(SlsError errorID); error Sls_Library_Error(SlsError errorID); }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol) /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. abstract contract ERC20 { /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); /*////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ string public name; string public symbol; uint8 public immutable decimals; /*////////////////////////////////////////////////////////////// ERC20 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; /*////////////////////////////////////////////////////////////// EIP-2612 STORAGE //////////////////////////////////////////////////////////////*/ uint256 internal immutable INITIAL_CHAIN_ID; bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; mapping(address => uint256) public nonces; /*////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor( string memory _name, string memory _symbol, uint8 _decimals ) { name = _name; symbol = _symbol; decimals = _decimals; INITIAL_CHAIN_ID = block.chainid; INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); } /*////////////////////////////////////////////////////////////// ERC20 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 amount) public virtual returns (bool) { allowance[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function transfer(address to, uint256 amount) public virtual returns (bool) { balanceOf[msg.sender] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(msg.sender, to, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual returns (bool) { uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; balanceOf[from] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(from, to, amount); return true; } /*////////////////////////////////////////////////////////////// EIP-2612 LOGIC //////////////////////////////////////////////////////////////*/ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual { require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); // Unchecked because the only math done is incrementing // the owner's nonce which cannot realistically overflow. unchecked { address recoveredAddress = ecrecover( keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR(), keccak256( abi.encode( keccak256( "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" ), owner, spender, value, nonces[owner]++, deadline ) ) ) ), v, r, s ); require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); allowance[recoveredAddress][spender] = value; } emit Approval(owner, spender, value); } function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); } function computeDomainSeparator() internal view virtual returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256("1"), block.chainid, address(this) ) ); } /*////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 amount) internal virtual { totalSupply += amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(address(0), to, amount); } function _burn(address from, uint256 amount) internal virtual { balanceOf[from] -= amount; // Cannot underflow because a user's balance // will never be larger than the total supply. unchecked { totalSupply -= amount; } emit Transfer(from, address(0), amount); } }
// SPDX-License-Identifier: Unlicense pragma solidity ^0.8.10; contract Math { function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method) function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { z = y; uint256 x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } }
// SPDX-License-Identifier: Unlicense pragma solidity ^0.8.10; library UQ112x112 { uint224 constant Q112 = 2**112; function encode(uint112 y) internal pure returns (uint224 z) { z = uint224(y) * Q112; } function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) { z = x / uint224(y); } }
// SPDX-License-Identifier: Unlicense pragma solidity ^0.8.10; interface ISlsV1Factory { function pairs(address, address) external pure returns (address); function createPair(address, address) external returns (address); function getPair( address tokenA, address tokenB ) external view returns (address pair); function setFeeTo(address) external; function feePool() external view returns (address); }
{ "remappings": [ "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "solmate/=lib/solmate/src/", "ds-test/=lib/solmate/lib/ds-test/src/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "cancun", "viaIR": true, "libraries": {} }
[{"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"enum IErrors.SlsError","name":"errorID","type":"uint8"}],"name":"Sls_Error","type":"error"},{"inputs":[{"internalType":"enum IErrors.SlsError","name":"errorID","type":"uint8"}],"name":"Sls_Library_Error","type":"error"},{"inputs":[{"internalType":"enum IErrors.SlsError","name":"errorID","type":"uint8"}],"name":"Sls_Router_Error","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"PairCreated","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"createPair","outputs":[{"internalType":"address","name":"pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feePool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeToSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"pairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_feeTo","type":"address"}],"name":"setFeeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"name":"setFeeToSetter","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Deployed Bytecode
0x6080806040526004361015610012575f80fd5b5f905f3560e01c908163094b741514610454575080631e3dd18b1461041257806369454b86146103bf578063a2e74af614610372578063ae2e933b1461034b578063c9c65396146100ba5763f46901ed1461006b575f80fd5b346100b75760203660031901126100b7576100846104a3565b61009960018060a01b036001541633146104cf565b81546001600160a01b0319166001600160a01b039190911617815580f35b80fd5b50346102e85760403660031901126102e8576100d46104a3565b6100dc6104b9565b906001600160a01b03808216919083169082821461033757818310156103315792915b80151580610328575b15610314575f90815260026020908152604080832093835292905220546001600160a01b031661030057604051606083811b6bffffffffffffffffffffffff19908116602084019081529184901b166034830152602882526001600160a01b039384169392909216919061017d6048826104ea565b51902060405161210c80820182811067ffffffffffffffff8211176102ec57829161050d833903905ff580156102dd576001600160a01b031691823b156102e85760405163485cc95560e01b81528160048201528260248201525f8160448183885af180156102dd576102c8575b508084526002602081815260408087205f86815290835281812080546001600160a01b0389166001600160a01b03199182168117909255878a5294845282892086835290935220805490921617905560035493680100000000000000008510156102b4575061026284600160209601600355610477565b81549060031b9085821b9160018060a01b03901b19161790557f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9604060035481519086825287820152a3604051908152f35b634e487b7160e01b81526041600452602490fd5b6102d59194505f906104ea565b5f925f6101eb565b6040513d5f823e3d90fd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b637a52fb5d60e01b5f52600560045260245ffd5b637a52fb5d60e01b5f52600360045260245ffd5b50811515610108565b916100ff565b637a52fb5d60e01b5f52600260045260245ffd5b346102e8575f3660031901126102e8575f546040516001600160a01b039091168152602090f35b346102e85760203660031901126102e85761038b6104a3565b600154906103a3336001600160a01b038416146104cf565b6001600160a01b03166001600160a01b03199190911617600155005b346102e85760403660031901126102e8576103d86104a3565b6103e06104b9565b6001600160a01b039182165f908152600260209081526040808320938516835292815290829020549151919092168152f35b346102e85760203660031901126102e8576004356003548110156102e85761043b602091610477565b905460405160039290921b1c6001600160a01b03168152f35b346102e8575f3660031901126102e8576001546001600160a01b03168152602090f35b60035481101561048f5760035f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b600435906001600160a01b03821682036102e857565b602435906001600160a01b03821682036102e857565b156104d657565b637a52fb5d60e01b5f52600760045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176102ec5760405256fe60e0604052346103ea576040516100176040826103ee565b6006815265534c5320563160d01b60208201526040516100386040826103ee565b6006815265534c532d563160d01b602082015281516001600160401b03811161031d576100655f54610411565b601f811161039b575b50602092601f821160011461033c57928192935f92610331575b50508160011b915f199060031b1c1916175f555b80516001600160401b03811161031d576100b7600154610411565b601f81116102ba575b50602091601f821160011461025a579181925f9261024f575b50508160011b915f199060031b1c1916176001555b60126080524660a0526040515f905f54918161010984610411565b9182825260208201946001811690815f1461023357506001146101e9575b610133925003826103ee565b51902060405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260408201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260a081526101a760c0826103ee565b51902060c052600680546001600160a01b03191633179055604051611ca2908161044a8239608051816112d5015260a0518161165f015260c051816116850152f35b505f80805290915f805160206120ec8339815191525b81831061021757505090602061013392820101610127565b60209193508060019154838588010152019101909183926101ff565b60ff191686525061013392151560051b82016020019050610127565b015190505f806100d9565b601f1982169260015f52805f20915f5b8581106102a25750836001951061028a575b505050811b016001556100ee565b01515f1960f88460031b161c191690555f808061027c565b9192602060018192868501518155019401920161026a565b60015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6601f830160051c81019160208410610313575b601f0160051c01905b81811061030857506100c0565b5f81556001016102fb565b90915081906102f2565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610088565b601f198216935f8052805f20915f5b868110610383575083600195961061036b575b505050811b015f5561009c565b01515f1960f88460031b161c191690555f808061035e565b9192602060018192868501518155019401920161034b565b5f80525f805160206120ec833981519152601f830160051c810191602084106103e0575b601f0160051c01905b8181106103d5575061006e565b5f81556001016103c8565b90915081906103bf565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761031d57604052565b90600182811c9216801561043f575b602083101461042b57565b634e487b7160e01b5f52602260045260245ffd5b91607f169161042056fe60806040526004361015610011575f80fd5b5f3560e01c806306fdde03146114c75780630902f1ac14611487578063095ea7b31461140e5780630dfe1681146113e657806318160ddd146113c957806323b872dd146112f9578063313ce567146112bc5780633644e5151461129a578063485cc955146111e55780635909c0d5146111c85780635a3d5493146111ab5780636a62784214610f245780636d9a640a14610b8157806370a0823114610b495780637464fc3d14610b2c5780637ecebe0014610af457806389afcb441461079a57806395d89b41146106c0578063a9059cbb1461064b578063bc25cf77146104ff578063c45a0155146104d7578063d21220a7146104af578063d505accf146102b0578063dd62ed3e146102605763fff6cae91461012c575f80fd5b34610217575f366003190112610217576001600d5461014e60ff8216156117d6565b60ff191617600d555f61015f61162d565b5090602060018060a01b03600754166024604051809681936370a0823160e01b83523060048401525af18015610223575f9061022e575b6008546040516370a0823160e01b81523060048201529450602090859060249082905f906001600160a01b03165af1908115610223575f916101e9575b6101dd94506119fd565b600d805460ff19169055005b90506020843d60201161021b575b81610204602093836115a1565b81010312610217576101dd9351906101d3565b5f80fd5b3d91506101f7565b6040513d5f823e3d90fd5b506020833d602011610258575b81610248602093836115a1565b81010312610217575f9251610196565b3d915061023b565b3461021757604036600319011261021757610279611601565b610281611617565b6001600160a01b039182165f908152600460209081526040808320949093168252928352819020549051908152f35b346102175760e0366003190112610217576102c9611601565b6102d1611617565b6044356064359260843560ff81168091036102175742851061046a5760805f916020936102fc61165c565b9060018060a01b03169687855260058652604085209889549960018b01905560405190878201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c984528a604084015260018060a01b03169a8b6060840152898784015260a083015260c082015260c0815261037960e0826115a1565b519020604051908682019261190160f01b845260228301526042820152604281526103a56062826115a1565b519020906040519182528482015260a435604082015260c435606082015282805260015afa15610223575f516001600160a01b031680151580610461575b1561042b577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925916020915f526004825260405f20855f5282528060405f2055604051908152a3005b60405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606490fd5b508281146103e3565b60405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606490fd5b34610217575f366003190112610217576008546040516001600160a01b039091168152602090f35b34610217575f366003190112610217576006546040516001600160a01b039091168152602090f35b3461021757602036600319011261021757610518611601565b6001600d5461052a60ff8216156117d6565b60ff191617600d556007546008546040516370a0823160e01b81523060048201526001600160a01b03918216929091166020826024815f855af19182156102235784905f93610613575b5061058e610594936001600160701b03600954169061164f565b91611b21565b6040516370a0823160e01b8152306004820152916020836024815f865af1928315610223575f936105dd575b5061058e6101dd936001600160701b0360095460701c169061164f565b92506020833d60201161060b575b816105f8602093836115a1565b810103126102175791519161058e6105c0565b3d91506105eb565b9250506020823d602011610643575b8161062f602093836115a1565b81010312610217579051908361058e610574565b3d9150610622565b3461021757604036600319011261021757610664611601565b60243590335f52600360205260405f2061067f83825461164f565b905560018060a01b031690815f52600360205260405f208181540190556040519081525f80516020611c4d83398151915260203392a3602060405160018152f35b34610217575f366003190112610217576040515f6001546106e081611569565b80845290600181169081156107765750600114610718575b61071483610708818503826115a1565b604051918291826115d7565b0390f35b60015f9081527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6939250905b80821061075c575090915081016020016107086106f8565b919260018160209254838588010152019101909291610744565b60ff191660208086019190915291151560051b8401909101915061070890506106f8565b34610217576020366003190112610217576107b3611601565b6001600d546107c560ff8216156117d6565b60ff191617600d555f6107d661162d565b509092602060018060a01b03600754166024604051809681936370a0823160e01b83523060048401525af1918215610223575f92610ac0575b6008546040516370a0823160e01b81523060048201529450602090859060249082905f906001600160a01b03165af1938415610223575f94610a8c575b50305f52600360205260405f20549461088a61087e61087e610883610871868661182f565b976002549384918c6117f1565b611804565b97896117f1565b9385151580610a83575b15610a6f575f80973082526003602052604082206108b382825461164f565b905580600254036002556040519081525f80516020611c4d83398151915260203092a36007546108ef90879086906001600160a01b0316611b21565b60085461090890869086906001600160a01b0316611b21565b6007546040516370a0823160e01b81523060048201529760209189916024918391906001600160a01b03165af1968715610223575f97610a3b575b506008546040516370a0823160e01b815230600482015290602090829060249082905f906001600160a01b03165af1908115610223575f91610a09575b50838361098f9260409a6119fd565b6109ea575b505083519083825282602083015260018060a01b0316848201527fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d8193649660603392a260ff19600d5416600d5582519182526020820152f35b6001600160701b03806109ff931691166117f1565b600c558480610994565b90506020813d602011610a33575b81610a24602093836115a1565b81010312610217575183610980565b3d9150610a17565b9096506020813d602011610a67575b81610a57602093836115a1565b8101031261021757519587610943565b3d9150610a4a565b637a52fb5d60e01b5f52601260045260245ffd5b50841515610894565b9093506020813d602011610ab8575b81610aa8602093836115a1565b810103126102175751928561084c565b3d9150610a9b565b91506020833d602011610aec575b81610adb602093836115a1565b81010312610217575f92519161080f565b3d9150610ace565b34610217576020366003190112610217576001600160a01b03610b15611601565b165f526005602052602060405f2054604051908152f35b34610217575f366003190112610217576020600c54604051908152f35b34610217576020366003190112610217576001600160a01b03610b6a611601565b165f526003602052602060405f2054604051908152f35b34610217576060366003190112610217576044356001600160a01b038116906004359060243590838103610217576001600d54610bc160ff8216156117d6565b60ff191617600d5582159081158092610f1b575b15610f0757610be261162d565b50916001600160701b0382169081871080610ef5575b15610ee1575f94610ec3575b8580610ea6575b50506007546040516370a0823160e01b81523060048201529460209186916024918391906001600160a01b03165af1938415610223575f94610e72575b506008546040516370a0823160e01b81523060048201529190602090839060249082905f906001600160a01b03165af1918215610223575f92610e3e575b50600954866001600160701b03821689610ca0818361164f565b891115610e2d57610cbc610cc2916001600160701b039361164f565b8961164f565b925b60701c16610cd2828261164f565b851115610e2457610cec91610ce69161164f565b8461164f565b905b801590811582610e1b575b15610e07576103e88802918883046103e81489151715610df357600382029182046003141715610df357610d2c9161164f565b906103e88402918483046103e81485151715610df357600382029180830460031490151715610df357610d65610d6b92610d7c9461164f565b906117f1565b916001600160701b038616906117f1565b90620f4240820291808304620f42401490151715610df35710610ddf57610da2936119fd565b60405191825260208201527f2a9237ff5aa599ef4c5ee4b1142b53429d5755e2685fe6288b2e3320202115f560403392a3600d805460ff19169055005b637a52fb5d60e01b5f52601460045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b637a52fb5d60e01b5f52600b60045260245ffd5b50821515610cf9565b50505f90610cee565b50506001600160701b035f92610cc4565b9091506020813d602011610e6a575b81610e5a602093836115a1565b8101031261021757519088610c86565b3d9150610e4d565b9093506020813d602011610e9e575b81610e8e602093836115a1565b810103126102175751925f610c48565b3d9150610e81565b600854610ebc92906001600160a01b0316611b21565b8785610c0b565b600754610edc90889083906001600160a01b0316611b21565b610c04565b637a52fb5d60e01b5f52600a60045260245ffd5b506001600160701b0384168610610bf8565b637a52fb5d60e01b5f52600c60045260245ffd5b50821515610bd5565b3461021757602036600319011261021757610f3d611601565b6001600d54610f4f60ff8216156117d6565b60ff191617600d555f610f6061162d565b509290602060018060a01b03600754166024604051809681936370a0823160e01b83523060048401525af1928315610223575f93611177575b506008546040516370a0823160e01b815230600482015290602090829060249082905f906001600160a01b03165af1908115610223575f91611145575b506001600160701b03821692610fec848661164f565b936001600160701b03871690611002828561164f565b9161100d898761182f565b6002548883858361111357505061102e915085611029916117f1565b611964565b6103e7198101908111610df357986002546103e88101809111610df3576002555f8052600360205260405f206103e881540190555f805f80516020611c4d83398151915260206040516103e88152a35b89156110ff5760209a7f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f986040986110bf936110ba8e8b6119b9565b6119fd565b6110ec575b50508251948552868501526001600160a01b031692a260ff19600d5416600d55604051908152f35b6110f5916117f1565b600c5587806110c4565b637a52fb5d60e01b5f52601060045260245ffd5b61112761087e9161087e8661112e966117f1565b93886117f1565b8082101561113e57505b9861107e565b9050611138565b90506020813d60201161116f575b81611160602093836115a1565b81010312610217575185610fd6565b3d9150611153565b9092506020813d6020116111a3575b81611193602093836115a1565b8101031261021757519184610f99565b3d9150611186565b34610217575f366003190112610217576020600b54604051908152f35b34610217575f366003190112610217576020600a54604051908152f35b34610217576040366003190112610217576111fe611601565b611206611617565b60075490916001600160a01b0382161580611287575b15611273576006546001600160a01b0316330361125f576001600160a01b03199182166001600160a01b0391821617600755600880549092169216919091179055005b637a52fb5d60e01b5f52600760045260245ffd5b637a52fb5d60e01b5f52601660045260245ffd5b506008546001600160a01b03161561121c565b34610217575f3660031901126102175760206112b461165c565b604051908152f35b34610217575f36600319011261021757602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461021757606036600319011261021757611312611601565b61131a611617565b6001600160a01b039091165f818152600460209081526040808320338452825290912054604435935f80516020611c4d833981519152929185600182016113a4575b5050835f526003825260405f2061137486825461164f565b90556001600160a01b03165f818152600383526040908190208054870190555194855293a3602060405160018152f35b6113ad9161164f565b5f8581526004845260408082203383528552902055858561135c565b34610217575f366003190112610217576020600254604051908152f35b34610217575f366003190112610217576007546040516001600160a01b039091168152602090f35b3461021757604036600319011261021757611427611601565b335f8181526004602090815260408083206001600160a01b03909516808452948252918290206024359081905591519182527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a3602060405160018152f35b34610217575f3660031901126102175760606001600160701b0363ffffffff6114ae61162d565b9193908160405195168552166020840152166040820152f35b34610217575f366003190112610217576040515f80546114e681611569565b8084529060018116908115610776575060011461150d5761071483610708818503826115a1565b5f8080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563939250905b80821061154f575090915081016020016107086106f8565b919260018160209254838588010152019101909291611537565b90600182811c92168015611597575b602083101461158357565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611578565b90601f8019910116810190811067ffffffffffffffff8211176115c357604052565b634e487b7160e01b5f52604160045260245ffd5b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361021757565b602435906001600160a01b038216820361021757565b6009546001600160701b038116916001600160701b038260701c169160e01c90565b91908203918211610df357565b467f0000000000000000000000000000000000000000000000000000000000000000036116a7577f000000000000000000000000000000000000000000000000000000000000000090565b6040515f905f5491816116b984611569565b9182825260208201946001811690815f146117ba575060011461175d575b6116e3925003826115a1565b51902060405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260408201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260a0815261175760c0826115a1565b51902090565b505f80805290917f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b81831061179e5750509060206116e3928201016116d7565b6020919350806001915483858801015201910190918392611786565b60ff19168652506116e392151560051b820160200190506116d7565b156117dd57565b637a52fb5d60e01b5f52600660045260245ffd5b81810292918115918404141715610df357565b811561180e570490565b634e487b7160e01b5f52601260045260245ffd5b91908201809211610df357565b60065460405163ae2e933b60e01b81529293929190602090839060049082906001600160a01b03165afa918215610223575f92611920575b50600c546001600160a01b03831615801595919290611910578261188c575b50505050565b6110296118a8916001600160701b03806118ae951691166117f1565b91611964565b908181116118bd575b80611886565b6118cd600254610d65848461164f565b90600581029080820460051490151715610df3576118f4926118ee91611822565b90611804565b80611900575b806118b7565b611909916119b9565b5f806118fa565b5050905061191a57565b5f600c55565b9091506020813d60201161195c575b8161193c602093836115a1565b8101031261021757516001600160a01b038116810361021757905f611867565b3d915061192f565b905f60038311156119ac5750818060011c60018101809111610df357905b83821061198d575050565b9092506119a38361199e8184611804565b611822565b60011c90611982565b916119b357565b60019150565b5f80516020611c4d83398151915260205f926119d785600254611822565b6002556001600160a01b03168084526003825260408085208054870190555194855293a3565b91926001600160701b0383111580611b10575b15611afc576001600160701b0360409381927fcf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848a9663ffffffff60095460e01c81421603169182151580611af1575b80611ae6575b611a9d575b50505016918263ffffffff60e01b4260e01b16918360701b9060701b16171780600955835192835260701c166020820152a1565b611ad590836001600160e01b03611abc85611ab785611bf8565b611c2e565b1602600a5401600a55611ab760018060e01b0393611bf8565b1602600b5401600b555f8080611a69565b508481161515611a64565b508482161515611a5e565b637a52fb5d60e01b5f52601160045260245ffd5b506001600160701b03821115611a10565b5f929183809360405190602082019363a9059cbb60e01b855260018060a01b03166024830152604482015260448152611b5b6064826115a1565b51925af13d15611bf1573d67ffffffffffffffff81116115c35760405190611b8d601f8201601f1916602001836115a1565b81523d5f602083013e5b81611bb9575b5015611ba557565b637a52fb5d60e01b5f52600860045260245ffd5b8051801592508215611bce575b50505f611b9d565b819250906020918101031261021757602001518015158103610217575f80611bc6565b6060611b97565b6dffffffffffffffffffffffffffff60701b607082901b16906001600160701b0316808204600160701b1490151715610df35790565b906001600160701b031690811561180e576001600160e01b0316049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212209be4b1e4c827f9e2fa05ea9e23112b87991050e3fcdeac2858a3cf79e8fb534e64736f6c634300081a0033290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a26469706673582212209babea801b0f066feaf3a0b56aa3b05d0d7d70d75dd174e89938d9e152d3248964736f6c634300081a0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.