FlashArbitrage

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"
  }
}}

Tags:
DeFi, Swap, Factory|addr:0xee2f7b85cf4ddb09f91bf90ab175441276d7a7a9|verified:true|block:23699638|tx:0x48cab7ae6576e3e07147f5b69829adfe8cf778a8c8625101eb5203506130b48a|first_check:1761988524

Submitted on: 2025-11-01 10:15:25

Comments

Log in to comment.

No comments yet.