Transaction Hash:
Block:
6802898 at Nov-30-2018 10:34:35 PM +UTC
Transaction Fee:
0.00036755 ETH
$0.93
Gas Used:
36,755 Gas / 10 Gwei
Emitted Events:
90 |
InitialMTTokenIMT.Transfer( _from=[Sender] 0xec8e21b361e5ff0e833ff6e9ba20a99636766765, _to=0xfdcC4CbFAc58310e7148AbB2db2F3a5b27A04453, _value=35000000000000000000000 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x13119E34...bC375D9e6 | |||||
0xb2930B35...e543a0347
Miner
| (MiningPoolHub: Old Address) | 15,705.410282502135805353 Eth | 15,705.410650052135805353 Eth | 0.00036755 | |
0xEC8E21b3...636766765 |
0.0016330899998 Eth
Nonce: 1
|
0.0012655399998 Eth
Nonce: 2
| 0.00036755 |
Execution Trace
InitialMTTokenIMT.transfer( _to=0xfdcC4CbFAc58310e7148AbB2db2F3a5b27A04453, _value=35000000000000000000000 ) => ( success=True )
pragma solidity ^0.4.21; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure 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 a / b; } 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 c) { c = a + b; assert(c >= a); return c; } } /** * @title Owned Interface * @dev Owned is interface for owner contract */ contract Owned { constructor() public { owner = msg.sender; } address owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } /** * @title InitialMTTokenIMT Interface * @dev InitialMTTokenIMT is a token ERC20 contract for MTTokenIMT (MTTokenIMT.com) */ contract IMTTokenIMTInterface is Owned { /** total amount of tokens **/ uint256 public totalSupply; /** * @param _owner The address from which the balance will be retrieved * @return The balance **/ function balanceOf(address _owner) public view returns (uint256 balance); /** @notice send `_value` token to `_to` from `msg.sender` * @param _to The address of the recipient * @param _value The amount of token to be transferred * @return Whether the transfer was successful or not **/ function transfer(address _to, uint256 _value) public returns (bool success); /** * @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` * @param _from The address of the sender * @param _to The address of the recipient * @param _value The amount of token to be transferred * @return Whether the transfer was successful or not **/ function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); /** * @notice `msg.sender` approves `_spender` to spend `_value` tokens * @param _spender The address of the account able to transfer the tokens * @param _value The amount of tokens to be approved for transfer * @return Whether the approval was successful or not **/ function approve(address _spender, uint256 _value) public returns (bool success); /** @param _owner The address of the account owning tokens * @param _spender The address of the account able to transfer the tokens * @return Amount of remaining tokens allowed to spent **/ function allowance(address _owner, address _spender) public view returns (uint256 remaining); // solhint-disable-next-line no-simple-event-func-name event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } /** * @title InitialMTTokenIMT * @dev InitialMTTokenIMT is a token ERC20 contract for MTTokenIMT (MTTokenIMT.com) */ contract InitialMTTokenIMT is IMTTokenIMTInterface { using SafeMath for uint256; mapping (address => uint256) public balances; mapping (address => mapping (address => uint256)) public allowed; //specific events event Burn(address indexed burner, uint256 value); string public name; //Initial Money Token uint8 public decimals; //18 string public symbol; //IMT constructor ( uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol ) public { balances[msg.sender] = _initialAmount; // Give the creator all initial tokens totalSupply = _initialAmount; // Update total supply name = _tokenName; // Set the name for display purposes decimals = _decimalUnits; // Amount of decimals for display purposes symbol = _tokenSymbol; // Set the symbol for display purposes } function transfer(address _to, uint256 _value) public returns (bool success) { _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { _transferFrom(msg.sender, _from, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } function burn(uint256 _value) public onlyOwner returns (bool success) { _burn(msg.sender, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { require((_value == 0) || (allowed[msg.sender][_spender] == 0)); allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256 remaining) { return allowed[_owner][_spender]; } /** * Specific functins for contract **/ //resend any tokens function transferAnyERC20Token(address tokenAddress, uint256 tokens) public onlyOwner returns (bool success){ return IMTTokenIMTInterface(tokenAddress).transfer(owner, tokens); } /** * internal functions **/ //burn function function _burn(address _who, uint256 _value) internal returns (bool success) { balances[_who] = balances[_who].sub(_value); totalSupply = totalSupply.sub(_value); emit Burn(_who, _value); emit Transfer(_who, address(0), _value); return true; } function _transfer(address _from, address _to, uint256 _value) internal returns (bool success) { balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function _transferFrom(address _who, address _from, address _to, uint256 _value) internal returns (bool success) { uint256 allow = allowed[_from][_who]; require(balances[_from] >= _value && allow >= _value); balances[_to] = balances[_to].add(_value); balances[_from] = balances[_from].sub(_value); allowed[_from][_who] = allowed[_from][_who].sub(_value); emit Transfer(_from, _to, _value); return true; } }