Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 50 additions & 13 deletions contract.sol
Original file line number Diff line number Diff line change
@@ -1,24 +1,41 @@
pragma solidity >=0.5.0 < 0.6.0;

contract TokenReward {

uint public totalSupply;
string public name;
string public symbol;
uint8 public decimals = 18;

struct Member {
uint8 rating;
string name;
bool isWhitelisted;
uint8 accumulatedPoints;
}

address owner;
mapping(address => Member) public members;
mapping(address => uint ) public reward;
mapping(address => bool ) public admins;
mapping(address => uint ) public balances;
mapping(address => mapping(address => uint256)) public allowance;

event Transfer(address indexed _from, address indexed _to, uint tokens);
event Approval(address indexed _tokenOwner, address indexed _spender, uint tokens);
event NewMember(string _name);
event Blacklisted(address indexed _member, string _name);
event NewReward(address indexed _member, uint reward);
event NewRating(address indexed _ratedBy, address indexed _memberRated, uint rating);

constructor(string memory tokenName, string memory tokenSymbol, uint initialSupply) public{
owner = msg.sender;
admins[msg.sender] = true;
totalSupply = initialSupply*10**uint256(decimals);
balances[msg.sender] = totalSupply;
name = tokenName;
symbol = tokenSymbol;
}

modifier OnlyOwner() {
require(msg.sender == owner, "Only contract owner is allowed to call this function");
_;
Expand All @@ -35,11 +52,6 @@ contract TokenReward {
_;
}

constructor () public {
owner = msg.sender;
admins[msg.sender] = true;
}

function addAdmin(address __newAdmin) public OnlyOwner returns(bool) {
admins[__newAdmin] = true;
return true;
Expand All @@ -56,14 +68,14 @@ contract TokenReward {
return true;
}

function whiteListMember(address __member) public OnlyAdminOrOwner returns(bool) {
function whiteListMember(address __member) public view OnlyAdminOrOwner returns(bool) {
Member memory memberStruct = members[__member];
memberStruct.isWhitelisted = true;
return true;
}


function blackListMember(address __member) public OnlyAdminOrOwner returns(bool) {
function blackListMember(address __member) public view OnlyAdminOrOwner returns(bool) {
Member memory memberStruct = members[__member];
memberStruct.isWhitelisted = false;
return true;
Expand Down Expand Up @@ -116,8 +128,33 @@ contract TokenReward {
return (__pointremained, __starRating
);
}
}





function _transfer(address _from, address _to, uint256 _value) internal {
require(_to != address(0x0));
require(balances[_from] >= _value);
require(balances[_to] + _value >= balances[_to]);

balances[_from] -= _value;
balances[_to] += _value;
emit Transfer(_from, _to, _value);
}

function transfer(address _to, uint256 _value) public returns(bool success){
_transfer(msg.sender, _to, _value);
return true;
}

function transferFrom(address _from, address _to, uint256 _value) public returns(bool success){
require(_value <= allowance[_from][msg.sender]);
allowance[_from][msg.sender] -= _value;
_transfer(_from, _to, _value);
return true;
}

function approve(address _spender, uint256 _value) public OnlyAdminOrOwner returns(bool success){
allowance[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;

}
}