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 {}
}
Submitted on: 2025-09-30 10:30:33
Comments
Log in to comment.
No comments yet.