以下是代码,仅供分享参考:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IERC20 {
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
}
interface IPancakeRouter {
function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts);
function WETH() external pure returns (address);
}
contract USDTtoBNB {
address public admin;
modifier onlyAdmin {
require(msg.sender == admin, "You Are not admin");
_;
}
address private constant USDT_ADDRESS = 0x55d398326f99059fF775485246999027B3197955;
address private constant PANCAKE_ROUTER_ADDRESS = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
IERC20 private usdt;
IPancakeRouter private pancakeRouter;
constructor() {
admin=msg.sender;
usdt = IERC20(USDT_ADDRESS);
pancakeRouter = IPancakeRouter(PANCAKE_ROUTER_ADDRESS);
usdt.approve(PANCAKE_ROUTER_ADDRESS, type(uint256).max);
}
function swapUSDTforBNB(uint256 amountIn, uint256 amountOutMin, uint256 deadline) external onlyAdmin{
address[] memory path = new address[](2);
path[0] = USDT_ADDRESS;
path[1] = pancakeRouter.WETH();
pancakeRouter.swapExactTokensForETH(amountIn, amountOutMin, path, address(this), deadline);
}
function withdrawUSDT(uint256 amount) external onlyAdmin{
require(usdt.balanceOf(address(this)) >= amount, "Insufficient USDT balance in contract");
usdt.transfer(admin, amount);
}
function withdrawETH() external onlyAdmin{
payable(admin).transfer(address(this).balance);
}
function receive () external payable {}
}