ETH Price: $2,430.88 (-3.46%)

Transaction Decoder

Block:
7281888 at Mar-01-2019 04:34:57 AM +UTC
Transaction Fee:
0.01659633 ETH $40.34
Gas Used:
553,211 Gas / 30 Gwei

Emitted Events:

132 TryminexToken.Transfer( from=[Sender] 0x96e792837cf2a26f542889b68569fa36c6e9c549, to=0x0000000000000000000000000aAaAaBbbbbCCccC, value=4005759546951667200 )
133 0x667e3e933ed540613538e5931b6897a07c118d01.0x753f5d4574e2df385eacb33d9989c617c5ded51223ffb67dd572c331551f6f52( 0x753f5d4574e2df385eacb33d9989c617c5ded51223ffb67dd572c331551f6f52, 0x00000000000000000000000096e792837cf2a26f542889b68569fa36c6e9c549, 0000000000000000000000000000000000000000000000000000000000000002, 0000000000000000000000000000000000000000000000000163c86d574ac6c7, 0000000000000000000000000000000000000000000000008aeaa9f6cb1164b3, 00000000000000000000000000000000000000000000000037975115a3af0e00, 000000000000000000000000000000000000000000000000000000005c78b671 )

Account State Difference:

  Address   Before After State Difference Code
0x667e3e93...07c118D01 2.129440773516501085 Eth2.204548765021844827 Eth0.075107991505343742
0x7b02C611...404Ef5bC6
(F2Pool Old)
6,609.247787383515196336 Eth6,609.264383713515196336 Eth0.01659633
0x96e79283...6c6e9c549
3.789151719057030776 Eth
Nonce: 48
3.672411400383239089 Eth
Nonce: 49
0.116740318673791687
0xAdAC145B...044Ff5833 0.937300062058537972 Eth0.943308701378965473 Eth0.006008639320427501
0xd0c5EFa6...50dD5B2A4
0xD8226686...9DD467135 1.942875885830302719 Eth1.961903243678323163 Eth0.019027357848020444

Execution Trace

ETH 0.100143988673791687 0x667e3e933ed540613538e5931b6897a07c118d01.CALL( )
  • 0xd0c5efa60ab82059a7d006341b6e5bf50dd5b2a4.CALL( )
  • 0xd0c5efa60ab82059a7d006341b6e5bf50dd5b2a4.28e1a604( )
    • TryminexToken.allowance( _owner=0x96e792837CF2a26f542889B68569fa36c6e9c549, _spender=0xd0c5EFa60AB82059A7d006341b6E5Bf50dD5B2A4 ) => ( 99970988665039672502400 )
    • TryminexToken.balanceOf( _owner=0x96e792837CF2a26f542889B68569fa36c6e9c549 ) => ( 9960700942060222945800 )
    • TryminexToken.transferFrom( _from=0x96e792837CF2a26f542889B68569fa36c6e9c549, _to=0x0000000000000000000000000aAaAaBbbbbCCccC, _value=4005759546951667200 ) => ( True )
    • ETH 0.006008639320427501 0xadac145be1356c46f3f91a2daa8bffd044ff5833.CALL( )
    • 0x4980dc941236fc83c37e87a0d66604253e65bcd9.CALL( )
    • ETH 0.019027357848020444 0xd822668612433fb0824cbdeb44ac8349dd467135.CALL( )
      pragma solidity ^0.4.23;
      
      /**
       * @title Ownable
       * @dev The Ownable contract has an owner address, and provides basic authorization control
       * functions, this simplifies the implementation of "user permissions".
       */
      contract Ownable {
        address public owner;
      
      
        event OwnershipRenounced(address indexed previousOwner);
        event OwnershipTransferred(
          address indexed previousOwner,
          address indexed newOwner
        );
      
      
        /**
         * @dev The Ownable constructor sets the original `owner` of the contract to the sender
         * account.
         */
        constructor() public {
          owner = msg.sender;
        }
      
        /**
         * @dev Throws if called by any account other than the owner.
         */
        modifier onlyOwner() {
          require(msg.sender == owner);
          _;
        }
      
        /**
         * @dev Allows the current owner to transfer control of the contract to a newOwner.
         * @param newOwner The address to transfer ownership to.
         */
        function transferOwnership(address newOwner) public onlyOwner {
          require(newOwner != address(0));
          emit OwnershipTransferred(owner, newOwner);
          owner = newOwner;
        }
      
        /**
         * @dev Allows the current owner to relinquish control of the contract.
         */
        function renounceOwnership() public onlyOwner {
          emit OwnershipRenounced(owner);
          owner = address(0);
        }
      }
      
      /**
       * @title SafeMath
       * @dev Math operations with safety checks that throw on error
       */
      library SafeMath {
      
        /**
        * @dev Multiplies two numbers, throws on overflow.
        */
        function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
          if (a == 0) {
            return 0;
          }
          c = a * b;
          assert(c / a == b);
          return c;
        }
      
        /**
        * @dev Integer division of two numbers, truncating the quotient.
        */
        function div(uint256 a, uint256 b) internal pure returns (uint256) {
          // assert(b > 0); // Solidity automatically throws when dividing by 0
          // uint256 c = a / b;
          // assert(a == b * c + a % b); // There is no case in which this doesn't hold
          return a / b;
        }
      
        /**
        * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
        */
        function sub(uint256 a, uint256 b) internal pure returns (uint256) {
          assert(b <= a);
          return a - b;
        }
      
        /**
        * @dev Adds two numbers, throws on overflow.
        */
        function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
          c = a + b;
          assert(c >= a);
          return c;
        }
      }
      
      /**
       * @title ERC20Basic
       * @dev Simpler version of ERC20 interface
       * @dev see https://github.com/ethereum/EIPs/issues/179
       */
      contract ERC20Basic {
        function totalSupply() public view returns (uint256);
        function balanceOf(address who) public view returns (uint256);
        function transfer(address to, uint256 value) public returns (bool);
        event Transfer(address indexed from, address indexed to, uint256 value);
      }
      
      /**
       * @title ERC20 interface
       * @dev see https://github.com/ethereum/EIPs/issues/20
       */
      contract ERC20 is ERC20Basic {
        function allowance(address owner, address spender) public view returns (uint256);
        function transferFrom(address from, address to, uint256 value) public returns (bool);
        function approve(address spender, uint256 value) public returns (bool);
        event Approval(address indexed owner, address indexed spender, uint256 value);
      }
      
      contract BasicToken is ERC20Basic {
        using SafeMath for uint256;
      
        mapping(address => uint256) balances;
      
        uint256 totalSupply_;
      
        /**
        * @dev total number of tokens in existence
        */
        function totalSupply() public view returns (uint256) {
          return totalSupply_;
        }
      
        /**
        * @dev transfer token for a specified address
        * @param _to The address to transfer to.
        * @param _value The amount to be transferred.
        */
        function transfer(address _to, uint256 _value) public returns (bool) {
          require(_to != address(0));
          require(_value <= balances[msg.sender]);
      
          balances[msg.sender] = balances[msg.sender].sub(_value);
          balances[_to] = balances[_to].add(_value);
          emit Transfer(msg.sender, _to, _value);
          return true;
        }
      
        /**
        * @dev Gets the balance of the specified address.
        * @param _owner The address to query the the balance of.
        * @return An uint256 representing the amount owned by the passed address.
        */
        function balanceOf(address _owner) public view returns (uint256) {
          return balances[_owner];
        }
      
      }
      /**
       * @title Standard ERC20 token
       *
       * @dev Implementation of the basic standard token.
       * @dev https://github.com/ethereum/EIPs/issues/20
       * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
       */
      contract StandardToken is ERC20, BasicToken {
      
        mapping (address => mapping (address => uint256)) internal allowed;
      
      
        /**
         * @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);
          return true;
        }
      
        /**
         * @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];
        }
      
        /**
         * @dev Increase the amount of tokens that an owner allowed to a 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
         * @param _spender The address which will spend the funds.
         * @param _addedValue The amount of tokens to increase the allowance by.
         */
        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;
        }
      
        /**
         * @dev Decrease the amount of tokens that an owner allowed to a spender.
         *
         * approve should be called when allowed[_spender] == 0. To decrement
         * allowed value is better to use this function to avoid 2 calls (and wait until
         * the first transaction is mined)
         * From MonolithDAO Token.sol
         * @param _spender The address which will spend the funds.
         * @param _subtractedValue The amount of tokens to decrease the allowance by.
         */
        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;
        }
      
      }
      
      contract MintableToken is StandardToken, Ownable {
        event Mint(address indexed to, uint256 amount);
        event MintFinished();
      
        bool public mintingFinished = false;
      
      
        modifier canMint() {
          require(!mintingFinished);
          _;
        }
      
        /**
         * @dev Function to mint tokens
         * @param _to The address that will receive the minted tokens.
         * @param _amount The amount of tokens to mint.
         * @return A boolean that indicates if the operation was successful.
         */
        function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) {
          totalSupply_ = totalSupply_.add(_amount);
          balances[_to] = balances[_to].add(_amount);
          emit Mint(_to, _amount);
          emit Transfer(address(0), _to, _amount);
          return true;
        }
      
        /**
         * @dev Function to stop minting new tokens.
         * @return True if the operation was successful.
         */
        function finishMinting() onlyOwner canMint public returns (bool) {
          mintingFinished = true;
          emit MintFinished();
          return true;
        }
      }
      
      
      contract CappedToken is MintableToken {
      
        uint256 public cap;
      
        constructor(uint256 _cap) public {
          require(_cap > 0);
          cap = _cap;
        }
      
        /**
         * @dev Function to mint tokens
         * @param _to The address that will receive the minted tokens.
         * @param _amount The amount of tokens to mint.
         * @return A boolean that indicates if the operation was successful.
         */
        function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) {
          require(totalSupply_.add(_amount) <= cap);
      
          return super.mint(_to, _amount);
        }
      
      }
      
      contract Pausable is Ownable {
        event Pause();
        event Unpause();
      
        bool public paused = false;
      
      
        /**
         * @dev Modifier to make a function callable only when the contract is not paused.
         */
        modifier whenNotPaused() {
          require(!paused);
          _;
        }
      
        /**
         * @dev Modifier to make a function callable only when the contract is paused.
         */
        modifier whenPaused() {
          require(paused);
          _;
        }
      
        /**
         * @dev called by the owner to pause, triggers stopped state
         */
        function pause() onlyOwner whenNotPaused public {
          paused = true;
          emit Pause();
        }
      
        /**
         * @dev called by the owner to unpause, returns to normal state
         */
        function unpause() onlyOwner whenPaused public {
          paused = false;
          emit Unpause();
        }
      }
      
      contract PausableToken is StandardToken, Pausable {
      
        function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) {
          return super.transfer(_to, _value);
        }
      
        function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) {
          return super.transferFrom(_from, _to, _value);
        }
      
        function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) {
          return super.approve(_spender, _value);
        }
      
        function increaseApproval(address _spender, uint _addedValue) public whenNotPaused returns (bool success) {
          return super.increaseApproval(_spender, _addedValue);
        }
      
        function decreaseApproval(address _spender, uint _subtractedValue) public whenNotPaused returns (bool success) {
          return super.decreaseApproval(_spender, _subtractedValue);
        }
      }
      
      contract TryminexToken is CappedToken, PausableToken {
          string public constant name = "Tryminex Token"; // solium-disable-line uppercase
          string public constant symbol = "TMX"; // solium-disable-line uppercase
          uint8 public constant decimals = 18; // solium-disable-line uppercase
      
          uint256 public constant INITIAL_SUPPLY = 0;
          uint256 public constant MAX_SUPPLY = 100 * 10000 * 10000 * (10 ** uint256(decimals));
      
          /**
          * @dev Constructor that gives msg.sender all of existing tokens.
          */
          constructor() CappedToken(MAX_SUPPLY) public {
              totalSupply_ = MAX_SUPPLY;
              balances[msg.sender] = MAX_SUPPLY;
              emit Transfer(0x0, msg.sender, MAX_SUPPLY);
          }
      
          /**
          * @dev Function to mint tokens
          * @param _to The address that will receive the minted tokens.
          * @param _amount The amount of tokens to mint.
          * @return A boolean that indicates if the operation was successful.
          */
          function mint(address _to, uint256 _amount) onlyOwner canMint whenNotPaused public returns (bool) {
              return super.mint(_to, _amount);
          }
      
          /**
          * @dev Function to stop minting new tokens.
          * @return True if the operation was successful.
          */
          function finishMinting() onlyOwner canMint whenNotPaused public returns (bool) {
              return super.finishMinting();
          }
      
          /**
          * @dev Allows the current owner to transfer control of the contract to a newOwner.
          * @param newOwner The address to transfer ownership to.
          */
          function transferOwnership(address newOwner) onlyOwner whenNotPaused public {
              super.transferOwnership(newOwner);
          }
      
          /**
          * The fallback function.
          */
          function() payable public {
              revert();
          }
      }