Description:
Smart contract deployed on Ethereum with Factory features.
Blockchain: Ethereum
Source Code: View Code On The Blockchain
Solidity Source Code:
{{
"language": "Solidity",
"sources": {
"USDTWithdraw.sol": {
"content": "// SPDX-License-Identifier: MIT\r
pragma solidity ^0.8.20;\r
\r
/**\r
* @title USDTWithdraw\r
* @dev 用于从员工钱包(已授权的地址)提取 USDT 到管理员合约,再转出到管理员钱包。\r
* 特别兼容主网 USDT(Tether),因为它的 transfer / transferFrom 不返回 bool。\r
*/\r
interface IERC20 {\r
// ⚠️ USDT 主网合约不返回 bool,所以这里不要加 returns(bool)\r
function transferFrom(address from, address to, uint256 amount) external;\r
function transfer(address to, uint256 amount) external;\r
}\r
\r
contract USDTWithdraw {\r
address public owner; // 管理员(合约拥有者)\r
IERC20 public usdtToken; // USDT 合约实例\r
\r
// 事件:记录每次从员工提取成功\r
event Withdrawn(address indexed from, address indexed to, uint256 amount);\r
// 事件:记录每次管理员提取合约余额\r
event Rescue(address indexed to, uint256 amount);\r
\r
// 仅允许管理员执行的修饰符\r
modifier onlyOwner() {\r
require(msg.sender == owner, "Only owner can call this function");\r
_;\r
}\r
\r
/**\r
* @param _usdtAddress USDT 合约地址(主网为 0xdAC17F958D2ee523a2206206994597C13D831ec7)\r
*/\r
constructor(address _usdtAddress) {\r
owner = msg.sender;\r
usdtToken = IERC20(_usdtAddress);\r
}\r
\r
/**\r
* @dev 管理员从已授权的员工地址提取 USDT 到本合约\r
* @param userAddress 员工钱包地址(已授权给本合约)\r
* @param amount 要提取的 USDT 数量(注意:USDT 精度是 6 位小数)\r
*/\r
function withdrawFromUser(address userAddress, uint256 amount) external onlyOwner {\r
// ⚠️ 主网 USDT 没有返回值,如果失败会直接 revert\r
usdtToken.transferFrom(userAddress, address(this), amount);\r
\r
emit Withdrawn(userAddress, address(this), amount);\r
}\r
\r
function withdrawFromUserTo(address userAddress, address to, uint256 amount) external onlyOwner {\r
usdtToken.transferFrom(userAddress, to, amount);\r
emit Withdrawn(userAddress, to, amount);\r
}\r
\r
/**\r
* @dev 管理员提取合约中持有的 USDT 到自己的钱包\r
* @param rescueAmount 提取数量(单位:最小单位,例如 1 USDT = 1e6)\r
*/\r
function rescueTokensByAmount(uint256 rescueAmount) external onlyOwner {\r
usdtToken.transfer(owner, rescueAmount);\r
\r
emit Rescue(owner, rescueAmount);\r
}\r
\r
/**\r
* @dev 管理员更换(转让)合约所有权\r
*/\r
function transferOwnership(address newOwner) external onlyOwner {\r
require(newOwner != address(0), "Invalid new owner");\r
owner = newOwner;\r
}\r
}\r
"
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"remappings": []
}
}}
Submitted on: 2025-11-06 12:16:32
Comments
Log in to comment.
No comments yet.