Transaction Hash:
Block:
6678453 at Nov-10-2018 12:37:11 PM +UTC
Transaction Fee:
0.002526639 ETH
$4.78
Gas Used:
44,327 Gas / 57 Gwei
Emitted Events:
45 |
StormToken.Transfer( _from=[Receiver] 0xc8a29414160d9821d572f26b65fee1637dd81583, _to=[Sender] 0xba826fec90cefdf6706858e5fbafcb27a290fbe0, _value=249852100000000000000000 )
|
46 |
0x4f01001cf69785d4c37f03fd87398849411ccbba.0x3ffd89314c7891190d2190d5299c9887128a3d4081cf6e41a67722cae685d296( 0x3ffd89314c7891190d2190d5299c9887128a3d4081cf6e41a67722cae685d296, 000000000000000000000000c8a29414160d9821d572f26b65fee1637dd81583, 000000000000000000000000d0a4b8946cb52f0661273bfbc6fd0e0c75fc6433, 0000000000000000000000000000000000000000000034e8826d58d6fffa0000 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0xBA826fEc...7A290Fbe0 | (Upbit 2) |
455.685590397803891329 Eth
Nonce: 120034
|
455.683063758803891329 Eth
Nonce: 120035
| 0.002526639 | |
0xD0a4b894...C75Fc6433 | |||||
0xEA674fdD...16B898ec8
Miner
| (Ethermine) | 881.254983651265770958 Eth | 881.257510290265770958 Eth | 0.002526639 |
Execution Trace
0xc8a29414160d9821d572f26b65fee1637dd81583.6ea056a9( )
-
Upbit: Wallet Maker.3c18d318( )
0x3105d1027fdd1cf6b2d67056b61956249f6fc861.6ea056a9( )
-
Upbit: Wallet Maker.CALL( )
-
Upbit: Wallet Maker.CALL( )
-
StormToken.balanceOf( _owner=0xC8a29414160D9821D572F26B65fEE1637Dd81583 ) => ( balance=249852100000000000000000 )
-
Upbit: Wallet Maker.CALL( )
-
StormToken.transfer( _to=0xBA826fEc90CEFdf6706858E5FbaFcb27A290Fbe0, _value=249852100000000000000000 ) => ( success=True )
-
Upbit: Wallet Maker.764358e6( )
-
pragma solidity ^0.4.13; contract ItokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Owned { address public owner; address public newOwner; function Owned() { owner = msg.sender; } modifier onlyOwner { assert(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { require(_newOwner != owner); newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnerUpdate(owner, newOwner); owner = newOwner; newOwner = 0x0; } event OwnerUpdate(address _prevOwner, address _newOwner); } contract IERC20Token { function totalSupply() constant returns (uint256 totalSupply); function balanceOf(address _owner) constant returns (uint256 balance) {} function transfer(address _to, uint256 _value) returns (bool success) {} function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} function approve(address _spender, uint256 _value) returns (bool success) {} function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract Token is IERC20Token, Owned { using SafeMath for uint256; /* Public variables of the token */ string public standard; string public name; string public symbol; uint8 public decimals; address public crowdsaleContractAddress; /* Private variables of the token */ uint256 supply = 0; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowances; /* Events */ event Mint(address indexed _to, uint256 _value); // validates address is the crowdsale owner modifier onlyCrowdsaleOwner() { require(msg.sender == crowdsaleContractAddress); _; } /* Returns total supply of issued tokens */ function totalSupply() constant returns (uint256) { return supply; } /* Returns balance of address */ function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } /* Transfers tokens from your address to other */ function transfer(address _to, uint256 _value) returns (bool success) { require(_to != 0x0 && _to != address(this)); balances[msg.sender] = balances[msg.sender].sub(_value); // Deduct senders balance balances[_to] = balances[_to].add(_value); // Add recivers blaance Transfer(msg.sender, _to, _value); // Raise Transfer event return true; } /* Approve other address to spend tokens on your account */ function approve(address _spender, uint256 _value) returns (bool success) { allowances[msg.sender][_spender] = _value; // Set allowance Approval(msg.sender, _spender, _value); // Raise Approval event return true; } /* Approve and then communicate the approved contract in a single tx */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { ItokenRecipient spender = ItokenRecipient(_spender); // Cast spender to tokenRecipient contract approve(_spender, _value); // Set approval to contract for _value spender.receiveApproval(msg.sender, _value, this, _extraData); // Raise method on _spender contract return true; } /* A contract attempts to get the coins */ function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { require(_to != 0x0 && _to != address(this)); balances[_from] = balances[_from].sub(_value); // Deduct senders balance balances[_to] = balances[_to].add(_value); // Add recipient blaance allowances[_from][msg.sender] = allowances[_from][msg.sender].sub(_value); // Deduct allowance for this address Transfer(_from, _to, _value); // Raise Transfer event return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowances[_owner][_spender]; } function mintTokens(address _to, uint256 _amount) onlyCrowdsaleOwner { supply = supply.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(msg.sender, _to, _amount); } function salvageTokensFromContract(address _tokenAddress, address _to, uint _amount) onlyOwner { IERC20Token(_tokenAddress).transfer(_to, _amount); } } contract StormToken is Token { bool public transfersEnabled = false; // true if transfer/transferFrom are enabled, false if not // triggered when the total supply is increased event Issuance(uint256 _amount); // triggered when the total supply is decreased event Destruction(uint256 _amount); /* Initializes contract */ function StormToken(address _crowdsaleAddress) public { standard = "Storm Token v1.0"; name = "Storm Token"; symbol = "STORM"; // token symbol decimals = 18; crowdsaleContractAddress = _crowdsaleAddress; } // validates an address - currently only checks that it isn't null modifier validAddress(address _address) { require(_address != 0x0); _; } // verifies that the address is different than this contract address modifier notThis(address _address) { require(_address != address(this)); _; } // allows execution only when transfers aren't disabled modifier transfersAllowed { assert(transfersEnabled); _; } /** @dev disables/enables transfers can only be called by the contract owner @param _disable true to disable transfers, false to enable them */ function disableTransfers(bool _disable) public onlyOwner { transfersEnabled = !_disable; } /** @dev increases the token supply and sends the new tokens to an account can only be called by the contract owner @param _to account to receive the new amount @param _amount amount to increase the supply by */ function issue(address _to, uint256 _amount) public onlyOwner validAddress(_to) notThis(_to) { supply = supply.add(_amount); balances[_to] = balances[_to].add(_amount); Issuance(_amount); Transfer(this, _to, _amount); } /** @dev removes tokens from an account and decreases the token supply can be called by the contract owner to destroy tokens from any account or by any holder to destroy tokens from his/her own account @param _from account to remove the amount from @param _amount amount to decrease the supply by */ function destroy(address _from, uint256 _amount) public { require(msg.sender == _from || msg.sender == owner); // validate input balances[_from] = balances[_from].sub(_amount); supply = supply.sub(_amount); Transfer(_from, this, _amount); Destruction(_amount); } // ERC20 standard method overrides with some extra functionality /** @dev send coins throws on any error rather then return a false flag to minimize user errors in addition to the standard checks, the function throws if transfers are disabled @param _to target address @param _value transfer amount @return true if the transfer was successful, false if it wasn't */ function transfer(address _to, uint256 _value) public transfersAllowed returns (bool success) { assert(super.transfer(_to, _value)); return true; } function transfers(address[] _recipients, uint256[] _values) public transfersAllowed onlyOwner returns (bool success) { require(_recipients.length == _values.length); // Check if input data is correct for (uint cnt = 0; cnt < _recipients.length; cnt++) { assert(super.transfer(_recipients[cnt], _values[cnt])); } return true; } /** @dev an account/contract attempts to get the coins throws on any error rather then return a false flag to minimize user errors in addition to the standard checks, the function throws if transfers are disabled @param _from source address @param _to target address @param _value transfer amount @return true if the transfer was successful, false if it wasn't */ function transferFrom(address _from, address _to, uint256 _value) public transfersAllowed returns (bool success) { assert(super.transferFrom(_from, _to, _value)); return true; } }