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": {
"FlashArbitrage.sol": {
"content": "// SPDX-License-Identifier: MIT\r
pragma solidity ^0.8.20;\r
\r
interface IPool {\r
function flashLoanSimple(\r
address receiverAddress,\r
address asset,\r
uint256 amount,\r
bytes calldata params,\r
uint16 referralCode\r
) external;\r
}\r
\r
interface IUniswapV2Router02 {\r
function swapExactTokensForTokens(\r
uint amountIn,\r
uint amountOutMin,\r
address[] calldata path,\r
address to,\r
uint deadline\r
) external returns (uint[] memory amounts);\r
}\r
\r
interface IERC20 {\r
function approve(address spender, uint256 amount) external returns (bool);\r
function transfer(address to, uint256 amount) external returns (bool);\r
function balanceOf(address account) external view returns (uint256);\r
}\r
\r
contract FlashArbitrage {\r
address public immutable owner;\r
address public immutable pool;\r
IUniswapV2Router02 public immutable uniswap;\r
IERC20 public immutable usdc;\r
\r
event SwapExecuted(bool isBuy, uint256 amountIn, uint256 amountOut);\r
\r
constructor() {\r
owner = msg.sender;\r
pool = 0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2; // Aave V3 Pool\r
uniswap = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Uniswap V2\r
usdc = IERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);\r
}\r
\r
function executeFlashLoan(uint256 amountIn, bool isBuy) external {\r
require(msg.sender == owner, "Not owner");\r
bytes memory params = abi.encode(amountIn, isBuy);\r
IPool(pool).flashLoanSimple(address(this), address(usdc), amountIn, params, 0);\r
}\r
\r
function executeOperation(\r
address,\r
uint256 amount,\r
uint256 premium,\r
address initiator,\r
bytes calldata params\r
) external returns (bool) {\r
require(msg.sender == pool, "Not pool");\r
require(initiator == address(this), "Invalid initiator");\r
\r
(uint256 amtIn, bool isBuy) = abi.decode(params, (uint256, bool));\r
\r
usdc.approve(address(uniswap), amtIn);\r
\r
address[] memory path = new address[](2);\r
if (isBuy) {\r
path[0] = address(usdc);\r
path[1] = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;\r
} else {\r
path[0] = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;\r
path[1] = address(usdc);\r
}\r
\r
uint256[] memory amountsOut = uniswap.swapExactTokensForTokens(\r
amtIn, 0, path, address(this), block.timestamp + 300\r
);\r
\r
emit SwapExecuted(isBuy, amtIn, amountsOut[1]);\r
\r
uint256 totalDebt = amount + premium;\r
usdc.approve(pool, totalDebt);\r
\r
return true;\r
}\r
\r
function withdraw() external {\r
require(msg.sender == owner, "Not owner");\r
usdc.transfer(owner, usdc.balanceOf(address(this)));\r
}\r
}"
}
},
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"remappings": [],
"evmVersion": "paris"
}
}}
Submitted on: 2025-11-01 10:15:25
Comments
Log in to comment.
No comments yet.