Transaction Hash:
Block:
5380651 at Apr-04-2018 06:51:12 PM +UTC
Transaction Fee:
0.00011456 ETH
$0.24
Gas Used:
22,912 Gas / 5 Gwei
Emitted Events:
| 24 |
IcxToken.Transfer( from=[Sender] 0x0868ad6edfa9848e91ad74b4391cf7fc56632d96, to=0x3f5CE5FBFe3E9af3971dD833D26bA9b5C936f0bE, value=307305495250000000000 )
|
Account State Difference:
| Address | Before | After | State Difference | ||
|---|---|---|---|---|---|
| 0x0868AD6E...C56632D96 |
0.03475798 Eth
Nonce: 0
|
0.03464342 Eth
Nonce: 1
| 0.00011456 | ||
|
0x52bc44d5...b7d7bE3b5
Miner
| (Nanopool) | 5,016.303232572524411091 Eth | 5,016.303347132524411091 Eth | 0.00011456 | |
| 0xb5A5F226...Bb2B11028 |
Execution Trace
IcxToken.transfer( to=0x3f5CE5FBFe3E9af3971dD833D26bA9b5C936f0bE, value=307305495250000000000 ) => ( success=True )
transfer[IcxToken (ln:187)]
pragma solidity ^0.4.11;
contract Migrations {
address public owner;
uint public last_completed_migration;
modifier restricted() {
if (msg.sender == owner) _;
}
function Migrations() {
owner = msg.sender;
}
function setCompleted(uint completed) restricted {
last_completed_migration = completed;
}
function upgrade(address new_address) restricted {
Migrations upgraded = Migrations(new_address);
upgraded.setCompleted(last_completed_migration);
}
}
contract ERC20 {
function totalSupply() constant returns (uint supply);
function balanceOf( address who ) constant returns (uint value);
function allowance( address owner, address spender ) constant returns (uint _allowance);
function transfer( address to, uint value) returns (bool ok);
function transferFrom( address from, address to, uint value) returns (bool ok);
function approve( address spender, uint value ) returns (bool ok);
event Transfer( address indexed from, address indexed to, uint value);
event Approval( address indexed owner, address indexed spender, uint value);
}
contract Lockable {
uint public creationTime;
bool public lock;
bool public tokenTransfer;
address public owner;
mapping( address => bool ) public unlockaddress;
mapping( address => bool ) public lockaddress;
event Locked(address lockaddress,bool status);
event Unlocked(address unlockedaddress, bool status);
// if Token transfer
modifier isTokenTransfer {
// if token transfer is not allow
if(!tokenTransfer) {
require(unlockaddress[msg.sender]);
}
_;
}
// This modifier check whether the contract should be in a locked
// or unlocked state, then acts and updates accordingly if
// necessary
modifier checkLock {
if (lockaddress[msg.sender]) {
throw;
}
_;
}
modifier isOwner {
require(owner == msg.sender);
_;
}
function Lockable() {
creationTime = now;
tokenTransfer = false;
owner = msg.sender;
}
// Lock Address
function lockAddress(address target, bool status)
external
isOwner
{
require(owner != target);
lockaddress[target] = status;
Locked(target, status);
}
// UnLock Address
function unlockAddress(address target, bool status)
external
isOwner
{
unlockaddress[target] = status;
Unlocked(target, status);
}
}
library SafeMath {
function mul(uint a, uint b) internal returns (uint) {
uint c = a * b;
assert(a == 0 || c / a == b);
return c;
}
function div(uint a, uint b) internal returns (uint) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
uint c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
function sub(uint a, uint b) internal returns (uint) {
assert(b <= a);
return a - b;
}
function add(uint a, uint b) internal returns (uint) {
uint c = a + b;
assert(c >= a);
return c;
}
function max64(uint64 a, uint64 b) internal constant returns (uint64) {
return a >= b ? a : b;
}
function min64(uint64 a, uint64 b) internal constant returns (uint64) {
return a < b ? a : b;
}
function max256(uint256 a, uint256 b) internal constant returns (uint256) {
return a >= b ? a : b;
}
function min256(uint256 a, uint256 b) internal constant returns (uint256) {
return a < b ? a : b;
}
function assert(bool assertion) internal {
if (!assertion) {
throw;
}
}
}
// ICON ICX Token
/// @author DongOk Ryu - <pop@theloop.co.kr>
contract IcxToken is ERC20, Lockable {
using SafeMath for uint;
mapping( address => uint ) _balances;
mapping( address => mapping( address => uint ) ) _approvals;
uint _supply;
address public walletAddress;
//event TokenMint(address newTokenHolder, uint amountOfTokens);
event TokenBurned(address burnAddress, uint amountOfTokens);
event TokenTransfer();
modifier onlyFromWallet {
require(msg.sender != walletAddress);
_;
}
function IcxToken( uint initial_balance, address wallet) {
require(wallet != 0);
require(initial_balance != 0);
_balances[msg.sender] = initial_balance;
_supply = initial_balance;
walletAddress = wallet;
}
function totalSupply() constant returns (uint supply) {
return _supply;
}
function balanceOf( address who ) constant returns (uint value) {
return _balances[who];
}
function allowance(address owner, address spender) constant returns (uint _allowance) {
return _approvals[owner][spender];
}
function transfer( address to, uint value)
isTokenTransfer
checkLock
returns (bool success) {
require( _balances[msg.sender] >= value );
_balances[msg.sender] = _balances[msg.sender].sub(value);
_balances[to] = _balances[to].add(value);
Transfer( msg.sender, to, value );
return true;
}
function transferFrom( address from, address to, uint value)
isTokenTransfer
checkLock
returns (bool success) {
// if you don't have enough balance, throw
require( _balances[from] >= value );
// if you don't have approval, throw
require( _approvals[from][msg.sender] >= value );
// transfer and return true
_approvals[from][msg.sender] = _approvals[from][msg.sender].sub(value);
_balances[from] = _balances[from].sub(value);
_balances[to] = _balances[to].add(value);
Transfer( from, to, value );
return true;
}
function approve(address spender, uint value)
isTokenTransfer
checkLock
returns (bool success) {
_approvals[msg.sender][spender] = value;
Approval( msg.sender, spender, value );
return true;
}
// burnToken burn tokensAmount for sender balance
function burnTokens(uint tokensAmount)
isTokenTransfer
external
{
require( _balances[msg.sender] >= tokensAmount );
_balances[msg.sender] = _balances[msg.sender].sub(tokensAmount);
_supply = _supply.sub(tokensAmount);
TokenBurned(msg.sender, tokensAmount);
}
function enableTokenTransfer()
external
onlyFromWallet {
tokenTransfer = true;
TokenTransfer();
}
function disableTokenTransfer()
external
onlyFromWallet {
tokenTransfer = false;
TokenTransfer();
}
}