ETH Price: $2,045.18 (+5.95%)

Transaction Decoder

Block:
9173171 at Dec-28-2019 12:04:22 AM +UTC
Transaction Fee:
0.0015779043 ETH $3.23
Gas Used:
309,393 Gas / 5.1 Gwei

Emitted Events:

103 ERC20Token.Transfer( from=[Sender] 0xd69029bf3561a3ca164739e1574be06510e2bc21, to=0x0000000000000000000000000000000000000000, value=750000000000000000000 )
104 0x9c1342c1708b5708865a2801fc96d966bad67210.0x6dfc0576ff2e859e84c11ce699c4b4cbd18d83bd6e63342e4ff34fc1f5bbc032( 0x6dfc0576ff2e859e84c11ce699c4b4cbd18d83bd6e63342e4ff34fc1f5bbc032, 0x000000000000000000000000d69029bf3561a3ca164739e1574be06510e2bc21, 0x000000000000000000000000000000000000000000000000000000005e069c06, 0x0000000000000000000000000000000000000000000000004563918244f40000 )
105 0x26db2ea3e57daf7628d4c2061654ba629aff79ba.0x6dfc0576ff2e859e84c11ce699c4b4cbd18d83bd6e63342e4ff34fc1f5bbc032( 0x6dfc0576ff2e859e84c11ce699c4b4cbd18d83bd6e63342e4ff34fc1f5bbc032, 0x000000000000000000000000d69029bf3561a3ca164739e1574be06510e2bc21, 0x000000000000000000000000000000000000000000000000000000005e069c06, 0x0000000000000000000000000000000000000000000000004563918244f40000 )

Account State Difference:

  Address   Before After State Difference Code
0x1bbbbBF7...2D6F60B68
0x26db2eA3...29AFF79ba 122.822 Eth123.172 Eth0.35
0x56C438eE...8cDfc928e
(F2Pool Old)
5,881.990668812006313797 Eth5,881.992246716306313797 Eth0.0015779043
0x8F36a0B0...144cBCc1a
0x9bF9A32B...2827a3b19 52.638 Eth52.788 Eth0.15
0x9C1342c1...6baD67210 1,563.42919 Eth1,567.92919 Eth4.5
0xD69029bF...510E2bc21
10.694964838 Eth
Nonce: 24
5.6933869337 Eth
Nonce: 25
5.0015779043

Execution Trace

ETH 5 0x9c1342c1708b5708865a2801fc96d966bad67210.CALL( )
  • 0x26db2ea3e57daf7628d4c2061654ba629aff79ba.STATICCALL( )
  • 0x1bbbbbf73cf7c97918cde3ce46016c02d6f60b68.CALL( )
    • 0xba312605f29e18226ee641f03180d8e2cd8682e2.75be2914( )
    • 0x731cd54b7ad50d9fee60d2b56a3fe027a258b095.9096fcd2( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x1bbbbbf73cf7c97918cde3ce46016c02d6f60b68.STATICCALL( )
      • 0xba312605f29e18226ee641f03180d8e2cd8682e2.DELEGATECALL( )
      • 0x731cd54b7ad50d9fee60d2b56a3fe027a258b095.9096fcd2( )
      • 0x1bbbbbf73cf7c97918cde3ce46016c02d6f60b68.c0855de4( )
      • 0x2d3d35ebd20caef1decdb70a02de1c9c16233ae7.STATICCALL( )
      • ERC20Token.balanceOf( _owner=0xD69029bF3561a3ca164739E1574be06510E2bc21 ) => ( balance=4551890240000000000000 )
      • ERC20Token.API_MoveToken( _from=0xD69029bF3561a3ca164739E1574be06510E2bc21, _to=0x0000000000000000000000000000000000000000, _value=750000000000000000000 )
      • ETH 5 0x49b2225ce7f67aa5352bc34b6cc45b57c0d5444e.8f7b462a( )
      • ETH 5 0x49b2225ce7f67aa5352bc34b6cc45b57c0d5444e.e379bd2f( )
        • ETH 5 0xba312605f29e18226ee641f03180d8e2cd8682e2.DELEGATECALL( )
        • 0x26db2ea3e57daf7628d4c2061654ba629aff79ba.STATICCALL( )
        • ETH 0.35 0x26db2ea3e57daf7628d4c2061654ba629aff79ba.CALL( )
        • 0x9bf9a32bd22b95013e5f555619314302827a3b19.STATICCALL( )
        • ETH 0.15 0x9bf9a32bd22b95013e5f555619314302827a3b19.CALL( )
        • 0x26db2ea3e57daf7628d4c2061654ba629aff79ba.07796ea9( )
          • 0xba312605f29e18226ee641f03180d8e2cd8682e2.DELEGATECALL( )
          • 0xba312605f29e18226ee641f03180d8e2cd8682e2.DELEGATECALL( )
          • 0xba312605f29e18226ee641f03180d8e2cd8682e2.DELEGATECALL( )
          • 0x9bf9a32bd22b95013e5f555619314302827a3b19.07796ea9( )
          • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.8101420a( )
            // File: contracts/interface/token/ERC20Interface.sol
            
            ///////////////////////////////////////////////////////////////////////////////////
            ////                     Standard ERC-20 token contract (EPK)                   ///
            ///////////////////////////////////////////////////////////////////////////////////
            ///                                                                             ///
            /// Standard ERC-20 token contract definition as mentioned above                ///
            ///                                                                             ///
            ///////////////////////////////////////////////////////////////////////////////////
            ///                                                          Mr.K by 2019/08/01 ///
            ///////////////////////////////////////////////////////////////////////////////////
            
            pragma solidity >=0.5.0 <0.6.0;
            
            contract ERC20Interface
            {
                uint256 public totalSupply;
                string  public name;
                uint8   public decimals;
                string  public symbol;
            
                function balanceOf(address _owner) public view returns (uint256 balance);
                function transfer(address _to, uint256 _value) public returns (bool success);
                function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
            
                function approve(address _spender, uint256 _value) public returns (bool success);
                function allowance(address _owner, address _spender) public view returns (uint256 remaining);
            
                event Transfer(address indexed _from, address indexed _to, uint256 _value);
                event Approval(address indexed _owner, address indexed _spender, uint256 _value);
            
                /// 只有合约可以调用的内部API
                function API_MoveToken(address _from, address _to, uint256 _value) external;
            }
            
            // File: contracts/interface/ticket/TicketInterface.sol
            
            ///////////////////////////////////////////////////////////////////////////////////
            ////                           EPK record contract                              ///
            ///////////////////////////////////////////////////////////////////////////////////
            ///                                                                             ///
            /// Used to pay EPK to unlock accounts, record payment results, and provide a   ///
            /// query method for querying whether one account has been unlocked.            ///
            ///                                                                             ///
            ///////////////////////////////////////////////////////////////////////////////////
            ///                                                          Mr.K by 2019/08/01 ///
            ///////////////////////////////////////////////////////////////////////////////////
            
            pragma solidity >=0.5.0 <0.6.0;
            
            interface TicketInterface {
            
                //One address needs to have enough EPK to unlock accounts. If one account has been unlocked before, the method will not take effect.
                function PaymentTicket() external;
            
                //Check if the one address has paid EPK to unlock the account.
                function HasTicket( address ownerAddr ) external view returns (bool);
            }
            
            // File: contracts/InternalModule.sol
            
            pragma solidity >=0.5.0 <0.6.0;
            
            
            contract InternalModule {
            
                address[] _authAddress;
            
                address _contractOwner;
            
                address _managerAddress;
            
                constructor() public {
                    _contractOwner = msg.sender;
                }
            
                modifier OwnerOnly() {
                    require( _contractOwner == msg.sender ); _;
                }
            
                modifier ManagerOnly() {
                    require(msg.sender == _managerAddress); _;
                }
            
                modifier APIMethod() {
            
                    bool exist = false;
            
                    for (uint i = 0; i < _authAddress.length; i++) {
                        if ( _authAddress[i] == msg.sender ) {
                            exist = true;
                            break;
                        }
                    }
            
                    require(exist); _;
                }
            
                function SetRoundManager(address rmaddr ) external OwnerOnly {
                    _managerAddress = rmaddr;
                }
            
                function AddAuthAddress(address _addr) external ManagerOnly {
                    _authAddress.push(_addr);
                }
            
                function DelAuthAddress(address _addr) external ManagerOnly {
            
                    for (uint i = 0; i < _authAddress.length; i++) {
            
                        if (_authAddress[i] == _addr) {
            
                            for (uint j = 0; j < _authAddress.length - 1; j++) {
            
                                _authAddress[j] = _authAddress[j+1];
            
                            }
            
                            delete _authAddress[_authAddress.length - 1];
                            _authAddress.length--;
                        }
            
                    }
                }
            
            
            }
            
            // File: contracts/ERC20Token.sol
            
            pragma solidity >=0.5.0 <0.6.0;
            
            
            
            
            contract ERC20Token is ERC20Interface, InternalModule {
                string  public name                     = "Name";
                string  public symbol                   = "Symbol";
                uint8   public decimals                 = 18;
                uint256 public totalSupply              = 1000000000 * 10 ** 18;
                uint256 constant private MAX_UINT256    = 2 ** 256 - 1;
                uint256 private constant brunMaxLimit = (1000000000 * 10 ** 18) - (10000000 * 10 ** 18);
            
                mapping (address => uint256) public balances;
                mapping (address => mapping (address => uint256)) public allowed;
            
                event Transfer(address indexed from, address indexed to, uint256 value);
                event Approval(address indexed owner, address indexed spender, uint256 value);
            
                constructor(string memory tokenName, string memory tokenSymbol, uint256 tokenTotalSupply, uint256 mint) public {
            
                    name = tokenName;
                    symbol = tokenSymbol;
                    totalSupply = tokenTotalSupply;
            
                    balances[_contractOwner] = mint;
                    balances[address(this)] = tokenTotalSupply - mint;
                }
            
                function transfer(address _to, uint256 _value) public
                returns (bool success) {
                    require(balances[msg.sender] >= _value);
                    balances[msg.sender] -= _value;
                    balances[_to] += _value;
                    emit Transfer(msg.sender, _to, _value);
                    return true;
                }
            
                function transferFrom(address _from, address _to, uint256 _value) public
                returns (bool success) {
                    uint256 allowance = allowed[_from][msg.sender];
                    require(balances[_from] >= _value && allowance >= _value);
                    balances[_to] += _value;
                    balances[_from] -= _value;
                    if (allowance < MAX_UINT256) {
                        allowed[_from][msg.sender] -= _value;
                    }
                    emit Transfer(_from, _to, _value);
                    return true;
                }
            
                function balanceOf(address _owner) public view
                returns (uint256 balance) {
                    return balances[_owner];
                }
            
                function approve(address _spender, uint256 _value) public
                returns (bool success) {
                    allowed[msg.sender][_spender] = _value;
                    emit Approval(msg.sender, _spender, _value);
                    return true;
                }
            
                function allowance(address _owner, address _spender) public view
                returns (uint256 remaining) {
                    return allowed[_owner][_spender];
                }
            
                uint256 private ticketPrice = 60000000000000000000;
            
                mapping( address => bool ) private _paymentTicketAddrMapping;
            
                function PaymentTicket() external {
            
                    require( _paymentTicketAddrMapping[msg.sender] == false, "ERC20_ERR_001");
                    require( balances[msg.sender] >= ticketPrice, "ERC20_ERR_002");
            
                    balances[msg.sender] -= ticketPrice;
            
                    if ( balances[address(0x0)] == brunMaxLimit ) {
                        balances[_contractOwner] += ticketPrice;
                    } else if ( balances[address(0x0)] + ticketPrice >= brunMaxLimit ) {
                        balances[_contractOwner] += (balances[address(0x0)] + ticketPrice) - brunMaxLimit;
                        balances[address(0x0)] = brunMaxLimit;
                    } else {
                        balances[address(0x0)] += ticketPrice;
                    }
                    _paymentTicketAddrMapping[msg.sender] = true;
                }
            
                function HasTicket( address ownerAddr ) external view returns (bool) {
                    return _paymentTicketAddrMapping[ownerAddr];
                }
                function API_MoveToken(address _from, address _to, uint256 _value) external APIMethod {
            
                    require( balances[_from] >= _value, "ERC20_ERR_003" );
            
                    balances[_from] -= _value;
            
                    if ( _to == address(0x0) ) {
                        if ( balances[address(0x0)] == brunMaxLimit ) {
                            balances[_contractOwner] += _value;
                        } else if ( balances[address(0x0)] + _value >= brunMaxLimit ) {
                            balances[_contractOwner] += (balances[address(0x0)] + _value) - brunMaxLimit;
                            balances[address(0x0)] = brunMaxLimit;
                        } else {
                            balances[address(0x0)] += _value;
                        }
                    } else {
                        balances[_to] += _value;
                    }
            
                    emit Transfer( _from, _to, _value );
                }
            }