FlashLoanExample

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": {
    "contracts/Flash Loan Chat GPT.sol": {
      "content": "// SPDX-License-Identifier: MIT\r
pragma solidity ^0.8.20;\r
\r
/*\r
 * Minimal educational flash-loan template\r
 * (structure only – not profitable or production-ready)\r
 */\r
\r
interface IERC20 {\r
    function balanceOf(address) external view returns (uint256);\r
    function allowance(address, address) external view returns (uint256);\r
    function approve(address, uint256) external returns (bool);\r
}\r
\r
interface IAavePool {\r
    function flashLoanSimple(\r
        address receiver,\r
        address asset,\r
        uint256 amount,\r
        bytes calldata params,\r
        uint16 referralCode\r
    ) external;\r
}\r
\r
interface IFlashLoanSimpleReceiver {\r
    function executeOperation(\r
        address asset,\r
        uint256 amount,\r
        uint256 premium,\r
        address initiator,\r
        bytes calldata params\r
    ) external returns (bool);\r
}\r
\r
interface IUniswapV2Router {\r
    function swapExactTokensForTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);\r
}\r
\r
interface IUniswapV3Router {\r
    struct ExactInputSingleParams {\r
        address tokenIn;\r
        address tokenOut;\r
        uint24 fee;\r
        address recipient;\r
        uint deadline;\r
        uint amountIn;\r
        uint amountOutMinimum;\r
        uint160 sqrtPriceLimitX96;\r
    }\r
    function exactInputSingle(ExactInputSingleParams calldata params) external payable returns (uint amountOut);\r
}\r
\r
contract FlashLoanExample is IFlashLoanSimpleReceiver {\r
    address public immutable owner;\r
    IAavePool public immutable pool;\r
    IERC20 public immutable token;\r
\r
    address constant SUSHI_ROUTER = 0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F;\r
    address constant UNI_V3_ROUTER = 0xE592427A0AEce92De3Edee1F18E0157C05861564;\r
    address constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;\r
    address constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;\r
\r
    modifier onlyOwner() {\r
        require(msg.sender == owner, "not owner");\r
        _;\r
    }\r
\r
    constructor(address _pool, address _token) {\r
        owner = msg.sender;\r
        pool = IAavePool(_pool);\r
        token = IERC20(_token);\r
    }\r
\r
    function initiate(uint256 amount) external onlyOwner {\r
        bytes memory params = ""; // no parameters\r
        pool.flashLoanSimple(address(this), address(token), amount, params, 0);\r
    }\r
\r
    function executeOperation(\r
        address asset,\r
        uint256 amount,\r
        uint256 premium,\r
        address initiator,\r
        bytes calldata /*params*/\r
    ) external override returns (bool) {\r
        require(msg.sender == address(pool), "bad caller");\r
        require(initiator == address(this), "bad initiator");\r
        require(asset == address(token), "asset mismatch");\r
\r
        uint deadline = block.timestamp + 300;\r
        uint256 totalOwed = amount + premium;\r
\r
        token.approve(UNI_V3_ROUTER, amount); // approve WETH to Uni V3\r
\r
        IUniswapV3Router.ExactInputSingleParams memory paramsUni = IUniswapV3Router.ExactInputSingleParams({\r
            tokenIn: WETH,\r
            tokenOut: USDC,\r
            fee: 500, // 0.05%\r
            recipient: address(this),\r
            deadline: deadline,\r
            amountIn: amount,\r
            amountOutMinimum: 0,\r
            sqrtPriceLimitX96: 0\r
        });\r
        IUniswapV3Router(UNI_V3_ROUTER).exactInputSingle(paramsUni); // swap WETH to USDC on Uni V3 (buy low)\r
\r
        uint usdcAmount = IERC20(USDC).balanceOf(address(this));\r
\r
        IERC20(USDC).approve(SUSHI_ROUTER, usdcAmount); // approve USDC to Sushi\r
\r
        address[] memory path = new address[](2);\r
        path[0] = USDC;\r
        path[1] = WETH;\r
        IUniswapV2Router(SUSHI_ROUTER).swapExactTokensForTokens(usdcAmount, totalOwed, path, address(this), deadline); // swap USDC to WETH on Sushi (sell high)\r
\r
        // repay the loan + fee\r
        token.approve(address(pool), totalOwed);\r
        return true;\r
    }\r
}"
    }
  },
  "settings": {
    "optimizer": {
      "enabled": false,
      "runs": 200
    },
    "outputSelection": {
      "*": {
        "*": [
          "evm.bytecode",
          "evm.deployedBytecode",
          "devdoc",
          "userdoc",
          "metadata",
          "abi"
        ]
      }
    },
    "remappings": []
  }
}}

Tags:
DeFi, Swap, Factory|addr:0xf20319ad32ff612114d97f8bc4ad7a5c9340cfcd|verified:true|block:23730856|tx:0xdcca8349298f2415edb86d63c4a74ead1451470f961d7b488a7b821fe52a5253|first_check:1762343500

Submitted on: 2025-11-05 12:51:41

Comments

Log in to comment.

No comments yet.