Transaction Hash:
Block:
11500055 at Dec-22-2020 12:38:41 AM +UTC
Transaction Fee:
0.00211968 ETH
$4.50
Gas Used:
44,160 Gas / 48 Gwei
Emitted Events:
| 224 |
WPPToken.Approval( owner=[Sender] 0xe750466164556a0c01411e8bd6f3cd0752732b42, spender=0x070Dd12f...E530486E6, value=115792089237316195423570985008687907853269984665640564039457584007913129639935 )
|
Account State Difference:
| Address | Before | After | State Difference | ||
|---|---|---|---|---|---|
| 0x056dD20b...9a6110085 | |||||
|
0x5A0b54D5...D3E029c4c
Miner
| (Spark Pool) | 31.416496819887628156 Eth | 31.418616499887628156 Eth | 0.00211968 | |
| 0xe7504661...752732B42 |
0.088382268231805904 Eth
Nonce: 11
|
0.086262588231805904 Eth
Nonce: 12
| 0.00211968 |
Execution Trace
WPPToken.approve( guy=0x070Dd12f34DFB926fc5e460e6a5fd9EE530486E6, wad=115792089237316195423570985008687907853269984665640564039457584007913129639935 ) => ( True )
approve[WPPToken (ln:148)]
Approval[WPPToken (ln:151)]
pragma solidity ^0.4.19;
/**
* @title ERC20
* @dev ERC20 interface
*/
contract ERC20 {
function balanceOf(address who) public constant returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
function allowance(address owner, address spender) public constant returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
*/
contract Ownable {
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender
* account.
*/
constructor() public{
owner = msg.sender;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/**
* @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) onlyOwner public {
require(newOwner != address(0));
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
library SafeMath {
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a * b;
assert(a == 0 || 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 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;
}
}
/**
* The WPPToken contract does this and that...
*/
contract WPPToken is ERC20, Ownable {
using SafeMath for uint256;
uint256 public totalSupply = 5000000000 * 1 ether;
mapping (address => uint256) public _balances;
mapping (address => mapping (address => uint256)) public _approvals;
string public name = "WPPTOKEN";
string public symbol = "WPP";
uint256 public decimals = 18;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
constructor () public{
_balances[owner] = totalSupply;
}
function totalSupply() public constant returns (uint256) {
return totalSupply;
}
function balanceOf(address src) public constant returns (uint256) {
return _balances[src];
}
function allowance(address src, address guy) public constant returns (uint256) {
return _approvals[src][guy];
}
function transfer(address dst, uint256 wad) public returns (bool) {
assert(_balances[msg.sender] >= wad);
_balances[msg.sender] = _balances[msg.sender].sub(wad);
_balances[dst] = _balances[dst].add(wad);
emit Transfer(msg.sender, dst, wad);
return true;
}
function transferFrom(address src, address dst, uint256 wad) public returns (bool) {
assert(_balances[src] >= wad);
assert(_approvals[src][msg.sender] >= wad);
_approvals[src][msg.sender] = _approvals[src][msg.sender].sub(wad);
_balances[src] = _balances[src].sub(wad);
_balances[dst] = _balances[dst].add(wad);
emit Transfer(src, dst, wad);
return true;
}
function approve(address guy, uint256 wad) public returns (bool) {
_approvals[msg.sender][guy] = wad;
emit Approval(msg.sender, guy, wad);
return true;
}
}