Transaction Hash:
Block:
14895149 at Jun-03-2022 04:41:27 AM +UTC
Transaction Fee:
0.00168900528837026 ETH
$3.55
Gas Used:
38,860 Gas / 43.463851991 Gwei
Emitted Events:
| 464 |
ShpingCoin.Transfer( _from=[Sender] 0x1101d7bc1df5056ea1375d1b04aa5e6dd2d74ded, _to=0x97b9907F659395eF31BcE586d04048d6a012F2DF, _value=89403077243830000000000 )
|
Account State Difference:
| Address | Before | After | State Difference | ||
|---|---|---|---|---|---|
| 0x1101d7Bc...dD2D74ded |
0.004277483937460538 Eth
Nonce: 2
|
0.002588478649090278 Eth
Nonce: 3
| 0.00168900528837026 | ||
|
0x26B3eEA1...C042d38E0
Miner
| (Luxor Technology: Mining) | 23.242827543033977968 Eth | 23.242885833033977968 Eth | 0.00005829 | |
| 0x7C84e628...6aBB21BEC |
Execution Trace
ShpingCoin.transfer( to=0x97b9907F659395eF31BcE586d04048d6a012F2DF, value=89403077243830000000000 ) => ( True )
transfer[ShpingCoin (ln:134)]
Transfer[ShpingCoin (ln:141)]
pragma solidity ^0.4.16;
contract ShpingCoin {
string public name = "Shping Coin";
string public symbol = "SHPING";
uint8 public decimals = 18;
uint256 public coinsaleDeadline = 1521845940; // 23/03/2018, 22:59:00 GMT | 23/03/2018, 23:59:00 CET | Saturday, 24 March 2018 9:59:00 AM GMT+11:00
uint256 public totalSupply;
mapping(address => uint256) balances;
mapping(address => mapping (address => uint256)) allowed;
mapping(address => mapping(string => bool)) platinumUsers;
mapping(address => mapping(string => uint256)) campaigns; // Requests for a campaign activation
mapping(address => uint256) budgets; // Account budget for rewards campaigns
address public owner;
address public operator;
function ShpingCoin() public {
owner = msg.sender;
totalSupply = 10000000000 * (10 ** uint256(decimals));
balances[msg.sender] = totalSupply;
operator = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
modifier onlyOperator() {
require(msg.sender == operator);
_;
}
function changeOperator(address newOperator) public onlyOwner {
require(newOperator != address(0));
require(newOperator != operator);
require(balances[newOperator]+balances[operator] >= balances[newOperator]);
require(budgets[newOperator]+budgets[operator] >= budgets[newOperator]);
if (operator != owner) {
balances[newOperator] += balances[operator];
budgets[newOperator] += budgets[operator];
NewBudget(newOperator, budgets[newOperator]);
Transfer(operator, newOperator, balances[operator]);
balances[operator] = 0;
budgets[operator] = 0;
NewBudget(operator, 0);
}
operator = newOperator;
}
//Permanent platinum level
function isPlatinumLevel(address user, string hashedID) public constant returns (bool) {
return platinumUsers[user][hashedID];
}
function setPermanentPlatinumLevel(address user, string hashedID) public onlyOwner returns (bool) {
require(!isPlatinumLevel(user, hashedID));
platinumUsers[user][hashedID] = true;
return true;
}
//Rewards campaigns
function activateCampaign(string campaign, uint256 budget) public returns (bool) {
require(campaigns[msg.sender][campaign] == 0);
require(budget != 0);
require(balances[msg.sender] >= budgets[msg.sender]);
require(balances[msg.sender] - budgets[msg.sender] >= budget);
campaigns[msg.sender][campaign] = budget;
Activate(msg.sender, budget, campaign);
return true;
}
function getBudget(address account) public constant returns (uint256) {
return budgets[account];
}
function rejectCampaign(address account, string campaign) public onlyOperator returns (bool) {
require(account != address(0));
campaigns[account][campaign] = 0;
Reject(account, campaign);
return true;
}
function setBudget(address account, string campaign) public onlyOperator returns (bool) {
require(account != address(0));
require(campaigns[account][campaign] != 0);
require(balances[account] >= budgets[account]);
require(balances[account] - budgets[account] >= campaigns[account][campaign]);
require(budgets[account] + campaigns[account][campaign] > budgets[account]);
budgets[account] += campaigns[account][campaign];
campaigns[account][campaign] = 0;
NewBudget(account, budgets[account]);
return true;
}
function releaseBudget(address account, uint256 budget) public onlyOperator returns (bool) {
require(account != address(0));
require(budget != 0);
require(budgets[account] >= budget);
require(balances[account] >= budget);
require(balances[operator] + budget > balances[operator]);
budgets[account] -= budget;
balances[account] -= budget;
balances[operator] += budget;
Released(account, budget);
NewBudget(account, budgets[account]);
return true;
}
function clearBudget(address account) public onlyOperator returns (bool) {
budgets[account] = 0;
NewBudget(account, 0);
return true;
}
event Activate(address indexed account, uint256 indexed budget, string campaign);
event NewBudget(address indexed account, uint256 budget);
event Reject(address indexed account, string campaign);
event Released(address indexed account, uint256 value);
//ERC20 interface
function balanceOf(address account) public constant returns (uint256) {
return balances[account];
}
function transfer(address to, uint256 value) public returns (bool) {
require(msg.sender == owner || msg.sender == operator || now > coinsaleDeadline);
require(balances[msg.sender] - budgets[msg.sender] >= value);
require(balances[to] + value >= balances[to]);
balances[msg.sender] -= value;
balances[to] += value;
Transfer(msg.sender, to, value);
return true;
}
function transferFrom(address from, address to, uint256 value) public returns (bool) {
require(from == owner || from == operator || msg.sender == owner || msg.sender == operator || now > coinsaleDeadline);
require(balances[from] - budgets[from] >= value);
require(allowed[from][msg.sender] >= value);
require(balances[to] + value >= balances[to]);
balances[from] -= value;
allowed[from][msg.sender] -= value;
balances[to] += value;
Transfer(from, to, value);
return true;
}
function approve(address spender, uint256 value) public returns (bool) {
allowed[msg.sender][spender] = value;
Approval(msg.sender, spender, value);
return true;
}
function allowance(address account, address spender) public constant returns (uint256) {
return allowed[account][spender];
}
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}