Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added erc-20 #19

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
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
86 changes: 48 additions & 38 deletions contract.sol
Original file line number Diff line number Diff line change
@@ -1,24 +1,32 @@
pragma solidity >=0.5.0 < 0.6.0;
pragma solidity >=0.5.0 <0.6.0;

contract TokenReward {


string public name = "500 Nigerian Dev Token";
string public symbol = "NDT";
uint8 public decimals = 18;
string public standard = "500 Nigerian Dev Token v1.0";
uint public totalSupply;
address owner;

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

address owner;

mapping(address => Member) public members;
mapping(address => uint ) public reward;
mapping(address => bool ) public admins;
mapping(address => uint ) public balances;
mapping(address => bool) public admins;
mapping(address => uint) public balances;
mapping(address => uint) public balanceOf;

event NewMember(string _name);
event Whitelisted(address indexed _member, 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);

modifier OnlyOwner() {
require(msg.sender == owner, "Only contract owner is allowed to call this function");
_;
Expand All @@ -33,61 +41,65 @@ contract TokenReward {
Member memory memberStruct = members[__member];
require(memberStruct.isWhitelisted == true, "This address is not whitelisted");
_;
}

constructor () public {
}

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



function addAdmin(address __newAdmin) public OnlyOwner returns(bool) {
admins[__newAdmin] = true;
return true;
return true;
}


function AddMember(address __member, string memory __memberName) public OnlyAdminOrOwner returns(bool) {
Member memory __memberStruct;
__memberStruct.name = __memberName;
__memberStruct.isWhitelisted = true;
members[__member] = __memberStruct;

emit NewMember(__memberName);
return true;
}
}

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

emit Whitelisted(__member, memberStruct.name);
return true;
}


function blackListMember(address __member) public OnlyAdminOrOwner returns(bool) {
Member memory memberStruct = members[__member];
Member storage memberStruct = members[__member];
memberStruct.isWhitelisted = false;

emit Blacklisted(__member, memberStruct.name);
return true;
}


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

function rateMember(address __membertorate) public IsWhitelisted(__membertorate) returns(bool) {
Member memory __memberStruct = members[__membertorate];
Member storage __memberStruct = members[__membertorate];
uint8 ratingPoint;
require(admins[msg.sender] || isWhitelisted(msg.sender), "You're not qualified to rate any member");
if (admins[msg.sender]) {
ratingPoint = 3;
}
if (members[__membertorate].rating == 5) {
else if (members[__membertorate].rating == 5) {
ratingPoint = 2;
} else {
ratingPoint = 1;
ratingPoint = 1;
}
__memberStruct.accumulatedPoints = __memberStruct.accumulatedPoints + ratingPoint;
__memberStruct.accumulatedPoints = __memberStruct.accumulatedPoints + ratingPoint;

(uint8 __memberPoint, uint8 __starRating) = calculateReward(__memberStruct.accumulatedPoints, __memberStruct.rating);
__memberStruct.accumulatedPoints = __memberPoint;
Expand All @@ -97,27 +109,25 @@ contract TokenReward {
return true;
}

function rewardMember(address __memberToReward) public OnlyAdminOrOwner returns(bool) {
function rewardMember(address __memberToReward, uint8 __rewardAmount) public OnlyAdminOrOwner returns(bool) {
require(admins[__memberToReward] == false, "admins cannot be rewarded tokens");
require(members[__memberToReward].rating >= 3, "member do not have a proven track record");
balances[__memberToReward] = balances[__memberToReward] + 2;
require(__rewardAmount <= 2, "Not more than 2 tokens can be rewarded");
balances[__memberToReward] = balances[__memberToReward] + __rewardAmount;

emit NewReward(__memberToReward, __rewardAmount);
return true;
}

function calculateReward(uint8 __pointsScored, uint8 __starRating) pure internal returns(uint8, uint8) {
function calculateReward(uint8 __pointsScored, uint8 __starRating) internal pure returns(uint8, uint8) {
if (__pointsScored < 10 ) {
return (__pointsScored, __starRating);
}
uint8 __pointremained = __pointsScored % uint8(15);
uint8 __pointremained = __pointsScored % uint8(10);
if (__starRating < 5) {
uint8 currentStarRating = __starRating + uint8(1);
return (__pointremained, currentStarRating);
}
return (__pointremained, __starRating
);
return (__pointremained, __starRating);
}
}




}