//Write your own contracts here. Currently compiles using solc v0.4.15+commit.bbb8e64f. pragma solidity >=0.4.21 <0.7.0; contract RewardsWallet { function _msgSender() internal view returns (address) { return msg.sender; } function _msgData() internal view returns (bytes) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } // Proof-of-Concept logic for Trublo // Not to be used in production!!! mapping (address => uint256) private _reward_balances; mapping (address => uint256) private _penalty_balances; // Dangerous function, anyone can reward themselves // - do not use _msgSender() // - make method internal (now public for easy demo purposes) function reward(uint256 amount) public returns (bool) { // require(recipient != address(0), "ERC20: transfer to the zero address"); _reward_balances[_msgSender()] = _reward_balances[_msgSender()] + amount; // maybe emit some event return true; } function myRewards() public view returns (uint256) { return _reward_balances[_msgSender()]; } // Dangerous function, anyone can penalize themselves // - do not use _msgSender() // - make method internal (now public for easy demo purposes) function penalize(uint256 amount) public returns (bool) { // require(recipient != address(0), "ERC20: transfer to the zero address"); _penalty_balances[_msgSender()] = _penalty_balances[_msgSender()] + amount; // maybe emit some event return true; } function myPenalties() public view returns (uint256) { return _penalty_balances[_msgSender()]; } function myTotalRewardBalance() public view returns (uint256) { uint256 rewards = _reward_balances[_msgSender()]; uint256 penalties = _penalty_balances[_msgSender()]; return rewards - penalties; } }
0.4.18