ETH Price: $2,441.19 (+0.29%)

Transaction Decoder

Block:
9497369 at Feb-17-2020 12:20:22 AM +UTC
Transaction Fee:
0.000047873 ETH $0.12
Gas Used:
47,873 Gas / 1 Gwei

Emitted Events:

224 0x56bdb6b91df6f31d952f418431a2fe5c32b1ab18.0xfe7813e2866053d5c3938554e517b554fce6666a6561bed9eaa7419b29fa9b68( 0xfe7813e2866053d5c3938554e517b554fce6666a6561bed9eaa7419b29fa9b68, 09c5695d411356452c94973a23e131d5ec331844e87d5c7ff18eade8f2de6188, 000000000000000000000000955fe846c726d5e4aa0a9eea65417dc7394e8dbf, 000000000000000000000000743e042ad1d84ed1d3e02083bb6af4878b4151f2, 000000000000000000000000000000000000000000000b605c6a68c821833400, 0000000000000000000000000000000000000000000000000000000000000000 )
225 QZToken.Transfer( from=[Receiver] 0x56bdb6b91df6f31d952f418431a2fe5c32b1ab18, to=[Sender] 0x743e042ad1d84ed1d3e02083bb6af4878b4151f2, value=53723577992850000000000 )
226 QZToken.Transfer( 0xe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16, 0x00000000000000000000000056bdb6b91df6f31d952f418431a2fe5c32b1ab18, 0x000000000000000000000000743e042ad1d84ed1d3e02083bb6af4878b4151f2, 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470, 000000000000000000000000000000000000000000000b605c6a68c821833400 )

Account State Difference:

  Address   Before After State Difference Code
0x56bDB6B9...C32B1ab18
0x743e042A...78b4151f2
0.0335795618 Eth
Nonce: 46
0.0335316888 Eth
Nonce: 47
0.000047873
0x955fe846...7394E8Dbf
(Ethermine)
1,012.535705942023490339 Eth1,012.535753815023490339 Eth0.000047873

Execution Trace

0x56bdb6b91df6f31d952f418431a2fe5c32b1ab18.a318c1a4( )
  • QZToken.transfer( _to=0x743e042Ad1D84eD1d3e02083bb6AF4878b4151f2, _value=53723577992850000000000 )
    pragma solidity ^0.4.21;
    
    /**
     * Math operations with safety checks
     * https://github.com/Dexaran/ERC223-token-standard/blob/master/SafeMath.sol
     */
    library SafeMath {
      function mul(uint a, uint b) pure internal returns (uint) {
        uint c = a * b;
        assert(a == 0 || c / a == b);
        return c;
      }
    
      function div(uint a, uint b) pure internal returns (uint) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        uint c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
      }
    
      function sub(uint a, uint b) pure internal returns (uint) {
        assert(b <= a);
        return a - b;
      }
    
      function add(uint a, uint b) pure internal returns (uint) {
        uint c = a + b;
        assert(c >= a);
        return c;
      }
    
      function max64(uint64 a, uint64 b) pure internal returns (uint64) {
        return a >= b ? a : b;
      }
    
      function min64(uint64 a, uint64 b) pure internal returns (uint64) {
        return a < b ? a : b;
      }
    
      function max256(uint256 a, uint256 b) pure internal returns (uint256) {
        return a >= b ? a : b;
      }
    
      function min256(uint256 a, uint256 b) pure internal returns (uint256) {
        return a < b ? a : b;
      }
    }
    
     /**
     * @title Contract that will work with ERC223 tokens.
     * https://github.com/Dexaran/ERC223-token-standard/blob/ERC20_compatible/ERC223_receiving_contract.sol
     */
     
    contract ERC223ReceivingContract { 
    /**
     * @dev Standard ERC223 function that will handle incoming token transfers.
     *
     * @param _from  Token sender address.
     * @param _value Amount of tokens.
     * @param _data  Transaction metadata.
     */
        function tokenFallback(address _from, uint _value, bytes _data) public;
    }
    
    /*
     * @title ERC223 interface
     * https://github.com/Dexaran/ERC223-token-standard/blob/ERC20_compatible/ERC223_interface.sol
     */
    contract ERC223Interface {
        uint public totalSupply;
        function balanceOf(address who) constant public returns (uint);
        function transfer(address to, uint value) public;
        function transfer(address to, uint value, bytes data) public;
        event Transfer(address indexed from, address indexed to, uint value, bytes indexed data);
    }
    
    /*
     * @title More compatibility with ERC20
     * https://github.com/Dexaran/ERC223-token-standard/blob/ERC20_compatible/ERC20_functions.sol with additions from ERC223Token from https://github.com/Dexaran/ERC223-token-standard/blob/Recommended/ERC223_Token.sol
     */
    contract ERC20CompatibleToken {
        using SafeMath for uint;
    
        mapping(address => uint) balances; // List of user balances.
        string public name;
        string public symbol;
        uint8 public decimals;
        uint256 public totalSupply;
    
        event Transfer(address indexed from, address indexed to, uint value);
        event Approval(address indexed owner, address indexed spender, uint256 value);
        mapping (address => mapping (address => uint256)) internal allowed;
    
        // Function to access name of token .
        function name() public view returns (string _name) {
            return name;
        }
        // Function to access symbol of token .
        function symbol() public view returns (string _symbol) {
            return symbol;
        }
        // Function to access decimals of token .
        function decimals() public view returns (uint8 _decimals) {
            return decimals;
        }
        // Function to access total supply of tokens .
        function totalSupply() public view returns (uint256 _totalSupply) {
            return totalSupply;
        }
    
        /**
        * @dev Transfer tokens from one address to another
        * @param _from address The address which you want to send tokens from
        * @param _to address The address which you want to transfer to
        * @param _value uint256 the amount of tokens to be transferred
        */
        function transferFrom(address _from, address _to, uint256 _value) public returns (bool);
    
      /**
       * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
       *
       * Beware that changing an allowance with this method brings the risk that someone may use both the old
       * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
       * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
       * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
       * @param _spender The address which will spend the funds.
       * @param _value The amount of tokens to be spent.
       */
      function approve(address _spender, uint256 _value) public returns (bool) {
        allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);
        return true;
      }
    
      /**
       * @dev Function to check the amount of tokens that an owner allowed to a spender.
       * @param _owner address The address which owns the funds.
       * @param _spender address The address which will spend the funds.
       * @return A uint256 specifying the amount of tokens still available for the spender.
       */
      function allowance(address _owner, address _spender) public view returns (uint256) {
        return allowed[_owner][_spender];
      }
    
      /**
       * approve should be called when allowed[_spender] == 0. To increment
       * allowed value is better to use this function to avoid 2 calls (and wait until
       * the first transaction is mined)
       * From MonolithDAO Token.sol
       */
      function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
        allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
      }
    
      function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
        uint oldValue = allowed[msg.sender][_spender];
        if (_subtractedValue > oldValue) {
          allowed[msg.sender][_spender] = 0;
        } else {
          allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
        }
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
      }
    }
    
    /**
     * @title Reference implementation of the ERC223 standard token.
     * https://github.com/Dexaran/ERC223-token-standard/blob/ERC20_compatible/Token.sol
     */
    contract ERC223Token is ERC223Interface, ERC20CompatibleToken {
        using SafeMath for uint;
    
        /**
        * @dev Transfer tokens from one address to another
        * @param _from address The address which you want to send tokens from
        * @param _to address The address which you want to transfer to
        * @param _value uint256 the amount of tokens to be transferred
        */
        function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
          require(_to != address(0));
          require(_value <= balances[_from]);
          require(_value <= allowed[_from][msg.sender]);
    
          balances[_from] = balances[_from].sub(_value);
          balances[_to] = balances[_to].add(_value);
          allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
          emit Transfer(_from, _to, _value);
          bytes memory empty;
          emit Transfer(_from, _to, _value, empty);
          return true;
        }
    
        /**
         * @dev Transfer the specified amount of tokens to the specified address.
         *      Invokes the `tokenFallback` function if the recipient is a contract.
         *      The token transfer fails if the recipient is a contract
         *      but does not implement the `tokenFallback` function
         *      or the fallback function to receive funds.
         *
         * @param _to    Receiver address.
         * @param _value Amount of tokens that will be transferred.
         * @param _data  Transaction metadata.
         */
        function transfer(address _to, uint _value, bytes _data) public {
            // Standard function transfer similar to ERC20 transfer with no _data .
            // Added due to backwards compatibility reasons .
            uint codeLength;
    
            assembly {
                // Retrieve the size of the code on target address, this needs assembly .
                codeLength := extcodesize(_to)
            }
    
            balances[msg.sender] = balances[msg.sender].sub(_value);
            balances[_to] = balances[_to].add(_value);
            if(codeLength>0) {
                ERC223ReceivingContract receiver = ERC223ReceivingContract(_to);
                receiver.tokenFallback(msg.sender, _value, _data);
            }
            emit Transfer(msg.sender, _to, _value);
            emit Transfer(msg.sender, _to, _value, _data);
        }
    
        /**
         * @dev Transfer the specified amount of tokens to the specified address.
         *      This function works the same with the previous one
         *      but doesn't contain `_data` param.
         *      Added due to backwards compatibility reasons.
         *
         * @param _to    Receiver address.
         * @param _value Amount of tokens that will be transferred.
         */
        function transfer(address _to, uint _value) public {
            uint codeLength;
            bytes memory empty;
    
            assembly {
                // Retrieve the size of the code on target address, this needs assembly .
                codeLength := extcodesize(_to)
            }
    
            balances[msg.sender] = balances[msg.sender].sub(_value);
            balances[_to] = balances[_to].add(_value);
            if(codeLength>0) {
                ERC223ReceivingContract receiver = ERC223ReceivingContract(_to);
                receiver.tokenFallback(msg.sender, _value, empty);
            }
            emit Transfer(msg.sender, _to, _value);
            emit Transfer(msg.sender, _to, _value, empty);
        }
    
    
        /**
         * @dev Returns balance of the `_owner`.
         *
         * @param _owner   The address whose balance will be returned.
         * @return balance Balance of the `_owner`.
         */
        function balanceOf(address _owner) public constant returns (uint balance) {
            return balances[_owner];
        }
    }
    
    contract QZToken is ERC223Token {
        /* Initializes contract with initial supply tokens to the creator of the contract */
        function QZToken(string tokenName, string tokenSymbol, uint8 decimalUnits, uint256 initialSupply) public {
            name = tokenName; // Set the name for display purposes
            symbol = tokenSymbol; // Set the symbol for display purposes
            decimals = decimalUnits; // Amount of decimals for display purposes
            totalSupply = initialSupply * 10 ** uint(decimalUnits); // Update total supply
            balances[msg.sender] = totalSupply; // Give the creator all initial tokens
        }
    }