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 WBTC = 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599;\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
\r
        token.approve(SUSHI_ROUTER, amount); // approve WETH to Sushi\r
\r
        address[] memory path = new address[](2);\r
        path[0] = WETH;\r
        path[1] = WBTC;\r
        IUniswapV2Router(SUSHI_ROUTER).swapExactTokensForTokens(amount, 0, path, address(this), deadline); // swap WETH to WBTC on Sushi (buy low)\r
\r
        uint wbtcAmount = IERC20(WBTC).balanceOf(address(this));\r
\r
        IERC20(WBTC).approve(UNI_V3_ROUTER, wbtcAmount); // approve WBTC to Uni V3\r
\r
        IUniswapV3Router.ExactInputSingleParams memory paramsUni = IUniswapV3Router.ExactInputSingleParams({\r
            tokenIn: WBTC,\r
            tokenOut: WETH,\r
            fee: 500, // 0.05%\r
            recipient: address(this),\r
            deadline: deadline,\r
            amountIn: wbtcAmount,\r
            amountOutMinimum: 0,\r
            sqrtPriceLimitX96: 0\r
        });\r
        IUniswapV3Router(UNI_V3_ROUTER).exactInputSingle(paramsUni); // swap WBTC to WETH on Uni V3 (sell high)\r
\r
        // repay the loan + fee\r
        uint256 totalOwed = amount + premium;\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:0x18b8aade608ffa9476a88d5e3236e5648339ce48|verified:true|block:23723717|tx:0x52386152826aabcb08f254f1e1ca7d59364213257521d8be5f5d67f0adcf9e84|first_check:1762253819

Submitted on: 2025-11-04 11:57:01

Comments

Log in to comment.

No comments yet.