USDTWithdraw

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
    /**\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": []
  }
}}

Tags:
Factory|addr:0x514db11db9e7ecb679f7fdde4b7e852099bd6295|verified:true|block:23738581|tx:0x6496a6f18145090bb13688786308307420b9b57c232df341e1826a52f3492d4b|first_check:1762427300

Submitted on: 2025-11-06 12:08:20

Comments

Log in to comment.

No comments yet.