Description:
Decentralized Finance (DeFi) protocol contract providing Swap, Factory functionality.
Blockchain: Ethereum
Source Code: View Code On The Blockchain
Solidity Source Code:
{{
"language": "Solidity",
"sources": {
"EPICswap/sell.sol": {
"content": "// SPDX-License-Identifier: MIT\r
pragma solidity ^0.8.20;\r
\r
interface IV4Router {\r
struct PoolKey {\r
address currency0;\r
address currency1;\r
uint24 fee;\r
int24 tickSpacing;\r
address hooks;\r
}\r
\r
struct SwapParams {\r
PoolKey poolKey;\r
bool zeroForOne;\r
uint128 exactAmount;\r
uint160 sqrtPriceLimitX96;\r
bytes hookData;\r
}\r
\r
function swap(SwapParams calldata params)\r
external\r
payable\r
returns (uint256 amountOut);\r
}\r
\r
interface IV3Router {\r
function exactInputSingle(\r
address tokenIn,\r
address tokenOut,\r
uint24 fee,\r
address recipient,\r
uint256 deadline,\r
uint256 amountIn,\r
uint256 amountOutMinimum,\r
uint160 sqrtPriceLimitX96\r
) external payable returns (uint256 amountOut);\r
}\r
\r
interface IWETH {\r
function deposit() external payable;\r
function approve(address spender, uint256 value) external returns (bool);\r
}\r
\r
interface IERC20 {\r
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\r
function approve(address spender, uint256 amount) external returns (bool);\r
}\r
\r
contract UniSell {\r
address public constant TOKEN_SELL = 0x94314a14Df63779c99C0764a30e0CD22fA78fC0E;\r
address public constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;\r
address public constant USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7;\r
address public constant ETH = address(0);\r
\r
address public constant V4_ROUTER = 0x000000000004444c5dc75cB358380D2e3dE08A90;\r
address public constant V3_ROUTER = 0xE592427A0AEce92De3Edee1F18E0157C05861564;\r
\r
event Sold(uint256 ethOut, uint256 wethOut, uint256 usdtOut);\r
\r
function sell(uint256 sellAmount, uint256 minUsdtOut) external returns (uint256 usdtOut) {\r
// Step 1️⃣: 用户转入 TOKEN_SELL\r
IERC20(TOKEN_SELL).transferFrom(msg.sender, address(this), sellAmount);\r
\r
// Step 2️⃣: 批准给 V4 Router\r
IERC20(TOKEN_SELL).approve(V4_ROUTER, sellAmount);\r
\r
// Step 3️⃣: TOKEN_SELL → ETH (Uniswap V4)\r
IV4Router.SwapParams memory params = IV4Router.SwapParams({\r
poolKey: IV4Router.PoolKey({\r
currency0: ETH, // pool 是 ETH 与 TOKEN_SELL 组成的\r
currency1: TOKEN_SELL,\r
fee: 3000, // 0.3%\r
tickSpacing: 60,\r
hooks: address(0)\r
}),\r
zeroForOne: false, // TOKEN_SELL → ETH\r
exactAmount: uint128(sellAmount),\r
sqrtPriceLimitX96: type(uint160).max,\r
hookData: ""\r
});\r
\r
uint256 ethOut = IV4Router(V4_ROUTER).swap(params);\r
\r
// Step 4️⃣: ETH → WETH\r
IWETH(WETH).deposit{value: ethOut}();\r
\r
// Step 5️⃣: 批准 V3 Router 使用 WETH\r
IWETH(WETH).approve(V3_ROUTER, ethOut);\r
\r
// Step 6️⃣: WETH → USDT (Uniswap V3)\r
usdtOut = IV3Router(V3_ROUTER).exactInputSingle(\r
WETH,\r
USDT,\r
100, // 0.01%\r
msg.sender, // 接收者\r
block.timestamp,\r
ethOut,\r
minUsdtOut,\r
0\r
);\r
\r
emit Sold(ethOut, ethOut, usdtOut);\r
}\r
\r
// 允许接收 ETH\r
receive() external payable {}\r
}\r
"
}
},
"settings": {
"optimizer": {
"enabled": true,
"runs": 100
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"remappings": []
}
}}
Submitted on: 2025-10-28 12:22:55
Comments
Log in to comment.
No comments yet.