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": {
"evmVersion": "shanghai",
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": [],
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}
}}
Submitted on: 2025-11-05 12:35:57
Comments
Log in to comment.
No comments yet.