Transaction Hash:
Block:
17858110 at Aug-06-2023 07:50:47 PM +UTC
Transaction Fee:
0.000542252044443356 ETH
$1.44
Gas Used:
46,964 Gas / 11.546121379 Gwei
Emitted Events:
332 |
AtariToken.Transfer( from=[Sender] 0xf517e4d3da17ab57723fc28245d61bb0602cc828, to=0x82197DBcd4E1581480166e2107Ad561768F7CE0C, tokens=146605 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x1f9090aa...8e676c326
Miner
| 0.963596414187053954 Eth | 0.963598727548923934 Eth | 0.00000231336186998 | ||
0xdacD6934...78780FB62 | |||||
0xf517e4D3...0602cc828 |
0.265326500408321023 Eth
Nonce: 4
|
0.264784248363877667 Eth
Nonce: 5
| 0.000542252044443356 |
Execution Trace
AtariToken.transfer( receiver=0x82197DBcd4E1581480166e2107Ad561768F7CE0C, numTokens=146605 ) => ( True )
transfer[AtariToken (ln:59)]
// SPDX-License-Identifier: UNLICENSED pragma solidity >=0.4.0 <0.7.0; // ---------------------------------------------------------------------------- // ERC Token Standard #20 Interface // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // ---------------------------------------------------------------------------- interface ERC20Interface { function totalSupply() external view returns (uint256); function balanceOf(address tokenOwner) external view returns (uint balance); function allowance(address tokenOwner, address spender) external view returns (uint remaining); function transfer(address to, uint tokens) external returns (bool success); function approve(address spender, uint tokens) external returns (bool success); function transferFrom(address from, address to, uint tokens) external returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract AtariToken is ERC20Interface { string public constant name = "AtariToken"; string public constant symbol = "ATRI"; uint8 public constant decimals = 0; event Approval(address indexed tokenOwner, address indexed spender, uint tokens); event Transfer(address indexed from, address indexed to, uint tokens); event RegistrationSuccessful(uint256 nonce); event RegistrationFailed(uint256 nonce); mapping(address => uint256) balances; mapping(address => mapping (address => uint256)) allowed; uint256 totalSupply_ = 7771000000; mapping (string => address) addressTable; using SafeMath for uint256; constructor() public{ balances[msg.sender] = totalSupply_; } function totalSupply() public override view returns (uint256) { return totalSupply_; } function balanceOf(address tokenOwner) public override view returns (uint) { return balances[tokenOwner]; } function balanceOf(string memory tokenOwner) public view returns (uint) { address userAddress; userAddress = addressTable[tokenOwner]; return balances[userAddress]; } function transfer(address receiver, uint numTokens) public override returns (bool) { require(numTokens <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(numTokens); balances[receiver] = balances[receiver].add(numTokens); emit Transfer(msg.sender, receiver, numTokens); return true; } function transfer(string memory receiver, uint numTokens) public returns (bool) { address receiverAddress; receiverAddress = addressTable[receiver]; require(numTokens <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(numTokens); balances[receiverAddress] = balances[receiverAddress].add(numTokens); emit Transfer(msg.sender, receiverAddress, numTokens); return true; } function approve(address delegate, uint numTokens) public override returns (bool) { allowed[msg.sender][delegate] = numTokens; emit Approval(msg.sender, delegate, numTokens); return true; } function approve(string memory delegate, uint numTokens) public returns (bool) { address delegateAddress; delegateAddress = addressTable[delegate]; allowed[msg.sender][delegateAddress] = numTokens; emit Approval(msg.sender, delegateAddress, numTokens); return true; } function allowance(address owner, address delegate) public override view returns (uint) { return allowed[owner][delegate]; } function allowance(string memory owner, string memory delegate) public view returns (uint) { address ownerAddress; ownerAddress = addressTable[owner]; address delegateAddress; delegateAddress = addressTable[delegate]; return allowed[ownerAddress][delegateAddress]; } function transferFrom(address owner, address buyer, uint numTokens) public override returns (bool) { require(numTokens <= balances[owner]); require(numTokens <= allowed[owner][msg.sender]); balances[owner] = balances[owner].sub(numTokens); allowed[owner][msg.sender] = allowed[owner][msg.sender].sub(numTokens); balances[buyer] = balances[buyer].add(numTokens); emit Transfer(owner, buyer, numTokens); return true; } function transferFrom(string memory owner, string memory buyer, uint numTokens) public returns (bool) { address ownerAddress; ownerAddress = addressTable[owner]; address buyerAddress; buyerAddress = addressTable[buyer]; require(numTokens <= balances[ownerAddress]); require(numTokens <= allowed[ownerAddress][msg.sender]); balances[ownerAddress] = balances[ownerAddress].sub(numTokens); allowed[ownerAddress][msg.sender] = allowed[ownerAddress][msg.sender].sub(numTokens); balances[buyerAddress] = balances[buyerAddress].add(numTokens); emit Transfer(ownerAddress, buyerAddress, numTokens); return true; } function registerUser(string memory user, uint256 nonce) public returns (bool) { if (addressTable[user] == address(0)) { addressTable[user] = msg.sender; emit RegistrationSuccessful(nonce); return true; } else { emit RegistrationFailed(nonce); return false; } } } library SafeMath { function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } }