Transaction Hash:
Block:
7661674 at Apr-29-2019 09:56:18 AM +UTC
Transaction Fee:
0.00036786 ETH
$0.89
Gas Used:
36,786 Gas / 10 Gwei
Emitted Events:
32 |
Asset.Transfer( _from=[Sender] 0xdebf62e7196ea55d792f108cc9685718c773d35e, _to=0x456c93fe8B3995400AB57255BC4fc8Fa69F15927, _value=2000000000000000000000 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x925E368c...Bb07F337b | |||||
0xb2930B35...e543a0347
Miner
| (MiningPoolHub: Old Address) | 6,421.356248664980862324 Eth | 6,421.356616524980862324 Eth | 0.00036786 | |
0xDeBf62e7...8C773D35E |
0.273700149 Eth
Nonce: 79
|
0.273332289 Eth
Nonce: 80
| 0.00036786 |
Execution Trace
Asset.transfer( _to=0x456c93fe8B3995400AB57255BC4fc8Fa69F15927, _value=2000000000000000000000 ) => ( success=True )
transfer[ERC20TokenInterface (ln:34)]
pragma solidity 0.4.19; /** * @title TOKEN Contract * @dev ERC-20 Token Standard Compliant * @notice Website: Ze.cash * @author Fares A. Akel C. [email protected] */ /** * @title SafeMath by OpenZeppelin * @dev Math operations with safety checks that throw on error */ library SafeMath { function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * Token contract interface for external use */ contract ERC20TokenInterface { function balanceOf(address _owner) public constant returns (uint256 value); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public constant returns (uint256 remaining); } /** * @title Admin parameters * @dev Define administration parameters for this contract */ contract admined { //This token contract is administered address public admin; //Admin address is public bool public lockSupply; //Supply Lock flag /** * @dev Contract constructor * define initial administrator */ function admined() internal { admin = msg.sender; //Set initial admin to contract creator Admined(admin); } modifier onlyAdmin() { //A modifier to define admin-only functions require(msg.sender == admin); _; } modifier supplyLock() { //A modifier to lock mint and burn transactions require(lockSupply == false); _; } /** * @dev Function to set new admin address * @param _newAdmin The address to transfer administration to */ function transferAdminship(address _newAdmin) onlyAdmin public { //Admin can be transfered require(_newAdmin != address(0)); admin = _newAdmin; TransferAdminship(admin); } /** * @dev Function to set mint and burn locks * @param _set boolean flag (true | false) */ function setSupplyLock(bool _set) onlyAdmin public { //Only the admin can set a lock on supply lockSupply = _set; SetSupplyLock(_set); } //All admin actions have a log for public review event SetSupplyLock(bool _set); event TransferAdminship(address newAdminister); event Admined(address administer); } /** * @title Token definition * @dev Define token paramters including ERC20 ones */ contract ERC20Token is ERC20TokenInterface, admined { //Standard definition of a ERC20Token using SafeMath for uint256; uint256 public totalSupply; mapping (address => uint256) balances; //A mapping of all balances per address mapping (address => mapping (address => uint256)) allowed; //A mapping of all allowances /** * @dev Get the balance of an specified address. * @param _owner The address to be query. */ function balanceOf(address _owner) public constant returns (uint256 value) { return balances[_owner]; } /** * @dev transfer token to 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 success) { require(_to != address(0)); //If you dont want that people destroy token balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev transfer token from an address to another specified address using allowance * @param _from The address where token comes. * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_to != address(0)); //If you dont want that people destroy token allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(_from, _to, _value); return true; } /** * @dev Assign allowance to an specified address to use the owner balance * @param _spender The address to be allowed to spend. * @param _value The amount to be allowed. */ function approve(address _spender, uint256 _value) public returns (bool success) { require((_value == 0) || (allowed[msg.sender][_spender] == 0)); //exploit mitigation allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Get the allowance of an specified address to use another address balance. * @param _owner The address of the owner of the tokens. * @param _spender The address of the allowed spender. */ function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /** * @dev Burn token of an specified address. * @param _burnedAmount amount to burn. */ function burnToken(uint256 _burnedAmount) onlyAdmin supplyLock public { balances[msg.sender] = SafeMath.sub(balances[msg.sender], _burnedAmount); totalSupply = SafeMath.sub(totalSupply, _burnedAmount); Burned(msg.sender, _burnedAmount); } /** * @dev Log Events */ event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Burned(address indexed _target, uint256 _value); } /** * @title Asset * @dev Initial supply creation */ contract Asset is ERC20Token { string public name = 'ZECASH'; uint8 public decimals = 18; string public symbol = 'ZCH'; string public version = '1'; function Asset() public { totalSupply = 500000000 * (10**uint256(decimals)); //initial token creation balances[msg.sender] = totalSupply; Transfer(0, this, totalSupply); Transfer(this, msg.sender, balances[msg.sender]); } /** * @dev Function to handle callback calls */ function() public { revert(); } }