Transaction Hash:
Block:
9043405 at Dec-03-2019 11:19:44 AM +UTC
Transaction Fee:
0.019074001666994049 ETH
$41.05
Gas Used:
1,889,049 Gas / 10.097145001 Gwei
Emitted Events:
| 76 |
ERC20Token.Transfer( from=[Sender] 0xe88c6400d4100241ea8350ae216143d2f92242b7, to=0x0000000000000000000000000000000000000000, value=126000000000000000000 )
|
Account State Difference:
| Address | Before | After | State Difference | ||
|---|---|---|---|---|---|
| 0x0f067B25...C33b94185 | |||||
| 0x56C438eE...8cDfc928e | |||||
|
0x5A0b54D5...D3E029c4c
Miner
| (Spark Pool) | 71.970569238433605993 Eth | 71.989643240100600042 Eth | 0.019074001666994049 | |
| 0x60Cf2840...7d3185236 | 1,632.4084575665143296 Eth | 1,631.0084575665143296 Eth | 1.4 | ||
| 0x80ae2Bad...D6C23e30F | |||||
| 0xD1c9381F...091053f2d | |||||
| 0xe88C6400...2F92242B7 |
0.38325400172911988 Eth
Nonce: 14
|
1.764180000062125831 Eth
Nonce: 15
| 1.380925998333005951 |
Execution Trace
0x60cf284021f58e87d3360cbec8b906e7d3185236.CALL( )
-
0x4637e862967a7178f61073acb5b6cf0ec66c2580.232012a5( ) -
ERC20Token.balanceOf( _owner=0xe88C6400D4100241ea8350aE216143d2F92242B7 ) => ( balance=4068148800000000000000 )
-
0x0f067b256a0c72e309c99a061e132a9c33b94185.590deeaf( ) -
ERC20Token.API_MoveToken( _from=0xe88C6400D4100241ea8350aE216143d2F92242B7, _to=0x0000000000000000000000000000000000000000, _value=126000000000000000000 )
-
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( ) -
0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( ) -
0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( ) -
0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( ) -
0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( ) -
0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( ) -
0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( ) -
0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( ) -
0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( ) -
0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( ) -
0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( ) -
0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( ) -
0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.c4226807( ) -
0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( ) 0x721ec7dfbf4126b946ed1d052dd3c83417b0a0cc.b545ddac( )-
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( ) -
0x8f36a0b0b8fdbba7bcb6fe00d8d6747144cbcc1a.96f0ff62( )
-
-
0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( ) -
0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( ) -
0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( ) -
0x0f067b256a0c72e309c99a061e132a9c33b94185.9ccc6387( ) -
0xd1c9381fa61896c792f856d8497967f091053f2d.f0f80ad0( ) -
0x0f067b256a0c72e309c99a061e132a9c33b94185.acc1ae85( ) - ETH 1.4
0xe88c6400d4100241ea8350ae216143d2f92242b7.CALL( ) -
0x80ae2badded437e5f5e1b3d5c667828d6c23e30f.538140eb( )
// File: contracts/interface/token/ERC20Interface.sol
///////////////////////////////////////////////////////////////////////////////////
//// Standard ERC-20 token contract (EPK) ///
///////////////////////////////////////////////////////////////////////////////////
/// ///
/// Standard ERC-20 token contract definition as mentioned above ///
/// ///
///////////////////////////////////////////////////////////////////////////////////
/// Mr.K by 2019/08/01 ///
///////////////////////////////////////////////////////////////////////////////////
pragma solidity >=0.5.0 <0.6.0;
contract ERC20Interface
{
uint256 public totalSupply;
string public name;
uint8 public decimals;
string public symbol;
function balanceOf(address _owner) public view returns (uint256 balance);
function transfer(address _to, uint256 _value) public returns (bool success);
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
function approve(address _spender, uint256 _value) public returns (bool success);
function allowance(address _owner, address _spender) public view returns (uint256 remaining);
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
/// 只有合约可以调用的内部API
function API_MoveToken(address _from, address _to, uint256 _value) external;
}
// File: contracts/interface/ticket/TicketInterface.sol
///////////////////////////////////////////////////////////////////////////////////
//// EPK record contract ///
///////////////////////////////////////////////////////////////////////////////////
/// ///
/// Used to pay EPK to unlock accounts, record payment results, and provide a ///
/// query method for querying whether one account has been unlocked. ///
/// ///
///////////////////////////////////////////////////////////////////////////////////
/// Mr.K by 2019/08/01 ///
///////////////////////////////////////////////////////////////////////////////////
pragma solidity >=0.5.0 <0.6.0;
interface TicketInterface {
//One address needs to have enough EPK to unlock accounts. If one account has been unlocked before, the method will not take effect.
function PaymentTicket() external;
//Check if the one address has paid EPK to unlock the account.
function HasTicket( address ownerAddr ) external view returns (bool);
}
// File: contracts/InternalModule.sol
pragma solidity >=0.5.0 <0.6.0;
contract InternalModule {
address[] _authAddress;
address _contractOwner;
address _managerAddress;
constructor() public {
_contractOwner = msg.sender;
}
modifier OwnerOnly() {
require( _contractOwner == msg.sender ); _;
}
modifier ManagerOnly() {
require(msg.sender == _managerAddress); _;
}
modifier APIMethod() {
bool exist = false;
for (uint i = 0; i < _authAddress.length; i++) {
if ( _authAddress[i] == msg.sender ) {
exist = true;
break;
}
}
require(exist); _;
}
function SetRoundManager(address rmaddr ) external OwnerOnly {
_managerAddress = rmaddr;
}
function AddAuthAddress(address _addr) external ManagerOnly {
_authAddress.push(_addr);
}
function DelAuthAddress(address _addr) external ManagerOnly {
for (uint i = 0; i < _authAddress.length; i++) {
if (_authAddress[i] == _addr) {
for (uint j = 0; j < _authAddress.length - 1; j++) {
_authAddress[j] = _authAddress[j+1];
}
delete _authAddress[_authAddress.length - 1];
_authAddress.length--;
}
}
}
}
// File: contracts/ERC20Token.sol
pragma solidity >=0.5.0 <0.6.0;
contract ERC20Token is ERC20Interface, InternalModule {
string public name = "Name";
string public symbol = "Symbol";
uint8 public decimals = 18;
uint256 public totalSupply = 1000000000 * 10 ** 18;
uint256 constant private MAX_UINT256 = 2 ** 256 - 1;
uint256 private constant brunMaxLimit = (1000000000 * 10 ** 18) - (10000000 * 10 ** 18);
mapping (address => uint256) public balances;
mapping (address => mapping (address => uint256)) public allowed;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
constructor(string memory tokenName, string memory tokenSymbol, uint256 tokenTotalSupply, uint256 mint) public {
name = tokenName;
symbol = tokenSymbol;
totalSupply = tokenTotalSupply;
balances[_contractOwner] = mint;
balances[address(this)] = tokenTotalSupply - mint;
}
function transfer(address _to, uint256 _value) public
returns (bool success) {
require(balances[msg.sender] >= _value);
balances[msg.sender] -= _value;
balances[_to] += _value;
emit Transfer(msg.sender, _to, _value);
return true;
}
function transferFrom(address _from, address _to, uint256 _value) public
returns (bool success) {
uint256 allowance = allowed[_from][msg.sender];
require(balances[_from] >= _value && allowance >= _value);
balances[_to] += _value;
balances[_from] -= _value;
if (allowance < MAX_UINT256) {
allowed[_from][msg.sender] -= _value;
}
emit Transfer(_from, _to, _value);
return true;
}
function balanceOf(address _owner) public view
returns (uint256 balance) {
return balances[_owner];
}
function approve(address _spender, uint256 _value) public
returns (bool success) {
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];
}
uint256 private ticketPrice = 60000000000000000000;
mapping( address => bool ) private _paymentTicketAddrMapping;
function PaymentTicket() external {
require( _paymentTicketAddrMapping[msg.sender] == false, "ERC20_ERR_001");
require( balances[msg.sender] >= ticketPrice, "ERC20_ERR_002");
balances[msg.sender] -= ticketPrice;
if ( balances[address(0x0)] == brunMaxLimit ) {
balances[_contractOwner] += ticketPrice;
} else if ( balances[address(0x0)] + ticketPrice >= brunMaxLimit ) {
balances[_contractOwner] += (balances[address(0x0)] + ticketPrice) - brunMaxLimit;
balances[address(0x0)] = brunMaxLimit;
} else {
balances[address(0x0)] += ticketPrice;
}
_paymentTicketAddrMapping[msg.sender] = true;
}
function HasTicket( address ownerAddr ) external view returns (bool) {
return _paymentTicketAddrMapping[ownerAddr];
}
function API_MoveToken(address _from, address _to, uint256 _value) external APIMethod {
require( balances[_from] >= _value, "ERC20_ERR_003" );
balances[_from] -= _value;
if ( _to == address(0x0) ) {
if ( balances[address(0x0)] == brunMaxLimit ) {
balances[_contractOwner] += _value;
} else if ( balances[address(0x0)] + _value >= brunMaxLimit ) {
balances[_contractOwner] += (balances[address(0x0)] + _value) - brunMaxLimit;
balances[address(0x0)] = brunMaxLimit;
} else {
balances[address(0x0)] += _value;
}
} else {
balances[_to] += _value;
}
emit Transfer( _from, _to, _value );
}
}