Transaction Hash:
Block:
4186304 at Aug-21-2017 03:07:12 PM +UTC
Transaction Fee:
0.00278602 ETH
$5.96
Gas Used:
139,301 Gas / 20 Gwei
Emitted Events:
| 71 |
ZeusShieldCoin.Transfer( _from=0x25b6C13cd68a0a72Fe3d725568e6a68888fFaE75, _to=[Sender] 0x5cb1f30f65bbb9f539d0d6f60ea829f2199c331e, _value=304000000000000000000000 )
|
| 72 |
0x25b6c13cd68a0a72fe3d725568e6a68888ffae75.0xe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6( 0xe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6, 0000000000000000000000005cb1f30f65bbb9f539d0d6f60ea829f2199c331e, 00000000000000000000000000000000000000000000000107ad8f556c6c0000, 0000000000000000000000000000000000000000000000000000000000000001 )
|
Account State Difference:
| Address | Before | After | State Difference | ||
|---|---|---|---|---|---|
| 0x25b6C13c...888fFaE75 | 39,819.3005 Eth | 39,838.3005 Eth | 19 | ||
| 0x308D1F54...99a28E00c | |||||
|
0x4Bb96091...F90f81B01
Miner
| (Ethpool 2) | 274.364245869900314157 Eth | 274.367031889900314157 Eth | 0.00278602 | |
| 0x5cb1F30f...2199c331e |
19.978423304827984346 Eth
Nonce: 23
|
0.975637284827984346 Eth
Nonce: 24
| 19.00278602 | ||
| 0x7A41e051...B9fF6DC63 |
Execution Trace
ETH 19
0x308d1f54dfe1bb56b5ee81491c86e1a99a28e00c.CALL( )
ETH 19
0x25b6c13cd68a0a72fe3d725568e6a68888ffae75.2c6de316( )-
ZeusShieldCoin.transfer( _to=0x5cb1F30f65bBB9F539d0d6F60ea829f2199c331e, _amount=304000000000000000000000 ) => ( success=True )
-
pragma solidity ^0.4.11;
contract owned {
address public owner;
function owned() {
owner = msg.sender;
}
modifier onlyOwner {
if (msg.sender != owner) throw;
_;
}
function transferOwnership(address newOwner) onlyOwner {
owner = newOwner;
}
}
// ----------------------------------------------------------------------------------------------
// Original from:
// https://theethereum.wiki/w/index.php/ERC20_Token_Standard
// (c) BokkyPooBah 2017. The MIT Licence.
// ----------------------------------------------------------------------------------------------
// ERC Token Standard #20 Interface
// https://github.com/ethereum/EIPs/issues/20
contract ERC20Interface {
// Get the total token supply function totalSupply() constant returns (uint256 totalSupply);
// Get the account balance of another account with address _owner
function balanceOf(address _owner) constant returns (uint256 balance);
// Send _value amount of tokens to address _to
function transfer(address _to, uint256 _value) returns (bool success);
// Send _value amount of token from address _from to address _to
function transferFrom(address _from, address _to, uint256 _value) returns (bool success);
// Allow _spender to withdraw from your account, multiple times, up to the _value amount.
// If this function is called again it overwrites the current allowance with _value.
// this function is required for some DEX functionality
function approve(address _spender, uint256 _value) returns (bool success);
// Returns the amount which _spender is still allowed to withdraw from _owner
function allowance(address _owner, address _spender) constant returns (uint256 remaining);
// Triggered when tokens are transferred.
event Transfer(address indexed _from, address indexed _to, uint256 _value);
// Triggered whenever approve(address _spender, uint256 _value) is called.
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}
// Migration Agent interface
contract migration {
function migrateFrom(address _from, uint256 _value);
}
/// @title Zeus Shield Coin (ZSC)
contract ZeusShieldCoin is owned, ERC20Interface {
// Public variables of the token
string public constant standard = 'ERC20';
string public constant name = 'Zeus Shield Coin';
string public constant symbol = 'ZSC';
uint8 public constant decimals = 18;
uint public registrationTime = 0;
bool public registered = false;
uint256 public totalMigrated = 0;
address public migrationAgent = 0;
uint256 totalTokens = 0;
// This creates an array with all balances
mapping (address => uint256) balances;
// Owner of account approves the transfer of an amount to another account
mapping(address => mapping (address => uint256)) allowed;
// These are related to ZSC team members
mapping (address => bool) public frozenAccount;
mapping (address => uint[3]) public frozenTokens;
// Variables of token frozen rules for ZSC team members.
uint[3] public unlockat;
event Migrate(address _from, address _to, uint256 _value);
// Constructor
function ZeusShieldCoin()
{
}
// This unnamed function is called whenever someone tries to send ether to it
function ()
{
throw; // Prevents accidental sending of ether
}
function totalSupply()
constant
returns (uint256)
{
return totalTokens;
}
// What is the balance of a particular account?
function balanceOf(address _owner)
constant
returns (uint256)
{
return balances[_owner];
}
// Transfer the balance from owner's account to another account
function transfer(address _to, uint256 _amount)
returns (bool success)
{
if (!registered) return false;
if (_amount <= 0) return false;
if (frozenRules(msg.sender, _amount)) return false;
if (balances[msg.sender] >= _amount
&& balances[_to] + _amount > balances[_to]) {
balances[msg.sender] -= _amount;
balances[_to] += _amount;
Transfer(msg.sender, _to, _amount);
return true;
} else {
return false;
}
}
// Send _value amount of tokens from address _from to address _to
// The transferFrom method is used for a withdraw workflow, allowing contracts to send
// tokens on your behalf, for example to "deposit" to a contract address and/or to charge
// fees in sub-currencies; the command should fail unless the _from account has
// deliberately authorized the sender of the message via some mechanism; we propose
// these standardized APIs for approval:
function transferFrom(address _from, address _to, uint256 _amount)
returns (bool success)
{
if (!registered) return false;
if (_amount <= 0) return false;
if (frozenRules(_from, _amount)) return false;
if (balances[_from] >= _amount
&& allowed[_from][msg.sender] >= _amount
&& balances[_to] + _amount > balances[_to]) {
balances[_from] -= _amount;
allowed[_from][msg.sender] -= _amount;
balances[_to] += _amount;
Transfer(_from, _to, _amount);
return true;
} else {
return false;
}
}
// Allow _spender to withdraw from your account, multiple times, up to the _value amount.
// If this function is called again it overwrites the current allowance with _value.
function approve(address _spender, uint256 _amount)
returns (bool success)
{
allowed[msg.sender][_spender] = _amount;
Approval(msg.sender, _spender, _amount);
return true;
}
function allowance(address _owner, address _spender)
constant
returns (uint256 remaining)
{
return allowed[_owner][_spender];
}
/// @dev Set address of migration agent contract and enable migration
/// @param _agent The address of the MigrationAgent contract
function setMigrationAgent(address _agent)
public
onlyOwner
{
if (!registered) throw;
if (migrationAgent != 0) throw;
migrationAgent = _agent;
}
/// @dev Buyer can apply for migrating tokens to the new token contract.
/// @param _value The amount of token to be migrated
function applyMigrate(uint256 _value)
public
{
if (!registered) throw;
if (migrationAgent == 0) throw;
// Validate input value.
if (_value == 0) throw;
if (_value > balances[msg.sender]) throw;
balances[msg.sender] -= _value;
totalTokens -= _value;
totalMigrated += _value;
migration(migrationAgent).migrateFrom(msg.sender, _value);
Migrate(msg.sender, migrationAgent, _value);
}
/// @dev Register for crowdsale and do the token pre-allocation.
/// @param _tokenFactory The address of ICO-sale contract
/// @param _congressAddress The address of multisig token contract
function registerSale(address _tokenFactory, address _congressAddress)
public
onlyOwner
{
// The token contract can be only registered once.
if (!registered) {
// Total supply
totalTokens = 6100 * 1000 * 1000 * 10**18;
// (51%) of total supply to ico-sale contract
balances[_tokenFactory] = 3111 * 1000 * 1000 * 10**18;
// (34%) of total supply to the congress address for congress and partners
balances[_congressAddress] = 2074 * 1000 * 1000 * 10**18;
// Allocate rest (15%) of total supply to development team and contributors
// 915,000,000 * 10**18;
teamAllocation();
registered = true;
registrationTime = now;
unlockat[0] = registrationTime + 6 * 30 days;
unlockat[1] = registrationTime + 12 * 30 days;
unlockat[2] = registrationTime + 24 * 30 days;
}
}
/// @dev Allocate 15% of total supply to ten team members.
/// @param _account The address of account to be frozen.
/// @param _totalAmount The amount of tokens to be frozen.
function freeze(address _account, uint _totalAmount)
public
onlyOwner
{
frozenAccount[_account] = true;
frozenTokens[_account][0] = _totalAmount; // 100% of locked token within 6 months
frozenTokens[_account][1] = _totalAmount * 80 / 100; // 80% of locked token within 12 months
frozenTokens[_account][2] = _totalAmount * 50 / 100; // 50% of locked token within 24 months
}
/// @dev Allocate 15% of total supply to the team members.
function teamAllocation()
internal
{
// 1.5% of total supply allocated to each team member.
uint individual = 91500 * 1000 * 10**18;
balances[0xCDc5BDEFC6Fddc66E73250fCc2F08339e091dDA3] = individual; // 1.5%
balances[0x8b47D27b085a661E6306Ac27A932a8c0b1C11b84] = individual; // 1.5%
balances[0x825f4977DB4cd48aFa51f8c2c9807Ee89120daB7] = individual; // 1.5%
balances[0xcDf5D7049e61b2F50642DF4cb5a005b1b4A5cfc2] = individual; // 1.5%
balances[0xab0461FB41326a960d3a2Fe2328DD9A65916181d] = individual; // 1.5%
balances[0xd2A131F16e4339B2523ca90431322f559ABC4C3d] = individual; // 1.5%
balances[0xCcB4d663E6b05AAda0e373e382628B9214932Fff] = individual; // 1.5%
balances[0x60284720542Ff343afCA6a6DBc542901942260f2] = individual; // 1.5%
balances[0xcb6d0e199081A489f45c73D1D22F6de58596a99C] = individual; // 1.5%
balances[0x928D99333C57D31DB917B4c67D4d8a033F2143A7] = individual; // 1.5%
// Freeze tokens allocated to the team for at most two years.
// Freeze tokens in three phases
// 91500 * 1000 * 10**18; 100% of locked tokens within 6 months
// 73200 * 1000 * 10**18; 80% of locked tokens within 12 months
// 45750 * 1000 * 10**18; 50% of locked tokens within 24 months
freeze("0xCDc5BDEFC6Fddc66E73250fCc2F08339e091dDA3", individual);
freeze("0x8b47D27b085a661E6306Ac27A932a8c0b1C11b84", individual);
freeze("0x825f4977DB4cd48aFa51f8c2c9807Ee89120daB7", individual);
freeze("0xcDf5D7049e61b2F50642DF4cb5a005b1b4A5cfc2", individual);
freeze("0xab0461FB41326a960d3a2Fe2328DD9A65916181d", individual);
freeze("0xd2A131F16e4339B2523ca90431322f559ABC4C3d", individual);
freeze("0xCcB4d663E6b05AAda0e373e382628B9214932Fff", individual);
freeze("0x60284720542Ff343afCA6a6DBc542901942260f2", individual);
freeze("0xcb6d0e199081A489f45c73D1D22F6de58596a99C", individual);
freeze("0x928D99333C57D31DB917B4c67D4d8a033F2143A7", individual);
}
/// @dev Token frozen rules for token holders.
/// @param _from The token sender.
/// @param _value The token amount.
function frozenRules(address _from, uint256 _value)
internal
returns (bool success)
{
if (frozenAccount[_from]) {
if (now < unlockat[0]) {
// 100% locked within the first 6 months.
if (balances[_from] - _value < frozenTokens[_from][0])
return true;
} else if (now >= unlockat[0] && now < unlockat[1]) {
// 20% unlocked after 6 months.
if (balances[_from] - _value < frozenTokens[_from][1])
return true;
} else if (now >= unlockat[1] && now < unlockat[2]) {
// 50% unlocked after 12 months.
if (balances[_from]- _value < frozenTokens[_from][2])
return true;
} else {
// 100% unlocked after 24 months.
frozenAccount[_from] = false;
}
}
return false;
}
}