ETH Price: $3,068.34 (+0.50%)

Contract

0xf0FB7602Df6672e6DA832a8ea3BCad1EE3dd6e52
 

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
0x54619498745952142023-02-16 0:18:15426 days ago1676506695IN
0xf0FB7602...EE3dd6e52
0 ETH0.000000180.001
0x5d4ab4bc745921992023-02-16 0:11:30426 days ago1676506290IN
0xf0FB7602...EE3dd6e52
0.02 ETH0.000000210.001
0x54699098745920262023-02-16 0:11:00426 days ago1676506260IN
0xf0FB7602...EE3dd6e52
0 ETH0.000000180.001
0x5d4a1cbc745915992023-02-16 0:09:29426 days ago1676506169IN
0xf0FB7602...EE3dd6e52
0.02 ETH0.000000210.001
0x17766498745876402023-02-15 23:48:49426 days ago1676504929IN
0xf0FB7602...EE3dd6e52
0 ETH0.000000140.001
0x5721f494745855932023-02-15 23:31:53426 days ago1676503913IN
0xf0FB7602...EE3dd6e52
0 ETH0.000000340.001
0x57221898745844822023-02-15 23:20:06426 days ago1676503206IN
0xf0FB7602...EE3dd6e52
0 ETH0.000000340.001
0x547548a4745844302023-02-15 23:19:51426 days ago1676503191IN
0xf0FB7602...EE3dd6e52
0 ETH0.000000350.001
0x5d5c70b8745842962023-02-15 23:18:03426 days ago1676503083IN
0xf0FB7602...EE3dd6e52
0.01 ETH0.000000190.001
0x5eb37cc8745842762023-02-15 23:18:03426 days ago1676503083IN
0xf0FB7602...EE3dd6e52
0.2 ETH0.000000220.001
0x5448fc90745841452023-02-15 23:16:48426 days ago1676503008IN
0xf0FB7602...EE3dd6e52
0 ETH0.000000340.001
0x57245498745837602023-02-15 23:14:16426 days ago1676502856IN
0xf0FB7602...EE3dd6e52
0 ETH0.000000340.001
0x549e5c9c745833632023-02-15 23:11:16426 days ago1676502676IN
0xf0FB7602...EE3dd6e52
0 ETH0.000000280.001
0x54a0809c745820862023-02-15 23:01:07426 days ago1676502067IN
0xf0FB7602...EE3dd6e52
0 ETH0.000000280.001
0x54a0809c745819622023-02-15 23:00:21426 days ago1676502021IN
0xf0FB7602...EE3dd6e52
0 ETH0.000000280.001
0x5d5870c0745810502023-02-15 22:55:36426 days ago1676501736IN
0xf0FB7602...EE3dd6e52
0.04 ETH0.000000190.001
0x177dc09c745809362023-02-15 22:54:35426 days ago1676501675IN
0xf0FB7602...EE3dd6e52
0 ETH0.000000120.001
0x1e638cc4745804822023-02-15 22:50:18426 days ago1676501418IN
0xf0FB7602...EE3dd6e52
0.1 ETH0.000000110.001
0x60e06040745746982023-02-15 22:07:16426 days ago1676498836IN
 Create: LlamaZip
0 ETH0.00000130.001

Latest 24 internal transactions

Advanced mode:
Parent Txn Hash Block From To Value
745952142023-02-16 0:18:15426 days ago1676506695
0xf0FB7602...EE3dd6e52
0.0197309 ETH
745952142023-02-16 0:18:15426 days ago1676506695
0xf0FB7602...EE3dd6e52
0.0197309 ETH
745921992023-02-16 0:11:30426 days ago1676506290
0xf0FB7602...EE3dd6e52
0.02 ETH
745920262023-02-16 0:11:00426 days ago1676506260
0xf0FB7602...EE3dd6e52
0.01987129 ETH
745920262023-02-16 0:11:00426 days ago1676506260
0xf0FB7602...EE3dd6e52
0.01987129 ETH
745915992023-02-16 0:09:29426 days ago1676506169
0xf0FB7602...EE3dd6e52
0.02 ETH
745876402023-02-15 23:48:49426 days ago1676504929
0xf0FB7602...EE3dd6e52
0.03360794 ETH
745876402023-02-15 23:48:49426 days ago1676504929
0xf0FB7602...EE3dd6e52
0.03360794 ETH
745855932023-02-15 23:31:53426 days ago1676503913
0xf0FB7602...EE3dd6e52
0.01606125 ETH
745855932023-02-15 23:31:53426 days ago1676503913
0xf0FB7602...EE3dd6e52
0.01606125 ETH
745844822023-02-15 23:20:06426 days ago1676503206
0xf0FB7602...EE3dd6e52
0.03212281 ETH
745844822023-02-15 23:20:06426 days ago1676503206
0xf0FB7602...EE3dd6e52
0.03212281 ETH
745844302023-02-15 23:19:51426 days ago1676503191
0xf0FB7602...EE3dd6e52
0.16062025 ETH
745844302023-02-15 23:19:51426 days ago1676503191
0xf0FB7602...EE3dd6e52
0.16062025 ETH
745842962023-02-15 23:18:03426 days ago1676503083
0xf0FB7602...EE3dd6e52
0.01 ETH
745842762023-02-15 23:18:03426 days ago1676503083
0xf0FB7602...EE3dd6e52
0.2 ETH
745841452023-02-15 23:16:48426 days ago1676503008
0xf0FB7602...EE3dd6e52
0.00482457 ETH
745841452023-02-15 23:16:48426 days ago1676503008
0xf0FB7602...EE3dd6e52
0.00482457 ETH
745837602023-02-15 23:14:16426 days ago1676502856
0xf0FB7602...EE3dd6e52
0.03216406 ETH
745837602023-02-15 23:14:16426 days ago1676502856
0xf0FB7602...EE3dd6e52
0.03216406 ETH
745810502023-02-15 22:55:36426 days ago1676501736
0xf0FB7602...EE3dd6e52
0.04 ETH
745809362023-02-15 22:54:35426 days ago1676501675
0xf0FB7602...EE3dd6e52
0.06747475 ETH
745809362023-02-15 22:54:35426 days ago1676501675
0xf0FB7602...EE3dd6e52
0.06747475 ETH
745804822023-02-15 22:50:18426 days ago1676501418
0xf0FB7602...EE3dd6e52
0.1 ETH

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LlamaZip

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 11 : LlamaZip.sol
//SPDX-License-Identifier: None
pragma solidity =0.7.6;
pragma abicoder v2;

import "./PairList.sol";
import "./router/SwapRouter.sol";
import "./router/libs/IERC20.sol";

contract LlamaZip is SwapRouter {
    address internal immutable pairList; // Set to internal to avoid collisions
    uint internal constant MAX_BPS = 10000;

    constructor(address _factory, address _WETH9, address _pairList) SwapRouter(_factory, _WETH9) {
        pairList = _pairList;
    }

    // Because of function uniswapV3SwapCallback() 2.3e-8% of calls will fail because they'll hit that selector
    fallback() external payable {
        if(msg.sender == pairList){
            // Sweep tokens or ETH that got stuck here
            (address token, uint amount, address receiver) = abi.decode(msg.data, (address, uint, address));
            if(token == address(0)){
                payable(receiver).transfer(address(this).balance);
            } else {
                IERC20(token).transfer(receiver, amount); // We don't care if it fails
            }
            return;
        }

        uint data;
        assembly {
            data := calldataload(0)
        }
        uint pair = data & (0xf << (256-4));
        uint token0IsTokenIn = data & (0x1 << (256-4-1));
        PairList.Pool memory pool = PairList(pairList).getPool(pair);
        address tokenIn = token0IsTokenIn == 0?pool.token1:pool.token0;

        uint totalIn;
        if(tokenIn == WETH9 && msg.value > 0){
            totalIn = msg.value;
        } else {
            uint inputDataExists = data & (type(uint256).max >> 5+17+8+2);
            if(inputDataExists == 0){
                totalIn = IERC20(tokenIn).balanceOf(msg.sender);
            } else {
                uint inZeros = (data & (0x1f << (256-5-17-8-2-5))) >> (256-5-17-8-2-5);
                uint calldataLength;
                assembly {
                    calldataLength := calldatasize()
                }
                // (type(uint256).max >> 5+17+8+2+5) = 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffff, this is done to get around stack too deep
                uint significantInputBits = (data & 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffff) >> (256-(calldataLength*8));
                totalIn = significantInputBits * (10**inZeros);
            }
        }

        uint expectedSignificantBits = (data & (0x1ffff << (256-5-17))) >> (256-5-17);
        uint outZeros = (data & (0xff << (256-5-17-8))) >> (256-5-17-8);
        uint expectedTotalOut = expectedSignificantBits << outZeros;

        uint slippageBps;
        {
            uint slippageId = data & (0x3 << (256-5-17-8-2));
            if(slippageId == 0){
                slippageBps = MAX_BPS - 50; //0.5
            } else if(slippageId == (0x1 << (256-5-17-8-2))){
                slippageBps = MAX_BPS - 10; //0.1
            }  else if(slippageId == (0x2 << (256-5-17-8-2))){
                slippageBps = MAX_BPS - 100; //1
            }  else if(slippageId == (0x3 << (256-5-17-8-2))){
                slippageBps = MAX_BPS - 500; //5
            }
        }

        uint minTotalOut = (expectedTotalOut * slippageBps)/MAX_BPS;

        address tokenOut = token0IsTokenIn == 0?pool.token0:pool.token1;
        swap(tokenIn, tokenOut, pool.fee, totalIn, expectedTotalOut, minTotalOut);
    }
}

File 2 of 11 : PairList.sol
//SPDX-License-Identifier: None
pragma solidity =0.7.6;
pragma abicoder v2;

import "./utils/Ownable.sol";
import "./router/libs/IERC20.sol";

interface UniswapV3Pool {
    function token0() external returns (address);
    function token1() external returns (address);
    function fee() external returns (uint24);
}

contract PairList is Ownable {
    struct Pool {
        address token0;
        address token1;
        uint24 fee;
    }

    mapping(uint => Pool) public pools;

    function setPool(uint id, address pool) onlyOwner external {
        require(pools[id].token0 == address(0) && pools[id].token1 == address(0), "already set");

        pools[id] = Pool({
            fee: UniswapV3Pool(pool).fee(),
            token0: UniswapV3Pool(pool).token0(),
            token1: UniswapV3Pool(pool).token1()
        });
    }

    function getPool(uint poolId) view external returns (Pool memory pool){
        if(poolId == 0){
            return Pool(0x4200000000000000000000000000000000000006, 0x7F5c764cBc14f9669B88837ca1490cCa17c31607, 500); // WETH / USDC 0.05%
        } else if(poolId == (1 << 252)){
            return Pool(0x4200000000000000000000000000000000000006, 0x4200000000000000000000000000000000000042, 3000); // WETH / OP 0.3%
        } else if(poolId == (2 << 252)){
            return Pool(0x4200000000000000000000000000000000000042, 0x7F5c764cBc14f9669B88837ca1490cCa17c31607, 3000); // OP / USDC 0.3%
        } else if(poolId == (3 << 252)){
            return Pool(0x4200000000000000000000000000000000000006, 0x4200000000000000000000000000000000000042, 500); // WETH / OP 0.05%
        } else if(poolId == (4 << 252)){
            return Pool(0x7F5c764cBc14f9669B88837ca1490cCa17c31607, 0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1, 100); // USDC / DAI 0.01%
        } else if(poolId == (5 << 252)){
            return Pool(0x4200000000000000000000000000000000000006, 0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4, 3000); // WETH / SNX 0.3%
        } else if(poolId == (6 << 252)){
            return Pool(0x4200000000000000000000000000000000000006, 0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1, 3000); // WETH / DAI 0.3%
        }

        return pools[poolId];
    }

    function sweepTokenFromRouter(address router, address token, uint amount, address receiver) onlyOwner external {
        (bool success, ) = router.call(abi.encode(token, amount, receiver));
        require(success);
    }
}

File 3 of 11 : SwapRouter.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity =0.7.6;
pragma abicoder v2;

import "./libs/CallbackValidation.sol";
import "./libs/PeripheryPayments.sol";
import "./libs/PeripheryImmutableState.sol";
import "./libs/SafeCast.sol";

interface IUniswapV3Pool {
    function swap(
        address recipient,
        bool zeroForOne,
        int256 amountSpecified,
        uint160 sqrtPriceLimitX96,
        bytes calldata data
    ) external returns (int256 amount0, int256 amount1);
}

contract SwapRouter is PeripheryImmutableState, PeripheryPayments {
    using SafeCast for uint256;

    /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)
    uint160 internal constant MIN_SQRT_RATIO = 4295128739;
    /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)
    uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;

    constructor(address _factory, address _WETH9) PeripheryImmutableState(_factory, _WETH9) {}

    function getPool(
        address tokenA,
        address tokenB,
        uint24 fee
    ) private view returns (IUniswapV3Pool) {
        return IUniswapV3Pool(PoolAddress.computeAddress(factory, PoolAddress.getPoolKey(tokenA, tokenB, fee)));
    }

    struct SwapCallbackData {
        address tokenIn;
        address tokenOut;
        uint24 fee;
        address payer;
    }

    function swap(address tokenIn, address tokenOut, uint24 fee, uint amountIn, uint expectedAmountOut, uint minAmountOut) internal {
        bool zeroForOne = tokenIn < tokenOut;

        bytes memory data = abi.encode(SwapCallbackData({
            tokenIn: tokenIn,
            tokenOut: tokenOut,
            fee: fee,
            payer: msg.sender
        }));

        (int256 amount0, int256 amount1) =
            getPool(tokenIn, tokenOut, fee).swap(
                address(this),
                zeroForOne,
                amountIn.toInt256(),
                (zeroForOne ? MIN_SQRT_RATIO + 1 : MAX_SQRT_RATIO - 1),
                data
            );

        uint amountOut = uint256(-(zeroForOne ? amount1 : amount0));
        if(amountOut > expectedAmountOut){
            amountOut = expectedAmountOut;
        }

        require(amountOut >= minAmountOut, 'Too little received');

        if(tokenOut == WETH9){
            // Doesn't support WETH output since we can't differentiate
            IWETH9(WETH9).withdraw(amountOut);
            TransferHelper.safeTransferETH(msg.sender, amountOut);
        } else {
            TransferHelper.safeTransfer(tokenOut, msg.sender, amountOut);
        }
    }

    function uniswapV3SwapCallback(
        int256 amount0Delta,
        int256 amount1Delta,
        bytes calldata _data
    ) external {
        require(amount0Delta > 0 || amount1Delta > 0); // swaps entirely within 0-liquidity regions are not supported
        SwapCallbackData memory data = abi.decode(_data, (SwapCallbackData));
        CallbackValidation.verifyCallback(factory, data.tokenIn, data.tokenOut, data.fee);

        pay(data.tokenIn, data.payer, msg.sender, amount0Delta > 0? uint256(amount0Delta) : uint256(amount1Delta));
    }
}

File 4 of 11 : CallbackValidation.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity =0.7.6;

import './PoolAddress.sol';

/// @notice Provides validation for callbacks from Uniswap V3 Pools
library CallbackValidation {
    /// @notice Returns the address of a valid Uniswap V3 Pool
    /// @param factory The contract address of the Uniswap V3 factory
    /// @param tokenA The contract address of either token0 or token1
    /// @param tokenB The contract address of the other token
    /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip
    /// @return pool The V3 pool contract address
    function verifyCallback(
        address factory,
        address tokenA,
        address tokenB,
        uint24 fee
    ) internal view returns (address pool) {
        return verifyCallback(factory, PoolAddress.getPoolKey(tokenA, tokenB, fee));
    }

    /// @notice Returns the address of a valid Uniswap V3 Pool
    /// @param factory The contract address of the Uniswap V3 factory
    /// @param poolKey The identifying key of the V3 pool
    /// @return pool The V3 pool contract address
    function verifyCallback(address factory, PoolAddress.PoolKey memory poolKey)
        internal
        view
        returns (address pool)
    {
        pool = PoolAddress.computeAddress(factory, poolKey);
        require(msg.sender == address(pool));
    }
}

File 5 of 11 : IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity =0.7.6;

interface IERC20{
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
    function approve(address spender, uint256 amount) external returns (bool);
}

File 6 of 11 : PeripheryImmutableState.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity =0.7.6;

/// @title Immutable state
/// @notice Immutable state used by periphery contracts
abstract contract PeripheryImmutableState {
    address internal immutable factory;
    address internal immutable WETH9;

    constructor(address _factory, address _WETH9) {
        factory = _factory;
        WETH9 = _WETH9;
    }
}

File 7 of 11 : PeripheryPayments.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.7.5;

import './IERC20.sol';

import './TransferHelper.sol';

import './PeripheryImmutableState.sol';

interface IWETH9 is IERC20 {
    /// @notice Deposit ether to get wrapped ether
    function deposit() external payable;

    /// @notice Withdraw wrapped ether to get ether
    function withdraw(uint256) external;
}

abstract contract PeripheryPayments is PeripheryImmutableState {
    receive() external payable {
        require(msg.sender == WETH9, 'Not WETH9');
    }

/*
Removed external functions to avoid collisions

    /// @inheritdoc IPeripheryPayments
    function unwrapWETH9(uint256 amountMinimum, address recipient) public payable override {
        uint256 balanceWETH9 = IWETH9(WETH9).balanceOf(address(this));
        require(balanceWETH9 >= amountMinimum, 'Insufficient WETH9');

        if (balanceWETH9 > 0) {
            IWETH9(WETH9).withdraw(balanceWETH9);
            TransferHelper.safeTransferETH(recipient, balanceWETH9);
        }
    }

    /// @inheritdoc IPeripheryPayments
    function sweepToken(
        address token,
        uint256 amountMinimum,
        address recipient
    ) public payable override {
        uint256 balanceToken = IERC20(token).balanceOf(address(this));
        require(balanceToken >= amountMinimum, 'Insufficient token');

        if (balanceToken > 0) {
            TransferHelper.safeTransfer(token, recipient, balanceToken);
        }
    }

    /// @inheritdoc IPeripheryPayments
    function refundETH() external payable override {
        if (address(this).balance > 0) TransferHelper.safeTransferETH(msg.sender, address(this).balance);
    }
*/

    /// @param token The token to pay
    /// @param payer The entity that must pay
    /// @param recipient The entity that will receive payment
    /// @param value The amount to pay
    function pay(
        address token,
        address payer,
        address recipient,
        uint256 value
    ) internal {
        if (token == WETH9 && address(this).balance >= value) {
            // pay with WETH9
            IWETH9(WETH9).deposit{value: value}(); // wrap only what is needed to pay
            IWETH9(WETH9).transfer(recipient, value);
        } else if (payer == address(this)) {
            // pay with tokens already in the contract (for the exact input multihop case)
            TransferHelper.safeTransfer(token, recipient, value);
        } else {
            // pull payment
            TransferHelper.safeTransferFrom(token, payer, recipient, value);
        }
    }
}

File 8 of 11 : PoolAddress.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.5.0;

/// @title Provides functions for deriving a pool address from the factory, tokens, and the fee
library PoolAddress {
    bytes32 internal constant POOL_INIT_CODE_HASH = 0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54;

    /// @notice The identifying key of the pool
    struct PoolKey {
        address token0;
        address token1;
        uint24 fee;
    }

    /// @notice Returns PoolKey: the ordered tokens with the matched fee levels
    /// @param tokenA The first token of a pool, unsorted
    /// @param tokenB The second token of a pool, unsorted
    /// @param fee The fee level of the pool
    /// @return Poolkey The pool details with ordered token0 and token1 assignments
    function getPoolKey(
        address tokenA,
        address tokenB,
        uint24 fee
    ) internal pure returns (PoolKey memory) {
        if (tokenA > tokenB) (tokenA, tokenB) = (tokenB, tokenA);
        return PoolKey({token0: tokenA, token1: tokenB, fee: fee});
    }

    /// @notice Deterministically computes the pool address given the factory and PoolKey
    /// @param factory The Uniswap V3 factory contract address
    /// @param key The PoolKey
    /// @return pool The contract address of the V3 pool
    function computeAddress(address factory, PoolKey memory key) internal pure returns (address pool) {
        require(key.token0 < key.token1);
        pool = address(
            uint256(
                keccak256(
                    abi.encodePacked(
                        hex'ff',
                        factory,
                        keccak256(abi.encode(key.token0, key.token1, key.fee)),
                        POOL_INIT_CODE_HASH
                    )
                )
            )
        );
    }
}

File 9 of 11 : SafeCast.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.5.0;

/// @title Safe casting methods
/// @notice Contains methods for safely casting between types
library SafeCast {
    /// @notice Cast a uint256 to a uint160, revert on overflow
    /// @param y The uint256 to be downcasted
    /// @return z The downcasted integer, now type uint160
    function toUint160(uint256 y) internal pure returns (uint160 z) {
        require((z = uint160(y)) == y);
    }

    /// @notice Cast a int256 to a int128, revert on overflow or underflow
    /// @param y The int256 to be downcasted
    /// @return z The downcasted integer, now type int128
    function toInt128(int256 y) internal pure returns (int128 z) {
        require((z = int128(y)) == y);
    }

    /// @notice Cast a uint256 to a int256, revert on overflow
    /// @param y The uint256 to be casted
    /// @return z The casted integer, now type int256
    function toInt256(uint256 y) internal pure returns (int256 z) {
        require(y < 2**255);
        z = int256(y);
    }
}

File 10 of 11 : TransferHelper.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.6.0;

import './IERC20.sol';

library TransferHelper {
    /// @notice Transfers tokens from the targeted address to the given destination
    /// @notice Errors with 'STF' if transfer fails
    /// @param token The contract address of the token to be transferred
    /// @param from The originating address from which the tokens will be transferred
    /// @param to The destination address of the transfer
    /// @param value The amount to be transferred
    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 value
    ) internal {
        (bool success, bytes memory data) =
            token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'STF');
    }

    /// @notice Transfers tokens from msg.sender to a recipient
    /// @dev Errors with ST if transfer fails
    /// @param token The contract address of the token which will be transferred
    /// @param to The recipient of the transfer
    /// @param value The value of the transfer
    function safeTransfer(
        address token,
        address to,
        uint256 value
    ) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transfer.selector, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'ST');
    }

    /// @notice Approves the stipulated contract to spend the given allowance in the given token
    /// @dev Errors with 'SA' if transfer fails
    /// @param token The contract address of the token to be approved
    /// @param to The target of the approval
    /// @param value The amount of the given token the target will be allowed to spend
    function safeApprove(
        address token,
        address to,
        uint256 value
    ) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.approve.selector, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'SA');
    }

    /// @notice Transfers ETH to the recipient address
    /// @dev Fails with `STE`
    /// @param to The destination of the transfer
    /// @param value The value to be transferred
    function safeTransferETH(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, 'STE');
    }
}

File 11 of 11 : Ownable.sol
//SPDX-License-Identifier: None
pragma solidity =0.7.6;

contract Ownable {
    address public owner;

    constructor(){
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "!owner");
        _;
    }

    function setOwner(address newOwner) onlyOwner external {
        owner = newOwner;
    }
}

Settings
{
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 999999
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH9","type":"address"},{"internalType":"address","name":"_pairList","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"uniswapV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040523480156200001157600080fd5b50604051620017d0380380620017d0833981016040819052620000349162000079565b6001600160601b0319606093841b811660805291831b821660a05290911b1660c052620000c2565b80516001600160a01b03811681146200007457600080fd5b919050565b6000806000606084860312156200008e578283fd5b62000099846200005c565b9250620000a9602085016200005c565b9150620000b9604085016200005c565b90509250925092565b60805160601c60a05160601c60c05160601c6116b26200011e6000398060e552806102bd525080603f528061035f528061079152806108205280610cf25280610d525280610dd35250806108db528061094052506116b26000f3fe6080604052600436106100225760003560e01c8063fa461e33146105d8576100cd565b366100cd573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146100cb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610233576000808061011936826112c2565b9194509250905073ffffffffffffffffffffffffffffffffffffffff83166101835760405173ffffffffffffffffffffffffffffffffffffffff8216904780156108fc02916000818181858888f1935050505015801561017d573d6000803e3d6000fd5b5061022b565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063a9059cbb906101d79084908690600401611595565b602060405180830381600087803b1580156101f157600080fd5b505af1158015610205573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102299190611303565b505b5050506100cb565b6040517f068bcd8d00000000000000000000000000000000000000000000000000000000815260008035917ff0000000000000000000000000000000000000000000000000000000000000008316917f080000000000000000000000000000000000000000000000000000000000000084169173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063068bcd8d906102f290869060040161163d565b60606040518083038186803b15801561030a57600080fd5b505afa15801561031e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034291906113c8565b905060008215610353578151610359565b81602001515b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156103b85750600034115b156103c45750346104ca565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff861680610491576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906370a082319061043a9033906004016114c9565b60206040518083038186803b15801561045257600080fd5b505afa158015610466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048a91906114b1565b91506104c8565b601f60db88901c16600a0a7b07ffffffffffffffffffffffffffffffffffffffffffffffffffffff881660083602610100031c0291505b505b6201ffff60ea87901c1660ff60e288901c1681811b60007c03000000000000000000000000000000000000000000000000000000008a1680610510576126de9150610599565b807c0100000000000000000000000000000000000000000000000000000000141561053f576127069150610599565b807c0200000000000000000000000000000000000000000000000000000000141561056e576126ac9150610599565b807c030000000000000000000000000000000000000000000000000000000014156105995761251c91505b5061271081830204600089156105b35788602001516105b6565b88515b90506105ca88828b604001518a88876105f8565b505050505050505050505050005b3480156105e457600080fd5b506100cb6105f336600461134d565b6108ae565b6040805160808101825273ffffffffffffffffffffffffffffffffffffffff888116808352908816602080840182905262ffffff891684860152336060850152935191109260009261064c929091016115f2565b604051602081830303815290604052905060008061066b8a8a8a610939565b73ffffffffffffffffffffffffffffffffffffffff1663128acb0830866106918b610977565b886106b05773fffd8963efd1fc6a506488495d951d5263988d256106b7565b6401000276a45b886040518663ffffffff1660e01b81526004016106d89594939291906114ea565b6040805180830381600087803b1580156106f157600080fd5b505af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610729919061132a565b9150915060008461073a578261073c565b815b60000390508681111561074c5750855b8581101561078f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610786906115bb565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161415610896576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d9061085590849060040161163d565b600060405180830381600087803b15801561086f57600080fd5b505af1158015610883573d6000803e3d6000fd5b5050505061089133826109a9565b6108a1565b6108a18a3383610afc565b5050505050505050505050565b60008413806108bd5750600083135b6108c657600080fd5b60006108d482840184611433565b905061090e7f0000000000000000000000000000000000000000000000000000000000000000826000015183602001518460400151610cd1565b5061093281600001518260600151336000891361092b578761092d565b885b610cf0565b5050505050565b600061096f7f000000000000000000000000000000000000000000000000000000000000000061096a868686610ed4565b610f51565b949350505050565b60007f800000000000000000000000000000000000000000000000000000000000000082106109a557600080fd5b5090565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310610a2057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109e3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610a82576040519150601f19603f3d011682016040523d82523d6000602084013e610a87565b606091505b5050905080610af757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310610bd157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b94565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610c33576040519150601f19603f3d011682016040523d82523d6000602084013e610c38565b606091505b5091509150818015610c66575080511580610c665750808060200190516020811015610c6357600080fd5b50515b61093257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610ce785610ce2868686610ed4565b611087565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015610d4b5750804710155b15610e94577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610db857600080fd5b505af1158015610dcc573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610e6257600080fd5b505af1158015610e76573d6000803e3d6000fd5b505050506040513d6020811015610e8c57600080fd5b50610ece9050565b73ffffffffffffffffffffffffffffffffffffffff8316301415610ec257610ebd848383610afc565b610ece565b610ece848484846110bd565b50505050565b610edc6112a2565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115610f14579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610610f9357600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b60006110938383610f51565b90503373ffffffffffffffffffffffffffffffffffffffff8216146110b757600080fd5b92915050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b6020831061119a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161115d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146111fc576040519150601f19603f3d011682016040523d82523d6000602084013e611201565b606091505b509150915081801561122f57508051158061122f575080806020019051602081101561122c57600080fd5b50515b61129a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050565b604080516060810182526000808252602082018190529181019190915290565b6000806000606084860312156112d6578283fd5b83356112e181611646565b92506020840135915060408401356112f881611646565b809150509250925092565b600060208284031215611314578081fd5b81518015158114611323578182fd5b9392505050565b6000806040838503121561133c578182fd5b505080516020909101519092909150565b60008060008060608587031215611362578081fd5b8435935060208501359250604085013567ffffffffffffffff80821115611387578283fd5b818701915087601f83011261139a578283fd5b8135818111156113a8578384fd5b8860208285010111156113b9578384fd5b95989497505060200194505050565b6000606082840312156113d9578081fd5b6040516060810181811067ffffffffffffffff821117156113f657fe5b604052825161140481611646565b8152602083015161141481611646565b602082015260408301516114278161166b565b60408201529392505050565b600060808284031215611444578081fd5b6040516080810181811067ffffffffffffffff8211171561146157fe5b604052823561146f81611646565b8152602083013561147f81611646565b602082015260408301356114928161166b565b604082015260608301356114a581611646565b60608201529392505050565b6000602082840312156114c2578081fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352602087151581850152866040850152818616606085015260a06080850152845191508160a0850152825b8281101561154c5785810182015185820160c001528101611530565b8281111561155d578360c084870101525b5050601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160c0019695505050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b815173ffffffffffffffffffffffffffffffffffffffff908116825260208084015182169083015260408084015162ffffff1690830152606092830151169181019190915260800190565b90815260200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461166857600080fd5b50565b62ffffff8116811461166857600080fdfea2646970667358221220d1ddb06cd70f7b928e51eb6daba7ddbd161572dbbd6375c458f6221e54db2cb064736f6c634300070600330000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f9840000000000000000000000004200000000000000000000000000000000000006000000000000000000000000dc18115b29118c1a8890cf6fc4af3eb2ed32f91b

Deployed Bytecode

0x6080604052600436106100225760003560e01c8063fa461e33146105d8576100cd565b366100cd573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000420000000000000000000000000000000000000616146100cb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000dc18115b29118c1a8890cf6fc4af3eb2ed32f91b161415610233576000808061011936826112c2565b9194509250905073ffffffffffffffffffffffffffffffffffffffff83166101835760405173ffffffffffffffffffffffffffffffffffffffff8216904780156108fc02916000818181858888f1935050505015801561017d573d6000803e3d6000fd5b5061022b565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063a9059cbb906101d79084908690600401611595565b602060405180830381600087803b1580156101f157600080fd5b505af1158015610205573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102299190611303565b505b5050506100cb565b6040517f068bcd8d00000000000000000000000000000000000000000000000000000000815260008035917ff0000000000000000000000000000000000000000000000000000000000000008316917f080000000000000000000000000000000000000000000000000000000000000084169173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000dc18115b29118c1a8890cf6fc4af3eb2ed32f91b169063068bcd8d906102f290869060040161163d565b60606040518083038186803b15801561030a57600080fd5b505afa15801561031e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034291906113c8565b905060008215610353578151610359565b81602001515b905060007f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156103b85750600034115b156103c45750346104ca565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff861680610491576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906370a082319061043a9033906004016114c9565b60206040518083038186803b15801561045257600080fd5b505afa158015610466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048a91906114b1565b91506104c8565b601f60db88901c16600a0a7b07ffffffffffffffffffffffffffffffffffffffffffffffffffffff881660083602610100031c0291505b505b6201ffff60ea87901c1660ff60e288901c1681811b60007c03000000000000000000000000000000000000000000000000000000008a1680610510576126de9150610599565b807c0100000000000000000000000000000000000000000000000000000000141561053f576127069150610599565b807c0200000000000000000000000000000000000000000000000000000000141561056e576126ac9150610599565b807c030000000000000000000000000000000000000000000000000000000014156105995761251c91505b5061271081830204600089156105b35788602001516105b6565b88515b90506105ca88828b604001518a88876105f8565b505050505050505050505050005b3480156105e457600080fd5b506100cb6105f336600461134d565b6108ae565b6040805160808101825273ffffffffffffffffffffffffffffffffffffffff888116808352908816602080840182905262ffffff891684860152336060850152935191109260009261064c929091016115f2565b604051602081830303815290604052905060008061066b8a8a8a610939565b73ffffffffffffffffffffffffffffffffffffffff1663128acb0830866106918b610977565b886106b05773fffd8963efd1fc6a506488495d951d5263988d256106b7565b6401000276a45b886040518663ffffffff1660e01b81526004016106d89594939291906114ea565b6040805180830381600087803b1580156106f157600080fd5b505af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610729919061132a565b9150915060008461073a578261073c565b815b60000390508681111561074c5750855b8581101561078f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610786906115bb565b60405180910390fd5b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161415610896576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000042000000000000000000000000000000000000061690632e1a7d4d9061085590849060040161163d565b600060405180830381600087803b15801561086f57600080fd5b505af1158015610883573d6000803e3d6000fd5b5050505061089133826109a9565b6108a1565b6108a18a3383610afc565b5050505050505050505050565b60008413806108bd5750600083135b6108c657600080fd5b60006108d482840184611433565b905061090e7f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984826000015183602001518460400151610cd1565b5061093281600001518260600151336000891361092b578761092d565b885b610cf0565b5050505050565b600061096f7f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f98461096a868686610ed4565b610f51565b949350505050565b60007f800000000000000000000000000000000000000000000000000000000000000082106109a557600080fd5b5090565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310610a2057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109e3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610a82576040519150601f19603f3d011682016040523d82523d6000602084013e610a87565b606091505b5050905080610af757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310610bd157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b94565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610c33576040519150601f19603f3d011682016040523d82523d6000602084013e610c38565b606091505b5091509150818015610c66575080511580610c665750808060200190516020811015610c6357600080fd5b50515b61093257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610ce785610ce2868686610ed4565b611087565b95945050505050565b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015610d4b5750804710155b15610e94577f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610db857600080fd5b505af1158015610dcc573d6000803e3d6000fd5b50505050507f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610e6257600080fd5b505af1158015610e76573d6000803e3d6000fd5b505050506040513d6020811015610e8c57600080fd5b50610ece9050565b73ffffffffffffffffffffffffffffffffffffffff8316301415610ec257610ebd848383610afc565b610ece565b610ece848484846110bd565b50505050565b610edc6112a2565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115610f14579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610610f9357600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b60006110938383610f51565b90503373ffffffffffffffffffffffffffffffffffffffff8216146110b757600080fd5b92915050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b6020831061119a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161115d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146111fc576040519150601f19603f3d011682016040523d82523d6000602084013e611201565b606091505b509150915081801561122f57508051158061122f575080806020019051602081101561122c57600080fd5b50515b61129a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050565b604080516060810182526000808252602082018190529181019190915290565b6000806000606084860312156112d6578283fd5b83356112e181611646565b92506020840135915060408401356112f881611646565b809150509250925092565b600060208284031215611314578081fd5b81518015158114611323578182fd5b9392505050565b6000806040838503121561133c578182fd5b505080516020909101519092909150565b60008060008060608587031215611362578081fd5b8435935060208501359250604085013567ffffffffffffffff80821115611387578283fd5b818701915087601f83011261139a578283fd5b8135818111156113a8578384fd5b8860208285010111156113b9578384fd5b95989497505060200194505050565b6000606082840312156113d9578081fd5b6040516060810181811067ffffffffffffffff821117156113f657fe5b604052825161140481611646565b8152602083015161141481611646565b602082015260408301516114278161166b565b60408201529392505050565b600060808284031215611444578081fd5b6040516080810181811067ffffffffffffffff8211171561146157fe5b604052823561146f81611646565b8152602083013561147f81611646565b602082015260408301356114928161166b565b604082015260608301356114a581611646565b60608201529392505050565b6000602082840312156114c2578081fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352602087151581850152866040850152818616606085015260a06080850152845191508160a0850152825b8281101561154c5785810182015185820160c001528101611530565b8281111561155d578360c084870101525b5050601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160c0019695505050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b815173ffffffffffffffffffffffffffffffffffffffff908116825260208084015182169083015260408084015162ffffff1690830152606092830151169181019190915260800190565b90815260200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461166857600080fd5b50565b62ffffff8116811461166857600080fdfea2646970667358221220d1ddb06cd70f7b928e51eb6daba7ddbd161572dbbd6375c458f6221e54db2cb064736f6c63430007060033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f9840000000000000000000000004200000000000000000000000000000000000006000000000000000000000000dc18115b29118c1a8890cf6fc4af3eb2ed32f91b

-----Decoded View---------------
Arg [0] : _factory (address): 0x1F98431c8aD98523631AE4a59f267346ea31F984
Arg [1] : _WETH9 (address): 0x4200000000000000000000000000000000000006
Arg [2] : _pairList (address): 0xDc18115b29118c1A8890cf6fC4AF3EB2ed32f91B

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984
Arg [1] : 0000000000000000000000004200000000000000000000000000000000000006
Arg [2] : 000000000000000000000000dc18115b29118c1a8890cf6fc4af3eb2ed32f91b


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

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.