Transaction Hash:
Block:
7891453 at Jun-04-2019 07:15:07 AM +UTC
Transaction Fee:
0.000115671 ETH
$0.31
Gas Used:
38,557 Gas / 3 Gwei
Emitted Events:
120 |
HxroTokenContract.Transfer( from=[Sender] 0x4eba4f0d7213a39cb518fab1b62fc490fe0ccf47, to=0x06cA77D33a05CcAb0Afe4481480aE0ba10B5a595, value=102000000000000000000 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x4bD70556...4325438f3 | |||||
0x4Eba4F0d...0fE0Ccf47 |
0.00116927617143923 Eth
Nonce: 59
|
0.00105360517143923 Eth
Nonce: 60
| 0.000115671 | ||
0xEA674fdD...16B898ec8
Miner
| (Ethermine) | 830.234211193921562114 Eth | 830.234326864921562114 Eth | 0.000115671 |
Execution Trace
HxroTokenContract.transfer( _to=0x06cA77D33a05CcAb0Afe4481480aE0ba10B5a595, _value=102000000000000000000 ) => ( success=True )
transfer[HxroTokenContract (ln:75)]
_transfer[HxroTokenContract (ln:76)]
Transfer[HxroTokenContract (ln:62)]
pragma solidity ^0.4.24; contract Owner { address public owner; constructor() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner, "Sender Not Authorized"); _; } function transferOwnership(address newOwner) onlyOwner public { owner = newOwner; } } interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract HxroTokenContract is Owner { string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; uint256 public lockedFund; string public version; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); constructor (uint256 _initialSupply, string _tokenName, string _tokenSymbol, uint8 _decimals, uint256 _lockedFund) public { totalSupply = _initialSupply * 10 ** uint256(_decimals); lockedFund = _lockedFund * 10 ** uint256(_decimals); balanceOf[msg.sender] = totalSupply - lockedFund; decimals = _decimals; name = _tokenName; symbol = _tokenSymbol; version = "v6"; } /** * Internal transfer, only can be called by this contract */ function _transfer(address _from, address _to, uint _value) internal { // Prevent transfer to 0x0 address. Use burn() instead require(_to != 0x0, "Valid Address Require"); // Check if the sender has enough require(balanceOf[_from] >= _value, "Balance Insufficient"); // Check for overflows require(balanceOf[_to] + _value >= balanceOf[_to], "Amount Overflow"); // Save this for an assertion in the future uint previousBalances = balanceOf[_from] + balanceOf[_to]; // Subtract from the sender balanceOf[_from] -= _value; // Add the same to the recipient balanceOf[_to] += _value; emit Transfer(_from, _to, _value); // Asserts are used to use static analysis to find bugs in your code. They should never fail assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } /** * Transfer tokens * * Send `_value` tokens to `_to` from your account * * @param _to The address of the recipient * @param _value the amount to send */ function transfer(address _to, uint256 _value) public returns (bool success) { _transfer(msg.sender, _to, _value); return true; } /** * Transfer tokens from other address * * Send `_value` tokens to `_to` on behalf of `_from` * * @param _from The address of the sender * @param _to The address of the recipient * @param _value the amount to send */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender], "Exceed Allowance"); // Check allowance allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } /** * Set allowance for other address * * Allows `_spender` to spend no more than `_value` tokens on your behalf * * @param _spender The address authorized to spend * @param _value the max amount they can spend */ function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } /** * Set allowance for other address and notify * * Allows `_spender` to spend no more than `_value` tokens on your behalf, and then ping the contract about it * * @param _spender The address authorized to spend * @param _value the max amount they can spend * @param _extraData some extra information to send to the approved contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } /** * Destroy tokens * * Remove `_value` tokens from the system irreversibly * * @param _value the amount of money to burn */ function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value, "Balance Insufficient"); // Check if the sender has enough balanceOf[msg.sender] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply emit Burn(msg.sender, _value); return true; } /** * Destroy tokens from other account * * Remove `_value` tokens from the system irreversibly on behalf of `_from`. * * @param _from the address of the sender * @param _value the amount of money to burn */ function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value, "Balance Insufficient"); // Check if the targeted balance is enough require(_value <= allowance[_from][msg.sender], "Exceed Allowance"); // Check allowance balanceOf[_from] -= _value; // Subtract from the targeted balance allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance totalSupply -= _value; // Update totalSupply emit Burn(_from, _value); return true; } function sweep(address _from, address _to, uint256 _value) public onlyOwner { require(_from != 0x0, "Invalid Sender Address"); require(_to != 0x0, "Invalid Recipient Address"); require(_value != 0, "Amount should not be 0"); allowance[_from][msg.sender] += _value; transferFrom(_from, _to, _value); } function getMetaData() public view returns(string, string, uint8, uint256, string, address, uint256){ return (name, symbol, decimals, totalSupply, version, owner, lockedFund); } function releaseLockedFund(address _to, uint256 _amount) public onlyOwner { require(_to != 0x0, "Valid Address Required!"); require(_amount <= lockedFund, "Amount Exceeded Locked Fund"); lockedFund -= _amount; balanceOf[_to] += _amount; } }