DirectSwapLiteStateless

Description:

Smart contract deployed on Ethereum.

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

interface IERC20 { function balanceOf(address) external view returns (uint256); }
interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint256 value) external returns (bool);
}
interface IUniswapV2Pair {
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112, uint112, uint32);
    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;
}

contract DirectSwapLiteStateless {
    function quoteOut(address pair, address tokenOut, address weth, uint256 ethIn)
        external view returns (uint256 amountOut, bool pathWeth0)
    {
        (uint112 r0, uint112 r1,) = IUniswapV2Pair(pair).getReserves();
        address t0 = IUniswapV2Pair(pair).token0();
        address t1 = IUniswapV2Pair(pair).token1();

        if (t0 == weth && t1 == tokenOut) {
            pathWeth0 = true;
            uint256 inWithFee = ethIn * 997;
            amountOut = (inWithFee * uint256(r1)) / (uint256(r0) * 1000 + inWithFee);
        } else if (t1 == weth && t0 == tokenOut) {
            pathWeth0 = false;
            uint256 inWithFee = ethIn * 997;
            amountOut = (inWithFee * uint256(r0)) / (uint256(r1) * 1000 + inWithFee);
        } else {
            revert("BAD_PAIR_TOKENS");
        }
    }

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address tokenOut,
        address to,
        address weth,
        address pair
    ) external payable {
        uint256 ethIn = msg.value;
        require(ethIn > 0, "NO_ETH");

        IWETH(weth).deposit{value: ethIn}();
        require(IWETH(weth).transfer(pair, ethIn), "WETH_TRANSFER_FAILED");

        (uint112 r0, uint112 r1,) = IUniswapV2Pair(pair).getReserves();
        address t0 = IUniswapV2Pair(pair).token0();
        address t1 = IUniswapV2Pair(pair).token1();

        uint256 amountOut;
        if (t0 == weth && t1 == tokenOut) {
            uint256 inWithFee = ethIn * 997;
            amountOut = (inWithFee * uint256(r1)) / (uint256(r0) * 1000 + inWithFee);
            require(amountOut > 0, "ZERO_OUT");
            IUniswapV2Pair(pair).swap(0, amountOut, to, "");
        } else if (t1 == weth && t0 == tokenOut) {
            uint256 inWithFee = ethIn * 997;
            amountOut = (inWithFee * uint256(r0)) / (uint256(r1) * 1000 + inWithFee);
            require(amountOut > 0, "ZERO_OUT");
            IUniswapV2Pair(pair).swap(amountOut, 0, to, "");
        } else {
            revert("BAD_PAIR_TOKENS");
        }

        require(amountOut >= amountOutMin, "SLIPPAGE");
    }

    receive() external payable {}
}

Tags:
addr:0x44524b642a52bfab668906a363202dfa547e995e|verified:true|block:23471830|tx:0xdd63624e497e8ad1c8fe7a60566d46dadd7dd3a76d5be4857bef986edf76dfbb|first_check:1759221033

Submitted on: 2025-09-30 10:30:33

Comments

Log in to comment.

No comments yet.