Transaction Hash:
Block:
8243823 at Jul-29-2019 06:02:33 AM +UTC
Transaction Fee:
0.000174736 ETH
$0.33
Gas Used:
43,684 Gas / 4 Gwei
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x5A0b54D5...D3E029c4c
Miner
| (Spark Pool) | 6,054.751379472127419496 Eth | 6,054.751554208127419496 Eth | 0.000174736 | |
0xa44E5137...96fFCB037 | |||||
0xaE0dD7a5...3eAD34460 |
0.024024744596017359 Eth
Nonce: 14790
|
0.023850008596017359 Eth
Nonce: 14791
| 0.000174736 |
Execution Trace
Sentinel.approve( _spender=0x2a0c0DBEcC7E4D658f48E01e3fA353F44050c208, _value=16927953340591 ) => ( success=True )
approve[ERC20Token (ln:103)]
pragma solidity ^0.4.19; contract Owned { address public owner; function Owned( ) public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership( address _owner) onlyOwner public { require(_owner != 0x0); owner = _owner; } } interface tokenRecipient { function receiveApproval( address _from, uint256 _value, address _token, bytes _extraData) public; } contract ERC20Token { string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; 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); function ERC20Token( string _tokenName, string _tokenSymbol, uint8 _decimals, uint256 _totalSupply) public { name = _tokenName; symbol = _tokenSymbol; decimals = _decimals; totalSupply = _totalSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; } function _transfer( address _from, address _to, uint256 _value) internal { require(_to != 0x0); require(_from != 0x0); require(_from != _to); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); uint256 previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer( address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } function transferFrom( address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve( address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } 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; } } function burn( uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; Burn(msg.sender, _value); return true; } function burnFrom( address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; Burn(_from, _value); return true; } } contract Sentinel is Owned, ERC20Token { mapping (bytes32 => address) public services; function Sentinel( string _tokenName, string _tokenSymbol, uint8 _decimals, uint256 _totalSupply) ERC20Token(_tokenName, _tokenSymbol, _decimals, _totalSupply) public { } function deployService( bytes32 _serviceName, address _serviceAddress) onlyOwner public { services[_serviceName] = _serviceAddress; } function payService( bytes32 _serviceName, address _from, address _to, uint256 _value) public { require(msg.sender != 0x0); require(services[_serviceName] != 0x0); require(msg.sender == services[_serviceName]); require(_from != 0x0); require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); uint256 previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } }