Merge pull request #1349 from Luis-Fernando-Molina/develop
Contribution: Airdrop and Influencer programs implemented
This commit is contained in:
24 files changed
+2499
-1030
No files matched your search
@@ -886,7 +886,9 @@
|
||||
#governance-tab11:checked ~ .governance-search-result-content #content11,
|
||||
#governance-tab12:checked ~ .governance-search-result-content #content12,
|
||||
#governance-tab13:checked ~ .governance-search-result-content #content13,
|
||||
#governance-tab14:checked ~ .governance-search-result-content #content14 {
|
||||
#governance-tab13:checked ~ .governance-search-result-content #content14,
|
||||
#governance-tab13:checked ~ .governance-search-result-content #content15,
|
||||
#governance-tab14:checked ~ .governance-search-result-content #content16 {
|
||||
display: block;
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 9.7 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 7.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"type": "Airdrop Program",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"actionFunction": "uiObject.configEditor.activate",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Foundations",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "tokensAwarded",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Tokens Awarded",
|
||||
"relatedUiObject": "Tokens Awarded"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Foundations",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{}"
|
||||
},
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Token Power Switch->"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 1,
|
||||
"propertyNameAtParent": "airdropProgram",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "tokensAwarded",
|
||||
"type": "node",
|
||||
"childType": "Tokens Awarded",
|
||||
"autoAdd": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"type": "Influencer Program",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"actionFunction": "uiObject.configEditor.activate",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Foundations",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add User Influencer",
|
||||
"relatedUiObject": "User Influencer"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Foundations",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "tokensAwarded",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Tokens Awarded",
|
||||
"relatedUiObject": "Tokens Awarded"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Foundations",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "tokensBonus",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Tokens Bonus",
|
||||
"relatedUiObject": "Tokens Bonus"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Foundations",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{}"
|
||||
},
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Token Power Switch->"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 1,
|
||||
"propertyNameAtParent": "influencerProgram",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "userInfluencers",
|
||||
"type": "array",
|
||||
"childType": "User Influencer",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "tokensAwarded",
|
||||
"type": "node",
|
||||
"childType": "Tokens Awarded",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "tokensBonus",
|
||||
"type": "node",
|
||||
"childType": "Tokens Bonus",
|
||||
"autoAdd": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -15,6 +15,24 @@
|
||||
"label": "Add Token Power Switch",
|
||||
"relatedUiObject": "Token Power Switch"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Foundations",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "airdropProgram",
|
||||
"label": "Add Airdrop Program",
|
||||
"relatedUiObject": "Airdrop Program"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Foundations",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "githubProgram",
|
||||
"label": "Add Github Program",
|
||||
"relatedUiObject": "Github Program"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Foundations",
|
||||
@@ -42,6 +60,15 @@
|
||||
"label": "Add Mentorship Program",
|
||||
"relatedUiObject": "Mentorship Program"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Foundations",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "influencerProgram",
|
||||
"label": "Add Influencer Program",
|
||||
"relatedUiObject": "Influencer Program"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Foundations",
|
||||
@@ -78,15 +105,6 @@
|
||||
"label": "Add Delegation Program",
|
||||
"relatedUiObject": "Delegation Program"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Foundations",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "githubProgram",
|
||||
"label": "Add Github Program",
|
||||
"relatedUiObject": "Github Program"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Foundations",
|
||||
@@ -107,7 +125,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->User Profile->"
|
||||
"compatibleTypes": "->User Profile->Token Power Switch->"
|
||||
},
|
||||
"propertyNameAtParent": "tokenPowerSwitch",
|
||||
"childrenNodesProperties": [
|
||||
@@ -117,6 +135,18 @@
|
||||
"childType": "Token Power Switch",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "airdropProgram",
|
||||
"type": "node",
|
||||
"childType": "Airdrop Program",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "githubProgram",
|
||||
"type": "node",
|
||||
"childType": "Github Program",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "referralProgram",
|
||||
"type": "node",
|
||||
@@ -135,6 +165,12 @@
|
||||
"childType": "Mentorship Program",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "influencerProgram",
|
||||
"type": "node",
|
||||
"childType": "Influencer Program",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "claimsProgram",
|
||||
"type": "node",
|
||||
@@ -158,12 +194,6 @@
|
||||
"type": "node",
|
||||
"childType": "Delegation Program",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "githubProgram",
|
||||
"type": "node",
|
||||
"childType": "Github Program",
|
||||
"autoAdd": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -15,7 +15,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Referral Program->Mentorship Program->Support Program->Claims Program->Staking Program->Github Program->"
|
||||
"compatibleTypes": "->Referral Program->Mentorship Program->Support Program->Claims Program->Staking Program->Github Program->Airdrop Program->Influencer Program->"
|
||||
},
|
||||
"propertyNameAtParent": "tokensAwarded"
|
||||
}
|
||||
@@ -15,7 +15,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Referral Program->Mentorship Program->Support Program->Voting Program->"
|
||||
"compatibleTypes": "->Referral Program->Mentorship Program->Support Program->Voting Program->Influencer Program->"
|
||||
},
|
||||
"propertyNameAtParent": "tokensBonus"
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"type": "User Influencer",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"actionFunction": "uiObject.configEditor.activate",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Foundations",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"title": [
|
||||
"Use Reference Parent"
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Support Program->"
|
||||
},
|
||||
"referencingRules": {
|
||||
"compatibleTypes": "->User Profile->"
|
||||
},
|
||||
"propertyNameAtParent": "userInfluencers"
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
function newGovernanceFunctionLibraryAirdropProgram() {
|
||||
let thisObject = {
|
||||
calculate: calculate
|
||||
}
|
||||
|
||||
return thisObject
|
||||
|
||||
function calculate(
|
||||
pools,
|
||||
userProfiles
|
||||
) {
|
||||
let programPoolTokenReward
|
||||
/*
|
||||
In order to be able to calculate the share of the Program Pool for each User Profile,
|
||||
we need to accumulate all the Airdrop Power that each User Profile at their Program
|
||||
node has, because with that Power is that each Program node gets a share of the pool.
|
||||
*/
|
||||
let accumulatedProgramPower = 0
|
||||
|
||||
/* Scan Pools Until finding the Mentoship-Program Pool */
|
||||
for (let i = 0; i < pools.length; i++) {
|
||||
let poolsNode = pools[i]
|
||||
programPoolTokenReward = UI.projects.governance.utilities.pools.findPool(poolsNode, "Airdrop-Rewards")
|
||||
}
|
||||
if (programPoolTokenReward === undefined || programPoolTokenReward === 0) { return }
|
||||
|
||||
for (let i = 0; i < userProfiles.length; i++) {
|
||||
let userProfile = userProfiles[i]
|
||||
|
||||
if (userProfile.tokenPowerSwitch === undefined) { continue }
|
||||
let program = UI.projects.governance.utilities.validations.onlyOneProgram(userProfile, "Airdrop Program")
|
||||
if (program === undefined) { continue }
|
||||
if (program.payload === undefined) { continue }
|
||||
|
||||
resetProgram(program)
|
||||
}
|
||||
for (let i = 0; i < userProfiles.length; i++) {
|
||||
let userProfile = userProfiles[i]
|
||||
|
||||
if (userProfile.tokenPowerSwitch === undefined) { continue }
|
||||
let program = UI.projects.governance.utilities.validations.onlyOneProgram(userProfile, "Airdrop Program")
|
||||
if (program === undefined) { continue }
|
||||
if (program.payload === undefined) { continue }
|
||||
|
||||
validateProgram(program, userProfile)
|
||||
}
|
||||
for (let i = 0; i < userProfiles.length; i++) {
|
||||
let userProfile = userProfiles[i]
|
||||
|
||||
if (userProfile.tokenPowerSwitch === undefined) { continue }
|
||||
let program = UI.projects.governance.utilities.validations.onlyOneProgram(userProfile, "Airdrop Program")
|
||||
if (program === undefined) { continue }
|
||||
if (program.payload === undefined) { continue }
|
||||
if (program.payload.airdropProgram.isActive === false) { continue }
|
||||
|
||||
distributeProgram(program)
|
||||
}
|
||||
for (let i = 0; i < userProfiles.length; i++) {
|
||||
let userProfile = userProfiles[i]
|
||||
|
||||
if (userProfile.tokenPowerSwitch === undefined) { continue }
|
||||
let program = UI.projects.governance.utilities.validations.onlyOneProgram(userProfile, "Airdrop Program")
|
||||
if (program === undefined) { continue }
|
||||
if (program.payload === undefined) { continue }
|
||||
if (program.payload.airdropProgram.isActive === false) { continue }
|
||||
|
||||
calculateProgram(program)
|
||||
}
|
||||
|
||||
function resetProgram(node) {
|
||||
if (node === undefined) { return }
|
||||
if (node.payload === undefined) { return }
|
||||
if (node.payload.airdropProgram === undefined) {
|
||||
node.payload.airdropProgram = {
|
||||
count: 0,
|
||||
percentage: 0,
|
||||
outgoingPower: 0,
|
||||
ownPower: 0,
|
||||
incomingPower: 0,
|
||||
awarded: {
|
||||
tokens: 0,
|
||||
percentage: 0
|
||||
}
|
||||
}
|
||||
} else {
|
||||
node.payload.airdropProgram.count = 0
|
||||
node.payload.airdropProgram.percentage = 0
|
||||
node.payload.airdropProgram.outgoingPower = 0
|
||||
node.payload.airdropProgram.ownPower = 0
|
||||
node.payload.airdropProgram.incomingPower = 0
|
||||
node.payload.airdropProgram.awarded = {
|
||||
tokens: 0,
|
||||
percentage: 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function validateProgram(node, userProfile) {
|
||||
/*
|
||||
This program is not going to run unless the Profile has Tokens, and for
|
||||
that users needs to execute the setup procedure of signing their Airdrop
|
||||
username with their private key.
|
||||
*/
|
||||
if (
|
||||
userProfile.payload.blockchainTokens === undefined
|
||||
) {
|
||||
node.payload.airdropProgram.isActive = false
|
||||
userProfile.payload.uiObject.setErrorMessage("You need to setup this profile with the Profile Constructor, to access the Token Power of your account at the Blockchain.")
|
||||
return
|
||||
}
|
||||
/*
|
||||
Next thing to do is to validate if the airdrop user profile has a star at the Superalgos repository.
|
||||
*/
|
||||
let profileSignature = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(userProfile.payload, 'signature')
|
||||
if (
|
||||
profileSignature === undefined
|
||||
) {
|
||||
node.payload.airdropProgram.isActive = false
|
||||
userProfile.payload.uiObject.setErrorMessage("You need to setup this profile with the Profile Constructor, and produce a signature of your Airdrop Username.")
|
||||
return
|
||||
}
|
||||
|
||||
node.payload.airdropProgram.isActive = true
|
||||
}
|
||||
|
||||
function distributeProgram(programNode) {
|
||||
if (programNode === undefined || programNode.payload === undefined) { return }
|
||||
/*
|
||||
Here we will convert Token Power into Airdrop Power.
|
||||
As per system rules Airdrop Powar = 1000 SA Tokens.
|
||||
*/
|
||||
let programPower = 1000
|
||||
programNode.payload.airdropProgram.ownPower = programPower
|
||||
|
||||
accumulatedProgramPower = accumulatedProgramPower + programPower
|
||||
}
|
||||
|
||||
function calculateProgram(programNode) {
|
||||
/*
|
||||
Here we will calculate which share of the Program Pool this user will get in tokens.
|
||||
To do that, we use the ownPower, to see which proportion of the accumulatedProgramPower
|
||||
represents.
|
||||
*/
|
||||
if (programNode.payload === undefined) { return }
|
||||
/*
|
||||
If the accumulatedProgramPower is not grater the amount of tokens at the Program Pool, then
|
||||
this user will get the exact amount of tokens from the pool as incomingPower he has.
|
||||
|
||||
If the accumulatedProgramPower is grater the amount of tokens at the Program Pool, then
|
||||
the amount ot tokens to be received is a proportional to the share of incomingPower in accumulatedProgramPower.
|
||||
*/
|
||||
let totalPowerRewardRatio = accumulatedProgramPower / programPoolTokenReward
|
||||
if (totalPowerRewardRatio < 1) { totalPowerRewardRatio = 1 }
|
||||
|
||||
if (programNode.tokensAwarded === undefined || programNode.tokensAwarded.payload === undefined) {
|
||||
programNode.payload.uiObject.setErrorMessage("Tokens Awarded Node is needed in order for this Program to get Tokens from the Program Pool.")
|
||||
return
|
||||
}
|
||||
programNode.payload.airdropProgram.awarded.tokens = programNode.payload.airdropProgram.ownPower / totalPowerRewardRatio
|
||||
|
||||
drawProgram(programNode)
|
||||
}
|
||||
|
||||
function drawProgram(node) {
|
||||
if (node.payload !== undefined) {
|
||||
|
||||
const ownPowerText = parseFloat(node.payload.airdropProgram.ownPower.toFixed(0)).toLocaleString('en')
|
||||
|
||||
node.payload.uiObject.statusAngleOffset = 0
|
||||
node.payload.uiObject.statusAtAngle = false
|
||||
|
||||
node.payload.uiObject.setStatus(ownPowerText + ' Airdrop Power')
|
||||
}
|
||||
if (node.tokensAwarded !== undefined && node.tokensAwarded.payload !== undefined) {
|
||||
|
||||
const tokensAwardedText = parseFloat(node.payload.airdropProgram.awarded.tokens.toFixed(0)).toLocaleString('en')
|
||||
const tokensAwardedBTC = ' ≃ ' + UI.projects.governance.utilities.conversions.estimateSATokensInBTC(node.payload.airdropProgram.awarded.tokens | 0) + ' BTC'
|
||||
|
||||
node.tokensAwarded.payload.uiObject.valueAngleOffset = 0
|
||||
node.tokensAwarded.payload.uiObject.valueAtAngle = false
|
||||
|
||||
node.tokensAwarded.payload.uiObject.setValue(tokensAwardedText + ' SA Tokens' + tokensAwardedBTC)
|
||||
|
||||
node.tokensAwarded.payload.uiObject.statusAngleOffset = 0
|
||||
node.tokensAwarded.payload.uiObject.statusAtAngle = false
|
||||
|
||||
node.tokensAwarded.payload.uiObject.setStatus('For creating your Superalgos profile!')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -75,6 +75,13 @@ function newGovernanceFunctionLibraryDistributionProcess() {
|
||||
userProfiles
|
||||
)
|
||||
/*
|
||||
Run the Influencer Program
|
||||
*/
|
||||
UI.projects.governance.functionLibraries.influencerProgram.calculate(
|
||||
pools,
|
||||
userProfiles
|
||||
)
|
||||
/*
|
||||
Run the Mentorship Program
|
||||
*/
|
||||
UI.projects.governance.functionLibraries.mentorshipProgram.calculate(
|
||||
@@ -105,6 +112,13 @@ function newGovernanceFunctionLibraryDistributionProcess() {
|
||||
userProfiles
|
||||
)
|
||||
/*
|
||||
Run the Airdrop Program
|
||||
*/
|
||||
UI.projects.governance.functionLibraries.airdropProgram.calculate(
|
||||
pools,
|
||||
userProfiles
|
||||
)
|
||||
/*
|
||||
After all the programs were ran, we can calculate the tokens mining
|
||||
calculation each profile.
|
||||
*/
|
||||
|
||||
@@ -141,9 +141,9 @@ function newGovernanceFunctionLibraryGithubProgram() {
|
||||
if (programNode === undefined || programNode.payload === undefined) { return }
|
||||
/*
|
||||
Here we will convert Token Power into Github Power.
|
||||
As per system rules Github Powar = 1000 SA Tokens.
|
||||
As per system rules Github Powar = 1200 SA Tokens.
|
||||
*/
|
||||
let programPower = 1000
|
||||
let programPower = 3000
|
||||
programNode.payload.githubProgram.ownPower = programPower
|
||||
|
||||
accumulatedProgramPower = accumulatedProgramPower + programPower
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
function newGovernanceFunctionLibraryInfluencerProgram() {
|
||||
let thisObject = {
|
||||
calculate: calculate
|
||||
}
|
||||
|
||||
return thisObject
|
||||
|
||||
function calculate(
|
||||
pools,
|
||||
userProfiles
|
||||
) {
|
||||
UI.projects.governance.utilities.decendentProgram.run(
|
||||
pools,
|
||||
userProfiles,
|
||||
"influencerProgram",
|
||||
"Influencer-Rewards",
|
||||
"Influencer Program",
|
||||
"Influencer Power",
|
||||
"userInfluencerers",
|
||||
"User Influencerer"
|
||||
)
|
||||
|
||||
UI.projects.governance.utilities.bonusProgram.run(
|
||||
pools,
|
||||
userProfiles,
|
||||
"influencerProgram",
|
||||
"Influencer-Bonus",
|
||||
"Influencer Program"
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -46,6 +46,16 @@ function newGovernanceFunctionLibraryTokenMining() {
|
||||
for (let i = 0; i < userProfiles.length; i++) {
|
||||
let userProfile = userProfiles[i]
|
||||
|
||||
if (userProfile.tokenPowerSwitch === undefined) { continue }
|
||||
let program = UI.projects.governance.utilities.validations.onlyOneProgram(userProfile, "Influencer Program")
|
||||
if (program === undefined) { continue }
|
||||
if (program.payload === undefined) { continue }
|
||||
|
||||
calculateProgram(userProfile, program, "influencerProgram")
|
||||
}
|
||||
for (let i = 0; i < userProfiles.length; i++) {
|
||||
let userProfile = userProfiles[i]
|
||||
|
||||
if (userProfile.tokenPowerSwitch === undefined) { continue }
|
||||
let program = UI.projects.governance.utilities.validations.onlyOneProgram(userProfile, "Claims Program")
|
||||
if (program === undefined) { continue }
|
||||
@@ -93,6 +103,16 @@ function newGovernanceFunctionLibraryTokenMining() {
|
||||
|
||||
calculateProgram(userProfile, program, "githubProgram")
|
||||
}
|
||||
for (let i = 0; i < userProfiles.length; i++) {
|
||||
let userProfile = userProfiles[i]
|
||||
|
||||
if (userProfile.tokenPowerSwitch === undefined) { continue }
|
||||
let program = UI.projects.governance.utilities.validations.onlyOneProgram(userProfile, "Airdrop Program")
|
||||
if (program === undefined) { continue }
|
||||
if (program.payload === undefined) { continue }
|
||||
|
||||
calculateProgram(userProfile, program, "airdropProgram")
|
||||
}
|
||||
|
||||
for (let i = 0; i < userProfiles.length; i++) {
|
||||
let userProfile = userProfiles[i]
|
||||
|
||||
@@ -46,11 +46,13 @@ function newGovernanceFunctionLibraryTokenPower() {
|
||||
node.type === 'Referral Program' ||
|
||||
node.type === 'Mentorship Program' ||
|
||||
node.type === 'Support Program' ||
|
||||
node.type === 'Influencer Program' ||
|
||||
node.type === 'Voting Program' ||
|
||||
node.type === 'Claims Program' ||
|
||||
node.type === 'Staking Program' ||
|
||||
node.type === 'Delegation Program' ||
|
||||
node.type === 'Github Program'
|
||||
node.type === 'Github Program' ||
|
||||
node.type === 'Airdrop Program'
|
||||
) { return }
|
||||
/*
|
||||
We will reset token power of children.
|
||||
@@ -147,11 +149,13 @@ function newGovernanceFunctionLibraryTokenPower() {
|
||||
node.type === 'Referral Program' ||
|
||||
node.type === 'Mentorship Program' ||
|
||||
node.type === 'Support Program' ||
|
||||
node.type === 'Influencer Program' ||
|
||||
node.type === 'Voting Program' ||
|
||||
node.type === 'Claims Program' ||
|
||||
node.type === 'Staking Program' ||
|
||||
node.type === 'Delegation Program' ||
|
||||
node.type === 'Github Program'
|
||||
node.type === 'Github Program' ||
|
||||
node.type === 'Airdrop Program'
|
||||
) { return }
|
||||
/*
|
||||
We will redistribute token power among children.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
function newGovernanceGlobalsReports() {
|
||||
let thisObject = {
|
||||
REPORTS_SPACE_WIDTH: 1350
|
||||
REPORTS_SPACE_WIDTH: 1550
|
||||
}
|
||||
return thisObject
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
function newGovernanceReportsAirdrop() {
|
||||
let thisObject = {
|
||||
addHTML: addHTML,
|
||||
initialize: initialize,
|
||||
finalize: finalize
|
||||
}
|
||||
|
||||
return thisObject
|
||||
|
||||
function initialize() {
|
||||
|
||||
}
|
||||
|
||||
function finalize() {
|
||||
|
||||
}
|
||||
|
||||
function addHTML(tabIndex, filters) {
|
||||
/*
|
||||
Parameters
|
||||
*/
|
||||
let table = 'airdrop'
|
||||
let programName = 'Airdrop Program'
|
||||
let programPropertyName = 'airdropProgram'
|
||||
/*
|
||||
Setup Filters
|
||||
*/
|
||||
let filtersObject
|
||||
if (filters !== undefined) {
|
||||
try {
|
||||
filtersObject = JSON.parse(filters)
|
||||
} catch (err) { }
|
||||
}
|
||||
/*
|
||||
Other Variables
|
||||
*/
|
||||
let tableRecords = []
|
||||
let tableRecordDefinition = {
|
||||
"properties": [
|
||||
{
|
||||
"name": "name",
|
||||
"label": "User Profile",
|
||||
"type": "string",
|
||||
"order": "ascending",
|
||||
"textAlign": "left"
|
||||
},
|
||||
{
|
||||
"name": "airdropPower",
|
||||
"label": "Airdrop Power",
|
||||
"type": "number",
|
||||
"order": "descending",
|
||||
"textAlign": "center",
|
||||
"format": "2 decimals"
|
||||
},
|
||||
{
|
||||
"name": "tokensAwarded",
|
||||
"label": "Awarded",
|
||||
"type": "number",
|
||||
"order": "descending",
|
||||
"textAlign": "center",
|
||||
"format": "2 decimals"
|
||||
}
|
||||
]
|
||||
}
|
||||
/*
|
||||
Here we get from the workspace all User Profiles.
|
||||
*/
|
||||
let userProfiles = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadsByNodeType('User Profile')
|
||||
/*
|
||||
Transform the result array into table records.
|
||||
*/
|
||||
for (let j = 0; j < userProfiles.length; j++) {
|
||||
let userProfile = userProfiles[j]
|
||||
|
||||
if (userProfile.tokenPowerSwitch === undefined) { continue }
|
||||
let program = UI.projects.governance.utilities.validations.onlyOneProgram(userProfile, programName)
|
||||
if (program === undefined) { continue }
|
||||
if (program.payload === undefined) { continue }
|
||||
|
||||
let tableRecord = {
|
||||
"name": userProfile.name,
|
||||
"airdropPower": program.payload[programPropertyName].ownPower | 0,
|
||||
"tokensAwarded": program.payload[programPropertyName].awarded.tokens | 0
|
||||
}
|
||||
|
||||
if (UI.projects.governance.utilities.filters.applyFilters(filters, filtersObject, tableRecord) === true) {
|
||||
tableRecords.push(tableRecord)
|
||||
}
|
||||
}
|
||||
/*
|
||||
Get the sorting order for this table.
|
||||
*/
|
||||
let sortingOrder = UI.projects.governance.spaces.reportsSpace.tablesSortingOrders[table]
|
||||
/*
|
||||
Set the default sorting order for this table.
|
||||
*/
|
||||
if (sortingOrder === undefined) {
|
||||
UI.projects.governance.spaces.reportsSpace.tablesSortingOrders[table] = {
|
||||
property: 'tokensAwarded',
|
||||
order: 'descending'
|
||||
}
|
||||
sortingOrder = UI.projects.governance.spaces.reportsSpace.tablesSortingOrders[table]
|
||||
}
|
||||
return UI.projects.governance.utilities.tables.addHTML(
|
||||
table,
|
||||
tableRecords,
|
||||
tableRecordDefinition,
|
||||
sortingOrder,
|
||||
tabIndex
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
function newGovernanceReportsInfluencers() {
|
||||
let thisObject = {
|
||||
addHTML: addHTML,
|
||||
initialize: initialize,
|
||||
finalize: finalize
|
||||
}
|
||||
|
||||
return thisObject
|
||||
|
||||
function initialize() {
|
||||
|
||||
}
|
||||
|
||||
function finalize() {
|
||||
|
||||
}
|
||||
|
||||
function addHTML(tabIndex, filters) {
|
||||
return UI.projects.governance.utilities.decendentTables.addHTML(
|
||||
'influencers',
|
||||
'Influencer Program',
|
||||
'influencerProgram',
|
||||
tabIndex,
|
||||
filters
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -30,7 +30,24 @@ function newGovernanceReportsReportsPage() {
|
||||
buildHTML()
|
||||
|
||||
function buildHTML() {
|
||||
const tabs = ['Profiles', 'Referrals', 'Supporters', 'Mentors', 'Claims', 'Votes', 'Staking', 'Delegation', 'Github', 'Pools', 'Assets', 'Features', 'Positions', 'Mining']
|
||||
const tabs = [
|
||||
'Profiles',
|
||||
'Airdrop',
|
||||
'Github',
|
||||
'Referrals',
|
||||
'Supporters',
|
||||
'Mentors',
|
||||
'Influencers',
|
||||
'Claims',
|
||||
'Votes',
|
||||
'Staking',
|
||||
'Delegation',
|
||||
'Pools',
|
||||
'Assets',
|
||||
'Features',
|
||||
'Positions',
|
||||
'Mining'
|
||||
]
|
||||
let HTML = ''
|
||||
HTML = HTML + '<section id="governance-report-page-div" class="governance-search-page-container">'
|
||||
HTML = HTML + UI.projects.governance.spaces.reportsSpace.filtersHeader.addFilterHeader()
|
||||
@@ -62,80 +79,92 @@ function newGovernanceReportsReportsPage() {
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Referrals': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.referrals.addHTML(2, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Supporters': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.supports.addHTML(3, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Mentors': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.mentors.addHTML(4, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Claims': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.claims.addHTML(5, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Votes': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.votes.addHTML(6, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Staking': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.staking.addHTML(7, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Delegation': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.delegation.addHTML(8, filters)
|
||||
case 'Airdrop': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.airdrop.addHTML(2, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Github': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.github.addHTML(8, filters)
|
||||
let response = UI.projects.governance.spaces.reportsSpace.github.addHTML(3, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Referrals': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.referrals.addHTML(4, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Supporters': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.supports.addHTML(5, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Mentors': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.mentors.addHTML(6, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Influencers': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.influencers.addHTML(7, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Claims': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.claims.addHTML(8, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Votes': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.votes.addHTML(9, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Staking': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.staking.addHTML(10, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Delegation': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.delegation.addHTML(11, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Pools': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.pools.addHTML(9, filters)
|
||||
let response = UI.projects.governance.spaces.reportsSpace.pools.addHTML(12, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Assets': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.assets.addHTML(10, filters)
|
||||
let response = UI.projects.governance.spaces.reportsSpace.assets.addHTML(13, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Features': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.features.addHTML(11, filters)
|
||||
let response = UI.projects.governance.spaces.reportsSpace.features.addHTML(14, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Positions': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.positions.addHTML(12, filters)
|
||||
let response = UI.projects.governance.spaces.reportsSpace.positions.addHTML(15, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
}
|
||||
case 'Mining': {
|
||||
let response = UI.projects.governance.spaces.reportsSpace.mining.addHTML(13, filters)
|
||||
let response = UI.projects.governance.spaces.reportsSpace.mining.addHTML(16, filters)
|
||||
HTML = HTML + response.HTML
|
||||
resultCounter = response.resultCounter
|
||||
break
|
||||
|
||||
@@ -11,11 +11,13 @@ function newGobernanceReportsSpace() {
|
||||
referrals: undefined,
|
||||
supports: undefined,
|
||||
mentors: undefined,
|
||||
influencers: undefined,
|
||||
claims: undefined,
|
||||
votes: undefined,
|
||||
staking: undefined,
|
||||
delegations: undefined,
|
||||
github: undefined,
|
||||
airdrop: undefined,
|
||||
pools: undefined,
|
||||
assets: undefined,
|
||||
features: undefined,
|
||||
@@ -74,6 +76,9 @@ function newGobernanceReportsSpace() {
|
||||
thisObject.mentors.finalize()
|
||||
thisObject.mentors = undefined
|
||||
|
||||
thisObject.influencers.finalize()
|
||||
thisObject.influencers = undefined
|
||||
|
||||
thisObject.claims.finalize()
|
||||
thisObject.claims = undefined
|
||||
|
||||
@@ -89,6 +94,9 @@ function newGobernanceReportsSpace() {
|
||||
thisObject.github.finalize()
|
||||
thisObject.github = undefined
|
||||
|
||||
thisObject.airdrop.finalize()
|
||||
thisObject.airdrop = undefined
|
||||
|
||||
thisObject.pools.finalize()
|
||||
thisObject.pools = undefined
|
||||
|
||||
@@ -130,12 +138,14 @@ function newGobernanceReportsSpace() {
|
||||
thisObject.userProfiles = newGovernanceReportsUserProfiles()
|
||||
thisObject.referrals = newGovernanceReportsReferrals()
|
||||
thisObject.supports = newGovernanceReportsSupports()
|
||||
thisObject.influencers = newGovernanceReportsInfluencers()
|
||||
thisObject.mentors = newGovernanceReportsMentors()
|
||||
thisObject.claims = newGovernanceReportsClaims()
|
||||
thisObject.votes = newGovernanceReportsVotes()
|
||||
thisObject.staking = newGovernanceReportsStaking()
|
||||
thisObject.delegation = newGovernanceReportsDelegation()
|
||||
thisObject.github = newGovernanceReportsGithub()
|
||||
thisObject.airdrop = newGovernanceReportsAirdrop()
|
||||
thisObject.pools = newGovernanceReportsPools()
|
||||
thisObject.assets = newGovernanceReportsAssets()
|
||||
thisObject.features = newGovernanceReportsFeatures()
|
||||
@@ -147,12 +157,15 @@ function newGobernanceReportsSpace() {
|
||||
thisObject.filtersHeader.initialize()
|
||||
thisObject.userProfiles.initialize()
|
||||
thisObject.referrals.initialize()
|
||||
thisObject.supports.initialize()
|
||||
thisObject.mentors.initialize()
|
||||
thisObject.influencers.initialize()
|
||||
thisObject.claims.initialize()
|
||||
thisObject.votes.initialize()
|
||||
thisObject.staking.initialize()
|
||||
thisObject.delegation.initialize()
|
||||
thisObject.github.initialize()
|
||||
thisObject.airdrop.initialize()
|
||||
thisObject.pools.initialize()
|
||||
thisObject.assets.initialize()
|
||||
thisObject.features.initialize()
|
||||
|
||||
@@ -1037,6 +1037,11 @@
|
||||
"propertyName": "supportProgram",
|
||||
"functionName": "newGovernanceFunctionLibrarySupportProgram"
|
||||
},
|
||||
{
|
||||
"name": "Influencer Program",
|
||||
"propertyName": "influencerProgram",
|
||||
"functionName": "newGovernanceFunctionLibraryInfluencerProgram"
|
||||
},
|
||||
{
|
||||
"name": "Mentorship Program",
|
||||
"propertyName": "mentorshipProgram",
|
||||
@@ -1056,6 +1061,11 @@
|
||||
"name": "Github Program",
|
||||
"propertyName": "githubProgram",
|
||||
"functionName": "newGovernanceFunctionLibraryGithubProgram"
|
||||
},
|
||||
{
|
||||
"name": "Airdrop Program",
|
||||
"propertyName": "airdropProgram",
|
||||
"functionName": "newGovernanceFunctionLibraryAirdropProgram"
|
||||
}
|
||||
],
|
||||
"utilities": [
|
||||
|
||||
Reference in new issue
Block a user