ETH Price: $2,138.90 (+1.12%)

Transaction Decoder

Block:
7236364 at Feb-18-2019 02:01:19 PM +UTC
Transaction Fee:
0.02920845 ETH $62.47
Gas Used:
973,615 Gas / 30 Gwei

Emitted Events:

44 TryminexToken.Transfer( from=[Sender] 0x0f00e6bbdf6f70d435c3dd2a69cc853d04d2320d, to=0x0000000000000000000000000aAaAaBbbbbCCccC, value=4146283550384500800 )
45 0x667e3e933ed540613538e5931b6897a07c118d01.0x753f5d4574e2df385eacb33d9989c617c5ded51223ffb67dd572c331551f6f52( 0x753f5d4574e2df385eacb33d9989c617c5ded51223ffb67dd572c331551f6f52, 0x0000000000000000000000000f00e6bbdf6f70d435c3dd2a69cc853d04d2320d, 0000000000000000000000000000000000000000000000000000000000000001, 00000000000000000000000000000000000000000000000001704392b1f7c46a, 0000000000000000000000000000000000000000000000008aeaa9f6cca5a34a, 000000000000000000000000000000000000000000000000398a8eebceb6b040, 000000000000000000000000000000000000000000000000000000005c6abaaf )

Account State Difference:

  Address   Before After State Difference Code
(2Miners: PPLNS)
141.27550302877891035 Eth141.30471147877891035 Eth0.02920845
0x0f00e6BB...d04d2320D
0.17000019 Eth
Nonce: 2
0.037134651240387478 Eth
Nonce: 3
0.132865538759612522
0x667e3e93...07c118D01 923.932572582347406331 Eth924.030010245781442102 Eth0.097437663434035771
0x7b02C611...404Ef5bC6
0xAdAC145B...044Ff5833 10.771196712506094934 Eth10.777416137831671685 Eth0.006219425325576751
0xd0c5EFa6...50dD5B2A4

Execution Trace

ETH 0.103657088759612522 0x667e3e933ed540613538e5931b6897a07c118d01.CALL( )
  • 0xaf9d89438ee121bf963fce9b48de3d54bfb2d2c8.bebf41a1( )
  • 0xaf9d89438ee121bf963fce9b48de3d54bfb2d2c8.d11c64d6( )
  • 0xaf9d89438ee121bf963fce9b48de3d54bfb2d2c8.4b611028( )
  • 0xd0c5efa60ab82059a7d006341b6e5bf50dd5b2a4.CALL( )
  • 0xd0c5efa60ab82059a7d006341b6e5bf50dd5b2a4.28e1a604( )
    • TryminexToken.allowance( _owner=0x0f00e6BBdf6f70D435C3dD2A69cc853d04d2320D, _spender=0xd0c5EFa60AB82059A7d006341b6E5Bf50dD5B2A4 ) => ( 100000000000000000000000 )
    • TryminexToken.balanceOf( _owner=0x0f00e6BBdf6f70D435C3dD2A69cc853d04d2320D ) => ( 5000000000000000000 )
    • TryminexToken.transferFrom( _from=0x0f00e6BBdf6f70D435C3dD2A69cc853d04d2320D, _to=0x0000000000000000000000000aAaAaBbbbbCCccC, _value=4146283550384500800 ) => ( True )
    • ETH 0.006219425325576751 0xadac145be1356c46f3f91a2daa8bffd044ff5833.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();
          }
      }