diff --git a/Projects/Governance/Plugins/User-Profiles/Julian-Molina.json b/Projects/Governance/Plugins/User-Profiles/Julian-Molina.json index b6ffb40b9..ef80bb5b5 100644 --- a/Projects/Governance/Plugins/User-Profiles/Julian-Molina.json +++ b/Projects/Governance/Plugins/User-Profiles/Julian-Molina.json @@ -15,7 +15,7 @@ "project": "Governance", "userReferrer": { "type": "User Referrer", - "name": "", + "name": "Jeremy", "config": "{}", "project": "Governance", "id": "0d0b04ff-034b-4b02-8351-67d621d514c0", @@ -82,7 +82,7 @@ "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": false, + "isCollapsed": true, "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 @@ -97,12 +97,69 @@ "name": "New Mentorship Program", "config": "{}", "project": "Governance", - "userMentors": [], + "userMentors": [ + { + "type": "User Mentor", + "name": "Jeremy", + "config": "{}", + "project": "Governance", + "id": "0e176a01-3ed2-4b02-b070-601236ea2393", + "savedPayload": { + "position": { + "x": 25662.630264392985, + "y": 23874.32824727054 + }, + "targetPosition": { + "x": 25243.737077503094, + "y": 23709.924786305663 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": {}, + "referenceParent": { + "type": "User Profile", + "name": "Jeremy", + "id": "759e9012-c995-47ed-92f1-7d204bf2b58e" + } + } + } + ], + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "27f046ba-de7c-45a3-9086-d6f4e0ac0fd7", + "savedPayload": { + "position": { + "x": 25310.806097282373, + "y": 24154.89865810697 + }, + "targetPosition": { + "x": 25243.737077503094, + "y": 23709.924786305663 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": {} + } + }, "id": "362a1ecb-dce9-4ebb-9b00-a20d3631f2f3", "savedPayload": { "position": { - "x": 25150.213607224283, - "y": 23592.650063935456 + "x": 25243.737077503094, + "y": 23709.924786305663 }, "targetPosition": { "x": 24963.166666666664, @@ -113,7 +170,7 @@ "isFrozen": false, "isCollapsed": false, "angleToParent": 2, - "distanceToParent": 3, + "distanceToParent": 4, "arrangementStyle": 0 }, "uiObject": { @@ -274,7 +331,7 @@ "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": true, + "isCollapsed": false, "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 diff --git a/Projects/Governance/Plugins/User-Profiles/Luis-Fernando-Molina.json b/Projects/Governance/Plugins/User-Profiles/Luis-Fernando-Molina.json index 6c1f1fdbf..8e6d3cea9 100644 --- a/Projects/Governance/Plugins/User-Profiles/Luis-Fernando-Molina.json +++ b/Projects/Governance/Plugins/User-Profiles/Luis-Fernando-Molina.json @@ -82,7 +82,7 @@ "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": false, + "isCollapsed": true, "angleToParent": 1, "distanceToParent": 3, "arrangementStyle": 0 @@ -97,7 +97,95 @@ "name": "New Mentorship Program", "config": "{}", "project": "Governance", - "userMentors": [], + "userMentors": [ + { + "type": "User Mentor", + "name": "Julian-Molina", + "config": "{}", + "project": "Governance", + "id": "97483d0f-35ec-4471-a981-0d22565e0d63", + "savedPayload": { + "position": { + "x": 30862.495633423034, + "y": 23307.14665723229 + }, + "targetPosition": { + "x": 30608.478373654547, + "y": 23466.75628018689 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": {}, + "referenceParent": { + "type": "User Profile", + "name": "Julian-Molina", + "id": "1fd95e41-4b22-48d5-be3a-904c37afcb11" + } + } + }, + { + "type": "User Mentor", + "name": "Jeremy", + "config": "{}", + "project": "Governance", + "id": "8adecfda-c803-400c-acde-c34bda09e39b", + "savedPayload": { + "position": { + "x": 30900.956747309094, + "y": 23533.512560373787 + }, + "targetPosition": { + "x": 30608.478373654547, + "y": 23466.75628018689 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": {}, + "referenceParent": { + "type": "User Profile", + "name": "Jeremy", + "id": "759e9012-c995-47ed-92f1-7d204bf2b58e" + } + } + } + ], + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "09648f99-1bf8-4d53-9d20-f15cc8c71508", + "savedPayload": { + "position": { + "x": 30768.08799660915, + "y": 23720.77353995538 + }, + "targetPosition": { + "x": 30608.478373654547, + "y": 23466.75628018689 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": {} + } + }, "id": "8af4af68-62bf-4ad2-bf84-f1124cba0abf", "savedPayload": { "position": { @@ -401,7 +489,7 @@ "poolWeightVotes": [ { "type": "Pool Weight Vote", - "name": "Usage Pool", + "name": "Mentorship Program Pool", "config": "{}", "project": "Governance", "id": "a32cb176-83c0-4800-b630-01f1df6d2301", @@ -425,7 +513,7 @@ "uiObject": {}, "referenceParent": { "type": "Pool", - "name": "Usage", + "name": "Mentorship Program", "id": "60712b3c-ee76-40ba-8de2-e03aa61f6dde" } } diff --git a/Projects/Governance/UI/Function-Libraries/DistributionProcess.js b/Projects/Governance/UI/Function-Libraries/DistributionProcess.js index f0eafee59..65b559f6f 100644 --- a/Projects/Governance/UI/Function-Libraries/DistributionProcess.js +++ b/Projects/Governance/UI/Function-Libraries/DistributionProcess.js @@ -40,6 +40,11 @@ function newGovernanceFunctionLibraryDistributionProcess() { pools, userProfiles ) + + UI.projects.governance.functionLibraries.mentorshipProgram.calculate( + pools, + userProfiles + ) UI.projects.governance.functionLibraries.claims.calculate( features, diff --git a/Projects/Governance/UI/Function-Libraries/MentorshipProgram.js b/Projects/Governance/UI/Function-Libraries/MentorshipProgram.js index 6e7ed04c3..40101bfd5 100644 --- a/Projects/Governance/UI/Function-Libraries/MentorshipProgram.js +++ b/Projects/Governance/UI/Function-Libraries/MentorshipProgram.js @@ -26,7 +26,7 @@ function newGovernanceFunctionLibraryMentorshipProgram() { /* Scan Pools Until finding the Mentoship-Program Pool */ for (let i = 0; i < pools.length; i++) { let poolsNode = pools[i] - referralProgramPoolTokenReward = UI.projects.governance.utilities.pools.findPool(poolsNode, "Mentorship-Program") + mentorshipProgramPoolTokenReward = UI.projects.governance.utilities.pools.findPool(poolsNode, "Mentorship-Program") } if (mentorshipProgramPoolTokenReward === undefined || mentorshipProgramPoolTokenReward === 0) { return } /* @@ -73,33 +73,31 @@ function newGovernanceFunctionLibraryMentorshipProgram() { percentage: 0 } } - /* - If the node is a User Profile, we will check if it has a User Referrer child defined. - */ if ( node.type === 'User Profile' && - node.tokenSwitch !== undefined && - node.tokenSwitch.mentorshipProgram !== undefined + node.tokenSwitch !== undefined ) { - reserMentorshipProgram(node.tokenSwitch.mentorshipProgram) + reserMentorshipProgram(node.tokenSwitch) + return + } + if ( + node.type === 'Token Switch' && + node.mentorshipProgram !== undefined + ) { + reserMentorshipProgram(node.mentorshipProgram) return } - /* - If the node is a Mentorship Program, we will check if it has a User Referrer child defined. - */ if ( node.type === 'Mentorship Program' && - node.userReferrer !== undefined + node.userMentors !== undefined ) { - reserMentorshipProgram(node.userReferrer) + for (let i = 0; i < node.userMentors.length; i++) { + reserMentorshipProgram(node.userMentors[i]) + } return } - /* - If there is a reference parent defined, this means that the mentorship outgoingPower is - transfered to it. - */ if ( - node.type === 'User Referrer' && + node.type === 'User Mentor' && node.payload.referenceParent !== undefined ) { reserMentorshipProgram(node.payload.referenceParent) @@ -111,9 +109,9 @@ function newGovernanceFunctionLibraryMentorshipProgram() { if (mentorshipProgram === undefined || mentorshipProgram.payload === undefined) { return } /* Here we will convert Token Power into Mentorship Power. - As per system rules referringPower = tokensPower + As per system rules mentoshipPower = tokensPower */ - let referringPower = mentorshipProgram.payload.tokenPower + let mentoshipPower = mentorshipProgram.payload.tokenPower /* We will also reseet the count of mentorships here. */ @@ -121,19 +119,19 @@ function newGovernanceFunctionLibraryMentorshipProgram() { /* The Own Power is the power generated by the same User Profile tokens, not inherited from others. */ - mentorshipProgram.payload.mentorshipProgram.ownPower = referringPower + mentorshipProgram.payload.mentorshipProgram.ownPower = mentoshipPower - distributeMentorshipPower(mentorshipProgram, referringPower, count) + distributeMentorshipPower(mentorshipProgram, mentoshipPower, count) } function distributeMentorshipPower( node, - referringPower, + mentoshipPower, count ) { - if (node === undefined) { return } if (node.payload === undefined) { return } + if (node.payload.mentorshipProgram === undefined) { return } switch (node.type) { case 'Mentorship Program': { @@ -144,10 +142,10 @@ function newGovernanceFunctionLibraryMentorshipProgram() { */ node.payload.mentorshipProgram.count = node.payload.mentorshipProgram.count + count /* - The outgoingPower of this node will be accumulating all the referringPower flowing + The outgoingPower of this node will be accumulating all the mentoshipPower flowing through it, no matter from where it comes. */ - node.payload.mentorshipProgram.outgoingPower = node.payload.mentorshipProgram.outgoingPower + referringPower + node.payload.mentorshipProgram.outgoingPower = node.payload.mentorshipProgram.outgoingPower + mentoshipPower /* 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 @@ -168,27 +166,31 @@ function newGovernanceFunctionLibraryMentorshipProgram() { */ accumulatedIncomingMentorshipPower = accumulatedIncomingMentorshipPower + node.payload.mentorshipProgram.incomingPower - if (node.userReferrer !== undefined) { - distributeMentorshipPower(node.userReferrer, referringPower, 0) + if (node.userMentors !== undefined) { + for (let i = 0; i < node.userMentors.length; i++) { + distributeMentorshipPower(node.userMentors[i], mentoshipPower / node.userMentors.length, 0) + } } break } - case 'User Referrer': { - drawUserReferrer(node) + case 'User Mentor': { + node.payload.mentorshipProgram.outgoingPower = node.payload.parentNode.payload.mentorshipProgram.outgoingPower / node.payload.parentNode.userMentors.length + + drawUserMentor(node) if (node.payload.referenceParent !== undefined) { - distributeMentorshipPower(node.payload.referenceParent, referringPower / 10, 0) + distributeMentorshipPower(node.payload.referenceParent, mentoshipPower / 10, 0) } break } case 'User Profile': { if (node.tokenSwitch !== undefined) { - distributeMentorshipPower(node.tokenSwitch, referringPower, 0) + distributeMentorshipPower(node.tokenSwitch, mentoshipPower, 0) } break } case 'Token Switch': { if (node.mentorshipProgram !== undefined) { - distributeMentorshipPower(node.mentorshipProgram, referringPower, 1) + distributeMentorshipPower(node.mentorshipProgram, mentoshipPower, 1) } break } @@ -198,7 +200,7 @@ function newGovernanceFunctionLibraryMentorshipProgram() { function calculateMentorshipProgram(mentorshipProgram) { /* Here we will calculate which share of the Mentorship Program Pool this user will get in tokens. - To do that, we use the incomingPower, to se which proportion of the accumulatedIncomingMentorshipPower + To do that, we use the incomingPower, to see which proportion of the accumulatedIncomingMentorshipPower represents. */ if (mentorshipProgram.payload === undefined) { return } @@ -223,42 +225,54 @@ function newGovernanceFunctionLibraryMentorshipProgram() { mentorship pyramid.) */ if ( + mentorshipProgram.payload.mentorshipProgram.awarded.tokens > 0 && mentorshipProgram.payload.mentorshipProgram.ownPower < 1000000 && - (mentorshipProgram.userReferrer === undefined || mentorshipProgram.userReferrer.payload.referenceParent === undefined) + (mentorshipProgram.userMentors === undefined || hasUsersDefined(mentorshipProgram.userMentors) === false) ) { - 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.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 metors are.") mentorshipProgram.payload.mentorshipProgram.awarded.tokens = 0 } drawMentorshipProgram(mentorshipProgram) } - function drawUserReferrer(node) { + function hasUsersDefined(usersArray) { + if (usersArray === undefined) { return false } + for (let i = 0; i < usersArray.length; i++) { + let user = usersArray[i] + if (user.payload.referenceParent !== undefined) { return true } + } + return false + } + + function drawUserMentor(node) { if (node.payload !== undefined) { - 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) + + const outgoingPowerText = new Intl.NumberFormat().format(node.payload.mentorshipProgram.outgoingPower) node.payload.uiObject.valueAngleOffset = 180 node.payload.uiObject.valueAtAngle = true - node.payload.uiObject.setValue(outgoingPowerText + ' ' + 'Referring Power') + node.payload.uiObject.setValue(outgoingPowerText + ' ' + 'Mentorship Power') node.payload.uiObject.statusAngleOffset = 0 node.payload.uiObject.statusAtAngle = false - node.payload.uiObject.setStatus(ownPowerText + ' Own RP + ' + incomingPowerText + ' Incoming RP = ' + outgoingPowerText + ' ' + ' Outgoing RP') + node.payload.uiObject.setStatus(outgoingPowerText + ' ' + ' Outgoing Power') } } function drawMentorshipProgram(node) { if (node.payload !== undefined) { + const ownPowerText = new Intl.NumberFormat().format(node.payload.mentorshipProgram.ownPower) + const incomingPowerText = new Intl.NumberFormat().format(node.payload.mentorshipProgram.incomingPower) + node.payload.uiObject.statusAngleOffset = 0 node.payload.uiObject.statusAtAngle = false - node.payload.uiObject.setStatus("Referring Power = Token Power") + node.payload.uiObject.setStatus(ownPowerText + ' Own Power - ' + incomingPowerText + ' Incoming Power') } if (node.tokensAwarded !== undefined && node.tokensAwarded.payload !== undefined) { @@ -270,7 +284,7 @@ function newGovernanceFunctionLibraryMentorshipProgram() { 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.') + node.tokensAwarded.payload.uiObject.setStatus('From ' + node.payload.mentorshipProgram.count + ' Mentees.') } } } diff --git a/Projects/Governance/UI/Function-Libraries/ReferralProgram.js b/Projects/Governance/UI/Function-Libraries/ReferralProgram.js index 12da96fe5..d6d4950a4 100644 --- a/Projects/Governance/UI/Function-Libraries/ReferralProgram.js +++ b/Projects/Governance/UI/Function-Libraries/ReferralProgram.js @@ -73,20 +73,20 @@ function newGovernanceFunctionLibraryReferralProgram() { percentage: 0 } } - /* - If the node is a User Profile, we will check if it has a User Referrer child defined. - */ if ( node.type === 'User Profile' && - node.tokenSwitch !== undefined && - node.tokenSwitch.referralProgram !== undefined + node.tokenSwitch !== undefined ) { - reserReferralProgram(node.tokenSwitch.referralProgram) + reserReferralProgram(node.tokenSwitch) + return + } + if ( + node.type === 'Token Switch' && + node.referralProgram !== undefined + ) { + reserReferralProgram(node.referralProgram) return } - /* - If the node is a Referral Program, we will check if it has a User Referrer child defined. - */ if ( node.type === 'Referral Program' && node.userReferrer !== undefined @@ -94,10 +94,6 @@ function newGovernanceFunctionLibraryReferralProgram() { reserReferralProgram(node.userReferrer) return } - /* - If there is a reference parent defined, this means that the referral outgoingPower is - transfered to it. - */ if ( node.type === 'User Referrer' && node.payload.referenceParent !== undefined @@ -198,7 +194,7 @@ function newGovernanceFunctionLibraryReferralProgram() { function calculateReferralProgram(referralProgram) { /* Here we will calculate which share of the Referral Program Pool this user will get in tokens. - To do that, we use the incomingPower, to se which proportion of the accumulatedIncomingReferralPower + To do that, we use the incomingPower, to see which proportion of the accumulatedIncomingReferralPower represents. */ if (referralProgram.payload === undefined) { return }