Referral Program half way reimplemented

This commit is contained in:
Luis Fernando Molina committed 2021-06-16 20:10:57 +02:00
1 parent ac38f35c68
commit 5bac00777e
7 files changed
+175 -85

No files matched your search

@@ -30,6 +30,10 @@ function newUiObject() {
hasInfo: undefined,
valueAtAngle: true,
valueAngleOffset: 0,
percentageAtAngle: true,
percentageAngleOffset: 0,
statusAtAngle: true,
statusAngleOffset: 0,
run: run,
stop: stop,
heartBeat: heartBeat,
@@ -1887,13 +1891,13 @@ function newUiObject() {
label = label.substring(0, MAX_LABEL_LENGTH) + '...'
}
if (thisObject.valueAtAngle === true && thisObject.payload.angle !== undefined) {
if (thisObject.percentageAtAngle === true && thisObject.payload.angle !== undefined) {
labelPoint = {
x: position.x - getTextWidth(label) / 2,
y: position.y
}
labelPoint.x = labelPoint.x + radius * 7 / 3 * Math.cos(toRadians(thisObject.payload.angle + thisObject.valueAngleOffset))
labelPoint.y = labelPoint.y + radius * 7 / 3 * Math.sin(toRadians(thisObject.payload.angle + thisObject.valueAngleOffset)) + lineSeparator * 1
labelPoint.x = labelPoint.x + radius * 7 / 3 * Math.cos(toRadians(thisObject.payload.angle + thisObject.percentageAngleOffset))
labelPoint.y = labelPoint.y + radius * 7 / 3 * Math.sin(toRadians(thisObject.payload.angle + thisObject.percentageAngleOffset)) + lineSeparator * 1
} else {
if (thisObject.isOnFocus === true) {
labelPoint = {
@@ -1948,15 +1952,25 @@ function newUiObject() {
label = label.substring(0, MAX_LABEL_LENGTH) + '...'
}
if (thisObject.isOnFocus === true) {
if (thisObject.statusAtAngle === true && thisObject.payload.angle !== undefined) {
labelPoint = {
x: position.x - getTextWidth(label) / 2,
y: position.y + radius * 2 / 3 + lineSeparator * 4 + 30
y: position.y
}
labelPoint.x = labelPoint.x + radius * 7 / 3 * Math.cos(toRadians(thisObject.payload.angle + thisObject.statusAngleOffset))
labelPoint.y = labelPoint.y + radius * 7 / 3 * Math.sin(toRadians(thisObject.payload.angle + thisObject.statusAngleOffset)) + lineSeparator * 2
} else {
labelPoint = {
x: position.x - getTextWidth(label) / 2,
y: position.y + thisObject.payload.floatingObject.currentImageSize / 2 + lineSeparator * 4
if (thisObject.isOnFocus === true) {
labelPoint = {
x: position.x - getTextWidth(label) / 2,
y: position.y + radius * 2 / 3 + lineSeparator * 4 + 30
}
} else {
labelPoint = {
x: position.x - getTextWidth(label) / 2,
y: position.y + thisObject.payload.floatingObject.currentImageSize / 2 + lineSeparator * 4
}
}
}
@@ -424,7 +424,7 @@
{
"type": "Pool",
"name": "User Referrals",
"config": "{\n \"codeName\": \"User-Referrals\"\n}",
"config": "{\n \"codeName\": \"Referral-Program\"\n}",
"project": "Governance",
"poolClasses": [],
"pools": [],
@@ -15,10 +15,10 @@
"project": "Governance",
"userReferrer": {
"type": "User Referrer",
"name": "Luis-Fernando-Molina",
"config": "{\n \"description\": \"\"\n}",
"name": "Jeremy",
"config": "{}",
"project": "Governance",
"id": "edf7bcda-23f6-49bb-b9b2-9a34edcb4a40",
"id": "0d0b04ff-034b-4b02-8351-67d621d514c0",
"savedPayload": {
"position": {
"x": 25503.74798740812,
@@ -32,15 +32,15 @@
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {},
"referenceParent": {
"type": "User Profile",
"name": "Luis-Fernando-Molina",
"id": "148911b3-b2f3-44fb-8cb4-017991789132"
"name": "Jeremy",
"id": "759e9012-c995-47ed-92f1-7d204bf2b58e"
}
}
},
@@ -13,11 +13,42 @@
"name": "New Referral Program",
"config": "{}",
"project": "Governance",
"userReferrer": {
"type": "User Referrer",
"name": "Julian-Molina",
"config": "{}",
"project": "Governance",
"id": "c96ae419-54ad-4d70-94fe-38833288d471",
"savedPayload": {
"position": {
"x": 30785.098889480818,
"y": 23025.90611888476
},
"targetPosition": {
"x": 30550.54944474041,
"y": 23212.953059442378
},
"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"
}
}
},
"id": "43a24543-03cf-4511-b670-63566159dbd7",
"savedPayload": {
"position": {
"x": 30586.290660370727,
"y": 23530.165121735263
"x": 30550.54944474041,
"y": 23212.953059442378
},
"targetPosition": {
"x": 30316,
@@ -27,7 +58,7 @@
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
@@ -45,8 +76,8 @@
"id": "8af4af68-62bf-4ad2-bf84-f1124cba0abf",
"savedPayload": {
"position": {
"x": 30503.04694055762,
"y": 23634.549444740405
"x": 30608.478373654547,
"y": 23466.75628018689
},
"targetPosition": {
"x": 30316,
@@ -56,7 +87,7 @@
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
@@ -74,8 +105,8 @@
"id": "91d82012-4362-4fe0-b02b-0eb3b394ace5",
"savedPayload": {
"position": {
"x": 30382.756280186895,
"y": 23692.478373654543
"x": 30446.165121735266,
"y": 23670.290660370723
},
"targetPosition": {
"x": 30316,
@@ -85,7 +116,7 @@
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
@@ -1286,12 +1317,12 @@
"id": "e059f5c4-9132-4d76-9f3e-1060658fa704",
"savedPayload": {
"position": {
"x": 30048.97487925242,
"y": 24569.913494618184
"x": 29795.339513058934,
"y": 24481.162641482904
},
"targetPosition": {
"x": 30115.731159439314,
"y": 24277.435120963637
"x": 29925.5046347942,
"y": 24210.871981112177
},
"floatingObject": {
"isPinned": false,
@@ -1319,12 +1350,12 @@
"id": "1d398124-3f36-40a1-8b3b-6c77ad489b92",
"savedPayload": {
"position": {
"x": 30115.731159439314,
"y": 24277.435120963637
"x": 29925.5046347942,
"y": 24210.871981112177
},
"targetPosition": {
"x": 30182.48743962621,
"y": 23984.95674730909
"x": 30055.669756529467,
"y": 23940.58132074145
},
"floatingObject": {
"isPinned": false,
@@ -1344,12 +1375,12 @@
"id": "2b8d3ce7-515c-44ad-8d80-3c2be6d7736f",
"savedPayload": {
"position": {
"x": 30182.48743962621,
"y": 23984.95674730909
"x": 30055.669756529467,
"y": 23940.58132074145
},
"targetPosition": {
"x": 30249.243719813105,
"y": 23692.478373654543
"x": 30185.834878264734,
"y": 23670.290660370723
},
"floatingObject": {
"isPinned": false,
@@ -1368,8 +1399,8 @@
"id": "d5ed432e-78bf-432e-be3b-8649932f7a65",
"savedPayload": {
"position": {
"x": 30249.243719813105,
"y": 23692.478373654543
"x": 30185.834878264734,
"y": 23670.290660370723
},
"targetPosition": {
"x": 30316,
@@ -1379,7 +1410,7 @@
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
@@ -1399,8 +1430,8 @@
"id": "796dd30f-c90d-4b8d-a63d-89867347407b",
"savedPayload": {
"position": {
"x": 30128.95305944238,
"y": 23634.549444740405
"x": 30023.521626345453,
"y": 23466.75628018689
},
"targetPosition": {
"x": 30316,
@@ -1410,7 +1441,7 @@
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
@@ -1427,8 +1458,8 @@
"id": "b046f4e4-40b1-4e47-8fed-75a6a5c6029d",
"savedPayload": {
"position": {
"x": 30045.709339629273,
"y": 23530.165121735263
"x": 30081.45055525959,
"y": 23212.953059442378
},
"targetPosition": {
"x": 30316,
@@ -1438,7 +1469,7 @@
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
@@ -240,6 +240,8 @@ function newGovernanceFunctionLibraryTokenPower() {
node.payload.uiObject.setValue(tokenPower)
if (percentage !== undefined) {
node.payload.uiObject.percentageAngleOffset = 180
node.payload.uiObject.percentageAtAngle = true
node.payload.uiObject.setPercentage(percentage.toFixed(2))
}
}
@@ -23,15 +23,30 @@ function newGovernanceFunctionLibraryUserReferrals() {
*/
for (let i = 0; i < userProfiles.length; i++) {
let userProfile = userProfiles[i]
resetUserReferrals(userProfile)
if (userProfile.tokenSwitch === undefined) { continue }
if (userProfile.tokenSwitch.referralProgram === undefined) { continue }
if (userProfile.tokenSwitch.referralProgram.payload === undefined) { continue }
resetUserReferrals(userProfile.tokenSwitch.referralProgram)
}
for (let i = 0; i < userProfiles.length; i++) {
let userProfile = userProfiles[i]
distributeForProfile(userProfile)
if (userProfile.tokenSwitch === undefined) { continue }
if (userProfile.tokenSwitch.referralProgram === undefined) { continue }
if (userProfile.tokenSwitch.referralProgram.payload === undefined) { continue }
distributeForReferralProgram(userProfile.tokenSwitch.referralProgram)
}
for (let i = 0; i < userProfiles.length; i++) {
let userProfile = userProfiles[i]
calculateAwardedForProfile(userProfile)
if (userProfile.tokenSwitch === undefined) { continue }
if (userProfile.tokenSwitch.referralProgram === undefined) { continue }
if (userProfile.tokenSwitch.referralProgram.payload === undefined) { continue }
calculateForReferralProgram(userProfile.tokenSwitch.referralProgram)
}
function findPool(node) {
@@ -46,7 +61,7 @@ function newGovernanceFunctionLibraryUserReferrals() {
node.type === 'Pool'
) {
let codeName = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(node.payload, 'codeName')
if (codeName === "User-Referrals") {
if (codeName === "Referral-Program") {
tokensReward = node.payload.tokens
return
}
@@ -96,8 +111,19 @@ function newGovernanceFunctionLibraryUserReferrals() {
If the node is a User Profile, we will check if it has a User Referrer child defined.
*/
if (
node.userReferrer !== undefined &&
node.type === 'User Profile'
node.type === 'User Profile' &&
node.tokenSwitch !== undefined &&
node.tokenSwitch.referralProgram !== undefined
) {
resetUserReferrals(node.tokenSwitch.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
) {
resetUserReferrals(node.userReferrer)
return
@@ -107,26 +133,20 @@ function newGovernanceFunctionLibraryUserReferrals() {
transfered to it.
*/
if (
node.payload.referenceParent !== undefined &&
node.type === 'User Referrer'
node.type === 'User Referrer' &&
node.payload.referenceParent !== undefined
) {
resetUserReferrals(node.payload.referenceParent)
return
}
}
function distributeForProfile(userProfile) {
if (userProfile === undefined || userProfile.payload === undefined) { return }
let referringPower
if (userProfile.payload.blockchainTokens === undefined) {
return
} else {
referringPower = userProfile.payload.blockchainTokens
}
function distributeForReferralProgram(referralProgram) {
if (referralProgram === undefined || referralProgram.payload === undefined) { return }
let referringPower = referralProgram.payload.tokenPower
let referringCount = 0
userProfile.payload.referring.ownPower = referringPower
distributeUserReferrals(userProfile, referringPower, referringCount)
referralProgram.payload.referring.ownPower = referringPower
distributeUserReferrals(referralProgram, referringPower, referringCount)
}
function distributeUserReferrals(node, referringPower, referringCount) {
@@ -142,10 +162,10 @@ function newGovernanceFunctionLibraryUserReferrals() {
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'
node.type === 'Referral Program' &&
node.userReferrer !== undefined
) {
distributeUserReferrals(node.userReferrer, referringPower, 1, 0)
distributeUserReferrals(node.userReferrer, referringPower / 10, 1, 0)
return
}
/*
@@ -153,45 +173,55 @@ function newGovernanceFunctionLibraryUserReferrals() {
transfered to it.
*/
if (
node.payload.referenceParent !== undefined &&
node.type === 'User Referrer'
node.type === 'User Referrer' &&
node.payload.referenceParent !== undefined
) {
drawUserReferrals(node)
distributeUserReferrals(node.payload.referenceParent, referringPower / 10, 1)
distributeUserReferrals(node.payload.referenceParent, referringPower, 1)
return
}
}
function calculateAwardedForProfile(userProfile) {
if (userProfile.payload === undefined) { return }
function calculateForReferralProgram(referralProgram) {
if (referralProgram.payload === undefined) { return }
let totalPowerRewardRation = tokensReward / totalReferralsPower
if (totalPowerRewardRation < 1) { totalPowerRewardRation = 1 }
let totalPowerRewardRatio = tokensReward / totalReferralsPower
if (totalPowerRewardRatio < 1) { totalPowerRewardRatio = 1 }
userProfile.payload.referring.awarded.tokens = userProfile.payload.referring.referralsPower * totalPowerRewardRation
drawUserProfiles(userProfile)
referralProgram.payload.referring.awarded.tokens = referralProgram.payload.referring.referralsPower * totalPowerRewardRatio
drawReferralProgram(referralProgram)
}
function drawUserReferrals(node) {
if (node.payload !== undefined) {
const powerText = new Intl.NumberFormat().format(node.payload.referring.combinedPower)
const ownPowerText = new Intl.NumberFormat().format(node.payload.referring.ownPower)
const referralsPowerText = new Intl.NumberFormat().format(node.payload.referring.referralsPower)
const combinedPowerText = new Intl.NumberFormat().format(node.payload.referring.combinedPower)
node.payload.uiObject.valueAngleOffset = 0
node.payload.uiObject.valueAtAngle = false
node.payload.uiObject.valueAngleOffset = 180
node.payload.uiObject.valueAtAngle = true
node.payload.uiObject.setStatus(powerText + ' ' + 'Combined Referring Power')
return
node.payload.uiObject.setValue( combinedPowerText + ' ' + 'Referring Power')
node.payload.uiObject.statusAngleOffset = 0
node.payload.uiObject.statusAtAngle = false
node.payload.uiObject.setStatus(ownPowerText + ' own RP + ' + referralsPowerText + ' inherited RP = ' + combinedPowerText + ' ' + ' Total RP')
}
}
function drawUserProfiles(node) {
function drawReferralProgram(node) {
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
node.payload.uiObject.statusAngleOffset = 0
node.payload.uiObject.statusAtAngle = false
node.payload.uiObject.setStatus("Referring Power = Token Power / 10")
return
if (
(
@@ -268,7 +268,16 @@ function newGovernanceFunctionLibraryVotes() {
function drawVotes(node, votes, percentage) {
votes = new Intl.NumberFormat().format(votes) + ' ' + 'Votes'
if (node.payload !== undefined) {
if (node.type === 'User Profile') {
if (node.type === 'Voting Program') {
node.payload.uiObject.statusAngleOffset = 0
node.payload.uiObject.statusAtAngle = false
node.payload.uiObject.setStatus("Votes = Tokens Power")
if (percentage !== undefined) {
node.payload.uiObject.setPercentage(percentage.toFixed(2))
}
return
}
if (
@@ -286,9 +295,13 @@ function newGovernanceFunctionLibraryVotes() {
) {
node.payload.uiObject.valueAngleOffset = 0
node.payload.uiObject.valueAtAngle = false
node.payload.uiObject.percentageAngleOffset = 0
node.payload.uiObject.percentageAtAngle = false
} else {
node.payload.uiObject.valueAngleOffset = 180
node.payload.uiObject.valueAtAngle = true
node.payload.uiObject.percentageAngleOffset = 180
node.payload.uiObject.percentageAtAngle = true
}
node.payload.uiObject.setValue(votes)