Transaction Hash:
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 | ||
---|---|---|---|---|---|
0x1f9090aa...8e676c326
Miner
| 2.031164308085958187 Eth | 2.031182830685958187 Eth | 0.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); } }