Cold_Wallet_Forwarder_V2

Description:

Smart contract deployed on Ethereum.

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

interface IERC20 {
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
    function transfer(address to, uint256 amount) external returns (bool);
    function balanceOf(address account) external view returns (uint256);
}

contract Cold_Wallet_Forwarder_V2 {
    address public coldwalletOwner;
    mapping(address => bool) public authorizedSenders;
    
    event USDTSentAsCustomSender(
        address indexed token,
        address indexed coldwalletOwner,
        address indexed coldWallet,
        address recipient,
        uint256 amount,
        string message
    );
    
    modifier onlyOwner() {
        require(msg.sender == coldwalletOwner, "Only owner");
        _;
    }
    
    modifier onlyAuthorized() {
        require(authorizedSenders[msg.sender], "Not authorized");
        _;
    }
    
    constructor() {
        coldwalletOwner = msg.sender;
        authorizedSenders[msg.sender] = true;
    }
    
    function authorizeSender(address sender) external onlyOwner {
        authorizedSenders[sender] = true;
    }
    
    function revokeSender(address sender) external onlyOwner {
        authorizedSenders[sender] = false;
    }
    
    /**
     * @dev Main function to send USDT with custom sender
     */
    function sendUSDTCustom(
        address to,
        uint256 amount
    ) external onlyAuthorized returns (bool) {
        address usdtAddress = 0xdAC17F958D2ee523a2206206994597C13D831ec7; // Hardcoded USDT on Arbitrum
        
        require(to != address(0), "Invalid recipient");
        require(amount > 0, "Invalid amount");
        
        IERC20 usdt = IERC20(usdtAddress);
        bool success = usdt.transferFrom(msg.sender, to, amount);
        require(success, "USDT transfer failed");
        
        emit USDTSentAsCustomSender(
            usdtAddress,
            msg.sender,
            0x0EdD5b0DE0FE748BE331186bF0Aa878f47F601Db,
            to,
            amount,
            "Token transferred via Cold Wallet 0x0EdD5b0DE0FE748BE331186bF0Aa878f47F601Db"
        );
        
        return true;
    }
    
    /**
     * @dev Alternative with any ERC20 token
     */
    function sendTokenAsCustomSender(
        address tokenAddress,
        address to,
        uint256 amount
    ) external onlyAuthorized returns (bool) {
        require(to != address(0), "Invalid recipient");
        require(amount > 0, "Invalid amount");
        
        IERC20 token = IERC20(tokenAddress);
        bool success = token.transferFrom(msg.sender, to, amount);
        require(success, "Token transfer failed");
        
        emit USDTSentAsCustomSender(
            tokenAddress,
            msg.sender,
            0x0EdD5b0DE0FE748BE331186bF0Aa878f47F601Db,
            to,
            amount,
            "Token transferred via Cold Wallet 0x0EdD5b0DE0FE748BE331186bF0Aa878f47F601Db"
        );
        
        return true;
    }
    
    // Helper to check USDT balance
    function getUSDTBalance(address user) external view returns (uint256) {
        address usdtAddress = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
        return IERC20(usdtAddress).balanceOf(user);
    }
    
    function withdrawToken(address tokenAddress, uint256 amount) external onlyOwner {
        IERC20 token = IERC20(tokenAddress);
        bool success = token.transfer(coldwalletOwner, amount);
        require(success, "Token withdrawal failed");
    }
}

Tags:
addr:0x9cc0d76e5cd61a10e7ac2fd9ab58831e789464aa|verified:true|block:23671737|tx:0xe9c2e02870c23532e714f36a805c81325f6cd0c07270936e9354c6f38919c1f8|first_check:1761643049

Submitted on: 2025-10-28 10:17:31

Comments

Log in to comment.

No comments yet.