Transaction Hash:
Block:
9565188 at Feb-27-2020 10:31:23 AM +UTC
Transaction Fee:
0.000075441 ETH
$0.21
Gas Used:
25,147 Gas / 3 Gwei
Emitted Events:
64 |
GoldBlock.Transfer( from=[Sender] 0x4710aa385b5753bc1af61b61fdf843295490899d, to=0x15B7f93Da01FCF1ba8dFBC1362bb886bEEEa38Cd, value=700000000000000000000 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x3e522D14...0941372AC | |||||
0x4710AA38...95490899D |
0.0028196152 Eth
Nonce: 60
|
0.0027441742 Eth
Nonce: 61
| 0.000075441 | ||
0xe9B54a47...8475C2afc
Miner
| 18.106617415489899055 Eth | 18.106692856489899055 Eth | 0.000075441 |
Execution Trace
GoldBlock.transfer( _to=0x15B7f93Da01FCF1ba8dFBC1362bb886bEEEa38Cd, _value=700000000000000000000 ) => ( True )
transfer[GoldBlock (ln:300)]
transfer[GoldBlock (ln:302)]
/** *Submitted for verification at Etherscan.io on 2020-01-31 */ /** PeterJeon */ pragma solidity 0.4.25; contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract DetailedERC20 is ERC20 { string public name; string public symbol; uint8 public decimals; constructor(string _name, string _symbol, uint8 _decimals) public { name = _name; symbol = _symbol; decimals = _decimals; } } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; mapping (address => uint256) freezeOf; uint256 _totalSupply; function totalSupply() public view returns (uint256) { return _totalSupply; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0) && _value > 0 &&_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract ERC20Token is BasicToken, ERC20 { using SafeMath for uint256; mapping (address => mapping (address => uint256)) allowed; mapping (address => uint256) freezeOf; function approve(address _spender, uint256 _value) public returns (bool) { 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]; } function increaseApproval(address _spender, uint256 _addedValue) public returns (bool success) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint256 _subtractedValue) public returns (bool success) { uint256 oldValue = allowed[msg.sender][_spender]; if (_subtractedValue >= oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract Ownable { address public owner; mapping (address => bool) admin; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } modifier onlyOwnerOrAdmin() { require(msg.sender != address(0) || msg.sender == owner || admin[msg.sender] == true); _; } function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0) && newOwner != owner && admin[newOwner] == true); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } function setAdmin(address newAdmin) onlyOwner public { require(admin[newAdmin] != true && owner != newAdmin); admin[newAdmin] = true; } function unsetAdmin(address Admin) onlyOwner public { require(admin[Admin] != false && owner != Admin); admin[Admin] = false; } } contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused() { require(paused); _; } function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } contract PauserRole { using Roles for Roles.Role; event PauserAdded(address indexed account); event PauserRemoved(address indexed account); Roles.Role private pausers; constructor() internal { _addPauser(msg.sender); } modifier onlyPauser() { require(isPauser(msg.sender)); _; } function isPauser(address account) public view returns (bool) { return pausers.has(account); } function addPauser(address account) public onlyPauser { _addPauser(account); } function renouncePauser() public { _removePauser(msg.sender); } function _addPauser(address account) internal { pausers.add(account); emit PauserAdded(account); } function _removePauser(address account) internal { pausers.remove(account); emit PauserRemoved(account); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0 || b == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } 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) { uint256 c = a + b; assert(c >= a); return c; } } library Roles { struct Role { mapping (address => bool) bearer; } function add(Role storage role, address account) internal { require(account != address(0)); require(!has(role, account)); role.bearer[account] = true; } function remove(Role storage role, address account) internal { require(account != address(0)); require(has(role, account)); role.bearer[account] = false; } function has(Role storage role, address account) internal view returns (bool){ require(account != address(0)); return role.bearer[account]; } } contract BurnableToken is BasicToken, Ownable { event Burn(address indexed burner, uint256 amount); function burn(uint256 _value) onlyOwner public { balances[msg.sender] = balances[msg.sender].sub(_value); _totalSupply = _totalSupply.sub(_value); emit Burn(msg.sender, _value); emit Transfer(msg.sender, address(0), _value); } } contract GoldBlock is BurnableToken, DetailedERC20, ERC20Token,Pausable{ using SafeMath for uint256; event Approval(address indexed owner, address indexed spender, uint256 value); event LockerChanged(address indexed _address, uint256 amount); event Recall(address indexed from, uint256 amount); mapping(address => uint) public locker; string public constant symbol = "GBK"; string public constant name = "GoldBlock"; uint8 public constant decimals = 18; uint256 public constant TOTAL_SUPPLY = 100*(10**8)*(10**uint256(decimals)); constructor() DetailedERC20(name, symbol, decimals) public { _totalSupply = TOTAL_SUPPLY; balances[owner] = _totalSupply; emit Transfer(address(0x0), msg.sender, _totalSupply); } function transfer(address _to, uint256 _value) public whenNotPaused returns (bool){ require(balances[msg.sender] - _value >= locker[msg.sender]); return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool){ balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function lockOf(address _address) public view returns (uint256 _locker) { return locker[_address]; } function setLock(address _address, uint256 _value) public onlyOwnerOrAdmin { require(_value <= _totalSupply &&_address != address(0)); locker[_address] = _value; emit LockerChanged(_address, _value); } function recall(address _from, uint256 _amount) public onlyOwnerOrAdmin { require(_amount > 0); uint256 currentLocker = locker[_from]; uint256 currentBalance = balances[_from]; require(currentLocker >= _amount && currentBalance >= _amount); uint256 newLock = currentLocker - _amount; locker[_from] = newLock; emit LockerChanged(_from, newLock); balances[_from] = balances[_from].sub(_amount); balances[owner] = balances[owner].add(_amount); emit Transfer(_from, owner, _amount); emit Recall(_from, _amount); } function transferList(address[] _recipients, uint256[] _balances) public onlyOwnerOrAdmin{ require(_recipients.length == _balances.length); for (uint i=0; i < _recipients.length; i++) { balances[msg.sender] = balances[msg.sender].sub(_balances[i]); balances[_recipients[i]] = balances[_recipients[i]].add(_balances[i]); emit Transfer(msg.sender,_recipients[i],_balances[i]); } } function setLockList(address[] _recipients, uint256[] _balances) public onlyOwnerOrAdmin{ require(_recipients.length == _balances.length); for (uint i=0; i < _recipients.length; i++) { locker[_recipients[i]] = _balances[i]; emit LockerChanged(_recipients[i], _balances[i]); } } function() public payable { revert(); } }