diff --git a/aqua/app.aqua b/aqua/app.aqua index 5f5e659..e7ff935 100644 --- a/aqua/app.aqua +++ b/aqua/app.aqua @@ -18,7 +18,7 @@ func askAllAndSend(peer: PeerId, collectPeerInfo: PeerInfoCb, collectServiceInte modules <- Dist.list_modules() services <- Srv.list() collectPeerInfo(peer, ident, services, blueprints, modules) - collectServiceInterfaces(peer, services, collectServiceInterface) + -- collectServiceInterfaces(peer, services, collectServiceInterface) -- retrieve PeerInfo and ServiceInterface-s from each peer in `peers` func getServicesFromPeers( @@ -39,16 +39,12 @@ func discoverNeighbourhood(relay: PeerId, collectNeighbors: []string -> ()): neighbors2 <- Kademlia.neighborhood(%init_peer_id%, nil, nil) collectNeighbors(neighbors2) -func getAll( - relay: PeerId, - knownPeers: []PeerId, - collectPeerInfo: PeerInfoCb, - collectServiceInterface: ServiceInterfaceCb, - collectNeighbors: []string -> () -): - co askAllAndSend(relay, collectPeerInfo, collectServiceInterface) - - for peer <- knownPeers par: - askAllAndSend(peer, collectPeerInfo, collectServiceInterface) - - co discoverNeighbourhood(relay, collectNeighbors) +func discoverNeighbourhoodFull(relay: PeerId, knownPeers: []PeerId, collectNeighbors: []string -> ()): + for node <- knownPeers par: + on node via relay: + neighbors <- Kademlia.neighborhood(%init_peer_id%, nil, nil) + co collectNeighbors(neighbors) + for n <- neighbors par: + on n: + neighbors2 <- Kademlia.neighborhood(%init_peer_id%, nil, nil) + collectNeighbors(neighbors2) diff --git a/package-lock.json b/package-lock.json index b9c7415..77f6082 100644 --- a/package-lock.json +++ b/package-lock.json @@ -998,9 +998,9 @@ } }, "@fluencelabs/aqua-cli": { - "version": "0.1.9-165", - "resolved": "https://registry.npmjs.org/@fluencelabs/aqua-cli/-/aqua-cli-0.1.9-165.tgz", - "integrity": "sha512-DBcPRxzJiQCdnur2wVgX47CRccTSoXhDPwURh8IW8RuP0vI+F8MWRcqdxT9DDDMe396e9je3f7g2bT8gfif1SQ==", + "version": "0.1.10-188", + "resolved": "https://registry.npmjs.org/@fluencelabs/aqua-cli/-/aqua-cli-0.1.10-188.tgz", + "integrity": "sha512-3StvE+xevgQVsGwHGpSY+OuXx86N89MxUpguvZfwufRuSLIO++aMmUGUC14GFc7LQelcP86h6pFZ5o7pNYEIVw==", "dev": true }, "@fluencelabs/aqua-lib": { diff --git a/package.json b/package.json index 3731d14..861a4cf 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "yup": "^0.32.9" }, "devDependencies": { - "@fluencelabs/aqua-cli": "0.1.9-165", + "@fluencelabs/aqua-cli": "0.1.10-188", "@fluencelabs/aqua-lib": "0.1.13", "@babel/core": "^7.11.6", "@babel/preset-env": "^7.11.5", diff --git a/src/_aqua/app.js b/src/_aqua/app.js index c0e8c7e..b06a90e 100644 --- a/src/_aqua/app.js +++ b/src/_aqua/app.js @@ -3,7 +3,7 @@ * This file is auto-generated. Do not edit manually: changes may be erased. * Generated by Aqua compiler: https://github.com/fluencelabs/aqua/. * If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues - * Aqua version: 0.1.9-165 + * Aqua version: 0.1.10-188 * */ import { RequestFlowBuilder } from '@fluencelabs/fluence/dist/api.unstable'; @@ -33,53 +33,24 @@ export async function askAllAndSend(client, peer, collectPeerInfo, collectServic (seq (seq (seq - (seq - (seq - (call peer ("peer" "identify") [] ident) - (call peer ("dist" "list_blueprints") [] blueprints) - ) - (call peer ("dist" "list_modules") [] modules) - ) - (call peer ("srv" "list") [] services) + (call peer ("peer" "identify") [] ident) + (call peer ("dist" "list_blueprints") [] blueprints) ) - (call -relay- ("op" "noop") []) - ) - (xor - (call %init_peer_id% ("callbackSrv" "collectPeerInfo") [peer ident services blueprints modules]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + (call peer ("dist" "list_modules") [] modules) ) + (call peer ("srv" "list") [] services) ) (call -relay- ("op" "noop") []) ) - (fold services srv - (par - (seq - (call -relay- ("op" "noop") []) - (xor - (seq - (seq - (call peer ("srv" "get_interface") [srv.$.id!] iface) - (call -relay- ("op" "noop") []) - ) - (xor - (call %init_peer_id% ("callbackSrv" "collectServiceInterface") [peer srv.$.id! iface]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) - ) - ) - (seq - (call -relay- ("op" "noop") []) - (next srv) - ) - ) + (xor + (call %init_peer_id% ("callbackSrv" "collectPeerInfo") [peer ident services blueprints modules]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) ) ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) ) ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) ) `, @@ -113,222 +84,6 @@ h.on('callbackSrv', 'collectServiceInterface', (args) => {collectServiceInterfac -export async function getAll(client, relay, knownPeers, collectPeerInfo, collectServiceInterface, collectNeighbors, config) { - let request; - config = config || {}; - const promise = new Promise((resolve, reject) => { - var r = new RequestFlowBuilder() - .disableInjections() - .withRawScript( - ` -(xor - (seq - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "relay") [] relay) - ) - (call %init_peer_id% ("getDataSrv" "knownPeers") [] knownPeers) - ) - (par - (seq - (call -relay- ("op" "noop") []) - (xor - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (call relay ("peer" "identify") [] ident) - (call relay ("dist" "list_blueprints") [] blueprints) - ) - (call relay ("dist" "list_modules") [] modules) - ) - (call relay ("srv" "list") [] services) - ) - (call -relay- ("op" "noop") []) - ) - (xor - (call %init_peer_id% ("callbackSrv" "collectPeerInfo") [relay ident services blueprints modules]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - ) - (call -relay- ("op" "noop") []) - ) - (fold services srv - (par - (seq - (call -relay- ("op" "noop") []) - (xor - (seq - (seq - (call relay ("srv" "get_interface") [srv.$.id!] iface) - (call -relay- ("op" "noop") []) - ) - (xor - (call %init_peer_id% ("callbackSrv" "collectServiceInterface") [relay srv.$.id! iface]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) - ) - ) - (seq - (call -relay- ("op" "noop") []) - (next srv) - ) - ) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4]) - ) - ) - (null) - ) - ) - (fold knownPeers peer - (par - (seq - (call -relay- ("op" "noop") []) - (xor - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (call peer ("peer" "identify") [] ident0) - (call peer ("dist" "list_blueprints") [] blueprints0) - ) - (call peer ("dist" "list_modules") [] modules0) - ) - (call peer ("srv" "list") [] services0) - ) - (call -relay- ("op" "noop") []) - ) - (xor - (call %init_peer_id% ("callbackSrv" "collectPeerInfo") [peer ident0 services0 blueprints0 modules0]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5]) - ) - ) - (call -relay- ("op" "noop") []) - ) - (fold services0 srv0 - (par - (seq - (call -relay- ("op" "noop") []) - (xor - (seq - (seq - (call peer ("srv" "get_interface") [srv0.$.id!] iface0) - (call -relay- ("op" "noop") []) - ) - (xor - (call %init_peer_id% ("callbackSrv" "collectServiceInterface") [peer srv0.$.id! iface0]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 6]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 7]) - ) - ) - (seq - (call -relay- ("op" "noop") []) - (next srv0) - ) - ) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 8]) - ) - ) - (next peer) - ) - ) - ) - (par - (seq - (call -relay- ("op" "noop") []) - (xor - (seq - (seq - (call relay ("kad" "neighborhood") [%init_peer_id% $nil $nil] neighbors) - (par - (seq - (call -relay- ("op" "noop") []) - (xor - (call %init_peer_id% ("callbackSrv" "collectNeighbors") [neighbors]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 9]) - ) - ) - (null) - ) - ) - (fold neighbors n - (par - (xor - (seq - (seq - (call n ("kad" "neighborhood") [%init_peer_id% $nil $nil] neighbors2) - (call -relay- ("op" "noop") []) - ) - (xor - (call %init_peer_id% ("callbackSrv" "collectNeighbors") [neighbors2]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 10]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 11]) - ) - (next n) - ) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 12]) - ) - ) - (null) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 13]) -) - - `, - ) - .configHandler((h) => { - h.on('getDataSrv', '-relay-', () => { - return client.relayPeerId; - }); - h.on('getDataSrv', 'relay', () => {return relay;}); -h.on('getDataSrv', 'knownPeers', () => {return knownPeers;}); -h.on('callbackSrv', 'collectPeerInfo', (args) => {collectPeerInfo(args[0], args[1], args[2], args[3], args[4]); return {};}); -h.on('callbackSrv', 'collectServiceInterface', (args) => {collectServiceInterface(args[0], args[1], args[2]); return {};}); -h.on('callbackSrv', 'collectNeighbors', (args) => {collectNeighbors(args[0]); return {};}); - - h.onEvent('errorHandlingSrv', 'error', (args) => { - // assuming error is the single argument - const [err] = args; - reject(err); - }); - }) - .handleScriptError(reject) - .handleTimeout(() => { - reject('Request timed out for getAll'); - }) - if(config.ttl) { - r.withTTL(config.ttl) - } - request = r.build(); - }); - await client.initiateFlow(request); - return Promise.race([promise, Promise.resolve()]); -} - - - export async function getServicesFromPeers(client, peers, collectPeerInfo, collectServiceInterface, config) { let request; config = config || {}; @@ -353,57 +108,28 @@ export async function getServicesFromPeers(client, peers, collectPeerInfo, colle (seq (seq (seq - (seq - (seq - (call peer ("peer" "identify") [] ident) - (call peer ("dist" "list_blueprints") [] blueprints) - ) - (call peer ("dist" "list_modules") [] modules) - ) - (call peer ("srv" "list") [] services) + (call peer ("peer" "identify") [] ident) + (call peer ("dist" "list_blueprints") [] blueprints) ) - (call -relay- ("op" "noop") []) - ) - (xor - (call %init_peer_id% ("callbackSrv" "collectPeerInfo") [peer ident services blueprints modules]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + (call peer ("dist" "list_modules") [] modules) ) + (call peer ("srv" "list") [] services) ) (call -relay- ("op" "noop") []) ) - (fold services srv - (par - (seq - (call -relay- ("op" "noop") []) - (xor - (seq - (seq - (call peer ("srv" "get_interface") [srv.$.id!] iface) - (call -relay- ("op" "noop") []) - ) - (xor - (call %init_peer_id% ("callbackSrv" "collectServiceInterface") [peer srv.$.id! iface]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) - ) - ) - (seq - (call -relay- ("op" "noop") []) - (next srv) - ) - ) + (xor + (call %init_peer_id% ("callbackSrv" "collectPeerInfo") [peer ident services blueprints modules]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) ) ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) ) ) (next peer) ) ) ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) ) `, @@ -437,6 +163,111 @@ h.on('callbackSrv', 'collectServiceInterface', (args) => {collectServiceInterfac +export async function discoverNeighbourhoodFull(client, relay, knownPeers, collectNeighbors, config) { + let request; + config = config || {}; + const promise = new Promise((resolve, reject) => { + var r = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` +(xor + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "relay") [] relay) + ) + (call %init_peer_id% ("getDataSrv" "knownPeers") [] knownPeers) + ) + (fold knownPeers node + (par + (seq + (seq + (call -relay- ("op" "noop") []) + (call relay ("op" "noop") []) + ) + (xor + (seq + (seq + (call node ("kad" "neighborhood") [%init_peer_id% $nil $nil] neighbors) + (par + (seq + (seq + (call relay ("op" "noop") []) + (call -relay- ("op" "noop") []) + ) + (xor + (call %init_peer_id% ("callbackSrv" "collectNeighbors") [neighbors]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + ) + (null) + ) + ) + (fold neighbors n + (par + (seq + (call relay ("op" "noop") []) + (xor + (seq + (seq + (call n ("kad" "neighborhood") [%init_peer_id% $nil $nil] neighbors2) + (call -relay- ("op" "noop") []) + ) + (xor + (call %init_peer_id% ("callbackSrv" "collectNeighbors") [neighbors2]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) + ) + ) + (next n) + ) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4]) + ) + ) + (next node) + ) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', '-relay-', () => { + return client.relayPeerId; + }); + h.on('getDataSrv', 'relay', () => {return relay;}); +h.on('getDataSrv', 'knownPeers', () => {return knownPeers;}); +h.on('callbackSrv', 'collectNeighbors', (args) => {collectNeighbors(args[0]); return {};}); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + // assuming error is the single argument + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for discoverNeighbourhoodFull'); + }) + if(config.ttl) { + r.withTTL(config.ttl) + } + request = r.build(); + }); + await client.initiateFlow(request); + return Promise.race([promise, Promise.resolve()]); +} + + + export async function discoverNeighbourhood(client, relay, collectNeighbors, config) { let request; config = config || {}; diff --git a/src/index.js b/src/index.js index 1272cb0..8752def 100644 --- a/src/index.js +++ b/src/index.js @@ -32,7 +32,7 @@ import { import { Elm } from './Main.elm'; import * as serviceWorker from './serviceWorker'; import { interfaceInfo, peerInfo } from './types'; -import { getAll, getServicesFromPeers } from './_aqua/app'; +import { discoverNeighbourhoodFull, getAll, getServicesFromPeers } from './_aqua/app'; const defaultNetworkName = 'krasnodar'; @@ -203,20 +203,17 @@ function genFlags(peerId, relays, relayIdx) { // clear knownPeersSet to ask these peers again knownPeersSet.clear(); - knownPeersSet.add(...flags.knownPeers); - knownPeersSet.add(flags.relayPeerId); - - await getAll( + await getServicesFromPeers( client, - data.relayPeerId, - data.knownPeers, + [data.relayPeerId, ...data.knownPeers], collectPeerInfo, collectServiceInterface, - collectNeighbors, - { - ttl: 1000000, - }, + { ttl: 1000000 }, ); + knownPeersSet.add(...data.knownPeers); + knownPeersSet.add(data.relayPeerId); + + await discoverNeighbourhoodFull(client, data.relayPeerId, data.knownPeers, collectNeighbors, { ttl: 1000000 }); }); })();