Transaction Hash:
Block:
5373872 at Apr-03-2018 03:54:15 PM +UTC
Transaction Fee:
0.000080781 ETH
$0.17
Gas Used:
80,781 Gas / 1 Gwei
Emitted Events:
| 166 |
AutoCoin.Transfer( _from=0xfD477040e9b83b182Cb6B23eFf1490aD963DC3E0, _to=0x3D26284DaBb413dFB3AAe0B8b4e1493f80C6d98A, _value=213267 )
|
| 167 |
0xfd477040e9b83b182cb6b23eff1490ad963dc3e0.0x5ddf6368f802ef01f7032fbc170dc21da77bd0aa1771c0dea7f51260820c8000( 0x5ddf6368f802ef01f7032fbc170dc21da77bd0aa1771c0dea7f51260820c8000, 0000000000000000000000003d26284dabb413dfb3aae0b8b4e1493f80c6d98a, 0000000000000000000000000000000000000000000000000000000000034113 )
|
Account State Difference:
| Address | Before | After | State Difference | ||
|---|---|---|---|---|---|
| 0x486915Ea...a1D230702 | |||||
| 0x85060d1B...E040C8bF4 |
0.047272767109344505 Eth
Nonce: 10355
|
0.047191986109344505 Eth
Nonce: 10356
| 0.000080781 | ||
|
0xb2930B35...e543a0347
Miner
| (MiningPoolHub: Old Address) | 27,321.01138207603733613 Eth | 27,321.01146285703733613 Eth | 0.000080781 |
Execution Trace
0x2ab10625428aaaee3c0092767c0fa635dd68c57c.a9059cbb( )
0x2ab10625428aaaee3c0092767c0fa635dd68c57c.CALL( )-
0x9044c820ddb704760fbcddea7a4ee59334daa881.CALL( ) -
0xfd477040e9b83b182cb6b23eff1490ad963dc3e0.CALL( ) -
0x9988028deb1430794c09660d4648d6b5919b769f.CALL( ) -
0x0761982bf08161492c6cc62c9a07a3dcb5876fbc.CALL( ) -
0xd2c061ebdbb98d08a0231818aafeecd80b1837a5.CALL( )
-
0xfd477040e9b83b182cb6b23eff1490ad963dc3e0.e1ad1162( )-
0xfd477040e9b83b182cb6b23eff1490ad963dc3e0.CALL( ) 0xfd477040e9b83b182cb6b23eff1490ad963dc3e0.CALL( )-
AutoCoin.balanceOf( _owner=0xfD477040e9b83b182Cb6B23eFf1490aD963DC3E0 ) => ( balance=242819421422 )
-
-
AutoCoin.userTransfer( _to=0x3D26284DaBb413dFB3AAe0B8b4e1493f80C6d98A, _value=213267 ) => ( success=True )
0xfd477040e9b83b182cb6b23eff1490ad963dc3e0.CALL( )-
AutoCoin.balanceOf( _owner=0xfD477040e9b83b182Cb6B23eFf1490aD963DC3E0 ) => ( balance=242819208155 )
-
-
pragma solidity ^0.4.15;
contract ERC20 {
function totalSupply() external constant returns (uint256 _totalSupply);
function balanceOf(address _owner) external constant returns (uint256 balance);
function userTransfer(address _to, uint256 _value) external returns (bool success);
function userTransferFrom(address _from, address _to, uint256 _value) external returns (bool success);
function userApprove(address _spender, uint256 _old, uint256 _new) external returns (bool success);
function allowance(address _owner, address _spender) external constant returns (uint256 remaining);
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
function ERC20() internal {
}
}
library SafeMath {
uint256 constant private MAX_UINT256 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
function safeAdd (uint256 x, uint256 y) internal pure returns (uint256 z) {
assert (x <= MAX_UINT256 - y);
return x + y;
}
function safeSub (uint256 x, uint256 y) internal pure returns (uint256 z) {
assert (x >= y);
return x - y;
}
function safeMul (uint256 x, uint256 y) internal pure returns (uint256 z) {
z = x * y;
assert(x == 0 || z / x == y);
}
function safeDiv (uint256 x, uint256 y) internal pure returns (uint256 z) {
z = x / y;
return z;
}
}
contract AutoCoin is ERC20 {
using SafeMath for uint256;
address public owner;
address private subowner;
uint256 private summarySupply;
uint256 public weiPerMinToken;
string public name = "Auto Token";
string public symbol = "ATK";
uint8 public decimals = 2;
bool public contractEnable = true;
bool public transferEnable = false;
mapping(address => uint8) private group;
mapping(address => uint256) private accounts;
mapping(address => mapping (address => uint256)) private allowed;
event EvGroupChanged(address _address, uint8 _oldgroup, uint8 _newgroup);
event EvTokenAdd(uint256 _value, uint256 _lastSupply);
event EvTokenRm(uint256 _delta, uint256 _value, uint256 _lastSupply);
event EvLoginfo(string _functionName, string _text);
event EvMigration(address _address, uint256 _balance, uint256 _secret);
struct groupPolicy {
uint8 _default;
uint8 _backend;
uint8 _migration;
uint8 _admin;
uint8 _subowner;
uint8 _owner;
}
groupPolicy private currentState = groupPolicy(0, 3, 9, 4, 2, 9);
function AutoCoin(string _name, string _symbol, uint8 _decimals, uint256 _weiPerMinToken, uint256 _startTokens) public {
owner = msg.sender;
group[msg.sender] = 9;
if (_weiPerMinToken != 0)
weiPerMinToken = _weiPerMinToken;
accounts[owner] = _startTokens;
summarySupply = _startTokens;
name = _name;
symbol = _symbol;
decimals = _decimals;
}
modifier minGroup(int _require) {
require(group[msg.sender] >= _require);
_;
}
modifier onlyPayloadSize(uint size) {
assert(msg.data.length >= size + 4);
_;
}
function serviceGroupChange(address _address, uint8 _group) minGroup(currentState._admin) external returns(uint8) {
uint8 old = group[_address];
if(old <= currentState._admin) {
group[_address] = _group;
EvGroupChanged(_address, old, _group);
}
return group[_address];
}
function serviceGroupGet(address _check) minGroup(currentState._backend) external constant returns(uint8 _group) {
return group[_check];
}
function settingsSetWeiPerMinToken(uint256 _weiPerMinToken) minGroup(currentState._admin) external {
if (_weiPerMinToken > 0) {
weiPerMinToken = _weiPerMinToken;
EvLoginfo("[weiPerMinToken]", "changed");
}
}
function serviceIncreaseBalance(address _who, uint256 _value) minGroup(currentState._backend) external returns(bool) {
accounts[_who] = accounts[_who].safeAdd(_value);
summarySupply = summarySupply.safeAdd(_value);
EvTokenAdd(_value, summarySupply);
return true;
}
function serviceDecreaseBalance(address _who, uint256 _value) minGroup(currentState._backend) external returns(bool) {
accounts[_who] = accounts[_who].safeSub(_value);
summarySupply = summarySupply.safeSub(_value);
EvTokenRm(accounts[_who], _value, summarySupply);
return true;
}
function serviceTokensBurn(address _address) external minGroup(currentState._backend) returns(uint256 balance) {
accounts[_address] = 0;
return accounts[_address];
}
function serviceChangeOwner(address _newowner) minGroup(currentState._subowner) external returns(address) {
address temp;
uint256 value;
if (msg.sender == owner) {
subowner = _newowner;
group[msg.sender] = currentState._subowner;
group[_newowner] = currentState._subowner;
EvGroupChanged(_newowner, currentState._owner, currentState._subowner);
}
if (msg.sender == subowner) {
temp = owner;
value = accounts[owner];
accounts[owner] = accounts[owner].safeSub(value);
accounts[subowner] = accounts[subowner].safeAdd(value);
owner = subowner;
delete group[temp];
group[subowner] = currentState._owner;
subowner = 0x00;
EvGroupChanged(_newowner, currentState._subowner, currentState._owner);
}
return subowner;
}
function userTransfer(address _to, uint256 _value) onlyPayloadSize(64) minGroup(currentState._default) external returns (bool success) {
if (accounts[msg.sender] >= _value && (transferEnable || group[msg.sender] >= currentState._backend)) {
accounts[msg.sender] = accounts[msg.sender].safeSub(_value);
accounts[_to] = accounts[_to].safeAdd(_value);
Transfer(msg.sender, _to, _value);
return true;
} else {
return false;
}
}
function userTransferFrom(address _from, address _to, uint256 _value) onlyPayloadSize(64) minGroup(currentState._default) external returns (bool success) {
if ((accounts[_from] >= _value) && (allowed[_from][msg.sender] >= _value) && (transferEnable || group[msg.sender] >= currentState._backend)) {
accounts[_from] = accounts[_from].safeSub(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].safeSub(_value);
accounts[_to] = accounts[_to].safeAdd(_value);
Transfer(_from, _to, _value);
return true;
} else {
return false;
}
}
function userApprove(address _spender, uint256 _old, uint256 _new) onlyPayloadSize(64) minGroup(currentState._default) external returns (bool success) {
if (_old == allowed[msg.sender][_spender]) {
allowed[msg.sender][_spender] = _new;
Approval(msg.sender, _spender, _new);
return true;
} else {
return false;
}
}
function allowance(address _owner, address _spender) external constant returns (uint256 remaining) {
return allowed[_owner][_spender];
}
function balanceOf(address _owner) external constant returns (uint256 balance) {
if (_owner == 0x00)
return accounts[msg.sender];
return accounts[_owner];
}
function totalSupply() external constant returns (uint256 _totalSupply) {
_totalSupply = summarySupply;
}
function destroy() minGroup(currentState._owner) external {
selfdestruct(owner);
}
function settingsSwitchState() external minGroup(currentState._owner) returns (bool state) {
if(contractEnable) {
currentState._default = 9;
currentState._migration = 0;
contractEnable = false;
} else {
currentState._default = 0;
currentState._migration = 9;
contractEnable = true;
}
return contractEnable;
}
function settingsSwitchTransferAccess() external minGroup(currentState._backend) returns (bool access) {
transferEnable = !transferEnable;
return transferEnable;
}
function userMigration(uint256 _secrect) external minGroup(currentState._migration) returns (bool successful) {
uint256 balance = accounts[msg.sender];
if (balance > 0) {
accounts[msg.sender] = accounts[msg.sender].safeSub(balance);
accounts[owner] = accounts[owner].safeAdd(balance);
EvMigration(msg.sender, balance, _secrect);
return true;
}
else
return false;
}
}