From 280c6b26d7ec25c261668374a6501219da70048f Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 14 Jun 2021 00:54:37 +0200 Subject: [PATCH 1/2] Tokens Awarded Calculation Implemented both for Claims AND Referrals --- .../Governance/Plugins/Pools/Superalgos.json | 35 +---- .../Plugins/User-Profiles/Julian-Molina.json | 35 ++++- .../User-Profiles/Luis-Fernando-Molina.json | 52 +++---- .../UI/Function-Libraries/Claims.js | 30 +++- .../Function-Libraries/DistributionProcess.js | 1 + .../UI/Function-Libraries/UserReferrals.js | 134 +++++++++++++++--- 6 files changed, 200 insertions(+), 87 deletions(-) diff --git a/Projects/Governance/Plugins/Pools/Superalgos.json b/Projects/Governance/Plugins/Pools/Superalgos.json index 98d4301b3..45da273e9 100644 --- a/Projects/Governance/Plugins/Pools/Superalgos.json +++ b/Projects/Governance/Plugins/Pools/Superalgos.json @@ -424,40 +424,9 @@ { "type": "Pool", "name": "User Referrals", - "config": "{\n \"description\": \"\"\n}", + "config": "{\n \"codeName\": \"User-Referrals\"\n}", "project": "Governance", - "poolClasses": [ - { - "type": "Pool Class", - "name": "Note: Increases when referrer uses the system", - "config": "{\n \"description\": \"\", \"relativeWeight\": 0 \n}", - "project": "Governance", - "poolClasses": [], - "pools": [], - "id": "f06bba01-2b98-4fd3-949a-7038b7f6e96a", - "savedPayload": { - "position": { - "x": 24323.080856734938, - "y": 31257.85618141008 - }, - "targetPosition": { - "x": 24511.87697404989, - "y": 31024.71239297299 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 2, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - } - ], + "poolClasses": [], "pools": [], "id": "639a6504-a0d0-4d7e-ad99-80ba5115ac72", "savedPayload": { diff --git a/Projects/Governance/Plugins/User-Profiles/Julian-Molina.json b/Projects/Governance/Plugins/User-Profiles/Julian-Molina.json index c7e8d0ffd..b739f5bf7 100644 --- a/Projects/Governance/Plugins/User-Profiles/Julian-Molina.json +++ b/Projects/Governance/Plugins/User-Profiles/Julian-Molina.json @@ -218,8 +218,8 @@ "id": "ab4d6901-a84c-44d3-a97a-7bc14de9ff31", "savedPayload": { "position": { - "x": 24963.166666666664, - "y": 24097.33110373638 + "x": 25113.166666666664, + "y": 23837.523482601046 }, "targetPosition": { "x": 24813.166666666664, @@ -240,6 +240,37 @@ "id": "a2bb4366-f480-4685-80b0-e40af9cddd8c" } } + }, + { + "type": "Position Claim Vote", + "name": "Luis-Fernando-Molina Project Leader Superalgos", + "config": "{}", + "project": "Governance", + "id": "2248b955-af4b-42e6-9649-9b6a689d0ade", + "savedPayload": { + "position": { + "x": 24663.166666666664, + "y": 24097.33110373638 + }, + "targetPosition": { + "x": 24813.166666666664, + "y": 23837.523482601046 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": {}, + "referenceParent": { + "type": "Position Contribution Claim", + "name": "Project Leader Superalgos", + "id": "be2aedec-06fd-41fa-8599-08105931f75f" + } + } } ], "assetClaimVotes": [], diff --git a/Projects/Governance/Plugins/User-Profiles/Luis-Fernando-Molina.json b/Projects/Governance/Plugins/User-Profiles/Luis-Fernando-Molina.json index 249b5ec6e..61df8041c 100644 --- a/Projects/Governance/Plugins/User-Profiles/Luis-Fernando-Molina.json +++ b/Projects/Governance/Plugins/User-Profiles/Luis-Fernando-Molina.json @@ -1242,7 +1242,7 @@ "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": false, + "isCollapsed": true, "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 @@ -1273,12 +1273,12 @@ "id": "4bef0dea-763d-4cfe-b56d-37b6d3ff4640", "savedPayload": { "position": { - "x": 28446.384757729335, - "y": 23659.80762113533 + "x": 28429.384757729335, + "y": 23648.80762113533 }, "targetPosition": { - "x": 28446.384757729335, - "y": 23359.80762113533 + "x": 28429.384757729335, + "y": 23348.80762113533 }, "floatingObject": { "isPinned": false, @@ -1304,12 +1304,12 @@ "id": "a5d807f5-7aa0-4251-915b-13c24367fea9", "savedPayload": { "position": { - "x": 28186.577136594, - "y": 23509.80762113533 + "x": 28169.577136594, + "y": 23498.80762113533 }, "targetPosition": { - "x": 28446.384757729335, - "y": 23359.80762113533 + "x": 28429.384757729335, + "y": 23348.80762113533 }, "floatingObject": { "isPinned": false, @@ -1334,12 +1334,12 @@ "id": "7e160d0d-8b89-483c-88a3-6faab8af137f", "savedPayload": { "position": { - "x": 28446.384757729335, - "y": 23359.80762113533 + "x": 28429.384757729335, + "y": 23348.80762113533 }, "targetPosition": { - "x": 28596.384757729335, - "y": 23099.999999999996 + "x": 28579.384757729335, + "y": 23088.999999999996 }, "floatingObject": { "isPinned": false, @@ -1369,12 +1369,12 @@ "id": "98ac1d12-c38e-4b51-8d60-e489305cfc53", "savedPayload": { "position": { - "x": 27996.384757729335, - "y": 23099.999999999996 + "x": 27979.384757729335, + "y": 23088.999999999996 }, "targetPosition": { - "x": 28296.384757729335, - "y": 23099.999999999996 + "x": 28279.384757729335, + "y": 23088.999999999996 }, "floatingObject": { "isPinned": false, @@ -1399,12 +1399,12 @@ "id": "81fd5407-d0b1-4ea0-86a0-a88b51d9dfcf", "savedPayload": { "position": { - "x": 28296.384757729335, - "y": 23099.999999999996 + "x": 28279.384757729335, + "y": 23088.999999999996 }, "targetPosition": { - "x": 28596.384757729335, - "y": 23099.999999999996 + "x": 28579.384757729335, + "y": 23088.999999999996 }, "floatingObject": { "isPinned": false, @@ -1437,7 +1437,7 @@ "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": false, + "isCollapsed": true, "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 @@ -1456,7 +1456,7 @@ { "type": "Weight Votes Switch", "name": "Users Pool Class", - "config": "{}", + "config": "{\n \"percentage\": 50\n}", "project": "Governance", "weightVotesSwitch": [], "poolWeightVotes": [ @@ -2146,7 +2146,7 @@ "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": false, + "isCollapsed": true, "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 @@ -2211,7 +2211,7 @@ "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": false, + "isCollapsed": true, "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 @@ -2239,7 +2239,7 @@ "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": true, + "isCollapsed": false, "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 diff --git a/Projects/Governance/UI/Function-Libraries/Claims.js b/Projects/Governance/UI/Function-Libraries/Claims.js index ea5780edc..4a5fb6fdf 100644 --- a/Projects/Governance/UI/Function-Libraries/Claims.js +++ b/Projects/Governance/UI/Function-Libraries/Claims.js @@ -33,13 +33,20 @@ function newGovernanceFunctionLibraryClaims() { /* Claim Count Follows */ for (let i = 0; i < userProfiles.length; i++) { let userProfilesNode = userProfiles[i] + if (userProfilesNode.payload === undefined) { continue } + userProfilesNode.payload.claims = { + awarded: { + tokens: 0 + }, + count: 0 + } countForNode(userProfilesNode.contributionClaims) } /* Claim Calculation Follows */ for (let i = 0; i < userProfiles.length; i++) { let userProfilesNode = userProfiles[i] - calculateForNode(userProfilesNode.contributionClaims) + calculateForNode(userProfilesNode.contributionClaims, userProfilesNode) } } @@ -99,6 +106,7 @@ function newGovernanceFunctionLibraryClaims() { ) { if (node.payload.claims === undefined) { node.payload.claims = { + count: 0, awarded: { tokens: 0, percentage: 0 @@ -154,7 +162,7 @@ function newGovernanceFunctionLibraryClaims() { } } - function calculateForNode(node) { + function calculateForNode(node, userProfilesNode) { if (node === undefined) { return } if (node.payload === undefined) { return } @@ -197,7 +205,10 @@ function newGovernanceFunctionLibraryClaims() { ) node.payload.claims.awarded.percentage = node.payload.claims.awarded.tokens / node.payload.referenceParent.payload.tokens * 100 - drawClaims(node) + userProfilesNode.payload.claims.awarded.tokens = userProfilesNode.payload.claims.awarded.tokens + node.payload.claims.awarded.tokens + userProfilesNode.payload.claims.count++ + + drawClaims(node, userProfilesNode) } } @@ -210,7 +221,7 @@ function newGovernanceFunctionLibraryClaims() { switch (property.type) { case 'node': { let childNode = node[property.name] - calculateForNode(childNode) + calculateForNode(childNode, userProfilesNode) } break case 'array': { @@ -218,7 +229,7 @@ function newGovernanceFunctionLibraryClaims() { if (propertyArray !== undefined) { for (let m = 0; m < propertyArray.length; m++) { let childNode = propertyArray[m] - calculateForNode(childNode) + calculateForNode(childNode, userProfilesNode) } } break @@ -228,13 +239,20 @@ function newGovernanceFunctionLibraryClaims() { } } - function drawClaims(node) { + function drawClaims(node, userProfilesNode) { let satatus = new Intl.NumberFormat().format(node.payload.claims.awarded.tokens) + ' ' + 'SA Tokens Awarded' + ' - ' + 'From Reward: ' + node.payload.claims.awarded.percentage.toFixed(2) + '%' + ' - ' + 'Shared Between: ' + node.payload.claims.share.count + ' claims' + ' - ' + 'Share of Claims: ' + node.payload.claims.share.percentage.toFixed(2) + '%' + node.payload.uiObject.setStatus(satatus) + + satatus = new Intl.NumberFormat().format(userProfilesNode.payload.claims.awarded.tokens) + + ' ' + 'SA Tokens Awarded' + + ' from ' + userProfilesNode.payload.claims.count + ' Claims' + + userProfilesNode.payload.uiObject.setValue(satatus) } } \ No newline at end of file diff --git a/Projects/Governance/UI/Function-Libraries/DistributionProcess.js b/Projects/Governance/UI/Function-Libraries/DistributionProcess.js index 32abadf3d..13e621677 100644 --- a/Projects/Governance/UI/Function-Libraries/DistributionProcess.js +++ b/Projects/Governance/UI/Function-Libraries/DistributionProcess.js @@ -33,6 +33,7 @@ function newGovernanceFunctionLibraryDistributionProcess() { ) UI.projects.governance.functionLibraries.userrReferrals.calculate( + pools, userProfiles ) diff --git a/Projects/Governance/UI/Function-Libraries/UserReferrals.js b/Projects/Governance/UI/Function-Libraries/UserReferrals.js index 0fb66ae20..0ada537b7 100644 --- a/Projects/Governance/UI/Function-Libraries/UserReferrals.js +++ b/Projects/Governance/UI/Function-Libraries/UserReferrals.js @@ -6,10 +6,20 @@ function newGovernanceFunctionLibraryUserReferrals() { return thisObject function calculate( + pools, userProfiles ) { + let tokensReward + let totalReferralsPower = 0 + + /* Scan Pools Until finding the User-Referrlas Pool */ + for (let i = 0; i < pools.length; i++) { + let poolsNode = pools[i] + findPool(poolsNode) + } + if (tokensReward === undefined || tokensReward === 0) { return } /* - We will first reset all the referral power, and then distribute it. + We will first reset all the referral combinedPower, and then distribute it. */ for (let i = 0; i < userProfiles.length; i++) { let userProfile = userProfiles[i] @@ -19,13 +29,68 @@ function newGovernanceFunctionLibraryUserReferrals() { let userProfile = userProfiles[i] distributeForProfile(userProfile) } + for (let i = 0; i < userProfiles.length; i++) { + let userProfile = userProfiles[i] + calculateAwardedForProfile(userProfile) + } + + function findPool(node) { + if (node === undefined) { return } + if (node.payload === undefined) { return } + + /* + When we reach certain node types, we will halt the distribution, because these are targets for + voting combinedPower. + */ + if ( + node.type === 'Pool' + ) { + let codeName = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(node.payload, 'codeName') + if (codeName === "User-Referrals") { + tokensReward = node.payload.tokens + return + } + } + let schemaDocument = getSchemaDocument(node) + if (schemaDocument === undefined) { return } + + if (schemaDocument.childrenNodesProperties !== undefined) { + for (let i = 0; i < schemaDocument.childrenNodesProperties.length; i++) { + let property = schemaDocument.childrenNodesProperties[i] + + switch (property.type) { + case 'node': { + let childNode = node[property.name] + findPool(childNode) + } + break + case 'array': { + let propertyArray = node[property.name] + if (propertyArray !== undefined) { + for (let m = 0; m < propertyArray.length; m++) { + let childNode = propertyArray[m] + findPool(childNode) + } + } + break + } + } + } + } + } function resetUserReferrals(node) { if (node === undefined) { return } if (node.payload === undefined) { return } node.payload.referring = { count: 0, - power: 0 + combinedPower: 0, + ownPower: 0, + referralsPower: 0, + awarded: { + tokens: 0, + percentage: 0 + } } /* If the node is a User Profile, we will check if it has a User Referrer child defined. @@ -38,7 +103,7 @@ function newGovernanceFunctionLibraryUserReferrals() { return } /* - If there is a reference parent defined, this means that the referral power is + If there is a reference parent defined, this means that the referral combinedPower is transfered to it. */ if ( @@ -51,8 +116,10 @@ function newGovernanceFunctionLibraryUserReferrals() { } function distributeForProfile(userProfile) { + if (userProfile === undefined || userProfile.payload === undefined) { return } let referringPower = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(userProfile.payload, 'tokens') let referringCount = 0 + userProfile.payload.referring.ownPower = referringPower distributeUserReferrals(userProfile, referringPower, referringCount) } @@ -60,15 +127,14 @@ function newGovernanceFunctionLibraryUserReferrals() { if (node === undefined) { return } if (node.payload === undefined) { return } - node.payload.referring = { - count: node.payload.referring.count + referringCount, - power: node.payload.referring.power + referringPower - } - - drawUserReferrals(node, node.payload.referring.count, node.payload.referring.power) + node.payload.referring.count = node.payload.referring.count + referringCount + node.payload.referring.combinedPower = node.payload.referring.combinedPower + referringPower /* If the node is a User Profile, we will check if it has a User Referrer child defined. */ + totalReferralsPower = totalReferralsPower - node.payload.referring.referralsPower + node.payload.referring.referralsPower = node.payload.referring.combinedPower - node.payload.referring.ownPower + totalReferralsPower = totalReferralsPower + node.payload.referring.referralsPower if ( node.userReferrer !== undefined && node.type === 'User Profile' @@ -77,41 +143,69 @@ function newGovernanceFunctionLibraryUserReferrals() { return } /* - If there is a reference parent defined, this means that the referral power is + If there is a reference parent defined, this means that the referral combinedPower is transfered to it. */ if ( node.payload.referenceParent !== undefined && node.type === 'User Referrer' ) { + drawUserReferrals(node) distributeUserReferrals(node.payload.referenceParent, referringPower / 10, 1) return } } - function drawUserReferrals(node, count, power) { - const powerText = new Intl.NumberFormat().format(power) + ' ' + 'Referring Power' + function calculateAwardedForProfile(userProfile) { + let totalPowerRewardRation = tokensReward / totalReferralsPower + if (totalPowerRewardRation < 1) { totalPowerRewardRation = 1 } + + userProfile.payload.referring.awarded.tokens = userProfile.payload.referring.referralsPower * totalPowerRewardRation + drawUserProfiles(userProfile) + } + + function drawUserReferrals(node) { + const powerText = new Intl.NumberFormat().format(node.payload.referring.combinedPower) + + if (node.payload !== undefined) { + + node.payload.uiObject.valueAngleOffset = 0 + node.payload.uiObject.valueAtAngle = false + + node.payload.uiObject.setStatus(powerText + ' ' + 'Combined Referring Power') + return + } + } + + function drawUserProfiles(node) { + const powerText = new Intl.NumberFormat().format(node.payload.referring.combinedPower) + const awardedTokens = new Intl.NumberFormat().format(node.payload.referring.awarded.tokens) + const referralPower = new Intl.NumberFormat().format(node.payload.referring.referralsPower) + if (node.payload !== undefined) { node.payload.uiObject.valueAngleOffset = 0 node.payload.uiObject.valueAtAngle = false - if (node.type === 'User Referrer') { - node.payload.uiObject.setStatus(powerText) - return - } if ( - (node.type === 'User Profile' && + ( node.userReferrer !== undefined && node.userReferrer.payload !== undefined && node.userReferrer.payload.referenceParent !== undefined) || - power >= 10000000 + node.payload.referring.combinedPower >= 10000000 ) { - node.payload.uiObject.setStatus(powerText + ' - ' + count + ' Referrals') + let status = + powerText + ' ' + 'Combined Referring Power' + ' - ' + + node.payload.referring.count + ' Referrals' + ' - ' + + referralPower + ' Referrals Power' + ' - ' + + awardedTokens + ' ' + 'SA Tokens Awarded' + + node.payload.uiObject.setStatus(status) return } else { - node.payload.uiObject.setStatus('Define your referrer to collect tokens from your referrals.') + node.payload.referring.awarded.tokens = 0 + node.payload.uiObject.setStatus(awardedTokens + ' SA Tokens not Awarded, because you have not defined your referrer yet.') } } } From c8dd0cacff0f5b36bb0c563b8458aa1f9abb325b Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 14 Jun 2021 00:58:30 +0200 Subject: [PATCH 2/2] DeepScan bug fixes --- .../Governance/UI/Function-Libraries/UserReferrals.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Projects/Governance/UI/Function-Libraries/UserReferrals.js b/Projects/Governance/UI/Function-Libraries/UserReferrals.js index 0ada537b7..bcb6d724d 100644 --- a/Projects/Governance/UI/Function-Libraries/UserReferrals.js +++ b/Projects/Governance/UI/Function-Libraries/UserReferrals.js @@ -165,9 +165,8 @@ function newGovernanceFunctionLibraryUserReferrals() { } function drawUserReferrals(node) { - const powerText = new Intl.NumberFormat().format(node.payload.referring.combinedPower) - if (node.payload !== undefined) { + const powerText = new Intl.NumberFormat().format(node.payload.referring.combinedPower) node.payload.uiObject.valueAngleOffset = 0 node.payload.uiObject.valueAtAngle = false @@ -178,11 +177,10 @@ function newGovernanceFunctionLibraryUserReferrals() { } function drawUserProfiles(node) { - const powerText = new Intl.NumberFormat().format(node.payload.referring.combinedPower) - const awardedTokens = new Intl.NumberFormat().format(node.payload.referring.awarded.tokens) - const referralPower = new Intl.NumberFormat().format(node.payload.referring.referralsPower) - if (node.payload !== undefined) { + const powerText = new Intl.NumberFormat().format(node.payload.referring.combinedPower) + const awardedTokens = new Intl.NumberFormat().format(node.payload.referring.awarded.tokens) + const referralPower = new Intl.NumberFormat().format(node.payload.referring.referralsPower) node.payload.uiObject.valueAngleOffset = 0 node.payload.uiObject.valueAtAngle = false