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 IV4Quoter {
struct PoolKey {
address currency0;
address currency1;
uint24 fee;
int24 tickSpacing;
address hooks;
}
struct QuoteExactSingleParams {
PoolKey poolKey;
bool zeroForOne;
uint128 exactAmount;
bytes hookData;
}
function quoteExactInputSingle(QuoteExactSingleParams memory params)
external
returns (uint256 amountOut, uint256 gasEstimate);
}
interface IV3Quoter {
function quoteExactInputSingle(
address tokenIn,
address tokenOut,
uint24 fee,
uint256 amountIn,
uint160 sqrtPriceLimitX96
) external returns (uint256 amountOut);
}
contract UniQuoteChecker {
address public constant TOKEN_SELL = 0x94314a14Df63779c99C0764a30e0CD22fA78fC0E; // 代币
address public constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
address public constant USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
address public constant ETH = 0x0000000000000000000000000000000000000000;
address public constant V4_QUOTER = 0x52F0E24D1c21C8A0cB1e5a5dD6198556BD9E1203;
address public constant V3_QUOTER = 0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6;
// address public owner;
constructor() {
// owner = msg.sender;
}
/// @notice 接收 sellAmount (token数量) 和 usdtBaseline (基准值),并附带 ETH 一起调用
function checkAndPay(uint128 sellAmount, uint256 usdtBaseline) external payable {
// 1. V4 查询 token -> ETH
IV4Quoter.QuoteExactSingleParams memory params = IV4Quoter.QuoteExactSingleParams({
poolKey: IV4Quoter.PoolKey({
currency0: ETH,
currency1: TOKEN_SELL,
fee: 3000, // 0.3% 假设
tickSpacing: 60,
hooks: address(0)
}),
zeroForOne: false, // token -> ETH
exactAmount: sellAmount,
hookData: ""
});
(uint256 ethAmount, ) = IV4Quoter(V4_QUOTER).quoteExactInputSingle(params);
// 2. V3 查询 ETH -> USDT
uint256 usdtOut = IV3Quoter(V3_QUOTER).quoteExactInputSingle(
WETH,
USDT,
100, // 0.01%
ethAmount,
0
);
// 3. 判断差值,如果大于 30 USDT (USDT是6位小数),把接收的 ETH 全部打给 builder
if (usdtOut > usdtBaseline + 30 * 1e6) {
payable(block.coinbase).transfer(msg.value);
}
}
}
Submitted on: 2025-09-25 11:22:01
Comments
Log in to comment.
No comments yet.