ETH Price: $2,938.77 (+2.33%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Exec Batch With ...238703022025-11-24 17:49:3538 hrs ago1764006575IN
0xCfEd5c58...4Cd6EC1F3
0 ETH0.000601080.84644372
Exec Single With...238702232025-11-24 17:33:2338 hrs ago1764005603IN
0xCfEd5c58...4Cd6EC1F3
0 ETH0.000158791.43445063
Exec Single With...238702212025-11-24 17:32:5938 hrs ago1764005579IN
0xCfEd5c58...4Cd6EC1F3
0 ETH0.000153541.41120941
Exec Single With...238700262025-11-24 16:53:5939 hrs ago1764003239IN
0xCfEd5c58...4Cd6EC1F3
0 ETH0.000094710.74242233
Exec Single With...238700242025-11-24 16:53:3539 hrs ago1764003215IN
0xCfEd5c58...4Cd6EC1F3
0 ETH0.000095470.75825683
Transfer238698432025-11-24 16:16:4739 hrs ago1764001007IN
0xCfEd5c58...4Cd6EC1F3
0.0001 ETH0.000018030.44115098

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Method Block
From
To
Deposit238698432025-11-24 16:16:4739 hrs ago1764001007
0xCfEd5c58...4Cd6EC1F3
0.0001 ETH
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BatchUniV2V3Router

Compiler Version
v0.8.30+commit.73712a01

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

/// Минимальный интерфейс ERC20 (transfer + balanceOf)
interface IERC20 {
    function transfer(address to, uint256 value) external returns (bool);
    function balanceOf(address who) external view returns (uint256);
}

/// Uniswap V2 пара
interface IUniswapV2Pair {
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (
        uint112 reserve0,
        uint112 reserve1,
        uint32  blockTimestampLast
    );
    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes   calldata data
    ) external;
}

/// Uniswap V3 пул (только swap)
interface IUniswapV3Pool {
    function swap(
        address recipient,
        bool    zeroForOne,
        int256  amountSpecified,
        uint160 sqrtPriceLimitX96,
        bytes   calldata data
    ) external returns (int256 amount0, int256 amount1);
}

/// Callback интерфейс V3
interface IUniswapV3SwapCallback {
    function uniswapV3SwapCallback(
        int256 amount0Delta,
        int256 amount1Delta,
        bytes  calldata data
    ) external;
}

interface IWETH {
    function deposit() external payable;
    function withdraw(uint256) external;
    function transfer(address to, uint256 value) external returns (bool);
}


/// @title BatchUniV2V3Router
/// @notice Универсальный роутер для Uniswap V2/V3 c батчами маршрутов.
///
/// Формат одного шага (step) в routeData:
///
///   [ header (1) | tokenIn (20) | tokenOut (20) | pool (20) | (опц.) recipient (20) ]
///
/// header (битовая маска):
///   0x01 = FLAG_DEX_V3       (0 = V2, 1 = V3)
///   0x02 = FLAG_ZERO_FOR_ONE (для V3: направление swap)
///   0x04 = FLAG_HAS_RECIP    (есть recipient; если нет — recipient = address(this))
///
/// Публичные функции:
///   - execSingleWithMin(amountIn, routeData, minOut)
///   - execBatchWithMin(amountsIn[], routesData[], minOuts[])
///
/// Всё лежит на контракте, вызывать может только owner.
contract BatchUniV2V3Router is IUniswapV3SwapCallback {
    // =================== errors ===================

    error NotOwner();
    error ZeroOutput();
    error InsufficientBalance();
    error UnauthorizedPool();
    error Slippage();
    
    event Wrap(uint256 amount);
    // =================== owner ====================
    address public immutable WETH;
    address public owner;

    

    modifier onlyOwner() {
        if (msg.sender != owner) revert NotOwner();
        _;
    }

    constructor(address _weth, address _owner) {
        WETH = _weth;
        owner = _owner;
    }

    receive() external payable {
        if (msg.value == 0) return;
        if (msg.sender == WETH || msg.sender == owner) return;
        IWETH(WETH).deposit{value: msg.value}();
        emit Wrap(msg.value);
    }

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

    // ============ константы для V3 ============

    uint160 internal constant MIN_SQRT_RATIO =
        4295128739;
    uint160 internal constant MAX_SQRT_RATIO =
        1461446703485210103287273052203988822378723970342;

    // header flags
    uint8 private constant FLAG_DEX_V3       = 0x01;
    uint8 private constant FLAG_ZERO_FOR_ONE = 0x02;
    uint8 private constant FLAG_HAS_RECIP    = 0x04;

    // активный V3-pool для callback
    address private _currentPool;

    // ============ PUBLIC EXECUTION ============

    /// @notice Один маршрут с проверкой minAmountOut.
    function execSingleWithMin(
        uint256      amountIn,
        bytes calldata routeData,
        uint256      minAmountOut
    ) external onlyOwner returns (uint256 amountOut) {
        amountOut = _executeRoute(amountIn, routeData);
        if (amountOut < minAmountOut) revert Slippage();
    }

    /// @notice Батч маршрутов в одной транзакции.
    /// @dev minAmountsOut:
    ///      - длина = 0  -> без проверки slippage
    ///      - длина = N  -> по каждому маршруту out >= minOut[i]
    function execBatchWithMin(
        uint256[] calldata amountsIn,
        bytes[]  calldata routesData,
        uint256[] calldata minAmountsOut
    ) external onlyOwner returns (uint256[] memory amountsOut) {
        uint256 len = amountsIn.length;
        if (len == 0 || len != routesData.length) revert();

        if (minAmountsOut.length != 0 && minAmountsOut.length != len) {
            revert();
        }

        amountsOut = new uint256[](len);

        for (uint256 i; i < len; ) {
            uint256 out = _executeRoute(amountsIn[i], routesData[i]);

            if (minAmountsOut.length != 0 && out < minAmountsOut[i]) {
                revert Slippage();
            }

            amountsOut[i] = out;

            unchecked { ++i; }
        }
    }

    // ============ CORE: выполнение одного маршрута ============

    /// @dev amountIn — вход для первого шага; дальше каждый шаг берёт output предыдущего.
    function _executeRoute(
        uint256      amountIn,
        bytes calldata routeData
    ) internal returns (uint256 amountOutFinal) {
        uint256 len = routeData.length;
        // минимальный размер: header (1) + 3 адреса (3*20)
        if (len < 1 + 20 * 3) revert();

        uint256 offset = 0;
        uint256 amount = amountIn;
        bool firstStep = true;

        while (offset < len) {
            (
                uint8   header,
                address tokenIn,
                address tokenOut,
                address pool,
                address recipient,
                uint256 newOffset
            ) = _decodeStep(routeData, offset, len);

            offset = newOffset;

            if (firstStep) {
                uint256 bal = IERC20(tokenIn).balanceOf(address(this));
                if (bal < amountIn) revert InsufficientBalance();
                firstStep = false;
            }

            bool isV3       = (header & FLAG_DEX_V3) != 0;
            bool zeroForOne = (header & FLAG_ZERO_FOR_ONE) != 0;

            if (recipient == address(0)) {
                recipient = address(this);
            }

            if (isV3) {
                amount = _swapV3ExactIn(
                    pool,
                    tokenIn,
                    tokenOut,
                    amount,
                    zeroForOne,
                    0,
                    recipient
                );
            } else {
                amount = _swapV2(
                    pool,
                    tokenIn,
                    tokenOut,
                    amount,
                    recipient
                );
            }
        }

        amountOutFinal = amount;
    }

    // ============ Декодинг одного шага ============

    function _decodeStep(
        bytes calldata data,
        uint256        offset,
        uint256        totalLen
    )
        internal
        pure
        returns (
            uint8   header,
            address tokenIn,
            address tokenOut,
            address pool,
            address recipient,
            uint256 newOffset
        )
    {
        // header (1 байт)
        if (offset + 1 > totalLen) revert();
        assembly {
            header := byte(0, calldataload(add(data.offset, offset)))
        }
        offset += 1;

        // минимум 3 адреса: tokenIn, tokenOut, pool
        uint256 minNeed = 20 * 3;
        bool hasRecipient = (header & FLAG_HAS_RECIP) != 0;
        if (hasRecipient) {
            minNeed += 20;
        }
        if (offset + minNeed > totalLen) revert();

        tokenIn  = _bytesToAddress(data, offset);
        offset  += 20;

        tokenOut = _bytesToAddress(data, offset);
        offset  += 20;

        pool     = _bytesToAddress(data, offset);
        offset  += 20;

        recipient = address(0);
        if (hasRecipient) {
            recipient = _bytesToAddress(data, offset);
            offset  += 20;
        }

        newOffset = offset;
    }

    function _bytesToAddress(
        bytes calldata data,
        uint256        start
    ) internal pure returns (address addr) {
        assembly {
            let ptr := mload(0x40)
            mstore(ptr, 0)
            calldatacopy(add(ptr, 12), add(data.offset, start), 20)
            addr := mload(ptr)
        }
    }

    // ============ Uniswap V2 swap ============

    function _swapV2(
        address pair,
        address tokenIn,
        address tokenOut,
        uint256 amountIn,
        address recipient
    ) internal returns (uint256 amountOut) {
        IUniswapV2Pair p = IUniswapV2Pair(pair);

        (uint112 reserve0, uint112 reserve1,) = p.getReserves();
        address token0 = p.token0();
        address token1 = p.token1();

        bool zeroForOne;
        uint112 reserveIn;
        uint112 reserveOut;

        if (tokenIn == token0 && tokenOut == token1) {
            zeroForOne = true;
            reserveIn  = reserve0;
            reserveOut = reserve1;
        } else if (tokenIn == token1 && tokenOut == token0) {
            zeroForOne = false;
            reserveIn  = reserve1;
            reserveOut = reserve0;
        } else {
            revert ZeroOutput();
        }

        // формула Uniswap V2:
        // out = amountInWithFee * R_out / (R_in*1000 + amountInWithFee)
        uint256 amountInWithFee = amountIn * 997;
        amountOut = (amountInWithFee * uint256(reserveOut))
            / (uint256(reserveIn) * 1000 + amountInWithFee);

        if (amountOut == 0) revert ZeroOutput();

        // платим пулу tokenIn
        _safeTransfer(tokenIn, pair, amountIn);

        (uint256 amount0Out, uint256 amount1Out) = zeroForOne
            ? (uint256(0), amountOut)
            : (amountOut, uint256(0));

        p.swap(amount0Out, amount1Out, recipient, new bytes(0));
    }

    // ============ Uniswap V3 swap (Exact Input) ============

    function _swapV3ExactIn(
        address pool,
        address tokenIn,
        address /*tokenOut*/,
        uint256 amountIn,
        bool    zeroForOne,
        uint160 sqrtPriceLimitX96,
        address recipient
    ) internal returns (uint256 amountOut) {
        uint160 limit = sqrtPriceLimitX96;
        if (limit == 0) {
            limit = zeroForOne
                ? MIN_SQRT_RATIO + 1
                : MAX_SQRT_RATIO - 1;
        }

        _currentPool = pool;

        (int256 amount0Delta, int256 amount1Delta) = IUniswapV3Pool(pool).swap(
            recipient,
            zeroForOne,
            int256(amountIn), // exact input
            limit,
            abi.encode(tokenIn)
        );

        _currentPool = address(0);

        int256 outDelta = zeroForOne ? amount1Delta : amount0Delta;
        if (outDelta >= 0) revert ZeroOutput();
        amountOut = uint256(-outDelta);
    }

    // ============ Uniswap V3 callback ============

    function uniswapV3SwapCallback(
        int256 amount0Delta,
        int256 amount1Delta,
        bytes  calldata data
    ) external override {
        if (msg.sender != _currentPool) revert UnauthorizedPool();

        address tokenIn = abi.decode(data, (address));

        // В exact input одна из дельт > 0 — это то, что мы должны заплатить пулу
        if (amount0Delta > 0) {
            _safeTransfer(tokenIn, msg.sender, uint256(amount0Delta));
        } else if (amount1Delta > 0) {
            _safeTransfer(tokenIn, msg.sender, uint256(amount1Delta));
        }
    }

    // ============ Safe ERC20 transfer ============

    /// @dev Безопасный ERC20 transfer для нестандартных токенов (USDT и т.п.).
    ///      Успех: call не ревертит И (нет данных, либо decode(data) == true).
    function _safeTransfer(address token, address to, uint256 value) internal {
        (bool success, bytes memory data) =
            token.call(abi.encodeWithSelector(IERC20(token).transfer.selector, to, value));

        if (!success || (data.length != 0 && !abi.decode(data, (bool)))) {
            revert InsufficientBalance(); // можно заменить на отдельную ошибку TRANSFER_FAILED
        }
    }

    // ============ Админ: вывод токенов ============

    function withdraw(
        address token,
        address to,
        uint256 amount
    ) external onlyOwner {
        _safeTransfer(token, to, amount);
    }
}

Settings
{
  "viaIR": true,
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "remappings": []
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"Slippage","type":"error"},{"inputs":[],"name":"UnauthorizedPool","type":"error"},{"inputs":[],"name":"ZeroOutput","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Wrap","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"bytes[]","name":"routesData","type":"bytes[]"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"execBatchWithMin","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"bytes","name":"routeData","type":"bytes"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"execSingleWithMin","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a03461009557601f610f7638819003918201601f19168301916001600160401b0383118484101761009957808492604094855283398101031261009557610052602061004b836100ad565b92016100ad565b6080919091525f80546001600160a01b0319166001600160a01b03909216919091179055604051610eb490816100c282396080518181816102ea01526105d50152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036100955756fe60806040526004361015610022575b3615610018575f80fd5b6100206105cd565b005b5f3560e01c806313af4035146100915780631ee041821461008c5780636352f122146100875780638da5cb5b14610082578063ad5c46481461007d578063d9caed12146100785763fa461e330361000e57610361565b610319565b6102d5565b6102ae565b61022f565b61016d565b346100ee5760203660031901126100ee576004356100ae816100f2565b5f546001600160a01b031633036100df575f80546001600160a01b0319166001600160a01b03909216919091179055005b6330cd747160e01b5f5260045ffd5b5f80fd5b6001600160a01b038116036100ee57565b9181601f840112156100ee5782359167ffffffffffffffff83116100ee576020808501948460051b0101116100ee57565b60206040818301928281528451809452019201905f5b8181106101575750505090565b825184526020938401939092019160010161014a565b346100ee5760603660031901126100ee5760043567ffffffffffffffff81116100ee5761019e903690600401610103565b60243567ffffffffffffffff81116100ee576101be903690600401610103565b9190926044359267ffffffffffffffff84116100ee576101fd946101e96101f1953690600401610103565b949093610403565b60405191829182610134565b0390f35b9181601f840112156100ee5782359167ffffffffffffffff83116100ee57602083818601950101116100ee57565b346100ee5760603660031901126100ee5760043560243567ffffffffffffffff81116100ee57610263903690600401610201565b5f546044359392906001600160a01b031633036100df57610283926106ab565b90811061029557604051908152602090f35b6307dd37f760e41b5f5260045ffd5b5f9103126100ee57565b346100ee575f3660031901126100ee575f546040516001600160a01b039091168152602090f35b346100ee575f3660031901126100ee576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346100ee5760603660031901126100ee57600435610336816100f2565b602435610342816100f2565b5f5460443591906001600160a01b031633036100df576100209261081d565b346100ee5760603660031901126100ee5760243560043560443567ffffffffffffffff81116100ee57610398903690600401610201565b6001546001600160a01b031633036103f45781602091810103126100ee57356103c0816100f2565b6001600160a01b0316915f8213156103de575061002091339061081d565b90505f81136103e957005b61002091339061081d565b6364d89ec160e11b5f5260045ffd5b5f5491959094939290916001600160a01b031633036100df57851580156104b4575b6100ee578115159283806104aa575b6100ee5761044187610511565b965f5b81811061045657505050505050505090565b61047661046482848b610557565b3561047083868861056c565b916106ab565b908680610496575b6102955760019161048f828c6105ae565b5201610444565b506104a281878a610557565b35821061047e565b5086831415610434565b5082861415610425565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176104f457604052565b6104be565b67ffffffffffffffff81116104f45760051b60200190565b9061051b826104f9565b61052860405191826104d2565b8281528092610539601f19916104f9565b0190602036910137565b634e487b7160e01b5f52603260045260245ffd5b91908110156105675760051b0190565b610543565b91908110156105675760051b81013590601e19813603018212156100ee57019081359167ffffffffffffffff83116100ee5760200182360381136100ee579190565b80518210156105675760209160051b010190565b6040513d5f823e3d90fd5b341561069a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163381148015610687575b61068457803b156100ee575f60049160405192838092630d0e30db60e41b825234905af1801561067f57610665575b506040513481527f6ab8618a8d2bed35d6da9265bec63e1c0c1606d6af521108d34c9331722eb7ff90602090a1565b806106735f610679936104d2565b806102a4565b5f610636565b6105c2565b50565b505f546001600160a01b03163314610607565b565b908160209103126100ee575190565b90603d83106100ee575f9282906001905b8086106106cc5750505050905090565b91936106dc8385978185976108e5565b94959290809492949597610739575b6001600160a01b031615610731575b600186161561071f575060026107139516151592610d45565b945b92909493916106bc565b919261072b9550610aa6565b94610715565b3094506106fa565b6040516370a0823160e01b81523060048201529099506020816024816001600160a01b0387165afa801561067f578b915f9161078c575b501061077d575f986106eb565b631e9acf1760e31b5f5260045ffd5b6107ad915060203d81116107b3575b6107a581836104d2565b81019061069c565b5f610770565b503d61079b565b67ffffffffffffffff81116104f457601f01601f191660200190565b3d15610800573d906107e7826107ba565b916107f560405193846104d2565b82523d5f602084013e565b606090565b908160209103126100ee575180151581036100ee5790565b60405163a9059cbb60e01b602082019081526001600160a01b0390931660248201526044808201949094529283525f92839290839061085d6064826104d2565b51925af16108696107d6565b901590811561087a575b5061077d57565b805180151592508261088f575b50505f610873565b6108aa9250906020806108a6938301019101610805565b1590565b5f80610887565b634e487b7160e01b5f52601160045260245ffd5b90601482018092116108d357565b6108b1565b919082018092116108d357565b90509290919260018301928381116108d3578484116100ee578101355f1a9360048516151590603c82610974575b85018086116108d357116100ee5761093461092e8584610e6a565b946108c5565b9261094261092e8585610e6a565b9261095061092e8583610e6a565b905f9361095b575090565b8161097192945061096b91610e6a565b926108c5565b90565b506050610913565b51906001600160701b03821682036100ee57565b908160609103126100ee576109a48161097c565b9160406109b36020840161097c565b92015163ffffffff811681036100ee5790565b908160209103126100ee5751610971816100f2565b906103e58202918083046103e514901517156108d357565b906103e88202918083046103e814901517156108d357565b818102929181159184041417156108d357565b8115610a28570490565b634e487b7160e01b5f52601260045260245ffd5b60405190610a4b6020836104d2565b5f808352366020840137565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b909260809261097195948352602083015260018060a01b031660408201528160608201520190610a57565b604051630240bc6b60e21b81529095946001600160a01b038716949093919291606084600481895afa90811561067f575f945f92610cb1575b50604051630dfe168160e01b81526020816004818b5afa90811561067f575f91610c92575b5060405163d21220a760e01b8152906020826004818c5afa91821561067f575f92610c61575b506001600160a01b03908116919086169081831480610c4c575b15610c0f5750505050610b8b90610b85600195915b610b806001600160701b03610b7981610b71896109db565b941684610a0b565b94166109f3565b6108d8565b90610a1e565b968715610c0057610b9b9261081d565b15610bf7575f9084925b610bad610a3c565b93813b156100ee575f8094610bd86040519788968795869463022c0d9f60e01b865260048601610a7b565b03925af1801561067f57610be95750565b806106735f61069a936104d2565b83905f92610ba5565b63730c31bf60e11b5f5260045ffd5b9396936001600160a01b0316149182610c39575b505015610c0057610b8b90610b855f9591610b59565b6001600160a01b03161490505f80610c23565b506001600160a01b0384811690821614610b44565b610c8491925060203d602011610c8b575b610c7c81836104d2565b8101906109c6565b905f610b2a565b503d610c72565b610cab915060203d602011610c8b57610c7c81836104d2565b5f610b04565b909450610cd6915060603d606011610cdf575b610cce81836104d2565b810190610990565b5090935f610adf565b503d610cc4565b91908260409103126100ee576020825192015190565b6001600160a01b039182168152911515602083015260408201929092529116606082015260a06080820181905261097192910190610a57565b600160ff1b81146108d3575f0390565b835f604094939596828214610e4657610dc6610d9c610daa6401000276a4995b600180546001600160a01b0319166001600160a01b038a1617905589516001600160a01b0390911660208201529182906040820190565b03601f1981018352826104d2565b8751630251596160e31b81529889978896879560048701610cfc565b03926001600160a01b03165af191821561067f575f915f93610e13575b50600180546001600160a01b031916905515610e0c57505b5f811215610c005761097190610d35565b9050610dfb565b909250610e38915060403d604011610e3f575b610e3081836104d2565b810190610ce6565b915f610de3565b503d610e26565b610dc6610d9c610daa73fffd8963efd1fc6a506488495d951d5263988d2599610d65565b6040515f81529160149101600c830137519056fea26469706673582212206d81857c93910cfcf6acc3451a6023d9a439781f5f6fbe15a612f79a54e0469e64736f6c634300081e0033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000063971c50d58ba1c98b377e460588b3c25e8ca32b

Deployed Bytecode

0x60806040526004361015610022575b3615610018575f80fd5b6100206105cd565b005b5f3560e01c806313af4035146100915780631ee041821461008c5780636352f122146100875780638da5cb5b14610082578063ad5c46481461007d578063d9caed12146100785763fa461e330361000e57610361565b610319565b6102d5565b6102ae565b61022f565b61016d565b346100ee5760203660031901126100ee576004356100ae816100f2565b5f546001600160a01b031633036100df575f80546001600160a01b0319166001600160a01b03909216919091179055005b6330cd747160e01b5f5260045ffd5b5f80fd5b6001600160a01b038116036100ee57565b9181601f840112156100ee5782359167ffffffffffffffff83116100ee576020808501948460051b0101116100ee57565b60206040818301928281528451809452019201905f5b8181106101575750505090565b825184526020938401939092019160010161014a565b346100ee5760603660031901126100ee5760043567ffffffffffffffff81116100ee5761019e903690600401610103565b60243567ffffffffffffffff81116100ee576101be903690600401610103565b9190926044359267ffffffffffffffff84116100ee576101fd946101e96101f1953690600401610103565b949093610403565b60405191829182610134565b0390f35b9181601f840112156100ee5782359167ffffffffffffffff83116100ee57602083818601950101116100ee57565b346100ee5760603660031901126100ee5760043560243567ffffffffffffffff81116100ee57610263903690600401610201565b5f546044359392906001600160a01b031633036100df57610283926106ab565b90811061029557604051908152602090f35b6307dd37f760e41b5f5260045ffd5b5f9103126100ee57565b346100ee575f3660031901126100ee575f546040516001600160a01b039091168152602090f35b346100ee575f3660031901126100ee576040517f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168152602090f35b346100ee5760603660031901126100ee57600435610336816100f2565b602435610342816100f2565b5f5460443591906001600160a01b031633036100df576100209261081d565b346100ee5760603660031901126100ee5760243560043560443567ffffffffffffffff81116100ee57610398903690600401610201565b6001546001600160a01b031633036103f45781602091810103126100ee57356103c0816100f2565b6001600160a01b0316915f8213156103de575061002091339061081d565b90505f81136103e957005b61002091339061081d565b6364d89ec160e11b5f5260045ffd5b5f5491959094939290916001600160a01b031633036100df57851580156104b4575b6100ee578115159283806104aa575b6100ee5761044187610511565b965f5b81811061045657505050505050505090565b61047661046482848b610557565b3561047083868861056c565b916106ab565b908680610496575b6102955760019161048f828c6105ae565b5201610444565b506104a281878a610557565b35821061047e565b5086831415610434565b5082861415610425565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176104f457604052565b6104be565b67ffffffffffffffff81116104f45760051b60200190565b9061051b826104f9565b61052860405191826104d2565b8281528092610539601f19916104f9565b0190602036910137565b634e487b7160e01b5f52603260045260245ffd5b91908110156105675760051b0190565b610543565b91908110156105675760051b81013590601e19813603018212156100ee57019081359167ffffffffffffffff83116100ee5760200182360381136100ee579190565b80518210156105675760209160051b010190565b6040513d5f823e3d90fd5b341561069a577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03163381148015610687575b61068457803b156100ee575f60049160405192838092630d0e30db60e41b825234905af1801561067f57610665575b506040513481527f6ab8618a8d2bed35d6da9265bec63e1c0c1606d6af521108d34c9331722eb7ff90602090a1565b806106735f610679936104d2565b806102a4565b5f610636565b6105c2565b50565b505f546001600160a01b03163314610607565b565b908160209103126100ee575190565b90603d83106100ee575f9282906001905b8086106106cc5750505050905090565b91936106dc8385978185976108e5565b94959290809492949597610739575b6001600160a01b031615610731575b600186161561071f575060026107139516151592610d45565b945b92909493916106bc565b919261072b9550610aa6565b94610715565b3094506106fa565b6040516370a0823160e01b81523060048201529099506020816024816001600160a01b0387165afa801561067f578b915f9161078c575b501061077d575f986106eb565b631e9acf1760e31b5f5260045ffd5b6107ad915060203d81116107b3575b6107a581836104d2565b81019061069c565b5f610770565b503d61079b565b67ffffffffffffffff81116104f457601f01601f191660200190565b3d15610800573d906107e7826107ba565b916107f560405193846104d2565b82523d5f602084013e565b606090565b908160209103126100ee575180151581036100ee5790565b60405163a9059cbb60e01b602082019081526001600160a01b0390931660248201526044808201949094529283525f92839290839061085d6064826104d2565b51925af16108696107d6565b901590811561087a575b5061077d57565b805180151592508261088f575b50505f610873565b6108aa9250906020806108a6938301019101610805565b1590565b5f80610887565b634e487b7160e01b5f52601160045260245ffd5b90601482018092116108d357565b6108b1565b919082018092116108d357565b90509290919260018301928381116108d3578484116100ee578101355f1a9360048516151590603c82610974575b85018086116108d357116100ee5761093461092e8584610e6a565b946108c5565b9261094261092e8585610e6a565b9261095061092e8583610e6a565b905f9361095b575090565b8161097192945061096b91610e6a565b926108c5565b90565b506050610913565b51906001600160701b03821682036100ee57565b908160609103126100ee576109a48161097c565b9160406109b36020840161097c565b92015163ffffffff811681036100ee5790565b908160209103126100ee5751610971816100f2565b906103e58202918083046103e514901517156108d357565b906103e88202918083046103e814901517156108d357565b818102929181159184041417156108d357565b8115610a28570490565b634e487b7160e01b5f52601260045260245ffd5b60405190610a4b6020836104d2565b5f808352366020840137565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b909260809261097195948352602083015260018060a01b031660408201528160608201520190610a57565b604051630240bc6b60e21b81529095946001600160a01b038716949093919291606084600481895afa90811561067f575f945f92610cb1575b50604051630dfe168160e01b81526020816004818b5afa90811561067f575f91610c92575b5060405163d21220a760e01b8152906020826004818c5afa91821561067f575f92610c61575b506001600160a01b03908116919086169081831480610c4c575b15610c0f5750505050610b8b90610b85600195915b610b806001600160701b03610b7981610b71896109db565b941684610a0b565b94166109f3565b6108d8565b90610a1e565b968715610c0057610b9b9261081d565b15610bf7575f9084925b610bad610a3c565b93813b156100ee575f8094610bd86040519788968795869463022c0d9f60e01b865260048601610a7b565b03925af1801561067f57610be95750565b806106735f61069a936104d2565b83905f92610ba5565b63730c31bf60e11b5f5260045ffd5b9396936001600160a01b0316149182610c39575b505015610c0057610b8b90610b855f9591610b59565b6001600160a01b03161490505f80610c23565b506001600160a01b0384811690821614610b44565b610c8491925060203d602011610c8b575b610c7c81836104d2565b8101906109c6565b905f610b2a565b503d610c72565b610cab915060203d602011610c8b57610c7c81836104d2565b5f610b04565b909450610cd6915060603d606011610cdf575b610cce81836104d2565b810190610990565b5090935f610adf565b503d610cc4565b91908260409103126100ee576020825192015190565b6001600160a01b039182168152911515602083015260408201929092529116606082015260a06080820181905261097192910190610a57565b600160ff1b81146108d3575f0390565b835f604094939596828214610e4657610dc6610d9c610daa6401000276a4995b600180546001600160a01b0319166001600160a01b038a1617905589516001600160a01b0390911660208201529182906040820190565b03601f1981018352826104d2565b8751630251596160e31b81529889978896879560048701610cfc565b03926001600160a01b03165af191821561067f575f915f93610e13575b50600180546001600160a01b031916905515610e0c57505b5f811215610c005761097190610d35565b9050610dfb565b909250610e38915060403d604011610e3f575b610e3081836104d2565b810190610ce6565b915f610de3565b503d610e26565b610dc6610d9c610daa73fffd8963efd1fc6a506488495d951d5263988d2599610d65565b6040515f81529160149101600c830137519056fea26469706673582212206d81857c93910cfcf6acc3451a6023d9a439781f5f6fbe15a612f79a54e0469e64736f6c634300081e0033

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

000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000063971c50d58ba1c98b377e460588b3c25e8ca32b

-----Decoded View---------------
Arg [0] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [1] : _owner (address): 0x63971c50D58BA1C98B377e460588b3c25E8CA32b

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [1] : 00000000000000000000000063971c50d58ba1c98b377e460588b3c25e8ca32b


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.