ETH Price: $1,810.86 (+10.74%)

Contract

0x973bf562407766e77f885c1cd1a8060e5303C745

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Token Holdings

Transaction Hash
Method
Block
From
To
0x278c58152813730832024-12-04 21:03:11139 days ago1733346191IN
0x973bf562...e5303C745
1 ETH0.0000120.056467
0x1c9adc4c2812677722024-12-04 13:44:14139 days ago1733319854IN
0x973bf562...e5303C745
10.691 ETH0.000006950.035829
0x1d49784c2792203182024-11-28 14:38:31145 days ago1732804711IN
0x973bf562...e5303C745
12.73 ETH0.00000410.01
0x1d40b04c2787571572024-11-27 6:13:22147 days ago1732688002IN
0x973bf562...e5303C745
13.22 ETH0.000003220.012143
0x9e97c8e42781235202024-11-25 9:54:20149 days ago1732528460IN
0x973bf562...e5303C745
4 ETH0.000005240.021
0x26b74c152750607352024-11-16 12:06:54158 days ago1731758814IN
0x973bf562...e5303C745
1 ETH0.000009770.068144
0x27a554192739490022024-11-13 6:27:10161 days ago1731479230IN
0x973bf562...e5303C745
2.2 ETH0.000003450.01
0x26e614142700962002024-11-02 1:19:19172 days ago1730510359IN
0x973bf562...e5303C745
1 ETH0.000001470.01
0x26dd58182633944212024-10-13 13:29:03191 days ago1728826143IN
0x973bf562...e5303C745
1.83 ETH0.000002110.01
0x25b69c182585095882024-09-29 7:45:23206 days ago1727595923IN
0x973bf562...e5303C745
1.48 ETH0.000001590.01
0x3d7c34c82576182262024-09-26 17:29:18208 days ago1727371758IN
0x973bf562...e5303C745
1 ETH0.000003170.01
0x240ce0192476894392024-08-28 19:17:13237 days ago1724872633IN
0x973bf562...e5303C745
1 ETH0.000002320.01639
0x24e4b4182470677862024-08-26 23:52:39239 days ago1724716359IN
0x973bf562...e5303C745
1.2 ETH0.000001530.01
0x273e0c1d2417851092024-08-11 15:04:55254 days ago1723388695IN
0x973bf562...e5303C745
3.5 ETH0.000002410.016513
0x1ca26c3c2407478372024-08-08 14:37:01257 days ago1723127821IN
0x973bf562...e5303C745
1 ETH0.000006460.03406
0x242ca8222401066022024-08-06 17:47:34259 days ago1722966454IN
0x973bf562...e5303C745
3.95129268 ETH0.00000180.01
0x2636c01c2397829852024-08-05 19:10:06260 days ago1722885006IN
0x973bf562...e5303C745
2.9 ETH0.00000560.037744
0x243d541a2396897602024-08-05 12:37:41261 days ago1722861461IN
0x973bf562...e5303C745
1 ETH0.000066930.429992
0x260a68182396557902024-08-05 10:15:17261 days ago1722852917IN
0x973bf562...e5303C745
1.435 ETH0.000011040.07936
0x1d32a83e2396446142024-08-05 9:28:31261 days ago1722850111IN
0x973bf562...e5303C745
1.2 ETH0.000017540.106007
0x1f9da03c2395993802024-08-05 6:18:35261 days ago1722838715IN
0x973bf562...e5303C745
1.8 ETH0.000186250.976688
0x2617941a2394173692024-08-04 17:33:45261 days ago1722792825IN
0x973bf562...e5303C745
1.36 ETH0.000125660.778744
0x0d6d20422390624352024-08-03 16:48:14262 days ago1722703694IN
0x973bf562...e5303C745
2 ETH0.000018190.090069
0x24b6141a2377382062024-07-30 20:31:24266 days ago1722371484IN
0x973bf562...e5303C745
1 ETH0.000002110.01
0x0e5998402327238362024-07-16 6:46:41281 days ago1721112401IN
0x973bf562...e5303C745
2 ETH0.000002740.015614
VIEW ADVANCED FILTER

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
3097094902025-02-25 9:42:2357 days ago1740476543
0x973bf562...e5303C745
0.00399433 ETH
3097094902025-02-25 9:42:2357 days ago1740476543
0x973bf562...e5303C745
0.00399433 ETH
2894958892024-12-28 12:55:58115 days ago1735390558
0x973bf562...e5303C745
0.0000415 ETH
2894785702024-12-28 11:43:49116 days ago1735386229
0x973bf562...e5303C745
0.00020334 ETH
2894785702024-12-28 11:43:49116 days ago1735386229
0x973bf562...e5303C745
0.00020334 ETH
2891551572024-12-27 13:10:02116 days ago1735305002
0x973bf562...e5303C745
0.00034829 ETH
2891551572024-12-27 13:10:02116 days ago1735305002
0x973bf562...e5303C745
0.00034829 ETH
2863346752024-12-19 8:39:06125 days ago1734597546
0x973bf562...e5303C745
0.0006313 ETH
2857804832024-12-17 18:00:12126 days ago1734458412
0x973bf562...e5303C745
0.0005055 ETH
2857208542024-12-17 13:51:05126 days ago1734443465
0x973bf562...e5303C745
0.01014727 ETH
2854594312024-12-16 19:38:25127 days ago1734377905
0x973bf562...e5303C745
0.002123 ETH
2848813772024-12-15 3:26:39129 days ago1734233199
0x973bf562...e5303C745
0.00900919 ETH
2845457892024-12-14 4:06:06130 days ago1734149166
0x973bf562...e5303C745
0.01423155 ETH
2841043782024-12-12 21:06:31131 days ago1734037591
0x973bf562...e5303C745
0.00795391 ETH
2841043782024-12-12 21:06:31131 days ago1734037591
0x973bf562...e5303C745
0.00795391 ETH
2841042362024-12-12 21:05:51131 days ago1734037551
0x973bf562...e5303C745
0.008 ETH
2830188482024-12-09 15:41:08134 days ago1733758868
0x973bf562...e5303C745
0.00131 ETH
2830157952024-12-09 15:28:20134 days ago1733758100
0x973bf562...e5303C745
0.00129969 ETH
2830157952024-12-09 15:28:20134 days ago1733758100
0x973bf562...e5303C745
0.00129969 ETH
2830136032024-12-09 15:19:11134 days ago1733757551
0x973bf562...e5303C745
0.0013 ETH
2829027142024-12-09 7:35:43135 days ago1733729743
0x973bf562...e5303C745
0.001 ETH
2828393612024-12-09 3:10:58135 days ago1733713858
0x973bf562...e5303C745
0.01264792 ETH
2828393612024-12-09 3:10:58135 days ago1733713858
0x973bf562...e5303C745
0.01264792 ETH
2820133742024-12-06 17:36:30137 days ago1733506590
0x973bf562...e5303C745
0.03 ETH
2820098612024-12-06 17:21:49137 days ago1733505709
0x973bf562...e5303C745
0.035 ETH
View All Internal Transactions

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
File 1 of 9 : LlamaZip.sol
//SPDX-License-Identifier: None
pragma solidity =0.7.6;
pragma abicoder v2;

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

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

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

    constructor(address _factory, address _WETH9, address _owner) SwapRouter(_factory, _WETH9) {
        owner = _owner;
    }

    struct Pool {
        address token0;
        address token1;
        uint24 fee;
    }

    mapping(uint => Pool) internal pools;

    function setPool(uint id, address pool) internal {
        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 internal returns (Pool memory pool){
        if(poolId == 0){
            return Pool(0x82aF49447D8a07e3bd95BD0d56f35241523fBab1, 0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8, 500); // WETH / USDC 0.05%
        } else if(poolId == (1 << 252)){
            return Pool(0x82aF49447D8a07e3bd95BD0d56f35241523fBab1, 0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9, 500); // WETH / USDT 0.05%
        } else if(poolId == (2 << 252)){
            return Pool(0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f, 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1, 500); // WBTC / WETH 0.05%
        } else if(poolId == (3 << 252)){
            return Pool(0x82aF49447D8a07e3bd95BD0d56f35241523fBab1, 0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a, 3000); // WETH / GMX 0.3%
        } else if(poolId == (4 << 252)){
            return Pool(0x18c11FD286C5EC11c3b683Caa813B77f5163A122, 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1, 3000); // GNS / WETH 0.3%
        } else if(poolId == (5 << 252)){
            return Pool(0x539bdE0d7Dbd336b79148AA742883198BBF60342, 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1, 10000); // MAGIC / WETH 1%
        } else if(poolId == (6 << 252)){
            return Pool(0x82aF49447D8a07e3bd95BD0d56f35241523fBab1, 0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1, 3000); // WETH / DAI 0.3%
        } else if(poolId == (7 << 252)){
            return Pool(0x82aF49447D8a07e3bd95BD0d56f35241523fBab1, 0x912CE59144191C1204E64559FE8253a0e49E6548, 10000); // WETH / ARB 1%
        } else if(poolId == (8 << 252)){
            return Pool(0x82aF49447D8a07e3bd95BD0d56f35241523fBab1, 0x912CE59144191C1204E64559FE8253a0e49E6548, 3000); // WETH / ARB 0.3%
        } else if(poolId == (9 << 252)){
            return Pool(0x82aF49447D8a07e3bd95BD0d56f35241523fBab1, 0x912CE59144191C1204E64559FE8253a0e49E6548, 500); // WETH / ARB 0.05%
        } else if(poolId == (10 << 252)){
            return Pool(0x82aF49447D8a07e3bd95BD0d56f35241523fBab1, 0x912CE59144191C1204E64559FE8253a0e49E6548, 100); // WETH / ARB 0.01%
        }

        return pools[poolId];
    }

    // Because of function uniswapV3SwapCallback() 2.3e-8% of calls will fail because they'll hit that selector
    fallback() external payable {
        if(msg.sender == owner){
            (uint method) = abi.decode(msg.data, (uint));
            if(method == 0){
                // Sweep tokens or ETH that got stuck here
                (,address token, uint amount, address receiver) = abi.decode(msg.data, (uint, 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
                }
            } else{
                (,uint poolId, address poolAddress) = abi.decode(msg.data, (uint, uint, address));
                setPool(poolId, poolAddress);
            }
            return;
        }

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

        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 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);
                expectedTotalOut = (expectedTotalOut*totalIn)/1e18; // use it as a rate instead
            } 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 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 9 : 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 3 of 9 : 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 4 of 9 : 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 5 of 9 : 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 6 of 9 : 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 7 of 9 : 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 8 of 9 : 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 9 of 9 : 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');
    }
}

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

API
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH9","type":"address"},{"internalType":"address","name":"_owner","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"}]

60e06040523480156200001157600080fd5b5060405162001ff138038062001ff1833981016040819052620000349162000079565b6001600160601b0319606093841b811660805291831b821660a05290911b1660c052620000c2565b80516001600160a01b03811681146200007457600080fd5b919050565b6000806000606084860312156200008e578283fd5b62000099846200005c565b9250620000a9602085016200005c565b9150620000b9604085016200005c565b90509250925092565b60805160601c60a05160601c60c05160601c611ed8620001196000398060e5525080603f52806102f45280610f5b5280610fea52806114bc528061151c528061159d5250806110a5528061110a5250611ed86000f3fe6080604052600436106100225760003560e01c8063fa461e3314610555576100cd565b366100cd573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146100cb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561026c5760006101173682611c07565b905080610247576000808061012c3682611c37565b919550935091505073ffffffffffffffffffffffffffffffffffffffff83166101975760405173ffffffffffffffffffffffffffffffffffffffff8216904780156108fc02916000818181858888f19350505050158015610191573d6000803e3d6000fd5b5061023f565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063a9059cbb906101eb9084908690600401611d84565b602060405180830381600087803b15801561020557600080fd5b505af1158015610219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023d9190611aaf565b505b505050610266565b6000806102543682611c80565b92509250506102638282610575565b50505b506100cb565b60008035907ff0000000000000000000000000000000000000000000000000000000000000008216907f08000000000000000000000000000000000000000000000000000000000000008316906102c283610887565b9050600082156102d35781516102d9565b81602001515b905060ea85901c6201ffff1660e286901c60ff1681811b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811690861614801561033b5750600034115b1561034757503461045c565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff891680610423576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716906370a08231906103bd903390600401611cb8565b60206040518083038186803b1580156103d557600080fd5b505afa1580156103e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040d9190611c1f565b9150670de0b6b3a764000083830204925061045a565b601f60db8b901c16600a0a7b07ffffffffffffffffffffffffffffffffffffffffffffffffffffff8b1660083602610100031c0291505b505b60007c03000000000000000000000000000000000000000000000000000000008a168061048d576126de9150610516565b807c010000000000000000000000000000000000000000000000000000000014156104bc576127069150610516565b807c020000000000000000000000000000000000000000000000000000000014156104eb576126ac9150610516565b807c030000000000000000000000000000000000000000000000000000000014156105165761251c91505b506127108184020460008915610530578860200151610533565b88515b905061054788828b60400151878987610dcb565b505050505050505050505050005b34801561056157600080fd5b506100cb610570366004611af2565b611078565b60008281526020819052604090205473ffffffffffffffffffffffffffffffffffffffff161580156105cc575060008281526020819052604090206001015473ffffffffffffffffffffffffffffffffffffffff16155b61060b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060290611de1565b60405180910390fd5b60405180606001604052808273ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561065e57600080fd5b505af1158015610672573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106969190611a8c565b73ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106f957600080fd5b505af115801561070d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107319190611a8c565b73ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561079457600080fd5b505af11580156107a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cc9190611beb565b62ffffff90811690915260009384526020848152604094859020835181547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff92831617835592850151600190920180549590970151949092169116177fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000092909116919091021790915550565b61088f611a6c565b816108df5750604080516060810182527382af49447d8a07e3bd95bd0d56f35241523fbab1815273ff970a61a04b1ca14834a43f5de4533ebddb5cc860208201526101f491810191909152610dc6565b817f100000000000000000000000000000000000000000000000000000000000000014156109525750604080516060810182527382af49447d8a07e3bd95bd0d56f35241523fbab1815273fd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb960208201526101f491810191909152610dc6565b817f200000000000000000000000000000000000000000000000000000000000000014156109c5575060408051606081018252732f2a2543b76a4166549f7aab2e75bef0aefc5b0f81527382af49447d8a07e3bd95bd0d56f35241523fbab160208201526101f491810191909152610dc6565b817f30000000000000000000000000000000000000000000000000000000000000001415610a385750604080516060810182527382af49447d8a07e3bd95bd0d56f35241523fbab1815273fc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a6020820152610bb891810191909152610dc6565b817f40000000000000000000000000000000000000000000000000000000000000001415610aab5750604080516060810182527318c11fd286c5ec11c3b683caa813b77f5163a12281527382af49447d8a07e3bd95bd0d56f35241523fbab16020820152610bb891810191909152610dc6565b817f50000000000000000000000000000000000000000000000000000000000000001415610b1e57506040805160608101825273539bde0d7dbd336b79148aa742883198bbf6034281527382af49447d8a07e3bd95bd0d56f35241523fbab1602082015261271091810191909152610dc6565b817f60000000000000000000000000000000000000000000000000000000000000001415610b915750604080516060810182527382af49447d8a07e3bd95bd0d56f35241523fbab1815273da10009cbd5d07dd0cecc66161fc93d7c9000da16020820152610bb891810191909152610dc6565b817f70000000000000000000000000000000000000000000000000000000000000001415610c045750604080516060810182527382af49447d8a07e3bd95bd0d56f35241523fbab1815273912ce59144191c1204e64559fe8253a0e49e6548602082015261271091810191909152610dc6565b817f80000000000000000000000000000000000000000000000000000000000000001415610c775750604080516060810182527382af49447d8a07e3bd95bd0d56f35241523fbab1815273912ce59144191c1204e64559fe8253a0e49e65486020820152610bb891810191909152610dc6565b817f90000000000000000000000000000000000000000000000000000000000000001415610cea5750604080516060810182527382af49447d8a07e3bd95bd0d56f35241523fbab1815273912ce59144191c1204e64559fe8253a0e49e654860208201526101f491810191909152610dc6565b817fa0000000000000000000000000000000000000000000000000000000000000001415610d5c5750604080516060810182527382af49447d8a07e3bd95bd0d56f35241523fbab1815273912ce59144191c1204e64559fe8253a0e49e65486020820152606491810191909152610dc6565b50600081815260208181526040918290208251606081018452815473ffffffffffffffffffffffffffffffffffffffff90811682526001909201549182169281019290925274010000000000000000000000000000000000000000900462ffffff16918101919091525b919050565b6040805160808101825273ffffffffffffffffffffffffffffffffffffffff888116808352908816602080840182905262ffffff8916848601523360608501529351911092600092610e1f92909101611e18565b6040516020818303038152906040529050600080610e3e8a8a8a611103565b73ffffffffffffffffffffffffffffffffffffffff1663128acb083086610e648b611141565b88610e835773fffd8963efd1fc6a506488495d951d5263988d25610e8a565b6401000276a45b886040518663ffffffff1660e01b8152600401610eab959493929190611cd9565b6040805180830381600087803b158015610ec457600080fd5b505af1158015610ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efc9190611acf565b91509150600084610f0d5782610f0f565b815b600003905086811115610f1f5750855b85811015610f59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060290611daa565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161415611060576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d9061101f908490600401611e63565b600060405180830381600087803b15801561103957600080fd5b505af115801561104d573d6000803e3d6000fd5b5050505061105b3382611173565b61106b565b61106b8a33836112c6565b5050505050505050505050565b60008413806110875750600083135b61109057600080fd5b600061109e82840184611b6d565b90506110d87f000000000000000000000000000000000000000000000000000000000000000082600001518360200151846040015161149b565b506110fc8160000151826060015133600089136110f557876110f7565b885b6114ba565b5050505050565b60006111397f000000000000000000000000000000000000000000000000000000000000000061113486868661169e565b61171b565b949350505050565b60007f8000000000000000000000000000000000000000000000000000000000000000821061116f57600080fd5b5090565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b602083106111ea57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016111ad565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461124c576040519150601f19603f3d011682016040523d82523d6000602084013e611251565b606091505b50509050806112c157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061139b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161135e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146113fd576040519150601f19603f3d011682016040523d82523d6000602084013e611402565b606091505b5091509150818015611430575080511580611430575080806020019051602081101561142d57600080fd5b50515b6110fc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006114b1856114ac86868661169e565b611851565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156115155750804710155b1561165e577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561158257600080fd5b505af1158015611596573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561162c57600080fd5b505af1158015611640573d6000803e3d6000fd5b505050506040513d602081101561165657600080fd5b506116989050565b73ffffffffffffffffffffffffffffffffffffffff831630141561168c576116878483836112c6565b611698565b61169884848484611887565b50505050565b6116a6611a6c565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1611156116de579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161061175d57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b600061185d838361171b565b90503373ffffffffffffffffffffffffffffffffffffffff82161461188157600080fd5b92915050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b6020831061196457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611927565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146119c6576040519150601f19603f3d011682016040523d82523d6000602084013e6119cb565b606091505b50915091508180156119f95750805115806119f957508080602001905160208110156119f657600080fd5b50515b611a6457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050565b604080516060810182526000808252602082018190529181019190915290565b600060208284031215611a9d578081fd5b8151611aa881611e6c565b9392505050565b600060208284031215611ac0578081fd5b81518015158114611aa8578182fd5b60008060408385031215611ae1578081fd5b505080516020909101519092909150565b60008060008060608587031215611b07578182fd5b8435935060208501359250604085013567ffffffffffffffff80821115611b2c578384fd5b818701915087601f830112611b3f578384fd5b813581811115611b4d578485fd5b886020828501011115611b5e578485fd5b95989497505060200194505050565b600060808284031215611b7e578081fd5b6040516080810181811067ffffffffffffffff82111715611b9b57fe5b6040528235611ba981611e6c565b81526020830135611bb981611e6c565b60208201526040830135611bcc81611e91565b60408201526060830135611bdf81611e6c565b60608201529392505050565b600060208284031215611bfc578081fd5b8151611aa881611e91565b600060208284031215611c18578081fd5b5035919050565b600060208284031215611c30578081fd5b5051919050565b60008060008060808587031215611c4c578384fd5b843593506020850135611c5e81611e6c565b9250604085013591506060850135611c7581611e6c565b939692955090935050565b600080600060608486031215611c94578283fd5b83359250602084013591506040840135611cad81611e6c565b809150509250925092565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352602087151581850152866040850152818616606085015260a06080850152845191508160a0850152825b82811015611d3b5785810182015185820160c001528101611d1f565b82811115611d4c578360c084870101525b5050601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160c0019695505050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b6020808252600b908201527f616c726561647920736574000000000000000000000000000000000000000000604082015260600190565b815173ffffffffffffffffffffffffffffffffffffffff908116825260208084015182169083015260408084015162ffffff1690830152606092830151169181019190915260800190565b90815260200190565b73ffffffffffffffffffffffffffffffffffffffff81168114611e8e57600080fd5b50565b62ffffff81168114611e8e57600080fdfea2646970667358221220e9769cee8bb55bc2968cc998e49f02f19922cdd6e2f1c5a6ae157ba14fb6d32c64736f6c634300070600330000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f98400000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1000000000000000000000000afad7a0794fa622e8f7e6c34e69a2657c157ef99

Deployed Bytecode

0x6080604052600436106100225760003560e01c8063fa461e3314610555576100cd565b366100cd573373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab116146100cb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000afad7a0794fa622e8f7e6c34e69a2657c157ef9916141561026c5760006101173682611c07565b905080610247576000808061012c3682611c37565b919550935091505073ffffffffffffffffffffffffffffffffffffffff83166101975760405173ffffffffffffffffffffffffffffffffffffffff8216904780156108fc02916000818181858888f19350505050158015610191573d6000803e3d6000fd5b5061023f565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063a9059cbb906101eb9084908690600401611d84565b602060405180830381600087803b15801561020557600080fd5b505af1158015610219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023d9190611aaf565b505b505050610266565b6000806102543682611c80565b92509250506102638282610575565b50505b506100cb565b60008035907ff0000000000000000000000000000000000000000000000000000000000000008216907f08000000000000000000000000000000000000000000000000000000000000008316906102c283610887565b9050600082156102d35781516102d9565b81602001515b905060ea85901c6201ffff1660e286901c60ff1681811b60007f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff90811690861614801561033b5750600034115b1561034757503461045c565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff891680610423576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716906370a08231906103bd903390600401611cb8565b60206040518083038186803b1580156103d557600080fd5b505afa1580156103e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040d9190611c1f565b9150670de0b6b3a764000083830204925061045a565b601f60db8b901c16600a0a7b07ffffffffffffffffffffffffffffffffffffffffffffffffffffff8b1660083602610100031c0291505b505b60007c03000000000000000000000000000000000000000000000000000000008a168061048d576126de9150610516565b807c010000000000000000000000000000000000000000000000000000000014156104bc576127069150610516565b807c020000000000000000000000000000000000000000000000000000000014156104eb576126ac9150610516565b807c030000000000000000000000000000000000000000000000000000000014156105165761251c91505b506127108184020460008915610530578860200151610533565b88515b905061054788828b60400151878987610dcb565b505050505050505050505050005b34801561056157600080fd5b506100cb610570366004611af2565b611078565b60008281526020819052604090205473ffffffffffffffffffffffffffffffffffffffff161580156105cc575060008281526020819052604090206001015473ffffffffffffffffffffffffffffffffffffffff16155b61060b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060290611de1565b60405180910390fd5b60405180606001604052808273ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561065e57600080fd5b505af1158015610672573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106969190611a8c565b73ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106f957600080fd5b505af115801561070d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107319190611a8c565b73ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561079457600080fd5b505af11580156107a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cc9190611beb565b62ffffff90811690915260009384526020848152604094859020835181547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff92831617835592850151600190920180549590970151949092169116177fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000092909116919091021790915550565b61088f611a6c565b816108df5750604080516060810182527382af49447d8a07e3bd95bd0d56f35241523fbab1815273ff970a61a04b1ca14834a43f5de4533ebddb5cc860208201526101f491810191909152610dc6565b817f100000000000000000000000000000000000000000000000000000000000000014156109525750604080516060810182527382af49447d8a07e3bd95bd0d56f35241523fbab1815273fd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb960208201526101f491810191909152610dc6565b817f200000000000000000000000000000000000000000000000000000000000000014156109c5575060408051606081018252732f2a2543b76a4166549f7aab2e75bef0aefc5b0f81527382af49447d8a07e3bd95bd0d56f35241523fbab160208201526101f491810191909152610dc6565b817f30000000000000000000000000000000000000000000000000000000000000001415610a385750604080516060810182527382af49447d8a07e3bd95bd0d56f35241523fbab1815273fc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a6020820152610bb891810191909152610dc6565b817f40000000000000000000000000000000000000000000000000000000000000001415610aab5750604080516060810182527318c11fd286c5ec11c3b683caa813b77f5163a12281527382af49447d8a07e3bd95bd0d56f35241523fbab16020820152610bb891810191909152610dc6565b817f50000000000000000000000000000000000000000000000000000000000000001415610b1e57506040805160608101825273539bde0d7dbd336b79148aa742883198bbf6034281527382af49447d8a07e3bd95bd0d56f35241523fbab1602082015261271091810191909152610dc6565b817f60000000000000000000000000000000000000000000000000000000000000001415610b915750604080516060810182527382af49447d8a07e3bd95bd0d56f35241523fbab1815273da10009cbd5d07dd0cecc66161fc93d7c9000da16020820152610bb891810191909152610dc6565b817f70000000000000000000000000000000000000000000000000000000000000001415610c045750604080516060810182527382af49447d8a07e3bd95bd0d56f35241523fbab1815273912ce59144191c1204e64559fe8253a0e49e6548602082015261271091810191909152610dc6565b817f80000000000000000000000000000000000000000000000000000000000000001415610c775750604080516060810182527382af49447d8a07e3bd95bd0d56f35241523fbab1815273912ce59144191c1204e64559fe8253a0e49e65486020820152610bb891810191909152610dc6565b817f90000000000000000000000000000000000000000000000000000000000000001415610cea5750604080516060810182527382af49447d8a07e3bd95bd0d56f35241523fbab1815273912ce59144191c1204e64559fe8253a0e49e654860208201526101f491810191909152610dc6565b817fa0000000000000000000000000000000000000000000000000000000000000001415610d5c5750604080516060810182527382af49447d8a07e3bd95bd0d56f35241523fbab1815273912ce59144191c1204e64559fe8253a0e49e65486020820152606491810191909152610dc6565b50600081815260208181526040918290208251606081018452815473ffffffffffffffffffffffffffffffffffffffff90811682526001909201549182169281019290925274010000000000000000000000000000000000000000900462ffffff16918101919091525b919050565b6040805160808101825273ffffffffffffffffffffffffffffffffffffffff888116808352908816602080840182905262ffffff8916848601523360608501529351911092600092610e1f92909101611e18565b6040516020818303038152906040529050600080610e3e8a8a8a611103565b73ffffffffffffffffffffffffffffffffffffffff1663128acb083086610e648b611141565b88610e835773fffd8963efd1fc6a506488495d951d5263988d25610e8a565b6401000276a45b886040518663ffffffff1660e01b8152600401610eab959493929190611cd9565b6040805180830381600087803b158015610ec457600080fd5b505af1158015610ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efc9190611acf565b91509150600084610f0d5782610f0f565b815b600003905086811115610f1f5750855b85811015610f59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060290611daa565b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161415611060576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab11690632e1a7d4d9061101f908490600401611e63565b600060405180830381600087803b15801561103957600080fd5b505af115801561104d573d6000803e3d6000fd5b5050505061105b3382611173565b61106b565b61106b8a33836112c6565b5050505050505050505050565b60008413806110875750600083135b61109057600080fd5b600061109e82840184611b6d565b90506110d87f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f98482600001518360200151846040015161149b565b506110fc8160000151826060015133600089136110f557876110f7565b885b6114ba565b5050505050565b60006111397f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f98461113486868661169e565b61171b565b949350505050565b60007f8000000000000000000000000000000000000000000000000000000000000000821061116f57600080fd5b5090565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b602083106111ea57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016111ad565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461124c576040519150601f19603f3d011682016040523d82523d6000602084013e611251565b606091505b50509050806112c157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061139b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161135e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146113fd576040519150601f19603f3d011682016040523d82523d6000602084013e611402565b606091505b5091509150818015611430575080511580611430575080806020019051602081101561142d57600080fd5b50515b6110fc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006114b1856114ac86868661169e565b611851565b95945050505050565b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156115155750804710155b1561165e577f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561158257600080fd5b505af1158015611596573d6000803e3d6000fd5b50505050507f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561162c57600080fd5b505af1158015611640573d6000803e3d6000fd5b505050506040513d602081101561165657600080fd5b506116989050565b73ffffffffffffffffffffffffffffffffffffffff831630141561168c576116878483836112c6565b611698565b61169884848484611887565b50505050565b6116a6611a6c565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1611156116de579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161061175d57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b600061185d838361171b565b90503373ffffffffffffffffffffffffffffffffffffffff82161461188157600080fd5b92915050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b6020831061196457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611927565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146119c6576040519150601f19603f3d011682016040523d82523d6000602084013e6119cb565b606091505b50915091508180156119f95750805115806119f957508080602001905160208110156119f657600080fd5b50515b611a6457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050565b604080516060810182526000808252602082018190529181019190915290565b600060208284031215611a9d578081fd5b8151611aa881611e6c565b9392505050565b600060208284031215611ac0578081fd5b81518015158114611aa8578182fd5b60008060408385031215611ae1578081fd5b505080516020909101519092909150565b60008060008060608587031215611b07578182fd5b8435935060208501359250604085013567ffffffffffffffff80821115611b2c578384fd5b818701915087601f830112611b3f578384fd5b813581811115611b4d578485fd5b886020828501011115611b5e578485fd5b95989497505060200194505050565b600060808284031215611b7e578081fd5b6040516080810181811067ffffffffffffffff82111715611b9b57fe5b6040528235611ba981611e6c565b81526020830135611bb981611e6c565b60208201526040830135611bcc81611e91565b60408201526060830135611bdf81611e6c565b60608201529392505050565b600060208284031215611bfc578081fd5b8151611aa881611e91565b600060208284031215611c18578081fd5b5035919050565b600060208284031215611c30578081fd5b5051919050565b60008060008060808587031215611c4c578384fd5b843593506020850135611c5e81611e6c565b9250604085013591506060850135611c7581611e6c565b939692955090935050565b600080600060608486031215611c94578283fd5b83359250602084013591506040840135611cad81611e6c565b809150509250925092565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352602087151581850152866040850152818616606085015260a06080850152845191508160a0850152825b82811015611d3b5785810182015185820160c001528101611d1f565b82811115611d4c578360c084870101525b5050601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160c0019695505050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b6020808252600b908201527f616c726561647920736574000000000000000000000000000000000000000000604082015260600190565b815173ffffffffffffffffffffffffffffffffffffffff908116825260208084015182169083015260408084015162ffffff1690830152606092830151169181019190915260800190565b90815260200190565b73ffffffffffffffffffffffffffffffffffffffff81168114611e8e57600080fd5b50565b62ffffff81168114611e8e57600080fdfea2646970667358221220e9769cee8bb55bc2968cc998e49f02f19922cdd6e2f1c5a6ae157ba14fb6d32c64736f6c63430007060033

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

0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f98400000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1000000000000000000000000afad7a0794fa622e8f7e6c34e69a2657c157ef99

-----Decoded View---------------
Arg [0] : _factory (address): 0x1F98431c8aD98523631AE4a59f267346ea31F984
Arg [1] : _WETH9 (address): 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1
Arg [2] : _owner (address): 0xafad7a0794fA622e8f7e6c34e69A2657c157ef99

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984
Arg [1] : 00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
Arg [2] : 000000000000000000000000afad7a0794fa622e8f7e6c34e69a2657c157ef99


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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