Transaction Hash:
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 | ||
|---|---|---|---|---|---|
| 0x07093866...9BB5c22ec | |||||
| 0x20EE63FC...83E8D6710 |
0.009072760233314442 Eth
Nonce: 559
|
0.008674313233314442 Eth
Nonce: 560
| 0.000398447 | ||
|
0x5A0b54D5...D3E029c4c
Miner
| (Spark Pool) | 20.799273670036227742 Eth | 20.799672117036227742 Eth | 0.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);
}
}