ETH Price: $2,152.15 (-0.26%)

Transaction Decoder

Block:
9043405 at Dec-03-2019 11:19:44 AM +UTC
Transaction Fee:
0.019074001666994049 ETH $41.05
Gas Used:
1,889,049 Gas / 10.097145001 Gwei

Emitted Events:

Account State Difference:

  Address   Before After State Difference Code
0x0f067B25...C33b94185
0x56C438eE...8cDfc928e
(Spark Pool)
71.970569238433605993 Eth71.989643240100600042 Eth0.019074001666994049
0x60Cf2840...7d3185236 1,632.4084575665143296 Eth1,631.0084575665143296 Eth1.4
0x80ae2Bad...D6C23e30F
0xD1c9381F...091053f2d
0xe88C6400...2F92242B7
0.38325400172911988 Eth
Nonce: 14
1.764180000062125831 Eth
Nonce: 15
1.380925998333005951

Execution Trace

0x60cf284021f58e87d3360cbec8b906e7d3185236.CALL( )
  • 0x4637e862967a7178f61073acb5b6cf0ec66c2580.232012a5( )
  • ERC20Token.balanceOf( _owner=0xe88C6400D4100241ea8350aE216143d2F92242B7 ) => ( balance=4068148800000000000000 )
  • 0x0f067b256a0c72e309c99a061e132a9c33b94185.590deeaf( )
  • ERC20Token.API_MoveToken( _from=0xe88C6400D4100241ea8350aE216143d2F92242B7, _to=0x0000000000000000000000000000000000000000, _value=126000000000000000000 )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( )
  • 0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( )
  • 0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( )
  • 0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( )
  • 0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( )
  • 0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( )
  • 0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( )
  • 0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( )
  • 0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( )
  • 0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( )
  • 0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( )
  • 0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( )
  • 0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
  • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( )
  • 0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( )
  • 0x721ec7dfbf4126b946ed1d052dd3c83417b0a0cc.b545ddac( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
    • 0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( )
    • 0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( )
    • 0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( )
    • 0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( )
    • 0xd1c9381fa61896c792f856d8497967f091053f2d.f0f80ad0( )
    • 0x0f067b256a0c72e309c99a061e132a9c33b94185.acc1ae85( )
    • ETH 1.4 0xe88c6400d4100241ea8350ae216143d2f92242b7.CALL( )
    • 0x80ae2badded437e5f5e1b3d5c667828d6c23e30f.538140eb( )
      // 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 );
          }
      }