ETH Price: $2,539.07 (+1.73%)

Transaction Decoder

Block:
17825808 at Aug-02-2023 07:25:23 AM +UTC
Transaction Fee:
0.002449425511091844 ETH $6.22
Gas Used:
185,226 Gas / 13.223983194 Gwei

Emitted Events:

363 MetropolyToken.Transfer( from=[Receiver] 0xd8444ef1a23a6811994fc557921949e3327967ce, to=[Sender] 0x49643f0a93550ccfd031ecd8193414bef41becac, value=600038400000000000000 )
364 0xd1988bea35478229ebee68331714b215e3529510.0xc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62( 0xc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62, 0x000000000000000000000000d8444ef1a23a6811994fc557921949e3327967ce, 0x000000000000000000000000d8444ef1a23a6811994fc557921949e3327967ce, 0x00000000000000000000000049643f0a93550ccfd031ecd8193414bef41becac, 0000000000000000000000000000000000000000000000000000000000000001, 0000000000000000000000000000000000000000000000000000000000000001 )
365 0xd8444ef1a23a6811994fc557921949e3327967ce.0x4e745e036dca0ed1c20fb17deda6530bb4739fa43fbeb8e13854f01388c67cc9( 0x4e745e036dca0ed1c20fb17deda6530bb4739fa43fbeb8e13854f01388c67cc9, 0x00000000000000000000000049643f0a93550ccfd031ecd8193414bef41becac, 0000000000000000000000000000000000000000000000208734a1a909c00000, 0000000000000000000000000000000000000000000000208734a1a909c00000, 00000000000000000000000000000000000000000000000000000000000003e8 )

Account State Difference:

  Address   Before After State Difference Code
2.031164308085958187 Eth2.031182830685958187 Eth0.0000185226
0x49643F0a...EF41BECaC
0.014250719876637789 Eth
Nonce: 31
0.011801294365545945 Eth
Nonce: 32
0.002449425511091844
0xD1988bEA...5E3529510
0xD77401A7...7615509E7
0xD8444eF1...3327967CE

Execution Trace

0xd8444ef1a23a6811994fc557921949e3327967ce.CALL( )
  • MetropolyToken.transfer( to=0x49643F0a93550ccfD031eCd8193414bEF41BECaC, amount=600038400000000000000 ) => ( True )
  • 0xd1988bea35478229ebee68331714b215e3529510.f242432a( )
    // SPDX-License-Identifier: MIT
    
    // ███╗░░░███╗███████╗████████╗██████╗░░█████╗░██████╗░░█████╗░██╗░░░░░██╗░░░██╗
    // ████╗░████║██╔════╝╚══██╔══╝██╔══██╗██╔══██╗██╔══██╗██╔══██╗██║░░░░░╚██╗░██╔╝
    // ██╔████╔██║█████╗░░░░░██║░░░██████╔╝██║░░██║██████╔╝██║░░██║██║░░░░░░╚████╔╝░
    // ██║╚██╔╝██║██╔══╝░░░░░██║░░░██╔══██╗██║░░██║██╔═══╝░██║░░██║██║░░░░░░░╚██╔╝░░
    // ██║░╚═╝░██║███████╗░░░██║░░░██║░░██║╚█████╔╝██║░░░░░╚█████╔╝███████╗░░░██║░░░
    // ╚═╝░░░░░╚═╝╚══════╝░░░╚═╝░░░╚═╝░░╚═╝░╚════╝░╚═╝░░░░░░╚════╝░╚══════╝░░░╚═╝░░░
    
    pragma solidity ^0.8.17;
    
    abstract contract Context {
        function _msgSender() internal view virtual returns (address) {
            return msg.sender;
        }
    
        function _msgData() internal view virtual returns (bytes calldata) {
            return msg.data;
        }
    }
    
    abstract contract Ownable is Context {
        address private _owner;
    
        event OwnershipTransferred(
            address indexed previousOwner,
            address indexed newOwner
        );
    
        constructor() {
            _transferOwnership(_msgSender());
        }
    
        modifier onlyOwner() {
            _checkOwner();
            _;
        }
    
        function owner() public view virtual returns (address) {
            return _owner;
        }
    
        function _checkOwner() internal view virtual {
            require(owner() == _msgSender(), "Ownable: caller is not the owner");
        }
    
        function renounceOwnership() public virtual onlyOwner {
            _transferOwnership(address(0));
        }
    
        function transferOwnership(address newOwner) public virtual onlyOwner {
            require(
                newOwner != address(0),
                "Ownable: new owner is the zero address"
            );
            _transferOwnership(newOwner);
        }
    
        function _transferOwnership(address newOwner) internal virtual {
            address oldOwner = _owner;
            _owner = newOwner;
            emit OwnershipTransferred(oldOwner, newOwner);
        }
    }
    
    interface IERC20 {
        event Transfer(address indexed from, address indexed to, uint256 value);
        event Approval(
            address indexed owner,
            address indexed spender,
            uint256 value
        );
    
        function totalSupply() external view returns (uint256);
    
        function balanceOf(address account) external view returns (uint256);
    
        function transfer(address to, uint256 amount) external returns (bool);
    
        function allowance(address owner, address spender)
            external
            view
            returns (uint256);
    
        function approve(address spender, uint256 amount) external returns (bool);
    
        function transferFrom(
            address from,
            address to,
            uint256 amount
        ) external returns (bool);
    }
    
    interface IERC20Metadata is IERC20 {
        function name() external view returns (string memory);
    
        function symbol() external view returns (string memory);
    
        function decimals() external view returns (uint8);
    }
    
    contract ERC20 is Context, IERC20, IERC20Metadata {
        mapping(address => uint256) private _balances;
    
        mapping(address => mapping(address => uint256)) private _allowances;
    
        uint256 private _totalSupply;
    
        string private _name;
        string private _symbol;
    
        constructor(string memory name_, string memory symbol_) {
            _name = name_;
            _symbol = symbol_;
        }
    
        function name() public view virtual override returns (string memory) {
            return _name;
        }
    
        function symbol() public view virtual override returns (string memory) {
            return _symbol;
        }
    
        function decimals() public view virtual override returns (uint8) {
            return 18;
        }
    
        function totalSupply() public view virtual override returns (uint256) {
            return _totalSupply;
        }
    
        function balanceOf(address account)
            public
            view
            virtual
            override
            returns (uint256)
        {
            return _balances[account];
        }
    
        function transfer(address to, uint256 amount)
            public
            virtual
            override
            returns (bool)
        {
            address owner = _msgSender();
            _transfer(owner, to, amount);
            return true;
        }
    
        function allowance(address owner, address spender)
            public
            view
            virtual
            override
            returns (uint256)
        {
            return _allowances[owner][spender];
        }
    
        function approve(address spender, uint256 amount)
            public
            virtual
            override
            returns (bool)
        {
            address owner = _msgSender();
            _approve(owner, spender, amount);
            return true;
        }
    
        function transferFrom(
            address from,
            address to,
            uint256 amount
        ) public virtual override returns (bool) {
            address spender = _msgSender();
            _spendAllowance(from, spender, amount);
            _transfer(from, to, amount);
            return true;
        }
    
        function increaseAllowance(address spender, uint256 addedValue)
            public
            virtual
            returns (bool)
        {
            address owner = _msgSender();
            _approve(owner, spender, allowance(owner, spender) + addedValue);
            return true;
        }
    
        function decreaseAllowance(address spender, uint256 subtractedValue)
            public
            virtual
            returns (bool)
        {
            address owner = _msgSender();
            uint256 currentAllowance = allowance(owner, spender);
            require(
                currentAllowance >= subtractedValue,
                "ERC20: decreased allowance below zero"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - subtractedValue);
            }
    
            return true;
        }
    
        function _transfer(
            address from,
            address to,
            uint256 amount
        ) internal virtual {
            require(from != address(0), "ERC20: transfer from the zero address");
            require(to != address(0), "ERC20: transfer to the zero address");
    
            _beforeTokenTransfer(from, to, amount);
    
            uint256 fromBalance = _balances[from];
            require(
                fromBalance >= amount,
                "ERC20: transfer amount exceeds balance"
            );
            unchecked {
                _balances[from] = fromBalance - amount;
            }
            _balances[to] += amount;
    
            emit Transfer(from, to, amount);
    
            _afterTokenTransfer(from, to, amount);
        }
    
        function _mint(address account, uint256 amount) internal virtual {
            require(account != address(0), "ERC20: mint to the zero address");
    
            _beforeTokenTransfer(address(0), account, amount);
    
            _totalSupply += amount;
            _balances[account] += amount;
            emit Transfer(address(0), account, amount);
    
            _afterTokenTransfer(address(0), account, amount);
        }
    
        function _approve(
            address owner,
            address spender,
            uint256 amount
        ) internal virtual {
            require(owner != address(0), "ERC20: approve from the zero address");
            require(spender != address(0), "ERC20: approve to the zero address");
    
            _allowances[owner][spender] = amount;
            emit Approval(owner, spender, amount);
        }
    
        function _spendAllowance(
            address owner,
            address spender,
            uint256 amount
        ) internal virtual {
            uint256 currentAllowance = allowance(owner, spender);
            if (currentAllowance != type(uint256).max) {
                require(
                    currentAllowance >= amount,
                    "ERC20: insufficient allowance"
                );
                unchecked {
                    _approve(owner, spender, currentAllowance - amount);
                }
            }
        }
    
        function _beforeTokenTransfer(
            address from,
            address to,
            uint256 amount
        ) internal virtual {}
    
        function _afterTokenTransfer(
            address from,
            address to,
            uint256 amount
        ) internal virtual {}
    }
    
    contract MetropolyToken is ERC20, Ownable {
        constructor() ERC20("Metropoly", "METRO") {
            _mint(msg.sender, 1000000000 * 10**18);
        }
    }