pragma solidity ^0.8.0; interface IERC20 { function transfer(address to, uint256 amount) external returns (bool); function transferFrom(address from, address to, uint256 amount) external returns (bool); } contract SimpleSwap { address public owner; IERC20 public token; uint256 public rate; constructor(address _tokenAddress, uint256 _rate) { owner = msg.sender; token = IERC20(_tokenAddress); rate = _rate; } receive() external payable { uint256 tokenAmount = msg.value * rate; require(token.transfer(msg.sender, tokenAmount), "Token transfer failed"); } function swapTokenForETH(uint256 tokenAmount) external { uint256 ethAmount = tokenAmount / rate; require(address(this).balance >= ethAmount, "Not enough ETH in contract"); require(token.transferFrom(msg.sender, address(this), tokenAmount), "Token transfer failed"); (bool success, ) = msg.sender.call{value: ethAmount}(""); require(success, "ETH transfer failed"); } function withdrawETH() external { require(msg.sender == owner, "Not owner"); payable(owner).transfer(address(this).balance); } function withdrawTokens() external { require(msg.sender == owner, "Not owner"); uint256 balance = tokenBalance(); require(token.transfer(owner, balance), "Token withdrawal failed"); } function tokenBalance() public view returns (uint256) { return token.balanceOf(address(this)); } }

