diff --git a/aqua-examples/aqua-ipfs-integration/nodejs/package.json b/aqua-examples/aqua-ipfs-integration/nodejs/package.json index 95abffb..564d7c5 100644 --- a/aqua-examples/aqua-ipfs-integration/nodejs/package.json +++ b/aqua-examples/aqua-ipfs-integration/nodejs/package.json @@ -5,6 +5,7 @@ "main": "dist/index.js", "scripts": { "build": "tsc", + "prestart": "npm run build", "start:local": "node dist/demo.js local", "start:remote": "node dist/demo.js krasnodar", "start": "npm run start:remote" diff --git a/aqua-examples/aqua-ipfs-integration/nodejs/src/demo.ts b/aqua-examples/aqua-ipfs-integration/nodejs/src/demo.ts index e477c84..94ee210 100644 --- a/aqua-examples/aqua-ipfs-integration/nodejs/src/demo.ts +++ b/aqua-examples/aqua-ipfs-integration/nodejs/src/demo.ts @@ -34,7 +34,10 @@ import { globSource, urlSource } from "ipfs-http-client"; async function main(environment: Node[]) { // setLogLevel('DEBUG'); - let providerHost = environment[0]; + let providerHost = environment[4]; + let relay = environment[3]; + let serviceHost = environment[2]; + let providerClient = new FluencePeer(); await providerClient.start({ connectTo: providerHost }); console.log("šŸ“˜ uploading .wasm to node %s", providerHost.multiaddr); @@ -43,7 +46,7 @@ async function main(environment: Node[]) { console.log("šŸ“— swarmAddr", swarmAddr); console.log("šŸ“— rpcAddr", rpcAddr); - await Fluence.start({ connectTo: environment[1] }); + await Fluence.start({ connectTo: relay }); console.log( "šŸ“— created a fluence client %s with relay %s", Fluence.getStatus().peerId, @@ -51,11 +54,11 @@ async function main(environment: Node[]) { ); // default IPFS timeout is 1 sec, set to 10 secs to retrieve file from remote node - await set_timeout(environment[2].peerId, 10); + await set_timeout(serviceHost.peerId, 10); console.log("\n\nšŸ“˜ Will deploy ProcessFiles service"); var service_id = await deploy_service( - environment[2].peerId, + serviceHost.peerId, file.cid.toString(), rpcAddr, (label, error) => { @@ -79,7 +82,7 @@ async function main(environment: Node[]) { providerClient ); var putResult = await put_file_size( - environment[2].peerId, + serviceHost.peerId, newFile.cid.toString(), rpcAddr, service_id, @@ -94,7 +97,7 @@ async function main(environment: Node[]) { console.log("šŸ“— File size is saved to IPFS:", putResult); } - let result = await remove_service(environment[2].peerId, service_id); + let result = await remove_service(serviceHost.peerId, service_id); console.log("šŸ“— ProcessFiles service removed", result); return; } diff --git a/aqua-examples/aqua-ipfs-integration/web/src/appLogic.ts b/aqua-examples/aqua-ipfs-integration/web/src/appLogic.ts index 8b31bfe..b58d214 100644 --- a/aqua-examples/aqua-ipfs-integration/web/src/appLogic.ts +++ b/aqua-examples/aqua-ipfs-integration/web/src/appLogic.ts @@ -20,7 +20,7 @@ import { } from "./appState"; import { decapsulateP2P, fromOption } from "./util"; -export const relayNodes = [krasnodar[0], krasnodar[1], krasnodar[2]]; +export const relayNodes = [krasnodar[2], krasnodar[3], krasnodar[4]]; const requestRpcAddr = async () => { let result = await get_external_api_multiaddr( @@ -122,13 +122,15 @@ export const useRemoveService = () => { const setFileSizeCID = useSetRecoilState(fileSizeCIDState); return async () => { - if (isConnected || serviceId === null) { + console.dir(isConnected, serviceId); + if (!isConnected || serviceId === null) { return; } - + await remove_service(relay!, serviceId, { ttl: 10000, }); + console.log(`Service ${serviceId} was removed`); setServiceId(null); setFileCID(null); setFileSize(null); diff --git a/aqua-examples/aqua-ipfs-integration/web/src/appState.ts b/aqua-examples/aqua-ipfs-integration/web/src/appState.ts index bc0e29b..546a82d 100644 --- a/aqua-examples/aqua-ipfs-integration/web/src/appState.ts +++ b/aqua-examples/aqua-ipfs-integration/web/src/appState.ts @@ -22,7 +22,7 @@ export const serviceIdState = atom({ export const wasmState = atom({ key: "serviceState", - default: "Qmf8fH2cDZXGKS9uDGBcHxv5uQ51ChrigdZKe3QxS2C1AF", + default: "QmSvjkzXbXYwFXcWuFWqFdksvQDgpCeADNxkgkfzCLA4rk", }); export const rpcAddrState = atom({ @@ -32,7 +32,7 @@ export const rpcAddrState = atom({ export const fileCIDState = atom({ key: "fileCIDState", - default: "Qmf8fH2cDZXGKS9uDGBcHxv5uQ51ChrigdZKe3QxS2C1AF", + default: "QmSvjkzXbXYwFXcWuFWqFdksvQDgpCeADNxkgkfzCLA4rk", }); export const fileSizeState = atom({ diff --git a/aqua-examples/echo-greeter/Readme.md b/aqua-examples/echo-greeter/Readme.md index 1dfef74..13914ff 100644 --- a/aqua-examples/echo-greeter/Readme.md +++ b/aqua-examples/echo-greeter/Readme.md @@ -292,21 +292,21 @@ Since we want to compose services deployed on different nodes, we express this r Again, we can execute our workflow with the `fldist` tool: -```text - fldist run_air \ +```shell +fldist run_air \ -p aqua-compiled/echo_greeter.echo_greeting_seq_2.air \ -d '{"names":["jim", "john", "james"], "greet": true, "greeting_topo":{"node":"12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE", "service_id":"5a03906b-3217-40a2-93fb-7e83be735408"}, "echo_topo": {"node": "12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt", - "service_id": "fb5f7126-e1ee-4ecf-81e7-20804cb7203b"}}' + "service_id": "fb5f7126-e1ee-4ecf-81e7-20804cb7203b"}}' \ --generated ``` Regardless of the difference in service hosts, we of course get the expected result: -```text +```json [ [ "Hi, jim", @@ -346,23 +346,23 @@ In this implementation version, we call the echo-service, just as before, and in Our updated `fldist` reads: -```text +```bash fldist run_air \ -p aqua-compiled/echo_greeter.echo_greeting_par.air \ - -d '{"echo_service":{"names":["jim", "john", "james"],\ - "node": "12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt", \ - "service_id": "fb5f7126-e1ee-4ecf-81e7-20804cb7203b"}, \ - "greeting_services":[{"node":"12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE", \ - "service_id":"5a03906b-3217-40a2-93fb-7e83be735408"}, \ - {"node":"12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt", \ - "service_id":"5cf520ff-dd65-47d7-a51a-2bf08dfe2ede"}], \ + -d '{"echo_service":{"names":["jim", "john", "james"], + "node": "12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt", + "service_id": "fb5f7126-e1ee-4ecf-81e7-20804cb7203b"}, + "greeting_services":[{"node":"12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE", + "service_id":"5a03906b-3217-40a2-93fb-7e83be735408"}, + {"node":"12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt", + "service_id":"5cf520ff-dd65-47d7-a51a-2bf08dfe2ede"}], "greet": true}' \ --generated ``` And our result is: -```text +```json [ "Hi, jim", @@ -396,9 +396,9 @@ func echo_greeting_par_alternative(greet: bool, echo_service: EchoServiceInput, And running the workflow with the updated data: -```text +```bash fldist run_air \ - -p aqua-compiled/echo_greeter.echo_greeting_par_inverse.air \ + -p aqua-compiled/echo_greeter.echo_greeting_par_alternative.air \ -d '{"echo_service":{"names":["jim", "john", "james"], "node": "12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt", "service_id": "fb5f7126-e1ee-4ecf-81e7-20804cb7203b"}, @@ -412,7 +412,7 @@ fldist run_air \ gives us the updated result: -```text +```json [ [ "Hi, jim", @@ -452,8 +452,8 @@ func echo_greeting_par_improved(echo_service: EchoServiceInput, greeting_service Run the workflow with the updated json string: -```test -fldist run_air +```bash +fldist run_air \ -p aqua-compiled/echo_greeter.echo_greeting_par_improved.air \ -d '{"echo_service":{"names":["jim", "john", "james"], "node": "12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt", @@ -469,7 +469,7 @@ fldist run_air Which gives us: -```text +```json [ [ "Hi, jim", diff --git a/aqua-examples/echo-greeter/client-peer/package-lock.json b/aqua-examples/echo-greeter/client-peer/package-lock.json index 0c2a771..b921d4c 100644 --- a/aqua-examples/echo-greeter/client-peer/package-lock.json +++ b/aqua-examples/echo-greeter/client-peer/package-lock.json @@ -15,7 +15,7 @@ "it-all": "^1.0.5" }, "devDependencies": { - "@fluencelabs/aqua": "^0.3.0-226", + "@fluencelabs/aqua": "0.3.2-233", "typescript": "^3.9.5" } }, @@ -51,14 +51,16 @@ } }, "node_modules/@fluencelabs/aqua": { - "version": "0.3.0-226", - "resolved": "https://registry.npmjs.org/@fluencelabs/aqua/-/aqua-0.3.0-226.tgz", - "integrity": "sha512-9o0TdgsVNcBvifqo7VqIkN62P9EReE0LUxgWG1rGHi9yxJiGElvEBvrVUzqShffF66Ene7VGEe85lhFIGCfDgg==", + "version": "0.3.2-233", + "resolved": "https://registry.npmjs.org/@fluencelabs/aqua/-/aqua-0.3.2-233.tgz", + "integrity": "sha512-LxwNt/O2ijHA2bG7+qdmnFT//kpIVj7mACBp28LxRpb2kJYMcVDNb9VfyWDiDdoX10PAT96OpkiYvVJPs0mpEw==", "dev": true, + "dependencies": { + "@fluencelabs/fluence": "0.12.1" + }, "bin": { "aqua": "index.js", - "aqua-cli": "error.js", - "aqua-j": "index-java.js" + "aqua-cli": "error.js" } }, "node_modules/@fluencelabs/aqua-lib": { @@ -75,9 +77,9 @@ } }, "node_modules/@fluencelabs/fluence": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.12.0.tgz", - "integrity": "sha512-eYg3CflqeqlWUoaXXXUBxls7Pzjytp1nkHZWoe39bL7poF20T1BuTovNWo/jTWma5HS4L1FaAGGRNaMcN0wFHQ==", + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.12.1.tgz", + "integrity": "sha512-JrMKMHjYILAHQsLLd5H0fLt/UMZv+/PQYxJYe6h9HFyJlZrN1bUV+EcZnUw1u3DZE5k/RXBx0udfmkahggwrqA==", "dependencies": { "@chainsafe/libp2p-noise": "4.0.0", "@fluencelabs/avm": "0.14.4", @@ -93,7 +95,6 @@ "libp2p-websockets": "0.16.1", "loglevel": "1.7.0", "multiaddr": "10.0.0", - "noble-ed25519": "^1.2.5", "peer-id": "0.15.3", "uuid": "8.3.0" } @@ -1879,11 +1880,6 @@ "node": ">= 0.4.0" } }, - "node_modules/noble-ed25519": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/noble-ed25519/-/noble-ed25519-1.2.5.tgz", - "integrity": "sha512-7vst+4UhM5QU3jJ3pUqPMKBCOePrxBojmoQa59qcSnYvjFF/T4jqb4WISlfslcWyBw7G5H9V/acpcAxMd8DzUQ==" - }, "node_modules/node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", @@ -2634,10 +2630,13 @@ } }, "@fluencelabs/aqua": { - "version": "0.3.0-226", - "resolved": "https://registry.npmjs.org/@fluencelabs/aqua/-/aqua-0.3.0-226.tgz", - "integrity": "sha512-9o0TdgsVNcBvifqo7VqIkN62P9EReE0LUxgWG1rGHi9yxJiGElvEBvrVUzqShffF66Ene7VGEe85lhFIGCfDgg==", - "dev": true + "version": "0.3.2-233", + "resolved": "https://registry.npmjs.org/@fluencelabs/aqua/-/aqua-0.3.2-233.tgz", + "integrity": "sha512-LxwNt/O2ijHA2bG7+qdmnFT//kpIVj7mACBp28LxRpb2kJYMcVDNb9VfyWDiDdoX10PAT96OpkiYvVJPs0mpEw==", + "dev": true, + "requires": { + "@fluencelabs/fluence": "0.12.1" + } }, "@fluencelabs/aqua-lib": { "version": "0.1.14", @@ -2653,9 +2652,9 @@ } }, "@fluencelabs/fluence": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.12.0.tgz", - "integrity": "sha512-eYg3CflqeqlWUoaXXXUBxls7Pzjytp1nkHZWoe39bL7poF20T1BuTovNWo/jTWma5HS4L1FaAGGRNaMcN0wFHQ==", + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.12.1.tgz", + "integrity": "sha512-JrMKMHjYILAHQsLLd5H0fLt/UMZv+/PQYxJYe6h9HFyJlZrN1bUV+EcZnUw1u3DZE5k/RXBx0udfmkahggwrqA==", "requires": { "@chainsafe/libp2p-noise": "4.0.0", "@fluencelabs/avm": "0.14.4", @@ -2671,7 +2670,6 @@ "libp2p-websockets": "0.16.1", "loglevel": "1.7.0", "multiaddr": "10.0.0", - "noble-ed25519": "^1.2.5", "peer-id": "0.15.3", "uuid": "8.3.0" } @@ -4175,11 +4173,6 @@ "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" }, - "noble-ed25519": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/noble-ed25519/-/noble-ed25519-1.2.5.tgz", - "integrity": "sha512-7vst+4UhM5QU3jJ3pUqPMKBCOePrxBojmoQa59qcSnYvjFF/T4jqb4WISlfslcWyBw7G5H9V/acpcAxMd8DzUQ==" - }, "node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", diff --git a/aqua-examples/echo-greeter/client-peer/package.json b/aqua-examples/echo-greeter/client-peer/package.json index d2ae09f..07bd1bf 100644 --- a/aqua-examples/echo-greeter/client-peer/package.json +++ b/aqua-examples/echo-greeter/client-peer/package.json @@ -43,7 +43,7 @@ }, "homepage": "git+https://github.com/fluencelabs/examples/aqua-examples/echo-greeter#readme", "devDependencies": { - "@fluencelabs/aqua": "^0.3.0-226", + "@fluencelabs/aqua": "0.3.2-233", "typescript": "^3.9.5" } } diff --git a/aqua-examples/price-oracle/README.md b/aqua-examples/price-oracle/README.md index ef4f66f..f5ebb01 100644 --- a/aqua-examples/price-oracle/README.md +++ b/aqua-examples/price-oracle/README.md @@ -36,7 +36,7 @@ As outlined in Figure 1, we use one or more services distributed across the Flue Let's get right to it: -```text +```bash % cd web % npm install % npm start @@ -52,7 +52,7 @@ Please note that the coin name must the full name, e.g., ethereum or bitcoin ins If you like things a little closer to metal, see the [client-peer](./client-peer) directory for a peer-client based on the Fluence JS-SDK. To run the headless client: -```text +```bash % cd client-peer % npm instal % npm start run @@ -71,9 +71,9 @@ As evident from our results, we are executing two different workflows to get our ```typescript // client-peer/index.ts -import { createClient, setLogLevel, FluenceClient } from "@fluencelabs/fluence"; +import { Fluence } from "@fluencelabs/fluence"; import { krasnodar, Node } from "@fluencelabs/fluence-network-environment"; -import { get_price, get_price_par } from "./get_crypto_prices"; +import { get_price, get_price_par } from "./_aqua/get_crypto_prices"; interface NodeServicePair { node: string; @@ -82,37 +82,47 @@ interface NodeServicePair { // (node, service) tuples, json-style, for price getter services let getter_topo: Array; - -// and a mean service let mean_topo: NodeServicePair; -getter_topo = Array({ "node": "12D3KooWCMr9mU894i8JXAFqpgoFtx6qnV1LFPSfVc3Y34N4h4LS", "service_id": "c315073d-4311-4db3-be57-8f154f032d28" }, { "node": "12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi", "service_id": "25f9123a-f386-4cb2-9c1e-bb7c247c9c09" }); -mean_topo = { "node": "12D3KooWCMr9mU894i8JXAFqpgoFtx6qnV1LFPSfVc3Y34N4h4LS", "service_id": "dd47389f-25d9-4870-a2a9-909359e73580" }; +// description of the services' locations, copypaste from data/deployed_services.json +getter_topo = [ + { + node: "12D3KooWCMr9mU894i8JXAFqpgoFtx6qnV1LFPSfVc3Y34N4h4LS", + service_id: "b67586f7-e96f-49ee-914e-9eabe1a0b83d", + }, + { + node: "12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi", + service_id: "f5b456fa-ee18-4df1-b18b-84fe7ebc7ad0", + } +]; +mean_topo = [ + { + node: "12D3KooWCMr9mU894i8JXAFqpgoFtx6qnV1LFPSfVc3Y34N4h4LS", + service_id: "79b8ddb9-e2e6-4924-9293-c5d55c94af6b", + }, + { + node: "12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi", + service_id: "debecd02-ba7d-40a2-92ab-08a9321da2cf" + } +]; async function main() { + // create the Fluence client for the Krasnodar testnet + await Fluence.start({ connectTo: krasnodar[5] }); - // create the Fluence client for the Krasnodar testnet - const fluence = await createClient(krasnodar[2]); - console.log("created a fluence client %s with relay %s", fluence.selfPeerId, fluence.relayPeerId); + // call the get_price function -- sequential processing + const network_result = await get_price( + "ethereum", "usd", + getter_topo[1].node, getter_topo[1].service_id, mean_topo[1].service_id + ); + console.log("seq result: ", network_result); - // call the get_price function -- sequential processing - const network_result = await get_price(fluence, "ethereum", "usd", "12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi", "25f9123a-f386-4cb2-9c1e-bb7c247c9c09", "b2790307-055e-41ca-9640-3c41856d464b"); - console.log("seq result: ", network_result); + // call the get_price_par function -- parallel processing + const network_result_par = await get_price_par("ethereum", "usd", getter_topo, mean_topo[0]); + console.log("par result: ", network_result_par); - // call the get_price_par function -- parallel processing - const network_result_par = await get_price_par(fluence, "ethereum", "usd", getter_topo, mean_topo); - console.log("par result: ", network_result_par); - - return; + await Fluence.stop(); } - -main() - .then(() => process.exit(0)) - .catch(error => { - console.error(error); - process.exit(1); - }); - ``` where the Aqua script can be found in the `aqua-scripts` dirctory and the compiled Aqua code is found in the `get_crypto_prices.ts` file. For more on the Aqua script, see below. @@ -134,7 +144,7 @@ As seen in Figure 3, we link the price_getter module and curl adapter module int We now have our code in place and area ready to compile and our compilation instructions are contain in the `scripts/build.sh` script, which basically instructs the the code is compiled with `marine` and that the resulting Wasm modules are copied to the `artifacts` directory. In the project directory: -```text +```bash ./scripts/build.sh ``` @@ -142,7 +152,7 @@ which gives you the updated Wasm modules in the `artifacts` directory. The next step is to deploy the two services to one or more peers and we use the `fldist` tool to get this done. First, we need to now what peers are available and we can get an enumeration from: -```text +```bash fldist env ``` @@ -150,24 +160,22 @@ fldist env Pick any of the peer ids from the listed peers to deploy your services. Let's say we use peer id `12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi`: -```text -fldist --node-id 12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi new_service --ms artifacts/curl_adapter.wasm:configs/curl_adapter_cfg.json artifacts/price_getter_service.wasm:configs/price_getter_service_cfg.json --name price-getter-service-0 +```bash +$ fldist --node-id 12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi new_service --ms artifacts/curl_adapter.wasm:configs/curl_adapter_cfg.json artifacts/price_getter_service.wasm:configs/price_getter_service_cfg.json --name price-getter-service-0 +service id: f5b456fa-ee18-4df1-b18b-84fe7ebc7ad0 # <--- REMEMBER service id !! +service created successfully ``` to deploy a price-getter service and -```text -fldist --node-id 12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi new_service --ms artifacts/mean_service.wasm:configs/mean_service_cfg.json --name mean-service-0 -``` - -to deploy a mean service. Please take note of the service-id you get back for each fo the deployments, which are needed to locate the service in the future. For example - -```text -fldist --node-id 12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi new_service --ms artifacts/mean_service.wasm:configs/mean_service_cfg.json --name mean-service-0 -service id: b2790307-055e-41ca-9640-3c41856d464b <-- REMEMBER ME !! +```bash +$ fldist --node-id 12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi new_service --ms artifacts/mean_service.wasm:configs/mean_service_cfg.json --name mean-service-0 +service id: debecd02-ba7d-40a2-92ab-08a9321da2cf # <--- REMEMBER service id !! service created successfully ``` +to deploy a mean service. Please take note of the service-id you get back for each fo the deployments, which are needed to locate the service in the future. + That's it for service development and deployment! ## Application Composition with Aqua diff --git a/aqua-examples/price-oracle/aqua-scripts/get_crypto_prices.aqua b/aqua-examples/price-oracle/aqua-scripts/get_crypto_prices.aqua index ebd683f..10198d0 100644 --- a/aqua-examples/price-oracle/aqua-scripts/get_crypto_prices.aqua +++ b/aqua-examples/price-oracle/aqua-scripts/get_crypto_prices.aqua @@ -50,16 +50,14 @@ func get_price(coin: string, currency: string, node: string, pg_sid: string, mea func get_price_par(coin: string, currency: string, getter_topo: []NodeServicePair, mean_topo: NodeServicePair) -> Result: prices: *f64 for topo <- getter_topo par: - on topo.node: - k <- Op.string_to_b58(topo.node) - + on topo.node: PriceGetterService topo.service_id ts_ms <- Peer.timestamp_ms() res <- PriceGetterService.price_getter(coin, currency, ts_ms) prices <- F64Op.identity(res.result) - F64Op.identity(prices!2) on mean_topo.node: + F64Op.identity(prices!1) MeanService mean_topo.service_id result <- MeanService.mean(prices) <- result diff --git a/aqua-examples/price-oracle/client-peer/package-lock.json b/aqua-examples/price-oracle/client-peer/package-lock.json index 0a6f464..38bfbd3 100644 --- a/aqua-examples/price-oracle/client-peer/package-lock.json +++ b/aqua-examples/price-oracle/client-peer/package-lock.json @@ -15,7 +15,7 @@ "it-all": "^1.0.5" }, "devDependencies": { - "@fluencelabs/aqua": "^0.3.2-233", + "@fluencelabs/aqua": "0.3.2-233", "typescript": "^3.9.5" } }, diff --git a/aqua-examples/price-oracle/client-peer/package.json b/aqua-examples/price-oracle/client-peer/package.json index eee785b..18789da 100644 --- a/aqua-examples/price-oracle/client-peer/package.json +++ b/aqua-examples/price-oracle/client-peer/package.json @@ -13,9 +13,9 @@ "package-lock.json" ], "dependencies": { - "@fluencelabs/aqua-lib": "^0.1.9", - "@fluencelabs/fluence": "^0.13.0", - "@fluencelabs/fluence-network-environment": "^1.0.10", + "@fluencelabs/aqua-lib": "0.1.14", + "@fluencelabs/fluence": "0.13.0", + "@fluencelabs/fluence-network-environment": "1.0.10", "it-all": "^1.0.5" }, "scripts": { @@ -43,7 +43,7 @@ }, "homepage": "git+https://github.com/fluencelabs/examples/aqua-examples/price-oracle#readme", "devDependencies": { - "@fluencelabs/aqua": "^0.3.2-233", + "@fluencelabs/aqua": "0.3.2-233", "typescript": "^3.9.5" } } diff --git a/aqua-examples/price-oracle/client-peer/src/index.ts b/aqua-examples/price-oracle/client-peer/src/index.ts index 5428242..06bc26c 100644 --- a/aqua-examples/price-oracle/client-peer/src/index.ts +++ b/aqua-examples/price-oracle/client-peer/src/index.ts @@ -1,5 +1,5 @@ /* - * Copyright 2021 Fluence Labs Limited +* Copyright 2021 Fluence Labs Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,53 +24,60 @@ interface NodeServicePair { } let getter_topo: Array; -let mean_topo: NodeServicePair; +let mean_topo: Array; -getter_topo = Array( +// description of the services' locations, copypaste from data/deployed_services.json +getter_topo = [ { node: "12D3KooWCMr9mU894i8JXAFqpgoFtx6qnV1LFPSfVc3Y34N4h4LS", - service_id: "c315073d-4311-4db3-be57-8f154f032d28", + service_id: "b67586f7-e96f-49ee-914e-9eabe1a0b83d", }, { node: "12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi", - service_id: "25f9123a-f386-4cb2-9c1e-bb7c247c9c09", + service_id: "f5b456fa-ee18-4df1-b18b-84fe7ebc7ad0", } -); -mean_topo = { - node: "12D3KooWCMr9mU894i8JXAFqpgoFtx6qnV1LFPSfVc3Y34N4h4LS", - service_id: "dd47389f-25d9-4870-a2a9-909359e73580", -}; +]; +mean_topo = [ + { + node: "12D3KooWCMr9mU894i8JXAFqpgoFtx6qnV1LFPSfVc3Y34N4h4LS", + service_id: "79b8ddb9-e2e6-4924-9293-c5d55c94af6b", + }, + { + node: "12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi", + service_id: "debecd02-ba7d-40a2-92ab-08a9321da2cf" + } +]; async function main() { console.log("hello crypto investors"); + + // Uncomment to enable debug logs: // setLogLevel('DEBUG'); - await Fluence.start({ connectTo: krasnodar[2] }); + + // create the Fluence client for the Krasnodar testnet + await Fluence.start({ connectTo: krasnodar[5] }); console.log( "created a fluence client %s with relay %s", Fluence.getStatus().peerId, Fluence.getStatus().relayPeerId ); + // call the get_price function -- sequential processing const network_result = await get_price( "ethereum", "usd", - "12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi", - "25f9123a-f386-4cb2-9c1e-bb7c247c9c09", - "b2790307-055e-41ca-9640-3c41856d464b" + getter_topo[1].node, + getter_topo[1].service_id, + mean_topo[1].service_id ); console.log("seq result: ", network_result); - const network_result_par = await get_price_par( - "ethereum", - "usd", - getter_topo, - mean_topo + // call the get_price_par function -- parallel processing + const network_result_par = await get_price_par("ethereum", "usd", getter_topo, mean_topo[0] ); console.log("par result: ", network_result_par); await Fluence.stop(); - - return; } main() diff --git a/aqua-examples/price-oracle/data/deployed_services.json b/aqua-examples/price-oracle/data/deployed_services.json index 7c5311f..b7a1989 100644 --- a/aqua-examples/price-oracle/data/deployed_services.json +++ b/aqua-examples/price-oracle/data/deployed_services.json @@ -2,21 +2,21 @@ "price_getter": [ { "node": "12D3KooWCMr9mU894i8JXAFqpgoFtx6qnV1LFPSfVc3Y34N4h4LS", - "service_id": "c315073d-4311-4db3-be57-8f154f032d28" + "service_id": "b67586f7-e96f-49ee-914e-9eabe1a0b83d" }, { "node": "12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi", - "service_id": "25f9123a-f386-4cb2-9c1e-bb7c247c9c09" + "service_id": "f5b456fa-ee18-4df1-b18b-84fe7ebc7ad0" } ], "mean": [ { "node": "12D3KooWCMr9mU894i8JXAFqpgoFtx6qnV1LFPSfVc3Y34N4h4LS", - "service_id": "dd47389f-25d9-4870-a2a9-909359e73580" + "service_id": "79b8ddb9-e2e6-4924-9293-c5d55c94af6b" }, { "node": "12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi", - "service_id": "b2790307-055e-41ca-9640-3c41856d464b" + "service_id": "debecd02-ba7d-40a2-92ab-08a9321da2cf" } ] } \ No newline at end of file diff --git a/aqua-examples/price-oracle/web/package-lock.json b/aqua-examples/price-oracle/web/package-lock.json index 56c1a6f..3bffa59 100644 --- a/aqua-examples/price-oracle/web/package-lock.json +++ b/aqua-examples/price-oracle/web/package-lock.json @@ -8,7 +8,7 @@ "name": "price-oracle", "version": "0.1.0", "dependencies": { - "@fluencelabs/fluence": "^0.13.0", + "@fluencelabs/fluence": "0.10.1", "@testing-library/jest-dom": "^5.14.1", "@testing-library/react": "^11.2.7", "@testing-library/user-event": "^12.8.3", @@ -23,7 +23,7 @@ "web-vitals": "^1.1.2" }, "devDependencies": { - "@fluencelabs/aqua": "^0.3.2-233", + "@fluencelabs/aqua": "0.2.2-221", "@fluencelabs/fluence-network-environment": "1.0.10", "chokidar-cli": "^2.1.0", "node-sass": "^6.0.1" @@ -1903,87 +1903,33 @@ } }, "node_modules/@fluencelabs/aqua": { - "version": "0.3.2-233", - "resolved": "https://registry.npmjs.org/@fluencelabs/aqua/-/aqua-0.3.2-233.tgz", - "integrity": "sha512-LxwNt/O2ijHA2bG7+qdmnFT//kpIVj7mACBp28LxRpb2kJYMcVDNb9VfyWDiDdoX10PAT96OpkiYvVJPs0mpEw==", + "version": "0.2.2-221", + "resolved": "https://registry.npmjs.org/@fluencelabs/aqua/-/aqua-0.2.2-221.tgz", + "integrity": "sha512-npFPyIs95uEDfkxKytvjj88NFS2z147+WebnRMp9aHbnGrzmKqLBG6eyoxPuTh9qTQbPL9DfX5rbl/iPfr4Sxw==", "dev": true, - "dependencies": { - "@fluencelabs/fluence": "0.12.1" - }, "bin": { "aqua": "index.js", - "aqua-cli": "error.js" - } - }, - "node_modules/@fluencelabs/aqua/node_modules/@fluencelabs/fluence": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.12.1.tgz", - "integrity": "sha512-JrMKMHjYILAHQsLLd5H0fLt/UMZv+/PQYxJYe6h9HFyJlZrN1bUV+EcZnUw1u3DZE5k/RXBx0udfmkahggwrqA==", - "dev": true, - "dependencies": { - "@chainsafe/libp2p-noise": "4.0.0", - "@fluencelabs/avm": "0.14.4", - "async": "3.2.0", - "base64-js": "1.5.1", - "bs58": "4.0.1", - "cids": "0.8.1", - "it-length-prefixed": "3.0.1", - "it-pipe": "1.1.0", - "libp2p": "0.32.3", - "libp2p-crypto": "0.19.7", - "libp2p-mplex": "0.10.4", - "libp2p-websockets": "0.16.1", - "loglevel": "1.7.0", - "multiaddr": "10.0.0", - "peer-id": "0.15.3", - "uuid": "8.3.0" - } - }, - "node_modules/@fluencelabs/aqua/node_modules/async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", - "dev": true - }, - "node_modules/@fluencelabs/aqua/node_modules/loglevel": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", - "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/subscription/pkg/npm-loglevel?utm_medium=referral&utm_source=npm_fund" - } - }, - "node_modules/@fluencelabs/aqua/node_modules/uuid": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz", - "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" + "aqua-cli": "index.js", + "aqua-js": "index-experimental.js" } }, "node_modules/@fluencelabs/avm": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.14.4.tgz", - "integrity": "sha512-XyR+1H5k0CAc+mDHOkl81viX8XeW1Yqbw793xbsfUfju5bUb/hqk+gHv3q8lAFdbrCG5P45gdOT08a5RNODZaQ==", + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.14.3.tgz", + "integrity": "sha512-HCRIn8WHshHDkZmoW9ITnEzdr+XcZBo9SjlcbKHd8+ls1LkX4SiGe2tKh3QQwtmJ6xFh9TypTwjWeDYCGIw7JA==", "dependencies": { "base64-js": "1.5.1" } }, "node_modules/@fluencelabs/fluence": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.13.0.tgz", - "integrity": "sha512-Dqhr7CAYeAO8Z5jR+mbGu0cVZjkE06cM2L8n9bQWe4T4y2B83ZxUmrs/OTWlYnsLd1Sr2YdDlnyZeUvWLEEmrQ==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.10.1.tgz", + "integrity": "sha512-xAtZh6B9IIQiDflwNhf4dIvjNX6vFddDvU27fGiDuhiXs92k/dQ6ks3yWL0tqsceSbkz4w7r2vQMfDq6gWkdgg==", "dependencies": { "@chainsafe/libp2p-noise": "4.0.0", - "@fluencelabs/avm": "0.14.4", + "@fluencelabs/avm": "0.14.3", "async": "3.2.0", - "base64-js": "1.5.1", + "base64-js": "1.3.1", "bs58": "4.0.1", "cids": "0.8.1", "it-length-prefixed": "3.0.1", @@ -2009,6 +1955,11 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" }, + "node_modules/@fluencelabs/fluence/node_modules/base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, "node_modules/@fluencelabs/fluence/node_modules/loglevel": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", @@ -5678,7 +5629,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "devOptional": true, "engines": { "node": ">=8" } @@ -6254,7 +6204,6 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "devOptional": true, "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -11515,7 +11464,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "devOptional": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -19516,7 +19464,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "devOptional": true, "dependencies": { "picomatch": "^2.2.1" },