ETH Price: $2,073.56 (-0.65%)

Transaction Decoder

Block:
9115280 at Dec-16-2019 11:11:30 AM +UTC
Transaction Fee:
0.000398447 ETH $0.83
Gas Used:
398,447 Gas / 1 Gwei

Emitted Events:

112 0x07093866f83eccff694bbc64cbade129bb5c22ec.0xdb2077a80019770fd97de92bd94da09155a371ffdddfcc2e4ceeb645ffd6862c( 0xdb2077a80019770fd97de92bd94da09155a371ffdddfcc2e4ceeb645ffd6862c, 0000000000000000000000000000000000000000000000000000000000000020, 0000000000000000000000000000000000000000000000000000000000000011, 5472696767657265642062792067616d65000000000000000000000000000000 )
113 0x07093866f83eccff694bbc64cbade129bb5c22ec.0x193a1a016198e3204afbf7747be0ac4509c80eab91462c9441b92e0184b2f4e9( 0x193a1a016198e3204afbf7747be0ac4509c80eab91462c9441b92e0184b2f4e9, 00000000000000000000000020ee63fc531fcb167b08f103f55108383e8d6710, 00000000000000000000000000000000000000000000000000000000000005dc, 000000000000000000000000000000000000000000000000000000000000082f )
114 GUPToken.Transfer( _from=0x2f270Ae28D4c7daD8EbdCe00EFaAC0FfDd627B0e, _recipient=[Sender] 0x20ee63fc531fcb167b08f103f55108383e8d6710, _value=1500000 )
115 0x2f270ae28d4c7dad8ebdce00efaac0ffdd627b0e.0x8aa89c45e00b1dc8befa3736e4d341042a1cd0021a629920526985a6028f7525( 0x8aa89c45e00b1dc8befa3736e4d341042a1cd0021a629920526985a6028f7525, 00000000000000000000000020ee63fc531fcb167b08f103f55108383e8d6710, 000000000000000000000000000000000000000000000000000000000016e360 )

Account State Difference:

  Address   Before After State Difference Code
0x07093866...9BB5c22ec
0x20EE63FC...83E8D6710
0.009072760233314442 Eth
Nonce: 559
0.008674313233314442 Eth
Nonce: 560
0.000398447
(Spark Pool)
20.799273670036227742 Eth20.799672117036227742 Eth0.000398447
0xf7B09829...60792894C

Execution Trace

0x07093866f83eccff694bbc64cbade129bb5c22ec.aa67be03( )
  • Null: 0x000...001.f17bfb03( )
  • 0x2f270ae28d4c7dad8ebdce00efaac0ffdd627b0e.639a4c8b( )
    • GUPToken.transfer( _recipient=0x20EE63FC531FCb167b08f103F55108383E8D6710, _amount=1500000 ) => ( o_success=True )
      pragma solidity ^0.4.8;
      
      
      contract SafeMath {
      
        function assert(bool assertion) internal {
          if (!assertion) throw;
        }
      
        function safeMul(uint a, uint b) internal returns (uint) {
          uint c = a * b;
          assert(a == 0 || c / a == b);
          return c;
        }
      
        function safeDiv(uint a, uint b) internal returns (uint) {
          assert(b > 0);
          uint c = a / b;
          assert(a == b * c + a % b);
          return c;
        }
      
      }
      
      
      contract StandardTokenProtocol {
      
          function totalSupply() constant returns (uint256 totalSupply) {}
          function balanceOf(address _owner) constant returns (uint256 balance) {}
          function transfer(address _recipient, uint256 _value) returns (bool success) {}
          function transferFrom(address _from, address _recipient, uint256 _value) returns (bool success) {}
          function approve(address _spender, uint256 _value) returns (bool success) {}
          function allowance(address _owner, address _spender) constant returns (uint256 remaining) {}
      
          event Transfer(address indexed _from, address indexed _recipient, uint256 _value);
          event Approval(address indexed _owner, address indexed _spender, uint256 _value);
      
      }
      
      
      contract StandardToken is StandardTokenProtocol {
      
          modifier when_can_transfer(address _from, uint256 _value) {
              if (balances[_from] >= _value) _;
          }
      
          modifier when_can_receive(address _recipient, uint256 _value) {
              if (balances[_recipient] + _value > balances[_recipient]) _;
          }
      
          modifier when_is_allowed(address _from, address _delegate, uint256 _value) {
              if (allowed[_from][_delegate] >= _value) _;
          }
      
          function transfer(address _recipient, uint256 _value)
              when_can_transfer(msg.sender, _value)
              when_can_receive(_recipient, _value)
              returns (bool o_success)
          {
              balances[msg.sender] -= _value;
              balances[_recipient] += _value;
              Transfer(msg.sender, _recipient, _value);
              return true;
          }
      
          function transferFrom(address _from, address _recipient, uint256 _value)
              when_can_transfer(_from, _value)
              when_can_receive(_recipient, _value)
              when_is_allowed(_from, msg.sender, _value)
              returns (bool o_success)
          {
              allowed[_from][msg.sender] -= _value;
              balances[_from] -= _value;
              balances[_recipient] += _value;
              Transfer(_from, _recipient, _value);
              return true;
          }
      
          function balanceOf(address _owner) constant returns (uint256 balance) {
              return balances[_owner];
          }
      
          function approve(address _spender, uint256 _value) returns (bool o_success) {
              allowed[msg.sender][_spender] = _value;
              Approval(msg.sender, _spender, _value);
              return true;
          }
      
          function allowance(address _owner, address _spender) constant returns (uint256 o_remaining) {
              return allowed[_owner][_spender];
          }
      
          mapping (address => uint256) balances;
          mapping (address => mapping (address => uint256)) allowed;
          uint256 public totalSupply;
      
      }
      
      contract GUPToken is StandardToken {
      
      	//FIELDS
      	string public name = "Guppy";
          string public symbol = "GUP";
          uint public decimals = 3;
      
      	//CONSTANTS
      	uint public constant LOCKOUT_PERIOD = 1 years; //time after end date that illiquid GUP can be transferred
      
      	//ASSIGNED IN INITIALIZATION
      	uint public endMintingTime; //Timestamp after which no more tokens can be created
      	address public minter; //address of the account which may mint new tokens
      
      	mapping (address => uint) public illiquidBalance; //Balance of 'Frozen funds'
      
      	//MODIFIERS
      	//Can only be called by contribution contract.
      	modifier only_minter {
      		if (msg.sender != minter) throw;
      		_;
      	}
      
      	// Can only be called if illiquid tokens may be transformed into liquid.
      	// This happens when `LOCKOUT_PERIOD` of time passes after `endMintingTime`.
      	modifier when_thawable {
      		if (now < endMintingTime + LOCKOUT_PERIOD) throw;
      		_;
      	}
      
      	// Can only be called if (liquid) tokens may be transferred. Happens
      	// immediately after `endMintingTime`.
      	modifier when_transferable {
      		if (now < endMintingTime) throw;
      		_;
      	}
      
      	// Can only be called if the `crowdfunder` is allowed to mint tokens. Any
      	// time before `endMintingTime`.
      	modifier when_mintable {
      		if (now >= endMintingTime) throw;
      		_;
      	}
      
      	// Initialization contract assigns address of crowdfund contract and end time.
      	function GUPToken(address _minter, uint _endMintingTime) {
      		endMintingTime = _endMintingTime;
      		minter = _minter;
      	}
      
      	// Create new tokens when called by the crowdfund contract.
      	// Only callable before the end time.
      	function createToken(address _recipient, uint _value)
      		when_mintable
      		only_minter
      		returns (bool o_success)
      	{
      		balances[_recipient] += _value;
      		totalSupply += _value;
      		return true;
      	}
      
      	// Create an illiquidBalance which cannot be traded until end of lockout period.
      	// Can only be called by crowdfund contract before the end time.
      	function createIlliquidToken(address _recipient, uint _value)
      		when_mintable
      		only_minter
      		returns (bool o_success)
      	{
      		illiquidBalance[_recipient] += _value;
      		totalSupply += _value;
      		return true;
      	}
      
      	// Make sender's illiquid balance liquid when called after lockout period.
      	function makeLiquid()
      		when_thawable
      	{
      		balances[msg.sender] += illiquidBalance[msg.sender];
      		illiquidBalance[msg.sender] = 0;
      	}
      
      	// Transfer amount of tokens from sender account to recipient.
      	// Only callable after the crowd fund end date.
      	function transfer(address _recipient, uint _amount)
      		when_transferable
      		returns (bool o_success)
      	{
      		return super.transfer(_recipient, _amount);
      	}
      
      	// Transfer amount of tokens from a specified address to a recipient.
      	// Only callable after the crowd fund end date.
      	function transferFrom(address _from, address _recipient, uint _amount)
      		when_transferable
      		returns (bool o_success)
      	{
      		return super.transferFrom(_from, _recipient, _amount);
      	}
      }