diff --git a/Desktop/DesktopApp.js b/Desktop/DesktopApp.js
index 3c225154c..8e0b948fb 100644
--- a/Desktop/DesktopApp.js
+++ b/Desktop/DesktopApp.js
@@ -6,21 +6,73 @@ exports.newDesktopApp = function newDesktopApp() {
return thisObject
- function run() {
+ async function run() {
+ /*
+ let socialGraphService = NT.projects.network.modules.socialGraph.newSocialGraph()
+ await socialGraphService.initialize()
+ */
/*
Let's start the Network Interfaces
*/
DK.webSocketsClient = SA.projects.network.modules.webSocketsClient.newNetworkModulesWebSocketsClient()
- DK.webSocketsClient.initialize()
+ await DK.webSocketsClient.initialize()
-
- return
- start()
-
- async function start() {
- let socialGraphService = NT.projects.network.modules.socialGraph.newSocialGraph()
- await socialGraphService.initialize()
+ let queryMessage
+ let query
+ /*
+ Test Query User Profiles.
+ */
+ queryMessage = {
+ queryType: SA.projects.socialTrading.globals.queryTypes.USER_PROFILES,
+ emitterUserProfileId: DK.TEST_NETWORK_CLIENT_USER_PROFILE_ID,
+ initialIndex: 'Last',
+ amountRequested: 10,
+ direction: 'Past'
}
+ query = {
+ requestType: 'Query',
+ queryMessage: JSON.stringify(queryMessage)
+ }
+
+ await DK.webSocketsClient.sendMessage(
+ JSON.stringify(query)
+ )
+ .then(showProfiles)
+ .catch(onError)
+
+ function showProfiles(profiles) {
+ console.log(profiles)
+ }
+ /*
+ Test Query User Profile Stats.
+ */
+ queryMessage = {
+ queryType: SA.projects.socialTrading.globals.queryTypes.USER_PROFILE_STATS,
+ emitterUserProfileId: DK.TEST_NETWORK_CLIENT_USER_PROFILE_ID,
+ targetUserProfileId: DK.TEST_NETWORK_CLIENT_USER_PROFILE_ID
+ }
+
+ query = {
+ requestType: 'Query',
+ queryMessage: JSON.stringify(queryMessage)
+ }
+
+ await DK.webSocketsClient.sendMessage(
+ JSON.stringify(query)
+ )
+ .then(showProfilesStats)
+ .catch(onError)
+
+ function showProfilesStats(profile) {
+ console.log(profile)
+ }
+
+ /*
+ Error Handling
+ */
+ function onError(errorMessage) {
+ console.log('[ERROR] Query not executed. ' + errorMessage)
+ }
}
}
diff --git a/Network/.vscode/settings.json b/Network/.vscode/settings.json
new file mode 100644
index 000000000..0bf7da203
--- /dev/null
+++ b/Network/.vscode/settings.json
@@ -0,0 +1,16 @@
+{
+ "files.exclude": {
+ "**/Data-Storage": true,
+ "**/Documentation": true,
+ "**/Log-Files": true,
+ "**/node_modules": true,
+ "**/Deprecated-Code": true
+ },
+ "search.exclude": {
+ "**/Data-Storage": true,
+ "**/Documentation": true,
+ "**/Log-Files": true,
+ "**/Deprecated-Code": true
+ },
+ "search.maintainFileSearchCache": true
+}
\ No newline at end of file
diff --git a/Projects/Foundations/Plugins/Data-Mines/Delta.json b/Projects/Foundations/Plugins/Data-Mines/Delta.json
index 4e8498d9b..2e11f0d13 100644
--- a/Projects/Foundations/Plugins/Data-Mines/Delta.json
+++ b/Projects/Foundations/Plugins/Data-Mines/Delta.json
@@ -1 +1 @@
-{"type":"Data Mine","name":"Delta","config":"{\n \"codeName\": \"Delta\"\n}","project":"Foundations","sensorBots":[],"indicatorBots":[{"type":"Indicator Bot","name":"Relative Strenght Index - Wilder Method (RSI-W)","config":"{\n \"codeName\": \"RSI-W\"\n}","project":"Foundations","processes":[{"type":"Process Definition","name":"Multi-Time-Frame-Market","config":"{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"description\": \"Calculates Wilder RSI.\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Time-Frame-Market\"\n }\n}","project":"Foundations","processOutput":{"type":"Process Output","name":"New Process Output","project":"Foundations","outputDatasets":[{"type":"Output Dataset","name":"Multi-Time-Frame-Market RSI-W14","project":"Foundations","id":"75881553-ec60-4954-9404-052ba11904f4","savedPayload":{"position":{"x":19646.18251638588,"y":17789.2053813897},"targetPosition":{"x":19675.299658959913,"y":17897.87203684722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"a94722c3-a453-4f46-931f-aeb244e7cb66"}}}],"outputDatasetFolders":[],"id":"ffb59a7e-565a-4588-bd44-999a7cb66122","savedPayload":{"position":{"x":19675.299658959913,"y":17897.87203684722},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Foundations","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Time-Frame-Market","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Foundations","id":"b0af9801-ba4e-4bfd-a605-98d9ac121b5f","savedPayload":{"position":{"x":19650.151086682014,"y":17594.3496655382},"targetPosition":{"x":19762.651086682014,"y":17789.2053813897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Relative Strenght Index - Wilder Method (RSI-W) Multi-Time-Frame-Market","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Foundations","id":"02d64b4a-7c3c-4c89-918d-b3697b5955b2","savedPayload":{"position":{"x":19820.88537183008,"y":17571.87207047466},"targetPosition":{"x":19762.651086682014,"y":17789.2053813897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2b961dac-9f41-4eed-a495-4e55f26714c3"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Time-Frame-Market","project":"Foundations","id":"25315413-2e01-4a7d-83bc-1257d43f8fe6","savedPayload":{"position":{"x":19957.506802533513,"y":17676.7053813897},"targetPosition":{"x":19762.651086682014,"y":17789.2053813897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"b14516a1-e5cc-48f8-ab0f-0e46faf6c41c","savedPayload":{"position":{"x":19762.651086682014,"y":17789.2053813897},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Foundations","id":"2b961dac-9f41-4eed-a495-4e55f26714c3","savedPayload":{"position":{"x":19863.51582730092,"y":17847.439666537768},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Time-Frame-Market","project":"Foundations","id":"c1598823-e0b3-4036-8ad6-669ae0e3f638","savedPayload":{"position":{"x":19921.750112448986,"y":17948.304407156673},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Foundations","id":"b317c309-4677-4a2a-ba2a-801fccd01b1d","savedPayload":{"position":{"x":19921.750112448986,"y":18064.77297745281},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"279a9122-7f94-47b4-bf09-999fa889104b","savedPayload":{"position":{"x":19690.416801533946,"y":18018.53869230474},"targetPosition":{"x":19372.21875,"y":18336.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Time-Frame-Daily","config":"{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"description\": \"Calculates Wilder RSI\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Time-Frame-Daily\"\n }\n}","project":"Foundations","processOutput":{"type":"Process Output","name":"New Process Output","project":"Foundations","outputDatasets":[{"type":"Output Dataset","name":"Multi-Time-Frame-Daily RSI-W14","project":"Foundations","id":"a902a032-dbcc-4f7f-8495-70f0f5da03f8","savedPayload":{"position":{"x":19167.963077267068,"y":19583.111743838686},"targetPosition":{"x":19081.360536888624,"y":19533.111743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Daily","id":"f6e7a28d-d3d8-4d05-b90f-40bbe5f59b8a"}}}],"outputDatasetFolders":[],"id":"02da2e0b-9593-485a-ae0d-3f4ff131c813","savedPayload":{"position":{"x":19081.360536888624,"y":19533.111743838686},"targetPosition":{"x":18935.21875,"y":19448.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Foundations","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Time-Frame-Daily","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Foundations","id":"3173726e-99f5-4153-acbd-17e0ca4c6dac","savedPayload":{"position":{"x":19608.369889686794,"y":20068.582247746013},"targetPosition":{"x":19272.71875,"y":20033.30389139318},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\n \"mainUtility\": \"Market Starting Point\"\n}","project":"Foundations","id":"56d255fa-7193-431f-a3c5-f98e6d28a508","savedPayload":{"position":{"x":19523.53012859862,"y":20259.135471039295},"targetPosition":{"x":19272.71875,"y":20033.30389139318},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}},{"type":"Status Dependency","name":"Relative Strenght Index - Wilder Method (RSI-W) Multi-Time-Frame-Daily","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Foundations","id":"b96ab1d1-3bdc-429d-921a-0aab94741d29","savedPayload":{"position":{"x":19342.888945650993,"y":20363.42870664084},"targetPosition":{"x":19272.71875,"y":20033.30389139318},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"8c1c40cf-dd93-4f61-b3f0-9344707b196d"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Time-Frame-Daily","project":"Foundations","id":"756f850b-7e37-4fc8-8031-b7c8458bc8c3","savedPayload":{"position":{"x":19135.44513296192,"y":20341.625483347558},"targetPosition":{"x":19272.71875,"y":20033.30389139318},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}}],"dataMineDataDependencies":[],"id":"c42ac621-a7d7-499a-84a0-76bd99ef3fa4","savedPayload":{"position":{"x":19272.71875,"y":20033.30389139318},"targetPosition":{"x":18935.21875,"y":19448.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Foundations","id":"8c1c40cf-dd93-4f61-b3f0-9344707b196d","savedPayload":{"position":{"x":18935.21875,"y":19786.236743838686},"targetPosition":{"x":18935.21875,"y":19448.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Time-Frame-Daily","project":"Foundations","id":"1bf32fba-af6a-43eb-b0bb-2ac855bb5820","savedPayload":{"position":{"x":18766.46875,"y":19741.020317615934},"targetPosition":{"x":18935.21875,"y":19448.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Foundations","id":"ffcd3bc1-44f3-4e21-9f33-fc2f818494b5","savedPayload":{"position":{"x":18642.935176222752,"y":19617.486743838686},"targetPosition":{"x":18935.21875,"y":19448.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"a5c6c183-7b68-4e7c-82c2-27ac439b098d","savedPayload":{"position":{"x":20047.21875,"y":18336.736743838686},"targetPosition":{"x":19372.21875,"y":18336.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"RSI-W14","config":"{\n \"codeName\": \"RSI-W14\",\n \"singularVariableName\": \"rsiw14\",\n \"pluralVariableName\": \"rsiw14s\"\n}","project":"Foundations","datasets":[{"type":"Dataset Definition","name":"Multi-Time-Frame-Daily","config":"{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [\n \"45-min\",\n \"40-min\",\n \"30-min\",\n \"20-min\",\n \"15-min\",\n \"10-min\",\n \"05-min\",\n \"04-min\",\n \"03-min\",\n \"02-min\",\n \"01-min\"\n ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n}","project":"Foundations","id":"f6e7a28d-d3d8-4d05-b90f-40bbe5f59b8a","savedPayload":{"position":{"x":19912.64667816785,"y":18619.73704073858},"targetPosition":{"x":19690.416801533946,"y":18654.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","config":"{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [\n \"24-hs\",\n \"12-hs\",\n \"08-hs\",\n \"06-hs\",\n \"04-hs\",\n \"03-hs\",\n \"02-hs\",\n \"01-hs\"\n ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\" : {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n}","project":"Foundations","id":"a94722c3-a453-4f46-931f-aeb244e7cb66","savedPayload":{"position":{"x":19890.893269476328,"y":18757.08265781403},"targetPosition":{"x":19690.416801533946,"y":18654.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Foundations","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Foundations","recordFormula":{"type":"Record Formula","name":"Begin","code":"record.current.begin","project":"Foundations","id":"5f2981e4-5b9a-4867-9bf4-79dd2b9c19f0","savedPayload":{"position":{"x":20108.700242583152,"y":19125.41655499176},"targetPosition":{"x":20001.706384499947,"y":19090.65214312458},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a7c379ea-fc2f-4526-9a5f-fcdc272f6a02","savedPayload":{"position":{"x":20001.706384499947,"y":19090.65214312458},"targetPosition":{"x":19894.71252641674,"y":19055.887731257397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Foundations","recordFormula":{"type":"Record Formula","code":"record.current.end","project":"Foundations","id":"ad4e0d6b-e7ce-4e09-88a6-a3f44d7c0c08","savedPayload":{"position":{"x":19996.860388858142,"y":19256.36419919978},"targetPosition":{"x":19945.78645763744,"y":19156.125965228588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a859a2ce-cd0a-43ae-995b-6140402a9f1a","savedPayload":{"position":{"x":19945.78645763744,"y":19156.125965228588},"targetPosition":{"x":19894.71252641674,"y":19055.887731257397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Value","config":"{\n \"codeName\": \"value\",\n \"isString\": false\n}","project":"Foundations","recordFormula":{"type":"Record Formula","code":"variable.value","project":"Foundations","id":"43595088-af8f-4ad5-8bfe-3b04a5168681","savedPayload":{"position":{"x":19825.183702682378,"y":19269.87544742381},"targetPosition":{"x":19859.94811454956,"y":19162.881589340603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3cd01f28-dd1a-45bc-8c68-29bdbf4be84b","savedPayload":{"position":{"x":19859.94811454956,"y":19162.881589340603},"targetPosition":{"x":19894.71252641674,"y":19055.887731257397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ee7e6fb0-984c-410b-9ba7-241deddcd7ad","savedPayload":{"position":{"x":19894.71252641674,"y":19055.887731257397},"targetPosition":{"x":19690.416801533946,"y":18654.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Foundations","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Foundations","procedureJavascriptCode":{"type":"Procedure Javascript Code","code":"/* Loop Code */\n\n/* \nCalculation method credit: https://www.macroption.com/rsi-calculation/\n*/\n\n/* Calculating Up Moves and Down Moves */\n\n//let candle = record.current // Our main dependencies are candles \n//let candlePrevious = record.previous\n\nif (record.previous !== undefined) {\n if (record.current.close > record.previous.close) {\n variable.last14U.push(record.current.close - record.previous.close) // Add win to last 14 array.\n } else {\n variable.last14U.push(0) // Add 0 to keep proper count of records in the last 14 array.\n }\n \n if (record.current.close < record.previous.close) {\n variable.last14D.push(record.previous.close - record.current.close) // Add win to last 14 array.\n } else {\n variable.last14D.push(0) // Add 0 to keep proper count of records in the last 14 array.\n }\n \n if (variable.last14U.length > 14) {\n variable.last14U.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n \n if (variable.last14D.length > 14) {\n variable.last14D.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n \n /* Calculating Averages of Up Moves and Down Moves */\n\n variable.avgU = calculateRMAU(14)\n variable.avgD = calculateRMAD(14)\n\n /* Keep track of average moves */\n variable.rma14U.push(variable.avgU)\n variable.rma14D.push(variable.avgD)\n \n if (variable.rma14U.length > 14) {\n variable.rma14U.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n \n if (variable.rma14D.length > 14) {\n variable.rma14D.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n\n /* Calculating Relative Strength */\n \n if (variable.avgD > 0) {\n relativeStrength = variable.avgU / variable.avgD\n } else {\n relativeStrength = 0\n }\n\n /* Calculating RSI */\n\n relativeStrengthIndex = 100 - 100 / ( 1 + relativeStrength)\n\n if (relativeStrengthIndex !== undefined) {\n variable.value = relativeStrengthIndex.toFixed(2)\n } else {\n variable.value = 0\n }\n} else {\n variable.value = 0\n}\n\n// Statistics\n\nfunction calculateWMA(source, rmas, periods) { // Having a function avoids us to repeat code.\n /* We check we have enough values to make the calculation */\n if (source.length < periods) { return 0 } // If we dont, we define the value is zero.\n\n let alpha = 1 / periods\n let avg = source[source.length - 1] * alpha + rmas[rmas.length - 1] * (1 - alpha)\n return avg;\n}\n\nfunction calculateRMAU(periods) {\n return calculateWMA(variable.last14U, variable.rma14U, periods)\n}\n\nfunction calculateRMAD(periods) {\n return calculateWMA(variable.last14D, variable.rma14D, periods)\n}","project":"Foundations","id":"91eb76f0-617c-4397-9135-beca294a6481","savedPayload":{"position":{"x":19781.28686956123,"y":19519.505740564182},"targetPosition":{"x":19700.654080913537,"y":19309.450144602313},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6957916d-b353-4b19-8b8f-cf7fb97024b3","savedPayload":{"position":{"x":19700.654080913537,"y":19309.450144602313},"targetPosition":{"x":19620.021292265843,"y":19099.394548640445},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Foundations","procedureJavascriptCode":{"type":"Procedure Javascript Code","code":"/* Initialization Code*/\n\n/* \nWe keep two separate arrays to store last 14 price increments or losses.\n*/\n\nvariable.last14U = []\nvariable.last14D = []\nvariable.rma14U = []\nvariable.rma14D = []\n","project":"Foundations","id":"7b8d4dd2-2dde-47fe-8340-efd0f93fe435","savedPayload":{"position":{"x":19336.827116293414,"y":19449.110231296083},"targetPosition":{"x":19478.42420427963,"y":19274.252389968264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"076ef281-1c67-4117-8168-a5beba487ffc","savedPayload":{"position":{"x":19478.42420427963,"y":19274.252389968264},"targetPosition":{"x":19620.021292265843,"y":19099.394548640445},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a1ef81d6-c2c9-46c4-aaed-366b31b2d639","savedPayload":{"position":{"x":19620.021292265843,"y":19099.394548640445},"targetPosition":{"x":19690.416801533946,"y":18654.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fbe3d4ba-bcfd-4cb1-91d1-64d7d381a21c","savedPayload":{"position":{"x":19690.416801533946,"y":18654.934795372632},"targetPosition":{"x":19372.21875,"y":18336.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"RSI-W14","id":"4045dbb5-77d9-46ed-837d-e05caded1a29"}}}],"id":"1b49e818-f9f9-4ecc-bdbd-708f5641fb66","savedPayload":{"position":{"x":19372.21875,"y":18336.736743838686},"targetPosition":{"x":18922.21875,"y":18336.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Indicator Bot","name":"Money Flow Index (MFI)","config":"{\n \"codeName\": \"MFI\"\n}","project":"Foundations","processes":[{"type":"Process Definition","name":"Multi-Time-Frame-Daily","config":"{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"description\": \"Calculates MFI\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Time-Frame-Daily\"\n }\n}","project":"Foundations","processOutput":{"type":"Process Output","name":"New Process Output","project":"Foundations","outputDatasets":[{"type":"Output Dataset","name":"Multi-Time-Frame-Daily MFI","project":"Foundations","id":"48a07111-4122-4d5c-a3ef-df4b138b6af7","savedPayload":{"position":{"x":19445.67603962037,"y":19049.935748288346},"targetPosition":{"x":19349.083456991466,"y":19075.8176527986},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Daily","id":"22edf2c6-b165-4b9e-b6ac-0cfefd9ee01b"}}}],"outputDatasetFolders":[],"id":"3c9355dd-ecf6-4604-b7f7-f6f1f8e784d6","savedPayload":{"position":{"x":19349.083456991466,"y":19075.8176527986},"targetPosition":{"x":19240.416801533946,"y":19104.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Foundations","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Time-Frame-Daily","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Foundations","id":"7867d355-9cd6-434e-90de-cd1f5f9ba32a","savedPayload":{"position":{"x":19537.299625332475,"y":19083.61956763721},"targetPosition":{"x":19457.750112448986,"y":19163.1690805207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\n \"mainUtility\": \"Market Starting Point\"\n}","project":"Foundations","id":"bdf2cbd7-2cd6-4945-96b3-0609b3969d37","savedPayload":{"position":{"x":19566.416767906507,"y":19134.051937946668},"targetPosition":{"x":19457.750112448986,"y":19163.1690805207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}},{"type":"Status Dependency","name":"Money Flow Index (MFI) Multi-Time-Frame-Daily","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Foundations","id":"25380d29-c370-4b34-bcb6-55d94cab4a11","savedPayload":{"position":{"x":19566.416767906507,"y":19192.286223094732},"targetPosition":{"x":19457.750112448986,"y":19163.1690805207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"218ce270-08fe-45a0-90ef-7189fffd72dd"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Time-Frame-Daily","project":"Foundations","id":"afdb16be-1eba-4ab0-aceb-9695b25ef435","savedPayload":{"position":{"x":19537.299625332475,"y":19242.718593404188},"targetPosition":{"x":19457.750112448986,"y":19163.1690805207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}},{"type":"Data Dependency","name":"Volumes Multi-Time-Frame-Daily","project":"Foundations","id":"f26fa862-f8e1-480b-b9a3-fb8e001e3b8d","savedPayload":{"position":{"x":19486.86725502302,"y":19271.83573597822},"targetPosition":{"x":19457.750112448986,"y":19163.1690805207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Daily","id":"2e683057-f911-4105-bc77-16f2706d1915"}}}],"dataMineDataDependencies":[],"id":"4704cf1b-133a-4e6e-8b97-bfece022354e","savedPayload":{"position":{"x":19457.750112448986,"y":19163.1690805207},"targetPosition":{"x":19240.416801533946,"y":19104.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Foundations","id":"218ce270-08fe-45a0-90ef-7189fffd72dd","savedPayload":{"position":{"x":19399.51582730092,"y":19264.033821139605},"targetPosition":{"x":19240.416801533946,"y":19104.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Time-Frame-Daily","project":"Foundations","id":"30fcca1f-f72d-46cf-bd17-99f8e2e1cd10","savedPayload":{"position":{"x":19298.651086682014,"y":19322.268106287673},"targetPosition":{"x":19240.416801533946,"y":19104.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Foundations","id":"91f10f62-3cad-4709-8b90-31daceb01bd2","savedPayload":{"position":{"x":19182.182516385878,"y":19322.268106287673},"targetPosition":{"x":19240.416801533946,"y":19104.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6be015e8-abd8-4c91-bc44-ed0dbe4401bf","savedPayload":{"position":{"x":19240.416801533946,"y":19104.934795372632},"targetPosition":{"x":18922.21875,"y":18786.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Time-Frame-Market","config":"{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"description\": \"Calculates MFI.\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Time-Frame-Market\"\n }\n}","project":"Foundations","processOutput":{"type":"Process Output","name":"New Process Output","project":"Foundations","outputDatasets":[{"type":"Output Dataset","name":"Multi-Time-Frame-Market MFI","project":"Foundations","id":"c5c02f93-dacc-4e97-803b-45f1d3d7756c","savedPayload":{"position":{"x":19130.074465851496,"y":19336.236743838686},"targetPosition":{"x":19032.646607925748,"y":19279.986743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"f5f04930-c2a3-48b7-ade9-f98e148344f1"}}}],"outputDatasetFolders":[],"id":"a78ac5ae-14c4-4928-968b-604d5c78521c","savedPayload":{"position":{"x":19032.646607925748,"y":19279.986743838686},"targetPosition":{"x":18935.21875,"y":19223.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Foundations","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Time-Frame-Market","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Foundations","id":"226234a8-bb22-4f31-9446-ffee286446b4","savedPayload":{"position":{"x":19271.48617645786,"y":19442.111363925407},"targetPosition":{"x":19047.71875,"y":19418.592459690186},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Money Flow Index (MFI) Multi-Time-Frame-Market","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Foundations","id":"319ba4b4-77dc-412f-be3f-6fdb088f317c","savedPayload":{"position":{"x":19214.926335732413,"y":19569.14684612093},"targetPosition":{"x":19047.71875,"y":19418.592459690186},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"f4b09884-97e4-44e6-b0cf-3025c4cc44f9"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Time-Frame-Market","project":"Foundations","id":"39802ca4-ee03-42f3-a5a4-e805f787520b","savedPayload":{"position":{"x":19094.498880433996,"y":19638.675669855293},"targetPosition":{"x":19047.71875,"y":19418.592459690186},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}},{"type":"Data Dependency","name":"Volumes Multi-Time-Frame-Market","project":"Foundations","id":"9580ee4c-eb61-4133-91be-b9b8065cc74e","savedPayload":{"position":{"x":18956.203005307943,"y":19624.14018765977},"targetPosition":{"x":19047.71875,"y":19418.592459690186},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"9bf0483c-4825-4a46-9cf4-1b5262579fc1"}}}],"dataMineDataDependencies":[],"id":"871fab7f-2e97-4a8a-a771-0f4769c7b82d","savedPayload":{"position":{"x":19047.71875,"y":19418.592459690186},"targetPosition":{"x":18935.21875,"y":19223.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Foundations","id":"f4b09884-97e4-44e6-b0cf-3025c4cc44f9","savedPayload":{"position":{"x":18935.21875,"y":19448.736743838686},"targetPosition":{"x":18935.21875,"y":19223.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Time-Frame-Market","project":"Foundations","id":"6319139b-bbb9-4250-831c-e57d8f8575c7","savedPayload":{"position":{"x":18822.71875,"y":19418.592459690186},"targetPosition":{"x":18935.21875,"y":19223.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Foundations","id":"adadc3e2-074c-4429-b3d7-84592d6fd73a","savedPayload":{"position":{"x":18740.3630341485,"y":19336.236743838686},"targetPosition":{"x":18935.21875,"y":19223.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"b2d41186-2875-4058-8949-8acd8e5e8218","savedPayload":{"position":{"x":18922.21875,"y":19236.736743838686},"targetPosition":{"x":18922.21875,"y":18786.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"MFI","config":"{\n \"codeName\": \"MFI\",\n \"singularVariableName\": \"mfi\",\n \"pluralVariableName\": \"mfis\"\n}","project":"Foundations","datasets":[{"type":"Dataset Definition","name":"Multi-Time-Frame-Daily","config":"{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [\n \"45-min\",\n \"40-min\",\n \"30-min\",\n \"20-min\",\n \"15-min\",\n \"10-min\",\n \"05-min\",\n \"04-min\",\n \"03-min\",\n \"02-min\",\n \"01-min\"\n ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n}","project":"Foundations","id":"22edf2c6-b165-4b9e-b6ac-0cfefd9ee01b","savedPayload":{"position":{"x":18639.218453100108,"y":19327.164672006536},"targetPosition":{"x":18604.020698466054,"y":19104.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","config":"{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [\n \"24-hs\",\n \"12-hs\",\n \"08-hs\",\n \"06-hs\",\n \"04-hs\",\n \"03-hs\",\n \"02-hs\",\n \"01-hs\"\n ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\" : {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n}","project":"Foundations","id":"f5f04930-c2a3-48b7-ade9-f98e148344f1","savedPayload":{"position":{"x":18501.872836024657,"y":19305.411263315014},"targetPosition":{"x":18604.020698466054,"y":19104.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Foundations","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Foundations","recordFormula":{"type":"Record Formula","name":"Begin","code":"record.current.begin","project":"Foundations","id":"3e93fd4c-c8d1-46f2-9097-409c0ae93699","savedPayload":{"position":{"x":18133.538938846927,"y":19523.21823642184},"targetPosition":{"x":18168.303350714108,"y":19416.224378338633},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c1daf05e-b41f-4b76-9a2c-ce190c623b86","savedPayload":{"position":{"x":18168.303350714108,"y":19416.224378338633},"targetPosition":{"x":18203.06776258129,"y":19309.230520255427},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Foundations","recordFormula":{"type":"Record Formula","code":"record.current.end","project":"Foundations","id":"453226d1-0bef-4df3-93ed-68c914f8c5b5","savedPayload":{"position":{"x":18002.591294638907,"y":19411.37838269683},"targetPosition":{"x":18102.8295286101,"y":19360.304451476128},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6326c213-145f-42f5-beb9-30b0426208da","savedPayload":{"position":{"x":18102.8295286101,"y":19360.304451476128},"targetPosition":{"x":18203.06776258129,"y":19309.230520255427},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Value","config":"{\n \"codeName\": \"value\",\n \"isString\": false\n}","project":"Foundations","recordFormula":{"type":"Record Formula","code":"variable.value","project":"Foundations","id":"f88be3cc-cb81-43db-8ee9-5eab5dc3833d","savedPayload":{"position":{"x":17989.080046414878,"y":19239.701696521064},"targetPosition":{"x":18096.073904498084,"y":19274.466108388246},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ed8d0a42-0423-4c07-95dd-2453f6e49b83","savedPayload":{"position":{"x":18096.073904498084,"y":19274.466108388246},"targetPosition":{"x":18203.06776258129,"y":19309.230520255427},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"42782833-c816-4069-9d20-55cea2597ac0","savedPayload":{"position":{"x":18203.06776258129,"y":19309.230520255427},"targetPosition":{"x":18604.020698466054,"y":19104.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Foundations","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Foundations","procedureJavascriptCode":{"type":"Procedure Javascript Code","name":"New Procedure Javascript Code","code":"/* Loop Code */\nlet candle = record.current // This is the primary dependency\nlet volume = getElement('volumes', candle) // Here I get the volume bar corresponding to the current candle\nlet totalVolume = volume.buy + volume.sell // Candles Volumes split the volume received from the exchange evenly betwen buy and sell because it does not know how much of it there is.\n\nlet hlc3 = (candle.max + candle.min + candle.close) / 3\nlet lastHlc3 = variable.lastHlc3\n\nif (record.previous !== undefined) {\n\n let change = hlc3 - variable.lastHlc3\n\n variable.last14U.push(totalVolume * (change <= 0 ? 0 : hlc3))\n variable.last14D.push(totalVolume * (change >= 0 ? 0 : hlc3))\n \n if (variable.last14U.length > 14) {\n variable.last14U.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n \n if (variable.last14D.length > 14) {\n variable.last14D.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n\n let upper = variable.last14U.reduce(function(a, b){return a + b;}, 0);\n let lower = variable.last14D.reduce(function(a, b){return a + b;}, 0);\n\n let mfi\n\n if(lower == 0)\n mfi = 100\n else if(upper == 0)\n mfi = 0\n else // RSI\n mfi = 100 - (100 / (1 + upper / lower))\n\n if (mfi !== undefined) {\n variable.value = mfi.toFixed(2)\n } else {\n variable.value = 0\n }\n\n/*\n // Printing values to console to check\n console.log(\"HLC3: \", hlc3)\n console.log(\"Last HLC3: \", lastHlc3)\n console.log(\"Change: \", change)\n console.log(\"Upper: \", upper)\n console.log(\"Lower: \", lower)\n console.log(\"MFI: \", mfi)\n */\n\n} else {\n variable.value = 0\n}\n\nvariable.lastHlc3 = hlc3","project":"Foundations","id":"086b666c-f4d1-4167-a103-76b9d3eddf5f","savedPayload":{"position":{"x":17319.33856135076,"y":19357.070440695297},"targetPosition":{"x":17739.4497532745,"y":19195.804863399913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f29a8156-18e0-48cf-b0ee-0d54a1296dc4","savedPayload":{"position":{"x":17739.4497532745,"y":19195.804863399913},"targetPosition":{"x":18159.560945198242,"y":19034.53928610453},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Foundations","procedureJavascriptCode":{"type":"Procedure Javascript Code","name":"New Procedure Javascript Code","code":"/* Initialization Code*/\n\nvariable.lastHlc3 = 0\nvariable.last14U = []\nvariable.last14D = []\n","project":"Foundations","id":"0255406d-ebc4-4841-aeb2-69bf3783a328","savedPayload":{"position":{"x":17460.129579886965,"y":18468.150934159672},"targetPosition":{"x":17809.845262542603,"y":18751.3451101321},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8e1fc1c7-4306-4151-b4e7-cd155b4d7218","savedPayload":{"position":{"x":17809.845262542603,"y":18751.3451101321},"targetPosition":{"x":18159.560945198242,"y":19034.53928610453},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7e8031b3-b8cb-43bd-8103-14e14e7be3a6","savedPayload":{"position":{"x":18159.560945198242,"y":19034.53928610453},"targetPosition":{"x":18604.020698466054,"y":19104.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"019b29d1-0227-4185-aee7-aaba499cdf93","savedPayload":{"position":{"x":18604.020698466054,"y":19104.934795372632},"targetPosition":{"x":18922.21875,"y":18786.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"MFI","id":"d10cdbe9-9416-490a-904e-ace49d0dfbf7"}}}],"id":"c43b88dc-4ad9-4321-976d-374f98e2434b","savedPayload":{"position":{"x":18922.21875,"y":18786.736743838686},"targetPosition":{"x":18922.21875,"y":18336.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"plotters":[{"type":"Plotter","name":"Relative Strenght Index - Wilder Method (RSI-W)","config":"{\n \"codeName\": \"Plotter RSI-W\"\n}","project":"Foundations","modules":[{"type":"Plotter Module","name":"RSI-W14","config":"{\n \"codeName\": \"RSI-W14\"\n}","project":"Foundations","panels":[{"type":"Plotter Panel","name":"RSI-W 14","config":"{\n \"codeName\": \"\"\n}","project":"Foundations","panelData":[{"type":"Panel Data","name":"RSI-W14","config":"{\n \"valueDecimals\": 2\n}","project":"Foundations","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.value","project":"Foundations","id":"e65f0b5b-4579-4584-b58b-897c7c9c7aad","savedPayload":{"position":{"x":17960.21875,"y":18323.736743838686},"targetPosition":{"x":18060.21875,"y":18323.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b0a1f908-aad9-4e31-95b7-fecf08315b68","savedPayload":{"position":{"x":18060.21875,"y":18323.736743838686},"targetPosition":{"x":18160.21875,"y":18323.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"534848ee-8d03-4555-8370-1df9044d283f","savedPayload":{"position":{"x":18160.21875,"y":18323.736743838686},"targetPosition":{"x":18260.21875,"y":18323.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4045dbb5-77d9-46ed-837d-e05caded1a29","savedPayload":{"position":{"x":18260.21875,"y":18323.736743838686},"targetPosition":{"x":18485.21875,"y":18323.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"31f1c7cf-fbde-446f-9921-793346e30c29","savedPayload":{"position":{"x":18472.21875,"y":18336.736743838686},"targetPosition":{"x":18922.21875,"y":18336.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Money Flow Index (MFI)","config":"{\n \"codeName\": \"Plotter MFI\"\n}","project":"Foundations","modules":[{"type":"Plotter Module","name":"MFI","config":"{ \n \"codeName\": \"Module-Name\", \n \"icon\": \"histogram|band|moving-average|oscillator|trend\"\n}","project":"Foundations","shapes":{"type":"Shapes","name":"New Shapes","project":"Foundations","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Foundations","points":[{"type":"Point","name":"New Point","project":"Foundations","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.property","project":"Foundations","id":"5e00d61b-c357-40dd-a0cf-a6d2fa76233d","savedPayload":{"position":{"x":18545.507318297008,"y":17873.736743838686},"targetPosition":{"x":18642.935176222756,"y":17817.486743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a3fb852b-0aef-4518-a691-b6e9997a53e1","savedPayload":{"position":{"x":18642.935176222756,"y":17817.486743838686},"targetPosition":{"x":18740.363034148504,"y":17761.236743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ca38b15d-e145-42c8-98a8-b0dbffc04720","savedPayload":{"position":{"x":18740.363034148504,"y":17761.236743838686},"targetPosition":{"x":18837.790892074252,"y":17704.986743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"New Polygon","project":"Foundations","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Foundations","style":{"type":"Style","name":"New Style","config":" { \"default\": { \"opacity\": 0.2, \"lineWidth\": 1, \"lineDash\": [0,0], \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\" }, \"atMousePosition\": { \"opacity\": 0.3, \"lineWidth\": 2, \"lineDash\": [0,0], \"paletteColor\": \"UI_COLOR.RUSTED_RED\" }}","project":"Foundations","id":"bbc148c5-cfec-4cba-909c-29402cda8fb2","savedPayload":{"position":{"x":18612.790892074252,"y":17592.486743838686},"targetPosition":{"x":18725.290892074252,"y":17592.486743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"0d741cbf-553b-43e2-866c-414a637ac298","savedPayload":{"position":{"x":18725.290892074252,"y":17592.486743838686},"targetPosition":{"x":18837.790892074252,"y":17592.486743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Foundations","style":{"type":"Style","name":"New Style","config":" { \"default\": { \"opacity\": 0.2, \"lineWidth\": 1, \"lineDash\": [0,0], \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\" }, \"atMousePosition\": { \"opacity\": 0.3, \"lineWidth\": 2, \"lineDash\": [0,0], \"paletteColor\": \"UI_COLOR.RUSTED_RED\" }}","project":"Foundations","id":"06e0d64e-179d-4c28-a834-ac4cafba7147","savedPayload":{"position":{"x":18837.790892074252,"y":17367.486743838686},"targetPosition":{"x":18837.790892074252,"y":17479.986743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"da3b36a0-f339-4b35-b707-1e994704e0da","savedPayload":{"position":{"x":18837.790892074252,"y":17479.986743838686},"targetPosition":{"x":18837.790892074252,"y":17592.486743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"","project":"Foundations","id":"5ff95619-2158-48de-8c43-30a5009e4f47","savedPayload":{"position":{"x":18950.290892074252,"y":17592.486743838686},"targetPosition":{"x":18837.790892074252,"y":17592.486743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"id":"915083b5-99cf-4abb-ac67-764bf1a9f26b","savedPayload":{"position":{"x":18837.790892074252,"y":17592.486743838686},"targetPosition":{"x":18837.790892074252,"y":17704.986743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"7afeb4e8-a789-4cfc-8394-a4253714891d","savedPayload":{"position":{"x":18837.790892074252,"y":17704.986743838686},"targetPosition":{"x":18935.21875,"y":17761.236743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"MFI","config":"{\n \"codeName\": \"\",\n \"isLegacy\": false\n}","project":"Foundations","panelData":[{"type":"Panel Data","name":"MFI","config":"{\n \"valueDecimals\": 2\n}","project":"Foundations","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.value","project":"Foundations","id":"53378fbb-eee0-4b7d-b771-ca2f9b813cde","savedPayload":{"position":{"x":19227.502323777244,"y":17592.486743838686},"targetPosition":{"x":19130.074465851496,"y":17648.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8813ea4c-b38a-47f9-ae3e-d6c719246810","savedPayload":{"position":{"x":19130.074465851496,"y":17648.736743838686},"targetPosition":{"x":19032.646607925748,"y":17704.986743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a4b4753e-e713-4bb2-9daa-cb7602e16e87","savedPayload":{"position":{"x":19032.646607925748,"y":17704.986743838686},"targetPosition":{"x":18935.21875,"y":17761.236743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d10cdbe9-9416-490a-904e-ace49d0dfbf7","savedPayload":{"position":{"x":18935.21875,"y":17761.236743838686},"targetPosition":{"x":18935.21875,"y":17873.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"691c8481-d970-4eb0-a631-639bd1d53dd9","savedPayload":{"position":{"x":18922.21875,"y":17886.736743838686},"targetPosition":{"x":18922.21875,"y":18336.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"63655ecf-cd7d-4d65-a367-e976c00631d3","savedPayload":{"position":{"x":18922.21875,"y":18336.736743838686},"targetPosition":{"x":18922.21875,"y":18336.736743838686},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}}
\ No newline at end of file
+{"type":"Data Mine","name":"Delta","config":"{\n \"codeName\": \"Delta\"\n}","project":"Foundations","sensorBots":[],"indicatorBots":[{"type":"Indicator Bot","name":"Relative Strength Index - Wilder Method (RSI-W)","config":"{\n \"codeName\": \"RSI-W\"\n}","project":"Foundations","processes":[{"type":"Process Definition","name":"Multi-Time-Frame-Market","config":"{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"description\": \"Calculates Wilder RSI.\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Time-Frame-Market\"\n }\n}","project":"Foundations","processOutput":{"type":"Process Output","name":"New Process Output","project":"Foundations","outputDatasets":[{"type":"Output Dataset","name":"Multi-Time-Frame-Market RSI-W14","project":"Foundations","id":"75881553-ec60-4954-9404-052ba11904f4","savedPayload":{"position":{"x":19646.18251638588,"y":17789.2053813897},"targetPosition":{"x":19675.299658959913,"y":17897.87203684722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"a94722c3-a453-4f46-931f-aeb244e7cb66"}}}],"outputDatasetFolders":[],"id":"ffb59a7e-565a-4588-bd44-999a7cb66122","savedPayload":{"position":{"x":19675.299658959913,"y":17897.87203684722},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Foundations","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Time-Frame-Market","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Foundations","id":"b0af9801-ba4e-4bfd-a605-98d9ac121b5f","savedPayload":{"position":{"x":19650.151086682014,"y":17594.3496655382},"targetPosition":{"x":19762.651086682014,"y":17789.2053813897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Relative Strength Index - Wilder Method (RSI-W) Multi-Time-Frame-Market","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Foundations","id":"02d64b4a-7c3c-4c89-918d-b3697b5955b2","savedPayload":{"position":{"x":19820.88537183008,"y":17571.87207047466},"targetPosition":{"x":19762.651086682014,"y":17789.2053813897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2b961dac-9f41-4eed-a495-4e55f26714c3"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Time-Frame-Market","project":"Foundations","id":"25315413-2e01-4a7d-83bc-1257d43f8fe6","savedPayload":{"position":{"x":19957.506802533513,"y":17676.7053813897},"targetPosition":{"x":19762.651086682014,"y":17789.2053813897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"b14516a1-e5cc-48f8-ab0f-0e46faf6c41c","savedPayload":{"position":{"x":19762.651086682014,"y":17789.2053813897},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Foundations","id":"2b961dac-9f41-4eed-a495-4e55f26714c3","savedPayload":{"position":{"x":19863.51582730092,"y":17847.439666537768},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Time-Frame-Market","project":"Foundations","id":"c1598823-e0b3-4036-8ad6-669ae0e3f638","savedPayload":{"position":{"x":19921.750112448986,"y":17948.304407156673},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Foundations","id":"b317c309-4677-4a2a-ba2a-801fccd01b1d","savedPayload":{"position":{"x":19921.750112448986,"y":18064.77297745281},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"279a9122-7f94-47b4-bf09-999fa889104b","savedPayload":{"position":{"x":19690.416801533946,"y":18018.53869230474},"targetPosition":{"x":19372.21875,"y":18336.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Time-Frame-Daily","config":"{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"description\": \"Calculates Wilder RSI\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Time-Frame-Daily\"\n }\n}","project":"Foundations","processOutput":{"type":"Process Output","name":"New Process Output","project":"Foundations","outputDatasets":[{"type":"Output Dataset","name":"Multi-Time-Frame-Daily RSI-W14","project":"Foundations","id":"a902a032-dbcc-4f7f-8495-70f0f5da03f8","savedPayload":{"position":{"x":19167.963077267068,"y":19583.111743838686},"targetPosition":{"x":19081.360536888624,"y":19533.111743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Daily","id":"f6e7a28d-d3d8-4d05-b90f-40bbe5f59b8a"}}}],"outputDatasetFolders":[],"id":"02da2e0b-9593-485a-ae0d-3f4ff131c813","savedPayload":{"position":{"x":19081.360536888624,"y":19533.111743838686},"targetPosition":{"x":18935.21875,"y":19448.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Foundations","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Time-Frame-Daily","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Foundations","id":"3173726e-99f5-4153-acbd-17e0ca4c6dac","savedPayload":{"position":{"x":19608.369889686794,"y":20068.582247746013},"targetPosition":{"x":19272.71875,"y":20033.30389139318},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\n \"mainUtility\": \"Market Starting Point\"\n}","project":"Foundations","id":"56d255fa-7193-431f-a3c5-f98e6d28a508","savedPayload":{"position":{"x":19523.53012859862,"y":20259.135471039295},"targetPosition":{"x":19272.71875,"y":20033.30389139318},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}},{"type":"Status Dependency","name":"Relative Strength Index - Wilder Method (RSI-W) Multi-Time-Frame-Daily","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Foundations","id":"b96ab1d1-3bdc-429d-921a-0aab94741d29","savedPayload":{"position":{"x":19342.888945650993,"y":20363.42870664084},"targetPosition":{"x":19272.71875,"y":20033.30389139318},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"8c1c40cf-dd93-4f61-b3f0-9344707b196d"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Time-Frame-Daily","project":"Foundations","id":"756f850b-7e37-4fc8-8031-b7c8458bc8c3","savedPayload":{"position":{"x":19135.44513296192,"y":20341.625483347558},"targetPosition":{"x":19272.71875,"y":20033.30389139318},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}}],"dataMineDataDependencies":[],"id":"c42ac621-a7d7-499a-84a0-76bd99ef3fa4","savedPayload":{"position":{"x":19272.71875,"y":20033.30389139318},"targetPosition":{"x":18935.21875,"y":19448.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Foundations","id":"8c1c40cf-dd93-4f61-b3f0-9344707b196d","savedPayload":{"position":{"x":18935.21875,"y":19786.236743838686},"targetPosition":{"x":18935.21875,"y":19448.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Time-Frame-Daily","project":"Foundations","id":"1bf32fba-af6a-43eb-b0bb-2ac855bb5820","savedPayload":{"position":{"x":18766.46875,"y":19741.020317615934},"targetPosition":{"x":18935.21875,"y":19448.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Foundations","id":"ffcd3bc1-44f3-4e21-9f33-fc2f818494b5","savedPayload":{"position":{"x":18642.935176222752,"y":19617.486743838686},"targetPosition":{"x":18935.21875,"y":19448.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"a5c6c183-7b68-4e7c-82c2-27ac439b098d","savedPayload":{"position":{"x":20047.21875,"y":18336.736743838686},"targetPosition":{"x":19372.21875,"y":18336.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"RSI-W14","config":"{\n \"codeName\": \"RSI-W14\",\n \"singularVariableName\": \"rsiw14\",\n \"pluralVariableName\": \"rsiw14s\"\n}","project":"Foundations","datasets":[{"type":"Dataset Definition","name":"Multi-Time-Frame-Daily","config":"{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [\n \"45-min\",\n \"40-min\",\n \"30-min\",\n \"20-min\",\n \"15-min\",\n \"10-min\",\n \"05-min\",\n \"04-min\",\n \"03-min\",\n \"02-min\",\n \"01-min\"\n ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n}","project":"Foundations","id":"f6e7a28d-d3d8-4d05-b90f-40bbe5f59b8a","savedPayload":{"position":{"x":19912.64667816785,"y":18619.73704073858},"targetPosition":{"x":19690.416801533946,"y":18654.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","config":"{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [\n \"24-hs\",\n \"12-hs\",\n \"08-hs\",\n \"06-hs\",\n \"04-hs\",\n \"03-hs\",\n \"02-hs\",\n \"01-hs\"\n ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\" : {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n}","project":"Foundations","id":"a94722c3-a453-4f46-931f-aeb244e7cb66","savedPayload":{"position":{"x":19890.893269476328,"y":18757.08265781403},"targetPosition":{"x":19690.416801533946,"y":18654.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Foundations","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Foundations","recordFormula":{"type":"Record Formula","name":"Begin","code":"record.current.begin","project":"Foundations","id":"5f2981e4-5b9a-4867-9bf4-79dd2b9c19f0","savedPayload":{"position":{"x":20108.700242583152,"y":19125.41655499176},"targetPosition":{"x":20001.706384499947,"y":19090.65214312458},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a7c379ea-fc2f-4526-9a5f-fcdc272f6a02","savedPayload":{"position":{"x":20001.706384499947,"y":19090.65214312458},"targetPosition":{"x":19894.71252641674,"y":19055.887731257397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Foundations","recordFormula":{"type":"Record Formula","code":"record.current.end","project":"Foundations","id":"ad4e0d6b-e7ce-4e09-88a6-a3f44d7c0c08","savedPayload":{"position":{"x":19996.860388858142,"y":19256.36419919978},"targetPosition":{"x":19945.78645763744,"y":19156.125965228588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a859a2ce-cd0a-43ae-995b-6140402a9f1a","savedPayload":{"position":{"x":19945.78645763744,"y":19156.125965228588},"targetPosition":{"x":19894.71252641674,"y":19055.887731257397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Value","config":"{\n \"codeName\": \"value\",\n \"isString\": false\n}","project":"Foundations","recordFormula":{"type":"Record Formula","code":"variable.value","project":"Foundations","id":"43595088-af8f-4ad5-8bfe-3b04a5168681","savedPayload":{"position":{"x":19825.183702682378,"y":19269.87544742381},"targetPosition":{"x":19859.94811454956,"y":19162.881589340603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3cd01f28-dd1a-45bc-8c68-29bdbf4be84b","savedPayload":{"position":{"x":19859.94811454956,"y":19162.881589340603},"targetPosition":{"x":19894.71252641674,"y":19055.887731257397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ee7e6fb0-984c-410b-9ba7-241deddcd7ad","savedPayload":{"position":{"x":19894.71252641674,"y":19055.887731257397},"targetPosition":{"x":19690.416801533946,"y":18654.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Foundations","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Foundations","procedureJavascriptCode":{"type":"Procedure Javascript Code","code":"/* Loop Code */\n\n/* \nCalculation method credit: https://www.macroption.com/rsi-calculation/\n*/\n\n/* Calculating Up Moves and Down Moves */\n\n//let candle = record.current // Our main dependencies are candles \n//let candlePrevious = record.previous\n\nif (record.previous !== undefined) {\n if (record.current.close > record.previous.close) {\n variable.last14U.push(record.current.close - record.previous.close) // Add win to last 14 array.\n } else {\n variable.last14U.push(0) // Add 0 to keep proper count of records in the last 14 array.\n }\n \n if (record.current.close < record.previous.close) {\n variable.last14D.push(record.previous.close - record.current.close) // Add win to last 14 array.\n } else {\n variable.last14D.push(0) // Add 0 to keep proper count of records in the last 14 array.\n }\n \n if (variable.last14U.length > 14) {\n variable.last14U.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n \n if (variable.last14D.length > 14) {\n variable.last14D.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n \n /* Calculating Averages of Up Moves and Down Moves */\n\n variable.avgU = calculateRMAU(14)\n variable.avgD = calculateRMAD(14)\n\n /* Keep track of average moves */\n variable.rma14U.push(variable.avgU)\n variable.rma14D.push(variable.avgD)\n \n if (variable.rma14U.length > 14) {\n variable.rma14U.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n \n if (variable.rma14D.length > 14) {\n variable.rma14D.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n\n /* Calculating Relative Strength */\n \n if (variable.avgD > 0) {\n relativeStrength = variable.avgU / variable.avgD\n } else {\n relativeStrength = 0\n }\n\n /* Calculating RSI */\n\n relativeStrengthIndex = 100 - 100 / ( 1 + relativeStrength)\n\n if (relativeStrengthIndex !== undefined) {\n variable.value = relativeStrengthIndex.toFixed(2)\n } else {\n variable.value = 0\n }\n} else {\n variable.value = 0\n}\n\n// Statistics\n\nfunction calculateWMA(source, rmas, periods) { // Having a function avoids us to repeat code.\n /* We check we have enough values to make the calculation */\n if (source.length < periods) { return 0 } // If we dont, we define the value is zero.\n\n let alpha = 1 / periods\n let avg = source[source.length - 1] * alpha + rmas[rmas.length - 1] * (1 - alpha)\n return avg;\n}\n\nfunction calculateRMAU(periods) {\n return calculateWMA(variable.last14U, variable.rma14U, periods)\n}\n\nfunction calculateRMAD(periods) {\n return calculateWMA(variable.last14D, variable.rma14D, periods)\n}","project":"Foundations","id":"91eb76f0-617c-4397-9135-beca294a6481","savedPayload":{"position":{"x":19781.28686956123,"y":19519.505740564182},"targetPosition":{"x":19700.654080913537,"y":19309.450144602313},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6957916d-b353-4b19-8b8f-cf7fb97024b3","savedPayload":{"position":{"x":19700.654080913537,"y":19309.450144602313},"targetPosition":{"x":19620.021292265843,"y":19099.394548640445},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Foundations","procedureJavascriptCode":{"type":"Procedure Javascript Code","code":"/* Initialization Code*/\n\n/* \nWe keep two separate arrays to store last 14 price increments or losses.\n*/\n\nvariable.last14U = []\nvariable.last14D = []\nvariable.rma14U = []\nvariable.rma14D = []\n","project":"Foundations","id":"7b8d4dd2-2dde-47fe-8340-efd0f93fe435","savedPayload":{"position":{"x":19336.827116293414,"y":19449.110231296083},"targetPosition":{"x":19478.42420427963,"y":19274.252389968264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"076ef281-1c67-4117-8168-a5beba487ffc","savedPayload":{"position":{"x":19478.42420427963,"y":19274.252389968264},"targetPosition":{"x":19620.021292265843,"y":19099.394548640445},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a1ef81d6-c2c9-46c4-aaed-366b31b2d639","savedPayload":{"position":{"x":19620.021292265843,"y":19099.394548640445},"targetPosition":{"x":19690.416801533946,"y":18654.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fbe3d4ba-bcfd-4cb1-91d1-64d7d381a21c","savedPayload":{"position":{"x":19690.416801533946,"y":18654.934795372632},"targetPosition":{"x":19372.21875,"y":18336.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"RSI-W14","id":"4045dbb5-77d9-46ed-837d-e05caded1a29"}}}],"id":"1b49e818-f9f9-4ecc-bdbd-708f5641fb66","savedPayload":{"position":{"x":19372.21875,"y":18336.736743838686},"targetPosition":{"x":18922.21875,"y":18336.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Indicator Bot","name":"Money Flow Index (MFI)","config":"{\n \"codeName\": \"MFI\"\n}","project":"Foundations","processes":[{"type":"Process Definition","name":"Multi-Time-Frame-Daily","config":"{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"description\": \"Calculates MFI\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Time-Frame-Daily\"\n }\n}","project":"Foundations","processOutput":{"type":"Process Output","name":"New Process Output","project":"Foundations","outputDatasets":[{"type":"Output Dataset","name":"Multi-Time-Frame-Daily MFI","project":"Foundations","id":"48a07111-4122-4d5c-a3ef-df4b138b6af7","savedPayload":{"position":{"x":19445.67603962037,"y":19049.935748288346},"targetPosition":{"x":19349.083456991466,"y":19075.8176527986},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Daily","id":"22edf2c6-b165-4b9e-b6ac-0cfefd9ee01b"}}}],"outputDatasetFolders":[],"id":"3c9355dd-ecf6-4604-b7f7-f6f1f8e784d6","savedPayload":{"position":{"x":19349.083456991466,"y":19075.8176527986},"targetPosition":{"x":19240.416801533946,"y":19104.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Foundations","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Time-Frame-Daily","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Foundations","id":"7867d355-9cd6-434e-90de-cd1f5f9ba32a","savedPayload":{"position":{"x":19537.299625332475,"y":19083.61956763721},"targetPosition":{"x":19457.750112448986,"y":19163.1690805207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\n \"mainUtility\": \"Market Starting Point\"\n}","project":"Foundations","id":"bdf2cbd7-2cd6-4945-96b3-0609b3969d37","savedPayload":{"position":{"x":19566.416767906507,"y":19134.051937946668},"targetPosition":{"x":19457.750112448986,"y":19163.1690805207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}},{"type":"Status Dependency","name":"Money Flow Index (MFI) Multi-Time-Frame-Daily","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Foundations","id":"25380d29-c370-4b34-bcb6-55d94cab4a11","savedPayload":{"position":{"x":19566.416767906507,"y":19192.286223094732},"targetPosition":{"x":19457.750112448986,"y":19163.1690805207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"218ce270-08fe-45a0-90ef-7189fffd72dd"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Time-Frame-Daily","project":"Foundations","id":"afdb16be-1eba-4ab0-aceb-9695b25ef435","savedPayload":{"position":{"x":19537.299625332475,"y":19242.718593404188},"targetPosition":{"x":19457.750112448986,"y":19163.1690805207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}},{"type":"Data Dependency","name":"Volumes Multi-Time-Frame-Daily","project":"Foundations","id":"f26fa862-f8e1-480b-b9a3-fb8e001e3b8d","savedPayload":{"position":{"x":19486.86725502302,"y":19271.83573597822},"targetPosition":{"x":19457.750112448986,"y":19163.1690805207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Daily","id":"2e683057-f911-4105-bc77-16f2706d1915"}}}],"dataMineDataDependencies":[],"id":"4704cf1b-133a-4e6e-8b97-bfece022354e","savedPayload":{"position":{"x":19457.750112448986,"y":19163.1690805207},"targetPosition":{"x":19240.416801533946,"y":19104.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Foundations","id":"218ce270-08fe-45a0-90ef-7189fffd72dd","savedPayload":{"position":{"x":19399.51582730092,"y":19264.033821139605},"targetPosition":{"x":19240.416801533946,"y":19104.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Time-Frame-Daily","project":"Foundations","id":"30fcca1f-f72d-46cf-bd17-99f8e2e1cd10","savedPayload":{"position":{"x":19298.651086682014,"y":19322.268106287673},"targetPosition":{"x":19240.416801533946,"y":19104.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Foundations","id":"91f10f62-3cad-4709-8b90-31daceb01bd2","savedPayload":{"position":{"x":19182.182516385878,"y":19322.268106287673},"targetPosition":{"x":19240.416801533946,"y":19104.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6be015e8-abd8-4c91-bc44-ed0dbe4401bf","savedPayload":{"position":{"x":19240.416801533946,"y":19104.934795372632},"targetPosition":{"x":18922.21875,"y":18786.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Time-Frame-Market","config":"{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"description\": \"Calculates MFI.\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Time-Frame-Market\"\n }\n}","project":"Foundations","processOutput":{"type":"Process Output","name":"New Process Output","project":"Foundations","outputDatasets":[{"type":"Output Dataset","name":"Multi-Time-Frame-Market MFI","project":"Foundations","id":"c5c02f93-dacc-4e97-803b-45f1d3d7756c","savedPayload":{"position":{"x":19130.074465851496,"y":19336.236743838686},"targetPosition":{"x":19032.646607925748,"y":19279.986743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"f5f04930-c2a3-48b7-ade9-f98e148344f1"}}}],"outputDatasetFolders":[],"id":"a78ac5ae-14c4-4928-968b-604d5c78521c","savedPayload":{"position":{"x":19032.646607925748,"y":19279.986743838686},"targetPosition":{"x":18935.21875,"y":19223.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Foundations","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Time-Frame-Market","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Foundations","id":"226234a8-bb22-4f31-9446-ffee286446b4","savedPayload":{"position":{"x":19271.48617645786,"y":19442.111363925407},"targetPosition":{"x":19047.71875,"y":19418.592459690186},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Money Flow Index (MFI) Multi-Time-Frame-Market","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Foundations","id":"319ba4b4-77dc-412f-be3f-6fdb088f317c","savedPayload":{"position":{"x":19214.926335732413,"y":19569.14684612093},"targetPosition":{"x":19047.71875,"y":19418.592459690186},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"f4b09884-97e4-44e6-b0cf-3025c4cc44f9"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Time-Frame-Market","project":"Foundations","id":"39802ca4-ee03-42f3-a5a4-e805f787520b","savedPayload":{"position":{"x":19094.498880433996,"y":19638.675669855293},"targetPosition":{"x":19047.71875,"y":19418.592459690186},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}},{"type":"Data Dependency","name":"Volumes Multi-Time-Frame-Market","project":"Foundations","id":"9580ee4c-eb61-4133-91be-b9b8065cc74e","savedPayload":{"position":{"x":18956.203005307943,"y":19624.14018765977},"targetPosition":{"x":19047.71875,"y":19418.592459690186},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"9bf0483c-4825-4a46-9cf4-1b5262579fc1"}}}],"dataMineDataDependencies":[],"id":"871fab7f-2e97-4a8a-a771-0f4769c7b82d","savedPayload":{"position":{"x":19047.71875,"y":19418.592459690186},"targetPosition":{"x":18935.21875,"y":19223.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Foundations","id":"f4b09884-97e4-44e6-b0cf-3025c4cc44f9","savedPayload":{"position":{"x":18935.21875,"y":19448.736743838686},"targetPosition":{"x":18935.21875,"y":19223.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Time-Frame-Market","project":"Foundations","id":"6319139b-bbb9-4250-831c-e57d8f8575c7","savedPayload":{"position":{"x":18822.71875,"y":19418.592459690186},"targetPosition":{"x":18935.21875,"y":19223.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Foundations","id":"adadc3e2-074c-4429-b3d7-84592d6fd73a","savedPayload":{"position":{"x":18740.3630341485,"y":19336.236743838686},"targetPosition":{"x":18935.21875,"y":19223.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"b2d41186-2875-4058-8949-8acd8e5e8218","savedPayload":{"position":{"x":18922.21875,"y":19236.736743838686},"targetPosition":{"x":18922.21875,"y":18786.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"MFI","config":"{\n \"codeName\": \"MFI\",\n \"singularVariableName\": \"mfi\",\n \"pluralVariableName\": \"mfis\"\n}","project":"Foundations","datasets":[{"type":"Dataset Definition","name":"Multi-Time-Frame-Daily","config":"{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [\n \"45-min\",\n \"40-min\",\n \"30-min\",\n \"20-min\",\n \"15-min\",\n \"10-min\",\n \"05-min\",\n \"04-min\",\n \"03-min\",\n \"02-min\",\n \"01-min\"\n ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n}","project":"Foundations","id":"22edf2c6-b165-4b9e-b6ac-0cfefd9ee01b","savedPayload":{"position":{"x":18639.218453100108,"y":19327.164672006536},"targetPosition":{"x":18604.020698466054,"y":19104.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","config":"{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [\n \"24-hs\",\n \"12-hs\",\n \"08-hs\",\n \"06-hs\",\n \"04-hs\",\n \"03-hs\",\n \"02-hs\",\n \"01-hs\"\n ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\" : {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n}","project":"Foundations","id":"f5f04930-c2a3-48b7-ade9-f98e148344f1","savedPayload":{"position":{"x":18501.872836024657,"y":19305.411263315014},"targetPosition":{"x":18604.020698466054,"y":19104.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Foundations","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Foundations","recordFormula":{"type":"Record Formula","name":"Begin","code":"record.current.begin","project":"Foundations","id":"3e93fd4c-c8d1-46f2-9097-409c0ae93699","savedPayload":{"position":{"x":18133.538938846927,"y":19523.21823642184},"targetPosition":{"x":18168.303350714108,"y":19416.224378338633},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c1daf05e-b41f-4b76-9a2c-ce190c623b86","savedPayload":{"position":{"x":18168.303350714108,"y":19416.224378338633},"targetPosition":{"x":18203.06776258129,"y":19309.230520255427},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Foundations","recordFormula":{"type":"Record Formula","code":"record.current.end","project":"Foundations","id":"453226d1-0bef-4df3-93ed-68c914f8c5b5","savedPayload":{"position":{"x":18002.591294638907,"y":19411.37838269683},"targetPosition":{"x":18102.8295286101,"y":19360.304451476128},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6326c213-145f-42f5-beb9-30b0426208da","savedPayload":{"position":{"x":18102.8295286101,"y":19360.304451476128},"targetPosition":{"x":18203.06776258129,"y":19309.230520255427},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Value","config":"{\n \"codeName\": \"value\",\n \"isString\": false\n}","project":"Foundations","recordFormula":{"type":"Record Formula","code":"variable.value","project":"Foundations","id":"f88be3cc-cb81-43db-8ee9-5eab5dc3833d","savedPayload":{"position":{"x":17989.080046414878,"y":19239.701696521064},"targetPosition":{"x":18096.073904498084,"y":19274.466108388246},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ed8d0a42-0423-4c07-95dd-2453f6e49b83","savedPayload":{"position":{"x":18096.073904498084,"y":19274.466108388246},"targetPosition":{"x":18203.06776258129,"y":19309.230520255427},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"42782833-c816-4069-9d20-55cea2597ac0","savedPayload":{"position":{"x":18203.06776258129,"y":19309.230520255427},"targetPosition":{"x":18604.020698466054,"y":19104.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Foundations","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Foundations","procedureJavascriptCode":{"type":"Procedure Javascript Code","name":"New Procedure Javascript Code","code":"/* Loop Code */\nlet candle = record.current // This is the primary dependency\nlet volume = getElement('volumes', candle) // Here I get the volume bar corresponding to the current candle\nlet totalVolume = volume.buy + volume.sell // Candles Volumes split the volume received from the exchange evenly betwen buy and sell because it does not know how much of it there is.\n\nlet hlc3 = (candle.max + candle.min + candle.close) / 3\nlet lastHlc3 = variable.lastHlc3\n\nif (record.previous !== undefined) {\n\n let change = hlc3 - variable.lastHlc3\n\n variable.last14U.push(totalVolume * (change <= 0 ? 0 : hlc3))\n variable.last14D.push(totalVolume * (change >= 0 ? 0 : hlc3))\n \n if (variable.last14U.length > 14) {\n variable.last14U.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n \n if (variable.last14D.length > 14) {\n variable.last14D.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n\n let upper = variable.last14U.reduce(function(a, b){return a + b;}, 0);\n let lower = variable.last14D.reduce(function(a, b){return a + b;}, 0);\n\n let mfi\n\n if(lower == 0)\n mfi = 100\n else if(upper == 0)\n mfi = 0\n else // RSI\n mfi = 100 - (100 / (1 + upper / lower))\n\n if (mfi !== undefined) {\n variable.value = mfi.toFixed(2)\n } else {\n variable.value = 0\n }\n\n/*\n // Printing values to console to check\n console.log(\"HLC3: \", hlc3)\n console.log(\"Last HLC3: \", lastHlc3)\n console.log(\"Change: \", change)\n console.log(\"Upper: \", upper)\n console.log(\"Lower: \", lower)\n console.log(\"MFI: \", mfi)\n */\n\n} else {\n variable.value = 0\n}\n\nvariable.lastHlc3 = hlc3","project":"Foundations","id":"086b666c-f4d1-4167-a103-76b9d3eddf5f","savedPayload":{"position":{"x":17319.33856135076,"y":19357.070440695297},"targetPosition":{"x":17739.4497532745,"y":19195.804863399913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f29a8156-18e0-48cf-b0ee-0d54a1296dc4","savedPayload":{"position":{"x":17739.4497532745,"y":19195.804863399913},"targetPosition":{"x":18159.560945198242,"y":19034.53928610453},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Foundations","procedureJavascriptCode":{"type":"Procedure Javascript Code","name":"New Procedure Javascript Code","code":"/* Initialization Code*/\n\nvariable.lastHlc3 = 0\nvariable.last14U = []\nvariable.last14D = []\n","project":"Foundations","id":"0255406d-ebc4-4841-aeb2-69bf3783a328","savedPayload":{"position":{"x":17460.129579886965,"y":18468.150934159672},"targetPosition":{"x":17809.845262542603,"y":18751.3451101321},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8e1fc1c7-4306-4151-b4e7-cd155b4d7218","savedPayload":{"position":{"x":17809.845262542603,"y":18751.3451101321},"targetPosition":{"x":18159.560945198242,"y":19034.53928610453},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7e8031b3-b8cb-43bd-8103-14e14e7be3a6","savedPayload":{"position":{"x":18159.560945198242,"y":19034.53928610453},"targetPosition":{"x":18604.020698466054,"y":19104.934795372632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"019b29d1-0227-4185-aee7-aaba499cdf93","savedPayload":{"position":{"x":18604.020698466054,"y":19104.934795372632},"targetPosition":{"x":18922.21875,"y":18786.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"MFI","id":"d10cdbe9-9416-490a-904e-ace49d0dfbf7"}}}],"id":"c43b88dc-4ad9-4321-976d-374f98e2434b","savedPayload":{"position":{"x":18922.21875,"y":18786.736743838686},"targetPosition":{"x":18922.21875,"y":18336.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"plotters":[{"type":"Plotter","name":"Relative Strength Index - Wilder Method (RSI-W)","config":"{\n \"codeName\": \"Plotter RSI-W\"\n}","project":"Foundations","modules":[{"type":"Plotter Module","name":"RSI-W14","config":"{\n \"codeName\": \"RSI-W14\"\n}","project":"Foundations","panels":[{"type":"Plotter Panel","name":"RSI-W 14","config":"{\n \"codeName\": \"\"\n}","project":"Foundations","panelData":[{"type":"Panel Data","name":"RSI-W14","config":"{\n \"valueDecimals\": 2\n}","project":"Foundations","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.value","project":"Foundations","id":"e65f0b5b-4579-4584-b58b-897c7c9c7aad","savedPayload":{"position":{"x":17960.21875,"y":18323.736743838686},"targetPosition":{"x":18060.21875,"y":18323.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b0a1f908-aad9-4e31-95b7-fecf08315b68","savedPayload":{"position":{"x":18060.21875,"y":18323.736743838686},"targetPosition":{"x":18160.21875,"y":18323.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"534848ee-8d03-4555-8370-1df9044d283f","savedPayload":{"position":{"x":18160.21875,"y":18323.736743838686},"targetPosition":{"x":18260.21875,"y":18323.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4045dbb5-77d9-46ed-837d-e05caded1a29","savedPayload":{"position":{"x":18260.21875,"y":18323.736743838686},"targetPosition":{"x":18485.21875,"y":18323.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"31f1c7cf-fbde-446f-9921-793346e30c29","savedPayload":{"position":{"x":18472.21875,"y":18336.736743838686},"targetPosition":{"x":18922.21875,"y":18336.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Money Flow Index (MFI)","config":"{\n \"codeName\": \"Plotter MFI\"\n}","project":"Foundations","modules":[{"type":"Plotter Module","name":"MFI","config":"{ \n \"codeName\": \"Module-Name\", \n \"icon\": \"histogram|band|moving-average|oscillator|trend\"\n}","project":"Foundations","shapes":{"type":"Shapes","name":"New Shapes","project":"Foundations","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Foundations","points":[{"type":"Point","name":"New Point","project":"Foundations","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.property","project":"Foundations","id":"5e00d61b-c357-40dd-a0cf-a6d2fa76233d","savedPayload":{"position":{"x":18545.507318297008,"y":17873.736743838686},"targetPosition":{"x":18642.935176222756,"y":17817.486743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a3fb852b-0aef-4518-a691-b6e9997a53e1","savedPayload":{"position":{"x":18642.935176222756,"y":17817.486743838686},"targetPosition":{"x":18740.363034148504,"y":17761.236743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ca38b15d-e145-42c8-98a8-b0dbffc04720","savedPayload":{"position":{"x":18740.363034148504,"y":17761.236743838686},"targetPosition":{"x":18837.790892074252,"y":17704.986743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"New Polygon","project":"Foundations","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Foundations","style":{"type":"Style","name":"New Style","config":" { \"default\": { \"opacity\": 0.2, \"lineWidth\": 1, \"lineDash\": [0,0], \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\" }, \"atMousePosition\": { \"opacity\": 0.3, \"lineWidth\": 2, \"lineDash\": [0,0], \"paletteColor\": \"UI_COLOR.RUSTED_RED\" }}","project":"Foundations","id":"bbc148c5-cfec-4cba-909c-29402cda8fb2","savedPayload":{"position":{"x":18612.790892074252,"y":17592.486743838686},"targetPosition":{"x":18725.290892074252,"y":17592.486743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"0d741cbf-553b-43e2-866c-414a637ac298","savedPayload":{"position":{"x":18725.290892074252,"y":17592.486743838686},"targetPosition":{"x":18837.790892074252,"y":17592.486743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Foundations","style":{"type":"Style","name":"New Style","config":" { \"default\": { \"opacity\": 0.2, \"lineWidth\": 1, \"lineDash\": [0,0], \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\" }, \"atMousePosition\": { \"opacity\": 0.3, \"lineWidth\": 2, \"lineDash\": [0,0], \"paletteColor\": \"UI_COLOR.RUSTED_RED\" }}","project":"Foundations","id":"06e0d64e-179d-4c28-a834-ac4cafba7147","savedPayload":{"position":{"x":18837.790892074252,"y":17367.486743838686},"targetPosition":{"x":18837.790892074252,"y":17479.986743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"da3b36a0-f339-4b35-b707-1e994704e0da","savedPayload":{"position":{"x":18837.790892074252,"y":17479.986743838686},"targetPosition":{"x":18837.790892074252,"y":17592.486743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"","project":"Foundations","id":"5ff95619-2158-48de-8c43-30a5009e4f47","savedPayload":{"position":{"x":18950.290892074252,"y":17592.486743838686},"targetPosition":{"x":18837.790892074252,"y":17592.486743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"id":"915083b5-99cf-4abb-ac67-764bf1a9f26b","savedPayload":{"position":{"x":18837.790892074252,"y":17592.486743838686},"targetPosition":{"x":18837.790892074252,"y":17704.986743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"7afeb4e8-a789-4cfc-8394-a4253714891d","savedPayload":{"position":{"x":18837.790892074252,"y":17704.986743838686},"targetPosition":{"x":18935.21875,"y":17761.236743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"MFI","config":"{\n \"codeName\": \"\",\n \"isLegacy\": false\n}","project":"Foundations","panelData":[{"type":"Panel Data","name":"MFI","config":"{\n \"valueDecimals\": 2\n}","project":"Foundations","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.value","project":"Foundations","id":"53378fbb-eee0-4b7d-b771-ca2f9b813cde","savedPayload":{"position":{"x":19227.502323777244,"y":17592.486743838686},"targetPosition":{"x":19130.074465851496,"y":17648.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8813ea4c-b38a-47f9-ae3e-d6c719246810","savedPayload":{"position":{"x":19130.074465851496,"y":17648.736743838686},"targetPosition":{"x":19032.646607925748,"y":17704.986743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a4b4753e-e713-4bb2-9daa-cb7602e16e87","savedPayload":{"position":{"x":19032.646607925748,"y":17704.986743838686},"targetPosition":{"x":18935.21875,"y":17761.236743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d10cdbe9-9416-490a-904e-ace49d0dfbf7","savedPayload":{"position":{"x":18935.21875,"y":17761.236743838686},"targetPosition":{"x":18935.21875,"y":17873.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"691c8481-d970-4eb0-a631-639bd1d53dd9","savedPayload":{"position":{"x":18922.21875,"y":17886.736743838686},"targetPosition":{"x":18922.21875,"y":18336.736743838686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"63655ecf-cd7d-4d65-a367-e976c00631d3","savedPayload":{"position":{"x":18922.21875,"y":18336.736743838686},"targetPosition":{"x":18922.21875,"y":18336.736743838686},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}}
diff --git a/Projects/Foundations/Plugins/Tutorials/Creating Your User Profile Tutorial.json b/Projects/Foundations/Plugins/Tutorials/Creating Your User Profile Tutorial.json
new file mode 100644
index 000000000..5ec30aba9
--- /dev/null
+++ b/Projects/Foundations/Plugins/Tutorials/Creating Your User Profile Tutorial.json
@@ -0,0 +1,1602 @@
+{
+ "type": "Tutorial",
+ "name": "Creating Your User Profile Tutorial",
+ "config": "{\"icon\":{\"name\":\"governance\",\"project\":\"Governance\"},\"position\":\"Center\",\"slider\":\"toTop\",\"pressButton\":\"\",\"docs\":{\"project\":\"Governance\",\"category\":\"Tutorial\",\"type\":\"Tutorial Step - Better Together\"},\"controlDocs\":{\"panel\":\"Open\",\"searchPage\":true,\"page\":{\"project\":\"Foundations\",\"category\":\"\",\"type\":\"\"}},\"codeName\":\"Creating Your User Profile Tutorial\"}",
+ "project": "Education",
+ "tutorialSteps": [],
+ "tutorialTopics": [
+ {
+ "type": "Tutorial Topic",
+ "name": "Before Starting",
+ "config": "{\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\"\n}",
+ "project": "Education",
+ "tutorialSteps": [
+ {
+ "type": "Tutorial Step",
+ "name": "Are You Ready?",
+ "config": "{\n \"icon\": {\n \"name\": \"Pool\\\\pools\",\n \"project\": \"Governance\"\n },\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Are You Ready?\"\n },\n \"controlDocs\": {\n \"panel\": \"Close\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n },\n \"positionAtReferenceParent\": true\n}",
+ "project": "Education",
+ "id": "7c13abc2-27e4-4fe6-afd8-14cbc0b65c7d",
+ "savedPayload": {
+ "position": {
+ "x": 17327,
+ "y": 30922.25
+ },
+ "targetPosition": {
+ "x": 17027,
+ "y": 30922.25
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ },
+ "referenceParent": {
+ "type": "Charting Space",
+ "name": "New Charting Space",
+ "id": "21d2ec55-9e56-4652-8e96-c7e451262c36"
+ },
+ "referenceParentCombinedNodePath": [
+ [
+ "New Charting Space",
+ "Charting Space",
+ "Foundations",
+ "21d2ec55-9e56-4652-8e96-c7e451262c36"
+ ]
+ ]
+ }
+ }
+ ],
+ "tutorialTopics": [],
+ "id": "fb31f94d-8c05-4c1a-89b7-92d48946ad9e",
+ "savedPayload": {
+ "position": {
+ "x": 17027,
+ "y": 30922.25
+ },
+ "targetPosition": {
+ "x": 16727,
+ "y": 30922.25
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": true,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Topic",
+ "name": "Governance Overview",
+ "config": "{\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\"\n}",
+ "project": "Education",
+ "tutorialSteps": [
+ {
+ "type": "Tutorial Step",
+ "name": "One Token to Rule Them All",
+ "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\staking-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - One Token to Rule Them All\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n },\n \"positionAtReferenceParent\": true\n}",
+ "project": "Education",
+ "id": "33321959-1eb0-494c-8df3-94b1e47efdb3",
+ "savedPayload": {
+ "position": {
+ "x": 17239.132034355964,
+ "y": 31134.382034355964
+ },
+ "targetPosition": {
+ "x": 16939.132034355964,
+ "y": 31134.382034355964
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ },
+ "referenceParent": {
+ "type": "Workspace",
+ "name": "Custom Charts Tutorials",
+ "id": "7f5b5bd1-ed0d-4fc9-a4e9-42e69e57f351"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "With Tokens Comes Responsibility",
+ "config": "{\n \"icon\": {\n \"name\": \"governance\",\n \"project\": \"Governance\"\n },\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - With Tokens Comes Responsibility\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "a13ac48c-5743-4794-85bd-bf0794d9e1a2",
+ "savedPayload": {
+ "position": {
+ "x": 17151.264068711927,
+ "y": 31346.514068711927
+ },
+ "targetPosition": {
+ "x": 16939.132034355964,
+ "y": 31134.382034355964
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "A Mighty Meritocracy",
+ "config": "{\n \"icon\": {\n \"name\": \"Position\\\\positions\",\n \"project\": \"Governance\"\n },\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"toggleMapView\": {\n \"view\": \"Off\"\n },\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - A Mighty Meritocracy\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n },\n \"positionAtReferenceParent\": true\n}",
+ "project": "Education",
+ "id": "d9b824fd-a201-40b8-8a60-d0c516d9634b",
+ "savedPayload": {
+ "position": {
+ "x": 16939.132034355964,
+ "y": 31434.382034355964
+ },
+ "targetPosition": {
+ "x": 16939.132034355964,
+ "y": 31134.382034355964
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ },
+ "referenceParent": {
+ "type": "Crypto Exchange",
+ "name": "Binance",
+ "id": "61ef0b8d-de6e-4e76-bdd5-996836760a4b"
+ },
+ "referenceParentCombinedNodePath": [
+ [
+ "My Crypto Ecosystem",
+ "Crypto Ecosystem",
+ "Foundations",
+ "7217b56c-e854-4c06-8b8a-d5d3c05a153d"
+ ],
+ [
+ "Tested",
+ "Crypto Exchanges",
+ "Foundations",
+ "e3879d63-6f8f-41a3-8ac3-0349c4361722"
+ ],
+ [
+ "Binance",
+ "Crypto Exchange",
+ "Foundations",
+ "61ef0b8d-de6e-4e76-bdd5-996836760a4b"
+ ]
+ ]
+ }
+ }
+ ],
+ "tutorialTopics": [],
+ "id": "eca95394-e23c-4464-a0a2-955e45fd9ca5",
+ "savedPayload": {
+ "position": {
+ "x": 16956.813332935693,
+ "y": 31115.086282905962
+ },
+ "targetPosition": {
+ "x": 16727,
+ "y": 30922.25
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": true,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Topic",
+ "name": "Profile Overview",
+ "config": "{\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\"\n}",
+ "project": "Education",
+ "tutorialSteps": [
+ {
+ "type": "Tutorial Step",
+ "name": "What’s in a Profile?",
+ "config": "{\n \"icon\": {\n \"name\": \"User\\\\user-profile\",\n \"project\": \"Governance\"\n },\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - What’s in a Profile?\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n },\n \"positionAtReferenceParent\": true\n}",
+ "project": "Education",
+ "id": "df575afd-af40-4725-a9a0-d0e3bdd64572",
+ "savedPayload": {
+ "position": {
+ "x": 16877,
+ "y": 31482.057621135333
+ },
+ "targetPosition": {
+ "x": 16727,
+ "y": 31222.25
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ },
+ "referenceParent": {
+ "type": "Charting Space",
+ "name": "New Charting Space",
+ "id": "21d2ec55-9e56-4652-8e96-c7e451262c36"
+ },
+ "referenceParentCombinedNodePath": [
+ [
+ "New Charting Space",
+ "Charting Space",
+ "Foundations",
+ "21d2ec55-9e56-4652-8e96-c7e451262c36"
+ ]
+ ]
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Program Participation",
+ "config": "{\n \"icon\": {\n \"name\": \"User\\\\user-referrer\",\n \"project\": \"Governance\"\n },\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Program Participation\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "1a414df9-32fa-4055-b0db-7a932e4b59e1",
+ "savedPayload": {
+ "position": {
+ "x": 16577,
+ "y": 31482.057621135333
+ },
+ "targetPosition": {
+ "x": 16727,
+ "y": 31222.25
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ }
+ ],
+ "tutorialTopics": [],
+ "id": "47f47947-70a9-48a6-88d0-bd3dae2be578",
+ "savedPayload": {
+ "position": {
+ "x": 16779.09445330008,
+ "y": 31217.692325903663
+ },
+ "targetPosition": {
+ "x": 16727,
+ "y": 30922.25
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": true,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Topic",
+ "name": "Setting Up the Constructor",
+ "config": "{\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\"\n}",
+ "project": "Education",
+ "tutorialSteps": [
+ {
+ "type": "Tutorial Step",
+ "name": "Where it all Begins",
+ "config": "{\n \"icon\": {\n \"name\": \"governance\",\n \"project\": \"Governance\"\n },\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Where it all Begins\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n },\n \"positionAtReferenceParent\": true\n}",
+ "project": "Education",
+ "id": "9aec749c-46c8-45d0-99f4-f99ecd50ec44",
+ "savedPayload": {
+ "position": {
+ "x": 16514.867965644036,
+ "y": 31434.382034355964
+ },
+ "targetPosition": {
+ "x": 16514.867965644036,
+ "y": 31134.382034355964
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ },
+ "referenceParent": {
+ "type": "Governance Project",
+ "name": "New Governance Project",
+ "id": "db380c52-cf90-475b-87df-c005dd51cdf6"
+ },
+ "referenceParentCombinedNodePath": [
+ [
+ "New Governance Project",
+ "Governance Project",
+ "Governance",
+ "db380c52-cf90-475b-87df-c005dd51cdf6"
+ ]
+ ]
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Profile in a Heartbeat",
+ "config": "{\n \"icon\": {\n \"name\": \"profile-constructor\",\n \"project\": \"Governance\"\n },\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Profile in a Heartbeat\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "cdfada38-c5e0-4c0c-aaf5-4fa24b416131",
+ "savedPayload": {
+ "position": {
+ "x": 16302.735931288073,
+ "y": 31346.514068711927
+ },
+ "targetPosition": {
+ "x": 16514.867965644036,
+ "y": 31134.382034355964
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Pump that Heartbeat!",
+ "config": "{\n \"icon\": {\n \"name\": \"configuration\",\n \"project\": \"Governance\"\n },\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Pump that Heartbeat!\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false\n },\n \"positionAtReferenceParent\": true\n}",
+ "project": "Education",
+ "id": "651e15ce-bdda-4cca-9c2d-e16a2d900e45",
+ "savedPayload": {
+ "position": {
+ "x": 16214.867965644036,
+ "y": 31134.382034355964
+ },
+ "targetPosition": {
+ "x": 16514.867965644036,
+ "y": 31134.382034355964
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ },
+ "referenceParent": {
+ "type": "Time Machine",
+ "name": "Lightning Strike Backtesting Session My Computer Binanceus BTC/USDT",
+ "id": "72a1f250-0d0e-4354-8fdf-741866b9c16c"
+ },
+ "referenceParentCombinedNodePath": [
+ [
+ "New Charting Space",
+ "Charting Space",
+ "Foundations",
+ "21d2ec55-9e56-4652-8e96-c7e451262c36"
+ ],
+ [
+ "Foundations",
+ "Project Dashboards",
+ "Foundations",
+ "2f92dce8-f804-40b6-9f4d-e605f4b4a55e"
+ ],
+ [
+ "Testing Trading Tasks My Computer",
+ "Dashboard",
+ "Foundations",
+ "b10709c9-2150-4055-a06e-1b9b8db2af55"
+ ],
+ [
+ "Lightning Strike Backtesting Session My Computer Binanceus BTC/USDT",
+ "Time Machine",
+ "Foundations",
+ "72a1f250-0d0e-4354-8fdf-741866b9c16c"
+ ]
+ ]
+ }
+ }
+ ],
+ "tutorialTopics": [],
+ "id": "1b7b5af2-bb52-4090-965e-cd457b2e229c",
+ "savedPayload": {
+ "position": {
+ "x": 16577,
+ "y": 31182.057621135333
+ },
+ "targetPosition": {
+ "x": 16727,
+ "y": 30922.25
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": true,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Topic",
+ "name": "Profile Deep Dive",
+ "config": "{\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\"\n}",
+ "project": "Education",
+ "tutorialSteps": [
+ {
+ "type": "Tutorial Step",
+ "name": "Oh so Shiny",
+ "config": "{\n \"icon\": {\n \"name\": \"User\\\\user-profile\",\n \"project\": \"Governance\"\n },\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Oh so Shiny\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "a7929f0d-8dee-488c-b517-7ac95d2cb071",
+ "savedPayload": {
+ "position": {
+ "x": 16214.867965644036,
+ "y": 31134.382034355964
+ },
+ "targetPosition": {
+ "x": 16427,
+ "y": 30922.25
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ },
+ "referenceParent": {
+ "type": "Tutorial",
+ "name": "Creating Your User Profile Tutorial",
+ "id": "57e388d1-f479-4a16-af85-aee12be285a0"
+ },
+ "referenceParentCombinedNodePath": [
+ [
+ "Creating Your User Profile Tutorial",
+ "Tutorial",
+ "Education",
+ "57e388d1-f479-4a16-af85-aee12be285a0"
+ ]
+ ]
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Only You",
+ "config": "{\n \"icon\": {\n \"name\": \"User\\\\user-profile\",\n \"project\": \"Governance\"\n },\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Only You\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "5ad27b7a-b482-44ca-a06d-8db0059d1eed",
+ "savedPayload": {
+ "position": {
+ "x": 16127,
+ "y": 30922.25
+ },
+ "targetPosition": {
+ "x": 16427,
+ "y": 30922.25
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Under the Hood",
+ "config": "{\n \"icon\": {\n \"name\": \"User\\\\user-profile\",\n \"project\": \"Governance\"\n },\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Under the Hood\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "577c1c57-88f8-4987-a1f1-f7ef10ace032",
+ "savedPayload": {
+ "position": {
+ "x": 16214.867965644036,
+ "y": 30710.117965644036
+ },
+ "targetPosition": {
+ "x": 16427,
+ "y": 30922.25
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ }
+ ],
+ "tutorialTopics": [],
+ "id": "9aaa02f8-73ec-4c89-b1ec-85d4114c5a93",
+ "savedPayload": {
+ "position": {
+ "x": 16445.092213764226,
+ "y": 31024.8560429977
+ },
+ "targetPosition": {
+ "x": 16727,
+ "y": 30922.25
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": true,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Topic",
+ "name": "Profile Backup",
+ "config": "{\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\"\n}",
+ "project": "Education",
+ "tutorialSteps": [
+ {
+ "type": "Tutorial Step",
+ "name": "Save the Key!",
+ "config": "{\n \"icon\": {\n \"name\": \"Key\\\\key-reference\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Save the Key!\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "4147bad2-0dd4-4082-bb5a-48a0bc84f595",
+ "savedPayload": {
+ "position": {
+ "x": 16214.867965644036,
+ "y": 30710.117965644036
+ },
+ "targetPosition": {
+ "x": 16514.867965644036,
+ "y": 30710.117965644036
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Profile Backup",
+ "config": "{\n \"icon\": {\n \"name\": \"Exchange\\\\exchange-account-asset\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Profile Backup\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "42cf8adb-7bee-4449-b8ab-ccc283e17796",
+ "savedPayload": {
+ "position": {
+ "x": 16302.735931288073,
+ "y": 30497.985931288073
+ },
+ "targetPosition": {
+ "x": 16514.867965644036,
+ "y": 30710.117965644036
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Delete the Constructor",
+ "config": "{\n \"icon\": {\n \"name\": \"Docs\\\\docs-action-delete-paragraph\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Delete the Constructor\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "9633816b-95cf-4b58-a231-504dd5e8e5ad",
+ "savedPayload": {
+ "position": {
+ "x": 16514.867965644036,
+ "y": 30410.117965644036
+ },
+ "targetPosition": {
+ "x": 16514.867965644036,
+ "y": 30710.117965644036
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ }
+ ],
+ "tutorialTopics": [],
+ "id": "ba99b336-1578-4a76-99f0-24e461922b4c",
+ "savedPayload": {
+ "position": {
+ "x": 16445.092213764226,
+ "y": 30819.6439570023
+ },
+ "targetPosition": {
+ "x": 16727,
+ "y": 30922.25
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": true,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Topic",
+ "name": "Add Onboarding Programs",
+ "config": "{\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\"\n}",
+ "project": "Education",
+ "tutorialSteps": [
+ {
+ "type": "Tutorial Step",
+ "name": "Program Partners",
+ "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\onboarding-programs\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Program Partners\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "18c61fe9-3cc1-4f88-9499-b873fbcb9db0",
+ "savedPayload": {
+ "position": {
+ "x": 16277,
+ "y": 30662.442378864667
+ },
+ "targetPosition": {
+ "x": 16577,
+ "y": 30662.442378864667
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Drop it like it’s Hot",
+ "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\airdrop-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Drop it like it’s Hot\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "7c1c466e-a5a4-4e67-94cb-6dc9e040f89b",
+ "savedPayload": {
+ "position": {
+ "x": 16317.192378864669,
+ "y": 30512.442378864667
+ },
+ "targetPosition": {
+ "x": 16577,
+ "y": 30662.442378864667
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "GitHub Glory",
+ "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\github-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - GitHub Glory\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "e580ebc9-097b-46d6-bb6d-145621548377",
+ "savedPayload": {
+ "position": {
+ "x": 16427,
+ "y": 30402.634757729335
+ },
+ "targetPosition": {
+ "x": 16577,
+ "y": 30662.442378864667
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "How Github Works",
+ "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\github-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - How Github Works\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "0c76a2d6-6d7b-49af-8072-ecb315e99939",
+ "savedPayload": {
+ "position": {
+ "x": 16577,
+ "y": 30362.442378864667
+ },
+ "targetPosition": {
+ "x": 16577,
+ "y": 30662.442378864667
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Save Your Profile!",
+ "config": "{\n \"icon\": {\n \"name\": \"backup-entity\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Save Your Profile!\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "782adca5-f889-4a72-a1b2-7bd3c07c283f",
+ "savedPayload": {
+ "position": {
+ "x": 16727,
+ "y": 30402.634757729335
+ },
+ "targetPosition": {
+ "x": 16577,
+ "y": 30662.442378864667
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ }
+ ],
+ "tutorialTopics": [],
+ "id": "578fdee3-64ad-4836-8feb-3e41746bceda",
+ "savedPayload": {
+ "position": {
+ "x": 16577,
+ "y": 30662.442378864667
+ },
+ "targetPosition": {
+ "x": 16727,
+ "y": 30922.25
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": true,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Topic",
+ "name": "Community building Programs",
+ "config": "{\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\"\n}",
+ "project": "Education",
+ "tutorialSteps": [
+ {
+ "type": "Tutorial Step",
+ "name": "Low Hanging Fruit",
+ "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\community-building-programs\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Low Hanging Fruit\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "f4999bbd-e909-4ee4-9e1c-fd2cf26f6565",
+ "savedPayload": {
+ "position": {
+ "x": 16393.556244709704,
+ "y": 30297.15952167357
+ },
+ "targetPosition": {
+ "x": 16805.141679950117,
+ "y": 30479.086511144505
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "I'll Lay Out the Basics",
+ "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\community-building-programs\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - I'll Lay Out the Basics\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "76690c31-27d3-4445-9662-0d208d9462cb",
+ "savedPayload": {
+ "position": {
+ "x": 16449.05414776877,
+ "y": 30203.9471475031
+ },
+ "targetPosition": {
+ "x": 16805.141679950117,
+ "y": 30479.086511144505
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "The Referral Program",
+ "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\referral-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - The Referral Program\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "91ae8bac-cd43-4523-ae97-0921a646eab2",
+ "savedPayload": {
+ "position": {
+ "x": 16525.2465638727,
+ "y": 30126.724873056577
+ },
+ "targetPosition": {
+ "x": 16805.141679950117,
+ "y": 30479.086511144505
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Declare Your Referrers",
+ "config": "{\n \"icon\": {\n \"name\": \"User\\\\user-referrer\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Declare Your Referrers\"\n },\n \"controlDocs\": {\n \"panel\": \"Close\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "2a1741e7-8eba-498d-95ab-8f05a0be8d69",
+ "savedPayload": {
+ "position": {
+ "x": 16617.705466745698,
+ "y": 30069.98057623328
+ },
+ "targetPosition": {
+ "x": 16805.141679950117,
+ "y": 30479.086511144505
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Load the User Profile",
+ "config": "{\n \"icon\": {\n \"name\": \"User\\\\user-profile\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Load the User Profile\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Load a User Profile\"\n }\n },\n \"positionAtReferenceParent\": true\n}",
+ "project": "Education",
+ "id": "b5829dc6-bf7b-433f-87ce-0e522f6d9075",
+ "savedPayload": {
+ "position": {
+ "x": 16721.057481027226,
+ "y": 30037.012029307458
+ },
+ "targetPosition": {
+ "x": 16805.141679950117,
+ "y": 30479.086511144505
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ },
+ "referenceParent": {
+ "type": "Plugin File",
+ "name": "Dummy",
+ "id": "6e9df29f-58fc-4e30-9882-5a083c30fdbe"
+ },
+ "referenceParentCombinedNodePath": [
+ [
+ "New Plugins",
+ "Plugins",
+ "Foundations",
+ "bfb0b514-3b9f-4e9a-85ca-d0ca714b09f6"
+ ],
+ [
+ "Governance",
+ "Plugin Project",
+ "Foundations",
+ "63a93d05-d353-4b5f-a641-957e031b28a9"
+ ],
+ [
+ "New Plugin User Profiles",
+ "Plugin User Profiles",
+ "Governance",
+ "2c899fe9-1335-4e9f-b2d0-45a83e478fd0"
+ ],
+ [
+ "Dummy",
+ "Plugin File",
+ "Foundations",
+ "6e9df29f-58fc-4e30-9882-5a083c30fdbe"
+ ]
+ ]
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Reference the User Profile",
+ "config": "{\n \"icon\": {\n \"name\": \"delink-node\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Reference the User Profile\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"Topic\",\n \"type\": \"Establish and Remove References\"\n }\n }\n}",
+ "project": "Education",
+ "id": "a71596ed-e01d-4759-ac96-cc04a0652a32",
+ "savedPayload": {
+ "position": {
+ "x": 16829.29616331652,
+ "y": 30029.735244390642
+ },
+ "targetPosition": {
+ "x": 16805.141679950117,
+ "y": 30479.086511144505
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Referral Token Awards",
+ "config": "{\n \"icon\": {\n \"name\": \"tokens-awarded\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Referral Token Awards\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Node\",\n \"type\": \"Community Building Programs\"\n }\n }\n}",
+ "project": "Education",
+ "id": "a2d51952-bdaa-4085-852d-3e476e1a7466",
+ "savedPayload": {
+ "position": {
+ "x": 16936.131074830537,
+ "y": 30048.573121772166
+ },
+ "targetPosition": {
+ "x": 16805.141679950117,
+ "y": 30479.086511144505
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Token Power Requirement",
+ "config": "{\n \"icon\": {\n \"name\": \"Exchange\\\\exchange-account-asset\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Token Power Requirement\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "c9e918bc-1c41-4a0d-b9ac-605ed49770b8",
+ "savedPayload": {
+ "position": {
+ "x": 17035.35335884118,
+ "y": 30092.430872491506
+ },
+ "targetPosition": {
+ "x": 16805.141679950117,
+ "y": 30479.086511144505
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Controlling Flows",
+ "config": "{\n \"icon\": {\n \"name\": \"Switches\\\\votes-switch\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Controlling Flows\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "75e9e063-062e-4e24-ad69-f3275105db1d",
+ "savedPayload": {
+ "position": {
+ "x": 17121.196576860082,
+ "y": 30158.759643493304
+ },
+ "targetPosition": {
+ "x": 16805.141679950117,
+ "y": 30479.086511144505
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Controlling Flows",
+ "config": "{\n \"icon\": {\n \"name\": \"Exchange\\\\exchange-account-asset\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - What Token Power?\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "6c97b37b-f8d8-4d0a-a871-3d560bd01b74",
+ "savedPayload": {
+ "position": {
+ "x": 17188.671833083383,
+ "y": 30243.704647702194
+ },
+ "targetPosition": {
+ "x": 16805.141679950117,
+ "y": 30479.086511144505
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Support Your Supporters",
+ "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\support-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Support Your Supporters\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "5a607ee0-fe97-441f-902c-91281bf95d9e",
+ "savedPayload": {
+ "position": {
+ "x": 17233.85771088196,
+ "y": 30342.329190236094
+ },
+ "targetPosition": {
+ "x": 16805.141679950117,
+ "y": 30479.086511144505
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Thank Your Mentors",
+ "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\mentorship-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Thank Your Mentors\"\n },\n \"controlDocs\": {\n \"panel\": \"Close\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "ebefe717-27b6-484a-b06a-ca6ca6c28260",
+ "savedPayload": {
+ "position": {
+ "x": 17254.128171282147,
+ "y": 30448.901571168553
+ },
+ "targetPosition": {
+ "x": 16805.141679950117,
+ "y": 30479.086511144505
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ }
+ ],
+ "tutorialTopics": [],
+ "id": "5b6febb1-6160-4c3a-bca1-5d2b47950a94",
+ "savedPayload": {
+ "position": {
+ "x": 16805.141679950117,
+ "y": 30479.086511144505
+ },
+ "targetPosition": {
+ "x": 16727,
+ "y": 30922.25
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": true,
+ "angleToParent": 1,
+ "distanceToParent": 4,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Topic",
+ "name": "Submit Profile",
+ "config": "{\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\"\n}",
+ "project": "Education",
+ "tutorialSteps": [
+ {
+ "type": "Tutorial Step",
+ "name": "Make it Official",
+ "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\github-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Make it Official\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - GitHub.com Authentication\"\n }\n },\n \"positionAtReferenceParent\": true\n}",
+ "project": "Education",
+ "id": "fe74b3ae-9490-465a-a491-db4b0834dbf7",
+ "savedPayload": {
+ "position": {
+ "x": 16982.96005575999,
+ "y": 30430.555307666513
+ },
+ "targetPosition": {
+ "x": 16956.813332935693,
+ "y": 30729.413717094038
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ },
+ "referenceParent": {
+ "type": "Github API",
+ "name": "New Github API",
+ "id": "48c9ca95-3cc0-43a8-a522-27e812979800"
+ },
+ "referenceParentCombinedNodePath": [
+ [
+ "New APIs",
+ "APIs",
+ "Foundations",
+ "e4e1b5e1-c1f6-45da-af08-32464d5b17f9"
+ ],
+ [
+ "New Github API",
+ "Github API",
+ "Foundations",
+ "48c9ca95-3cc0-43a8-a522-27e812979800"
+ ]
+ ]
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Infinity and Beyond",
+ "config": "{\n \"icon\": {\n \"name\": \"User\\\\user-profile\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - To Infinity and Beyond\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "id": "e4c5a34f-67c4-4fdc-8c11-aef5bde92d72",
+ "savedPayload": {
+ "position": {
+ "x": 17186.626665871387,
+ "y": 30536.577434188075
+ },
+ "targetPosition": {
+ "x": 16956.813332935693,
+ "y": 30729.413717094038
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Welcome aboard!",
+ "config": "{\n \"icon\": {\n \"name\": \"Announcement\\\\announcement\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Welcome aboard!\"\n },\n \"controlDocs\": {\n \"panel\": \"Close\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n },\n \"positionAtReferenceParent\": true\n}",
+ "project": "Education",
+ "id": "340f9107-9b4a-424b-94f2-79d65873c572",
+ "savedPayload": {
+ "position": {
+ "x": 17255.671742363218,
+ "y": 30755.560439918336
+ },
+ "targetPosition": {
+ "x": 16956.813332935693,
+ "y": 30729.413717094038
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ },
+ "referenceParent": {
+ "type": "Tutorial",
+ "name": "Governance Program Walk Through Tutorial",
+ "id": "eb85fbbd-080f-41c6-91a8-c6b68195a74b"
+ },
+ "referenceParentCombinedNodePath": [
+ [
+ "Governance Program Walk Through Tutorial",
+ "Tutorial",
+ "Education",
+ "eb85fbbd-080f-41c6-91a8-c6b68195a74b"
+ ]
+ ]
+ }
+ }
+ ],
+ "tutorialTopics": [],
+ "id": "75373f58-ac05-4358-ad12-e50c88f08196",
+ "savedPayload": {
+ "position": {
+ "x": 16956.813332935693,
+ "y": 30729.413717094038
+ },
+ "targetPosition": {
+ "x": 16727,
+ "y": 30922.25
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": true,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ }
+ ],
+ "id": "57e388d1-f479-4a16-af85-aee12be285a0",
+ "savedPayload": {
+ "position": {
+ "x": 16727,
+ "y": 30922.25
+ },
+ "targetPosition": {
+ "x": 16727,
+ "y": 30922.25
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": true,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 1
+ },
+ "uiObject": {
+ "isPlaying": true,
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Done"
+ }
+ }
+}
\ No newline at end of file
diff --git a/Projects/Foundations/Plugins/Tutorials/Governance Program Walk Through Tutorial.json b/Projects/Foundations/Plugins/Tutorials/Governance Program Walk Through Tutorial.json
new file mode 100644
index 000000000..0ae6f17a9
--- /dev/null
+++ b/Projects/Foundations/Plugins/Tutorials/Governance Program Walk Through Tutorial.json
@@ -0,0 +1,251 @@
+{
+ "type": "Tutorial",
+ "name": "Governance Program Walk Through Tutorial",
+ "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\financial-programs\",\n \"project\": \"Governance\"\n },\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Into the Thick of It\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
+ "project": "Education",
+ "tutorialSteps": [
+ {
+ "type": "Tutorial Step",
+ "name": "Refer a Friend",
+ "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\referral-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Refer a Friend\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Referral Program Overview\"\n }\n }\n}",
+ "project": "Education",
+ "id": "a3df7ac4-69e0-41b9-af1c-fd0087d26161",
+ "savedPayload": {
+ "position": {
+ "x": 21016,
+ "y": 30930.750000000004
+ },
+ "targetPosition": {
+ "x": 20716,
+ "y": 30930.750000000004
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "A Thank You for Support",
+ "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\support-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - A Thank You for Support\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Support Program Overview\"\n }\n }\n}",
+ "project": "Education",
+ "id": "dc20ebdc-6708-4fed-a75b-bade62d3ce0c",
+ "savedPayload": {
+ "position": {
+ "x": 20903.04694055762,
+ "y": 31165.299444740413
+ },
+ "targetPosition": {
+ "x": 20716,
+ "y": 30930.750000000004
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Find a Mentor",
+ "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\mentorship-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Find a Mentor\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Mentorship Program Overview\"\n }\n }\n}",
+ "project": "Education",
+ "id": "258b83f3-200d-41d7-8288-81eec5da0ccf",
+ "savedPayload": {
+ "position": {
+ "x": 20649.243719813105,
+ "y": 31223.22837365455
+ },
+ "targetPosition": {
+ "x": 20716,
+ "y": 30930.750000000004
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Claim some Contributions",
+ "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\claims-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Claim some Contributions\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Contribution Claims Program Overview\"\n }\n }\n}",
+ "project": "Education",
+ "id": "7301eace-be0a-45f8-9f8d-14afb7e9336a",
+ "savedPayload": {
+ "position": {
+ "x": 20445.709339629273,
+ "y": 31060.91512173527
+ },
+ "targetPosition": {
+ "x": 20716,
+ "y": 30930.750000000004
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Lend a Vote",
+ "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\voting-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Lend a Vote\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Voting Program Overview\"\n }\n }\n}",
+ "project": "Education",
+ "id": "61b34c29-85ce-4b86-8a77-21f8e8888c35",
+ "savedPayload": {
+ "position": {
+ "x": 20445.709339629273,
+ "y": 30800.584878264737
+ },
+ "targetPosition": {
+ "x": 20716,
+ "y": 30930.750000000004
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Delegate some Power",
+ "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\delegation-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Delegate some Power\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Delegation Program Overview\"\n }\n }\n}",
+ "project": "Education",
+ "id": "bb0b161f-af82-4b93-87a8-30ae6ace533c",
+ "savedPayload": {
+ "position": {
+ "x": 20649.243719813105,
+ "y": 30638.271626345457
+ },
+ "targetPosition": {
+ "x": 20716,
+ "y": 30930.750000000004
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ },
+ {
+ "type": "Tutorial Step",
+ "name": "Stake some Tokens",
+ "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\staking-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Stake some Tokens\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Staking Program Overview\"\n }\n }\n}",
+ "project": "Education",
+ "id": "507fc893-7a06-4bba-ba23-fb7125aa2017",
+ "savedPayload": {
+ "position": {
+ "x": 20903.04694055762,
+ "y": 30696.200555259595
+ },
+ "targetPosition": {
+ "x": 20716,
+ "y": 30930.750000000004
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Reset"
+ }
+ }
+ }
+ ],
+ "tutorialTopics": [],
+ "id": "eb85fbbd-080f-41c6-91a8-c6b68195a74b",
+ "savedPayload": {
+ "position": {
+ "x": 20716,
+ "y": 30930.750000000004
+ },
+ "targetPosition": {
+ "x": 20716,
+ "y": 30930.750000000004
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": true,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 1
+ },
+ "uiObject": {
+ "isRunning": false
+ },
+ "tutorial": {
+ "status": "Done"
+ }
+ }
+}
\ No newline at end of file
diff --git a/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-006-data-mining-data-mine-hierarchy.json b/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-006-data-mining-data-mine-hierarchy.json
index 512d1b8b0..ec65c079e 100644
--- a/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-006-data-mining-data-mine-hierarchy.json
+++ b/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-006-data-mining-data-mine-hierarchy.json
@@ -64,7 +64,7 @@
},
{
"style": "Text",
- "text": "Data Mines are created by power users and contributed to the project (the ones shipping with the software). Users might create Data Mines for their personal use and never share them. However, if they share them, they receive SA tokens for that, and also for adapting and mantaining them, if necessary, for each new release."
+ "text": "Data Mines are created by power users and contributed to the project (the ones shipping with the software). Users might create Data Mines for their personal use and never share them. However, if they share them, they receive SA Tokens for that, and also for adapting and mantaining them, if necessary, for each new release."
},
{
"style": "Title",
diff --git a/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-014-data-mining-fetching-data-from-apis.json b/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-014-data-mining-fetching-data-from-apis.json
index f577ee689..25d14cfea 100644
--- a/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-014-data-mining-fetching-data-from-apis.json
+++ b/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-014-data-mining-fetching-data-from-apis.json
@@ -265,7 +265,7 @@
},
{
"style": "List",
- "text": "Step #30: Once you have successfully mapped the whole API and you have all the needed API Data Fetchers, Indicator Bots and Plotters tested, you are ready to share your API Map and Data Mine with the community as a plugin, and receive SA tokens in exchange for your contribution.",
+ "text": "Step #30: Once you have successfully mapped the whole API and you have all the needed API Data Fetchers, Indicator Bots and Plotters tested, you are ready to share your API Map and Data Mine with the community as a plugin, and receive SA Tokens in exchange for your contribution.",
"updated": 1622233875203
},
{
diff --git a/Projects/Foundations/Schemas/Docs-Topics/R/Repository/Repository-Branches/repository-branches-003-develop.json b/Projects/Foundations/Schemas/Docs-Topics/R/Repository/Repository-Branches/repository-branches-003-develop.json
index 682fb97da..cd49c2bff 100644
--- a/Projects/Foundations/Schemas/Docs-Topics/R/Repository/Repository-Branches/repository-branches-003-develop.json
+++ b/Projects/Foundations/Schemas/Docs-Topics/R/Repository/Repository-Branches/repository-branches-003-develop.json
@@ -3,14 +3,14 @@
"pageNumber": "3",
"type": "Develop",
"definition": {
- "text": "The Develop branch is the branch that is being used by developers involved in contributing to Superalgos. All the changes at this branch are sent to the Master branch everytime there is a new release. The Develop branch purpose is for accumulating changes at the codebase untiil the release date when all these changes are moved into the Master branch.",
- "updated": 1622467883706
+ "text": "The Develop branch is the branch developers use to contribute to the codebase. Changes at this branch are merged into the Master branch upon each release or service pack. The purpose of the Develop branch is to accumulate changes at the codebase until the release date when changes are ready for merging.",
+ "updated": 1630657066558
},
"paragraphs": [
{
"style": "Text",
- "text": "Contributors working at this branch coordinate their here:",
- "updated": 1622468223194
+ "text": "Contributors working at this branch Hang out in the Telegram Develop Group.",
+ "updated": 1630657099841
},
{
"style": "Link",
diff --git a/Projects/Foundations/Schemas/Docs-Topics/S/Sparta/Sparta-Data-Mine/sparta-data-mine-001-sparta-by-@julian-molina.json b/Projects/Foundations/Schemas/Docs-Topics/S/Sparta/Sparta-Data-Mine/sparta-data-mine-001-sparta-by-@julian-molina.json
index a5601801e..b17b60e2e 100644
--- a/Projects/Foundations/Schemas/Docs-Topics/S/Sparta/Sparta-Data-Mine/sparta-data-mine-001-sparta-by-@julian-molina.json
+++ b/Projects/Foundations/Schemas/Docs-Topics/S/Sparta/Sparta-Data-Mine/sparta-data-mine-001-sparta-by-@julian-molina.json
@@ -3,7 +3,7 @@
"pageNumber": 1,
"type": "Sparta By @julian-molina",
"definition": {
- "text": "The set of indicators built in the Sparta data mine include Simple Moving Average (SMA), Exponential Moving Averege (EMA), Relative Strenght Index (RSI), and Moving Average convergence Divergence (MACD).",
+ "text": "The set of indicators built in the Sparta data mine include Simple Moving Average (SMA), Exponential Moving Averege (EMA), Relative Strength Index (RSI), and Moving Average convergence Divergence (MACD).",
"updated": 1611685345604
},
"paragraphs": [
@@ -22,4 +22,4 @@
"text": "Collaborate with this data mine and report issues directly at the Superalgos repository."
}
]
-}
\ No newline at end of file
+}
diff --git a/Projects/Foundations/Schemas/Docs-Topics/S/Sparta/Sparta-Data-Mine/sparta-data-mine-004-relative-strenght-index-rsi-sparta-indicator.json b/Projects/Foundations/Schemas/Docs-Topics/S/Sparta/Sparta-Data-Mine/sparta-data-mine-004-relative-strenght-index-rsi-sparta-indicator.json
index c6ce769d1..73b0ca493 100644
--- a/Projects/Foundations/Schemas/Docs-Topics/S/Sparta/Sparta-Data-Mine/sparta-data-mine-004-relative-strenght-index-rsi-sparta-indicator.json
+++ b/Projects/Foundations/Schemas/Docs-Topics/S/Sparta/Sparta-Data-Mine/sparta-data-mine-004-relative-strenght-index-rsi-sparta-indicator.json
@@ -1,9 +1,9 @@
{
"topic": "Sparta Data Mine",
"pageNumber": 4,
- "type": "Relative Strenght Index (RSI) - Sparta Indicator",
+ "type": "Relative Strength Index (RSI) - Sparta Indicator",
"definition": {
- "text": "The indicator produces the standard 14 setting of the Relative Strenght Index.",
+ "text": "The indicator produces the standard 14 setting of the Relative Strength Index.",
"updated": 1611662214310
},
"paragraphs": [
@@ -59,4 +59,4 @@
"text": "How’s the trend going at the 24-hours chart?"
}
]
-}
\ No newline at end of file
+}
diff --git a/Projects/Foundations/TS/Task-Modules/EventServerClient.js b/Projects/Foundations/TS/Task-Modules/EventServerClient.js
index 098dc85f2..c1de5323b 100644
--- a/Projects/Foundations/TS/Task-Modules/EventServerClient.js
+++ b/Projects/Foundations/TS/Task-Modules/EventServerClient.js
@@ -24,7 +24,7 @@
host = 'localhost'
}
if (port === undefined) {
- port = global.env.WEB_SOCKETS_INTERFACE_PORT
+ port = global.env.CLIENT_WEB_SOCKETS_INTERFACE_PORT
}
let messageCounter = 0
diff --git a/Projects/Foundations/UI/Spaces/Charting-Space/ChartingSpace.js b/Projects/Foundations/UI/Spaces/Charting-Space/ChartingSpace.js
index 3fe3f38f4..4694622d6 100644
--- a/Projects/Foundations/UI/Spaces/Charting-Space/ChartingSpace.js
+++ b/Projects/Foundations/UI/Spaces/Charting-Space/ChartingSpace.js
@@ -186,7 +186,9 @@ function newFoundationsChartingSpace() {
}
function resize() {
- thisObject.viewport.resize()
+ if (thisObject.viewport !== undefined) {
+ thisObject.viewport.resize()
+ }
thisObject.container.frame.width = browserCanvas.width
thisObject.container.frame.height = COCKPIT_SPACE_POSITION
}
diff --git a/Projects/Governance/Plugins/Assets/Superalgos-Exchanges.json b/Projects/Governance/Plugins/Assets/Superalgos-Exchanges.json
index d4090dcf2..d6c498572 100644
--- a/Projects/Governance/Plugins/Assets/Superalgos-Exchanges.json
+++ b/Projects/Governance/Plugins/Assets/Superalgos-Exchanges.json
@@ -356,7 +356,7 @@
"floatingObject": {
"isPinned": false,
"isFrozen": false,
- "isCollapsed": false,
+ "isCollapsed": true,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
diff --git a/Projects/Governance/Plugins/Assets/Superalgos-Marketing.json b/Projects/Governance/Plugins/Assets/Superalgos-Marketing.json
index be5d90893..64bf9ba09 100644
--- a/Projects/Governance/Plugins/Assets/Superalgos-Marketing.json
+++ b/Projects/Governance/Plugins/Assets/Superalgos-Marketing.json
@@ -1670,7 +1670,7 @@
"floatingObject": {
"isPinned": false,
"isFrozen": false,
- "isCollapsed": false,
+ "isCollapsed": true,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
diff --git a/Projects/Governance/Plugins/Assets/Superalgos.json b/Projects/Governance/Plugins/Assets/Superalgos.json
index ae39e92d5..2caffa09e 100644
--- a/Projects/Governance/Plugins/Assets/Superalgos.json
+++ b/Projects/Governance/Plugins/Assets/Superalgos.json
@@ -308,7 +308,7 @@
"floatingObject": {
"isPinned": false,
"isFrozen": false,
- "isCollapsed": false,
+ "isCollapsed": true,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
diff --git a/Projects/Governance/Plugins/Features/Superalgos.json b/Projects/Governance/Plugins/Features/Superalgos.json
index ee0c33888..eecf6eef4 100644
--- a/Projects/Governance/Plugins/Features/Superalgos.json
+++ b/Projects/Governance/Plugins/Features/Superalgos.json
@@ -807,7 +807,7 @@
"floatingObject": {
"isPinned": false,
"isFrozen": false,
- "isCollapsed": false,
+ "isCollapsed": true,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
diff --git a/Projects/Governance/Plugins/Pools/Superalgos.json b/Projects/Governance/Plugins/Pools/Superalgos.json
index c446e8ab1..549b0022b 100644
--- a/Projects/Governance/Plugins/Pools/Superalgos.json
+++ b/Projects/Governance/Plugins/Pools/Superalgos.json
@@ -1,7 +1,7 @@
{
"type": "Pools",
"name": "Superalgos",
- "config": "{\n \"tokens\": \"66000000\",\n \"codeName\": \"Superalgos\"\n}",
+ "config": "{\"tokens\":\"66000000\",\"codeName\":\"Superalgos\"}",
"project": "Governance",
"poolClasses": [
{
@@ -792,7 +792,7 @@
"floatingObject": {
"isPinned": false,
"isFrozen": false,
- "isCollapsed": false,
+ "isCollapsed": true,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
@@ -817,7 +817,7 @@
"floatingObject": {
"isPinned": false,
"isFrozen": false,
- "isCollapsed": false,
+ "isCollapsed": true,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
@@ -1740,14 +1740,12 @@
"referenceParent": {
"type": "Features",
"name": "Superalgos",
- "id": "1d2c1985-c762-4ece-b350-15bd893bd1f4"
+ "id": "7c27de79-0ac7-4d48-81f0-5d7b6a4d93c6"
},
"referenceParentCombinedNodePath": [
[
"Superalgos",
- "Features",
- "Governance",
- "1d2c1985-c762-4ece-b350-15bd893bd1f4"
+ "Features"
]
]
}
@@ -1816,7 +1814,7 @@
"floatingObject": {
"isPinned": false,
"isFrozen": false,
- "isCollapsed": false,
+ "isCollapsed": true,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
diff --git a/Projects/Governance/Plugins/Positions/Superalgos-Marketing.json b/Projects/Governance/Plugins/Positions/Superalgos-Marketing.json
index 451dad211..ba3cff2c3 100644
--- a/Projects/Governance/Plugins/Positions/Superalgos-Marketing.json
+++ b/Projects/Governance/Plugins/Positions/Superalgos-Marketing.json
@@ -170,7 +170,7 @@
"floatingObject": {
"isPinned": false,
"isFrozen": false,
- "isCollapsed": false,
+ "isCollapsed": true,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
diff --git a/Projects/Governance/Plugins/Positions/Superalgos.json b/Projects/Governance/Plugins/Positions/Superalgos.json
index 71664c65e..7f6a9668a 100644
--- a/Projects/Governance/Plugins/Positions/Superalgos.json
+++ b/Projects/Governance/Plugins/Positions/Superalgos.json
@@ -324,7 +324,7 @@
"floatingObject": {
"isPinned": false,
"isFrozen": false,
- "isCollapsed": false,
+ "isCollapsed": true,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
diff --git a/Projects/Governance/Plugins/User-Profiles/Dummy.json b/Projects/Governance/Plugins/User-Profiles/Dummy.json
new file mode 100644
index 000000000..0eabb45da
--- /dev/null
+++ b/Projects/Governance/Plugins/User-Profiles/Dummy.json
@@ -0,0 +1,84 @@
+{
+ "type": "User Profile",
+ "name": "Dummy",
+ "config": "{\"signature\":{\"message\":\"Dummy\",\"messageHash\":\"0x02896cc66d7707014218bb1765cc0c2d97ff890c3078f973a365ea0b3cc5bdcf\",\"v\":\"0x1c\",\"r\":\"0xd6e1c99e2fc5c83f17abf2372ef3b85b242b659ead4725ed036c4b4607ba1f60\",\"s\":\"0x226266f27b546c894dc7e5f7ca95c3580156f5d178073479ebfa8f18a2452707\",\"signature\":\"0xd6e1c99e2fc5c83f17abf2372ef3b85b242b659ead4725ed036c4b4607ba1f60226266f27b546c894dc7e5f7ca95c3580156f5d178073479ebfa8f18a24527071c\"},\"codeName\":\"Dummy\"}",
+ "project": "Governance",
+ "tokenPowerSwitch": {
+ "type": "Token Power Switch",
+ "name": "New Token Power Switch",
+ "config": "{}",
+ "project": "Governance",
+ "tokenPowerSwitch": [],
+ "id": "da7974b8-2894-4723-8c99-f8d9725efde3",
+ "savedPayload": {
+ "position": {
+ "x": 14265,
+ "y": 10794.5
+ },
+ "targetPosition": {
+ "x": 13965,
+ "y": 10794.5
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ }
+ }
+ },
+ "tokensMined": {
+ "type": "Tokens Mined",
+ "name": "New Tokens Mined",
+ "project": "Governance",
+ "id": "9ed9c490-7dd6-497a-8ed0-5ddd6ea8dbee",
+ "savedPayload": {
+ "position": {
+ "x": 13665,
+ "y": 10794.5
+ },
+ "targetPosition": {
+ "x": 13965,
+ "y": 10794.5
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ }
+ }
+ },
+ "id": "7f24cabd-729b-4fe5-9258-cbfa779ba03e",
+ "savedPayload": {
+ "position": {
+ "x": 30000,
+ "y": 21251
+ },
+ "targetPosition": {
+ "x": 30000,
+ "y": 21251
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": true,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/Projects/Governance/Plugins/User-Profiles/Test-Network-Client-Profile.json b/Projects/Governance/Plugins/User-Profiles/Test-Network-Client-Profile.json
new file mode 100644
index 000000000..3279c2cd7
--- /dev/null
+++ b/Projects/Governance/Plugins/User-Profiles/Test-Network-Client-Profile.json
@@ -0,0 +1,84 @@
+{
+ "type": "User Profile",
+ "name": "Test-Network-Client-Profile",
+ "config": "{\"signature\":{\"message\":\"Test-Network-Client-Profile\",\"messageHash\":\"0xd768f828a837f3fa0c3e9bb8090820c415ff08be93cad759a53bc2115487c5d7\",\"v\":\"0x1c\",\"r\":\"0x1401b80eec441aa9789580848e0179f36485acab9562fe184bca5e2fd9e77887\",\"s\":\"0x06400cef3453437805fb9b086c246d7def27a146ed975450edf7dcc46795a57d\",\"signature\":\"0x1401b80eec441aa9789580848e0179f36485acab9562fe184bca5e2fd9e7788706400cef3453437805fb9b086c246d7def27a146ed975450edf7dcc46795a57d1c\"},\"codeName\":\"Test-Network-Client-Profile\"}",
+ "project": "Governance",
+ "tokenPowerSwitch": {
+ "type": "Token Power Switch",
+ "name": "New Token Power Switch",
+ "config": "{}",
+ "project": "Governance",
+ "tokenPowerSwitch": [],
+ "id": "c2a1f8b1-0eb3-457a-9508-2e0c813ced37",
+ "savedPayload": {
+ "position": {
+ "x": 14303,
+ "y": 11452.5
+ },
+ "targetPosition": {
+ "x": 14003,
+ "y": 11452.5
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ }
+ }
+ },
+ "tokensMined": {
+ "type": "Tokens Mined",
+ "name": "New Tokens Mined",
+ "project": "Governance",
+ "id": "e796be1b-7d10-47f1-8b1a-4d7ce962a113",
+ "savedPayload": {
+ "position": {
+ "x": 13703,
+ "y": 11452.5
+ },
+ "targetPosition": {
+ "x": 14003,
+ "y": 11452.5
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ }
+ }
+ },
+ "id": "baa2f02c-2920-4edb-a103-d452fc61d82f",
+ "savedPayload": {
+ "position": {
+ "x": 20588.235294117643,
+ "y": 18250
+ },
+ "targetPosition": {
+ "x": 20588.235294117643,
+ "y": 18250
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": true,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/Projects/Governance/Plugins/User-Profiles/Test-Network-Node-Profile.json b/Projects/Governance/Plugins/User-Profiles/Test-Network-Node-Profile.json
new file mode 100644
index 000000000..10d3ae958
--- /dev/null
+++ b/Projects/Governance/Plugins/User-Profiles/Test-Network-Node-Profile.json
@@ -0,0 +1,84 @@
+{
+ "type": "User Profile",
+ "name": "Test-Network-Node-Profile",
+ "config": "{\"signature\":{\"message\":\"Test-Network-Node-Profile\",\"messageHash\":\"0xa05026b7c6c2a2375480d5d24949621749cc48e461e6e80278a9ef1b6dc7c5f1\",\"v\":\"0x1c\",\"r\":\"0x8f28f992b0074e4d50007cdfbf18980ca58b4969e04a54d06e4d4798bb982c9a\",\"s\":\"0x1c11951a92a1beffe8f3ddd06426ebe1b89875b56d5e374426100d5f59245ea3\",\"signature\":\"0x8f28f992b0074e4d50007cdfbf18980ca58b4969e04a54d06e4d4798bb982c9a1c11951a92a1beffe8f3ddd06426ebe1b89875b56d5e374426100d5f59245ea31c\"},\"codeName\":\"Test-Network-Node-Profile\"}",
+ "project": "Governance",
+ "tokenPowerSwitch": {
+ "type": "Token Power Switch",
+ "name": "New Token Power Switch",
+ "config": "{}",
+ "project": "Governance",
+ "tokenPowerSwitch": [],
+ "id": "11f69cbe-00c8-4fac-9fcc-701a7600c92c",
+ "savedPayload": {
+ "position": {
+ "x": 14327,
+ "y": 11862
+ },
+ "targetPosition": {
+ "x": 14027,
+ "y": 11862
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ }
+ }
+ },
+ "tokensMined": {
+ "type": "Tokens Mined",
+ "name": "New Tokens Mined",
+ "project": "Governance",
+ "id": "501f456f-b4b5-4b7e-9118-0f26215dd20e",
+ "savedPayload": {
+ "position": {
+ "x": 13727,
+ "y": 11862
+ },
+ "targetPosition": {
+ "x": 14027,
+ "y": 11862
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ }
+ }
+ },
+ "id": "36c2b050-631f-4291-987c-418adc94317d",
+ "savedPayload": {
+ "position": {
+ "x": 17647.05882352941,
+ "y": 21251
+ },
+ "targetPosition": {
+ "x": 17647.05882352941,
+ "y": 21251
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": true,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/Projects/Governance/Plugins/Workspaces/Token-Distribution-Superalgos.json b/Projects/Governance/Plugins/Workspaces/Token-Distribution-Superalgos.json
index 34333e6db..9c9b6f182 100644
--- a/Projects/Governance/Plugins/Workspaces/Token-Distribution-Superalgos.json
+++ b/Projects/Governance/Plugins/Workspaces/Token-Distribution-Superalgos.json
@@ -76,7 +76,7 @@
"floatingObject": {
"isPinned": true,
"isFrozen": false,
- "isCollapsed": false,
+ "isCollapsed": true,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
@@ -192,7 +192,7 @@
"floatingObject": {
"isPinned": false,
"isFrozen": false,
- "isCollapsed": false,
+ "isCollapsed": true,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
@@ -602,7 +602,36 @@
"type": "Plugin Tutorials",
"name": "New Plugin Tutorials",
"project": "Foundations",
- "pluginFiles": [],
+ "pluginFiles": [
+ {
+ "type": "Plugin File",
+ "name": "Creating Your User Profile Tutorial",
+ "config": "{\n \"project\": \"Foundations\",\n \"fileName\": \"Creating Your User Profile Tutorial\",\n \"folderName\": \"Tutorials\",\n \"nodeType\": \"Tutorial\",\n \"saveWithWorkspace\": false\n}",
+ "project": "Foundations",
+ "id": "4f900690-970b-4d38-832c-273b0fd3ce1a",
+ "savedPayload": {
+ "position": {
+ "x": 36774.75448470882,
+ "y": 11218.497915923215
+ },
+ "targetPosition": {
+ "x": 36598.41890902108,
+ "y": 10975.79281761073
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ }
+ }
+ }
+ ],
"id": "84a541df-559d-4a0e-ac76-71d4a40e0639",
"savedPayload": {
"position": {
@@ -616,7 +645,7 @@
"floatingObject": {
"isPinned": false,
"isFrozen": false,
- "isCollapsed": false,
+ "isCollapsed": true,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
@@ -751,8 +780,8 @@
"id": "cccfce2d-3497-419b-8c32-4cd62fb1b33f",
"savedPayload": {
"position": {
- "x": 35626.241539851304,
- "y": 10978.042351611191
+ "x": 35636.67313670836,
+ "y": 10977.129705143725
},
"targetPosition": {
"x": 35605.314597728066,
@@ -774,7 +803,7 @@
{
"type": "Plugin File",
"name": "harrellbm",
- "config": "{\"project\":\"Governance\",\"fileName\":\"harrellbm\",\"folderName\":\"User-Profiles\",\"nodeType\":\"User Profile\",\"saveWithWorkspace\":false}",
+ "config": "{\n \"project\": \"Governance\",\n \"fileName\": \"harrellbm\",\n \"folderName\": \"User-Profiles\",\n \"nodeType\": \"User Profile\",\n \"saveWithWorkspace\": false\n}",
"project": "Foundations",
"pluginFilePosition": {
"type": "Plugin File Position",
@@ -806,8 +835,8 @@
"id": "49a18a94-de50-4285-bf38-fe43c700b93f",
"savedPayload": {
"position": {
- "x": 35522.62339098297,
- "y": 10967.15164531474
+ "x": 35542.94109048274,
+ "y": 10972.217416753385
},
"targetPosition": {
"x": 35605.314597728066,
@@ -829,13 +858,13 @@
{
"type": "Plugin File",
"name": "Julian-Molina",
- "config": "{\"project\":\"Governance\",\"fileName\":\"Julian-Molina\",\"folderName\":\"User-Profiles\",\"nodeType\":\"User Profile\",\"saveWithWorkspace\":false}",
+ "config": "{\n \"project\": \"Governance\",\n \"fileName\": \"Julian-Molina\",\n \"folderName\": \"User-Profiles\",\n \"nodeType\": \"User Profile\",\n \"saveWithWorkspace\": false\n}",
"project": "Foundations",
"id": "7096909f-b221-4fb7-a5ec-5a76d147dc2f",
"savedPayload": {
"position": {
- "x": 35428.97902204032,
- "y": 10921.478234845728
+ "x": 35455.314597728066,
+ "y": 10938.580757668575
},
"targetPosition": {
"x": 35605.314597728066,
@@ -862,8 +891,8 @@
"id": "00a46dc7-6fbd-45d1-870a-fab7924ee5c0",
"savedPayload": {
"position": {
- "x": 35356.60332596155,
- "y": 10846.531007574467
+ "x": 35382.371150084844,
+ "y": 10879.512318440902
},
"targetPosition": {
"x": 35605.314597728066,
@@ -917,8 +946,8 @@
"id": "aeed0c96-3e89-426c-bf61-12b6e23c6916",
"savedPayload": {
"position": {
- "x": 35314.22587984527,
- "y": 10751.349705213144
+ "x": 35331.25096043528,
+ "y": 10800.794129455984
},
"targetPosition": {
"x": 35605.314597728066,
@@ -973,7 +1002,7 @@
"savedPayload": {
"position": {
"x": 35306.95802911758,
- "y": 10647.414597552948
+ "y": 10710.13167551354
},
"targetPosition": {
"x": 35605.314597728066,
@@ -1000,8 +1029,8 @@
"id": "21126c69-67ed-4839-8611-8feac8578cf6",
"savedPayload": {
"position": {
- "x": 35335.67638383831,
- "y": 10547.26179249652
+ "x": 35311.87031750792,
+ "y": 10616.399629287916
},
"targetPosition": {
"x": 35605.314597728066,
@@ -1028,8 +1057,36 @@
"id": "ded04ad6-6b18-4166-bb97-35a9521b9104",
"savedPayload": {
"position": {
- "x": 35396.917086590365,
- "y": 10462.971196431648
+ "x": 35345.50697659273,
+ "y": 10528.773136533244
+ },
+ "targetPosition": {
+ "x": 35605.314597728066,
+ "y": 10678.773136533244
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 2,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
+ }
+ }
+ },
+ {
+ "type": "Plugin File",
+ "name": "Dummy",
+ "config": "{\n \"project\": \"Governance\",\n \"fileName\": \"Dummy\",\n \"folderName\": \"User-Profiles\",\n \"nodeType\": \"User Profile\",\n \"saveWithWorkspace\": false\n}",
+ "project": "Foundations",
+ "id": "6e9df29f-58fc-4e30-9882-5a083c30fdbe",
+ "savedPayload": {
+ "position": {
+ "x": 35404.57541582041,
+ "y": 10455.829688890026
},
"targetPosition": {
"x": 35605.314597728066,
@@ -1062,7 +1119,7 @@
"floatingObject": {
"isPinned": false,
"isFrozen": false,
- "isCollapsed": true,
+ "isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
@@ -1433,7 +1490,7 @@
"floatingObject": {
"isPinned": false,
"isFrozen": false,
- "isCollapsed": false,
+ "isCollapsed": true,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
@@ -1617,7 +1674,7 @@
"floatingObject": {
"isPinned": true,
"isFrozen": false,
- "isCollapsed": false,
+ "isCollapsed": true,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
@@ -1628,1146 +1685,46 @@
}
},
{
- "type": "Tutorial",
- "name": "Creating Your User Profile Tutorial",
- "config": "{\n \"icon\": {\n \"name\": \"governance\",\n \"project\": \"Governance\"\n },\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Better Together\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
- "project": "Education",
- "tutorialSteps": [],
- "tutorialTopics": [
- {
- "type": "Tutorial Topic",
- "name": "Before Starting",
- "config": "{\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\"\n}",
- "project": "Education",
- "tutorialSteps": [
- {
- "type": "Tutorial Step",
- "name": "Make sure You’re Comfortable",
- "config": "{\n \"icon\": {\n \"name\": \"Pool\\\\pools\",\n \"project\": \"Governance\"\n },\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Make sure You’re Comfortable\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n },\n \"positionAtReferenceParent\": true\n}",
- "project": "Education",
- "id": "7c13abc2-27e4-4fe6-afd8-14cbc0b65c7d",
- "savedPayload": {
- "position": {
- "x": 20273,
- "y": 30933.25
- },
- "targetPosition": {
- "x": 19973,
- "y": 30933.25
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- },
- "referenceParent": {
- "type": "Charting Space",
- "name": "New Charting Space",
- "id": "21d2ec55-9e56-4652-8e96-c7e451262c36"
- },
- "referenceParentCombinedNodePath": [
- [
- "New Charting Space",
- "Charting Space",
- "Foundations",
- "21d2ec55-9e56-4652-8e96-c7e451262c36"
- ]
- ]
- }
- }
- ],
- "tutorialTopics": [],
- "id": "fb31f94d-8c05-4c1a-89b7-92d48946ad9e",
- "savedPayload": {
- "position": {
- "x": 17027,
- "y": 30922.25
- },
- "targetPosition": {
- "x": 16727,
- "y": 30922.25
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": true,
- "angleToParent": 1,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Topic",
- "name": "Governance Overview",
- "config": "{\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\"\n}",
- "project": "Education",
- "tutorialSteps": [
- {
- "type": "Tutorial Step",
- "name": "One Token to Rule Them All",
- "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\staking-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - One Token to Rule Them All\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n },\n \"positionAtReferenceParent\": true\n}",
- "project": "Education",
- "id": "33321959-1eb0-494c-8df3-94b1e47efdb3",
- "savedPayload": {
- "position": {
- "x": 20180.438536534504,
- "y": 31099.451694843894
- },
- "targetPosition": {
- "x": 19884.132034355964,
- "y": 31146.382034355964
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- },
- "referenceParent": {
- "type": "Workspace",
- "name": "Custom Charts Tutorials",
- "id": "7f5b5bd1-ed0d-4fc9-a4e9-42e69e57f351"
- }
- }
- },
- {
- "type": "Tutorial Step",
- "name": "With Tokens Comes Responsibility",
- "config": "{\n \"icon\": {\n \"name\": \"governance\",\n \"project\": \"Governance\"\n },\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - With Tokens Comes Responsibility\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
- "project": "Education",
- "id": "a13ac48c-5743-4794-85bd-bf0794d9e1a2",
- "savedPayload": {
- "position": {
- "x": 20151.433991612474,
- "y": 31282.579184277827
- },
- "targetPosition": {
- "x": 19884.132034355964,
- "y": 31146.382034355964
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Step",
- "name": "A Mighty Meritocracy",
- "config": "{\n \"icon\": {\n \"name\": \"Position\\\\positions\",\n \"project\": \"Governance\"\n },\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"toggleMapView\": {\n \"view\": \"Off\"\n },\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - A Mighty Meritocracy\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n },\n \"positionAtReferenceParent\": true\n}",
- "project": "Education",
- "id": "d9b824fd-a201-40b8-8a60-d0c516d9634b",
- "savedPayload": {
- "position": {
- "x": 20020.329184277827,
- "y": 31413.683991612474
- },
- "targetPosition": {
- "x": 19884.132034355964,
- "y": 31146.382034355964
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- },
- "referenceParent": {
- "type": "Crypto Exchange",
- "name": "Binance",
- "id": "61ef0b8d-de6e-4e76-bdd5-996836760a4b"
- },
- "referenceParentCombinedNodePath": [
- [
- "My Crypto Ecosystem",
- "Crypto Ecosystem",
- "Foundations",
- "7217b56c-e854-4c06-8b8a-d5d3c05a153d"
- ],
- [
- "Tested",
- "Crypto Exchanges",
- "Foundations",
- "e3879d63-6f8f-41a3-8ac3-0349c4361722"
- ],
- [
- "Binance",
- "Crypto Exchange",
- "Foundations",
- "61ef0b8d-de6e-4e76-bdd5-996836760a4b"
- ]
- ]
- }
- },
- {
- "type": "Tutorial Step",
- "name": "A Worthy Contribution",
- "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\referral-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - A Worthy Contribution\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n },\n \"positionAtReferenceParent\": true\n}",
- "project": "Education",
- "id": "a0d50140-b862-4b7e-9bc6-ed055b34a0bd",
- "savedPayload": {
- "position": {
- "x": 19837.201694843894,
- "y": 31442.688536534504
- },
- "targetPosition": {
- "x": 19884.132034355964,
- "y": 31146.382034355964
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- },
- "referenceParent": {
- "type": "Market",
- "name": "BTC/USDT",
- "id": "9a867bf0-a71d-445c-b99a-75b60bbdce09"
- },
- "referenceParentCombinedNodePath": [
- [
- "My Crypto Ecosystem",
- "Crypto Ecosystem",
- "Foundations",
- "7217b56c-e854-4c06-8b8a-d5d3c05a153d"
- ],
- [
- "Tested",
- "Crypto Exchanges",
- "Foundations",
- "e3879d63-6f8f-41a3-8ac3-0349c4361722"
- ],
- [
- "Binance",
- "Crypto Exchange",
- "Foundations",
- "61ef0b8d-de6e-4e76-bdd5-996836760a4b"
- ],
- [
- "New Exchange Markets",
- "Exchange Markets",
- "Foundations",
- "2fd80894-900e-44ac-a1a7-56c14124f7a1"
- ],
- [
- "BTC/USDT",
- "Market",
- "Foundations",
- "9a867bf0-a71d-445c-b99a-75b60bbdce09"
- ]
- ]
- }
- }
- ],
- "tutorialTopics": [],
- "id": "eca95394-e23c-4464-a0a2-955e45fd9ca5",
- "savedPayload": {
- "position": {
- "x": 16939.132034355964,
- "y": 31134.382034355964
- },
- "targetPosition": {
- "x": 16727,
- "y": 30922.25
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": true,
- "angleToParent": 1,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Topic",
- "name": "Profile Overview",
- "config": "{\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\"\n}",
- "project": "Education",
- "tutorialSteps": [
- {
- "type": "Tutorial Step",
- "name": "What’s in a Profile?",
- "config": "{\n \"icon\": {\n \"name\": \"User\\\\user-profile\",\n \"project\": \"Governance\"\n },\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - What’s in a Profile?\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n },\n \"positionAtReferenceParent\": true\n}",
- "project": "Education",
- "id": "df575afd-af40-4725-a9a0-d0e3bdd64572",
- "savedPayload": {
- "position": {
- "x": 19822,
- "y": 31494.057621135333
- },
- "targetPosition": {
- "x": 19672,
- "y": 31234.25
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- },
- "referenceParent": {
- "type": "Charting Space",
- "name": "New Charting Space",
- "id": "21d2ec55-9e56-4652-8e96-c7e451262c36"
- },
- "referenceParentCombinedNodePath": [
- [
- "New Charting Space",
- "Charting Space",
- "Foundations",
- "21d2ec55-9e56-4652-8e96-c7e451262c36"
- ]
- ]
- }
- },
- {
- "type": "Tutorial Step",
- "name": "Program Participation",
- "config": "{\n \"icon\": {\n \"name\": \"User\\\\user-referrer\",\n \"project\": \"Governance\"\n },\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Program Participation\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
- "project": "Education",
- "id": "1a414df9-32fa-4055-b0db-7a932e4b59e1",
- "savedPayload": {
- "position": {
- "x": 19522,
- "y": 31494.057621135333
- },
- "targetPosition": {
- "x": 19672,
- "y": 31234.25
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- }
- ],
- "tutorialTopics": [],
- "id": "47f47947-70a9-48a6-88d0-bd3dae2be578",
- "savedPayload": {
- "position": {
- "x": 16727,
- "y": 31222.25
- },
- "targetPosition": {
- "x": 16727,
- "y": 30922.25
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": true,
- "angleToParent": 1,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Topic",
- "name": "Setting Up the Constructor",
- "config": "{\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\"\n}",
- "project": "Education",
- "tutorialSteps": [
- {
- "type": "Tutorial Step",
- "name": "Where it all Begins",
- "config": "{\n \"icon\": {\n \"name\": \"governance\",\n \"project\": \"Governance\"\n },\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Where it all Begins\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n },\n \"positionAtReferenceParent\": true\n}",
- "project": "Education",
- "id": "9aec749c-46c8-45d0-99f4-f99ecd50ec44",
- "savedPayload": {
- "position": {
- "x": 19459.867965644036,
- "y": 31446.382034355964
- },
- "targetPosition": {
- "x": 19459.867965644036,
- "y": 31146.382034355964
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- },
- "referenceParent": {
- "type": "Governance Project",
- "name": "New Governance Project",
- "id": "db380c52-cf90-475b-87df-c005dd51cdf6"
- },
- "referenceParentCombinedNodePath": [
- [
- "New Governance Project",
- "Governance Project",
- "Governance",
- "db380c52-cf90-475b-87df-c005dd51cdf6"
- ]
- ]
- }
- },
- {
- "type": "Tutorial Step",
- "name": "Profile in a Heartbeat",
- "config": "{\n \"icon\": {\n \"name\": \"profile-constructor\",\n \"project\": \"Governance\"\n },\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Profile in a Heartbeat\"\n },\n \"controlDocs\": {\n \"panel\": \"Close\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
- "project": "Education",
- "id": "cdfada38-c5e0-4c0c-aaf5-4fa24b416131",
- "savedPayload": {
- "position": {
- "x": 19247.735931288073,
- "y": 31358.514068711927
- },
- "targetPosition": {
- "x": 19459.867965644036,
- "y": 31146.382034355964
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Step",
- "name": "Pump that Heartbeat!",
- "config": "{\n \"icon\": {\n \"name\": \"configuration\",\n \"project\": \"Governance\"\n },\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Pump that Heartbeat!\"\n },\n \"controlDocs\": {\n \"panel\": \"Close\",\n \"closeTutorialEditor\": true\n },\n \"positionAtReferenceParent\": true\n}",
- "project": "Education",
- "id": "651e15ce-bdda-4cca-9c2d-e16a2d900e45",
- "savedPayload": {
- "position": {
- "x": 19159.867965644036,
- "y": 31146.382034355964
- },
- "targetPosition": {
- "x": 19459.867965644036,
- "y": 31146.382034355964
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- },
- "referenceParent": {
- "type": "Time Machine",
- "name": "Lightning Strike Backtesting Session My Computer Binanceus BTC/USDT",
- "id": "72a1f250-0d0e-4354-8fdf-741866b9c16c"
- },
- "referenceParentCombinedNodePath": [
- [
- "New Charting Space",
- "Charting Space",
- "Foundations",
- "21d2ec55-9e56-4652-8e96-c7e451262c36"
- ],
- [
- "Foundations",
- "Project Dashboards",
- "Foundations",
- "2f92dce8-f804-40b6-9f4d-e605f4b4a55e"
- ],
- [
- "Testing Trading Tasks My Computer",
- "Dashboard",
- "Foundations",
- "b10709c9-2150-4055-a06e-1b9b8db2af55"
- ],
- [
- "Lightning Strike Backtesting Session My Computer Binanceus BTC/USDT",
- "Time Machine",
- "Foundations",
- "72a1f250-0d0e-4354-8fdf-741866b9c16c"
- ]
- ]
- }
- }
- ],
- "tutorialTopics": [],
- "id": "1b7b5af2-bb52-4090-965e-cd457b2e229c",
- "savedPayload": {
- "position": {
- "x": 16514.867965644036,
- "y": 31134.382034355964
- },
- "targetPosition": {
- "x": 16727,
- "y": 30922.25
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": true,
- "angleToParent": 1,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Topic",
- "name": "Profile Deep Dive",
- "config": "{\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\"\n}",
- "project": "Education",
- "tutorialSteps": [
- {
- "type": "Tutorial Step",
- "name": "Oh so Shiny",
- "config": "{\n \"icon\": {\n \"name\": \"User\\\\user-profile\",\n \"project\": \"Governance\"\n },\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Oh so Shiny\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
- "project": "Education",
- "id": "a7929f0d-8dee-488c-b517-7ac95d2cb071",
- "savedPayload": {
- "position": {
- "x": 19159.867965644036,
- "y": 31146.382034355964
- },
- "targetPosition": {
- "x": 19372,
- "y": 30934.25
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- },
- "referenceParent": {
- "type": "Tutorial",
- "name": "Creating Your User Profile Tutorial",
- "id": "57e388d1-f479-4a16-af85-aee12be285a0"
- },
- "referenceParentCombinedNodePath": [
- [
- "Creating Your User Profile Tutorial",
- "Tutorial",
- "Education",
- "57e388d1-f479-4a16-af85-aee12be285a0"
- ]
- ]
- }
- },
- {
- "type": "Tutorial Step",
- "name": "Only You",
- "config": "{\n \"icon\": {\n \"name\": \"User\\\\user-profile\",\n \"project\": \"Governance\"\n },\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Only You\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
- "project": "Education",
- "id": "5ad27b7a-b482-44ca-a06d-8db0059d1eed",
- "savedPayload": {
- "position": {
- "x": 19072,
- "y": 30934.25
- },
- "targetPosition": {
- "x": 19372,
- "y": 30934.25
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Step",
- "name": "Under the Hood",
- "config": "{\n \"icon\": {\n \"name\": \"User\\\\user-profile\",\n \"project\": \"Governance\"\n },\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Under the Hood\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
- "project": "Education",
- "id": "577c1c57-88f8-4987-a1f1-f7ef10ace032",
- "savedPayload": {
- "position": {
- "x": 19159.867965644036,
- "y": 30722.117965644036
- },
- "targetPosition": {
- "x": 19372,
- "y": 30934.25
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- }
- ],
- "tutorialTopics": [],
- "id": "9aaa02f8-73ec-4c89-b1ec-85d4114c5a93",
- "savedPayload": {
- "position": {
- "x": 16427,
- "y": 30922.25
- },
- "targetPosition": {
- "x": 16727,
- "y": 30922.25
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": true,
- "angleToParent": 1,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Topic",
- "name": "Profile Backup",
- "config": "{\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\"\n}",
- "project": "Education",
- "tutorialSteps": [
- {
- "type": "Tutorial Step",
- "name": "Save the Key!",
- "config": "{\n \"icon\": {\n \"name\": \"Key\\\\key-reference\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Save the Key!\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
- "project": "Education",
- "id": "4147bad2-0dd4-4082-bb5a-48a0bc84f595",
- "savedPayload": {
- "position": {
- "x": 19159.867965644036,
- "y": 30722.117965644036
- },
- "targetPosition": {
- "x": 19459.867965644036,
- "y": 30722.117965644036
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Step",
- "name": "Profile Backup",
- "config": "{\n \"icon\": {\n \"name\": \"Exchange\\\\exchange-account-asset\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Profile Backup\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
- "project": "Education",
- "id": "42cf8adb-7bee-4449-b8ab-ccc283e17796",
- "savedPayload": {
- "position": {
- "x": 19247.735931288073,
- "y": 30509.985931288073
- },
- "targetPosition": {
- "x": 19459.867965644036,
- "y": 30722.117965644036
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Step",
- "name": "Delete the Constructor",
- "config": "{\n \"icon\": {\n \"name\": \"Docs\\\\docs-action-delete-paragraph\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Delete the Constructor\"\n },\n \"controlDocs\": {\n \"panel\": \"Close\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
- "project": "Education",
- "id": "9633816b-95cf-4b58-a231-504dd5e8e5ad",
- "savedPayload": {
- "position": {
- "x": 19459.867965644036,
- "y": 30422.117965644036
- },
- "targetPosition": {
- "x": 19459.867965644036,
- "y": 30722.117965644036
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- }
- ],
- "tutorialTopics": [],
- "id": "ba99b336-1578-4a76-99f0-24e461922b4c",
- "savedPayload": {
- "position": {
- "x": 16514.867965644036,
- "y": 30710.117965644036
- },
- "targetPosition": {
- "x": 16727,
- "y": 30922.25
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": true,
- "angleToParent": 1,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Topic",
- "name": "Add Onboarding Programs",
- "config": "{\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\"\n}",
- "project": "Education",
- "tutorialSteps": [
- {
- "type": "Tutorial Step",
- "name": "Program Partners",
- "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\onboarding-programs\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Program Partners\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
- "project": "Education",
- "id": "18c61fe9-3cc1-4f88-9499-b873fbcb9db0",
- "savedPayload": {
- "position": {
- "x": 19459.867965644036,
- "y": 30422.117965644036
- },
- "targetPosition": {
- "x": 19672,
- "y": 30634.25
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Step",
- "name": "Drop it like it’s Hot",
- "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\airdrop-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Drop it like it’s Hot\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
- "project": "Education",
- "id": "7c1c466e-a5a4-4e67-94cb-6dc9e040f89b",
- "savedPayload": {
- "position": {
- "x": 19672,
- "y": 30334.25
- },
- "targetPosition": {
- "x": 19672,
- "y": 30634.25
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Step",
- "name": "GitHub Glory",
- "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\github-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - GitHub Glory\"\n },\n \"controlDocs\": {\n \"panel\": \"Close\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
- "project": "Education",
- "id": "e580ebc9-097b-46d6-bb6d-145621548377",
- "savedPayload": {
- "position": {
- "x": 19884.132034355964,
- "y": 30422.117965644036
- },
- "targetPosition": {
- "x": 19672,
- "y": 30634.25
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {}
- }
- }
- ],
- "tutorialTopics": [],
- "id": "578fdee3-64ad-4836-8feb-3e41746bceda",
- "savedPayload": {
- "position": {
- "x": 16727,
- "y": 30622.25
- },
- "targetPosition": {
- "x": 16727,
- "y": 30922.25
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": true,
- "angleToParent": 1,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Topic",
- "name": "Submit Profile",
- "config": "{\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\"\n}",
- "project": "Education",
- "tutorialSteps": [
- {
- "type": "Tutorial Step",
- "name": "Make it Official",
- "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\github-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Make it Official\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - GitHub.com Authentication\"\n }\n },\n \"positionAtReferenceParent\": true\n}",
- "project": "Education",
- "id": "fe74b3ae-9490-465a-a491-db4b0834dbf7",
- "savedPayload": {
- "position": {
- "x": 16939.132034355964,
- "y": 30410.117965644036
- },
- "targetPosition": {
- "x": 16939.132034355964,
- "y": 30710.117965644036
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {},
- "referenceParent": {
- "type": "Github API",
- "name": "New Github API",
- "id": "cbbb57f9-a9a0-4148-89a5-f820f40f56d3"
- },
- "referenceParentCombinedNodePath": [
- [
- "New APIs",
- "APIs"
- ],
- [
- "New Github API",
- "Github API"
- ]
- ]
- }
- },
- {
- "type": "Tutorial Step",
- "name": "Infinity and Beyond",
- "config": "{\n \"icon\": {\n \"name\": \"User\\\\user-profile\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - To Infinity and Beyond\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
- "project": "Education",
- "id": "e4c5a34f-67c4-4fdc-8c11-aef5bde92d72",
- "savedPayload": {
- "position": {
- "x": 17151.264068711927,
- "y": 30497.985931288073
- },
- "targetPosition": {
- "x": 16939.132034355964,
- "y": 30710.117965644036
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Step",
- "name": "Welcome aboard!",
- "config": "{\n \"icon\": {\n \"name\": \"Announcement\\\\announcement\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Welcome aboard!\"\n },\n \"controlDocs\": {\n \"panel\": \"Close\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n },\n \"positionAtReferenceParent\": true\n}",
- "project": "Education",
- "id": "340f9107-9b4a-424b-94f2-79d65873c572",
- "savedPayload": {
- "position": {
- "x": 17239.132034355964,
- "y": 30710.117965644036
- },
- "targetPosition": {
- "x": 16939.132034355964,
- "y": 30710.117965644036
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 2,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {},
- "referenceParent": {
- "type": "Tutorial",
- "name": "Governance Program Walk Through Tutorial",
- "id": "eb85fbbd-080f-41c6-91a8-c6b68195a74b"
- },
- "referenceParentCombinedNodePath": [
- [
- "Governance Program Walk Through Tutorial",
- "Tutorial"
- ]
- ]
- }
- }
- ],
- "tutorialTopics": [],
- "id": "75373f58-ac05-4358-ad12-e50c88f08196",
- "savedPayload": {
- "position": {
- "x": 16939.132034355964,
- "y": 30710.117965644036
- },
- "targetPosition": {
- "x": 16727,
- "y": 30922.25
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": true,
- "angleToParent": 1,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
+ "type": "APIs",
+ "name": "New APIs",
+ "project": "Foundations",
+ "githubAPI": {
+ "type": "Github API",
+ "name": "New Github API",
+ "config": "{\n \"username\": \"\",\n \"token\": \"\"\n}\n",
+ "project": "Foundations",
+ "id": "48c9ca95-3cc0-43a8-a522-27e812979800",
+ "savedPayload": {
+ "position": {
+ "x": 30519.083333333336,
+ "y": 10718.951150794494
+ },
+ "targetPosition": {
+ "x": 30219.083333333336,
+ "y": 10718.951150794494
+ },
+ "floatingObject": {
+ "isPinned": false,
+ "isFrozen": false,
+ "isCollapsed": false,
+ "angleToParent": 1,
+ "distanceToParent": 3,
+ "arrangementStyle": 0
+ },
+ "uiObject": {
+ "isRunning": false
}
}
- ],
- "id": "57e388d1-f479-4a16-af85-aee12be285a0",
+ },
+ "id": "e4e1b5e1-c1f6-45da-af08-32464d5b17f9",
"savedPayload": {
"position": {
- "x": 16727,
- "y": 30922.25
+ "x": 30219.083333333336,
+ "y": 10718.951150794494
},
"targetPosition": {
- "x": 16727,
- "y": 30922.25
+ "x": 30219.083333333336,
+ "y": 10718.951150794494
},
"floatingObject": {
"isPinned": false,
@@ -2775,267 +1732,10 @@
"isCollapsed": true,
"angleToParent": 1,
"distanceToParent": 3,
- "arrangementStyle": 1
+ "arrangementStyle": 0
},
"uiObject": {
- "isPlaying": true,
"isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- null,
- {
- "type": "Tutorial",
- "name": "Governance Program Walk Through Tutorial",
- "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\financial-programs\",\n \"project\": \"Governance\"\n },\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Into the Thick of It\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
- "project": "Education",
- "tutorialSteps": [
- {
- "type": "Tutorial Step",
- "name": "Refer a Friend",
- "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\referral-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Refer a Friend\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Referral Program Overview\"\n }\n }\n}",
- "project": "Education",
- "id": "a3df7ac4-69e0-41b9-af1c-fd0087d26161",
- "savedPayload": {
- "position": {
- "x": 21016,
- "y": 30930.750000000004
- },
- "targetPosition": {
- "x": 20716,
- "y": 30930.750000000004
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 1,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Step",
- "name": "A Thank You for Support",
- "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\support-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - A Thank You for Support\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Support Program Overview\"\n }\n }\n}",
- "project": "Education",
- "id": "dc20ebdc-6708-4fed-a75b-bade62d3ce0c",
- "savedPayload": {
- "position": {
- "x": 20903.04694055762,
- "y": 31165.299444740413
- },
- "targetPosition": {
- "x": 20716,
- "y": 30930.750000000004
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 1,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Step",
- "name": "Find a Mentor",
- "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\mentorship-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Find a Mentor\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Mentorship Program Overview\"\n }\n }\n}",
- "project": "Education",
- "id": "258b83f3-200d-41d7-8288-81eec5da0ccf",
- "savedPayload": {
- "position": {
- "x": 20649.243719813105,
- "y": 31223.22837365455
- },
- "targetPosition": {
- "x": 20716,
- "y": 30930.750000000004
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 1,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Step",
- "name": "Claim some Contributions",
- "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\claims-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Claim some Contributions\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Contribution Claims Program Overview\"\n }\n }\n}",
- "project": "Education",
- "id": "7301eace-be0a-45f8-9f8d-14afb7e9336a",
- "savedPayload": {
- "position": {
- "x": 20445.709339629273,
- "y": 31060.91512173527
- },
- "targetPosition": {
- "x": 20716,
- "y": 30930.750000000004
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 1,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Step",
- "name": "Lend a Vote",
- "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\voting-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Lend a Vote\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Voting Program Overview\"\n }\n }\n}",
- "project": "Education",
- "id": "61b34c29-85ce-4b86-8a77-21f8e8888c35",
- "savedPayload": {
- "position": {
- "x": 20445.709339629273,
- "y": 30800.584878264737
- },
- "targetPosition": {
- "x": 20716,
- "y": 30930.750000000004
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 1,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Step",
- "name": "Delegate some Power",
- "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\delegation-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Delegate some Power\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Delegation Program Overview\"\n }\n }\n}",
- "project": "Education",
- "id": "bb0b161f-af82-4b93-87a8-30ae6ace533c",
- "savedPayload": {
- "position": {
- "x": 20649.243719813105,
- "y": 30638.271626345457
- },
- "targetPosition": {
- "x": 20716,
- "y": 30930.750000000004
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 1,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- },
- {
- "type": "Tutorial Step",
- "name": "Stake some Tokens",
- "config": "{\n \"icon\": {\n \"name\": \"Programs\\\\staking-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Stake some Tokens\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Staking Program Overview\"\n }\n }\n}",
- "project": "Education",
- "id": "507fc893-7a06-4bba-ba23-fb7125aa2017",
- "savedPayload": {
- "position": {
- "x": 20903.04694055762,
- "y": 30696.200555259595
- },
- "targetPosition": {
- "x": 20716,
- "y": 30930.750000000004
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": false,
- "angleToParent": 1,
- "distanceToParent": 3,
- "arrangementStyle": 0
- },
- "uiObject": {
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
- }
- }
- }
- ],
- "tutorialTopics": [],
- "id": "eb85fbbd-080f-41c6-91a8-c6b68195a74b",
- "savedPayload": {
- "position": {
- "x": 20716,
- "y": 30930.750000000004
- },
- "targetPosition": {
- "x": 20716,
- "y": 30930.750000000004
- },
- "floatingObject": {
- "isPinned": false,
- "isFrozen": false,
- "isCollapsed": true,
- "angleToParent": 1,
- "distanceToParent": 3,
- "arrangementStyle": 1
- },
- "uiObject": {
- "isPlaying": false,
- "isRunning": false
- },
- "tutorial": {
- "status": "Done"
}
}
}
diff --git a/Projects/Governance/Schemas/Docs-Books/the-governance-project.json b/Projects/Governance/Schemas/Docs-Books/the-governance-project.json
index 5624ea317..eeb98ace4 100644
--- a/Projects/Governance/Schemas/Docs-Books/the-governance-project.json
+++ b/Projects/Governance/Schemas/Docs-Books/the-governance-project.json
@@ -22,8 +22,17 @@
},
{
"style": "Chapter",
- "text": "IV->Governance->Topic->Governance Flow->The Superalgos Governance Project implements a meritocratic system, by which the more you contribute, the more you are entitled to influence the direction of development. ",
- "updated": 1624782801597
+ "text": "IV->Governance->Topic->Governance Flow->The Superalgos Governance Project implements a meritocratic system, by which the more you contribute, the more you are entitled to influence the direction of development.",
+ "updated": 1630576718872
+ },
+ {
+ "style": "Chapter",
+ "text": "V->Governance->Topic->Governance Workspaces->The Governance Project features multiple Project Definition Hierarchies spread across multiple Plugin Workspaces — one Workspace per Project — to facilitate the granular management of definitions by independent teams of maintainers. These are the Governance Workspaces.",
+ "updated": 1630576758374
+ },
+ {
+ "style": "Chapter",
+ "text": "VI->Governance->Topic->Governance How To->A collection of tips and tricks that will make your life easier while participating in governance."
}
]
}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Concepts/D/Distribution/Distribution-Event/distribution-event.json b/Projects/Governance/Schemas/Docs-Concepts/D/Distribution/Distribution-Event/distribution-event.json
index 332e6c42e..81d2e696e 100644
--- a/Projects/Governance/Schemas/Docs-Concepts/D/Distribution/Distribution-Event/distribution-event.json
+++ b/Projects/Governance/Schemas/Docs-Concepts/D/Distribution/Distribution-Event/distribution-event.json
@@ -1,8 +1,8 @@
{
"type": "Distribution Event",
"definition": {
- "text": "The Superalgos Project distributes its native Superalgos SA Tokens after each release to compensate contributions and incentivize desirable behaviors. The Distribution Event represents the moment in time and the act of running the process that distributes tokens from the Treasury Account to the Governance Address associated with each User Profile that participates in governance.",
- "updated": 1630234849482
+ "text": "The Superalgos Project distributes its native Superalgos SA Tokens after each release to reward contributions and incentivize desirable behaviors. The Distribution Event represents the moment in time and the act of running the process that distributes tokens from the Treasury Account to the Governance Address associated with each User Profile that participates in governance.",
+ "updated": 1630570602251
},
"paragraphs": [
{
diff --git a/Projects/Governance/Schemas/Docs-Concepts/R/Reusable/Reusable-Governance-Snippets/reusable-governance-snippets.json b/Projects/Governance/Schemas/Docs-Concepts/R/Reusable/Reusable-Governance-Snippets/reusable-governance-snippets.json
index 3ead2e35b..a9c44279d 100644
--- a/Projects/Governance/Schemas/Docs-Concepts/R/Reusable/Reusable-Governance-Snippets/reusable-governance-snippets.json
+++ b/Projects/Governance/Schemas/Docs-Concepts/R/Reusable/Reusable-Governance-Snippets/reusable-governance-snippets.json
@@ -9,27 +9,71 @@
"style": "Title",
"text": "Computational Limitations"
},
- {
- "style": "Block",
- "text": "Computational Limitations"
- },
{
"style": "Title",
"text": ""
},
{
- "style": "Note",
+ "style": "Block",
+ "text": "Computational Limitations",
+ "updated": 1630569942063
+ },
+ {
+ "style": "Text",
"text": "The governance system does all calculations dynamically, in real-time, with every change in the definitions, and computes all the hierarchies loaded in the Current Workspace."
},
{
"style": "Important",
"text": "The above means that the calculations that you see from within any given Workspace is a partial calculation within the scope of the Current Workspace only. Definitions, claims, votes, and so on, existing on other workspaces or plugins are not computed."
},
+ {
+ "style": "Block",
+ "text": "Computational Limitations 2",
+ "updated": 1630569818098
+ },
+ {
+ "style": "Text",
+ "text": "If you cast votes or place claims in more than one Governance Workspace, you will not be able to see what some of your claims and votes are about — in particular, those that live on a workspace that is not the Current Workspace.",
+ "updated": 1630569998640
+ },
+ {
+ "style": "Text",
+ "text": "If you wish to have a clearer picture of all your votes and claims, you may want to set up a new workspace that includes all the hierarchies that you need to interact with. That way, you will be able to see all of your votes and claims at the same time. To do this, save a new workspace deriving from one of the Governance Workspaces and load the plugins you need.",
+ "updated": 1630570350637
+ },
+ {
+ "style": "Note",
+ "text": "Even if you do as suggested above, the calculations you see in terms of Token Rewards, Tokens Awarded, Tokens Bonus, and so on, are still partial. The actual Distribution Event calculation involves computing all of the Project Definition Hierarchies, including all User Profile hierarchies participating in governance.",
+ "updated": 1630570663757
+ },
+ {
+ "style": "Text",
+ "text": ""
+ },
{
"style": "Block",
"text": "Dummy",
"updated": 1630230740442
},
+ {
+ "style": "Title",
+ "text": "Deep in Governance",
+ "updated": 1630574167914
+ },
+ {
+ "style": "Block",
+ "text": "Deep in Governance"
+ },
+ {
+ "style": "Success",
+ "text": "If you have contributed work or wish to go deep with your participation in governance, you will most likely need to interact with one or more of the project-specific Governance Workspaces. To do that, load your User Profile into the corresponding workspaces so that you may establish references to place Contribution Claims and cast Weight Votes.",
+ "updated": 1630574190576
+ },
+ {
+ "style": "Block",
+ "text": "Dummy",
+ "updated": 1630574197424
+ },
{
"style": "Title",
"text": "Featuring Tokens Bonus"
diff --git a/Projects/Governance/Schemas/Docs-Concepts/S/Superalgos/Superalgos-Pools/superalgos-pools.json b/Projects/Governance/Schemas/Docs-Concepts/S/Superalgos/Superalgos-Pools/superalgos-pools.json
index 2326507fd..76b685f3a 100644
--- a/Projects/Governance/Schemas/Docs-Concepts/S/Superalgos/Superalgos-Pools/superalgos-pools.json
+++ b/Projects/Governance/Schemas/Docs-Concepts/S/Superalgos/Superalgos-Pools/superalgos-pools.json
@@ -12,7 +12,7 @@
},
{
"style": "Text",
- "text": "Because this is the highest level definition of how tokens will be distributed, the Superalgos Pools hierarchy is present in all Governance Plugin Workspaces.",
+ "text": "Because this is the highest level definition of how tokens will be distributed, the Superalgos Pools hierarchy is present in all Governance Workspaces.",
"updated": 1630426648511
},
{
diff --git a/Projects/Governance/Schemas/Docs-Nodes/A/Asset/Asset-Claim-Vote/asset-claim-vote.json b/Projects/Governance/Schemas/Docs-Nodes/A/Asset/Asset-Claim-Vote/asset-claim-vote.json
index 11f93f55d..3928a2251 100644
--- a/Projects/Governance/Schemas/Docs-Nodes/A/Asset/Asset-Claim-Vote/asset-claim-vote.json
+++ b/Projects/Governance/Schemas/Docs-Nodes/A/Asset/Asset-Claim-Vote/asset-claim-vote.json
@@ -14,6 +14,18 @@
"style": "Include",
"text": "Governance->Concept->Reusable Governance Snippets->Claim Votes Content"
},
+ {
+ "style": "Subtitle",
+ "text": "Working on Multiple Workspaces"
+ },
+ {
+ "style": "Include",
+ "text": "Governance->Concept->Reusable Governance Snippets->Deep in Governance"
+ },
+ {
+ "style": "Include",
+ "text": "Governance->Concept->Reusable Governance Snippets->Computational Limitations 2"
+ },
{
"style": "Block",
"text": "Configuration"
diff --git a/Projects/Governance/Schemas/Docs-Nodes/A/Asset/Asset-Weight-Vote/asset-weight-vote.json b/Projects/Governance/Schemas/Docs-Nodes/A/Asset/Asset-Weight-Vote/asset-weight-vote.json
index 6c84c5b08..1953425ae 100644
--- a/Projects/Governance/Schemas/Docs-Nodes/A/Asset/Asset-Weight-Vote/asset-weight-vote.json
+++ b/Projects/Governance/Schemas/Docs-Nodes/A/Asset/Asset-Weight-Vote/asset-weight-vote.json
@@ -14,6 +14,18 @@
"style": "Include",
"text": "Governance->Concept->Weight Votes->Content"
},
+ {
+ "style": "Subtitle",
+ "text": "Working on Multiple Workspaces"
+ },
+ {
+ "style": "Include",
+ "text": "Governance->Concept->Reusable Governance Snippets->Deep in Governance"
+ },
+ {
+ "style": "Include",
+ "text": "Governance->Concept->Reusable Governance Snippets->Computational Limitations 2"
+ },
{
"style": "Block",
"text": "Configuration"
diff --git a/Projects/Governance/Schemas/Docs-Nodes/C/Community/Community-Building-Programs/community-building-programs.json b/Projects/Governance/Schemas/Docs-Nodes/C/Community/Community-Building-Programs/community-building-programs.json
index 286cc2fe5..88018a613 100644
--- a/Projects/Governance/Schemas/Docs-Nodes/C/Community/Community-Building-Programs/community-building-programs.json
+++ b/Projects/Governance/Schemas/Docs-Nodes/C/Community/Community-Building-Programs/community-building-programs.json
@@ -39,10 +39,20 @@
"text": "Your Incoming Power is added to your Own Power in the corresponding program, so that you may pass on more power to other User Profiles. Like in the reverse case, when you reference other User Profiles, you pass on 10% of the power that reaches the node establishing the reference.",
"updated": 1630166856996
},
+ {
+ "style": "Important",
+ "text": "This passing of 10% of the power from one user to the next has the effect of rewarding collaboration chains. ",
+ "updated": 1630683048349
+ },
{
"style": "Callout",
- "text": "This passing of 10% of the power from one user to the next has the effect of rewarding collaboration chains. For instance, Alice tells her friend Bob about Superalgos. When Bob eventually sets up his User Profile, he declares Alice as his referrer. This means that Alice gets 10% of the Referral Power that Bob drives to his User Referrer node. Then, Bob brings his friend Charly to Superalgos. Charly sets up his profile and declares Bob as his referrer. So now Bob gets 10% of the Referral Power that Charly drives to his User Referrer node. Can you see what happens with Alice's Incoming Referral Power? That's it! She gets 10% of Bob's power, which includes 10% of Charly's power!",
- "updated": 1630167091644
+ "text": "For instance, Alice tells her friend Bob about Superalgos. When Bob eventually sets up his User Profile, he declares Alice as his referrer. This means that Alice gets 10% of the Referral Power that Bob drives to his User Referrer node. Then, Bob brings his friend Charly to Superalgos. Charly sets up his profile and declares Bob as his referrer. So now Bob gets 10% of the Referral Power that Charly drives to his User Referrer node. ",
+ "updated": 1630683087674
+ },
+ {
+ "style": "Success",
+ "text": "Can you see what happens with Alice's Incoming Referral Power? That's it! She gets 10% of Bob's power, which includes 10% of Charly's power and son on!",
+ "updated": 1630683111245
},
{
"style": "Note",
@@ -50,13 +60,13 @@
},
{
"style": "Text",
- "text": "The Incoming Power you get from other users is in a Direct Proportion to the number of tokens you get from the corresponding program Rewards Pool. The calculation is based on a Rule of Three, and the result is displayed under the Tokens Bonus node of the corresponding program.",
- "updated": 1630170674503
+ "text": "The Incoming Power you get from other users is in a Direct Proportion to the number of tokens you get from the corresponding program Rewards Pool. The calculation is based on a Rule of Three, and the result is displayed under the Tokens Awarded node of the corresponding program.",
+ "updated": 1630682945130
},
{
"style": "Json",
- "text": "Total Incoming Power [*] -> 100% of the pool\n Your Incoming Power [**] -> X% of the pool -> Tokens Rewards\n\nTokens Rewards = Your Incoming Power * 100% / Total Incoming Power\n\n[*] The sum of all Incoming Power (in the given program) in all User Profiles combined.\n[**] Your Incoming Power (in the given program).",
- "updated": 1630215178623
+ "text": "Total Incoming Power [*] -> 100% of the pool\n Your Incoming Power [**] -> X% of the pool -> Tokens Awarded\n\nTokens Awarded = Your Incoming Power * 100% / Total Incoming Power\n\n[*] The sum of all Incoming Power (in the given program) in all User Profiles combined.\n[**] Your Incoming Power (in the given program).",
+ "updated": 1630683009510
},
{
"style": "Block",
diff --git a/Projects/Governance/Schemas/Docs-Nodes/C/community-buidling-programs/community-buidling-programs/community-buidling-programs.json b/Projects/Governance/Schemas/Docs-Nodes/C/community-buidling-programs/community-buidling-programs/community-buidling-programs.json
new file mode 100644
index 000000000..62ccbfbd4
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Nodes/C/community-buidling-programs/community-buidling-programs/community-buidling-programs.json
@@ -0,0 +1,12 @@
+{
+ "type": "community-buidling-programs",
+ "definition": {
+ "text": "Write the definition for this Node."
+ },
+ "paragraphs": [
+ {
+ "style": "Text",
+ "text": "Right click and select the pencil button to enter edit mode."
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Nodes/C/community-building-programs/community-building-programs/community-building-programs.json b/Projects/Governance/Schemas/Docs-Nodes/C/community-building-programs/community-building-programs/community-building-programs.json
new file mode 100644
index 000000000..ea610a1f1
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Nodes/C/community-building-programs/community-building-programs/community-building-programs.json
@@ -0,0 +1,12 @@
+{
+ "type": "community-building-programs",
+ "definition": {
+ "text": "Write the definition for this Node."
+ },
+ "paragraphs": [
+ {
+ "style": "Text",
+ "text": "Right click and select the pencil button to enter edit mode."
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Nodes/F/Feature/Feature-Claim-Vote/feature-claim-vote.json b/Projects/Governance/Schemas/Docs-Nodes/F/Feature/Feature-Claim-Vote/feature-claim-vote.json
index cdedd0085..2c44ad3d1 100644
--- a/Projects/Governance/Schemas/Docs-Nodes/F/Feature/Feature-Claim-Vote/feature-claim-vote.json
+++ b/Projects/Governance/Schemas/Docs-Nodes/F/Feature/Feature-Claim-Vote/feature-claim-vote.json
@@ -14,6 +14,26 @@
"style": "Include",
"text": "Governance->Concept->Reusable Governance Snippets->Claim Votes Content"
},
+ {
+ "style": "Subtitle",
+ "text": "Working on Multiple Workspaces"
+ },
+ {
+ "style": "Include",
+ "text": "Governance->Concept->Reusable Governance Snippets->Deep in Governance"
+ },
+ {
+ "style": "Include",
+ "text": "Governance->Concept->Reusable Governance Snippets->Computational Limitations 2"
+ },
+ {
+ "style": "Subtitle",
+ "text": ""
+ },
+ {
+ "style": "Text",
+ "text": ""
+ },
{
"style": "Block",
"text": "Configuration"
diff --git a/Projects/Governance/Schemas/Docs-Nodes/F/Feature/Feature-Weight-Vote/feature-weight-vote.json b/Projects/Governance/Schemas/Docs-Nodes/F/Feature/Feature-Weight-Vote/feature-weight-vote.json
index 7fed44919..89c0efb22 100644
--- a/Projects/Governance/Schemas/Docs-Nodes/F/Feature/Feature-Weight-Vote/feature-weight-vote.json
+++ b/Projects/Governance/Schemas/Docs-Nodes/F/Feature/Feature-Weight-Vote/feature-weight-vote.json
@@ -14,6 +14,18 @@
"style": "Include",
"text": "Governance->Concept->Weight Votes->Content"
},
+ {
+ "style": "Subtitle",
+ "text": "Working on Multiple Workspaces"
+ },
+ {
+ "style": "Include",
+ "text": "Governance->Concept->Reusable Governance Snippets->Deep in Governance"
+ },
+ {
+ "style": "Include",
+ "text": "Governance->Concept->Reusable Governance Snippets->Computational Limitations 2"
+ },
{
"style": "Block",
"text": "Configuration"
diff --git a/Projects/Governance/Schemas/Docs-Nodes/P/Pools/Pools/pools.json b/Projects/Governance/Schemas/Docs-Nodes/P/Pools/Pools/pools.json
index 25a1a5b95..f89fd7364 100644
--- a/Projects/Governance/Schemas/Docs-Nodes/P/Pools/Pools/pools.json
+++ b/Projects/Governance/Schemas/Docs-Nodes/P/Pools/Pools/pools.json
@@ -29,7 +29,7 @@
},
{
"style": "Text",
- "text": "In addition, there is a third resource characteristic to the Pool Hierarchy. Each Pool may reference a separate Pools hierarchy so that the definitions may continue on a separate hierarchy, which may be included as a plugin in the same or in separate Governance Plugin Workspaces.",
+ "text": "In addition, there is a third resource characteristic to the Pool Hierarchy. Each Pool may reference a separate Pools hierarchy so that the definitions may continue on a separate hierarchy, which may be included as a plugin in the same or in separate Governance Workspaces.",
"updated": 1630426515819
},
{
diff --git a/Projects/Governance/Schemas/Docs-Nodes/P/Position/Position-Claim-Vote/position-claim-vote.json b/Projects/Governance/Schemas/Docs-Nodes/P/Position/Position-Claim-Vote/position-claim-vote.json
index f7734dcb5..398ea6f86 100644
--- a/Projects/Governance/Schemas/Docs-Nodes/P/Position/Position-Claim-Vote/position-claim-vote.json
+++ b/Projects/Governance/Schemas/Docs-Nodes/P/Position/Position-Claim-Vote/position-claim-vote.json
@@ -15,6 +15,18 @@
"text": "Governance->Concept->Reusable Governance Snippets->Claim Votes Content",
"updated": 1630350813522
},
+ {
+ "style": "Subtitle",
+ "text": "Working on Multiple Workspaces"
+ },
+ {
+ "style": "Include",
+ "text": "Governance->Concept->Reusable Governance Snippets->Deep in Governance"
+ },
+ {
+ "style": "Include",
+ "text": "Governance->Concept->Reusable Governance Snippets->Computational Limitations 2"
+ },
{
"style": "Block",
"text": "Configuration"
diff --git a/Projects/Governance/Schemas/Docs-Nodes/P/Position/Position-Weight-Vote/position-weight-vote.json b/Projects/Governance/Schemas/Docs-Nodes/P/Position/Position-Weight-Vote/position-weight-vote.json
index c33fd295a..0dd985ede 100644
--- a/Projects/Governance/Schemas/Docs-Nodes/P/Position/Position-Weight-Vote/position-weight-vote.json
+++ b/Projects/Governance/Schemas/Docs-Nodes/P/Position/Position-Weight-Vote/position-weight-vote.json
@@ -14,6 +14,18 @@
"style": "Include",
"text": "Governance->Concept->Weight Votes->Content"
},
+ {
+ "style": "Subtitle",
+ "text": "Working on Multiple Workspaces"
+ },
+ {
+ "style": "Include",
+ "text": "Governance->Concept->Reusable Governance Snippets->Deep in Governance"
+ },
+ {
+ "style": "Include",
+ "text": "Governance->Concept->Reusable Governance Snippets->Computational Limitations 2"
+ },
{
"style": "Block",
"text": "Configuration"
diff --git a/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-How-To/governance-how-to-001-load-a-user-profile.json b/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-How-To/governance-how-to-001-load-a-user-profile.json
new file mode 100644
index 000000000..5c11208d8
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-How-To/governance-how-to-001-load-a-user-profile.json
@@ -0,0 +1,66 @@
+{
+ "topic": "Governance How To",
+ "pageNumber": "1",
+ "type": "Load a User Profile",
+ "definition": {
+ "text": "Use this guide if you ever wish to load a User Profile into any of the Governance Workspaces.",
+ "updated": 1630681599427
+ },
+ "paragraphs": [
+ {
+ "style": "Text",
+ "text": "Let's say you wish to declare your referrer in the Referral Program, or maybe you wish to support the Contribution Claims of a fellow developer. ",
+ "updated": 1630681643918
+ },
+ {
+ "style": "Callout",
+ "text": "In either case, you will need to load the User Profile of the person in question so that you may establish the appropriate references."
+ },
+ {
+ "style": "Note",
+ "text": "Or maybe you wish to load your own User Profile in one of the Other Governance Workspaces. It's the same process after all!",
+ "updated": 1630677919945
+ },
+ {
+ "style": "Title",
+ "text": "Start Here!",
+ "updated": 1630597272606
+ },
+ {
+ "style": "List",
+ "text": "Find out the person's User Profile name. If you know the person's identity on Github.com, then that's all you need to know. If you don't, then you may need to contact the person and ask! If it's your profile, then no need to do much in this regard!",
+ "updated": 1630681681124
+ },
+ {
+ "style": "List",
+ "text": "Verify that a file with the same name exists in the following path within the Superalgos folder in your hard drive...",
+ "updated": 1630597624699
+ },
+ {
+ "style": "Json",
+ "text": "/Projects/Governance/Plugins/User-Profiles/"
+ },
+ {
+ "style": "List",
+ "text": "If the file doesn't exist, make sure you have the latest version of the app. If it's still missing after updating, let the person know and wait for the profile to be submitted.",
+ "updated": 1630597643975
+ },
+ {
+ "style": "List",
+ "text": "If the file is there and assuming you already are in the workspace you wish to work with, go to the Plugins hierarchy and find the Dummy Plugin File under Plugin User Profiles > Governance Plugin Project.",
+ "updated": 1630597669225
+ },
+ {
+ "style": "List",
+ "text": "Access the configuration of the Dummy profile and change the fileName property using the appropriate name (Github.com username). Replace the name of the node too, to avoid confusion later on."
+ },
+ {
+ "style": "List",
+ "text": "Save the Current Workspace with Ctrl + Alt + Shift + Key-S and refresh the page."
+ },
+ {
+ "style": "List",
+ "text": "Once the page reloads, you should see the new profile along with the rest! That's it!"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-Workspaces/governance-workspaces-001-governance-workspaces.json b/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-Workspaces/governance-workspaces-001-governance-workspaces.json
new file mode 100644
index 000000000..054e2c670
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-Workspaces/governance-workspaces-001-governance-workspaces.json
@@ -0,0 +1,85 @@
+{
+ "topic": "Governance Workspaces",
+ "pageNumber": "1",
+ "type": "Governance Workspaces",
+ "definition": {
+ "text": "The Governance Project features multiple Project Definition Hierarchies spread across multiple Plugin Workspaces — one Workspace per Project — to facilitate the granular management of definitions by independent teams of maintainers. These are the Governance Workspaces.",
+ "updated": 1630567756861
+ },
+ "paragraphs": [
+ {
+ "style": "Title",
+ "text": "Main Governance Workspace",
+ "updated": 1630568120363
+ },
+ {
+ "style": "Text",
+ "text": "The Token Distribution Superalgos Governance Workspace is the main workspace. Load this workspace to start your interaction with governance. This is where you would usually build and set up your User Profile.",
+ "updated": 1630568963531
+ },
+ {
+ "style": "Title",
+ "text": "Naming Convention"
+ },
+ {
+ "style": "Text",
+ "text": "All Governance Workspaces follow a similar naming structure, to make them easy to spot in the Workspaces Tab:"
+ },
+ {
+ "style": "Json",
+ "text": "Token Distribution XXX Project",
+ "updated": 1630568716919
+ },
+ {
+ "style": "Note",
+ "text": "XXX is replaced with the actual name of the Project.",
+ "updated": 1630568059149
+ },
+ {
+ "style": "Title",
+ "text": "Finding Your Way Arround Governance Workspaces",
+ "updated": 1630568467050
+ },
+ {
+ "style": "Text",
+ "text": "Each of the Governance Workspaces features several Project Definition Hierarchies describing the Pools, Assets, Features, and Positions of the corresponding Project.",
+ "updated": 1630568821141
+ },
+ {
+ "style": "Include",
+ "text": "Governance->Concept->Reusable Governance Snippets->Deep in Governance"
+ },
+ {
+ "style": "Text",
+ "text": ""
+ },
+ {
+ "style": "Title",
+ "text": "Superalgos Pools Hierarchy",
+ "updated": 1630568627153
+ },
+ {
+ "style": "Include",
+ "text": "Governance->Concept->Superalgos Pools->Definition",
+ "updated": 1630568552530
+ },
+ {
+ "style": "Include",
+ "text": "Governance->Concept->Superalgos Pools->Content"
+ },
+ {
+ "style": "Title",
+ "text": "Scope of Calculations",
+ "updated": 1630569279039
+ },
+ {
+ "style": "Include",
+ "text": "Governance->Concept->Reusable Governance Snippets->Computational Limitations",
+ "updated": 1630569313627
+ },
+ {
+ "style": "Include",
+ "text": "Governance->Concept->Reusable Governance Snippets->Computational Limitations 2"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-Workspaces/governance-workspaces-002-token-distribution-superalgos-governance-workspace.json b/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-Workspaces/governance-workspaces-002-token-distribution-superalgos-governance-workspace.json
new file mode 100644
index 000000000..fb12f3956
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-Workspaces/governance-workspaces-002-token-distribution-superalgos-governance-workspace.json
@@ -0,0 +1,116 @@
+{
+ "topic": "Governance Workspaces",
+ "pageNumber": "2",
+ "type": "Token Distribution Superalgos Governance Workspace",
+ "definition": {
+ "text": "This is the main governance workspace where broad Superalgos Project definitions live.",
+ "updated": 1630575735214
+ },
+ "paragraphs": [
+ {
+ "style": "Title",
+ "text": "Tutorials",
+ "updated": 1630576501552
+ },
+ {
+ "style": "List",
+ "text": "Creating Your User Profile Tutorial",
+ "updated": 1630576522747
+ },
+ {
+ "style": "Title",
+ "text": "User Profiles"
+ },
+ {
+ "style": "List",
+ "text": "Profiles of Core Team members and Community Mods."
+ },
+ {
+ "style": "Title",
+ "text": "Scope of Definitions"
+ },
+ {
+ "style": "Text",
+ "text": "The workspace features definitions that span the whole Superalgos Project.",
+ "updated": 1630576025223
+ },
+ {
+ "style": "Subtitle",
+ "text": "Pools"
+ },
+ {
+ "style": "List",
+ "text": "Superalgos Pools hierarchy.",
+ "updated": 1630576375102
+ },
+ {
+ "style": "Subtitle",
+ "text": "Positions"
+ },
+ {
+ "style": "List",
+ "text": "Superalgos Marketing (project-wide marketing-related positions),",
+ "updated": 1630576292069
+ },
+ {
+ "style": "List",
+ "text": "Superalgos (project-wide positions such as Community Mods, Core Team, or Business Lead).",
+ "updated": 1630576271333
+ },
+ {
+ "style": "Subtitle",
+ "text": "Features"
+ },
+ {
+ "style": "List",
+ "text": "Superalgos (project-wide features such as the Charting Space, the Visual Designer, the Tensor Flow integration, and so on).",
+ "updated": 1630576362020
+ },
+ {
+ "style": "Subtitle",
+ "text": "Assets"
+ },
+ {
+ "style": "List",
+ "text": "Superalgos Exchanges (assets related to exchange listings),",
+ "updated": 1630576480397
+ },
+ {
+ "style": "List",
+ "text": "Superalgos Marketing (project-wide, marketing-related assets),",
+ "updated": 1630576486012
+ },
+ {
+ "style": "List",
+ "text": "Client,",
+ "updated": 1630576385365
+ },
+ {
+ "style": "List",
+ "text": "UI,",
+ "updated": 1630576390127
+ },
+ {
+ "style": "List",
+ "text": "TS,",
+ "updated": 1630576395166
+ },
+ {
+ "style": "List",
+ "text": "Docker,"
+ },
+ {
+ "style": "List",
+ "text": "Launch Scripts,"
+ },
+ {
+ "style": "List",
+ "text": "Root Directory.",
+ "updated": 1630576402835
+ },
+ {
+ "style": "Text",
+ "text": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-Workspaces/governance-workspaces-003-other-governance-workspaces.json b/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-Workspaces/governance-workspaces-003-other-governance-workspaces.json
new file mode 100644
index 000000000..3a1f300cb
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-Workspaces/governance-workspaces-003-other-governance-workspaces.json
@@ -0,0 +1,102 @@
+{
+ "topic": "Governance Workspaces",
+ "pageNumber": "3",
+ "type": "Other Governance Workspaces",
+ "definition": {
+ "text": "The term refers to project-specific Governance Workspaces, as opposed to the main Token Distribution Superalgos Governance Workspace. Project-specific workspaces have a similar layout, as different projects usually have the same kinds of Assets, Features, Positions, and Pools categories.",
+ "updated": 1630597429410
+ },
+ "paragraphs": [
+ {
+ "style": "Title",
+ "text": "User Profiles",
+ "updated": 1630580093825
+ },
+ {
+ "style": "List",
+ "text": "Core Team members only, to keep the workspaces light."
+ },
+ {
+ "style": "Title",
+ "text": "Scope of Definitions"
+ },
+ {
+ "style": "Subtitle",
+ "text": "Pools"
+ },
+ {
+ "style": "List",
+ "text": "Superalgos Pools hierarchy (present in all Governance Workspaces for usability reasons)."
+ },
+ {
+ "style": "List",
+ "text": "A project-specific Pools hierarchy (for instance, Foundation-Project or Education-Project) defining pools for the main areas of the software, including pools for assets, features, positions, bug fixes, and improvements.",
+ "updated": 1630580570265
+ },
+ {
+ "style": "List",
+ "text": "A project-specific Pools hierarchy for assets (for instance, Foundations-Project-Assets or Education-Project-Assets), providing a more granular definition of various pools for several categories of assets, such as user interface, task server, app schemas, custom code, education, multi media,, and plugins.",
+ "updated": 1630581068210
+ },
+ {
+ "style": "Subtitle",
+ "text": "Positions"
+ },
+ {
+ "style": "List",
+ "text": "A project-specific Positions hierarchy (for instance Foundation-Project or Education-Project) defining positions such as the project's lead developer or bug hunters."
+ },
+ {
+ "style": "Subtitle",
+ "text": "Features"
+ },
+ {
+ "style": "List",
+ "text": "A project-specific Features hierarchy (for instance, Foundation-Project or Education-Project) usually defining project-specific features."
+ },
+ {
+ "style": "Subtitle",
+ "text": "Assets"
+ },
+ {
+ "style": "Text",
+ "text": "Several project-specific Assets hierarchies defining multiple catetories of assets, such as:"
+ },
+ {
+ "style": "List",
+ "text": "Client,"
+ },
+ {
+ "style": "List",
+ "text": "UI,"
+ },
+ {
+ "style": "List",
+ "text": "TS,"
+ },
+ {
+ "style": "List",
+ "text": "Plugins,",
+ "updated": 1630581417046
+ },
+ {
+ "style": "List",
+ "text": "Images,",
+ "updated": 1630581424128
+ },
+ {
+ "style": "List",
+ "text": "Docs,",
+ "updated": 1630581447409
+ },
+ {
+ "style": "List",
+ "text": "App Schemas,"
+ },
+ {
+ "style": "List",
+ "text": "Custom Code",
+ "updated": 1630581460500
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-001-governance-overview.json b/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-001-governance-overview.json
index bfb92a303..dd916b1ad 100644
--- a/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-001-governance-overview.json
+++ b/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-001-governance-overview.json
@@ -55,7 +55,7 @@
},
{
"style": "Text",
- "text": "Governance is defined across multiple Governance Plugin Workspaces that users may load and contribute to. These workspaces feature the definitions of several hierarchies that determine the relationship of all the concepts affecting governance.",
+ "text": "Governance is defined across multiple Governance Workspaces that users may load and contribute to. These workspaces feature the definitions of several hierarchies that determine the relationship of all the concepts affecting governance.",
"updated": 1630424913354
},
{
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-002-tutorial-step-better-together.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-002-tutorial-step-better-together.json
index 3d4f8d763..87ac326eb 100644
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-002-tutorial-step-better-together.json
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-002-tutorial-step-better-together.json
@@ -3,28 +3,23 @@
"pageNumber": 2,
"type": "Tutorial Step - Better Together",
"definition": {
- "text": "Welcome to Superalgos Governance! Today I will walk you through everything you need to know about creating a Superalgos User Profile and joining the Governance network!",
- "updated": 1629164302622,
+ "text": "This is the Governance Project! Today I will help you create a User Profile and join the first few Governance Programs!",
+ "updated": 1630604953792,
"icon": {
"name": "governance",
"project": "Governance"
}
},
"paragraphs": [
- {
- "style": "Text",
- "text": "As a completely open source and collaborative project, Superalgos is not run by any singular set of people. ",
- "updated": 1629164311647
- },
{
"style": "Note",
- "text": "Even the core team, who are dedicated to improving and maintaining Superalgos, do not directly control the path development will take. ",
- "updated": 1629164322397
+ "text": "But before you start, you should know that you may only submit your profile to the Develop branch, so it's time to switch!",
+ "updated": 1630605011924
},
{
- "style": "Text",
- "text": "Instead, the governance system distributes decision making power across all User Profiles by leveraging the SA token.",
- "updated": 1629701444641
+ "style": "Callout",
+ "text": "Go to the footer and switch both the Contributions Branch and the Current Branch to Develop. Then close and restart the app after the switch!
Once you're back, run the app.update command to get up to date with Develop, restart, and only then may you proceed with this tutorial!",
+ "updated": 1630605450785
},
{
"style": "Text",
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-003-tutorial-step-make-sure-you’re-comfortable.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-003-tutorial-step-are-you-ready.json
similarity index 63%
rename from Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-003-tutorial-step-make-sure-you’re-comfortable.json
rename to Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-003-tutorial-step-are-you-ready.json
index a35e99192..b301bb511 100644
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-003-tutorial-step-make-sure-you’re-comfortable.json
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-003-tutorial-step-are-you-ready.json
@@ -1,7 +1,7 @@
{
"tutorial": "Creating Your User Profile Tutorial",
"pageNumber": 3,
- "type": "Tutorial Step - Make sure You’re Comfortable",
+ "type": "Tutorial Step - Are You Ready?",
"definition": {
"text": "Before you jump into governance, it’s important you know how Superalgos works!",
"updated": 1629720525960,
@@ -13,13 +13,13 @@
"paragraphs": [
{
"style": "Text",
- "text": "We have got a lot of exciting things to talk about, but I want to make sure you can follow along easily. ",
- "updated": 1629164474591
+ "text": "We've got a lot of exciting things to talk about, but I want to make sure you can follow along easily.",
+ "updated": 1630657385662
},
{
"style": "Callout",
- "text": "If you haven't already, make sure you go through the Getting Started Tutorials before continuing!",
- "updated": 1629720338031
+ "text": "Make sure you go through the tutorials in the Getting Started Tutorials Plugin Workspace before continuing if you haven't yet!",
+ "updated": 1630598529991
},
{
"style": "Success",
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-004-tutorial-step-one-token-to-rule-them-all.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-004-tutorial-step-one-token-to-rule-them-all.json
index ca7ba7d54..91b07fe3b 100644
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-004-tutorial-step-one-token-to-rule-them-all.json
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-004-tutorial-step-one-token-to-rule-them-all.json
@@ -3,8 +3,8 @@
"pageNumber": 4,
"type": "Tutorial Step - One Token to Rule Them All",
"definition": {
- "text": "Unlike some crypto currencies the SA token actually means something!",
- "updated": 1629162158011,
+ "text": "Unlike some crypto tokens the Superalgos SA Token actually means something!",
+ "updated": 1630599078911,
"icon": {
"name": "Programs\\staking-program",
"project": "Governance"
@@ -13,8 +13,8 @@
"paragraphs": [
{
"style": "Text",
- "text": "The SA token is a BEP20 token hosted on the Binance Smart Chain (BSC). It represents your amount of investment in the Superalgos project and community. It is a way to reward and grow the Superalgos user base and development pool.",
- "updated": 1629164803435
+ "text": "The SA Token is a BEP20 token on the Binance Smart Chain (BSC). Your token holdings embody your contributions to the Superalgos Project and Community, as the token is used to reward the user base and grow the development pool.",
+ "updated": 1630657545503
},
{
"style": "Note",
@@ -22,8 +22,8 @@
},
{
"style": "Success",
- "text": "This means that the more you contribute to the project and help others, the more tokens you will earn!",
- "updated": 1629164817915
+ "text": "The more you contribute to the project and help others, the more tokens you will earn!",
+ "updated": 1630657555715
},
{
"style": "Text",
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-005-tutorial-step-with-tokens-comes-responsibility.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-005-tutorial-step-with-tokens-comes-responsibility.json
index b39d93694..4de5e9ed6 100644
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-005-tutorial-step-with-tokens-comes-responsibility.json
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-005-tutorial-step-with-tokens-comes-responsibility.json
@@ -3,8 +3,8 @@
"pageNumber": 5,
"type": "Tutorial Step - With Tokens Comes Responsibility",
"definition": {
- "text": "Holding tokens does more than just show commitment. SA tokens also confer governance power!",
- "updated": 1629162449407,
+ "text": "Holding tokens does more than just show commitment. SA Tokens also confer Token Power!",
+ "updated": 1630605735788,
"icon": {
"name": "governance",
"project": "Governance"
@@ -13,7 +13,7 @@
"paragraphs": [
{
"style": "Text",
- "text": "The more tokens you hold the more influence you can have over the direction of the project. This means, by owning SA tokens, you hold the power to use those tokens to exert influence over what parts of the system will be developed and how the community will evolve.",
+ "text": "The more tokens you hold the more influence you can have over the direction of the project. This means, by owning SA Tokens, you hold the power to use those tokens to exert influence over what parts of the system will be developed and how the community will evolve.",
"updated": 1629165111109
},
{
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-006-tutorial-step-a-mighty-meritocracy.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-006-tutorial-step-a-mighty-meritocracy.json
index a666f5b4a..000726f27 100644
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-006-tutorial-step-a-mighty-meritocracy.json
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-006-tutorial-step-a-mighty-meritocracy.json
@@ -3,8 +3,8 @@
"pageNumber": 6,
"type": "Tutorial Step - A Mighty Meritocracy",
"definition": {
- "text": "Superalgos does not reward freeloading! Real contributions to the project and community are what get rewarded with SA tokens and Governance power.",
- "updated": 1629162653518,
+ "text": "Superalgos does not reward freeloading! Real contributions to the project and community are what get rewarded with tokens and Token Power.",
+ "updated": 1630605807061,
"icon": {
"name": "Position\\positions",
"project": "Governance"
@@ -13,8 +13,8 @@
"paragraphs": [
{
"style": "Text",
- "text": "The fancy word for this kind of project governance is meritocracy. In other words, the more you contribute to the improvement of Superalgos and to the support of our community, the more Token Power you earn to influence the future of the Superalgos project.",
- "updated": 1629979557344
+ "text": "The fancy word for this kind of project governance is meritocracy. In other words, the more you contribute to the improvement of Superalgos and to the support of our Community, the more Token Power and Reputation you earn to influence the future of the project.",
+ "updated": 1630605980783
},
{
"style": "Note",
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-007-tutorial-step-a-worthy-contribution.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-007-tutorial-step-a-worthy-contribution.json
index cd56c6995..734e56557 100644
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-007-tutorial-step-a-worthy-contribution.json
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-007-tutorial-step-a-worthy-contribution.json
@@ -13,8 +13,8 @@
"paragraphs": [
{
"style": "Success",
- "text": "Each of us bring unique talents and experience into our work with Superalgos. Even if you are not a programmer or expert trader there is still ways for you to get involved and grow the project!",
- "updated": 1629165838038
+ "text": "Each of us bring unique talents and experience into our work with Superalgos. Even if you are not a programmer or expert trader there is still ways for you to get involved!",
+ "updated": 1630606036389
},
{
"style": "Text",
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-008-tutorial-step-what’s-in-a-profile.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-008-tutorial-step-what’s-in-a-profile.json
index 48fd4ee5d..f813f4564 100644
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-008-tutorial-step-what’s-in-a-profile.json
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-008-tutorial-step-what’s-in-a-profile.json
@@ -3,8 +3,8 @@
"pageNumber": 8,
"type": "Tutorial Step - What’s in a Profile?",
"definition": {
- "text": "So what are we waiting for? Let’s get started! To participate in Governance you will first need a User Profile.",
- "updated": 1629163040597,
+ "text": "So what are we waiting for? Let’s get started! To participate in Governance you will need a User Profile.",
+ "updated": 1630657682741,
"icon": {
"name": "User\\user-profile",
"project": "Governance"
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-009-tutorial-step-program-participation.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-009-tutorial-step-program-participation.json
index 1db88f069..1010dff7c 100644
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-009-tutorial-step-program-participation.json
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-009-tutorial-step-program-participation.json
@@ -3,8 +3,8 @@
"pageNumber": 9,
"type": "Tutorial Step - Program Participation",
"definition": {
- "text": "How you use your Token Power is defined within a number of different Programs within your profile hierarchy.",
- "updated": 1629163374967,
+ "text": "How you use your Token Power is defined within a number of Governance Programs within your profile hierarchy.",
+ "updated": 1630657749389,
"icon": {
"name": "User\\user-referrer",
"project": "Governance"
@@ -13,8 +13,8 @@
"paragraphs": [
{
"style": "Text",
- "text": "These programs help organize the types of development and community relationships you want to reward. ",
- "updated": 1629166399952
+ "text": "These programs help organize the types of development and community relationships you want to reward.",
+ "updated": 1630657777891
},
{
"style": "Note",
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-010-tutorial-step-where-it-all-begins.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-010-tutorial-step-where-it-all-begins.json
index 9213c021c..d85b6921f 100644
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-010-tutorial-step-where-it-all-begins.json
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-010-tutorial-step-where-it-all-begins.json
@@ -3,8 +3,8 @@
"pageNumber": 10,
"type": "Tutorial Step - Where it all Begins",
"definition": {
- "text": "Here we are at the head of the governance project. Let’s get that profile created!",
- "updated": 1629163572836,
+ "text": "Here we are at the head of the Governance Project hierarchy. Let’s get that profile created!",
+ "updated": 1630599538627,
"icon": {
"name": "governance",
"project": "Governance"
@@ -13,13 +13,13 @@
"paragraphs": [
{
"style": "Callout",
- "text": "Click the Add Profile Constructor button.",
- "updated": 1629163599518
+ "text": "Click the Add Profile Constructor button.",
+ "updated": 1630657850442
},
{
"style": "Text",
- "text": "Now position the resulting Profile Constructor node where it is easy to see.",
- "updated": 1629163626525
+ "text": "Now position the resulting Profile Constructor node where it is easy to see and work with.",
+ "updated": 1630657866373
}
]
}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-011-tutorial-step-profile-in-a-heartbeat.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-011-tutorial-step-profile-in-a-heartbeat.json
index b7da32094..84709af6b 100644
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-011-tutorial-step-profile-in-a-heartbeat.json
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-011-tutorial-step-profile-in-a-heartbeat.json
@@ -13,8 +13,8 @@
"paragraphs": [
{
"style": "Text",
- "text": "Not only that but it will create a unique Binance Smart Chain wallet that is connected with your profile. We call it your Governance Address.",
- "updated": 1629166742408
+ "text": "It will create a unique Binance Smart Chain wallet that is connected with your profile: your Governance Address.",
+ "updated": 1630657968476
},
{
"style": "Note",
@@ -23,8 +23,8 @@
},
{
"style": "Text",
- "text": "Your Governance Address will allow you to receive the SA tokens you earn. Superalgos will also read the balance of this address to become aware of the number of SA tokens you hold, and assign your profile an equivalent amount of Token Power.",
- "updated": 1629166705049
+ "text": "Your Governance Address will allow you to receive the SA Tokens you earn. Superalgos will read the balance of this address to become aware of the number of SA Tokens you hold, and assign your profile an equivalent amount of Token Power.",
+ "updated": 1630606362346
}
]
}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-012-tutorial-step-pump-that-heartbeat.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-012-tutorial-step-pump-that-heartbeat.json
index 49d91b33b..958154546 100644
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-012-tutorial-step-pump-that-heartbeat.json
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-012-tutorial-step-pump-that-heartbeat.json
@@ -3,8 +3,8 @@
"pageNumber": 12,
"type": "Tutorial Step - Pump that Heartbeat!",
"definition": {
- "text": "Now let’s configure that Profile Constructor!",
- "updated": 1629167519082,
+ "text": "Now let’s configure the Profile Constructor so that we may later build the profile!",
+ "updated": 1630658339365,
"icon": {
"name": "configuration",
"project": "Governance"
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-013-tutorial-step-oh-so-shiny.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-013-tutorial-step-oh-so-shiny.json
index 04e02c7e7..efbbf0908 100644
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-013-tutorial-step-oh-so-shiny.json
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-013-tutorial-step-oh-so-shiny.json
@@ -3,12 +3,12 @@
"pageNumber": 13,
"type": "Tutorial Step - Oh so Shiny",
"definition": {
- "text": "We are almost there. Now click Build Profile and watch the magic happen. That’s right, you just created your profile!",
+ "text": "We are almost there. Now click Build Profile and watch the magic happen. That’s right, you just created your profile!",
"icon": {
"name": "User\\user-profile",
"project": "Governance"
},
- "updated": 1629721281167
+ "updated": 1630658421560
},
"paragraphs": [
{
@@ -18,8 +18,8 @@
},
{
"style": "Note",
- "text": "The constructor just generated your user profile, and either linked your address or created a unique SA Token Governance address. ",
- "updated": 1629553674568
+ "text": "The constructor just generated your user profile, and either linked your address or created a unique SA Token Governance Address.",
+ "updated": 1630599816232
}
]
}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-014-tutorial-step-only-you.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-014-tutorial-step-only-you.json
index 0e89ea513..8fcd677a2 100644
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-014-tutorial-step-only-you.json
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-014-tutorial-step-only-you.json
@@ -3,8 +3,8 @@
"pageNumber": 14,
"type": "Tutorial Step - Only You",
"definition": {
- "text": "The profile constructor also did some work to make sure only you can change your profile.",
- "updated": 1629553865897,
+ "text": "The Profile Constructor also did some work to make sure only you can change your profile.",
+ "updated": 1630658478769,
"icon": {
"name": "User\\user-profile",
"project": "Governance"
@@ -13,13 +13,13 @@
"paragraphs": [
{
"style": "Text",
- "text": "A cryptographic message with your GitHub.com username has been signed with the private key corresponding to your governance address. This message will be stored in your User Profile so that we may authenticate it comes from you once you submit your profile as a plugin to the Governance Project.",
- "updated": 1629553908808
+ "text": "A cryptographic message with your GitHub.com username has been signed with the private key corresponding to your Governance Address. This message will be stored in your User Profile so that we may authenticate it comes from you once you submit your profile as a plugin to the Governance Project.",
+ "updated": 1630658507981
},
{
"style": "Success",
- "text": ". What this means is that your profile, and its associated token address, can only be accessed and changed by you!",
- "updated": 1629553923815
+ "text": "What this means is that your profile and its associated token address can only be accessed and changed by you!",
+ "updated": 1630606585784
},
{
"style": "Text",
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-015-tutorial-step-under-the-hood.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-015-tutorial-step-under-the-hood.json
index c742f3f2c..8daf08a1f 100644
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-015-tutorial-step-under-the-hood.json
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-015-tutorial-step-under-the-hood.json
@@ -3,8 +3,8 @@
"pageNumber": 15,
"type": "Tutorial Step - Under the Hood",
"definition": {
- "text": "Let's take a little closer look at the cryptographic signature in your new profile.",
- "updated": 1629554334739,
+ "text": "Let's take a closer look at the cryptographic signature in your new profile.",
+ "updated": 1630658552742,
"icon": {
"name": "User\\user-profile",
"project": "Governance"
@@ -17,7 +17,7 @@
"updated": 1629554250933
},
{
- "style": "Text",
+ "style": "Note",
"text": "Wow that’s a lot of numbers! Again, this is how the governance system will know that this User Profile belongs to the private key that signed the message, which in turn belongs to the address that will hold the tokens that confer your profile with Token Power.",
"updated": 1629554289159
}
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-016-tutorial-step-save-the-key.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-016-tutorial-step-save-the-key.json
index 9a27fed54..d871ced66 100644
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-016-tutorial-step-save-the-key.json
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-016-tutorial-step-save-the-key.json
@@ -3,8 +3,8 @@
"pageNumber": 16,
"type": "Tutorial Step - Save the Key!",
"definition": {
- "text": "Now that you have a new rocking Profile, let’s talk some more about that private key. ",
- "updated": 1629554694993,
+ "text": "Now that you have a new rocking User Profile, let’s talk some more about that private key.",
+ "updated": 1630658607513,
"icon": {
"name": "Key\\key-reference",
"project": "Foundations"
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-017-tutorial-step-profile-backup.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-017-tutorial-step-profile-backup.json
index 5e59653f2..e64a81188 100644
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-017-tutorial-step-profile-backup.json
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-017-tutorial-step-profile-backup.json
@@ -3,8 +3,8 @@
"pageNumber": 17,
"type": "Tutorial Step - Profile Backup",
"definition": {
- "text": "Later on, you will be rewarded with Superalgos SA Tokens to the address you just generated. But before that happens, you must safely store the private key that you will use to access the address.",
- "updated": 1629579328664,
+ "text": "Your Superalgos SA Token rewards will go to the address you just generated, so you should safely store the private key that you will use to access the address.",
+ "updated": 1630658720175,
"icon": {
"name": "Exchange\\exchange-account-asset",
"project": "Foundations"
@@ -12,14 +12,14 @@
},
"paragraphs": [
{
- "style": "Text",
- "text": "At this point, Superalgos doesn’t offer a built-in solution to securely back up your private keys. All the system does is generate a BSC address / private key pair and deliver it in the configuration of the Profile Constructor node. It is up to you to decide how you are going to handle this sensitive information.",
- "updated": 1629578959187
+ "style": "Important",
+ "text": "Superalgos doesn’t offer a built-in solution to securely back up your private keys. The system generates a BSC address / private key pair and delivers it in the configuration of the Profile Constructor. It is up to you to decide how you are going to handle this sensitive information.",
+ "updated": 1630658807597
},
{
"style": "Callout",
- "text": "Access the configuration of the Profile Constructor. You will find the address and private key, so that you may back up the information in whatever way you see fit.",
- "updated": 1629578990303
+ "text": "Access the configuration of the Profile Constructor. Find the address and private key, and back up the information in whatever way you see fit.",
+ "updated": 1630600071978
},
{
"style": "Text",
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-019-tutorial-step-program-partners.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-019-tutorial-step-program-partners.json
index c79a6876d..e090b7385 100644
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-019-tutorial-step-program-partners.json
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-019-tutorial-step-program-partners.json
@@ -3,8 +3,8 @@
"pageNumber": 19,
"type": "Tutorial Step - Program Partners",
"definition": {
- "text": "You have successfully created your profile! You are now set up to be able to participate in all the various Governance programs!\n",
- "updated": 1629924832003,
+ "text": "You have successfully created your profile! You are now set up to participate in all the various Governance Programs!",
+ "updated": 1630606740196,
"icon": {
"name": "Programs\\onboarding-programs",
"project": "Governance"
@@ -13,16 +13,17 @@
"paragraphs": [
{
"style": "Text",
- "text": "The onboarding programs are your first stop into the world of Superalgos governance. So let’s add them to your profile! ",
- "updated": 1629925086766
- },
- {
- "style": "Success",
- "text": "Under your user profile you will find the Token Power Switch node."
+ "text": "The Onboarding Programs are your first stop into the world of Superalgos governance. So let’s add them to your profile!",
+ "updated": 1630600253110
},
{
"style": "Callout",
- "text": "On the Token Power Switch click Add Onboarding Programs."
+ "text": "Find the Token Power Switch node under the User Profile node and click Add Onboarding Programs on the menu.",
+ "updated": 1630658978533
+ },
+ {
+ "style": "Success",
+ "text": "The Onboarding Programs node should pop up as an offspring of the Token Power Switch."
}
]
}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-020-tutorial-step-drop-it-like-it’s-hot.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-020-tutorial-step-drop-it-like-it’s-hot.json
index bdc269e2d..e0643288b 100644
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-020-tutorial-step-drop-it-like-it’s-hot.json
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-020-tutorial-step-drop-it-like-it’s-hot.json
@@ -3,8 +3,8 @@
"pageNumber": 20,
"type": "Tutorial Step - Drop it like it’s Hot",
"definition": {
- "text": "Being a part of the Governance network is a valuable contribution! As such the airdrop program rewards you with tokens just for being here!",
- "updated": 1629925355949,
+ "text": "Taking part in governance is a valuable contribution! As such the Airdrop Program rewards you with tokens on every release!",
+ "updated": 1630606894763,
"icon": {
"name": "Programs\\airdrop-program",
"project": "Governance"
@@ -13,18 +13,18 @@
"paragraphs": [
{
"style": "Text",
- "text": "The SA token is not a meaningless crypto currency. Consequently, we are not a fan of mindless airdrops. However, since you took the time to create your User Profile you deserve some tokens!",
- "updated": 1629925482831
+ "text": "We are not a fan of mindless airdrops. However, since you took the time to learn Superalgos and create your User Profile, you deserve a reward!",
+ "updated": 1630606981664
},
{
"style": "Callout",
- "text": "On the Onboarding Programs node click Add Airdrop Program",
- "updated": 1629925540228
+ "text": "On the Onboarding Programs node click Add Airdrop Program.",
+ "updated": 1630607006405
},
{
"style": "Success",
- "text": "Now you will receive 1,000 SA tokens at the next distribution if you submit a PR with your User Profile! We'll get to that!",
- "updated": 1629980519400
+ "text": "Just by deploying the program, you are all set to get up to 1,000 SA Tokens at the next Distribution Event and on every other future release provided that you submit your User Profile!",
+ "updated": 1630659363719
}
]
}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-021-tutorial-step-github-glory.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-021-tutorial-step-github-glory.json
index 8ae52f8a6..8bc315db9 100644
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-021-tutorial-step-github-glory.json
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-021-tutorial-step-github-glory.json
@@ -3,18 +3,22 @@
"pageNumber": 21,
"type": "Tutorial Step - GitHub Glory",
"definition": {
- "text": "The GitHub Program allows you to receive some tokens for starting to get involved with the project!",
- "updated": 1629926259120,
+ "text": "Now, the Github Program rewards you with more tokens for helping developers find Superalgos on Github.com search!",
+ "updated": 1630601440266,
"icon": {
"name": "Programs\\github-program",
"project": "Governance"
}
},
"paragraphs": [
+ {
+ "style": "Callout",
+ "text": "Add the Github Program from the menu of the Onboarding Programs node.",
+ "updated": 1630601229528
+ },
{
"style": "Text",
- "text": "There are three ways to gain more tokens with the Github Program. Doing all three will land you a nice Token bonus!",
- "updated": 1629926280944
+ "text": "There are three things you can help with! Doing all three may land you up to SA 3,000 more!"
},
{
"style": "List",
@@ -22,16 +26,18 @@
},
{
"style": "List",
- "text": "Fork the Superalgos repository to your Github account.",
- "updated": 1629926002868
+ "text": "Fork the Superalgos repository to your Github account — you probably have already!",
+ "updated": 1630600687531
},
{
"style": "List",
- "text": "Watch the Superalgos repository with your Github account."
+ "text": "Click the Watch button too!",
+ "updated": 1630601314552
},
{
- "style": "Callout",
- "text": "Adding the Github program is just like adding the Airdrop Program! On the Onboarding Programs node click Add Github Program."
+ "style": "Link",
+ "text": "Go to the Superalgos repo to click the Star and Watch buttons. Make sure you have a fork too!->github.com/Superalgos/Superalgos",
+ "updated": 1630601392808
},
{
"style": "Text",
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-022-tutorial-step-how-github-works.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-022-tutorial-step-how-github-works.json
new file mode 100644
index 000000000..8c3ee0c46
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-022-tutorial-step-how-github-works.json
@@ -0,0 +1,35 @@
+{
+ "tutorial": "Creating Your User Profile Tutorial",
+ "pageNumber": 22,
+ "type": "Tutorial Step - How Github Works",
+ "definition": {
+ "text": "Github.com bumps up the search ranking of projects when they have many stars, forks, and people watching the repository!",
+ "updated": 1630659929485,
+ "icon": {
+ "name": "Programs\\github-program",
+ "project": "Governance"
+ }
+ },
+ "paragraphs": [
+ {
+ "style": "Note",
+ "text": "That is why we ask you to help in this manner! By completing those three tasks, you are effectively helping more developers find Superalgos, which is a win for everyone, as the more developers, the faster the project advances!",
+ "updated": 1630660356226
+ },
+ {
+ "style": "Text",
+ "text": "Now, this is how it works on the side of Superalgos:",
+ "updated": 1630659982457
+ },
+ {
+ "style": "List",
+ "text": "The system checks the repository and verifies if your Github account has a star, a fork, and/or a watch.",
+ "updated": 1630660104845
+ },
+ {
+ "style": "List",
+ "text": "There is a cap of SA 1,000 for each of these incentives. This means that you may get up to SA 3,000 if you maximize your participation.",
+ "updated": 1630660329237
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-022-tutorial-step-make-it-official.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-022-tutorial-step-make-it-official.json
deleted file mode 100644
index 88e0f7006..000000000
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-022-tutorial-step-make-it-official.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "tutorial": "Creating Your User Profile Tutorial",
- "pageNumber": 22,
- "type": "Tutorial Step - Make it Official",
- "definition": {
- "text": "Now we are ready to push your new profile to the main Superalgos repository! ",
- "updated": 1629583003718,
- "icon": {
- "name": "Programs\\github-program",
- "project": "Governance"
- }
- },
- "paragraphs": [
- {
- "style": "Text",
- "text": "If you have gone through the welcome tutorials already, you should have set up your GitHub authentication and submitted a review. Submitting your profile will be exactly the same. Easy right!",
- "updated": 1629583038275
- },
- {
- "style": "Warning",
- "text": "If this sounds strange to you. Read the docs page open to the right and go through the steps to set up your GitHub authentication. Then come back here and we'll finish up!",
- "updated": 1629583121545
- },
- {
- "style": "Text",
- "text": ""
- }
- ]
-}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-023-tutorial-step-save-your-profile.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-023-tutorial-step-save-your-profile.json
new file mode 100644
index 000000000..7265322fa
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-023-tutorial-step-save-your-profile.json
@@ -0,0 +1,29 @@
+{
+ "tutorial": "Creating Your User Profile Tutorial",
+ "pageNumber": 23,
+ "type": "Tutorial Step - Save Your Profile!",
+ "definition": {
+ "text": "Cool! We've covered the basics! Now you have a working User Profile and are already participating in the first two Governance Programs!",
+ "updated": 1630601962359,
+ "icon": {
+ "name": "backup-entity",
+ "project": "Foundations"
+ }
+ },
+ "paragraphs": [
+ {
+ "style": "Text",
+ "text": "It's time to save your User Profile! ",
+ "updated": 1630603392015
+ },
+ {
+ "style": "Callout",
+ "text": "Click Ctrl + Shift + Alt + Key-S to save the Current Workspace."
+ },
+ {
+ "style": "Success",
+ "text": "We set your profile to save as a Plugin every time you save the workspace! So that should save your User Profile too! ",
+ "updated": 1630603485216
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-023-tutorial-step-to-infinity-and-beyond.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-023-tutorial-step-to-infinity-and-beyond.json
deleted file mode 100644
index 7d29b9218..000000000
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-023-tutorial-step-to-infinity-and-beyond.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "tutorial": "Creating Your User Profile Tutorial",
- "pageNumber": 23,
- "type": "Tutorial Step - To Infinity and Beyond",
- "definition": {
- "text": "If you have submitted a review then you are ready to go. We will be using the app.contribute command again to finish submitting your profile.",
- "updated": 1629583914664,
- "icon": {
- "name": "User\\user-profile",
- "project": "Governance"
- }
- },
- "paragraphs": [
- {
- "style": "Callout",
- "text": "Go to the docs panel and type the following command into the search bar:",
- "updated": 1629726858200
- },
- {
- "style": "Json",
- "text": "app.contribute This is my first submission of User Profile [add your name here]",
- "updated": 1629726765903
- },
- {
- "style": "Text",
- "text": "If everything is set up correctly you should see the message appear that your pull request has been submitted. This means that your profile has been sent to the main Superalgos repository and will be automatically merged in just a few minutes!"
- },
- {
- "style": "Text",
- "text": ""
- }
- ]
-}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-024-tutorial-step-low-hanging-fruit.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-024-tutorial-step-low-hanging-fruit.json
new file mode 100644
index 000000000..cbac2e8a5
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-024-tutorial-step-low-hanging-fruit.json
@@ -0,0 +1,30 @@
+{
+ "tutorial": "Creating Your User Profile Tutorial",
+ "pageNumber": 24,
+ "type": "Tutorial Step - Low Hanging Fruit",
+ "definition": {
+ "text": "Now I'll hook you up with the Community Building Programs, which are also quite easy to set up and will earn you more tokens!",
+ "updated": 1630660957861,
+ "icon": {
+ "name": "Programs\\community-building-programs",
+ "project": "Governance"
+ }
+ },
+ "paragraphs": [
+ {
+ "style": "Callout",
+ "text": "Go to the Token Power Switch node and select Add Comunity Building Programs from the menu.",
+ "updated": 1630661290597
+ },
+ {
+ "style": "Note",
+ "text": "Superalgos thrives through contributions and collaboration. We designed these programs to foster a community in which members are always ready to help and give back!",
+ "updated": 1630661420122
+ },
+ {
+ "style": "Success",
+ "text": "These programs are a bit more elaborate in their workings... you'll love them!",
+ "updated": 1630661576265
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-025-tutorial-step-ill-lay-out-the-basics.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-025-tutorial-step-ill-lay-out-the-basics.json
new file mode 100644
index 000000000..c1dda1c1c
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-025-tutorial-step-ill-lay-out-the-basics.json
@@ -0,0 +1,34 @@
+{
+ "tutorial": "Creating Your User Profile Tutorial",
+ "pageNumber": 25,
+ "type": "Tutorial Step - I'll Lay Out the Basics",
+ "definition": {
+ "text": "All Community Building Programs have two built-in types of incentives: a Tokens Bonus, and Tokens Awarded by the program.",
+ "icon": {
+ "name": "Programs\\community-building-programs",
+ "project": "Governance"
+ },
+ "updated": 1630664341967
+ },
+ "paragraphs": [
+ {
+ "style": "Text",
+ "text": "In general terms, this is how it works:",
+ "updated": 1630664598834
+ },
+ {
+ "style": "List",
+ "text": "Tokens Bonus: It's an incentive to participate in the program. You earn these tokens simply by fulfilling the participation rules."
+ },
+ {
+ "style": "List",
+ "text": "Tokens Awarded: These programs incentivize desirable behaviors. If you constructively participate in the Community, then you will earn more tokens!",
+ "updated": 1630664896700
+ },
+ {
+ "style": "Success",
+ "text": "The interesting bit about these programs is that they reward chains of collaborations! Let's explore this concept within the Referral Program!",
+ "updated": 1630664769086
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-026-tutorial-step-the-referral-program.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-026-tutorial-step-the-referral-program.json
new file mode 100644
index 000000000..6bbe17202
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-026-tutorial-step-the-referral-program.json
@@ -0,0 +1,40 @@
+{
+ "tutorial": "Creating Your User Profile Tutorial",
+ "pageNumber": 26,
+ "type": "Tutorial Step - The Referral Program",
+ "definition": {
+ "text": "The Referral Program incentivizes the promotion of the project, either by word-of-mouth or “en masse” through articles, social media posts, videos, and other forms of influencer marketing!",
+ "updated": 1630665298091,
+ "icon": {
+ "name": "Programs\\referral-program",
+ "project": "Governance"
+ }
+ },
+ "paragraphs": [
+ {
+ "style": "Callout",
+ "text": "Go to the Community Building Programs node and click Add Referral Program.",
+ "updated": 1630665425190
+ },
+ {
+ "style": "Text",
+ "text": "First, let's clarify what rules you must fulfill to earn your Tokens Bonus!",
+ "updated": 1630668604341
+ },
+ {
+ "style": "List",
+ "text": "You must deploy the program: Done!",
+ "updated": 1630665468816
+ },
+ {
+ "style": "List",
+ "text": "You must declare your referrer: We'll do that next!",
+ "updated": 1630665632799
+ },
+ {
+ "style": "List",
+ "text": "You must drive Token Power to the program: Wooh... token power... sounds neat? You bet!",
+ "updated": 1630666285261
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-027-tutorial-step-declare-your-referrers.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-027-tutorial-step-declare-your-referrers.json
new file mode 100644
index 000000000..d5e845b76
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-027-tutorial-step-declare-your-referrers.json
@@ -0,0 +1,30 @@
+{
+ "tutorial": "Creating Your User Profile Tutorial",
+ "pageNumber": 27,
+ "type": "Tutorial Step - Declare Your Referrers",
+ "definition": {
+ "text": "The program is deployed! Now you have to declare your referrer to fulfill the second requirement!",
+ "icon": {
+ "name": "User\\user-referrer",
+ "project": "Governance"
+ },
+ "updated": 1630669057039
+ },
+ "paragraphs": [
+ {
+ "style": "Text",
+ "text": "Maybe you learned about Superalgos from an article, a video, a comment on Reddit, a tweet, the official website, or someone who told you about us!",
+ "updated": 1630669214566
+ },
+ {
+ "style": "Success",
+ "text": "Declaring your referrers is the best way to thank the people that may have written that article or tweet, produced that video, maintained the website, or told you about Superalgos!",
+ "updated": 1630669976768
+ },
+ {
+ "style": "Text",
+ "text": "To declare a referrer, you must establish a reference from the User Referrer node to the User Profile of your referrer! Does your referrer have a User Profile?",
+ "updated": 1630681537614
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-028-tutorial-step-load-the-user-profile.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-028-tutorial-step-load-the-user-profile.json
new file mode 100644
index 000000000..fb86ec33a
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-028-tutorial-step-load-the-user-profile.json
@@ -0,0 +1,30 @@
+{
+ "tutorial": "Creating Your User Profile Tutorial",
+ "pageNumber": 28,
+ "type": "Tutorial Step - Load the User Profile",
+ "definition": {
+ "text": "Do you know who your referrer is? Does your referrer have a User Profile? How do you find and load the right profile? Those are all good questions!",
+ "updated": 1630678332122,
+ "icon": {
+ "name": "User\\user-profile",
+ "project": "Governance"
+ }
+ },
+ "paragraphs": [
+ {
+ "style": "Callout",
+ "text": "Follow the guide on the right to find the answers!",
+ "updated": 1630678762493
+ },
+ {
+ "style": "Note",
+ "text": "I brought you to the Dummy profile mentioned in the guide to make it easier for you!",
+ "updated": 1630678841266
+ },
+ {
+ "style": "Success",
+ "text": "If the question \"who is your referrer\" has no good answer then feel free to declare one of your friends in the Community! By the way, notice that the profiles of Community Mods and Core Team members are loaded already!",
+ "updated": 1630679299290
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-029-tutorial-step-reference-the-user-profile.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-029-tutorial-step-reference-the-user-profile.json
new file mode 100644
index 000000000..72feb1802
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-029-tutorial-step-reference-the-user-profile.json
@@ -0,0 +1,30 @@
+{
+ "tutorial": "Creating Your User Profile Tutorial",
+ "pageNumber": 29,
+ "type": "Tutorial Step - Reference the User Profile",
+ "definition": {
+ "text": "Now that you have the target User Profile on the workspace, all that is left is to establish the reference from your User Referrer node to the User Profile.",
+ "icon": {
+ "name": "delink-node",
+ "project": "Foundations"
+ },
+ "updated": 1630679894593
+ },
+ "paragraphs": [
+ {
+ "style": "Callout",
+ "text": "Just in case you're not proficient with references, here's a quick reminder of how references work!",
+ "updated": 1630680014393
+ },
+ {
+ "style": "Note",
+ "text": "By the way, if you feel like you have more than one referrer, feel free to add User Referrer nodes and set up the references with their profiles!",
+ "updated": 1630680189459
+ },
+ {
+ "style": "Success",
+ "text": "Once you're done declaring your referrers, keep going with the tutorial!",
+ "updated": 1630680219618
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-030-tutorial-step-referral-token-awards.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-030-tutorial-step-referral-token-awards.json
new file mode 100644
index 000000000..e995bd0c5
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-030-tutorial-step-referral-token-awards.json
@@ -0,0 +1,39 @@
+{
+ "tutorial": "Creating Your User Profile Tutorial",
+ "pageNumber": 30,
+ "type": "Tutorial Step - Referral Token Awards",
+ "definition": {
+ "text": "Superalgos is a community-run project, not a VC-funded startup! We count on you helping with word-of-mouth marketing!",
+ "icon": {
+ "name": "tokens-awarded",
+ "project": "Governance"
+ },
+ "updated": 1630681292714
+ },
+ "paragraphs": [
+ {
+ "style": "Important",
+ "text": "The incentives to bring your friends, colleagues, or your following are significant! Find the short explanation below, and dive into the details on the right if so you wish!",
+ "updated": 1630681312671
+ },
+ {
+ "style": "Text",
+ "text": "This is the short version of how these programs work:",
+ "updated": 1630680801100
+ },
+ {
+ "style": "List",
+ "text": "The more people declare you as their referrers, the more tokens you earn on each and every release of the software, indefinitely!",
+ "updated": 1630680974311
+ },
+ {
+ "style": "List",
+ "text": "If the people you bring to Superalgos bring people too, you earn for those as well, and for those the latter bring, you earn too!",
+ "updated": 1630681200103
+ },
+ {
+ "style": "Text",
+ "text": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-031-tutorial-step-token-power-requirement.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-031-tutorial-step-token-power-requirement.json
new file mode 100644
index 000000000..06abfbfa8
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-031-tutorial-step-token-power-requirement.json
@@ -0,0 +1,34 @@
+{
+ "tutorial": "Creating Your User Profile Tutorial",
+ "pageNumber": 31,
+ "type": "Tutorial Step - Token Power Requirement",
+ "definition": {
+ "text": "Remember the third requirement to earn your Tokens Bonus? \"You must drive Token Power to the program\". What's that all about?",
+ "updated": 1630686739254,
+ "icon": {
+ "name": "Exchange\\exchange-account-asset",
+ "project": "Foundations"
+ }
+ },
+ "paragraphs": [
+ {
+ "style": "Text",
+ "text": "We're probably getting in the weeds here, but I'll try to keep it simple!",
+ "updated": 1630683871001
+ },
+ {
+ "style": "List",
+ "text": "When your Governance Address has some tokens in its balance, then you get the same amount of Token Power in your User Profile."
+ },
+ {
+ "style": "List",
+ "text": "Token Power flows down the hierarchy like a river! The amount of Token Power you let into each Governance Program determines how strongly you wish to participate in the program and impacts the Token Rewards you may get from it.",
+ "updated": 1630684153086
+ },
+ {
+ "style": "List",
+ "text": "By default, Token Power flows in equal amounts to all offspring nodes! You may change this tough!",
+ "updated": 1630684072593
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-032-tutorial-step-controlling-flows.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-032-tutorial-step-controlling-flows.json
new file mode 100644
index 000000000..9354b89a9
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-032-tutorial-step-controlling-flows.json
@@ -0,0 +1,30 @@
+{
+ "tutorial": "Creating Your User Profile Tutorial",
+ "pageNumber": 32,
+ "type": "Tutorial Step - Controlling Flows",
+ "definition": {
+ "text": "The configuration of each node where Token Power may go in acts as a floodgate! That's how you control Token Power Flows!",
+ "icon": {
+ "name": "Switches\\votes-switch",
+ "project": "Governance"
+ },
+ "updated": 1630687488694
+ },
+ "paragraphs": [
+ {
+ "style": "Text",
+ "text": "Go back to the Onboarding Programs node. Guess what? Those programs do not need Token Power, so we will close the floodgate!",
+ "updated": 1630687366643
+ },
+ {
+ "style": "Callout",
+ "text": "Copy the below configuration and paste it into the Onboarding Programs node configuration!",
+ "updated": 1630687477137
+ },
+ {
+ "style": "Json",
+ "text": "{\n \"percentage\": 0\n }",
+ "updated": 1630687598132
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-033-tutorial-step-what-token-power.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-033-tutorial-step-what-token-power.json
new file mode 100644
index 000000000..791e3f167
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-033-tutorial-step-what-token-power.json
@@ -0,0 +1,25 @@
+{
+ "tutorial": "Creating Your User Profile Tutorial",
+ "pageNumber": 33,
+ "type": "Tutorial Step - What Token Power?",
+ "definition": {
+ "text": "If you have no tokens in your Governance Address, then you have zero Token Power! But don't worry! We'll work something out!",
+ "updated": 1630687902755,
+ "icon": {
+ "name": "Exchange\\exchange-account-asset",
+ "project": "Foundations"
+ }
+ },
+ "paragraphs": [
+ {
+ "style": "Text",
+ "text": "Whether you have any Token Power or not, notice that there is now 0% of Token Power going into the Onboarding Programs and 100% going into the Community Building Programs! Floodgates closed, the flow goes elsewhere! You can play with percentages too!",
+ "updated": 1630688907038
+ },
+ {
+ "style": "Important",
+ "text": "Now, here's the good news... Because chances are that you have no Token Power to fulfill the third requirement to participate in the Community Building Programs, we are going to delegate some power to all User Profiles in this release! Well take care of that, so forget about it! ",
+ "updated": 1630689031351
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-034-tutorial-step-support-your-supporters.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-034-tutorial-step-support-your-supporters.json
new file mode 100644
index 000000000..c0f170fa2
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-034-tutorial-step-support-your-supporters.json
@@ -0,0 +1,25 @@
+{
+ "tutorial": "Creating Your User Profile Tutorial",
+ "pageNumber": 34,
+ "type": "Tutorial Step - Support Your Supporters",
+ "definition": {
+ "text": "The Support Program works pretty much like the Referral Program, only that you declare who your favorite Community Mods are!",
+ "updated": 1630689246772,
+ "icon": {
+ "name": "Programs\\support-program",
+ "project": "Governance"
+ }
+ },
+ "paragraphs": [
+ {
+ "style": "Callout",
+ "text": "Add the Support Program and use User Supporter nodes to set up references to your favorite moderators! Their profiles are loaded already!",
+ "updated": 1630689768928
+ },
+ {
+ "style": "Success",
+ "text": "While the Community is always ready to help with typical questions, it takes a certain level of experience and knowledge to provide effective support. This is why select Community Mods are in charge! Participating in this program is the best way to thank the people that selflessly help others!",
+ "updated": 1630689962795
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-035-tutorial-step-thank-your-mentors.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-035-tutorial-step-thank-your-mentors.json
new file mode 100644
index 000000000..f1777d3d2
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-035-tutorial-step-thank-your-mentors.json
@@ -0,0 +1,30 @@
+{
+ "tutorial": "Creating Your User Profile Tutorial",
+ "pageNumber": 35,
+ "type": "Tutorial Step - Thank Your Mentors",
+ "definition": {
+ "text": "Mentors are crucial to developing Contributors. They are the people that go the extra mile to help you progress and master Superalgos!",
+ "updated": 1630690393118,
+ "icon": {
+ "name": "Programs\\mentorship-program",
+ "project": "Governance"
+ }
+ },
+ "paragraphs": [
+ {
+ "style": "Text",
+ "text": "The Mentorship Program is very similar the Support Program, only that your mentors don't need to be moderators. It may be your friend learning Superalgos with you, or any other Community member!",
+ "updated": 1630690674482
+ },
+ {
+ "style": "Callout",
+ "text": "Deploy the program, and declare your mentors!",
+ "updated": 1630690640463
+ },
+ {
+ "style": "Text",
+ "text": "Hit Ctrl + Shift + Alt + Key-S when you're done to save your profile! With this you've completed the setup of the main Governance Programs oriented to newcomers! Now it's time to contribute your User Profile to the Superalgos repository!",
+ "updated": 1630690916860
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-036-tutorial-step-make-it-official.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-036-tutorial-step-make-it-official.json
new file mode 100644
index 000000000..06e7183b0
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-036-tutorial-step-make-it-official.json
@@ -0,0 +1,29 @@
+{
+ "tutorial": "Creating Your User Profile Tutorial",
+ "pageNumber": 36,
+ "type": "Tutorial Step - Make it Official",
+ "definition": {
+ "text": "Now you're ready to push your new profile to the main Superalgos repository!",
+ "updated": 1630607221921,
+ "icon": {
+ "name": "Programs\\github-program",
+ "project": "Governance"
+ }
+ },
+ "paragraphs": [
+ {
+ "style": "Callout",
+ "text": "Hit Ctrl + Shift + Alt + Key-S to save your profile if you haven't yet.
Now, set up you Github API credentials to get ready to contribute your profile!",
+ "updated": 1630691166021
+ },
+ {
+ "style": "Warning",
+ "text": "If you don't know what I'm talking about, you may need a refresher on how to submit a contribution to Superalgos. Read these few steps taken from the Beyond the Basics Tutorial to remind you what the GitHub authentication process is like. ",
+ "updated": 1630691155123
+ },
+ {
+ "style": "Text",
+ "text": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-037-tutorial-step-to-infinity-and-beyond.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-037-tutorial-step-to-infinity-and-beyond.json
new file mode 100644
index 000000000..23366ef16
--- /dev/null
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-037-tutorial-step-to-infinity-and-beyond.json
@@ -0,0 +1,34 @@
+{
+ "tutorial": "Creating Your User Profile Tutorial",
+ "pageNumber": 37,
+ "type": "Tutorial Step - To Infinity and Beyond",
+ "definition": {
+ "text": "Let's get rolling! We will be using the app.contribute command to submit your profile.",
+ "updated": 1630604507310,
+ "icon": {
+ "name": "User\\user-profile",
+ "project": "Governance"
+ }
+ },
+ "paragraphs": [
+ {
+ "style": "Callout",
+ "text": "Copy the command making sure you replace the placeholder with your Github username, paste it in the search box, and click Enter.",
+ "updated": 1630604654229
+ },
+ {
+ "style": "Json",
+ "text": "app.contribute First submission of User Profile [add your name here]",
+ "updated": 1630604551655
+ },
+ {
+ "style": "Text",
+ "text": "If everything is set up correctly, you should see a message stating that your pull request has been submitted. This means that your profile has been sent to the main Superalgos repository and will be automatically merged in just a few minutes!",
+ "updated": 1630604694599
+ },
+ {
+ "style": "Text",
+ "text": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-024-tutorial-step-welcome-aboard.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-038-tutorial-step-welcome-aboard.json
similarity index 98%
rename from Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-024-tutorial-step-welcome-aboard.json
rename to Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-038-tutorial-step-welcome-aboard.json
index b47887ced..89168c02c 100644
--- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-024-tutorial-step-welcome-aboard.json
+++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-038-tutorial-step-welcome-aboard.json
@@ -1,6 +1,6 @@
{
"tutorial": "Creating Your User Profile Tutorial",
- "pageNumber": 24,
+ "pageNumber": 38,
"type": "Tutorial Step - Welcome aboard!",
"definition": {
"text": "You did it! You are now officially a part of the Superalgos governance community! Now that you have a profile, there are a few important things to do.",
diff --git a/Projects/Governance/UI/Function-Libraries/AirdropProgram.js b/Projects/Governance/UI/Function-Libraries/AirdropProgram.js
index ec5bb3a57..f87c72699 100644
--- a/Projects/Governance/UI/Function-Libraries/AirdropProgram.js
+++ b/Projects/Governance/UI/Function-Libraries/AirdropProgram.js
@@ -106,8 +106,13 @@ function newGovernanceFunctionLibraryAirdropProgram() {
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.")
+ userProfile.payload.uiObject.setErrorMessage(
+ "Waiting for blockchain balance. It takes 6 seconds to load the balance of each profile, bacause you are using a free API provided by BSC Scan.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
+ } else {
+ userProfile.payload.uiObject.resetErrorMessage()
}
/*
Next thing to do is to validate if the airdrop user profile has a star at the Superalgos repository.
@@ -117,7 +122,10 @@ function newGovernanceFunctionLibraryAirdropProgram() {
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.")
+ userProfile.payload.uiObject.setErrorMessage(
+ "You need to setup this profile with the Profile Constructor, and produce a signature of your Airdrop Username.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
@@ -154,7 +162,10 @@ function newGovernanceFunctionLibraryAirdropProgram() {
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.")
+ programNode.payload.uiObject.setErrorMessage(
+ "Tokens Awarded Node is needed in order for this Program to get Tokens from the Program Pool.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
programNode.payload.airdropProgram.awarded.tokens = programNode.payload.airdropProgram.ownPower / totalPowerRewardRatio
@@ -170,7 +181,7 @@ function newGovernanceFunctionLibraryAirdropProgram() {
node.payload.uiObject.statusAngleOffset = 0
node.payload.uiObject.statusAtAngle = false
- node.payload.uiObject.setStatus(ownPowerText + ' Airdrop Power')
+ node.payload.uiObject.setStatus(ownPowerText + ' Airdrop Power', UI.projects.governance.globals.designer.SET_STATUS_COUNTER)
}
if (node.tokensAwarded !== undefined && node.tokensAwarded.payload !== undefined) {
@@ -180,12 +191,12 @@ function newGovernanceFunctionLibraryAirdropProgram() {
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.setValue(tokensAwardedText + ' SA Tokens' + tokensAwardedBTC, UI.projects.governance.globals.designer.SET_VALUE_COUNTER)
node.tokensAwarded.payload.uiObject.statusAngleOffset = 0
node.tokensAwarded.payload.uiObject.statusAtAngle = false
- node.tokensAwarded.payload.uiObject.setStatus('For creating your Superalgos profile!')
+ node.tokensAwarded.payload.uiObject.setStatus('For creating your Superalgos profile!', UI.projects.governance.globals.designer.SET_STATUS_COUNTER)
}
}
}
diff --git a/Projects/Governance/UI/Function-Libraries/Assets.js b/Projects/Governance/UI/Function-Libraries/Assets.js
index 64be554bf..d9e629570 100644
--- a/Projects/Governance/UI/Function-Libraries/Assets.js
+++ b/Projects/Governance/UI/Function-Libraries/Assets.js
@@ -12,10 +12,16 @@ function newGovernanceFunctionLibraryAssets() {
let folderPath = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(node.payload, 'folderPath')
if (folderPath === undefined || folderPath === "") {
- node.payload.uiObject.setErrorMessage("folderPath Config Property undefined.")
+ node.payload.uiObject.setErrorMessage(
+ "folderPath Config Property undefined.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
- node.payload.uiObject.setInfoMessage("Hold on while we install all the assets inside the this path: " + folderPath + ". This might take a minute or two.")
+ node.payload.uiObject.setInfoMessage(
+ "Hold on while we install all the assets inside the this path: " + folderPath + ". This might take a minute or two.",
+ UI.projects.governance.globals.designer.SET_INFO_COUNTER_FACTOR
+ )
httpRequest(undefined, 'DirContent' + '/' + folderPath, onResponse)
function onResponse(err, data) {
@@ -32,7 +38,10 @@ function newGovernanceFunctionLibraryAssets() {
totalAssets++
createNodesFromPath(node, foldersArray)
}
- node.payload.uiObject.setInfoMessage("A total of : " + totalAssets + " assets have been installed.")
+ node.payload.uiObject.setInfoMessage(
+ "A total of : " + totalAssets + " assets have been installed.",
+ UI.projects.governance.globals.designer.SET_INFO_COUNTER_FACTOR
+ )
}
function removeFirstFromArray(array) {
diff --git a/Projects/Governance/UI/Function-Libraries/ClaimsProgram.js b/Projects/Governance/UI/Function-Libraries/ClaimsProgram.js
index eb70f7fba..80b03c473 100644
--- a/Projects/Governance/UI/Function-Libraries/ClaimsProgram.js
+++ b/Projects/Governance/UI/Function-Libraries/ClaimsProgram.js
@@ -350,7 +350,10 @@ function newGovernanceFunctionLibraryClaimsProgram() {
}
}
if (totalPercentage > 100) {
- node.payload.uiObject.setErrorMessage('Claim Power Switching Error. Total Percentage of children nodes is grater that 100.')
+ node.payload.uiObject.setErrorMessage(
+ 'Claim Power Switching Error. Total Percentage of children nodes is grater that 100.',
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
let defaultPercentage = 0
@@ -446,7 +449,7 @@ function newGovernanceFunctionLibraryClaimsProgram() {
'Shared Between: ' + node.payload.claimsProgram.share.count + ' claims' + ' - ' +
'Share of Claims: ' + node.payload.claimsProgram.share.percentage.toFixed(2) + '%'
- node.payload.uiObject.setStatus(status)
+ node.payload.uiObject.setStatus(status, UI.projects.governance.globals.designer.SET_STATUS_COUNTER)
}
function drawProgram(node) {
@@ -457,7 +460,7 @@ function newGovernanceFunctionLibraryClaimsProgram() {
node.payload.uiObject.statusAngleOffset = 0
node.payload.uiObject.statusAtAngle = false
- node.payload.uiObject.setStatus(ownPowerText + ' Claim Power')
+ node.payload.uiObject.setStatus(ownPowerText + ' Claim Power', UI.projects.governance.globals.designer.SET_STATUS_COUNTER)
}
}
@@ -472,8 +475,8 @@ function newGovernanceFunctionLibraryClaimsProgram() {
node.tokensAwarded.payload.uiObject.statusAngleOffset = 0
node.tokensAwarded.payload.uiObject.statusAtAngle = true
- node.tokensAwarded.payload.uiObject.setValue(tokensAwardedText + ' SA Tokens' + tokensAwardedBTC)
- node.tokensAwarded.payload.uiObject.setStatus('From ' + node.payload.claimsProgram.count + ' Claims.')
+ node.tokensAwarded.payload.uiObject.setValue(tokensAwardedText + ' SA Tokens' + tokensAwardedBTC, UI.projects.governance.globals.designer.SET_VALUE_COUNTER)
+ node.tokensAwarded.payload.uiObject.setStatus('From ' + node.payload.claimsProgram.count + ' Claims.', UI.projects.governance.globals.designer.SET_STATUS_COUNTER)
}
}
@@ -486,10 +489,12 @@ function newGovernanceFunctionLibraryClaimsProgram() {
node.payload.uiObject.percentageAngleOffset = 180
node.payload.uiObject.percentageAtAngle = true
- node.payload.uiObject.setValue(programPowerText)
+ node.payload.uiObject.setValue(programPowerText, UI.projects.governance.globals.designer.SET_VALUE_COUNTER)
if (percentage !== undefined) {
- node.payload.uiObject.setPercentage(percentage.toFixed(2))
+ node.payload.uiObject.setPercentage(percentage.toFixed(2),
+ UI.projects.governance.globals.designer.SET_PERCENTAGE_COUNTER
+ )
}
}
}
@@ -498,7 +503,10 @@ function newGovernanceFunctionLibraryClaimsProgram() {
function installMissingClaims(node, rootNodes) {
if (node.payload === undefined) { return }
if (node.payload.referenceParent === undefined) {
- node.payload.uiObject.setErrorMessage('To Install Missing Claims you need a Reference Parent')
+ node.payload.uiObject.setErrorMessage(
+ 'To Install Missing Claims you need a Reference Parent',
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
scanNodeBranch(node, node.payload.referenceParent)
diff --git a/Projects/Governance/UI/Function-Libraries/DelegationProgram.js b/Projects/Governance/UI/Function-Libraries/DelegationProgram.js
index 764efd923..b429ed4a0 100644
--- a/Projects/Governance/UI/Function-Libraries/DelegationProgram.js
+++ b/Projects/Governance/UI/Function-Libraries/DelegationProgram.js
@@ -211,7 +211,10 @@ function newGovernanceFunctionLibraryDelegationProgram() {
}
}
if (totalPercentage > 100) {
- node.payload.uiObject.setErrorMessage('Delegate Power Switching Error. Total Percentage of children nodes is grater that 100.')
+ node.payload.uiObject.setErrorMessage(
+ 'Delegate Power Switching Error. Total Percentage of children nodes is grater that 100.',
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
let defaultPercentage = 0
@@ -278,7 +281,9 @@ function newGovernanceFunctionLibraryDelegationProgram() {
drawProgram(node)
if (percentage !== undefined) {
- node.payload.uiObject.setPercentage(percentage.toFixed(2))
+ node.payload.uiObject.setPercentage(percentage.toFixed(2),
+ UI.projects.governance.globals.designer.SET_PERCENTAGE_COUNTER
+ )
}
return
}
@@ -294,10 +299,12 @@ function newGovernanceFunctionLibraryDelegationProgram() {
let powerType = 'Delegate Power'
const programPowerText = parseFloat(programPower.toFixed(0)).toLocaleString('en') + ' ' + powerType
- node.payload.uiObject.setValue(programPowerText)
+ node.payload.uiObject.setValue(programPowerText, UI.projects.governance.globals.designer.SET_VALUE_COUNTER)
if (percentage !== undefined) {
- node.payload.uiObject.setPercentage(percentage.toFixed(2))
+ node.payload.uiObject.setPercentage(percentage.toFixed(2),
+ UI.projects.governance.globals.designer.SET_PERCENTAGE_COUNTER
+ )
}
}
}
@@ -310,18 +317,20 @@ function newGovernanceFunctionLibraryDelegationProgram() {
node.payload.uiObject.valueAngleOffset = 180
node.payload.uiObject.valueAtAngle = true
- node.payload.uiObject.setValue(outgoingPowerText + ' Delegate Power')
+ node.payload.uiObject.setValue(outgoingPowerText + ' Delegate Power', UI.projects.governance.globals.designer.SET_VALUE_COUNTER)
node.payload.uiObject.percentageAngleOffset = 180
node.payload.uiObject.percentageAtAngle = true
- node.payload.uiObject.setPercentage(percentage)
+ node.payload.uiObject.setPercentage(percentage,
+ UI.projects.governance.globals.designer.SET_PERCENTAGE_COUNTER
+ )
if (node.payload.referenceParent !== undefined) {
node.payload.uiObject.statusAngleOffset = 0
node.payload.uiObject.statusAtAngle = true
- node.payload.uiObject.setStatus(outgoingPowerText + ' ' + ' Outgoing Power')
+ node.payload.uiObject.setStatus(outgoingPowerText + ' ' + ' Outgoing Power', UI.projects.governance.globals.designer.SET_STATUS_COUNTER)
}
}
}
@@ -334,7 +343,7 @@ function newGovernanceFunctionLibraryDelegationProgram() {
node.payload.uiObject.statusAngleOffset = 0
node.payload.uiObject.statusAtAngle = false
- node.payload.uiObject.setStatus(ownPowerText + ' Delegate Power')
+ node.payload.uiObject.setStatus(ownPowerText + ' Delegate Power', UI.projects.governance.globals.designer.SET_STATUS_COUNTER)
}
}
}
diff --git a/Projects/Governance/UI/Function-Libraries/GithubProgram.js b/Projects/Governance/UI/Function-Libraries/GithubProgram.js
index 30b919aa0..8ff7a84d8 100644
--- a/Projects/Governance/UI/Function-Libraries/GithubProgram.js
+++ b/Projects/Governance/UI/Function-Libraries/GithubProgram.js
@@ -106,8 +106,13 @@ function newGovernanceFunctionLibraryGithubProgram() {
userProfile.payload.blockchainTokens === undefined
) {
node.payload.githubProgram.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.")
+ userProfile.payload.uiObject.setErrorMessage(
+ "Waiting for blockchain balance. It takes 6 seconds to load the balance of each profile, bacause you are using a free API provided by BSC Scan.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
+ } else {
+ userProfile.payload.uiObject.resetErrorMessage()
}
/*
Next thing to do is to validate if the github user profile has a star at the Superalgos repository.
@@ -117,7 +122,10 @@ function newGovernanceFunctionLibraryGithubProgram() {
profileSignature === undefined
) {
node.payload.githubProgram.isActive = false
- userProfile.payload.uiObject.setErrorMessage("You need to setup this profile with the Profile Constructor, and produce a signature of your Github Username.")
+ userProfile.payload.uiObject.setErrorMessage(
+ "You need to setup this profile with the Profile Constructor, and produce a signature of your Github Username.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
let githubUsername = profileSignature.message
@@ -168,7 +176,10 @@ function newGovernanceFunctionLibraryGithubProgram() {
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.")
+ programNode.payload.uiObject.setErrorMessage(
+ "Tokens Awarded Node is needed in order for this Program to get Tokens from the Program Pool.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
const MAX_ENGAGEMENT = 3
@@ -185,7 +196,7 @@ function newGovernanceFunctionLibraryGithubProgram() {
node.payload.uiObject.statusAngleOffset = 0
node.payload.uiObject.statusAtAngle = false
- node.payload.uiObject.setStatus(ownPowerText + ' Github Power')
+ node.payload.uiObject.setStatus(ownPowerText + ' Github Power', UI.projects.governance.globals.designer.SET_STATUS_COUNTER)
}
if (node.tokensAwarded !== undefined && node.tokensAwarded.payload !== undefined) {
@@ -195,7 +206,7 @@ function newGovernanceFunctionLibraryGithubProgram() {
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.setValue(tokensAwardedText + ' SA Tokens' + tokensAwardedBTC, UI.projects.governance.globals.designer.SET_VALUE_COUNTER)
node.tokensAwarded.payload.uiObject.statusAngleOffset = 0
node.tokensAwarded.payload.uiObject.statusAtAngle = false
@@ -211,7 +222,7 @@ function newGovernanceFunctionLibraryGithubProgram() {
extraText = extraText + ' + 1 Fork'
}
- node.tokensAwarded.payload.uiObject.setStatus('From' + extraText)
+ node.tokensAwarded.payload.uiObject.setStatus('From' + extraText, UI.projects.governance.globals.designer.SET_STATUS_COUNTER)
}
}
}
diff --git a/Projects/Governance/UI/Function-Libraries/PluginsFunctions.js b/Projects/Governance/UI/Function-Libraries/PluginsFunctions.js
index c31b3a2b7..e8a4a29e5 100644
--- a/Projects/Governance/UI/Function-Libraries/PluginsFunctions.js
+++ b/Projects/Governance/UI/Function-Libraries/PluginsFunctions.js
@@ -12,7 +12,10 @@ function newGovernanceFunctionLibraryPluginsFunctions() {
let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node)
if (projectName === "" || projectName === undefined) {
if (node.payload.parentNode !== undefined) {
- node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.")
+ node.payload.parentNode.payload.uiObject.setErrorMessage(
+ "Config codeName must have the name of the project.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
}
@@ -28,7 +31,10 @@ function newGovernanceFunctionLibraryPluginsFunctions() {
let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node)
if (projectName === "" || projectName === undefined) {
if (node.payload.parentNode !== undefined) {
- node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.")
+ node.payload.parentNode.payload.uiObject.setErrorMessage(
+ "Config codeName must have the name of the project.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
}
@@ -44,7 +50,10 @@ function newGovernanceFunctionLibraryPluginsFunctions() {
let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node)
if (projectName === "" || projectName === undefined) {
if (node.payload.parentNode !== undefined) {
- node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.")
+ node.payload.parentNode.payload.uiObject.setErrorMessage(
+ "Config codeName must have the name of the project.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
}
@@ -60,7 +69,10 @@ function newGovernanceFunctionLibraryPluginsFunctions() {
let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node)
if (projectName === "" || projectName === undefined) {
if (node.payload.parentNode !== undefined) {
- node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.")
+ node.payload.parentNode.payload.uiObject.setErrorMessage(
+ "Config codeName must have the name of the project.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
}
@@ -76,7 +88,10 @@ function newGovernanceFunctionLibraryPluginsFunctions() {
let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node)
if (projectName === "" || projectName === undefined) {
if (node.payload.parentNode !== undefined) {
- node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.")
+ node.payload.parentNode.payload.uiObject.setErrorMessage(
+ "Config codeName must have the name of the project.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
}
diff --git a/Projects/Governance/UI/Function-Libraries/ProfileConstructor.js b/Projects/Governance/UI/Function-Libraries/ProfileConstructor.js
index 54eb74f35..eb09d4f6f 100644
--- a/Projects/Governance/UI/Function-Libraries/ProfileConstructor.js
+++ b/Projects/Governance/UI/Function-Libraries/ProfileConstructor.js
@@ -16,7 +16,10 @@ function newGovernanceFunctionLibraryProfileConstructor() {
let mnemonic = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(node.payload, 'mnemonic')
if (githubUsername === undefined || githubUsername === "") {
- node.payload.uiObject.setErrorMessage("githubUsername config property missing.")
+ node.payload.uiObject.setErrorMessage(
+ "githubUsername config property missing.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
@@ -48,7 +51,10 @@ function newGovernanceFunctionLibraryProfileConstructor() {
function onResponse(err, data) {
/* Lets check the result of the call through the http interface */
if (err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) {
- node.payload.uiObject.setErrorMessage('Call via HTTP Interface failed.')
+ node.payload.uiObject.setErrorMessage(
+ 'Call via HTTP Interface failed.',
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
@@ -58,11 +64,17 @@ function newGovernanceFunctionLibraryProfileConstructor() {
if (response.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) {
if (mnemonic === undefined || mnemonic === "") {
- node.payload.uiObject.setErrorMessage('Call to WEB3 Server failed. ' + response.error)
+ node.payload.uiObject.setErrorMessage(
+ 'Call to WEB3 Server failed. ' + response.error,
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
console.log('Call to WEB3 Server failed. ' + response.error)
return
} else {
- node.payload.uiObject.setErrorMessage('Call to WEB3 Server failed. Most likely the Mnemonic provided is not correct or you need to run node setup because a dependency is missing. ' + response.error)
+ node.payload.uiObject.setErrorMessage(
+ 'Call to WEB3 Server failed. Most likely the Mnemonic provided is not correct or you need to run node setup because a dependency is missing. ' + response.error,
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
console.log('Call to WEB3 Server failed. Most likely the Mnemonic provided is not correct or you need to run node setup because a dependency is missing. ' + response.error)
return
}
@@ -88,7 +100,10 @@ function newGovernanceFunctionLibraryProfileConstructor() {
function onResponse(err, data) {
/* Lets check the result of the call through the http interface */
if (err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) {
- node.payload.uiObject.setErrorMessage('Call via HTTP Interface failed.')
+ node.payload.uiObject.setErrorMessage(
+ 'Call via HTTP Interface failed.',
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
@@ -96,7 +111,10 @@ function newGovernanceFunctionLibraryProfileConstructor() {
/* Lets check the result of the method call */
if (response.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) {
- node.payload.uiObject.setErrorMessage('Call to WEB3 Server failed. ' + response.error)
+ node.payload.uiObject.setErrorMessage(
+ 'Call to WEB3 Server failed. ' + response.error,
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
console.log('Call to WEB3 Server failed. ' + response.error)
return
}
@@ -124,9 +142,15 @@ function newGovernanceFunctionLibraryProfileConstructor() {
Show nice message.
*/
if (mnemonic === undefined || mnemonic === "") {
- node.payload.uiObject.setInfoMessage("Profile Private Key has been successfully created. User Profile installed as a plugin and saved. Use the Private Key at a crypto wallet and delete this node once done.", 10000)
+ node.payload.uiObject.setInfoMessage(
+ "Profile Private Key has been successfully created. User Profile installed as a plugin and saved. Use the Private Key at a crypto wallet and delete this node once done.",
+ UI.projects.governance.globals.designer.SET_INFO_COUNTER_FACTOR
+ )
} else {
- node.payload.uiObject.setInfoMessage("Mnemonic successfully imported. User Profile installed as a plugin and saved. Your external wallet was sucessfully linked to your profile.", 10000)
+ node.payload.uiObject.setInfoMessage(
+ "Mnemonic successfully imported. User Profile installed as a plugin and saved. Your external wallet was sucessfully linked to your profile.",
+ UI.projects.governance.globals.designer.SET_INFO_COUNTER_FACTOR
+ )
}
}
}
diff --git a/Projects/Governance/UI/Function-Libraries/StakingProgram.js b/Projects/Governance/UI/Function-Libraries/StakingProgram.js
index 46c3f8338..d3b8a0263 100644
--- a/Projects/Governance/UI/Function-Libraries/StakingProgram.js
+++ b/Projects/Governance/UI/Function-Libraries/StakingProgram.js
@@ -106,10 +106,15 @@ function newGovernanceFunctionLibraryStakingProgram() {
userProfile.payload.blockchainTokens === undefined
) {
node.payload.stakingProgram.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.")
+ userProfile.payload.uiObject.setErrorMessage(
+ "Waiting for blockchain balance. It takes 6 seconds to load the balance of each profile, bacause you are using a free API provided by BSC Scan.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
+ } else {
+ userProfile.payload.uiObject.resetErrorMessage()
+ node.payload.stakingProgram.isActive = true
}
- node.payload.stakingProgram.isActive = true
}
function distributeProgram(programNode) {
@@ -142,7 +147,10 @@ function newGovernanceFunctionLibraryStakingProgram() {
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.")
+ programNode.payload.uiObject.setErrorMessage(
+ "Tokens Awarded Node is needed in order for this Program to get Tokens from the Program Pool.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
programNode.payload.stakingProgram.awarded.tokens = programNode.payload.stakingProgram.ownPower / totalPowerRewardRatio
@@ -158,7 +166,7 @@ function newGovernanceFunctionLibraryStakingProgram() {
node.payload.uiObject.statusAngleOffset = 0
node.payload.uiObject.statusAtAngle = false
- node.payload.uiObject.setStatus(ownPowerText + ' Staking Power')
+ node.payload.uiObject.setStatus(ownPowerText + ' Staking Power', UI.projects.governance.globals.designer.SET_STATUS_COUNTER)
}
if (node.tokensAwarded !== undefined && node.tokensAwarded.payload !== undefined) {
@@ -168,7 +176,7 @@ function newGovernanceFunctionLibraryStakingProgram() {
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.setValue(tokensAwardedText + ' SA Tokens' + tokensAwardedBTC, UI.projects.governance.globals.designer.SET_VALUE_COUNTER)
}
}
}
diff --git a/Projects/Governance/UI/Function-Libraries/TokenMining.js b/Projects/Governance/UI/Function-Libraries/TokenMining.js
index 7db6b6595..68abe13c7 100644
--- a/Projects/Governance/UI/Function-Libraries/TokenMining.js
+++ b/Projects/Governance/UI/Function-Libraries/TokenMining.js
@@ -174,8 +174,8 @@ function newGovernanceFunctionLibraryTokenMining() {
userProfile.tokensMined.payload.uiObject.valueAngleOffset = 0
userProfile.tokensMined.payload.uiObject.valueAtAngle = true
- userProfile.tokensMined.payload.uiObject.setStatus(awarded + ' Awarded + ' + bonus + ' Bonus')
- userProfile.tokensMined.payload.uiObject.setValue(total + ' SA Tokens' + tokensAwardedBTC)
+ userProfile.tokensMined.payload.uiObject.setStatus(awarded + ' Awarded + ' + bonus + ' Bonus', UI.projects.governance.globals.designer.SET_STATUS_COUNTER)
+ userProfile.tokensMined.payload.uiObject.setValue(total + ' SA Tokens' + tokensAwardedBTC, UI.projects.governance.globals.designer.SET_VALUE_COUNTER)
}
}
}
\ No newline at end of file
diff --git a/Projects/Governance/UI/Function-Libraries/TokenPower.js b/Projects/Governance/UI/Function-Libraries/TokenPower.js
index 7e38746ad..d588bc777 100644
--- a/Projects/Governance/UI/Function-Libraries/TokenPower.js
+++ b/Projects/Governance/UI/Function-Libraries/TokenPower.js
@@ -96,7 +96,10 @@ function newGovernanceFunctionLibraryTokenPower() {
Before we start we will do some validations:
*/
if (userProfile.tokenPowerSwitch === undefined) {
- userProfile.payload.uiObject.setErrorMessage("You need to have a Token Power Switch child node.")
+ userProfile.payload.uiObject.setErrorMessage(
+ "You need to have a Token Power Switch child node.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
distributeTokenPower(
@@ -119,7 +122,10 @@ function newGovernanceFunctionLibraryTokenPower() {
Before we start we will do some validations:
*/
if (userProfile.tokenPowerSwitch === undefined) {
- userProfile.payload.uiObject.setErrorMessage("You need to have a Token Power Switch child node.")
+ userProfile.payload.uiObject.setErrorMessage(
+ "You need to have a Token Power Switch child node.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
distributeTokenPower(
@@ -213,7 +219,10 @@ function newGovernanceFunctionLibraryTokenPower() {
}
}
if (totalPercentage > 100) {
- node.payload.uiObject.setErrorMessage('Token Power Switching Error. Total Percentage of children nodes is grater that 100.')
+ node.payload.uiObject.setErrorMessage(
+ 'Token Power Switching Error. Total Percentage of children nodes is grater that 100.',
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
let defaultPercentage = 0
@@ -287,7 +296,7 @@ function newGovernanceFunctionLibraryTokenPower() {
node.payload.uiObject.valueAngleOffset = 0
node.payload.uiObject.valueAtAngle = false
- node.payload.uiObject.setStatus(ownPowerText + ' + ' + incomingPowerText)
+ node.payload.uiObject.setStatus(ownPowerText + ' + ' + incomingPowerText, UI.projects.governance.globals.designer.SET_STATUS_COUNTER)
return
}
@@ -297,12 +306,14 @@ function newGovernanceFunctionLibraryTokenPower() {
node.payload.uiObject.valueAngleOffset = 180
node.payload.uiObject.valueAtAngle = true
- node.payload.uiObject.setValue(tokenPowerText)
+ node.payload.uiObject.setValue(tokenPowerText, UI.projects.governance.globals.designer.SET_VALUE_COUNTER)
if (percentage !== undefined) {
node.payload.uiObject.percentageAngleOffset = 180
node.payload.uiObject.percentageAtAngle = true
- node.payload.uiObject.setPercentage(percentage.toFixed(2))
+ node.payload.uiObject.setPercentage(percentage.toFixed(2),
+ UI.projects.governance.globals.designer.SET_PERCENTAGE_COUNTER
+ )
}
}
}
diff --git a/Projects/Governance/UI/Function-Libraries/Tokens.js b/Projects/Governance/UI/Function-Libraries/Tokens.js
index 4d30f56b0..2810130be 100644
--- a/Projects/Governance/UI/Function-Libraries/Tokens.js
+++ b/Projects/Governance/UI/Function-Libraries/Tokens.js
@@ -173,7 +173,7 @@ function newGovernanceFunctionLibraryTokens() {
node.payload.uiObject.statusAngleOffset = 0
node.payload.uiObject.statusAtAngle = true
- node.payload.uiObject.setStatus(status)
+ node.payload.uiObject.setStatus(status, UI.projects.governance.globals.designer.SET_STATUS_COUNTER)
} else {
status = 'Reward: ' + tokens.toLocaleString('en')
+ ' ' + 'SA' + ' ≃ ' + UI.projects.governance.utilities.conversions.estimateSATokensInBTC(tokens | 0) + ' BTC '
@@ -181,7 +181,7 @@ function newGovernanceFunctionLibraryTokens() {
node.payload.uiObject.statusAngleOffset = 0
node.payload.uiObject.statusAtAngle = false
- node.payload.uiObject.setStatus(status)
+ node.payload.uiObject.setStatus(status, UI.projects.governance.globals.designer.SET_STATUS_COUNTER)
}
}
}
\ No newline at end of file
diff --git a/Projects/Governance/UI/Function-Libraries/VotingProgram.js b/Projects/Governance/UI/Function-Libraries/VotingProgram.js
index e69bbe127..1ab72bf36 100644
--- a/Projects/Governance/UI/Function-Libraries/VotingProgram.js
+++ b/Projects/Governance/UI/Function-Libraries/VotingProgram.js
@@ -334,7 +334,10 @@ function newGovernanceFunctionLibraryVotingProgram() {
}
}
if (totalPercentage > 100) {
- node.payload.uiObject.setErrorMessage('Voting Power Switching Error. Total Percentage of children nodes is grater that 100.')
+ node.payload.uiObject.setErrorMessage(
+ 'Voting Power Switching Error. Total Percentage of children nodes is grater that 100.',
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
let defaultPercentage = 0
@@ -406,7 +409,9 @@ function newGovernanceFunctionLibraryVotingProgram() {
drawProgram(node, userProfile)
if (percentage !== undefined) {
- node.payload.uiObject.setPercentage(percentage.toFixed(2))
+ node.payload.uiObject.setPercentage(percentage.toFixed(2),
+ UI.projects.governance.globals.designer.SET_PERCENTAGE_COUNTER
+ )
}
return
}
@@ -457,10 +462,12 @@ function newGovernanceFunctionLibraryVotingProgram() {
node.payload.uiObject.valueAngleOffset = 0
node.payload.uiObject.valueAtAngle = true
- node.payload.uiObject.setValue(votesText)
+ node.payload.uiObject.setValue(votesText, UI.projects.governance.globals.designer.SET_VALUE_COUNTER)
if (percentage !== undefined) {
- node.payload.uiObject.setPercentage(percentage.toFixed(2))
+ node.payload.uiObject.setPercentage(percentage.toFixed(2),
+ UI.projects.governance.globals.designer.SET_PERCENTAGE_COUNTER
+ )
}
}
@@ -472,18 +479,20 @@ function newGovernanceFunctionLibraryVotingProgram() {
node.payload.uiObject.valueAngleOffset = 180
node.payload.uiObject.valueAtAngle = true
- node.payload.uiObject.setValue(outgoingPowerText + ' Voting Power')
+ node.payload.uiObject.setValue(outgoingPowerText + ' Voting Power', UI.projects.governance.globals.designer.SET_VALUE_COUNTER)
node.payload.uiObject.percentageAngleOffset = 180
node.payload.uiObject.percentageAtAngle = true
- node.payload.uiObject.setPercentage(percentage)
+ node.payload.uiObject.setPercentage(percentage,
+ UI.projects.governance.globals.designer.SET_PERCENTAGE_COUNTER
+ )
if (node.payload.referenceParent !== undefined) {
node.payload.uiObject.statusAngleOffset = 0
node.payload.uiObject.statusAtAngle = true
- node.payload.uiObject.setStatus(outgoingPowerText + ' ' + ' Outgoing Power')
+ node.payload.uiObject.setStatus(outgoingPowerText + ' ' + ' Outgoing Power', UI.projects.governance.globals.designer.SET_STATUS_COUNTER)
}
}
}
@@ -502,7 +511,7 @@ function newGovernanceFunctionLibraryVotingProgram() {
node.payload.uiObject.statusAngleOffset = 0
node.payload.uiObject.statusAtAngle = false
- node.payload.uiObject.setStatus(ownPowerText + ' Own Power' + ' + ' + incomingPowerText + ' Incoming Voting Power' + ' + ' + reputationPowerText + ' Reputation Power')
+ node.payload.uiObject.setStatus(ownPowerText + ' Own Power' + ' + ' + incomingPowerText + ' Incoming Voting Power' + ' + ' + reputationPowerText + ' Reputation Power', UI.projects.governance.globals.designer.SET_STATUS_COUNTER)
}
}
}
@@ -510,7 +519,10 @@ function newGovernanceFunctionLibraryVotingProgram() {
function installMissingVotes(node, rootNodes) {
if (node.payload === undefined) { return }
if (node.payload.referenceParent === undefined) {
- node.payload.uiObject.setErrorMessage('To install votes you need a Reference Parent')
+ node.payload.uiObject.setErrorMessage(
+ 'To install votes you need a Reference Parent',
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
scanNodeBranch(node, node.payload.referenceParent)
diff --git a/Projects/Governance/UI/Globals/Designer.js b/Projects/Governance/UI/Globals/Designer.js
new file mode 100644
index 000000000..9be7ea241
--- /dev/null
+++ b/Projects/Governance/UI/Globals/Designer.js
@@ -0,0 +1,11 @@
+function newGovernanceGlobalsDesigner() {
+ let thisObject = {
+ SET_VALUE_COUNTER: 1000,
+ SET_STATUS_COUNTER: 1000,
+ SET_ERROR_COUNTER_FACTOR: 10,
+ SET_INFO_COUNTER_FACTOR: 10,
+ SET_WARNING_COUNTER: 1000,
+ SET_PERCENTAGE_COUNTER: 1000
+ }
+ return thisObject
+}
\ No newline at end of file
diff --git a/Projects/Governance/UI/Spaces/Reports-Space/ReportsSpace.js b/Projects/Governance/UI/Spaces/Reports-Space/ReportsSpace.js
index 3487a3c57..af136f4fe 100644
--- a/Projects/Governance/UI/Spaces/Reports-Space/ReportsSpace.js
+++ b/Projects/Governance/UI/Spaces/Reports-Space/ReportsSpace.js
@@ -46,6 +46,8 @@ function newGobernanceReportsSpace() {
if (isInitialized === false) { return }
+ hidAppDiv()
+
thisObject.container.finalize()
thisObject.container = undefined
@@ -215,22 +217,38 @@ function newGobernanceReportsSpace() {
if (isInitialized === false) { return }
docsAppDivPhysics()
+ }
- function docsAppDivPhysics() {
- let docsSpaceDiv = document.getElementById('governance-reports-space-div')
- docsAppDivPosition = {
- x: 0,
- y: 0
- }
- docsAppDivPosition = thisObject.container.frame.frameThisPoint(docsAppDivPosition)
- docsSpaceDiv.style = ' ' +
- 'overflow-y: scroll;' +
- 'overflow-x: hidden;' +
- 'position:fixed; top:' + docsAppDivPosition.y + 'px; ' +
- 'left:' + docsAppDivPosition.x + 'px; z-index:1; ' +
- 'width: ' + thisObject.container.frame.width + 'px;' +
- 'height: ' + thisObject.container.frame.height + 'px'
+ function docsAppDivPhysics() {
+ let docsSpaceDiv = document.getElementById('governance-reports-space-div')
+ docsAppDivPosition = {
+ x: 0,
+ y: 0
}
+ docsAppDivPosition = thisObject.container.frame.frameThisPoint(docsAppDivPosition)
+ docsSpaceDiv.style = ' ' +
+ 'overflow-y: scroll;' +
+ 'overflow-x: hidden;' +
+ 'position:fixed; top:' + docsAppDivPosition.y + 'px; ' +
+ 'left:' + docsAppDivPosition.x + 'px; z-index:1; ' +
+ 'width: ' + thisObject.container.frame.width + 'px;' +
+ 'height: ' + thisObject.container.frame.height + 'px'
+ }
+
+ function hidAppDiv() {
+ let docsSpaceDiv = document.getElementById('governance-reports-space-div')
+ docsAppDivPosition = {
+ x: 100000000000,
+ y: 0
+ }
+ docsAppDivPosition = thisObject.container.frame.frameThisPoint(docsAppDivPosition)
+ docsSpaceDiv.style = ' ' +
+ 'overflow-y: scroll;' +
+ 'overflow-x: hidden;' +
+ 'position:fixed; top:' + docsAppDivPosition.y + 'px; ' +
+ 'left:' + docsAppDivPosition.x + 'px; z-index:1; ' +
+ 'width: ' + thisObject.container.frame.width + 'px;' +
+ 'height: ' + thisObject.container.frame.height + 'px'
}
function getContainer(point, purpose) {
diff --git a/Projects/Governance/UI/Spaces/User-Profile-Space/UserProfile.js b/Projects/Governance/UI/Spaces/User-Profile-Space/UserProfile.js
index 991feae51..d37d0f684 100644
--- a/Projects/Governance/UI/Spaces/User-Profile-Space/UserProfile.js
+++ b/Projects/Governance/UI/Spaces/User-Profile-Space/UserProfile.js
@@ -16,11 +16,18 @@ function newGovernanceUserProfileSpace() {
let waitingForResponses = 0
const BSC_SCAN_RATE_LIMIT_DELAY = 6000
+ const DISTRIBUTION_PROCESS_RECALCULATION_DELAY = 5000
+ let intervalId
let reputationByAddress = new Map()
return thisObject
function initialize() {
+ /*
+ Here we will run the distribution process, that in turn will run all the programs.
+ */
+ intervalId = setInterval(UI.projects.governance.functionLibraries.distributionProcess.calculate, DISTRIBUTION_PROCESS_RECALCULATION_DELAY)
+
/*
Here we will get a list of all github usernames who have a star or fork and are watching the
Superalgos Repository. This will later be used to know which user profiles are participating
@@ -292,6 +299,9 @@ function newGovernanceUserProfileSpace() {
}
function finalize() {
+ clearInterval(intervalId)
+ intervalId = undefined
+
thisObject.githubStars = undefined
thisObject.githubWatchers = undefined
thisObject.githubForks = undefined
@@ -320,10 +330,6 @@ function newGovernanceUserProfileSpace() {
function physics() {
if (UI.projects.foundations.spaces.designSpace.workspace === undefined) { return }
/*
- Here we will run the distribution process, that in turn will run all the programs.
- */
- UI.projects.governance.functionLibraries.distributionProcess.calculate()
- /*
Load the user profiles with Token Power.
*/
let userProfiles = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadsByNodeType('User Profile')
@@ -359,7 +365,10 @@ function newGovernanceUserProfileSpace() {
function onResponse(err, data) {
/* Lets check the result of the call through the http interface */
if (err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) {
- userProfile.payload.uiObject.setErrorMessage('Call via HTTP Interface failed.')
+ userProfile.payload.uiObject.setErrorMessage(
+ 'Call via HTTP Interface failed.',
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
@@ -367,7 +376,10 @@ function newGovernanceUserProfileSpace() {
/* Lets check the result of the method call */
if (response.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) {
- userProfile.payload.uiObject.setErrorMessage('Call to WEB3 Server failed. ' + response.error)
+ userProfile.payload.uiObject.setErrorMessage(
+ 'Call to WEB3 Server failed. ' + response.error,
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
console.log('Call to WEB3 Server failed. ' + response.error)
return
}
@@ -397,7 +409,9 @@ function newGovernanceUserProfileSpace() {
if (data.result === "Max rate limit reached, please use API Key for higher rate limit") {
userProfile.payload.blockchainTokens = undefined // This enables this profile to query the blockchain again.
} else {
- userProfile.payload.uiObject.setInfoMessage(data)
+ userProfile.payload.uiObject.setInfoMessage(data,
+ UI.projects.governance.globals.designer.SET_INFO_COUNTER_FACTOR
+ )
userProfile.payload.blockchainTokens = Number(data.result) / 1000000000000000000
userProfile.payload.reputation = Math.min(reputationByAddress.get(blockchainAccount.toLowerCase()) | 0, userProfile.payload.blockchainTokens)
}
@@ -406,7 +420,9 @@ function newGovernanceUserProfileSpace() {
const message = err.message + ' - ' + 'Can not access BSC SCAN servers.'
console.log(message)
if (userProfile.payload !== undefined) {
- userProfile.payload.uiObject.setErrorMessage(message, 1000)
+ userProfile.payload.uiObject.setErrorMessage(message,
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
}
waitingForResponses--
});
diff --git a/Projects/Governance/UI/Utilities/BonusProgram.js b/Projects/Governance/UI/Utilities/BonusProgram.js
index e89450c32..5ef959426 100644
--- a/Projects/Governance/UI/Utilities/BonusProgram.js
+++ b/Projects/Governance/UI/Utilities/BonusProgram.js
@@ -101,8 +101,13 @@ function newGovernanceUtilitiesBonusProgram() {
userProfile.payload.blockchainTokens === undefined
) {
node.payload[programPropertyName].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.")
+ userProfile.payload.uiObject.setErrorMessage(
+ "Waiting for blockchain balance. It takes 6 seconds to load the balance of each profile, bacause you are using a free API provided by BSC Scan.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
+ } else {
+ userProfile.payload.uiObject.resetErrorMessage()
}
}
@@ -135,7 +140,10 @@ function newGovernanceUtilitiesBonusProgram() {
if (totalPowerRewardRatio < 1) { totalPowerRewardRatio = 1 }
if (programNode.tokensBonus === undefined || programNode.tokensBonus.payload === undefined) {
- programNode.payload.uiObject.setErrorMessage("Tokens Bonus Node is needed in order for this Program to get Tokens from the Bonus Program Pool.")
+ programNode.payload.uiObject.setErrorMessage(
+ "Tokens Bonus Node is needed in order for this Program to get Tokens from the Bonus Program Pool.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
programNode.payload[programPropertyName].bonus.tokens = programNode.payload[programPropertyName].bonusPower / totalPowerRewardRatio
@@ -152,7 +160,7 @@ function newGovernanceUtilitiesBonusProgram() {
node.tokensBonus.payload.uiObject.valueAngleOffset = 0
node.tokensBonus.payload.uiObject.valueAtAngle = true
- node.tokensBonus.payload.uiObject.setValue(tokensBonusText + ' SA Tokens' + tokensAwardedBTC)
+ node.tokensBonus.payload.uiObject.setValue(tokensBonusText + ' SA Tokens' + tokensAwardedBTC, UI.projects.governance.globals.designer.SET_VALUE_COUNTER)
}
}
}
diff --git a/Projects/Governance/UI/Utilities/DecendentProgram.js b/Projects/Governance/UI/Utilities/DecendentProgram.js
index b38ce2397..3f604e612 100644
--- a/Projects/Governance/UI/Utilities/DecendentProgram.js
+++ b/Projects/Governance/UI/Utilities/DecendentProgram.js
@@ -168,8 +168,13 @@ function newGovernanceUtilitiesDecendentProgram() {
userProfile.payload.blockchainTokens === undefined
) {
node.payload[programPropertyName].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.")
+ userProfile.payload.uiObject.setErrorMessage(
+ "Waiting for blockchain balance. It takes 6 seconds to load the balance of each profile, bacause you are using a free API provided by BSC Scan.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
+ } else {
+ userProfile.payload.uiObject.resetErrorMessage()
}
/*
As per the system rules, the Program will not give tokens
@@ -182,7 +187,10 @@ function newGovernanceUtilitiesDecendentProgram() {
(node[usersArrayPropertyName] === undefined || hasUsersDefined(node[usersArrayPropertyName]) === false)
) {
node.payload[programPropertyName].isActive = false
- node.payload.uiObject.setErrorMessage("In order to enable this program you need to add " + userNodeType + " nodes and reference a User Profile from each one.")
+ node.payload.uiObject.setErrorMessage(
+ "In order to enable this program you need to add " + userNodeType + " nodes and reference a User Profile from each one.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
} else {
node.payload[programPropertyName].isActive = true
}
@@ -282,7 +290,10 @@ function newGovernanceUtilitiesDecendentProgram() {
}
}
if (totalPercentage > 100) {
- node.payload.uiObject.setErrorMessage('Program Power Switching Error. Total Percentage of children nodes is grater that 100.')
+ node.payload.uiObject.setErrorMessage(
+ 'Program Power Switching Error. Total Percentage of children nodes is grater that 100.',
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
let defaultPercentage = 0
@@ -371,7 +382,10 @@ function newGovernanceUtilitiesDecendentProgram() {
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.")
+ programNode.payload.uiObject.setErrorMessage(
+ "Tokens Awarded Node is needed in order for this Program to get Tokens from the Program Pool.",
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
programNode.payload[programPropertyName].awarded.tokens = programNode.payload[programPropertyName].incomingPower / totalPowerRewardRatio
@@ -387,17 +401,19 @@ function newGovernanceUtilitiesDecendentProgram() {
node.payload.uiObject.valueAngleOffset = 180
node.payload.uiObject.valueAtAngle = true
- node.payload.uiObject.setValue(outgoingPowerText + ' ' + programPowerName)
+ node.payload.uiObject.setValue(outgoingPowerText + ' ' + programPowerName, UI.projects.governance.globals.designer.SET_VALUE_COUNTER)
node.payload.uiObject.percentageAngleOffset = 180
node.payload.uiObject.percentageAtAngle = true
- node.payload.uiObject.setPercentage(percentage)
+ node.payload.uiObject.setPercentage(percentage,
+ UI.projects.governance.globals.designer.SET_PERCENTAGE_COUNTER
+ )
node.payload.uiObject.statusAngleOffset = 0
node.payload.uiObject.statusAtAngle = true
- node.payload.uiObject.setStatus(outgoingPowerText + ' ' + ' Outgoing Power')
+ node.payload.uiObject.setStatus(outgoingPowerText + ' ' + ' Outgoing Power', UI.projects.governance.globals.designer.SET_STATUS_COUNTER)
}
}
@@ -410,7 +426,7 @@ function newGovernanceUtilitiesDecendentProgram() {
node.payload.uiObject.statusAngleOffset = 0
node.payload.uiObject.statusAtAngle = false
- node.payload.uiObject.setStatus(ownPowerText + ' Own Power' + ' + ' + incomingPowerText + ' Incoming ' + programPowerName)
+ node.payload.uiObject.setStatus(ownPowerText + ' Own Power' + ' + ' + incomingPowerText + ' Incoming ' + programPowerName, UI.projects.governance.globals.designer.SET_STATUS_COUNTER)
}
if (node.tokensAwarded !== undefined && node.tokensAwarded.payload !== undefined) {
@@ -422,8 +438,8 @@ function newGovernanceUtilitiesDecendentProgram() {
node.tokensAwarded.payload.uiObject.valueAngleOffset = 0
node.tokensAwarded.payload.uiObject.valueAtAngle = true
- node.tokensAwarded.payload.uiObject.setValue(tokensAwardedText + ' SA Tokens' + tokensAwardedBTC)
- node.tokensAwarded.payload.uiObject.setStatus('From ' + node.payload[programPropertyName].count + ' Descendants.')
+ node.tokensAwarded.payload.uiObject.setValue(tokensAwardedText + ' SA Tokens' + tokensAwardedBTC, UI.projects.governance.globals.designer.SET_VALUE_COUNTER)
+ node.tokensAwarded.payload.uiObject.setStatus('From ' + node.payload[programPropertyName].count + ' Descendants.', UI.projects.governance.globals.designer.SET_STATUS_COUNTER)
}
}
}
diff --git a/Projects/Governance/UI/Utilities/Validations.js b/Projects/Governance/UI/Utilities/Validations.js
index 4b23c27ce..6abe955b3 100644
--- a/Projects/Governance/UI/Utilities/Validations.js
+++ b/Projects/Governance/UI/Utilities/Validations.js
@@ -12,7 +12,10 @@ function newGovernanceUtilitiesValidations () {
let programs = UI.projects.foundations.utilities.branches.nodeBranchToArray(userProfile, programNodeType)
if (programs !== undefined) {
if (programs.length > 1) {
- userProfile.payload.uiObject.setErrorMessage('Only one ' + programNodeType + ' is allowed.')
+ userProfile.payload.uiObject.setErrorMessage(
+ 'Only one ' + programNodeType + ' is allowed.',
+ UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
+ )
return
}
if (programs.length === 1) {
diff --git a/Projects/Network/NT/Modules/WebSocketsInterface.js b/Projects/Network/NT/Modules/WebSocketsInterface.js
index a1a286d87..003e6798b 100644
--- a/Projects/Network/NT/Modules/WebSocketsInterface.js
+++ b/Projects/Network/NT/Modules/WebSocketsInterface.js
@@ -9,12 +9,16 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
let clientInterface
let peerInterface
+ let web3 = new SA.nodeModules.web3()
+
return thisObject
function finalize() {
socketServer = undefined
clientInterface = undefined
peerInterface = undefined
+
+ web3 = undefined
}
function initialize() {
@@ -31,6 +35,8 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
function onConnection(socket) {
let caller = {}
+ let calledTimestamp = (new Date()).valueOf()
+
socket.on('message', onMenssage)
async function onMenssage(message) {
@@ -60,7 +66,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
switch (messageHeader.messageType) {
case "Handshake": {
- handshakeProducedure(socket, caller, messageHeader)
+ handshakeProducedure(socket, caller, calledTimestamp, messageHeader)
break
}
case "Request": {
@@ -88,6 +94,14 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
}
break
}
+ default: {
+ let response = {
+ result: 'Error',
+ message: 'messageType Not Supported.'
+ }
+ socket.send(JSON.stringify(response))
+ break
+ }
}
} catch (err) {
console.log('[ERROR] Web Sockets Interface -> setUpWebSocketServer -> err.stack = ' + err.stack)
@@ -95,75 +109,214 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
}
}
- function handshakeProducedure(socket, caller, messageHeader) {
+ function handshakeProducedure(socket, caller, calledTimestamp, messageHeader) {
/*
- The caller needs to identify itself as either a Network Client or Peer.
+ The handshage producedure have 2 steps, we need to know
+ now which one we are at.
*/
- if (messageHeader.callerRole === undefined) {
+ if (messageHeader.step === undefined) {
let response = {
result: 'Error',
- message: 'callerRole Not Provided.'
+ message: 'step Not Provided.'
}
socket.send(JSON.stringify(response))
return
}
-
- if (messageHeader.callerRole !== 'Network Client' && messageHeader.callerRole !== 'Network Peer') {
+ if (messageHeader.step !== 'One' && messageHeader.step !== 'Two') {
let response = {
result: 'Error',
- message: 'callerRole Not Supported.'
+ message: 'step Not Supported.'
}
socket.send(JSON.stringify(response))
return
}
+ switch (messageHeader.step) {
+ case 'One': {
+ handshakeStepOne()
+ break
+ }
+ case 'Two': {
+ handshakeStepTwo()
+ break
+ }
+ }
+ function handshakeStepOne() {
+ /*
+ The caller needs to identify itself as either a Network Client or Peer.
+ */
+ if (messageHeader.callerRole === undefined) {
+ let response = {
+ result: 'Error',
+ message: 'callerRole Not Provided.'
+ }
+ socket.send(JSON.stringify(response))
+ return
+ }
+
+ if (messageHeader.callerRole !== 'Network Client' && messageHeader.callerRole !== 'Network Peer') {
+ let response = {
+ result: 'Error',
+ message: 'callerRole Not Supported.'
+ }
+ socket.send(JSON.stringify(response))
+ return
+ }
+
+ caller.role = messageHeader.callerRole
+ /*
+ The caller needs to provide it's User Profile Handle.
+ */
+ if (messageHeader.callerProfileHandle === undefined) {
+ let response = {
+ result: 'Error',
+ message: 'callerProfileHandle Not Provided.'
+ }
+ socket.send(JSON.stringify(response))
+ return
+ }
+
+ caller.userProfileHandle = messageHeader.callerProfileHandle
+ /*
+ The caller needs to provide a callerTimestamp.
+ */
+ if (messageHeader.callerTimestamp === undefined) {
+ let response = {
+ result: 'Error',
+ message: 'callerTimestamp Not Provided.'
+ }
+ socket.send(JSON.stringify(response))
+ return
+ }
+ /*
+ The callerTimestamp can not be more that 1 minute old.
+ */
+ if (calledTimestamp - messageHeader.callerTimestamp > 60000) {
+ let response = {
+ result: 'Error',
+ message: 'callerTimestamp Too Old.'
+ }
+ socket.send(JSON.stringify(response))
+ return
+ }
+ /*
+ We will sign for the caller it's handle to prove our
+ Network Node identity.
+ */
+ let signedMessage = {
+ callerProfileHandle: messageHeader.callerProfileHandle,
+ calledProfileHandle: NT.NETWORK_NODE_USER_PROFILE_HANDLE,
+ callerTimestamp: messageHeader.callerTimestamp,
+ calledTimestamp: calledTimestamp
+ }
+ let signature = web3.eth.accounts.sign(JSON.stringify(signedMessage), NT.NETWORK_NODE_USER_PROFILE_PRIVATE_KEY)
- caller.role = messageHeader.callerRole
- /*
- We will identify the caller by the signature at the message.
- */
- if (messageHeader.signature === undefined) {
let response = {
- result: 'Error',
- message: 'signature Not Provided.'
+ result: 'Ok',
+ message: 'Handshake Step One Complete',
+ signature: JSON.stringify(signature)
}
socket.send(JSON.stringify(response))
- return
}
- let web3 = new SA.nodeModules.web3()
- let blockchainAccount = web3.eth.accounts.recover(messageHeader.signature)
+ function handshakeStepTwo() {
+ /*
+ We will check that the caller role has beed defined at Step One.
+ */
+ if (caller.role === undefined) {
+ let response = {
+ result: 'Error',
+ message: 'Handshake Step One Not Completed.'
+ }
+ socket.send(JSON.stringify(response))
+ return
+ }
+ /*
+ We will check the signature at the message.
+ */
+ if (messageHeader.signature === undefined) {
+ let response = {
+ result: 'Error',
+ message: 'signature Not Provided.'
+ }
+ socket.send(JSON.stringify(response))
+ return
+ }
+
+ let signature = JSON.parse(messageHeader.signature)
+ caller.blockchainAccount = web3.eth.accounts.recover(signature)
+
+ if (caller.blockchainAccount === undefined) {
+ let response = {
+ result: 'Error',
+ message: 'Bad Signature.'
+ }
+ socket.send(JSON.stringify(response))
+ return
+ }
+ /*
+ The signature gives us the blockchain account, and the account the user profile.
+ */
+ let witnessUserProfile = NT.projects.socialTrading.globals.memory.maps.USER_PROFILES_BY_BLOCHAIN_ACCOUNT.get(caller.blockchainAccount)
+
+ if (witnessUserProfile === undefined) {
+ let response = {
+ result: 'Error',
+ message: 'userProfile Not Found.'
+ }
+ socket.send(JSON.stringify(response))
+ return
+ }
+ /*
+ The user profile based on the blockchain account, based on the signature,
+ it is our witness user profile, to validate the caller.
+ */
+ let signedMessage = JSON.parse(signature.message)
+
+ if (signedMessage.callerProfileHandle !== witnessUserProfile.userProfileHandle) {
+ let response = {
+ result: 'Error',
+ message: 'callerProfileHandle Does Not Match witnessUserProfile.'
+ }
+ socket.send(JSON.stringify(response))
+ return
+ }
+ /*
+ We will check that the signature includes this Network Node handle, to avoid
+ man in the middle attackts.
+ */
+ if (signedMessage.calledProfileHandle !== NT.NETWORK_NODE_USER_PROFILE_HANDLE) {
+ let response = {
+ result: 'Error',
+ message: 'calledProfileHandle Does Not Match This Network Node Handle.'
+ }
+ socket.send(JSON.stringify(response))
+ return
+ }
+ /*
+ We will check that the timestamp in the signature is the one we sent to the caller.
+ */
+ if (signedMessage.calledTimestamp !== calledTimestamp) {
+ let response = {
+ result: 'Error',
+ message: 'calledTimestamp Does Not Match calledTimestamp On Record.'
+ }
+ socket.send(JSON.stringify(response))
+ return
+ }
+ /*
+ All validations have been completed, the Handshake Prcedure finished well.
+ */
+ /*
+ We will remember the user profile behind this caller.
+ */
+ caller.userProfile = witnessUserProfile
- if (caller.blockchainAccount === undefined) {
let response = {
- result: 'Error',
- message: 'Bad signature.'
+ result: 'Ok',
+ message: 'Handshake Successful.'
}
socket.send(JSON.stringify(response))
- return
}
- /*
- The signature gives us the blockchain account, and the account the user profile.
- */
- let userProfile = NT.projects.socialTrading.globals.memory.maps.USER_PROFILES_BY_BLOCHAIN_ACCOUNT.set(blockchainAccount)
-
- if (userProfile === undefined) {
- let response = {
- result: 'Error',
- message: 'userProfile Not Found.'
- }
- socket.send(JSON.stringify(response))
- return
- }
- /*
- We will remember the user profile behind this caller.
- */
- caller.userProfile = userProfile
-
- let response = {
- result: 'Ok',
- message: 'Handshake Successful.'
- }
- socket.send(JSON.stringify(response))
}
} catch (err) {
diff --git a/Projects/Network/SA/Modules/WebSocketsClient.js b/Projects/Network/SA/Modules/WebSocketsClient.js
index 01e53f1ed..150f31932 100644
--- a/Projects/Network/SA/Modules/WebSocketsClient.js
+++ b/Projects/Network/SA/Modules/WebSocketsClient.js
@@ -7,7 +7,10 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets
}
let socketClient
- let callbackFunction
+
+ let web3 = new SA.nodeModules.web3()
+ let called = {}
+ let selectedNetworkNode // This is a Network Node we pick to try to connect to.
return thisObject
@@ -16,86 +19,235 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets
socketClient = undefined
networkInterface = undefined
peerInterface = undefined
+
+ web3 = undefined
+ called = undefined
}
- function initialize() {
- socketClient = new SA.nodeModules.ws('ws://' + 'localhost' + ':' + global.env.NETWORK_WEB_SOCKETS_INTERFACE_PORT)
- //networkInterface = SA.projects.socialTrading.modules.networkInterface.newSocialTradingModulesNetworkInterface()
+ async function initialize() {
+ /*
+ Here we will pick a Network Node from all users profiles available that do have a Network Node running. // TODO
+ In the meantime, we will assume that we have chosen the following Network Node to connect to.
+ {
+ "githubUsername": "Test-Network-Node-Profile",
+ "address": "0xa153469c57A91F5a59Fc6c45A37aD8dbad85e417"
+ }
+ */
+ selectedNetworkNode = {
+ userProfileHandle: "Test-Network-Node-Profile",
+ blockchainAccount: "0xa153469c57A91F5a59Fc6c45A37aD8dbad85e417",
+ ranking: 0,
+ host: "localhost",
+ port: global.env.NETWORK_WEB_SOCKETS_INTERFACE_PORT
+ }
- setUpWebsocketClient()
+ socketClient = new SA.nodeModules.ws('ws://' + selectedNetworkNode.host + ':' + selectedNetworkNode.port)
+
+ await setUpWebsocketClient()
}
- function setUpWebsocketClient() {
- try {
- let handshakeDone = false
+ async function setUpWebsocketClient() {
- socketClient.onopen = () => { onConnection() }
- socketClient.onmessage = socketMessage => { onMenssage(socketMessage) }
- socketClient.onerror = err => { onError(err) }
+ return new Promise(connectToNewtwork)
- function onConnection() {
- /*
- Send Handshake Message
- */
- socketClient.send('Handshake Message')
- console.log('Handshake Message Sent')
+ function connectToNewtwork(resolve, reject) {
+
+ try {
+
+ socketClient.onopen = () => { onConnection() }
+ socketClient.onerror = err => { onError(err) }
+
+ function onConnection() {
+
+ handshakeProcedure()
+
+ function handshakeProcedure() {
+
+ let callerTimestamp
+
+ stepOneRequest()
+
+ function stepOneRequest() {
+ /*
+ Send Handshake Message Step One:
+
+ At Step One we will just say hello, identify ourselves
+ as a Network Client, and send the Network Node our
+ User Profile Handle.
+
+ This Handle will be signed by the Network Node to prove
+ it's ouwn identity, and later we will sign it's own handle
+ to prove ours.
+ */
+ socketClient.onmessage = socketMessage => { stepOneResponse(socketMessage) }
+
+ callerTimestamp = (new Date()).valueOf()
+
+ let message = {
+ messageType: 'Handshake',
+ callerRole: 'Network Client',
+ callerProfileHandle: DK.TEST_NETWORK_CLIENT_USER_PROFILE_HANDLE,
+ callerTimestamp: callerTimestamp,
+ step: 'One'
+ }
+ socketClient.send(JSON.stringify(message))
+ }
+
+ function stepOneResponse(socketMessage) {
+ let response = JSON.parse(socketMessage.data)
+
+ if (response.result !== 'Ok') {
+ console.log('[ERROR] Web Sockets Client -> stepOneResponse -> response.message = ' + response.message)
+ reject()
+ return
+ }
+
+ let signature = JSON.parse(response.signature)
+ called.blockchainAccount = web3.eth.accounts.recover(signature)
+ /*
+ We will check that the signature received produces a valid Blockchain Account.
+ */
+ if (called.blockchainAccount === undefined) {
+ console.log('[ERROR] Web Sockets Client -> stepOneResponse -> Signature does not produce a valid Blockchain Account.')
+ reject()
+ return
+ }
+ /*
+ We will check that the blockchain account taken from the signature matches
+ the one we have on record for the user profile of the Network Node we are calling.
+ */
+ if (called.blockchainAccount !== selectedNetworkNode.blockchainAccount) {
+ console.log('[ERROR] Web Sockets Client -> stepOneResponse -> The Network Node called does not have the expected Profile Handle.')
+ reject()
+ return
+ }
+
+ let signedMessage = JSON.parse(signature.message)
+
+ /*
+ We will check that the Network Node that responded has the same User Profile Handle
+ that we have on record, otherwise something is wrong and we should not proceed.
+ */
+ if (signedMessage.calledProfileHandle !== selectedNetworkNode.userProfileHandle) {
+ console.log('[ERROR] Web Sockets Client -> stepOneResponse -> The Network Node called does not have the expected Profile Handle.')
+ reject()
+ return
+ }
+ /*
+ We will check that the profile handle we sent to the Network Node, is returned at the
+ signed message, to avoid man in the middle attackts.
+ */
+ if (signedMessage.callerProfileHandle !== DK.TEST_NETWORK_CLIENT_USER_PROFILE_HANDLE) {
+ console.log('[ERROR] Web Sockets Client -> stepOneResponse -> The Network Node callerProfileHandle does not match my own userProfileHandle.')
+ reject()
+ return
+ }
+ /*
+ We will also check that the callerTimestamp we sent to the Network Node, is returned at the
+ signed message, also to avoid man in the middle attackts.
+ */
+ if (signedMessage.callerTimestamp !== callerTimestamp) {
+ console.log('[ERROR] Web Sockets Client -> stepOneResponse -> The Network Node callerTimestamp does not match my own callerTimestamp.')
+ reject()
+ return
+ }
+
+ /*
+ All validations passed, it seems we can continue with Step Two.
+ */
+ stepTwoRequest(signedMessage)
+ }
+
+ function stepTwoRequest(signedMessage) {
+ /*
+ Send Handshake Message Step Two:
+
+ Here we will sign a message with the Network Node profile
+ handle and timestamp to prove our own identity.
+ */
+ socketClient.onmessage = socketMessage => { stepTwoResponse(socketMessage) }
+
+ let signature = web3.eth.accounts.sign(JSON.stringify(signedMessage), DK.TEST_NETWORK_CLIENT_USER_PROFILE_PRIVATE_KEY)
+
+ let message = {
+ messageType: 'Handshake',
+ signature: JSON.stringify(signature),
+ step: 'Two'
+ }
+ socketClient.send(JSON.stringify(message))
+ }
+
+ function stepTwoResponse(socketMessage) {
+ let response = JSON.parse(socketMessage.data)
+
+ if (response.result !== 'Ok') {
+ console.log('[ERROR] Web Sockets Client -> stepOneResponse -> response.message = ' + response.message)
+ reject()
+ return
+ }
+ console.log('[INFO] Web Sockets Client -> stepTwoResponse -> response.message = ' + response.message)
+ /*
+ This was the end of the Handshake producere. We are connected to the
+ Network Node and from now on, all response messages will be received
+ at this following function.
+ */
+ resolve()
+ }
+ }
+ }
+
+ function onError(err) {
+ console.log('[ERROR] Web Sockets Client -> onError -> err.message = ' + err.message)
+ console.log('[ERROR] Web Sockets Client -> onError -> err.stack = ' + err.stack)
+ }
+
+ } catch (err) {
+ console.log('[ERROR] Web Sockets Client -> setUpWebsocketClient -> err.stack = ' + err.stack)
}
- async function onMenssage(socketMessage) {
+ }
+ }
+
+ function sendMessage(message) {
+
+ return new Promise(sendSocketMessage)
+
+ function sendSocketMessage(resolve, reject) {
+
+ if (socketClient.readyState !== 1) { // 1 means connected and ready.
+ console.log('[ERROR] Web Sockets Client -> sendMessage -> Cannot send message while connection is closed.')
+ reject('Websockets Connection Not Ready.')
+ }
+
+ let socketMessage = {
+ messageType: 'Request',
+ payload: message
+ }
+ socketClient.onmessage = socketMessage => { onMenssage(socketMessage) }
+ socketClient.send(
+ JSON.stringify(socketMessage)
+ )
+
+ function onMenssage(socketMessage) {
try {
let response = JSON.parse(socketMessage.data)
/*
Chack if we are waiting for the Handshake response.
*/
- if (handshakeDone === false) {
- if (response.result === 'Ok') {
- handshakeDone = true
- return
- } else {
- console.log('[ERROR] Web Sockets Client -> onMenssage -> handshakeDone -> message.response = ' + response.message)
- return
- }
- }
- callbackFunction.receiveResponse(message)
- callbackFunction = undefined
+ if (response.result === 'Ok') {
+ resolve(response.data)
+ } else {
+ console.log('[ERROR] Web Sockets Client -> onMenssage -> response.message = ' + response.message)
+ reject(response.message)
+ }
} catch (err) {
callbackFunction = undefined
console.log('[ERROR] Web Sockets Client -> err.stack = ' + err.stack)
}
}
-
- function onError(err) {
- console.log('[ERROR] Web Sockets Client -> onError -> err.message = ' + err.message)
- console.log('[ERROR] Web Sockets Client -> onError -> err.stack = ' + err.stack)
- }
-
- } catch (err) {
- console.log('[ERROR] Web Sockets Client -> setUpWebsocketClient -> err.stack = ' + err.stack)
- }
- }
-
- function sendMessage(message, callback) {
- if (callbackFunction !== undefined) {
- console.log('[ERROR] Web Sockets Client -> sendMessage -> Cannot send more messages while waiting for a response.')
- return false
- }
-
- if (socketClient.readyState !== 1) { // 1 means connected and ready.
- console.log('[ERROR] Web Sockets Client -> sendMessage -> Cannot send message while connection is closed.')
- return false
- }
-
- try {
- callbackFunction = callback
- socketClient.send(message)
- return true
- } catch (err) {
- callbackFunction = false
- console.log('[ERROR] Web Sockets Client -> sendMessage -> err.stack = ' + err.stack)
- return false
}
}
}
\ No newline at end of file
diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json
index b67c60a29..6cc52d73f 100644
--- a/Projects/ProjectsSchema.json
+++ b/Projects/ProjectsSchema.json
@@ -1079,6 +1079,11 @@
"propertyName": "governance",
"UI": {
"globals": [
+ {
+ "name": "Designer",
+ "propertyName": "designer",
+ "functionName": "newGovernanceGlobalsDesigner"
+ },
{
"name": "Reports",
"propertyName": "reports",
@@ -1301,12 +1306,6 @@
"propertyName": "socialTrading",
"NT": {
"globals": [
- {
- "name": "Query Constants",
- "propertyName": "queryConstants",
- "functionName": "newSocialTradingGlobalsQueryConstants",
- "fileName": "QueryConstants.js"
- },
{
"name": "Memory",
"propertyName": "memory",
@@ -1315,6 +1314,12 @@
}
],
"modules": [
+ {
+ "name": "User Profiles",
+ "propertyName": "queriesUserProfiles",
+ "functionName": "newSocialTradingModulesQueriesUserProfiles",
+ "fileName": "Queries/UserProfiles.js"
+ },
{
"name": "Bot Profile Stats",
"propertyName": "queriesBotProfileStats",
@@ -1389,7 +1394,7 @@
},
{
"name": "Query",
- "propertyName": "Query",
+ "propertyName": "query",
"functionName": "newSocialTradingModulesQuery",
"fileName": "Query.js"
},
@@ -1420,6 +1425,22 @@
"fileName": "QueriesValidations.js"
}
]
+ },
+ "SA": {
+ "globals": [
+ {
+ "name": "Query Constants",
+ "propertyName": "queryConstants",
+ "functionName": "newSocialTradingGlobalsQueryConstants",
+ "fileName": "QueryConstants.js"
+ },
+ {
+ "name": "Query Types",
+ "propertyName": "queryTypes",
+ "functionName": "newSocialTradingGlobalsQueryTypes",
+ "fileName": "QueryTypes.js"
+ }
+ ]
}
}
]
\ No newline at end of file
diff --git a/Projects/Social-Trading/NT/Modules/ClientInterface.js b/Projects/Social-Trading/NT/Modules/ClientInterface.js
index bbfd8b8f1..b74c0b675 100644
--- a/Projects/Social-Trading/NT/Modules/ClientInterface.js
+++ b/Projects/Social-Trading/NT/Modules/ClientInterface.js
@@ -35,23 +35,23 @@ exports.newSocialTradingModulesClientInterface = function newSocialTradingModule
return response
}
- if (messageHeader.messageType === undefined) {
+ if (messageHeader.requestType === undefined) {
let response = {
result: 'Error',
- message: 'Client Interface messageType Not Provided.'
+ message: 'Client Interface requestType Not Provided.'
}
return response
}
- if (messageHeader.messageType !== 'Event' && messageHeader.messageType !== 'Query') {
+ if (messageHeader.requestType !== 'Event' && messageHeader.requestType !== 'Query') {
let response = {
result: 'Error',
- message: 'Client Interface messageType Not Supported.'
+ message: 'Client Interface requestType Not Supported.'
}
return response
}
- switch (messageHeader.messageType) {
+ switch (messageHeader.requestType) {
case 'Event': {
return await eventReceived(messageHeader.eventMessage, userProfile)
}
@@ -145,7 +145,6 @@ exports.newSocialTradingModulesClientInterface = function newSocialTradingModule
We expect here a JSON string with some or all of the following properties:
{
- "equeryId": "a8de78f0-c3e4-4a2a-b7e8-f659073969db",
"queryType": 10,
"emitterUserProfileId": "a8de78f0-c3e4-4a2a-b7e8-f659073969db",
"targetUserProfileId": "a8de78f0-c3e4-4a2a-b7e8-f659073969db",
@@ -190,9 +189,15 @@ exports.newSocialTradingModulesClientInterface = function newSocialTradingModule
Here we will process the query. This does not change the state of the Social Graph.
*/
try {
- let query = NT.projects.socialTrading.modules.queriesQuery.newSocialTradingModulesQuery()
+ let query = NT.projects.socialTrading.modules.query.newSocialTradingModulesQuery()
query.initialize(queryReceived)
- return query.execute()
+
+ let response = {
+ result: 'Ok',
+ message: 'Client Interface Query Processed.',
+ data: query.execute()
+ }
+ return response
} catch (err) {
/*
@@ -200,7 +205,7 @@ exports.newSocialTradingModulesClientInterface = function newSocialTradingModule
*/
let response = {
result: 'Error',
- message: 'Client Interface ' + err.message
+ message: err.message
}
return response
}
diff --git a/Projects/Social-Trading/NT/Modules/Queries/Events.js b/Projects/Social-Trading/NT/Modules/Queries/Events.js
index 0565bf027..1732fe794 100644
--- a/Projects/Social-Trading/NT/Modules/Queries/Events.js
+++ b/Projects/Social-Trading/NT/Modules/Queries/Events.js
@@ -21,15 +21,15 @@ exports.newSocialTradingModulesQueriesEvents = function newSocialTradingModulesQ
function initialize(queryReceived) {
- NT.utilities.queriesValidations.profilesValidations(queryReceived, thisObject)
- NT.utilities.queriesValidations.arrayValidations(queryReceived, thisObject)
+ NT.projects.socialTrading.utilities.queriesValidations.profilesValidations(queryReceived, thisObject)
+ NT.projects.socialTrading.utilities.queriesValidations.arrayValidations(queryReceived, thisObject, NT.memory.arrays.EVENTS)
}
function execute() {
let response = []
switch (thisObject.direction) {
- case NT.projects.socialTrading.globals.queryConstants.DIRECTION_FUTURE: {
+ case SA.projects.socialTrading.globals.queryConstants.DIRECTION_FUTURE: {
for (let i = thisObject.initialIndex; i < thisObject.initialIndex + thisObject.amountRequested; i++) {
let event = NT.memory.arrays.EVENTS[i]
if (event === undefined) { break }
@@ -37,7 +37,7 @@ exports.newSocialTradingModulesQueriesEvents = function newSocialTradingModulesQ
}
break
}
- case NT.projects.socialTrading.globals.queryConstants.DIRECTION_PAST: {
+ case SA.projects.socialTrading.globals.queryConstants.DIRECTION_PAST: {
for (let i = thisObject.initialIndex; i > thisObject.initialIndex - thisObject.amountRequested; i--) {
let event = NT.memory.arrays.EVENTS[i]
if (event === undefined) { break }
@@ -78,11 +78,9 @@ exports.newSocialTradingModulesQueriesEvents = function newSocialTradingModulesQ
/*
The context is a User Profile
*/
- if (emitterUserProfile !== undefined) {
- if (emitterUserProfile.userProfileId === thisObject.profile.userProfileId) {
- addToResponse(event)
- return
- }
+ if (emitterUserProfile.userProfileId === thisObject.profile.userProfileId) {
+ addToResponse(event)
+ return
}
if (targetUserProfile !== undefined) {
if (targetUserProfile.userProfileId === thisObject.profile.userProfileId) {
@@ -107,7 +105,6 @@ exports.newSocialTradingModulesQueriesEvents = function newSocialTradingModulesQ
}
}
}
-
/*
Test #2 : The Emitter or Traget profile must be at the Following map of the Context Profile.
*/
@@ -115,11 +112,9 @@ exports.newSocialTradingModulesQueriesEvents = function newSocialTradingModulesQ
/*
The context is a User Profile
*/
- if (emitterUserProfile !== undefined) {
- if (thisObject.profile.following.get(emitterUserProfile.userProfileId) !== undefined) {
- addToResponse(event)
- return
- }
+ if (thisObject.profile.following.get(emitterUserProfile.userProfileId) !== undefined) {
+ addToResponse(event)
+ return
}
if (targetUserProfile !== undefined) {
if (thisObject.profile.following.get(targetUserProfile.userProfileId) !== undefined) {
diff --git a/Projects/Social-Trading/NT/Modules/Queries/PostReplies.js b/Projects/Social-Trading/NT/Modules/Queries/PostReplies.js
index 4c0b63ecf..d9af6ea72 100644
--- a/Projects/Social-Trading/NT/Modules/Queries/PostReplies.js
+++ b/Projects/Social-Trading/NT/Modules/Queries/PostReplies.js
@@ -8,6 +8,7 @@ exports.newSocialTradingModulesQueriesPostReplies = function newSocialTradingMod
of a certain post, with all its replies.
*/
let thisObject = {
+ array: undefined,
profile: undefined,
post: undefined,
initialIndex: undefined,
@@ -21,35 +22,38 @@ exports.newSocialTradingModulesQueriesPostReplies = function newSocialTradingMod
return thisObject
function finalize() {
+ thisObject.array = undefined
thisObject.profile = undefined
thisObject.post = undefined
}
function initialize(queryReceived) {
- NT.utilities.queriesValidations.profilesValidations(queryReceived, thisObject)
- NT.utilities.queriesValidations.postValidations(queryReceived, thisObject)
- NT.utilities.queriesValidations.arrayValidations(queryReceived, thisObject)
+ thisObject.array = Array.from(thisObject.post.replies)
+
+ NT.projects.socialTrading.utilities.queriesValidations.profilesValidations(queryReceived, thisObject)
+ NT.projects.socialTrading.utilities.queriesValidations.postValidations(queryReceived, thisObject)
+ NT.projects.socialTrading.utilities.queriesValidations.arrayValidations(queryReceived, thisObject, thisObject.array)
}
function execute() {
let response = []
- let array = Array.from(thisObject.post.replies)
+
switch (thisObject.direction) {
- case NT.projects.socialTrading.globals.queryConstants.DIRECTION_FUTURE: {
+ case SA.projects.socialTrading.globals.queryConstants.DIRECTION_FUTURE: {
for (let i = thisObject.initialIndex; i < thisObject.initialIndex + thisObject.amountRequested; i++) {
- let arrayItem = array[i]
+ let arrayItem = thisObject.array[i]
if (post === undefined) { break }
addToResponse(arrayItem)
}
break
}
- case NT.projects.socialTrading.globals.queryConstants.DIRECTION_PAST: {
+ case SA.projects.socialTrading.globals.queryConstants.DIRECTION_PAST: {
for (let i = thisObject.initialIndex; i > thisObject.initialIndex - thisObject.amountRequested; i--) {
- let arrayItem = array[i]
+ let arrayItem = thisObject.array[i]
if (post === undefined) { break }
addToResponse(arrayItem)
}
diff --git a/Projects/Social-Trading/NT/Modules/Queries/ProfileFollowers.js b/Projects/Social-Trading/NT/Modules/Queries/ProfileFollowers.js
index 5b500c24c..ce9ba104d 100644
--- a/Projects/Social-Trading/NT/Modules/Queries/ProfileFollowers.js
+++ b/Projects/Social-Trading/NT/Modules/Queries/ProfileFollowers.js
@@ -4,6 +4,7 @@ exports.newSocialTradingModulesQueriesProfileFollowers = function newSocialTradi
all the User or Bot profiles that are following a certain User or Bot profile.
*/
let thisObject = {
+ array: undefined,
profile: undefined,
initialIndex: undefined,
amountRequested: undefined,
@@ -16,25 +17,27 @@ exports.newSocialTradingModulesQueriesProfileFollowers = function newSocialTradi
return thisObject
function finalize() {
+ thisObject.array = undefined
thisObject.profile = undefined
}
function initialize(queryReceived) {
- NT.utilities.queriesValidations.profilesValidations(queryReceived, thisObject)
- NT.utilities.queriesValidations.arrayValidations(queryReceived, thisObject)
+ thisObject.array = Array.from(thisObject.profile.followers)
+
+ NT.projects.socialTrading.utilities.queriesValidations.profilesValidations(queryReceived, thisObject)
+ NT.projects.socialTrading.utilities.queriesValidations.arrayValidations(queryReceived, thisObject, thisObject.array)
}
function execute() {
let response = []
- let array = Array.from(thisObject.profile.followers)
switch (thisObject.direction) {
- case NT.projects.socialTrading.globals.queryConstants.DIRECTION_FUTURE: {
+ case SA.projects.socialTrading.globals.queryConstants.DIRECTION_FUTURE: {
for (let i = thisObject.initialIndex; i < thisObject.initialIndex + thisObject.amountRequested; i++) {
- let arrayItem = array[i]
+ let arrayItem = thisObject.array[i]
if (arrayItem === undefined) { break }
addToResponse(arrayItem)
}
@@ -42,7 +45,7 @@ exports.newSocialTradingModulesQueriesProfileFollowers = function newSocialTradi
}
case NT.projects.socialTrading.globals.queryConstants.DIRECTION_PAST: {
for (let i = thisObject.initialIndex; i > thisObject.initialIndex - thisObject.amountRequested; i--) {
- let arrayItem = array[i]
+ let arrayItem = thisObject.array[i]
if (arrayItem === undefined) { break }
addToResponse(arrayItem)
}
diff --git a/Projects/Social-Trading/NT/Modules/Queries/ProfileFollowing.js b/Projects/Social-Trading/NT/Modules/Queries/ProfileFollowing.js
index aa21b6193..a04791cac 100644
--- a/Projects/Social-Trading/NT/Modules/Queries/ProfileFollowing.js
+++ b/Projects/Social-Trading/NT/Modules/Queries/ProfileFollowing.js
@@ -4,6 +4,7 @@ exports.newSocialTradingModulesQueriesProfileFollowing = function newSocialTradi
all the User or Bot profiles that are being followed by a certain User or Bot profile.
*/
let thisObject = {
+ array: undefined,
profile: undefined,
initialIndex: undefined,
amountRequested: undefined,
@@ -16,33 +17,35 @@ exports.newSocialTradingModulesQueriesProfileFollowing = function newSocialTradi
return thisObject
function finalize() {
+ thisObject.array = undefined
thisObject.profile = undefined
}
function initialize(queryReceived) {
- NT.utilities.queriesValidations.profilesValidations(queryReceived, thisObject)
- NT.utilities.queriesValidations.arrayValidations(queryReceived, thisObject)
+ thisObject.array = Array.from(thisObject.profile.following)
+
+ NT.projects.socialTrading.utilities.queriesValidations.profilesValidations(queryReceived, thisObject)
+ NT.projects.socialTrading.utilities.queriesValidations.arrayValidations(queryReceived, thisObject, thisObject.array)
}
function execute() {
let response = []
- let array = Array.from(thisObject.profile.following)
switch (thisObject.direction) {
- case NT.projects.socialTrading.globals.queryConstants.DIRECTION_FUTURE: {
+ case SA.projects.socialTrading.globals.queryConstants.DIRECTION_FUTURE: {
for (let i = thisObject.initialIndex; i < thisObject.initialIndex + thisObject.amountRequested; i++) {
- let arrayItem = array[i]
+ let arrayItem = thisObject.array[i]
if (arrayItem === undefined) { break }
addToResponse(arrayItem)
}
break
}
- case NT.projects.socialTrading.globals.queryConstants.DIRECTION_PAST: {
+ case SA.projects.socialTrading.globals.queryConstants.DIRECTION_PAST: {
for (let i = thisObject.initialIndex; i > thisObject.initialIndex - thisObject.amountRequested; i--) {
- let arrayItem = array[i]
+ let arrayItem = thisObject.array[i]
if (arrayItem === undefined) { break }
addToResponse(arrayItem)
}
diff --git a/Projects/Social-Trading/NT/Modules/Queries/ProfilePosts.js b/Projects/Social-Trading/NT/Modules/Queries/ProfilePosts.js
index c14dcd49f..a1971be61 100644
--- a/Projects/Social-Trading/NT/Modules/Queries/ProfilePosts.js
+++ b/Projects/Social-Trading/NT/Modules/Queries/ProfilePosts.js
@@ -8,6 +8,7 @@ exports.newSocialTradingModulesQueriesUserProfileStats = function newSocialTradi
with all of its posts.
*/
let thisObject = {
+ array: undefined,
profile: undefined,
initialIndex: undefined,
amountRequested: undefined,
@@ -20,32 +21,34 @@ exports.newSocialTradingModulesQueriesUserProfileStats = function newSocialTradi
return thisObject
function finalize() {
+ thisObject.array = undefined
thisObject.profile = undefined
}
function initialize(queryReceived) {
- NT.utilities.queriesValidations.profilesValidations(queryReceived, thisObject)
- NT.utilities.queriesValidations.arrayValidations(queryReceived, thisObject)
+ thisObject.array = Array.from(thisObject.profile.posts)
+
+ NT.projects.socialTrading.utilities.queriesValidations.profilesValidations(queryReceived, thisObject)
+ NT.projects.socialTrading.utilities.queriesValidations.arrayValidations(queryReceived, thisObject, thisObject.array)
}
function execute() {
let response = []
- let array = Array.from(thisObject.profile.posts)
switch (thisObject.direction) {
- case NT.projects.socialTrading.globals.queryConstants.DIRECTION_FUTURE: {
+ case SA.projects.socialTrading.globals.queryConstants.DIRECTION_FUTURE: {
for (let i = thisObject.initialIndex; i < thisObject.initialIndex + thisObject.amountRequested; i++) {
- let arrayItem = array[i]
+ let arrayItem = thisObject.array[i]
if (arrayItem === undefined) { break }
addToResponse(arrayItem)
}
break
}
- case NT.projects.socialTrading.globals.queryConstants.DIRECTION_PAST: {
+ case SA.projects.socialTrading.globals.queryConstants.DIRECTION_PAST: {
for (let i = thisObject.initialIndex; i > thisObject.initialIndex - thisObject.amountRequested; i--) {
- let arrayItem = array[i]
+ let arrayItem = thisObject.array[i]
if (arrayItem === undefined) { break }
addToResponse(arrayItem)
}
diff --git a/Projects/Social-Trading/NT/Modules/Queries/UserProfiles.js b/Projects/Social-Trading/NT/Modules/Queries/UserProfiles.js
new file mode 100644
index 000000000..bf5223624
--- /dev/null
+++ b/Projects/Social-Trading/NT/Modules/Queries/UserProfiles.js
@@ -0,0 +1,75 @@
+exports.newSocialTradingModulesQueriesUserProfiles = function newSocialTradingModulesQueriesUserProfiles() {
+ /*
+ This query returns a list of user profiles ordered
+ by Ranking. It is useful to bootstrap new users
+ and provide them with alternative of who to follow.
+ */
+ let thisObject = {
+ array: undefined,
+ initialIndex: undefined,
+ amountRequested: undefined,
+ direction: undefined,
+ execute: execute,
+ initialize: initialize,
+ finalize: finalize
+ }
+
+ return thisObject
+
+ function finalize() {
+ thisObject.array = undefined
+ }
+
+ function initialize(queryReceived) {
+
+ thisObject.array = Array.from(
+ NT.projects.socialTrading.globals.memory.maps.USER_PROFILES_BY_ID,
+ x => x[1]
+ )
+ thisObject.array.sort((a, b) => (a["ranking"] > b["ranking"]) ? 1 : -1)
+
+ NT.projects.socialTrading.utilities.queriesValidations.arrayValidations(queryReceived, thisObject, thisObject.array)
+
+ }
+
+ function execute() {
+
+ let response = []
+
+ switch (thisObject.direction) {
+ case SA.projects.socialTrading.globals.queryConstants.DIRECTION_FUTURE: {
+ for (let i = thisObject.initialIndex; i < thisObject.initialIndex + thisObject.amountRequested; i++) {
+ let arrayItem = thisObject.array[i]
+ if (arrayItem === undefined) { break }
+ addToResponse(arrayItem)
+ }
+ break
+ }
+ case SA.projects.socialTrading.globals.queryConstants.DIRECTION_PAST: {
+ for (let i = thisObject.initialIndex; i > thisObject.initialIndex - thisObject.amountRequested; i--) {
+ let arrayItem = thisObject.array[i]
+ if (arrayItem === undefined) { break }
+ addToResponse(arrayItem)
+ }
+ break
+ }
+ }
+ return response
+
+ function addToResponse(profile) {
+ let postResponse = {
+ "userProfileId": profile.userProfileId,
+ "userProfileHandle": profile.userProfileHandle,
+ "blockchainAccount": profile.blockchainAccount,
+ "ranking": profile.ranking,
+ "followingCount": profile.following.size,
+ "followersCount": profile.followers.size,
+ "postsCount": profile.posts.size,
+ "botsCount": profile.bots.size,
+ "emitterEventsCount": profile.emitterEventsCount,
+ "targetEventsCount": profile.targetEventsCount
+ }
+ response.push(postResponse)
+ }
+ }
+}
\ No newline at end of file
diff --git a/Projects/Social-Trading/NT/Modules/Query.js b/Projects/Social-Trading/NT/Modules/Query.js
index 1a3e9389b..d60f1e998 100644
--- a/Projects/Social-Trading/NT/Modules/Query.js
+++ b/Projects/Social-Trading/NT/Modules/Query.js
@@ -15,18 +15,6 @@ exports.newSocialTradingModulesQuery = function newSocialTradingModulesQuery() {
finalize: finalize
}
- const QUERY_TYPES = {
-
- USER_PROFILE_STATS: 0,
- BOT_PROFILE_STATS: 1,
- PROFILE_POSTS: 2,
- PROFILE_FOLLOWERS: 3,
- PROFILE_FOLLOWING: 4,
- POST_REPLIES: 5,
- EVENTS: 6
-
- }
-
return thisObject
function finalize() {
@@ -39,60 +27,61 @@ exports.newSocialTradingModulesQuery = function newSocialTradingModulesQuery() {
thisObject.queryType = queryReceived.queryType
switch (thisObject.queryType) {
-
- case QUERY_TYPES.USER_PROFILE_STATS: {
+
+ case SA.projects.socialTrading.globals.queryTypes.USER_PROFILES: {
+ thisObject.query = NT.projects.socialTrading.modules.queriesUserProfiles.newSocialTradingModulesQueriesUserProfiles()
+ thisObject.query.initialize(queryReceived)
+ break
+ }
+
+ case SA.projects.socialTrading.globals.queryTypes.USER_PROFILE_STATS: {
thisObject.query = NT.projects.socialTrading.modules.queriesUserProfileStats.newSocialTradingModulesQueriesUserProfileStats()
- query.initialize(queryReceived)
- query.finalize()
+ thisObject.query.initialize(queryReceived)
break
}
- case QUERY_TYPES.BOT_PROFILE_STATS: {
+ case SA.projects.socialTrading.globals.queryTypes.BOT_PROFILE_STATS: {
thisObject.query = NT.projects.socialTrading.modules.queriesBotProfileStats.newSocialTradingModulesQueriesBotProfileStats()
- query.initialize(queryReceived)
- query.finalize()
+ thisObject.query.initialize(queryReceived)
break
}
- case QUERY_TYPES.PROFILE_POSTS: {
+ case SA.projects.socialTrading.globals.queryTypes.PROFILE_POSTS: {
thisObject.query = NT.projects.socialTrading.modules.queriesProfilePosts.newSocialTradingModulesQueriesProfilePosts()
- query.initialize(queryReceived)
- query.finalize()
+ thisObject.query.initialize(queryReceived)
break
}
- case QUERY_TYPES.POST_REPLIES: {
+ case SA.projects.socialTrading.globals.queryTypes.POST_REPLIES: {
thisObject.query = NT.projects.socialTrading.modules.queriesPostReplies.newSocialTradingModulesQueriesPostReplies()
- query.initialize(queryReceived)
- query.finalize()
+ thisObject.query.initialize(queryReceived)
break
}
- case QUERY_TYPES.PROFILE_FOLLOWERS: {
+ case SA.projects.socialTrading.globals.queryTypes.PROFILE_FOLLOWERS: {
thisObject.query = NT.projects.socialTrading.modules.queriesProfileFollowers.newSocialTradingModulesQueriesProfileFollowers()
- query.initialize(queryReceived)
- query.finalize()
+ thisObject.query.initialize(queryReceived)
break
}
- case QUERY_TYPES.PROFILE_FOLLOWING: {
+ case SA.projects.socialTrading.globals.queryTypes.PROFILE_FOLLOWING: {
thisObject.query = NT.projects.socialTrading.modules.queriesProfileFollowing.newSocialTradingModulesQueriesProfileFollowing()
- query.initialize(queryReceived)
- query.finalize()
+ thisObject.query.initialize(queryReceived)
break
}
- case QUERY_TYPES.maps.EVENTS: {
+ case SA.projects.socialTrading.globals.queryTypes.maps.EVENTS: {
thisObject.query = NT.projects.socialTrading.modules.queriesEvents.newSocialTradingModulesQueriesEvents()
- query.initialize(queryReceived)
- query.finalize()
+ thisObject.query.initialize(queryReceived)
break
}
- default: throw('Query Type Not Supported.')
+ default: throw ('Query Type Not Supported.')
}
}
function execute() {
- return thisObject.query.execute()
+ let response = thisObject.query.execute()
+ thisObject.query.finalize()
+ return response
}
}
\ No newline at end of file
diff --git a/Projects/Social-Trading/NT/Utilities/QueriesValidations.js b/Projects/Social-Trading/NT/Utilities/QueriesValidations.js
index 722b54835..dd63209ae 100644
--- a/Projects/Social-Trading/NT/Utilities/QueriesValidations.js
+++ b/Projects/Social-Trading/NT/Utilities/QueriesValidations.js
@@ -43,7 +43,7 @@ exports.newSocialTradingUtilitiesQueriesValidations = function newSocialTradingU
}
}
- function arrayValidations(queryReceived, thisObject) {
+ function arrayValidations(queryReceived, thisObject, array) {
/*
Validate Initial Index
*/
@@ -51,11 +51,11 @@ exports.newSocialTradingUtilitiesQueriesValidations = function newSocialTradingU
throw ('Initial Index Undefined.')
}
- if (queryReceived.initialIndex === NT.projects.socialTrading.globals.queryConstants.INITIAL_INDEX_LAST) {
- queryReceived.initialIndex = thisObject.profile.posts.length - 1
+ if (queryReceived.initialIndex === SA.projects.socialTrading.globals.queryConstants.INITIAL_INDEX_LAST) {
+ queryReceived.initialIndex = array.length - 1
}
- if (queryReceived.initialIndex === NT.projects.socialTrading.globals.queryConstants.INITIAL_INDEX_FIRST) {
+ if (queryReceived.initialIndex === SA.projects.socialTrading.globals.queryConstants.INITIAL_INDEX_FIRST) {
queryReceived.initialIndex = 0
}
@@ -75,13 +75,15 @@ exports.newSocialTradingUtilitiesQueriesValidations = function newSocialTradingU
throw ('Amount Requested Is Not a Number.')
}
- if (queryReceived.amountRequested < NT.projects.socialTrading.globals.queryConstants.MIN_AMOUNT_REQUESTED) {
+ if (queryReceived.amountRequested < SA.projects.socialTrading.globals.queryConstants.MIN_AMOUNT_REQUESTED) {
throw ('Amount Requested Below Min.')
}
- if (queryReceived.amountRequested > NT.projects.socialTrading.globals.queryConstants.MAX_AMOUNT_REQUESTED) {
+ if (queryReceived.amountRequested > SA.projects.socialTrading.globals.queryConstants.MAX_AMOUNT_REQUESTED) {
throw ('Amount Requested Above Max.')
}
+
+ thisObject.amountRequested = queryReceived.amountRequested
/*
Validate Direction
*/
@@ -89,7 +91,7 @@ exports.newSocialTradingUtilitiesQueriesValidations = function newSocialTradingU
throw ('Direction Undefined.')
}
- if (queryReceived.direction !== NT.projects.socialTrading.globals.queryConstants.DIRECTION_FUTURE && queryReceived.direction !== NT.projects.socialTrading.globals.queryConstants.DIRECTION_PAST) {
+ if (queryReceived.direction !== SA.projects.socialTrading.globals.queryConstants.DIRECTION_FUTURE && queryReceived.direction !== SA.projects.socialTrading.globals.queryConstants.DIRECTION_PAST) {
throw ('Direction Not Supported.')
}
diff --git a/Projects/Social-Trading/NT/Globals/QueryConstants.js b/Projects/Social-Trading/SA/Globals/QueryConstants.js
similarity index 100%
rename from Projects/Social-Trading/NT/Globals/QueryConstants.js
rename to Projects/Social-Trading/SA/Globals/QueryConstants.js
diff --git a/Projects/Social-Trading/SA/Globals/QueryTypes.js b/Projects/Social-Trading/SA/Globals/QueryTypes.js
new file mode 100644
index 000000000..ec010b230
--- /dev/null
+++ b/Projects/Social-Trading/SA/Globals/QueryTypes.js
@@ -0,0 +1,15 @@
+exports.newSocialTradingGlobalsQueryTypes = function () {
+
+ let thisObject = {
+ USER_PROFILES: 0,
+ USER_PROFILE_STATS: 1,
+ BOT_PROFILE_STATS: 2,
+ PROFILE_POSTS: 3,
+ PROFILE_FOLLOWERS: 4,
+ PROFILE_FOLLOWING: 5,
+ POST_REPLIES: 6,
+ EVENTS: 7
+ }
+
+ return thisObject
+}
\ No newline at end of file
diff --git a/TaskServer/.vscode/settings.json b/TaskServer/.vscode/settings.json
new file mode 100644
index 000000000..0bf7da203
--- /dev/null
+++ b/TaskServer/.vscode/settings.json
@@ -0,0 +1,16 @@
+{
+ "files.exclude": {
+ "**/Data-Storage": true,
+ "**/Documentation": true,
+ "**/Log-Files": true,
+ "**/node_modules": true,
+ "**/Deprecated-Code": true
+ },
+ "search.exclude": {
+ "**/Data-Storage": true,
+ "**/Documentation": true,
+ "**/Log-Files": true,
+ "**/Deprecated-Code": true
+ },
+ "search.maintainFileSearchCache": true
+}
\ No newline at end of file
diff --git a/runDesktop.js b/runDesktop.js
index 96c4c24c5..f6e04a1d2 100644
--- a/runDesktop.js
+++ b/runDesktop.js
@@ -45,6 +45,19 @@ SA.nodeModules = {
ws: require('ws')
}
+/*
+We will use this User Profile for Testing Purposes.
+{
+ "githubUsername": "Test-Network-Client-Profile",
+ "address": "0xA0dCDA81b42C5EBDc45EC2875C72274B67560246",
+ "privateKey": "0x5fed4817a87431c8a328d0936561e63f45b6db289adac6125b9306ded644dfe9"
+}
+*/
+
+DK.TEST_NETWORK_CLIENT_USER_PROFILE_ID = "baa2f02c-2920-4edb-a103-d452fc61d82f"
+DK.TEST_NETWORK_CLIENT_USER_PROFILE_HANDLE = "Test-Network-Client-Profile"
+DK.TEST_NETWORK_CLIENT_USER_PROFILE_PRIVATE_KEY = "0x5fed4817a87431c8a328d0936561e63f45b6db289adac6125b9306ded644dfe9"
+
DK.app = require('./Desktop/DesktopApp.js').newDesktopApp()
DK.app.run()
diff --git a/runNetwork.js b/runNetwork.js
index 9aae83d5e..a0b0b2c33 100644
--- a/runNetwork.js
+++ b/runNetwork.js
@@ -46,6 +46,17 @@ SA.nodeModules = {
ws: require('ws')
}
+/*
+We will use this User Profile for testing purposes.
+{
+ "githubUsername": "Test-Network-Node-Profile",
+ "address": "0xa153469c57A91F5a59Fc6c45A37aD8dbad85e417",
+ "privateKey": "0xac498ae59407e6b68429a814f64da2339550f93a767578e28c161ff119159271"
+}
+*/
+NT.NETWORK_NODE_USER_PROFILE_HANDLE = "Test-Network-Node-Profile"
+NT.NETWORK_NODE_USER_PROFILE_PRIVATE_KEY = "0xac498ae59407e6b68429a814f64da2339550f93a767578e28c161ff119159271"
+
NT.app = require('./Network/NetwokNode.js').newNetworkNode()
NT.app.run()