From b9e170a0bcedf5254bc1b8aecfe725d9b8612e55 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 31 Aug 2021 18:46:42 +0200 Subject: [PATCH 01/29] Deepscan bug fixed --- .../Social-Trading/NT/Modules/Queries/Events.js | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/Projects/Social-Trading/NT/Modules/Queries/Events.js b/Projects/Social-Trading/NT/Modules/Queries/Events.js index 0565bf027..2cee66514 100644 --- a/Projects/Social-Trading/NT/Modules/Queries/Events.js +++ b/Projects/Social-Trading/NT/Modules/Queries/Events.js @@ -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) { @@ -115,11 +113,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) { From ddb1af522fd66a8680b78cab9232e3dc4876f716 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 2 Sep 2021 09:50:58 +0200 Subject: [PATCH 02/29] Superalgos Network: handshakeProducedure implemented --- .../Network/NT/Modules/WebSocketsInterface.js | 234 ++++++++++++++---- .../Network/SA/Modules/WebSocketsClient.js | 159 +++++++++++- .../NT/Modules/Queries/Events.js | 1 - runDesktop.js | 3 + runNetwork.js | 3 + 5 files changed, 345 insertions(+), 55 deletions(-) diff --git a/Projects/Network/NT/Modules/WebSocketsInterface.js b/Projects/Network/NT/Modules/WebSocketsInterface.js index a1a286d87..30c56da58 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": { @@ -95,75 +101,213 @@ 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.se + } + /* + 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) + let 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.set(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..ef4b002bf 100644 --- a/Projects/Network/SA/Modules/WebSocketsClient.js +++ b/Projects/Network/SA/Modules/WebSocketsClient.js @@ -9,6 +9,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 function finalize() { @@ -16,10 +20,25 @@ 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) + /* + Here we will pick a Network Node from all users profiles available that do have a Network Node running. // TODO + */ + selectedNetworkNode = { + userProfileId: "qeqdqxex1qexqexqwxeqweqxeqweqe", + userProfileHandle: "Luis-Fernando-Molina", + blockchainAccount: "asdasdasdasdasdasdasdaasdasdasdasdasdasdsd", + ranking: 0, + host: "localhost", + port: global.env.NETWORK_WEB_SOCKETS_INTERFACE_PORT + } + + socketClient = new SA.nodeModules.ws('ws://' + selectedNetworkNode.host + ':' + selectedNetworkNode.port) //networkInterface = SA.projects.socialTrading.modules.networkInterface.newSocialTradingModulesNetworkInterface() setUpWebsocketClient() @@ -30,15 +49,137 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets let handshakeDone = false socketClient.onopen = () => { onConnection() } - socketClient.onmessage = socketMessage => { onMenssage(socketMessage) } socketClient.onerror = err => { onError(err) } function onConnection() { - /* - Send Handshake Message - */ - socketClient.send('Handshake Message') - console.log('Handshake Message Sent') + + 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', + userProfileHandle: DK.NETWORK_CLIENT_USER_PROFILE_HANDLE, + callerTimestamp: callerTimestamp, + step: 'One' + } + socketClient.send(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) + 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.') + 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.') + 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.') + 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.NETWORK_CLIENT_USER_PROFILE_HANDLE) { + console.log('[ERROR] Web Sockets Client -> stepOneResponse -> The Network Node callerProfileHandle does not match my own userProfileHandle.') + 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.') + 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.NETWORK_CLIENT_USER_PROFILE_PRIVATE_KEY) + + let message = { + messageType: 'Handshake', + signature: JSON.stringify(signature), + step: 'Two' + } + socketClient.send(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) + return + } + /* + 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. + */ + socketClient.onmessage = socketMessage => { onMenssage(socketMessage) } + } + } } async function onMenssage(socketMessage) { @@ -53,10 +194,10 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets handshakeDone = true return } else { - console.log('[ERROR] Web Sockets Client -> onMenssage -> handshakeDone -> message.response = ' + response.message) + console.log('[ERROR] Web Sockets Client -> onMenssage -> handshakeDone -> response.message = ' + response.message) return } - } + } callbackFunction.receiveResponse(message) callbackFunction = undefined diff --git a/Projects/Social-Trading/NT/Modules/Queries/Events.js b/Projects/Social-Trading/NT/Modules/Queries/Events.js index 2cee66514..a68d7215b 100644 --- a/Projects/Social-Trading/NT/Modules/Queries/Events.js +++ b/Projects/Social-Trading/NT/Modules/Queries/Events.js @@ -105,7 +105,6 @@ exports.newSocialTradingModulesQueriesEvents = function newSocialTradingModulesQ } } } - /* Test #2 : The Emitter or Traget profile must be at the Following map of the Context Profile. */ diff --git a/runDesktop.js b/runDesktop.js index 96c4c24c5..425712d23 100644 --- a/runDesktop.js +++ b/runDesktop.js @@ -45,6 +45,9 @@ SA.nodeModules = { ws: require('ws') } +DK.NETWORK_CLIENT_USER_PROFILE_HANDLE = "Julian-Molina" // TODO: remove this. +DK.NETWORK_CLIENT_USER_PROFILE_PRIVATE_KEY = "dasdasdjhakdhakhdkalshdkashdka" // TODO: remove this. + DK.app = require('./Desktop/DesktopApp.js').newDesktopApp() DK.app.run() diff --git a/runNetwork.js b/runNetwork.js index 9aae83d5e..e0c5ed174 100644 --- a/runNetwork.js +++ b/runNetwork.js @@ -46,6 +46,9 @@ SA.nodeModules = { ws: require('ws') } +NT.NETWORK_NODE_USER_PROFILE_HANDLE = "Luis-Fernando-Molina" // TODO: remove this. +NT.NETWORK_NODE_USER_PROFILE_PRIVATE_KEY = "blablablablablablablablablablablablablablablablabla" // TODO: remove this. + NT.app = require('./Network/NetwokNode.js').newNetworkNode() NT.app.run() From 996f6442fd2953ceea079c42be0ec7bb71b465d4 Mon Sep 17 00:00:00 2001 From: Julian Molina Date: Thu, 2 Sep 2021 11:27:06 +0200 Subject: [PATCH 03/29] Governance workspaces WIP --- .../distribution-event.json | 4 +- .../reusable-governance-snippets.json | 54 ++++++++++-- .../Superalgos-Pools/superalgos-pools.json | 2 +- .../Asset-Claim-Vote/asset-claim-vote.json | 12 +++ .../Asset-Weight-Vote/asset-weight-vote.json | 12 +++ .../feature-claim-vote.json | 20 +++++ .../feature-weight-vote.json | 12 +++ .../Docs-Nodes/P/Pools/Pools/pools.json | 2 +- .../position-claim-vote.json | 12 +++ .../position-weight-vote.json | 12 +++ ...-workspaces-001-governance-workspaces.json | 85 +++++++++++++++++++ ...to-governance-001-governance-overview.json | 2 +- 12 files changed, 219 insertions(+), 10 deletions(-) create mode 100644 Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-Workspaces/governance-workspaces-001-governance-workspaces.json 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/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-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/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 }, { From 055a0c60e9ff1761a018d4bd960c88727e109e6e Mon Sep 17 00:00:00 2001 From: Julian Molina Date: Thu, 2 Sep 2021 11:57:39 +0200 Subject: [PATCH 04/29] Workspaces wip --- ...ution-superalgos-governance-workspace.json | 116 ++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-Workspaces/governance-workspaces-002-token-distribution-superalgos-governance-workspace.json 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 From bf12e9c84cc7f8748498c7c61840ccc23574d14e Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 2 Sep 2021 12:59:23 +0200 Subject: [PATCH 05/29] Superalgos Network: Websockets Handshake debugged --- Desktop/DesktopApp.js | 15 ++-- .../Test-Network-Client-Profile.json | 84 +++++++++++++++++++ .../Test-Network-Node-Profile.json | 84 +++++++++++++++++++ .../Network/NT/Modules/WebSocketsInterface.js | 4 +- .../Network/SA/Modules/WebSocketsClient.js | 21 +++-- runDesktop.js | 13 ++- runNetwork.js | 12 ++- 7 files changed, 209 insertions(+), 24 deletions(-) create mode 100644 Projects/Governance/Plugins/User-Profiles/Test-Network-Client-Profile.json create mode 100644 Projects/Governance/Plugins/User-Profiles/Test-Network-Node-Profile.json diff --git a/Desktop/DesktopApp.js b/Desktop/DesktopApp.js index 3c225154c..ea5bceab3 100644 --- a/Desktop/DesktopApp.js +++ b/Desktop/DesktopApp.js @@ -6,21 +6,16 @@ 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() - - return - start() - - async function start() { - let socialGraphService = NT.projects.network.modules.socialGraph.newSocialGraph() - await socialGraphService.initialize() - } - } } 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..d8721b28c --- /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": "{\n \"signature\": {\n \"message\": \"Test-Network-Client-Profile\",\n \"messageHash\": \"0xd768f828a837f3fa0c3e9bb8090820c415ff08be93cad759a53bc2115487c5d7\",\n \"v\": \"0x1c\",\n \"r\": \"0x1401b80eec441aa9789580848e0179f36485acab9562fe184bca5e2fd9e77887\",\n \"s\": \"0x06400cef3453437805fb9b086c246d7def27a146ed975450edf7dcc46795a57d\",\n \"signature\": \"0x1401b80eec441aa9789580848e0179f36485acab9562fe184bca5e2fd9e7788706400cef3453437805fb9b086c246d7def27a146ed975450edf7dcc46795a57d1c\"\n }\n}", + "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": 13282, + "y": 11240.5 + }, + "targetPosition": { + "x": 13327, + "y": 11256.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": 13400, + "y": 11204.5 + }, + "targetPosition": { + "x": 13327, + "y": 11256.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": 13327, + "y": 11256.5 + }, + "targetPosition": { + "x": 13297, + "y": 11290.5 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "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..23fb48537 --- /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": "{\n \"signature\": {\n \"message\": \"Test-Network-Node-Profile\",\n \"messageHash\": \"0xa05026b7c6c2a2375480d5d24949621749cc48e461e6e80278a9ef1b6dc7c5f1\",\n \"v\": \"0x1c\",\n \"r\": \"0x8f28f992b0074e4d50007cdfbf18980ca58b4969e04a54d06e4d4798bb982c9a\",\n \"s\": \"0x1c11951a92a1beffe8f3ddd06426ebe1b89875b56d5e374426100d5f59245ea3\",\n \"signature\": \"0x8f28f992b0074e4d50007cdfbf18980ca58b4969e04a54d06e4d4798bb982c9a1c11951a92a1beffe8f3ddd06426ebe1b89875b56d5e374426100d5f59245ea31c\"\n }\n}", + "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": 13516, + "y": 11661 + }, + "targetPosition": { + "x": 13486, + "y": 11579 + }, + "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": 13470, + "y": 11657 + }, + "targetPosition": { + "x": 13486, + "y": 11579 + }, + "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": 13486, + "y": 11579 + }, + "targetPosition": { + "x": 13413, + "y": 11508 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } +} \ No newline at end of file diff --git a/Projects/Network/NT/Modules/WebSocketsInterface.js b/Projects/Network/NT/Modules/WebSocketsInterface.js index 30c56da58..2aafb637c 100644 --- a/Projects/Network/NT/Modules/WebSocketsInterface.js +++ b/Projects/Network/NT/Modules/WebSocketsInterface.js @@ -234,7 +234,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock } let signature = JSON.parse(messageHeader.signature) - let blockchainAccount = web3.eth.accounts.recover(signature) + caller.blockchainAccount = web3.eth.accounts.recover(signature) if (caller.blockchainAccount === undefined) { let response = { @@ -247,7 +247,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock /* 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.set(blockchainAccount) + let witnessUserProfile = NT.projects.socialTrading.globals.memory.maps.USER_PROFILES_BY_BLOCHAIN_ACCOUNT.get(caller.blockchainAccount) if (witnessUserProfile === undefined) { let response = { diff --git a/Projects/Network/SA/Modules/WebSocketsClient.js b/Projects/Network/SA/Modules/WebSocketsClient.js index ef4b002bf..d5925aae7 100644 --- a/Projects/Network/SA/Modules/WebSocketsClient.js +++ b/Projects/Network/SA/Modules/WebSocketsClient.js @@ -28,11 +28,15 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets 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 = { - userProfileId: "qeqdqxex1qexqexqwxeqweqxeqweqe", - userProfileHandle: "Luis-Fernando-Molina", - blockchainAccount: "asdasdasdasdasdasdasdaasdasdasdasdasdasdsd", + userProfileHandle: "Test-Network-Node-Profile", + blockchainAccount: "0xa153469c57A91F5a59Fc6c45A37aD8dbad85e417", ranking: 0, host: "localhost", port: global.env.NETWORK_WEB_SOCKETS_INTERFACE_PORT @@ -80,11 +84,11 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets let message = { messageType: 'Handshake', callerRole: 'Network Client', - userProfileHandle: DK.NETWORK_CLIENT_USER_PROFILE_HANDLE, + callerProfileHandle: DK.TEST_NETWORK_CLIENT_USER_PROFILE_HANDLE, callerTimestamp: callerTimestamp, step: 'One' } - socketClient.send(message) + socketClient.send(JSON.stringify(message)) } function stepOneResponse(socketMessage) { @@ -127,7 +131,7 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets 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.NETWORK_CLIENT_USER_PROFILE_HANDLE) { + 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.') return } @@ -155,14 +159,14 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets */ socketClient.onmessage = socketMessage => { stepTwoResponse(socketMessage) } - let signature = web3.eth.accounts.sign(JSON.stringify(signedMessage), DK.NETWORK_CLIENT_USER_PROFILE_PRIVATE_KEY) + 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(message) + socketClient.send(JSON.stringify(message)) } function stepTwoResponse(socketMessage) { @@ -172,6 +176,7 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets console.log('[ERROR] Web Sockets Client -> stepOneResponse -> response.message = ' + response.message) 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 diff --git a/runDesktop.js b/runDesktop.js index 425712d23..96d54c44b 100644 --- a/runDesktop.js +++ b/runDesktop.js @@ -45,8 +45,17 @@ SA.nodeModules = { ws: require('ws') } -DK.NETWORK_CLIENT_USER_PROFILE_HANDLE = "Julian-Molina" // TODO: remove this. -DK.NETWORK_CLIENT_USER_PROFILE_PRIVATE_KEY = "dasdasdjhakdhakhdkalshdkashdka" // TODO: remove this. +/* +We will use this User Profile for Testing Purposes. +{ + "githubUsername": "Test-Network-Client-Profile", + "address": "0xA0dCDA81b42C5EBDc45EC2875C72274B67560246", + "privateKey": "0x5fed4817a87431c8a328d0936561e63f45b6db289adac6125b9306ded644dfe9" +} +*/ + +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 e0c5ed174..a0b0b2c33 100644 --- a/runNetwork.js +++ b/runNetwork.js @@ -46,8 +46,16 @@ SA.nodeModules = { ws: require('ws') } -NT.NETWORK_NODE_USER_PROFILE_HANDLE = "Luis-Fernando-Molina" // TODO: remove this. -NT.NETWORK_NODE_USER_PROFILE_PRIVATE_KEY = "blablablablablablablablablablablablablablablablabla" // TODO: remove this. +/* +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() From b4b29947bf4ac05d7eb1237470b8637dada815c3 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 2 Sep 2021 13:08:51 +0200 Subject: [PATCH 06/29] Superalgos Network: Websockets Handshake debugged. Deepscan bug fixed --- Projects/Network/NT/Modules/WebSocketsInterface.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Projects/Network/NT/Modules/WebSocketsInterface.js b/Projects/Network/NT/Modules/WebSocketsInterface.js index 2aafb637c..f40faaed3 100644 --- a/Projects/Network/NT/Modules/WebSocketsInterface.js +++ b/Projects/Network/NT/Modules/WebSocketsInterface.js @@ -219,7 +219,8 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock result: 'Error', message: 'Handshake Step One Not Completed.' } - socket.se + socket.send(JSON.stringify(response)) + return } /* We will check the signature at the message. From e8c0893623f6073fbdf13e065aa692f864fe0d18 Mon Sep 17 00:00:00 2001 From: Julian Molina Date: Thu, 2 Sep 2021 13:22:56 +0200 Subject: [PATCH 07/29] Governance workspaces done --- .../Docs-Books/the-governance-project.json | 9 +- ...paces-003-other-governance-workspaces.json | 102 ++++++++++++++++++ 2 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-Workspaces/governance-workspaces-003-other-governance-workspaces.json diff --git a/Projects/Governance/Schemas/Docs-Books/the-governance-project.json b/Projects/Governance/Schemas/Docs-Books/the-governance-project.json index 5624ea317..abc9862d6 100644 --- a/Projects/Governance/Schemas/Docs-Books/the-governance-project.json +++ b/Projects/Governance/Schemas/Docs-Books/the-governance-project.json @@ -22,8 +22,13 @@ }, { "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 } ] } \ 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..3eaddda50 --- /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": "All project-specific Governance Workspaces have a similar layout, as different projects usually have the same kinds of Assets, Features, Positions, and Pools.", + "updated": 1630580086379 + }, + "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 From 2b44c0e0d1139ad7616cd4986d4ca2cc6d2d74ef Mon Sep 17 00:00:00 2001 From: Julian Molina Date: Thu, 2 Sep 2021 15:25:33 +0200 Subject: [PATCH 08/29] Main governance workspace and plugins cleaned up --- .../Creating Your User Profile Tutorial.json | 1175 +++++++++++++ ...ernance Program Walk Through Tutorial.json | 251 +++ .../Plugins/Assets/Superalgos-Exchanges.json | 2 +- .../Plugins/Assets/Superalgos-Marketing.json | 2 +- .../Governance/Plugins/Assets/Superalgos.json | 2 +- .../Plugins/Features/Superalgos.json | 2 +- .../Governance/Plugins/Pools/Superalgos.json | 14 +- .../Positions/Superalgos-Marketing.json | 2 +- .../Plugins/Positions/Superalgos.json | 2 +- .../Plugins/User-Profiles/Dummy.json | 84 + .../Token-Distribution-Superalgos.json | 1560 ++--------------- 11 files changed, 1666 insertions(+), 1430 deletions(-) create mode 100644 Projects/Foundations/Plugins/Tutorials/Creating Your User Profile Tutorial.json create mode 100644 Projects/Foundations/Plugins/Tutorials/Governance Program Walk Through Tutorial.json create mode 100644 Projects/Governance/Plugins/User-Profiles/Dummy.json 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..e341cc31d --- /dev/null +++ b/Projects/Foundations/Plugins/Tutorials/Creating Your User Profile Tutorial.json @@ -0,0 +1,1175 @@ +{ + "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": "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": 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": "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": 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": "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": 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": "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" + ] + ] + } + }, + { + "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": "Reset" + }, + "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": "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": 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": "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": 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": "Reset" + } + } + } + ], + "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": "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": 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": "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\": \"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": "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\": \"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": "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": 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": "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": 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": "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": 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": "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": 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": "Reset" + } + } + } + ], + "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": "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": 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": "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": 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": "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\": \"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": "Reset" + } + } + } + ], + "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": "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": 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": "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": 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": "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\": \"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": { + "status": "Reset" + } + } + } + ], + "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": "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": 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": { + "status": "Reset" + }, + "referenceParent": { + "type": "Github API", + "name": "New Github API", + "id": "48c9ca95-3cc0-43a8-a522-27e812979800" + }, + "referenceParentCombinedNodePath": [ + [ + "New Foundations Project", + "Foundations Project" + ], + [ + "New Other Hierarchies", + "Other Hierarchies" + ], + [ + "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": "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\": 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": { + "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": 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": "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/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/Workspaces/Token-Distribution-Superalgos.json b/Projects/Governance/Plugins/Workspaces/Token-Distribution-Superalgos.json index 34333e6db..421ba4e64 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,64 @@ "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": 36872.48254631386, + "y": 11097.813810533471 + }, + "targetPosition": { + "x": 36598.41890902108, + "y": 10975.79281761073 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin File", + "name": "Governance Program Walk Through Tutorial", + "config": "{\"project\":\"Foundations\",\"fileName\":\"Governance Program Walk Through Tutorial\",\"folderName\":\"Tutorials\",\"nodeType\":\"Tutorial\",\"saveWithWorkspace\":false}", + "project": "Foundations", + "id": "aead03f0-635b-4629-8696-0d0352c349de", + "savedPayload": { + "position": { + "x": 36629.777448001376, + "y": 11274.149386221212 + }, + "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 +673,7 @@ "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": false, + "isCollapsed": true, "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 @@ -751,8 +808,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 +831,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 +863,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 +886,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 +919,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 +974,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 +1030,7 @@ "savedPayload": { "position": { "x": 35306.95802911758, - "y": 10647.414597552948 + "y": 10710.13167551354 }, "targetPosition": { "x": 35605.314597728066, @@ -1000,8 +1057,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 +1085,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\": true\n}", + "project": "Foundations", + "id": "6e9df29f-58fc-4e30-9882-5a083c30fdbe", + "savedPayload": { + "position": { + "x": 35404.57541582041, + "y": 10455.829688890026 }, "targetPosition": { "x": 35605.314597728066, @@ -1062,7 +1147,7 @@ "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": true, + "isCollapsed": false, "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 @@ -1433,7 +1518,7 @@ "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": false, + "isCollapsed": true, "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 @@ -1617,7 +1702,7 @@ "floatingObject": { "isPinned": true, "isFrozen": false, - "isCollapsed": false, + "isCollapsed": true, "angleToParent": 1, "distanceToParent": 3, "arrangementStyle": 0 @@ -1628,1146 +1713,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}", + "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 +1760,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" } } } From 22bf9fa486546a62066d7688c2ad1f7136fa1de2 Mon Sep 17 00:00:00 2001 From: Julian Molina Date: Thu, 2 Sep 2021 15:41:53 +0200 Subject: [PATCH 09/29] Main governance workspace --- .../Token-Distribution-Superalgos.json | 34 ++----------------- 1 file changed, 3 insertions(+), 31 deletions(-) diff --git a/Projects/Governance/Plugins/Workspaces/Token-Distribution-Superalgos.json b/Projects/Governance/Plugins/Workspaces/Token-Distribution-Superalgos.json index 421ba4e64..8f3515f2d 100644 --- a/Projects/Governance/Plugins/Workspaces/Token-Distribution-Superalgos.json +++ b/Projects/Governance/Plugins/Workspaces/Token-Distribution-Superalgos.json @@ -611,36 +611,8 @@ "id": "4f900690-970b-4d38-832c-273b0fd3ce1a", "savedPayload": { "position": { - "x": 36872.48254631386, - "y": 11097.813810533471 - }, - "targetPosition": { - "x": 36598.41890902108, - "y": 10975.79281761073 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 2, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - { - "type": "Plugin File", - "name": "Governance Program Walk Through Tutorial", - "config": "{\"project\":\"Foundations\",\"fileName\":\"Governance Program Walk Through Tutorial\",\"folderName\":\"Tutorials\",\"nodeType\":\"Tutorial\",\"saveWithWorkspace\":false}", - "project": "Foundations", - "id": "aead03f0-635b-4629-8696-0d0352c349de", - "savedPayload": { - "position": { - "x": 36629.777448001376, - "y": 11274.149386221212 + "x": 36774.75448470882, + "y": 11218.497915923215 }, "targetPosition": { "x": 36598.41890902108, @@ -1719,7 +1691,7 @@ "githubAPI": { "type": "Github API", "name": "New Github API", - "config": "{\n \"username\": \"\",\n \"token\": \"\"\n}", + "config": "{\n \"username\": \"\",\n \"token\": \"\"\n}\n", "project": "Foundations", "id": "48c9ca95-3cc0-43a8-a522-27e812979800", "savedPayload": { From 36e00115ed06b6a76d16db961ff23f458769aaec Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 2 Sep 2021 16:58:20 +0200 Subject: [PATCH 10/29] Adding Profiles Query --- .../Test-Network-Client-Profile.json | 28 +++++++++---------- .../Test-Network-Node-Profile.json | 28 +++++++++---------- Projects/ProjectsSchema.json | 6 ++++ Projects/Social-Trading/NT/Modules/Query.js | 22 ++++++++++----- 4 files changed, 49 insertions(+), 35 deletions(-) diff --git a/Projects/Governance/Plugins/User-Profiles/Test-Network-Client-Profile.json b/Projects/Governance/Plugins/User-Profiles/Test-Network-Client-Profile.json index d8721b28c..3279c2cd7 100644 --- a/Projects/Governance/Plugins/User-Profiles/Test-Network-Client-Profile.json +++ b/Projects/Governance/Plugins/User-Profiles/Test-Network-Client-Profile.json @@ -1,7 +1,7 @@ { "type": "User Profile", "name": "Test-Network-Client-Profile", - "config": "{\n \"signature\": {\n \"message\": \"Test-Network-Client-Profile\",\n \"messageHash\": \"0xd768f828a837f3fa0c3e9bb8090820c415ff08be93cad759a53bc2115487c5d7\",\n \"v\": \"0x1c\",\n \"r\": \"0x1401b80eec441aa9789580848e0179f36485acab9562fe184bca5e2fd9e77887\",\n \"s\": \"0x06400cef3453437805fb9b086c246d7def27a146ed975450edf7dcc46795a57d\",\n \"signature\": \"0x1401b80eec441aa9789580848e0179f36485acab9562fe184bca5e2fd9e7788706400cef3453437805fb9b086c246d7def27a146ed975450edf7dcc46795a57d1c\"\n }\n}", + "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", @@ -12,12 +12,12 @@ "id": "c2a1f8b1-0eb3-457a-9508-2e0c813ced37", "savedPayload": { "position": { - "x": 13282, - "y": 11240.5 + "x": 14303, + "y": 11452.5 }, "targetPosition": { - "x": 13327, - "y": 11256.5 + "x": 14003, + "y": 11452.5 }, "floatingObject": { "isPinned": false, @@ -39,12 +39,12 @@ "id": "e796be1b-7d10-47f1-8b1a-4d7ce962a113", "savedPayload": { "position": { - "x": 13400, - "y": 11204.5 + "x": 13703, + "y": 11452.5 }, "targetPosition": { - "x": 13327, - "y": 11256.5 + "x": 14003, + "y": 11452.5 }, "floatingObject": { "isPinned": false, @@ -62,17 +62,17 @@ "id": "baa2f02c-2920-4edb-a103-d452fc61d82f", "savedPayload": { "position": { - "x": 13327, - "y": 11256.5 + "x": 20588.235294117643, + "y": 18250 }, "targetPosition": { - "x": 13297, - "y": 11290.5 + "x": 20588.235294117643, + "y": 18250 }, "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": false, + "isCollapsed": true, "angleToParent": 1, "distanceToParent": 3, "arrangementStyle": 0 diff --git a/Projects/Governance/Plugins/User-Profiles/Test-Network-Node-Profile.json b/Projects/Governance/Plugins/User-Profiles/Test-Network-Node-Profile.json index 23fb48537..10d3ae958 100644 --- a/Projects/Governance/Plugins/User-Profiles/Test-Network-Node-Profile.json +++ b/Projects/Governance/Plugins/User-Profiles/Test-Network-Node-Profile.json @@ -1,7 +1,7 @@ { "type": "User Profile", "name": "Test-Network-Node-Profile", - "config": "{\n \"signature\": {\n \"message\": \"Test-Network-Node-Profile\",\n \"messageHash\": \"0xa05026b7c6c2a2375480d5d24949621749cc48e461e6e80278a9ef1b6dc7c5f1\",\n \"v\": \"0x1c\",\n \"r\": \"0x8f28f992b0074e4d50007cdfbf18980ca58b4969e04a54d06e4d4798bb982c9a\",\n \"s\": \"0x1c11951a92a1beffe8f3ddd06426ebe1b89875b56d5e374426100d5f59245ea3\",\n \"signature\": \"0x8f28f992b0074e4d50007cdfbf18980ca58b4969e04a54d06e4d4798bb982c9a1c11951a92a1beffe8f3ddd06426ebe1b89875b56d5e374426100d5f59245ea31c\"\n }\n}", + "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", @@ -12,12 +12,12 @@ "id": "11f69cbe-00c8-4fac-9fcc-701a7600c92c", "savedPayload": { "position": { - "x": 13516, - "y": 11661 + "x": 14327, + "y": 11862 }, "targetPosition": { - "x": 13486, - "y": 11579 + "x": 14027, + "y": 11862 }, "floatingObject": { "isPinned": false, @@ -39,12 +39,12 @@ "id": "501f456f-b4b5-4b7e-9118-0f26215dd20e", "savedPayload": { "position": { - "x": 13470, - "y": 11657 + "x": 13727, + "y": 11862 }, "targetPosition": { - "x": 13486, - "y": 11579 + "x": 14027, + "y": 11862 }, "floatingObject": { "isPinned": false, @@ -62,17 +62,17 @@ "id": "36c2b050-631f-4291-987c-418adc94317d", "savedPayload": { "position": { - "x": 13486, - "y": 11579 + "x": 17647.05882352941, + "y": 21251 }, "targetPosition": { - "x": 13413, - "y": 11508 + "x": 17647.05882352941, + "y": 21251 }, "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": false, + "isCollapsed": true, "angleToParent": 1, "distanceToParent": 3, "arrangementStyle": 0 diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json index b67c60a29..7858df6f8 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -1315,6 +1315,12 @@ } ], "modules": [ + { + "name": "User Profiles", + "propertyName": "queriesUserProfiles", + "functionName": "newSocialTradingModulesQueriesUserProfiles", + "fileName": "Queries/UserProfiles.js" + }, { "name": "Bot Profile Stats", "propertyName": "queriesBotProfileStats", diff --git a/Projects/Social-Trading/NT/Modules/Query.js b/Projects/Social-Trading/NT/Modules/Query.js index 1a3e9389b..b8e6f28f7 100644 --- a/Projects/Social-Trading/NT/Modules/Query.js +++ b/Projects/Social-Trading/NT/Modules/Query.js @@ -17,13 +17,14 @@ exports.newSocialTradingModulesQuery = function newSocialTradingModulesQuery() { 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 + 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 } @@ -40,6 +41,13 @@ exports.newSocialTradingModulesQuery = function newSocialTradingModulesQuery() { switch (thisObject.queryType) { + case QUERY_TYPES.USER_PROFILES: { + thisObject.query = NT.projects.socialTrading.modules.queriesUserProfiles.newSocialTradingModulesQueriesUserProfiles() + query.initialize(queryReceived) + query.finalize() + break + } + case QUERY_TYPES.USER_PROFILE_STATS: { thisObject.query = NT.projects.socialTrading.modules.queriesUserProfileStats.newSocialTradingModulesQueriesUserProfileStats() query.initialize(queryReceived) From d2dd1d9f227f6c9afd8c2da425401e035027d5ad Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 2 Sep 2021 17:13:43 +0200 Subject: [PATCH 11/29] Governance System Perfmance Improvement --- Network/.vscode/settings.json | 16 ++++++++++++++++ .../UI/Spaces/User-Profile-Space/UserProfile.js | 14 ++++++++++---- TaskServer/.vscode/settings.json | 16 ++++++++++++++++ 3 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 Network/.vscode/settings.json create mode 100644 TaskServer/.vscode/settings.json 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/Governance/UI/Spaces/User-Profile-Space/UserProfile.js b/Projects/Governance/UI/Spaces/User-Profile-Space/UserProfile.js index 991feae51..8aa24af72 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') 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 From 6ad439a3dbf84e931273520b8fc1182f7e23537b Mon Sep 17 00:00:00 2001 From: Julian Molina Date: Thu, 2 Sep 2021 17:56:53 +0200 Subject: [PATCH 12/29] Governance How to --- .../Token-Distribution-Superalgos.json | 2 +- .../Docs-Books/the-governance-project.json | 4 ++ ...rnance-how-to-001-load-a-user-profile.json | 64 +++++++++++++++++++ ...paces-003-other-governance-workspaces.json | 4 +- 4 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-How-To/governance-how-to-001-load-a-user-profile.json diff --git a/Projects/Governance/Plugins/Workspaces/Token-Distribution-Superalgos.json b/Projects/Governance/Plugins/Workspaces/Token-Distribution-Superalgos.json index 8f3515f2d..9c9b6f182 100644 --- a/Projects/Governance/Plugins/Workspaces/Token-Distribution-Superalgos.json +++ b/Projects/Governance/Plugins/Workspaces/Token-Distribution-Superalgos.json @@ -1080,7 +1080,7 @@ { "type": "Plugin File", "name": "Dummy", - "config": "{\n \"project\": \"Governance\",\n \"fileName\": \"Dummy\",\n \"folderName\": \"User-Profiles\",\n \"nodeType\": \"User Profile\",\n \"saveWithWorkspace\": true\n}", + "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": { diff --git a/Projects/Governance/Schemas/Docs-Books/the-governance-project.json b/Projects/Governance/Schemas/Docs-Books/the-governance-project.json index abc9862d6..eeb98ace4 100644 --- a/Projects/Governance/Schemas/Docs-Books/the-governance-project.json +++ b/Projects/Governance/Schemas/Docs-Books/the-governance-project.json @@ -29,6 +29,10 @@ "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-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..8a647d7ec --- /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,64 @@ +{ + "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 on any of the Governance Workspaces.", + "updated": 1630597219985 + }, + "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": 1630597234417 + }, + { + "style": "Text", + "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": "Text", + "text": "Or maybe you wish to load your User Profile in one of the Other Governance Workspaces." + }, + { + "style": "Title", + "text": "Start Here!", + "updated": 1630597272606 + }, + { + "style": "List", + "text": "Find out the person's User Profil 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!" + }, + { + "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-003-other-governance-workspaces.json b/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-Workspaces/governance-workspaces-003-other-governance-workspaces.json index 3eaddda50..3a1f300cb 100644 --- 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 @@ -3,8 +3,8 @@ "pageNumber": "3", "type": "Other Governance Workspaces", "definition": { - "text": "All project-specific Governance Workspaces have a similar layout, as different projects usually have the same kinds of Assets, Features, Positions, and Pools.", - "updated": 1630580086379 + "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": [ { From 4fd57ad93c207cb808097cffa342762b963be24b Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 2 Sep 2021 18:15:51 +0200 Subject: [PATCH 13/29] Governance Bug Fixed: Flashing status and values --- .../UI/Function-Libraries/AirdropProgram.js | 23 ++++++++--- .../UI/Function-Libraries/Assets.js | 15 +++++-- .../UI/Function-Libraries/ClaimsProgram.js | 22 ++++++---- .../Function-Libraries/DelegationProgram.js | 25 ++++++++---- .../UI/Function-Libraries/GithubProgram.js | 23 ++++++++--- .../UI/Function-Libraries/PluginsFunctions.js | 25 +++++++++--- .../Function-Libraries/ProfileConstructor.js | 40 +++++++++++++++---- .../UI/Function-Libraries/StakingProgram.js | 18 ++++++--- .../UI/Function-Libraries/TokenMining.js | 4 +- .../UI/Function-Libraries/TokenPower.js | 23 ++++++++--- .../UI/Function-Libraries/Tokens.js | 4 +- .../UI/Function-Libraries/VotingProgram.js | 30 +++++++++----- Projects/Governance/UI/Globals/Designer.js | 11 +++++ .../Spaces/User-Profile-Space/UserProfile.js | 18 +++++++-- .../Governance/UI/Utilities/BonusProgram.js | 14 +++++-- .../UI/Utilities/DecendentProgram.js | 36 ++++++++++++----- .../Governance/UI/Utilities/Validations.js | 5 ++- Projects/ProjectsSchema.json | 5 +++ 18 files changed, 256 insertions(+), 85 deletions(-) create mode 100644 Projects/Governance/UI/Globals/Designer.js diff --git a/Projects/Governance/UI/Function-Libraries/AirdropProgram.js b/Projects/Governance/UI/Function-Libraries/AirdropProgram.js index ec5bb3a57..8b36e5fb7 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( + "Airdrop Program: You need to setup this profile with the Profile Constructor, to access the Token Power of your account at the Blockchain.", + 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..6ec856aa8 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) } } @@ -489,7 +492,9 @@ function newGovernanceFunctionLibraryClaimsProgram() { node.payload.uiObject.setValue(programPowerText) 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..92711ecd4 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( + "Github Program: You need to setup this profile with the Profile Constructor, to access the Token Power of your account at the Blockchain.", + 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..4e8b94db5 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( + "Staking Program: You need to setup this profile with the Profile Constructor, to access the Token Power of your account at the Blockchain.", + 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/User-Profile-Space/UserProfile.js b/Projects/Governance/UI/Spaces/User-Profile-Space/UserProfile.js index 8aa24af72..d37d0f684 100644 --- a/Projects/Governance/UI/Spaces/User-Profile-Space/UserProfile.js +++ b/Projects/Governance/UI/Spaces/User-Profile-Space/UserProfile.js @@ -365,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 } @@ -373,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 } @@ -403,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) } @@ -412,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..97c3c3659 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( + "Bonus Program: You need to setup this profile with the Profile Constructor, to access the Token Power of your account at the Blockchain.", + 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..7b0b57a30 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( + "Decendent Program: You need to setup this profile with the Profile Constructor, to access the Token Power of your account at the Blockchain.", + 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/ProjectsSchema.json b/Projects/ProjectsSchema.json index 7858df6f8..9f9fd3da6 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", From 622bdebb8003446dbe5f01d27f3a805569584205 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 2 Sep 2021 18:36:58 +0200 Subject: [PATCH 14/29] Governance final touches --- Projects/Governance/UI/Function-Libraries/AirdropProgram.js | 2 +- Projects/Governance/UI/Function-Libraries/ClaimsProgram.js | 2 +- Projects/Governance/UI/Function-Libraries/GithubProgram.js | 2 +- Projects/Governance/UI/Function-Libraries/StakingProgram.js | 2 +- Projects/Governance/UI/Utilities/BonusProgram.js | 2 +- Projects/Governance/UI/Utilities/DecendentProgram.js | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Projects/Governance/UI/Function-Libraries/AirdropProgram.js b/Projects/Governance/UI/Function-Libraries/AirdropProgram.js index 8b36e5fb7..f87c72699 100644 --- a/Projects/Governance/UI/Function-Libraries/AirdropProgram.js +++ b/Projects/Governance/UI/Function-Libraries/AirdropProgram.js @@ -107,7 +107,7 @@ function newGovernanceFunctionLibraryAirdropProgram() { ) { node.payload.airdropProgram.isActive = false userProfile.payload.uiObject.setErrorMessage( - "Airdrop Program: You need to setup this profile with the Profile Constructor, to access the Token Power of your account at the Blockchain.", + "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 diff --git a/Projects/Governance/UI/Function-Libraries/ClaimsProgram.js b/Projects/Governance/UI/Function-Libraries/ClaimsProgram.js index 6ec856aa8..80b03c473 100644 --- a/Projects/Governance/UI/Function-Libraries/ClaimsProgram.js +++ b/Projects/Governance/UI/Function-Libraries/ClaimsProgram.js @@ -489,7 +489,7 @@ 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), diff --git a/Projects/Governance/UI/Function-Libraries/GithubProgram.js b/Projects/Governance/UI/Function-Libraries/GithubProgram.js index 92711ecd4..8ff7a84d8 100644 --- a/Projects/Governance/UI/Function-Libraries/GithubProgram.js +++ b/Projects/Governance/UI/Function-Libraries/GithubProgram.js @@ -107,7 +107,7 @@ function newGovernanceFunctionLibraryGithubProgram() { ) { node.payload.githubProgram.isActive = false userProfile.payload.uiObject.setErrorMessage( - "Github Program: You need to setup this profile with the Profile Constructor, to access the Token Power of your account at the Blockchain.", + "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 diff --git a/Projects/Governance/UI/Function-Libraries/StakingProgram.js b/Projects/Governance/UI/Function-Libraries/StakingProgram.js index 4e8b94db5..d3b8a0263 100644 --- a/Projects/Governance/UI/Function-Libraries/StakingProgram.js +++ b/Projects/Governance/UI/Function-Libraries/StakingProgram.js @@ -107,7 +107,7 @@ function newGovernanceFunctionLibraryStakingProgram() { ) { node.payload.stakingProgram.isActive = false userProfile.payload.uiObject.setErrorMessage( - "Staking Program: You need to setup this profile with the Profile Constructor, to access the Token Power of your account at the Blockchain.", + "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 diff --git a/Projects/Governance/UI/Utilities/BonusProgram.js b/Projects/Governance/UI/Utilities/BonusProgram.js index 97c3c3659..5ef959426 100644 --- a/Projects/Governance/UI/Utilities/BonusProgram.js +++ b/Projects/Governance/UI/Utilities/BonusProgram.js @@ -102,7 +102,7 @@ function newGovernanceUtilitiesBonusProgram() { ) { node.payload[programPropertyName].isActive = false userProfile.payload.uiObject.setErrorMessage( - "Bonus Program: You need to setup this profile with the Profile Constructor, to access the Token Power of your account at the Blockchain.", + "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 diff --git a/Projects/Governance/UI/Utilities/DecendentProgram.js b/Projects/Governance/UI/Utilities/DecendentProgram.js index 7b0b57a30..3f604e612 100644 --- a/Projects/Governance/UI/Utilities/DecendentProgram.js +++ b/Projects/Governance/UI/Utilities/DecendentProgram.js @@ -169,7 +169,7 @@ function newGovernanceUtilitiesDecendentProgram() { ) { node.payload[programPropertyName].isActive = false userProfile.payload.uiObject.setErrorMessage( - "Decendent Program: You need to setup this profile with the Profile Constructor, to access the Token Power of your account at the Blockchain.", + "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 From a0a7e52edcffca7e1fddf41417731543991bb52f Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 2 Sep 2021 19:00:21 +0200 Subject: [PATCH 15/29] Governance Bug Fixed: No resizing Docs and Gov tab. --- .../Foundations/UI/Spaces/Charting-Space/ChartingSpace.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 } From 433addd020b21e54af01f78f8c8181c4c22a730e Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 2 Sep 2021 19:54:35 +0200 Subject: [PATCH 16/29] Governance Tab Bug fixed --- .../UI/Spaces/Reports-Space/ReportsSpace.js | 46 +++++++++++++------ 1 file changed, 32 insertions(+), 14 deletions(-) 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) { From c143e518dd05e04f56aecfef39df7fc54a939eb1 Mon Sep 17 00:00:00 2001 From: Julian Molina Date: Thu, 2 Sep 2021 20:56:31 +0200 Subject: [PATCH 17/29] Governance tutorial revision --- .../Creating Your User Profile Tutorial.json | 193 +++++++----------- ...ial-002-tutorial-step-better-together.json | 19 +- ...rial-003-tutorial-step-are-you-ready.json} | 6 +- ...orial-step-one-token-to-rule-them-all.json | 8 +- ...step-with-tokens-comes-responsibility.json | 4 +- ...06-tutorial-step-a-mighty-meritocracy.json | 8 +- ...7-tutorial-step-a-worthy-contribution.json | 4 +- ...010-tutorial-step-where-it-all-begins.json | 4 +- ...-tutorial-step-profile-in-a-heartbeat.json | 8 +- ...utorial-013-tutorial-step-oh-so-shiny.json | 4 +- ...e-tutorial-014-tutorial-step-only-you.json | 4 +- ...rial-017-tutorial-step-profile-backup.json | 4 +- ...al-019-tutorial-step-program-partners.json | 15 +- ...0-tutorial-step-drop-it-like-it’s-hot.json | 16 +- ...torial-021-tutorial-step-github-glory.json | 24 ++- ...al-022-tutorial-step-make-it-official.json | 14 +- ...-tutorial-step-to-infinity-and-beyond.json | 15 +- ...l-1.5-tutorial-step-save-your-profile.json | 29 +++ 18 files changed, 183 insertions(+), 196 deletions(-) rename 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 => creating-your-user-profile-tutorial-003-tutorial-step-are-you-ready.json} (78%) create mode 100644 Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.5-tutorial-step-save-your-profile.json diff --git a/Projects/Foundations/Plugins/Tutorials/Creating Your User Profile Tutorial.json b/Projects/Foundations/Plugins/Tutorials/Creating Your User Profile Tutorial.json index e341cc31d..cc98dd86b 100644 --- a/Projects/Foundations/Plugins/Tutorials/Creating Your User Profile Tutorial.json +++ b/Projects/Foundations/Plugins/Tutorials/Creating Your User Profile Tutorial.json @@ -1,7 +1,7 @@ { "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}", + "config": "{\"icon\":{\"name\":\"governance\",\"project\":\"Governance\"},\"position\":\"Center\",\"slider\":\"toTop\",\"pressButton\":\"\",\"docs\":{\"project\":\"Governance\",\"category\":\"Tutorial\",\"type\":\"Tutorial Step - Better Together\"},\"controlDocs\":{\"panel\":\"Open\",\"closeTutorialEditor\":true,\"page\":{\"project\":\"Foundations\",\"category\":\"\",\"type\":\"\"}},\"codeName\":\"Creating Your User Profile Tutorial\"}", "project": "Education", "tutorialSteps": [], "tutorialTopics": [ @@ -13,18 +13,18 @@ "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}", + "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": 20273, - "y": 30933.25 + "x": 17327, + "y": 30922.25 }, "targetPosition": { - "x": 19973, - "y": 30933.25 + "x": 17027, + "y": 30922.25 }, "floatingObject": { "isPinned": false, @@ -97,12 +97,12 @@ "id": "33321959-1eb0-494c-8df3-94b1e47efdb3", "savedPayload": { "position": { - "x": 20180.438536534504, - "y": 31099.451694843894 + "x": 17239.132034355964, + "y": 31134.382034355964 }, "targetPosition": { - "x": 19884.132034355964, - "y": 31146.382034355964 + "x": 16939.132034355964, + "y": 31134.382034355964 }, "floatingObject": { "isPinned": false, @@ -133,12 +133,12 @@ "id": "a13ac48c-5743-4794-85bd-bf0794d9e1a2", "savedPayload": { "position": { - "x": 20151.433991612474, - "y": 31282.579184277827 + "x": 17151.264068711927, + "y": 31346.514068711927 }, "targetPosition": { - "x": 19884.132034355964, - "y": 31146.382034355964 + "x": 16939.132034355964, + "y": 31134.382034355964 }, "floatingObject": { "isPinned": false, @@ -164,12 +164,12 @@ "id": "d9b824fd-a201-40b8-8a60-d0c516d9634b", "savedPayload": { "position": { - "x": 20020.329184277827, - "y": 31413.683991612474 + "x": 16939.132034355964, + "y": 31434.382034355964 }, "targetPosition": { - "x": 19884.132034355964, - "y": 31146.382034355964 + "x": 16939.132034355964, + "y": 31134.382034355964 }, "floatingObject": { "isPinned": false, @@ -211,74 +211,6 @@ ] ] } - }, - { - "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": "Reset" - }, - "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": [], @@ -869,12 +801,12 @@ "id": "18c61fe9-3cc1-4f88-9499-b873fbcb9db0", "savedPayload": { "position": { - "x": 19459.867965644036, - "y": 30422.117965644036 + "x": 16514.867965644036, + "y": 30410.117965644036 }, "targetPosition": { - "x": 19672, - "y": 30634.25 + "x": 16727, + "y": 30622.25 }, "floatingObject": { "isPinned": false, @@ -900,12 +832,12 @@ "id": "7c1c466e-a5a4-4e67-94cb-6dc9e040f89b", "savedPayload": { "position": { - "x": 19672, - "y": 30334.25 + "x": 16727, + "y": 30322.25 }, "targetPosition": { - "x": 19672, - "y": 30634.25 + "x": 16727, + "y": 30622.25 }, "floatingObject": { "isPinned": false, @@ -931,12 +863,12 @@ "id": "e580ebc9-097b-46d6-bb6d-145621548377", "savedPayload": { "position": { - "x": 19884.132034355964, - "y": 30422.117965644036 + "x": 16939.132034355964, + "y": 30410.117965644036 }, "targetPosition": { - "x": 19672, - "y": 30634.25 + "x": 16727, + "y": 30622.25 }, "floatingObject": { "isPinned": false, @@ -988,6 +920,37 @@ "config": "{\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\"\n}", "project": "Education", "tutorialSteps": [ + { + "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": 16892.201694843894, + "y": 30413.811463465496 + }, + "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": "Reset" + } + } + }, { "type": "Tutorial Step", "name": "Make it Official", @@ -996,8 +959,8 @@ "id": "fe74b3ae-9490-465a-a491-db4b0834dbf7", "savedPayload": { "position": { - "x": 16939.132034355964, - "y": 30410.117965644036 + "x": 17075.329184277827, + "y": 30442.816008387526 }, "targetPosition": { "x": 16939.132034355964, @@ -1023,21 +986,17 @@ "id": "48c9ca95-3cc0-43a8-a522-27e812979800" }, "referenceParentCombinedNodePath": [ - [ - "New Foundations Project", - "Foundations Project" - ], - [ - "New Other Hierarchies", - "Other Hierarchies" - ], [ "New APIs", - "APIs" + "APIs", + "Foundations", + "e4e1b5e1-c1f6-45da-af08-32464d5b17f9" ], [ "New Github API", - "Github API" + "Github API", + "Foundations", + "48c9ca95-3cc0-43a8-a522-27e812979800" ] ] } @@ -1045,13 +1004,13 @@ { "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}", + "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": 17151.264068711927, - "y": 30497.985931288073 + "x": 17206.433991612474, + "y": 30573.920815722173 }, "targetPosition": { "x": 16939.132034355964, @@ -1076,13 +1035,13 @@ { "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}", + "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": 17239.132034355964, - "y": 30710.117965644036 + "x": 17235.438536534504, + "y": 30757.048305156106 }, "targetPosition": { "x": 16939.132034355964, 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 78% 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..ed54c3bd2 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, @@ -18,8 +18,8 @@ }, { "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..cd689ea6f 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). It represents your contributions to the Superalgos Project and Community. It is a way to reward the user base and grow the development pool.", + "updated": 1630605572869 }, { "style": "Note", 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..56f2e55a6 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" 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-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..46a7b8489 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" 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..20e855b03 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 also create a unique Binance Smart Chain wallet that is connected with your profile. We call it your Governance Address.", + "updated": 1630606460047 }, { "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-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..33ab1e63d 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 @@ -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..f1f024728 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 @@ -18,8 +18,8 @@ }, { "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-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..c65bd3199 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 @@ -18,8 +18,8 @@ }, { "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..17b3da1da 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,13 @@ "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": 1630606805313 } ] } \ 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..32228ce90 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": "Now you may get up to 1,000 SA tokens at the next Distribution Event and every other future release provided you submit your User Profile!", + "updated": 1630607071137 } ] } \ 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-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 index 88e0f7006..5ec44fa5b 100644 --- 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 @@ -3,8 +3,8 @@ "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, + "text": "Now you're ready to push your new profile to the main Superalgos repository!", + "updated": 1630607221921, "icon": { "name": "Programs\\github-program", "project": "Governance" @@ -12,14 +12,14 @@ }, "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": "Callout", + "text": "Set up you Github API credentials to get ready to contribute your profile!", + "updated": 1630603651524 }, { "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 + "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. Then come back here and we'll finish up!", + "updated": 1630604385835 }, { "style": "Text", 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 index 7d29b9218..e41fd3f72 100644 --- 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 @@ -3,8 +3,8 @@ "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, + "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" @@ -13,17 +13,18 @@ "paragraphs": [ { "style": "Callout", - "text": "Go to the docs panel and type the following command into the search bar:", - "updated": 1629726858200 + "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 This is my first submission of User Profile [add your name here]", - "updated": 1629726765903 + "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 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!" + "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", diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.5-tutorial-step-save-your-profile.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.5-tutorial-step-save-your-profile.json new file mode 100644 index 000000000..f4b7d3bb1 --- /dev/null +++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.5-tutorial-step-save-your-profile.json @@ -0,0 +1,29 @@ +{ + "tutorial": "Creating Your User Profile Tutorial", + "pageNumber": "21.5", + "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 From f519ad7e9fdb265e6b0496c4edc952bb8bf84796 Mon Sep 17 00:00:00 2001 From: quantum8 Date: Fri, 3 Sep 2021 11:30:46 +1000 Subject: [PATCH 18/29] Update sparta-data-mine-004-relative-strenght-index-rsi-sparta-indicator.json Spelling fix --- ...ne-004-relative-strenght-index-rsi-sparta-indicator.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 +} From 243f2ec1d8940473bdfd6e8b041e171b517c4dd0 Mon Sep 17 00:00:00 2001 From: quantum8 Date: Fri, 3 Sep 2021 11:31:47 +1000 Subject: [PATCH 19/29] Update sparta-data-mine-001-sparta-by-@julian-molina.json Spelling fix --- .../sparta-data-mine-001-sparta-by-@julian-molina.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 +} From 0fc22b5f56f8eb6944b348b826dfb1e238210ab3 Mon Sep 17 00:00:00 2001 From: quantum8 Date: Fri, 3 Sep 2021 11:33:27 +1000 Subject: [PATCH 20/29] Update Delta.json spelling fix --- Projects/Foundations/Plugins/Data-Mines/Delta.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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"}}} From 2c181aaeed69cf267966445ad7b50cd0adf04c66 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 3 Sep 2021 08:17:56 +0200 Subject: [PATCH 21/29] Create UserProfiles.js --- .../NT/Modules/Queries/UserProfiles.js | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 Projects/Social-Trading/NT/Modules/Queries/UserProfiles.js 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..7454cba54 --- /dev/null +++ b/Projects/Social-Trading/NT/Modules/Queries/UserProfiles.js @@ -0,0 +1,69 @@ +exports.newSocialTradingModulesQueriesUserProfileStats = function newSocialTradingModulesQueriesUserProfileStats() { + /* + 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 = { + initialIndex: undefined, + amountRequested: undefined, + direction: undefined, + execute: execute, + initialize: initialize, + finalize: finalize + } + + return thisObject + + function finalize() { + } + + function initialize(queryReceived) { + + NT.utilities.queriesValidations.arrayValidations(queryReceived, thisObject) + + } + + function execute() { + + let response = [] + let array = Array.from(NT.projects.socialTrading.globals.memory.maps.USER_PROFILES_BY_ID) + array.sort((a, b) => (a["ranking"].toLowerCase() > b["ranking"].toLowerCase()) ? 1 : -1) + + switch (thisObject.direction) { + case NT.projects.socialTrading.globals.queryConstants.DIRECTION_FUTURE: { + for (let i = thisObject.initialIndex; i < thisObject.initialIndex + thisObject.amountRequested; i++) { + let arrayItem = array[i] + if (arrayItem === undefined) { break } + addToResponse(arrayItem) + } + break + } + case NT.projects.socialTrading.globals.queryConstants.DIRECTION_PAST: { + for (let i = thisObject.initialIndex; i > thisObject.initialIndex - thisObject.amountRequested; i--) { + let arrayItem = 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 From 2645df775e8eed46e087827c8783c81dab28b97d Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 3 Sep 2021 08:42:54 +0200 Subject: [PATCH 22/29] Testing Frist Query --- Desktop/DesktopApp.js | 25 ++++++++++++++++--- .../Network/SA/Modules/WebSocketsClient.js | 3 +-- runDesktop.js | 1 + 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/Desktop/DesktopApp.js b/Desktop/DesktopApp.js index ea5bceab3..aac336353 100644 --- a/Desktop/DesktopApp.js +++ b/Desktop/DesktopApp.js @@ -7,15 +7,32 @@ exports.newDesktopApp = function newDesktopApp() { return thisObject async function run() { -/* - let socialGraphService = NT.projects.network.modules.socialGraph.newSocialGraph() - await socialGraphService.initialize() -*/ + /* + 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() + let request = { + equeryId: "123", + queryType: 0, + emitterUserProfileId: DK.TEST_NETWORK_CLIENT_USER_PROFILE_ID, + initialIndex: 'Last', + amountRequested: 10, + direction: 'Past' + } + DK.webSocketsClient.sendMessage( + JSON.stringify(request), + onResponse + ) + + function onResponse(message) { + let profiles = JSON.parse(message) + console.log(profiles) + } } } diff --git a/Projects/Network/SA/Modules/WebSocketsClient.js b/Projects/Network/SA/Modules/WebSocketsClient.js index d5925aae7..06f6a09b1 100644 --- a/Projects/Network/SA/Modules/WebSocketsClient.js +++ b/Projects/Network/SA/Modules/WebSocketsClient.js @@ -43,7 +43,6 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets } socketClient = new SA.nodeModules.ws('ws://' + selectedNetworkNode.host + ':' + selectedNetworkNode.port) - //networkInterface = SA.projects.socialTrading.modules.networkInterface.newSocialTradingModulesNetworkInterface() setUpWebsocketClient() } @@ -204,7 +203,7 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets } } - callbackFunction.receiveResponse(message) + callbackFunction.receiveResponse(response.message) callbackFunction = undefined } catch (err) { diff --git a/runDesktop.js b/runDesktop.js index 96d54c44b..f6e04a1d2 100644 --- a/runDesktop.js +++ b/runDesktop.js @@ -54,6 +54,7 @@ We will use this User Profile for Testing Purposes. } */ +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" From 67ec9864229f2f96c255cdcaec642870bf64ddb5 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 3 Sep 2021 12:23:42 +0200 Subject: [PATCH 23/29] Superalgos Network: Query User Profiles debugged --- Desktop/DesktopApp.js | 26 +- .../Network/NT/Modules/WebSocketsInterface.js | 8 + .../Network/SA/Modules/WebSocketsClient.js | 320 +++++++++--------- Projects/ProjectsSchema.json | 2 +- .../NT/Modules/ClientInterface.js | 22 +- .../NT/Modules/Queries/Events.js | 4 +- .../NT/Modules/Queries/PostReplies.js | 16 +- .../NT/Modules/Queries/ProfileFollowers.js | 13 +- .../NT/Modules/Queries/ProfileFollowing.js | 13 +- .../NT/Modules/Queries/ProfilePosts.js | 13 +- .../NT/Modules/Queries/UserProfiles.js | 18 +- Projects/Social-Trading/NT/Modules/Query.js | 32 +- .../NT/Utilities/QueriesValidations.js | 6 +- 13 files changed, 266 insertions(+), 227 deletions(-) diff --git a/Desktop/DesktopApp.js b/Desktop/DesktopApp.js index aac336353..19b8726a0 100644 --- a/Desktop/DesktopApp.js +++ b/Desktop/DesktopApp.js @@ -15,9 +15,9 @@ exports.newDesktopApp = function newDesktopApp() { Let's start the Network Interfaces */ DK.webSocketsClient = SA.projects.network.modules.webSocketsClient.newNetworkModulesWebSocketsClient() - DK.webSocketsClient.initialize() + await DK.webSocketsClient.initialize() - let request = { + let queryMessage = { equeryId: "123", queryType: 0, emitterUserProfileId: DK.TEST_NETWORK_CLIENT_USER_PROFILE_ID, @@ -25,14 +25,24 @@ exports.newDesktopApp = function newDesktopApp() { amountRequested: 10, direction: 'Past' } - DK.webSocketsClient.sendMessage( - JSON.stringify(request), - onResponse - ) - function onResponse(message) { - let profiles = JSON.parse(message) + let query = { + requestType: 'Query', + queryMessage : JSON.stringify(queryMessage ) + } + + await DK.webSocketsClient.sendMessage( + JSON.stringify(query) + ) + .then(showProfiles) + .catch(onError) + + function showProfiles(profiles){ console.log(profiles) } + + function onError(errorMessage) { + console.log('[ERROR] Query not executed. ' + errorMessage) + } } } diff --git a/Projects/Network/NT/Modules/WebSocketsInterface.js b/Projects/Network/NT/Modules/WebSocketsInterface.js index f40faaed3..003e6798b 100644 --- a/Projects/Network/NT/Modules/WebSocketsInterface.js +++ b/Projects/Network/NT/Modules/WebSocketsInterface.js @@ -94,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) diff --git a/Projects/Network/SA/Modules/WebSocketsClient.js b/Projects/Network/SA/Modules/WebSocketsClient.js index 06f6a09b1..8d47316f6 100644 --- a/Projects/Network/SA/Modules/WebSocketsClient.js +++ b/Projects/Network/SA/Modules/WebSocketsClient.js @@ -7,7 +7,6 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets } let socketClient - let callbackFunction let web3 = new SA.nodeModules.web3() let called = {} @@ -25,7 +24,7 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets called = undefined } - function initialize() { + 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. @@ -44,203 +43,204 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets socketClient = new SA.nodeModules.ws('ws://' + selectedNetworkNode.host + ':' + selectedNetworkNode.port) - setUpWebsocketClient() + await setUpWebsocketClient() } - function setUpWebsocketClient() { - try { - let handshakeDone = false + async function setUpWebsocketClient() { - socketClient.onopen = () => { onConnection() } - socketClient.onerror = err => { onError(err) } + return new Promise(connectToNewtwork) - function onConnection() { + function connectToNewtwork(resolve, reject) { - handshakeProcedure() + try { - function handshakeProcedure() { + socketClient.onopen = () => { onConnection() } + socketClient.onerror = err => { onError(err) } - let callerTimestamp + function onConnection() { - stepOneRequest() + handshakeProcedure() - 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) } + function handshakeProcedure() { - callerTimestamp = (new Date()).valueOf() + let callerTimestamp - let message = { - messageType: 'Handshake', - callerRole: 'Network Client', - callerProfileHandle: DK.TEST_NETWORK_CLIENT_USER_PROFILE_HANDLE, - callerTimestamp: callerTimestamp, - step: 'One' - } - socketClient.send(JSON.stringify(message)) - } + stepOneRequest() - function stepOneResponse(socketMessage) { - let response = JSON.parse(socketMessage.data) + 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) } - if (response.result !== 'Ok') { - console.log('[ERROR] Web Sockets Client -> stepOneResponse -> response.message = ' + response.message) - return + 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)) } - 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.') - 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.') - return + 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() + } + + 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() + } + /* + 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() + } + + 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() + } + /* + 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() + } + /* + 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() + } + + /* + All validations passed, it seems we can continue with Step Two. + */ + stepTwoRequest(signedMessage) } - let signedMessage = JSON.parse(signature.message) + 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) } - /* - 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.') - 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.') - 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.') - return + 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)) } - /* - All validations passed, it seems we can continue with Step Two. - */ - stepTwoRequest(signedMessage) - } + function stepTwoResponse(socketMessage) { + let response = JSON.parse(socketMessage.data) - 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' + if (response.result !== 'Ok') { + console.log('[ERROR] Web Sockets Client -> stepOneResponse -> response.message = ' + response.message) + reject() + } + 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() } - 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) - 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. - */ - socketClient.onmessage = socketMessage => { onMenssage(socketMessage) } } } + + 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 -> response.message = ' + response.message) - return - } - } - callbackFunction.receiveResponse(response.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 9f9fd3da6..f1bac7bfd 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -1400,7 +1400,7 @@ }, { "name": "Query", - "propertyName": "Query", + "propertyName": "query", "functionName": "newSocialTradingModulesQuery", "fileName": "Query.js" }, diff --git a/Projects/Social-Trading/NT/Modules/ClientInterface.js b/Projects/Social-Trading/NT/Modules/ClientInterface.js index bbfd8b8f1..9a0e7b57f 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) } @@ -190,9 +190,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 +206,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 a68d7215b..981cb9323 100644 --- a/Projects/Social-Trading/NT/Modules/Queries/Events.js +++ b/Projects/Social-Trading/NT/Modules/Queries/Events.js @@ -21,8 +21,8 @@ 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) } diff --git a/Projects/Social-Trading/NT/Modules/Queries/PostReplies.js b/Projects/Social-Trading/NT/Modules/Queries/PostReplies.js index 4c0b63ecf..3a18bc421 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,27 +22,30 @@ 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: { 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) } @@ -49,7 +53,7 @@ exports.newSocialTradingModulesQueriesPostReplies = function newSocialTradingMod } 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 (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..dccdcfd2d 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: { 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..a1624dedb 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,25 +17,27 @@ 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: { 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.newSocialTradingModulesQueriesProfileFollowing = 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/ProfilePosts.js b/Projects/Social-Trading/NT/Modules/Queries/ProfilePosts.js index c14dcd49f..45ab02b3b 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,24 +21,26 @@ 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: { 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) } @@ -45,7 +48,7 @@ exports.newSocialTradingModulesQueriesUserProfileStats = 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/UserProfiles.js b/Projects/Social-Trading/NT/Modules/Queries/UserProfiles.js index 7454cba54..f90ef2f7d 100644 --- a/Projects/Social-Trading/NT/Modules/Queries/UserProfiles.js +++ b/Projects/Social-Trading/NT/Modules/Queries/UserProfiles.js @@ -1,10 +1,11 @@ -exports.newSocialTradingModulesQueriesUserProfileStats = function newSocialTradingModulesQueriesUserProfileStats() { +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, @@ -16,24 +17,29 @@ exports.newSocialTradingModulesQueriesUserProfileStats = function newSocialTradi return thisObject function finalize() { + thisObject.array = undefined } function initialize(queryReceived) { - NT.utilities.queriesValidations.arrayValidations(queryReceived, thisObject) + 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 = [] - let array = Array.from(NT.projects.socialTrading.globals.memory.maps.USER_PROFILES_BY_ID) - array.sort((a, b) => (a["ranking"].toLowerCase() > b["ranking"].toLowerCase()) ? 1 : -1) switch (thisObject.direction) { case NT.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) } @@ -41,7 +47,7 @@ exports.newSocialTradingModulesQueriesUserProfileStats = 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/Query.js b/Projects/Social-Trading/NT/Modules/Query.js index b8e6f28f7..a45835cad 100644 --- a/Projects/Social-Trading/NT/Modules/Query.js +++ b/Projects/Social-Trading/NT/Modules/Query.js @@ -40,67 +40,61 @@ exports.newSocialTradingModulesQuery = function newSocialTradingModulesQuery() { thisObject.queryType = queryReceived.queryType switch (thisObject.queryType) { - + case QUERY_TYPES.USER_PROFILES: { thisObject.query = NT.projects.socialTrading.modules.queriesUserProfiles.newSocialTradingModulesQueriesUserProfiles() - query.initialize(queryReceived) - query.finalize() + thisObject.query.initialize(queryReceived) break } case QUERY_TYPES.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: { thisObject.query = NT.projects.socialTrading.modules.queriesBotProfileStats.newSocialTradingModulesQueriesBotProfileStats() - query.initialize(queryReceived) - query.finalize() + thisObject.query.initialize(queryReceived) break } case QUERY_TYPES.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: { thisObject.query = NT.projects.socialTrading.modules.queriesPostReplies.newSocialTradingModulesQueriesPostReplies() - query.initialize(queryReceived) - query.finalize() + thisObject.query.initialize(queryReceived) break } case QUERY_TYPES.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: { thisObject.query = NT.projects.socialTrading.modules.queriesProfileFollowing.newSocialTradingModulesQueriesProfileFollowing() - query.initialize(queryReceived) - query.finalize() + thisObject.query.initialize(queryReceived) break } case QUERY_TYPES.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..20c00c0cf 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 */ @@ -52,7 +52,7 @@ exports.newSocialTradingUtilitiesQueriesValidations = function newSocialTradingU } if (queryReceived.initialIndex === NT.projects.socialTrading.globals.queryConstants.INITIAL_INDEX_LAST) { - queryReceived.initialIndex = thisObject.profile.posts.length - 1 + queryReceived.initialIndex = array.length - 1 } if (queryReceived.initialIndex === NT.projects.socialTrading.globals.queryConstants.INITIAL_INDEX_FIRST) { @@ -82,6 +82,8 @@ exports.newSocialTradingUtilitiesQueriesValidations = function newSocialTradingU if (queryReceived.amountRequested > NT.projects.socialTrading.globals.queryConstants.MAX_AMOUNT_REQUESTED) { throw ('Amount Requested Above Max.') } + + thisObject.amountRequested = queryReceived.amountRequested /* Validate Direction */ From 412f099ee912b6f5a6d722a3e96eaed7caa35f86 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 3 Sep 2021 12:30:48 +0200 Subject: [PATCH 24/29] Superalgos Network: Deepscan bug fixed --- Projects/Network/SA/Modules/WebSocketsClient.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Projects/Network/SA/Modules/WebSocketsClient.js b/Projects/Network/SA/Modules/WebSocketsClient.js index 8d47316f6..150f31932 100644 --- a/Projects/Network/SA/Modules/WebSocketsClient.js +++ b/Projects/Network/SA/Modules/WebSocketsClient.js @@ -99,6 +99,7 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets if (response.result !== 'Ok') { console.log('[ERROR] Web Sockets Client -> stepOneResponse -> response.message = ' + response.message) reject() + return } let signature = JSON.parse(response.signature) @@ -109,6 +110,7 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets 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 @@ -117,6 +119,7 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets 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) @@ -128,6 +131,7 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets 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 @@ -136,6 +140,7 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets 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 @@ -144,6 +149,7 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets if (signedMessage.callerTimestamp !== callerTimestamp) { console.log('[ERROR] Web Sockets Client -> stepOneResponse -> The Network Node callerTimestamp does not match my own callerTimestamp.') reject() + return } /* @@ -177,6 +183,7 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets 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) /* From bb019a7ca2fcf4043bfbc9b0ce8a79941384a45f Mon Sep 17 00:00:00 2001 From: Julian Molina Date: Fri, 3 Sep 2021 12:46:20 +0200 Subject: [PATCH 25/29] Governance tutorial extension WIP --- ...ng%20Your%20User%20Profile%20Tutorial.json | 1276 +++++++++++++++++ ...g-006-data-mining-data-mine-hierarchy.json | 2 +- ...4-data-mining-fetching-data-from-apis.json | 2 +- .../repository-branches-003-develop.json | 8 +- ...orial-003-tutorial-step-are-you-ready.json | 4 +- ...orial-step-one-token-to-rule-them-all.json | 8 +- ...step-with-tokens-comes-responsibility.json | 4 +- ...008-tutorial-step-what’s-in-a-profile.json | 4 +- ...9-tutorial-step-program-participation.json | 8 +- ...010-tutorial-step-where-it-all-begins.json | 8 +- ...-tutorial-step-profile-in-a-heartbeat.json | 6 +- ...012-tutorial-step-pump-that-heartbeat.json | 4 +- ...utorial-013-tutorial-step-oh-so-shiny.json | 4 +- ...e-tutorial-014-tutorial-step-only-you.json | 8 +- ...rial-015-tutorial-step-under-the-hood.json | 6 +- ...torial-016-tutorial-step-save-the-key.json | 4 +- ...rial-017-tutorial-step-profile-backup.json | 10 +- ...al-019-tutorial-step-program-partners.json | 8 +- ...0-tutorial-step-drop-it-like-it’s-hot.json | 4 +- ...al-1.1-tutorial-step-how-github-works.json | 35 + ...l-1.6-tutorial-step-low-hanging-fruit.json | 30 + ...-tutorial-step-ill-lay-out-the-basics.json | 34 + ...8-tutorial-step-the-referrral-program.json | 39 + 23 files changed, 1467 insertions(+), 49 deletions(-) create mode 100644 Projects/Foundations/Plugins/Tutorials/Creating%20Your%20User%20Profile%20Tutorial.json create mode 100644 Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.1-tutorial-step-how-github-works.json create mode 100644 Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.6-tutorial-step-low-hanging-fruit.json create mode 100644 Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.7-tutorial-step-ill-lay-out-the-basics.json create mode 100644 Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.8-tutorial-step-the-referrral-program.json diff --git a/Projects/Foundations/Plugins/Tutorials/Creating%20Your%20User%20Profile%20Tutorial.json b/Projects/Foundations/Plugins/Tutorials/Creating%20Your%20User%20Profile%20Tutorial.json new file mode 100644 index 000000000..61b0e7695 --- /dev/null +++ b/Projects/Foundations/Plugins/Tutorials/Creating%20Your%20User%20Profile%20Tutorial.json @@ -0,0 +1,1276 @@ +{ + "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\": \"Open\",\n \"searchPage\": true,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n },\n \"codeName\": \"Creating Your User Profile Tutorial\"\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": "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": "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": 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": "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": 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": "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": 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": "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" + ] + ] + } + } + ], + "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": "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": 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": "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": 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": "Done" + } + } + } + ], + "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": "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": 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": "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\": \"\",\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": {} + } + }, + { + "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": "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": 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": "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": 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": {}, + "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": {} + } + }, + { + "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": "Done" + } + } + } + ], + "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": "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": 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": "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": 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": "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\": \"\",\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": "Done" + } + } + } + ], + "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": "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": 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": "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": 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": "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\": \"\",\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": "Done" + } + } + }, + { + "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": {} + } + }, + { + "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": "Done" + } + } + } + ], + "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": "Done" + } + } + }, + { + "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": 16607.021522394767, + "y": 30381.06206080964 + }, + "targetPosition": { + "x": 16779.09445330008, + "y": 30626.807674096337 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "tutorial": { + "status": "Done" + } + } + }, + { + "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": 16831.18890660016, + "y": 30331.365348192674 + }, + "targetPosition": { + "x": 16779.09445330008, + "y": 30626.807674096337 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "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 Referrral 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": 17024.840066586778, + "y": 30454.734743191024 + }, + "targetPosition": { + "x": 16779.09445330008, + "y": 30626.807674096337 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "tutorialTopics": [], + "id": "5b6febb1-6160-4c3a-bca1-5d2b47950a94", + "savedPayload": { + "position": { + "x": 16779.09445330008, + "y": 30626.807674096337 + }, + "targetPosition": { + "x": 16727, + "y": 30922.25 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "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": 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": {}, + "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": "Done" + } + } + } + ], + "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": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 1 + }, + "uiObject": { + "isPlaying": false, + "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/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-003-tutorial-step-are-you-ready.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 index ed54c3bd2..b301bb511 100644 --- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-003-tutorial-step-are-you-ready.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 @@ -13,8 +13,8 @@ "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", 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 cd689ea6f..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 @@ -13,8 +13,8 @@ "paragraphs": [ { "style": "Text", - "text": "The SA token is a BEP20 token on the Binance Smart Chain (BSC). It represents your contributions to the Superalgos Project and Community. It is a way to reward the user base and grow the development pool.", - "updated": 1630605572869 + "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 56f2e55a6..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,7 +3,7 @@ "pageNumber": 5, "type": "Tutorial Step - With Tokens Comes Responsibility", "definition": { - "text": "Holding tokens does more than just show commitment. SA tokens also confer Token Power!", + "text": "Holding tokens does more than just show commitment. SA Tokens also confer Token Power!", "updated": 1630605735788, "icon": { "name": "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-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 46a7b8489..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 @@ -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 20e855b03..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": "It will also create a unique Binance Smart Chain wallet that is connected with your profile. We call it your Governance Address.", - "updated": 1630606460047 + "text": "It will create a unique Binance Smart Chain wallet that is connected with your profile: your Governance Address.", + "updated": 1630657968476 }, { "style": "Note", @@ -23,7 +23,7 @@ }, { "style": "Text", - "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.", + "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 } ] 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 33ab1e63d..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": [ { 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 f1f024728..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,8 +13,8 @@ "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", 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 c65bd3199..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,9 +12,9 @@ }, "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", 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 17b3da1da..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 @@ -18,8 +18,12 @@ }, { "style": "Callout", - "text": "Find the Token Power Switch node under the User Profile node and click Add Onboarding Programs on the menu.", - "updated": 1630606805313 + "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 32228ce90..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 @@ -23,8 +23,8 @@ }, { "style": "Success", - "text": "Now you may get up to 1,000 SA tokens at the next Distribution Event and every other future release provided you submit your User Profile!", - "updated": 1630607071137 + "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-1.1-tutorial-step-how-github-works.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.1-tutorial-step-how-github-works.json new file mode 100644 index 000000000..d0b818a42 --- /dev/null +++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.1-tutorial-step-how-github-works.json @@ -0,0 +1,35 @@ +{ + "tutorial": "Creating Your User Profile Tutorial", + "pageNumber": "21.1", + "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-1.6-tutorial-step-low-hanging-fruit.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.6-tutorial-step-low-hanging-fruit.json new file mode 100644 index 000000000..34f7ce38d --- /dev/null +++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.6-tutorial-step-low-hanging-fruit.json @@ -0,0 +1,30 @@ +{ + "tutorial": "Creating Your User Profile Tutorial", + "pageNumber": "21.6", + "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-1.7-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-1.7-tutorial-step-ill-lay-out-the-basics.json new file mode 100644 index 000000000..22e57c556 --- /dev/null +++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.7-tutorial-step-ill-lay-out-the-basics.json @@ -0,0 +1,34 @@ +{ + "tutorial": "Creating Your User Profile Tutorial", + "pageNumber": "21.7", + "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-1.8-tutorial-step-the-referrral-program.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.8-tutorial-step-the-referrral-program.json new file mode 100644 index 000000000..bc767cbae --- /dev/null +++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.8-tutorial-step-the-referrral-program.json @@ -0,0 +1,39 @@ +{ + "tutorial": "Creating Your User Profile Tutorial", + "pageNumber": "21.8", + "type": "Tutorial Step - The Referrral 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": "Now, let's clarify what rules you must fulfill to earn your Tokens Bonus!" + }, + { + "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: Uuuhh... token power... that sounds neat! It is! You'll see!", + "updated": 1630665776592 + } + ] +} \ No newline at end of file From b4d2a17f126ce9fa4e1f1b85b4dfe3c436a8a77b Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 3 Sep 2021 12:47:33 +0200 Subject: [PATCH 26/29] Test Query User Profile Stats debugged --- Desktop/DesktopApp.js | 46 +++++++++++++++---- .../NT/Modules/ClientInterface.js | 1 - 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/Desktop/DesktopApp.js b/Desktop/DesktopApp.js index 19b8726a0..ab63aee68 100644 --- a/Desktop/DesktopApp.js +++ b/Desktop/DesktopApp.js @@ -17,8 +17,12 @@ exports.newDesktopApp = function newDesktopApp() { DK.webSocketsClient = SA.projects.network.modules.webSocketsClient.newNetworkModulesWebSocketsClient() await DK.webSocketsClient.initialize() - let queryMessage = { - equeryId: "123", + let queryMessage + let query + /* + Test Query User Profiles. + */ + queryMessage = { queryType: 0, emitterUserProfileId: DK.TEST_NETWORK_CLIENT_USER_PROFILE_ID, initialIndex: 'Last', @@ -26,21 +30,47 @@ exports.newDesktopApp = function newDesktopApp() { direction: 'Past' } - let query = { + query = { requestType: 'Query', - queryMessage : JSON.stringify(queryMessage ) + queryMessage: JSON.stringify(queryMessage) } await DK.webSocketsClient.sendMessage( JSON.stringify(query) ) - .then(showProfiles) - .catch(onError) - - function showProfiles(profiles){ + .then(showProfiles) + .catch(onError) + + function showProfiles(profiles) { console.log(profiles) } + /* + Test Query User Profile Stats. + */ + queryMessage = { + queryType: 1, + 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/Projects/Social-Trading/NT/Modules/ClientInterface.js b/Projects/Social-Trading/NT/Modules/ClientInterface.js index 9a0e7b57f..b74c0b675 100644 --- a/Projects/Social-Trading/NT/Modules/ClientInterface.js +++ b/Projects/Social-Trading/NT/Modules/ClientInterface.js @@ -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", From 3e079b21a7f965ef19f102b8cd1e3396f3e43ee8 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 3 Sep 2021 13:08:57 +0200 Subject: [PATCH 27/29] Query Types as Global Contants --- Desktop/DesktopApp.js | 4 +-- Projects/ProjectsSchema.json | 22 ++++++++++---- .../NT/Modules/Queries/Events.js | 4 +-- .../NT/Modules/Queries/PostReplies.js | 4 +-- .../NT/Modules/Queries/ProfileFollowers.js | 2 +- .../NT/Modules/Queries/ProfileFollowing.js | 4 +-- .../NT/Modules/Queries/ProfilePosts.js | 4 +-- .../NT/Modules/Queries/UserProfiles.js | 4 +-- Projects/Social-Trading/NT/Modules/Query.js | 29 +++++-------------- .../NT/Utilities/QueriesValidations.js | 10 +++---- .../{NT => SA}/Globals/QueryConstants.js | 0 .../Social-Trading/SA/Globals/QueryTypes.js | 15 ++++++++++ 12 files changed, 57 insertions(+), 45 deletions(-) rename Projects/Social-Trading/{NT => SA}/Globals/QueryConstants.js (100%) create mode 100644 Projects/Social-Trading/SA/Globals/QueryTypes.js diff --git a/Desktop/DesktopApp.js b/Desktop/DesktopApp.js index ab63aee68..8e0b948fb 100644 --- a/Desktop/DesktopApp.js +++ b/Desktop/DesktopApp.js @@ -23,7 +23,7 @@ exports.newDesktopApp = function newDesktopApp() { Test Query User Profiles. */ queryMessage = { - queryType: 0, + queryType: SA.projects.socialTrading.globals.queryTypes.USER_PROFILES, emitterUserProfileId: DK.TEST_NETWORK_CLIENT_USER_PROFILE_ID, initialIndex: 'Last', amountRequested: 10, @@ -48,7 +48,7 @@ exports.newDesktopApp = function newDesktopApp() { Test Query User Profile Stats. */ queryMessage = { - queryType: 1, + 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 } diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json index f1bac7bfd..6cc52d73f 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -1306,12 +1306,6 @@ "propertyName": "socialTrading", "NT": { "globals": [ - { - "name": "Query Constants", - "propertyName": "queryConstants", - "functionName": "newSocialTradingGlobalsQueryConstants", - "fileName": "QueryConstants.js" - }, { "name": "Memory", "propertyName": "memory", @@ -1431,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/Queries/Events.js b/Projects/Social-Trading/NT/Modules/Queries/Events.js index 981cb9323..1732fe794 100644 --- a/Projects/Social-Trading/NT/Modules/Queries/Events.js +++ b/Projects/Social-Trading/NT/Modules/Queries/Events.js @@ -29,7 +29,7 @@ exports.newSocialTradingModulesQueriesEvents = function newSocialTradingModulesQ 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 } diff --git a/Projects/Social-Trading/NT/Modules/Queries/PostReplies.js b/Projects/Social-Trading/NT/Modules/Queries/PostReplies.js index 3a18bc421..d9af6ea72 100644 --- a/Projects/Social-Trading/NT/Modules/Queries/PostReplies.js +++ b/Projects/Social-Trading/NT/Modules/Queries/PostReplies.js @@ -43,7 +43,7 @@ exports.newSocialTradingModulesQueriesPostReplies = function newSocialTradingMod 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 = thisObject.array[i] if (post === undefined) { break } @@ -51,7 +51,7 @@ exports.newSocialTradingModulesQueriesPostReplies = function newSocialTradingMod } 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 = thisObject.array[i] if (post === undefined) { break } diff --git a/Projects/Social-Trading/NT/Modules/Queries/ProfileFollowers.js b/Projects/Social-Trading/NT/Modules/Queries/ProfileFollowers.js index dccdcfd2d..ce9ba104d 100644 --- a/Projects/Social-Trading/NT/Modules/Queries/ProfileFollowers.js +++ b/Projects/Social-Trading/NT/Modules/Queries/ProfileFollowers.js @@ -35,7 +35,7 @@ exports.newSocialTradingModulesQueriesProfileFollowers = function newSocialTradi 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 arrayItem = thisObject.array[i] if (arrayItem === undefined) { break } diff --git a/Projects/Social-Trading/NT/Modules/Queries/ProfileFollowing.js b/Projects/Social-Trading/NT/Modules/Queries/ProfileFollowing.js index a1624dedb..a04791cac 100644 --- a/Projects/Social-Trading/NT/Modules/Queries/ProfileFollowing.js +++ b/Projects/Social-Trading/NT/Modules/Queries/ProfileFollowing.js @@ -35,7 +35,7 @@ exports.newSocialTradingModulesQueriesProfileFollowing = function newSocialTradi 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 arrayItem = thisObject.array[i] if (arrayItem === undefined) { break } @@ -43,7 +43,7 @@ exports.newSocialTradingModulesQueriesProfileFollowing = function newSocialTradi } 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 = thisObject.array[i] if (arrayItem === undefined) { break } diff --git a/Projects/Social-Trading/NT/Modules/Queries/ProfilePosts.js b/Projects/Social-Trading/NT/Modules/Queries/ProfilePosts.js index 45ab02b3b..a1971be61 100644 --- a/Projects/Social-Trading/NT/Modules/Queries/ProfilePosts.js +++ b/Projects/Social-Trading/NT/Modules/Queries/ProfilePosts.js @@ -38,7 +38,7 @@ exports.newSocialTradingModulesQueriesUserProfileStats = function newSocialTradi 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 arrayItem = thisObject.array[i] if (arrayItem === undefined) { break } @@ -46,7 +46,7 @@ exports.newSocialTradingModulesQueriesUserProfileStats = function newSocialTradi } 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 = thisObject.array[i] if (arrayItem === undefined) { break } diff --git a/Projects/Social-Trading/NT/Modules/Queries/UserProfiles.js b/Projects/Social-Trading/NT/Modules/Queries/UserProfiles.js index f90ef2f7d..bf5223624 100644 --- a/Projects/Social-Trading/NT/Modules/Queries/UserProfiles.js +++ b/Projects/Social-Trading/NT/Modules/Queries/UserProfiles.js @@ -37,7 +37,7 @@ exports.newSocialTradingModulesQueriesUserProfiles = function newSocialTradingMo 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 arrayItem = thisObject.array[i] if (arrayItem === undefined) { break } @@ -45,7 +45,7 @@ exports.newSocialTradingModulesQueriesUserProfiles = function newSocialTradingMo } 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 = thisObject.array[i] if (arrayItem === undefined) { break } diff --git a/Projects/Social-Trading/NT/Modules/Query.js b/Projects/Social-Trading/NT/Modules/Query.js index a45835cad..d60f1e998 100644 --- a/Projects/Social-Trading/NT/Modules/Query.js +++ b/Projects/Social-Trading/NT/Modules/Query.js @@ -15,19 +15,6 @@ exports.newSocialTradingModulesQuery = function newSocialTradingModulesQuery() { finalize: finalize } - const QUERY_TYPES = { - - 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 function finalize() { @@ -41,49 +28,49 @@ exports.newSocialTradingModulesQuery = function newSocialTradingModulesQuery() { switch (thisObject.queryType) { - case QUERY_TYPES.USER_PROFILES: { + case SA.projects.socialTrading.globals.queryTypes.USER_PROFILES: { thisObject.query = NT.projects.socialTrading.modules.queriesUserProfiles.newSocialTradingModulesQueriesUserProfiles() thisObject.query.initialize(queryReceived) break } - case QUERY_TYPES.USER_PROFILE_STATS: { + case SA.projects.socialTrading.globals.queryTypes.USER_PROFILE_STATS: { thisObject.query = NT.projects.socialTrading.modules.queriesUserProfileStats.newSocialTradingModulesQueriesUserProfileStats() 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() 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() 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() 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() 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() 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() thisObject.query.initialize(queryReceived) break diff --git a/Projects/Social-Trading/NT/Utilities/QueriesValidations.js b/Projects/Social-Trading/NT/Utilities/QueriesValidations.js index 20c00c0cf..dd63209ae 100644 --- a/Projects/Social-Trading/NT/Utilities/QueriesValidations.js +++ b/Projects/Social-Trading/NT/Utilities/QueriesValidations.js @@ -51,11 +51,11 @@ exports.newSocialTradingUtilitiesQueriesValidations = function newSocialTradingU throw ('Initial Index Undefined.') } - if (queryReceived.initialIndex === NT.projects.socialTrading.globals.queryConstants.INITIAL_INDEX_LAST) { + 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,11 +75,11 @@ 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.') } @@ -91,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 From b7535dd7795a603c41d46f6688b4210100bb4abe Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 3 Sep 2021 14:57:37 +0200 Subject: [PATCH 28/29] Platform Bug Fixed: CLIENT_WEB_SOCKETS_INTERFACE_PORT not correctly refactored. --- Projects/Foundations/TS/Task-Modules/EventServerClient.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 5262e191e5a55bca30f16fc6dd5df7142a1f90d0 Mon Sep 17 00:00:00 2001 From: Julian Molina Date: Fri, 3 Sep 2021 20:00:40 +0200 Subject: [PATCH 29/29] Governance tutorial main extension done --- .../Creating Your User Profile Tutorial.json | 656 +++++++-- ...ng%20Your%20User%20Profile%20Tutorial.json | 1276 ----------------- .../community-building-programs.json | 22 +- .../community-buidling-programs.json | 12 + .../community-building-programs.json | 12 + ...rnance-how-to-001-load-a-user-profile.json | 18 +- ...l-022-tutorial-step-how-github-works.json} | 2 +- ...-023-tutorial-step-save-your-profile.json} | 2 +- ...-024-tutorial-step-low-hanging-fruit.json} | 2 +- ...tutorial-step-ill-lay-out-the-basics.json} | 2 +- ...6-tutorial-step-the-referral-program.json} | 11 +- ...-tutorial-step-declare-your-referrers.json | 30 + ...8-tutorial-step-load-the-user-profile.json | 30 + ...orial-step-reference-the-user-profile.json | 30 + ...0-tutorial-step-referral-token-awards.json | 39 + ...tutorial-step-token-power-requirement.json | 34 + ...l-032-tutorial-step-controlling-flows.json | 30 + ...al-033-tutorial-step-what-token-power.json | 25 + ...tutorial-step-support-your-supporters.json | 25 + ...-035-tutorial-step-thank-your-mentors.json | 30 + ...l-036-tutorial-step-make-it-official.json} | 10 +- ...tutorial-step-to-infinity-and-beyond.json} | 2 +- ...ial-038-tutorial-step-welcome-aboard.json} | 2 +- 23 files changed, 902 insertions(+), 1400 deletions(-) delete mode 100644 Projects/Foundations/Plugins/Tutorials/Creating%20Your%20User%20Profile%20Tutorial.json create mode 100644 Projects/Governance/Schemas/Docs-Nodes/C/community-buidling-programs/community-buidling-programs/community-buidling-programs.json create mode 100644 Projects/Governance/Schemas/Docs-Nodes/C/community-building-programs/community-building-programs/community-building-programs.json rename Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/{creating-your-user-profile-tutorial-1.1-tutorial-step-how-github-works.json => creating-your-user-profile-tutorial-022-tutorial-step-how-github-works.json} (98%) rename Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/{creating-your-user-profile-tutorial-1.5-tutorial-step-save-your-profile.json => creating-your-user-profile-tutorial-023-tutorial-step-save-your-profile.json} (97%) rename Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/{creating-your-user-profile-tutorial-1.6-tutorial-step-low-hanging-fruit.json => creating-your-user-profile-tutorial-024-tutorial-step-low-hanging-fruit.json} (97%) rename Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/{creating-your-user-profile-tutorial-1.7-tutorial-step-ill-lay-out-the-basics.json => creating-your-user-profile-tutorial-025-tutorial-step-ill-lay-out-the-basics.json} (98%) rename Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/{creating-your-user-profile-tutorial-1.8-tutorial-step-the-referrral-program.json => creating-your-user-profile-tutorial-026-tutorial-step-the-referral-program.json} (79%) create mode 100644 Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-027-tutorial-step-declare-your-referrers.json create mode 100644 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 create mode 100644 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 create mode 100644 Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-030-tutorial-step-referral-token-awards.json create mode 100644 Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-031-tutorial-step-token-power-requirement.json create mode 100644 Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-032-tutorial-step-controlling-flows.json create mode 100644 Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-033-tutorial-step-what-token-power.json create mode 100644 Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-034-tutorial-step-support-your-supporters.json create mode 100644 Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-035-tutorial-step-thank-your-mentors.json rename Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/{creating-your-user-profile-tutorial-022-tutorial-step-make-it-official.json => creating-your-user-profile-tutorial-036-tutorial-step-make-it-official.json} (74%) rename 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 => creating-your-user-profile-tutorial-037-tutorial-step-to-infinity-and-beyond.json} (98%) rename Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/{creating-your-user-profile-tutorial-024-tutorial-step-welcome-aboard.json => creating-your-user-profile-tutorial-038-tutorial-step-welcome-aboard.json} (98%) diff --git a/Projects/Foundations/Plugins/Tutorials/Creating Your User Profile Tutorial.json b/Projects/Foundations/Plugins/Tutorials/Creating Your User Profile Tutorial.json index cc98dd86b..5ec30aba9 100644 --- a/Projects/Foundations/Plugins/Tutorials/Creating Your User Profile Tutorial.json +++ b/Projects/Foundations/Plugins/Tutorials/Creating Your User Profile Tutorial.json @@ -1,7 +1,7 @@ { "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\",\"closeTutorialEditor\":true,\"page\":{\"project\":\"Foundations\",\"category\":\"\",\"type\":\"\"}},\"codeName\":\"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": [ @@ -217,8 +217,8 @@ "id": "eca95394-e23c-4464-a0a2-955e45fd9ca5", "savedPayload": { "position": { - "x": 16939.132034355964, - "y": 31134.382034355964 + "x": 16956.813332935693, + "y": 31115.086282905962 }, "targetPosition": { "x": 16727, @@ -254,12 +254,12 @@ "id": "df575afd-af40-4725-a9a0-d0e3bdd64572", "savedPayload": { "position": { - "x": 19822, - "y": 31494.057621135333 + "x": 16877, + "y": 31482.057621135333 }, "targetPosition": { - "x": 19672, - "y": 31234.25 + "x": 16727, + "y": 31222.25 }, "floatingObject": { "isPinned": false, @@ -298,12 +298,12 @@ "id": "1a414df9-32fa-4055-b0db-7a932e4b59e1", "savedPayload": { "position": { - "x": 19522, - "y": 31494.057621135333 + "x": 16577, + "y": 31482.057621135333 }, "targetPosition": { - "x": 19672, - "y": 31234.25 + "x": 16727, + "y": 31222.25 }, "floatingObject": { "isPinned": false, @@ -326,8 +326,8 @@ "id": "47f47947-70a9-48a6-88d0-bd3dae2be578", "savedPayload": { "position": { - "x": 16727, - "y": 31222.25 + "x": 16779.09445330008, + "y": 31217.692325903663 }, "targetPosition": { "x": 16727, @@ -363,12 +363,12 @@ "id": "9aec749c-46c8-45d0-99f4-f99ecd50ec44", "savedPayload": { "position": { - "x": 19459.867965644036, - "y": 31446.382034355964 + "x": 16514.867965644036, + "y": 31434.382034355964 }, "targetPosition": { - "x": 19459.867965644036, - "y": 31146.382034355964 + "x": 16514.867965644036, + "y": 31134.382034355964 }, "floatingObject": { "isPinned": false, @@ -402,17 +402,17 @@ { "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}", + "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": 19247.735931288073, - "y": 31358.514068711927 + "x": 16302.735931288073, + "y": 31346.514068711927 }, "targetPosition": { - "x": 19459.867965644036, - "y": 31146.382034355964 + "x": 16514.867965644036, + "y": 31134.382034355964 }, "floatingObject": { "isPinned": false, @@ -433,17 +433,17 @@ { "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}", + "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": 19159.867965644036, - "y": 31146.382034355964 + "x": 16214.867965644036, + "y": 31134.382034355964 }, "targetPosition": { - "x": 19459.867965644036, - "y": 31146.382034355964 + "x": 16514.867965644036, + "y": 31134.382034355964 }, "floatingObject": { "isPinned": false, @@ -497,8 +497,8 @@ "id": "1b7b5af2-bb52-4090-965e-cd457b2e229c", "savedPayload": { "position": { - "x": 16514.867965644036, - "y": 31134.382034355964 + "x": 16577, + "y": 31182.057621135333 }, "targetPosition": { "x": 16727, @@ -534,12 +534,12 @@ "id": "a7929f0d-8dee-488c-b517-7ac95d2cb071", "savedPayload": { "position": { - "x": 19159.867965644036, - "y": 31146.382034355964 + "x": 16214.867965644036, + "y": 31134.382034355964 }, "targetPosition": { - "x": 19372, - "y": 30934.25 + "x": 16427, + "y": 30922.25 }, "floatingObject": { "isPinned": false, @@ -578,12 +578,12 @@ "id": "5ad27b7a-b482-44ca-a06d-8db0059d1eed", "savedPayload": { "position": { - "x": 19072, - "y": 30934.25 + "x": 16127, + "y": 30922.25 }, "targetPosition": { - "x": 19372, - "y": 30934.25 + "x": 16427, + "y": 30922.25 }, "floatingObject": { "isPinned": false, @@ -609,12 +609,12 @@ "id": "577c1c57-88f8-4987-a1f1-f7ef10ace032", "savedPayload": { "position": { - "x": 19159.867965644036, - "y": 30722.117965644036 + "x": 16214.867965644036, + "y": 30710.117965644036 }, "targetPosition": { - "x": 19372, - "y": 30934.25 + "x": 16427, + "y": 30922.25 }, "floatingObject": { "isPinned": false, @@ -637,8 +637,8 @@ "id": "9aaa02f8-73ec-4c89-b1ec-85d4114c5a93", "savedPayload": { "position": { - "x": 16427, - "y": 30922.25 + "x": 16445.092213764226, + "y": 31024.8560429977 }, "targetPosition": { "x": 16727, @@ -674,12 +674,12 @@ "id": "4147bad2-0dd4-4082-bb5a-48a0bc84f595", "savedPayload": { "position": { - "x": 19159.867965644036, - "y": 30722.117965644036 + "x": 16214.867965644036, + "y": 30710.117965644036 }, "targetPosition": { - "x": 19459.867965644036, - "y": 30722.117965644036 + "x": 16514.867965644036, + "y": 30710.117965644036 }, "floatingObject": { "isPinned": false, @@ -705,12 +705,12 @@ "id": "42cf8adb-7bee-4449-b8ab-ccc283e17796", "savedPayload": { "position": { - "x": 19247.735931288073, - "y": 30509.985931288073 + "x": 16302.735931288073, + "y": 30497.985931288073 }, "targetPosition": { - "x": 19459.867965644036, - "y": 30722.117965644036 + "x": 16514.867965644036, + "y": 30710.117965644036 }, "floatingObject": { "isPinned": false, @@ -731,17 +731,17 @@ { "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}", + "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": 19459.867965644036, - "y": 30422.117965644036 + "x": 16514.867965644036, + "y": 30410.117965644036 }, "targetPosition": { - "x": 19459.867965644036, - "y": 30722.117965644036 + "x": 16514.867965644036, + "y": 30710.117965644036 }, "floatingObject": { "isPinned": false, @@ -764,8 +764,8 @@ "id": "ba99b336-1578-4a76-99f0-24e461922b4c", "savedPayload": { "position": { - "x": 16514.867965644036, - "y": 30710.117965644036 + "x": 16445.092213764226, + "y": 30819.6439570023 }, "targetPosition": { "x": 16727, @@ -801,12 +801,12 @@ "id": "18c61fe9-3cc1-4f88-9499-b873fbcb9db0", "savedPayload": { "position": { - "x": 16514.867965644036, - "y": 30410.117965644036 + "x": 16277, + "y": 30662.442378864667 }, "targetPosition": { - "x": 16727, - "y": 30622.25 + "x": 16577, + "y": 30662.442378864667 }, "floatingObject": { "isPinned": false, @@ -832,12 +832,12 @@ "id": "7c1c466e-a5a4-4e67-94cb-6dc9e040f89b", "savedPayload": { "position": { - "x": 16727, - "y": 30322.25 + "x": 16317.192378864669, + "y": 30512.442378864667 }, "targetPosition": { - "x": 16727, - "y": 30622.25 + "x": 16577, + "y": 30662.442378864667 }, "floatingObject": { "isPinned": false, @@ -858,17 +858,79 @@ { "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}", + "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": 16939.132034355964, - "y": 30410.117965644036 + "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": 30622.25 + "y": 30402.634757729335 + }, + "targetPosition": { + "x": 16577, + "y": 30662.442378864667 }, "floatingObject": { "isPinned": false, @@ -891,8 +953,8 @@ "id": "578fdee3-64ad-4836-8feb-3e41746bceda", "savedPayload": { "position": { - "x": 16727, - "y": 30622.25 + "x": 16577, + "y": 30662.442378864667 }, "targetPosition": { "x": 16727, @@ -916,24 +978,24 @@ }, { "type": "Tutorial Topic", - "name": "Submit Profile", + "name": "Community building Programs", "config": "{\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\"\n}", "project": "Education", "tutorialSteps": [ { "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}", + "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": "782adca5-f889-4a72-a1b2-7bd3c07c283f", + "id": "f4999bbd-e909-4ee4-9e1c-fd2cf26f6565", "savedPayload": { "position": { - "x": 16892.201694843894, - "y": 30413.811463465496 + "x": 16393.556244709704, + "y": 30297.15952167357 }, "targetPosition": { - "x": 16939.132034355964, - "y": 30710.117965644036 + "x": 16805.141679950117, + "y": 30479.086511144505 }, "floatingObject": { "isPinned": false, @@ -951,6 +1013,412 @@ } } }, + { + "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", @@ -959,12 +1427,12 @@ "id": "fe74b3ae-9490-465a-a491-db4b0834dbf7", "savedPayload": { "position": { - "x": 17075.329184277827, - "y": 30442.816008387526 + "x": 16982.96005575999, + "y": 30430.555307666513 }, "targetPosition": { - "x": 16939.132034355964, - "y": 30710.117965644036 + "x": 16956.813332935693, + "y": 30729.413717094038 }, "floatingObject": { "isPinned": false, @@ -1009,12 +1477,12 @@ "id": "e4c5a34f-67c4-4fdc-8c11-aef5bde92d72", "savedPayload": { "position": { - "x": 17206.433991612474, - "y": 30573.920815722173 + "x": 17186.626665871387, + "y": 30536.577434188075 }, "targetPosition": { - "x": 16939.132034355964, - "y": 30710.117965644036 + "x": 16956.813332935693, + "y": 30729.413717094038 }, "floatingObject": { "isPinned": false, @@ -1040,12 +1508,12 @@ "id": "340f9107-9b4a-424b-94f2-79d65873c572", "savedPayload": { "position": { - "x": 17235.438536534504, - "y": 30757.048305156106 + "x": 17255.671742363218, + "y": 30755.560439918336 }, "targetPosition": { - "x": 16939.132034355964, - "y": 30710.117965644036 + "x": 16956.813332935693, + "y": 30729.413717094038 }, "floatingObject": { "isPinned": false, @@ -1081,8 +1549,8 @@ "id": "75373f58-ac05-4358-ad12-e50c88f08196", "savedPayload": { "position": { - "x": 16939.132034355964, - "y": 30710.117965644036 + "x": 16956.813332935693, + "y": 30729.413717094038 }, "targetPosition": { "x": 16727, diff --git a/Projects/Foundations/Plugins/Tutorials/Creating%20Your%20User%20Profile%20Tutorial.json b/Projects/Foundations/Plugins/Tutorials/Creating%20Your%20User%20Profile%20Tutorial.json deleted file mode 100644 index 61b0e7695..000000000 --- a/Projects/Foundations/Plugins/Tutorials/Creating%20Your%20User%20Profile%20Tutorial.json +++ /dev/null @@ -1,1276 +0,0 @@ -{ - "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\": \"Open\",\n \"searchPage\": true,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n },\n \"codeName\": \"Creating Your User Profile Tutorial\"\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": "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": "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": 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": "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": 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": "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": 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": "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" - ] - ] - } - } - ], - "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": "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": 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": "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": 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": "Done" - } - } - } - ], - "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": "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": 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": "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\": \"\",\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": {} - } - }, - { - "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": "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": 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": "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": 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": {}, - "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": {} - } - }, - { - "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": "Done" - } - } - } - ], - "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": "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": 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": "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": 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": "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\": \"\",\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": "Done" - } - } - } - ], - "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": "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": 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": "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": 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": "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\": \"\",\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": "Done" - } - } - }, - { - "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": {} - } - }, - { - "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": "Done" - } - } - } - ], - "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": "Done" - } - } - }, - { - "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": 16607.021522394767, - "y": 30381.06206080964 - }, - "targetPosition": { - "x": 16779.09445330008, - "y": 30626.807674096337 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 2, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - }, - "tutorial": { - "status": "Done" - } - } - }, - { - "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": 16831.18890660016, - "y": 30331.365348192674 - }, - "targetPosition": { - "x": 16779.09445330008, - "y": 30626.807674096337 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 2, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - { - "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 Referrral 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": 17024.840066586778, - "y": 30454.734743191024 - }, - "targetPosition": { - "x": 16779.09445330008, - "y": 30626.807674096337 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 2, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - } - ], - "tutorialTopics": [], - "id": "5b6febb1-6160-4c3a-bca1-5d2b47950a94", - "savedPayload": { - "position": { - "x": 16779.09445330008, - "y": 30626.807674096337 - }, - "targetPosition": { - "x": 16727, - "y": 30922.25 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "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": 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": {}, - "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": "Done" - } - } - } - ], - "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": false, - "angleToParent": 1, - "distanceToParent": 3, - "arrangementStyle": 1 - }, - "uiObject": { - "isPlaying": false, - "isRunning": false - }, - "tutorial": { - "status": "Done" - } - } -} \ No newline at end of file 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-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 index 8a647d7ec..5c11208d8 100644 --- 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 @@ -3,22 +3,23 @@ "pageNumber": "1", "type": "Load a User Profile", "definition": { - "text": "Use this guide if you ever wish to load a User Profile on any of the Governance Workspaces.", - "updated": 1630597219985 + "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": 1630597234417 + "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": "Text", + "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": "Text", - "text": "Or maybe you wish to load your User Profile in one of the Other Governance Workspaces." + "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", @@ -27,7 +28,8 @@ }, { "style": "List", - "text": "Find out the person's User Profil 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!" + "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", diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.1-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 similarity index 98% rename from Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.1-tutorial-step-how-github-works.json rename to Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-022-tutorial-step-how-github-works.json index d0b818a42..8c3ee0c46 100644 --- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.1-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 @@ -1,6 +1,6 @@ { "tutorial": "Creating Your User Profile Tutorial", - "pageNumber": "21.1", + "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!", diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.5-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 similarity index 97% rename from Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.5-tutorial-step-save-your-profile.json rename to Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-023-tutorial-step-save-your-profile.json index f4b7d3bb1..7265322fa 100644 --- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.5-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 @@ -1,6 +1,6 @@ { "tutorial": "Creating Your User Profile Tutorial", - "pageNumber": "21.5", + "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!", diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.6-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 similarity index 97% rename from Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.6-tutorial-step-low-hanging-fruit.json rename to Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-024-tutorial-step-low-hanging-fruit.json index 34f7ce38d..cbac2e8a5 100644 --- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.6-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 @@ -1,6 +1,6 @@ { "tutorial": "Creating Your User Profile Tutorial", - "pageNumber": "21.6", + "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!", diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.7-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 similarity index 98% rename from Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.7-tutorial-step-ill-lay-out-the-basics.json rename to 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 index 22e57c556..c1dda1c1c 100644 --- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.7-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 @@ -1,6 +1,6 @@ { "tutorial": "Creating Your User Profile Tutorial", - "pageNumber": "21.7", + "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.", diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.8-tutorial-step-the-referrral-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 similarity index 79% rename from Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.8-tutorial-step-the-referrral-program.json rename to Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-026-tutorial-step-the-referral-program.json index bc767cbae..6bbe17202 100644 --- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-1.8-tutorial-step-the-referrral-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 @@ -1,7 +1,7 @@ { "tutorial": "Creating Your User Profile Tutorial", - "pageNumber": "21.8", - "type": "Tutorial Step - The Referrral Program", + "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, @@ -18,7 +18,8 @@ }, { "style": "Text", - "text": "Now, let's clarify what rules you must fulfill to earn your Tokens Bonus!" + "text": "First, let's clarify what rules you must fulfill to earn your Tokens Bonus!", + "updated": 1630668604341 }, { "style": "List", @@ -32,8 +33,8 @@ }, { "style": "List", - "text": "You must drive Token Power to the program: Uuuhh... token power... that sounds neat! It is! You'll see!", - "updated": 1630665776592 + "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-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-036-tutorial-step-make-it-official.json similarity index 74% rename from Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-022-tutorial-step-make-it-official.json rename to Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-036-tutorial-step-make-it-official.json index 5ec44fa5b..06e7183b0 100644 --- 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-036-tutorial-step-make-it-official.json @@ -1,6 +1,6 @@ { "tutorial": "Creating Your User Profile Tutorial", - "pageNumber": 22, + "pageNumber": 36, "type": "Tutorial Step - Make it Official", "definition": { "text": "Now you're ready to push your new profile to the main Superalgos repository!", @@ -13,13 +13,13 @@ "paragraphs": [ { "style": "Callout", - "text": "Set up you Github API credentials to get ready to contribute your profile!", - "updated": 1630603651524 + "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. Then come back here and we'll finish up!", - "updated": 1630604385835 + "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", 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-037-tutorial-step-to-infinity-and-beyond.json similarity index 98% rename from 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 rename to 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 index e41fd3f72..23366ef16 100644 --- 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-037-tutorial-step-to-infinity-and-beyond.json @@ -1,6 +1,6 @@ { "tutorial": "Creating Your User Profile Tutorial", - "pageNumber": 23, + "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.", 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.",