Merge remote-tracking branch 'origin/main' into misc-fixes-10.19.21

This commit is contained in:
Pavel Murygin
2021-10-20 21:41:40 +03:00
14 changed files with 165 additions and 206 deletions

View File

@ -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"

View File

@ -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;
}

View File

@ -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);

View File

@ -22,7 +22,7 @@ export const serviceIdState = atom<string | null>({
export const wasmState = atom<string>({
key: "serviceState",
default: "Qmf8fH2cDZXGKS9uDGBcHxv5uQ51ChrigdZKe3QxS2C1AF",
default: "QmSvjkzXbXYwFXcWuFWqFdksvQDgpCeADNxkgkfzCLA4rk",
});
export const rpcAddrState = atom<string | null>({
@ -32,7 +32,7 @@ export const rpcAddrState = atom<string | null>({
export const fileCIDState = atom<string | null>({
key: "fileCIDState",
default: "Qmf8fH2cDZXGKS9uDGBcHxv5uQ51ChrigdZKe3QxS2C1AF",
default: "QmSvjkzXbXYwFXcWuFWqFdksvQDgpCeADNxkgkfzCLA4rk",
});
export const fileSizeState = atom<string | null>({

View File

@ -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",

View File

@ -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",

View File

@ -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"
}
}

View File

@ -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<NodeServicePair>;
// 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

View File

@ -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

View File

@ -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"
}
},

View File

@ -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"
}
}

View File

@ -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<NodeServicePair>;
let mean_topo: NodeServicePair;
let mean_topo: Array<NodeServicePair>;
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()

View File

@ -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"
}
]
}

View File

@ -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"
},