Governance: Mentorship Program Implementation

This commit is contained in:
Luis Fernando Molina committed 2021-06-20 17:28:05 +02:00
1 parent 24d6947d36
commit 83dd0e6174
2 files changed
+46 -40

No files matched your search

@@ -39,7 +39,7 @@ function newGovernanceFunctionLibraryMentorshipProgram() {
if (userProfile.tokenSwitch.mentorshipProgram === undefined) { continue }
if (userProfile.tokenSwitch.mentorshipProgram.payload === undefined) { continue }
resetUserMentorships(userProfile.tokenSwitch.mentorshipProgram)
reserMentorshipProgram(userProfile.tokenSwitch.mentorshipProgram)
}
for (let i = 0; i < userProfiles.length; i++) {
let userProfile = userProfiles[i]
@@ -60,10 +60,10 @@ function newGovernanceFunctionLibraryMentorshipProgram() {
calculateMentorshipProgram(userProfile.tokenSwitch.mentorshipProgram)
}
function resetUserMentorships(node) {
function reserMentorshipProgram(node) {
if (node === undefined) { return }
if (node.payload === undefined) { return }
node.payload.mentorships = {
node.payload.mentorshipProgram = {
count: 0,
outgoingPower: 0,
ownPower: 0,
@@ -81,7 +81,7 @@ function newGovernanceFunctionLibraryMentorshipProgram() {
node.tokenSwitch !== undefined &&
node.tokenSwitch.mentorshipProgram !== undefined
) {
resetUserMentorships(node.tokenSwitch.mentorshipProgram)
reserMentorshipProgram(node.tokenSwitch.mentorshipProgram)
return
}
/*
@@ -91,7 +91,7 @@ function newGovernanceFunctionLibraryMentorshipProgram() {
node.type === 'Mentorship Program' &&
node.userReferrer !== undefined
) {
resetUserMentorships(node.userReferrer)
reserMentorshipProgram(node.userReferrer)
return
}
/*
@@ -102,7 +102,7 @@ function newGovernanceFunctionLibraryMentorshipProgram() {
node.type === 'User Referrer' &&
node.payload.referenceParent !== undefined
) {
resetUserMentorships(node.payload.referenceParent)
reserMentorshipProgram(node.payload.referenceParent)
return
}
}
@@ -121,7 +121,7 @@ function newGovernanceFunctionLibraryMentorshipProgram() {
/*
The Own Power is the power generated by the same User Profile tokens, not inherited from others.
*/
mentorshipProgram.payload.mentorships.ownPower = referringPower
mentorshipProgram.payload.mentorshipProgram.ownPower = referringPower
distributeMentorshipPower(mentorshipProgram, referringPower, count)
}
@@ -142,18 +142,18 @@ function newGovernanceFunctionLibraryMentorshipProgram() {
at the count parameters. If we are processing the User Profile of this Mentorship Program
then we will add zero, otherwise, 1.
*/
node.payload.mentorships.count = node.payload.mentorships.count + count
node.payload.mentorshipProgram.count = node.payload.mentorshipProgram.count + count
/*
The outgoingPower of this node will be accumulating all the referringPower flowing
through it, no matter from where it comes.
*/
node.payload.mentorships.outgoingPower = node.payload.mentorships.outgoingPower + referringPower
node.payload.mentorshipProgram.outgoingPower = node.payload.mentorshipProgram.outgoingPower + referringPower
/*
We need to adjust the balance that holds the accumulationt of all incomingPower of all Mentorship Program
nodes. To do this we will substratct the current incomingPower, bacause it is going to be recalculated
inmediatelly after this, and then we will add it again after the recalcualtion.
*/
accumulatedIncomingMentorshipPower = accumulatedIncomingMentorshipPower - node.payload.mentorships.incomingPower
accumulatedIncomingMentorshipPower = accumulatedIncomingMentorshipPower - node.payload.mentorshipProgram.incomingPower
/*
At any point in time, the incomingPower will be equal to the total of the outgoingPower minus
the ownPower. This is like this because the outgoingPower is the accumulation of all the
@@ -161,12 +161,12 @@ function newGovernanceFunctionLibraryMentorshipProgram() {
substract the ownPower, we will have the accumulation of all the incomingPower, which
means all the power coming from other User Profiles referencing this one.
*/
node.payload.mentorships.incomingPower = node.payload.mentorships.outgoingPower - node.payload.mentorships.ownPower
node.payload.mentorshipProgram.incomingPower = node.payload.mentorshipProgram.outgoingPower - node.payload.mentorshipProgram.ownPower
/*
Now that we have the incomingPower calculated again, we can add it again to the balance of all the incomingPower
of all Mentorship Program nodes.
*/
accumulatedIncomingMentorshipPower = accumulatedIncomingMentorshipPower + node.payload.mentorships.incomingPower
accumulatedIncomingMentorshipPower = accumulatedIncomingMentorshipPower + node.payload.mentorshipProgram.incomingPower
if (node.userReferrer !== undefined) {
distributeMentorshipPower(node.userReferrer, referringPower, 0)
@@ -216,19 +216,19 @@ function newGovernanceFunctionLibraryMentorshipProgram() {
mentorshipProgram.payload.uiObject.setErrorMessage("Tokens Awarded Node is needed in order for this Program to get Tokens from the Mentorship Program Pool.")
return
}
mentorshipProgram.payload.mentorships.awarded.tokens = mentorshipProgram.payload.mentorships.incomingPower * totalPowerRewardRatio
mentorshipProgram.payload.mentorshipProgram.awarded.tokens = mentorshipProgram.payload.mentorshipProgram.incomingPower * totalPowerRewardRatio
/*
As per the system rules, the Mentorship Program will not give tokens to users that do not ha their own Referrer set up,
unless it has a big amount of tokens (this last condition is for the edge case where a user it at the top of the
mentorship pyramid.)
*/
if (
mentorshipProgram.payload.mentorships.ownPower < 1000000 &&
mentorshipProgram.payload.mentorshipProgram.ownPower < 1000000 &&
(mentorshipProgram.userReferrer === undefined || mentorshipProgram.userReferrer.payload.referenceParent === undefined)
) {
mentorshipProgram.payload.uiObject.setErrorMessage("In order to be awarded " + mentorshipProgram.payload.mentorships.awarded.tokens + " SA Tokens from your mentorships, you need first to define yourself who your referrer is.")
mentorshipProgram.payload.mentorships.awarded.tokens = 0
mentorshipProgram.payload.uiObject.setErrorMessage("In order to be awarded " + mentorshipProgram.payload.mentorshipProgram.awarded.tokens + " SA Tokens from your mentorships, you need first to define yourself who your referrer is.")
mentorshipProgram.payload.mentorshipProgram.awarded.tokens = 0
}
drawMentorshipProgram(mentorshipProgram)
@@ -236,9 +236,9 @@ function newGovernanceFunctionLibraryMentorshipProgram() {
function drawUserReferrer(node) {
if (node.payload !== undefined) {
const ownPowerText = new Intl.NumberFormat().format(node.payload.parentNode.payload.mentorships.ownPower)
const incomingPowerText = new Intl.NumberFormat().format(node.payload.parentNode.payload.mentorships.incomingPower)
const outgoingPowerText = new Intl.NumberFormat().format(node.payload.parentNode.payload.mentorships.outgoingPower)
const ownPowerText = new Intl.NumberFormat().format(node.payload.parentNode.payload.mentorshipProgram.ownPower)
const incomingPowerText = new Intl.NumberFormat().format(node.payload.parentNode.payload.mentorshipProgram.incomingPower)
const outgoingPowerText = new Intl.NumberFormat().format(node.payload.parentNode.payload.mentorshipProgram.outgoingPower)
node.payload.uiObject.valueAngleOffset = 180
node.payload.uiObject.valueAtAngle = true
@@ -262,12 +262,15 @@ function newGovernanceFunctionLibraryMentorshipProgram() {
}
if (node.tokensAwarded !== undefined && node.tokensAwarded.payload !== undefined) {
const tokensAwardedText = new Intl.NumberFormat().format(node.payload.mentorships.awarded.tokens)
const tokensAwardedText = new Intl.NumberFormat().format(node.payload.mentorshipProgram.awarded.tokens)
node.tokensAwarded.payload.uiObject.statusAngleOffset = 0
node.tokensAwarded.payload.uiObject.statusAtAngle = false
node.tokensAwarded.payload.uiObject.valueAngleOffset = 0
node.tokensAwarded.payload.uiObject.valueAtAngle = false
node.tokensAwarded.payload.uiObject.setValue(tokensAwardedText + ' SA Tokens')
node.tokensAwarded.payload.uiObject.setStatus('From '+ node.payload.referralProgram.count + ' Mentorships.')
}
}
}
@@ -39,7 +39,7 @@ function newGovernanceFunctionLibraryReferralProgram() {
if (userProfile.tokenSwitch.referralProgram === undefined) { continue }
if (userProfile.tokenSwitch.referralProgram.payload === undefined) { continue }
resetUserReferrals(userProfile.tokenSwitch.referralProgram)
reserReferralProgram(userProfile.tokenSwitch.referralProgram)
}
for (let i = 0; i < userProfiles.length; i++) {
let userProfile = userProfiles[i]
@@ -60,10 +60,10 @@ function newGovernanceFunctionLibraryReferralProgram() {
calculateReferralProgram(userProfile.tokenSwitch.referralProgram)
}
function resetUserReferrals(node) {
function reserReferralProgram(node) {
if (node === undefined) { return }
if (node.payload === undefined) { return }
node.payload.referrals = {
node.payload.referralProgram = {
count: 0,
outgoingPower: 0,
ownPower: 0,
@@ -81,7 +81,7 @@ function newGovernanceFunctionLibraryReferralProgram() {
node.tokenSwitch !== undefined &&
node.tokenSwitch.referralProgram !== undefined
) {
resetUserReferrals(node.tokenSwitch.referralProgram)
reserReferralProgram(node.tokenSwitch.referralProgram)
return
}
/*
@@ -91,7 +91,7 @@ function newGovernanceFunctionLibraryReferralProgram() {
node.type === 'Referral Program' &&
node.userReferrer !== undefined
) {
resetUserReferrals(node.userReferrer)
reserReferralProgram(node.userReferrer)
return
}
/*
@@ -102,7 +102,7 @@ function newGovernanceFunctionLibraryReferralProgram() {
node.type === 'User Referrer' &&
node.payload.referenceParent !== undefined
) {
resetUserReferrals(node.payload.referenceParent)
reserReferralProgram(node.payload.referenceParent)
return
}
}
@@ -121,7 +121,7 @@ function newGovernanceFunctionLibraryReferralProgram() {
/*
The Own Power is the power generated by the same User Profile tokens, not inherited from others.
*/
referralProgram.payload.referrals.ownPower = referringPower
referralProgram.payload.referralProgram.ownPower = referringPower
distributeReferralPower(referralProgram, referringPower, count)
}
@@ -142,18 +142,18 @@ function newGovernanceFunctionLibraryReferralProgram() {
at the count parameters. If we are processing the User Profile of this Referral Program
then we will add zero, otherwise, 1.
*/
node.payload.referrals.count = node.payload.referrals.count + count
node.payload.referralProgram.count = node.payload.referralProgram.count + count
/*
The outgoingPower of this node will be accumulating all the referringPower flowing
through it, no matter from where it comes.
*/
node.payload.referrals.outgoingPower = node.payload.referrals.outgoingPower + referringPower
node.payload.referralProgram.outgoingPower = node.payload.referralProgram.outgoingPower + referringPower
/*
We need to adjust the balance that holds the accumulationt of all incomingPower of all Referral Program
nodes. To do this we will substratct the current incomingPower, bacause it is going to be recalculated
inmediatelly after this, and then we will add it again after the recalcualtion.
*/
accumulatedIncomingReferralPower = accumulatedIncomingReferralPower - node.payload.referrals.incomingPower
accumulatedIncomingReferralPower = accumulatedIncomingReferralPower - node.payload.referralProgram.incomingPower
/*
At any point in time, the incomingPower will be equal to the total of the outgoingPower minus
the ownPower. This is like this because the outgoingPower is the accumulation of all the
@@ -161,12 +161,12 @@ function newGovernanceFunctionLibraryReferralProgram() {
substract the ownPower, we will have the accumulation of all the incomingPower, which
means all the power coming from other User Profiles referencing this one.
*/
node.payload.referrals.incomingPower = node.payload.referrals.outgoingPower - node.payload.referrals.ownPower
node.payload.referralProgram.incomingPower = node.payload.referralProgram.outgoingPower - node.payload.referralProgram.ownPower
/*
Now that we have the incomingPower calculated again, we can add it again to the balance of all the incomingPower
of all Referral Program nodes.
*/
accumulatedIncomingReferralPower = accumulatedIncomingReferralPower + node.payload.referrals.incomingPower
accumulatedIncomingReferralPower = accumulatedIncomingReferralPower + node.payload.referralProgram.incomingPower
if (node.userReferrer !== undefined) {
distributeReferralPower(node.userReferrer, referringPower, 0)
@@ -216,19 +216,19 @@ function newGovernanceFunctionLibraryReferralProgram() {
referralProgram.payload.uiObject.setErrorMessage("Tokens Awarded Node is needed in order for this Program to get Tokens from the Referral Program Pool.")
return
}
referralProgram.payload.referrals.awarded.tokens = referralProgram.payload.referrals.incomingPower * totalPowerRewardRatio
referralProgram.payload.referralProgram.awarded.tokens = referralProgram.payload.referralProgram.incomingPower * totalPowerRewardRatio
/*
As per the system rules, the Referral Program will not give tokens to users that do not ha their own Referrer set up,
unless it has a big amount of tokens (this last condition is for the edge case where a user it at the top of the
referral pyramid.)
*/
if (
referralProgram.payload.referrals.ownPower < 1000000 &&
referralProgram.payload.referralProgram.ownPower < 1000000 &&
(referralProgram.userReferrer === undefined || referralProgram.userReferrer.payload.referenceParent === undefined)
) {
referralProgram.payload.uiObject.setErrorMessage("In order to be awarded " + referralProgram.payload.referrals.awarded.tokens + " SA Tokens from your referrals, you need first to define yourself who your referrer is.")
referralProgram.payload.referrals.awarded.tokens = 0
referralProgram.payload.uiObject.setErrorMessage("In order to be awarded " + referralProgram.payload.referralProgram.awarded.tokens + " SA Tokens from your referrals, you need first to define yourself who your referrer is.")
referralProgram.payload.referralProgram.awarded.tokens = 0
}
drawReferralProgram(referralProgram)
@@ -236,9 +236,9 @@ function newGovernanceFunctionLibraryReferralProgram() {
function drawUserReferrer(node) {
if (node.payload !== undefined) {
const ownPowerText = new Intl.NumberFormat().format(node.payload.parentNode.payload.referrals.ownPower)
const incomingPowerText = new Intl.NumberFormat().format(node.payload.parentNode.payload.referrals.incomingPower)
const outgoingPowerText = new Intl.NumberFormat().format(node.payload.parentNode.payload.referrals.outgoingPower)
const ownPowerText = new Intl.NumberFormat().format(node.payload.parentNode.payload.referralProgram.ownPower)
const incomingPowerText = new Intl.NumberFormat().format(node.payload.parentNode.payload.referralProgram.incomingPower)
const outgoingPowerText = new Intl.NumberFormat().format(node.payload.parentNode.payload.referralProgram.outgoingPower)
node.payload.uiObject.valueAngleOffset = 180
node.payload.uiObject.valueAtAngle = true
@@ -262,12 +262,15 @@ function newGovernanceFunctionLibraryReferralProgram() {
}
if (node.tokensAwarded !== undefined && node.tokensAwarded.payload !== undefined) {
const tokensAwardedText = new Intl.NumberFormat().format(node.payload.referrals.awarded.tokens)
const tokensAwardedText = new Intl.NumberFormat().format(node.payload.referralProgram.awarded.tokens)
node.tokensAwarded.payload.uiObject.statusAngleOffset = 0
node.tokensAwarded.payload.uiObject.statusAtAngle = false
node.tokensAwarded.payload.uiObject.valueAngleOffset = 0
node.tokensAwarded.payload.uiObject.valueAtAngle = false
node.tokensAwarded.payload.uiObject.setValue(tokensAwardedText + ' SA Tokens')
node.tokensAwarded.payload.uiObject.setStatus('From '+ node.payload.referralProgram.count + ' Referrals.')
}
}
}