mirror of
https://github.com/fluencelabs/examples
synced 2025-06-11 17:11:21 +00:00
update price-oracle example
This commit is contained in:
2
aqua-examples/price-oracle/client-peer/.gitignore
vendored
Normal file
2
aqua-examples/price-oracle/client-peer/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
dist/
|
||||||
|
src/_aqua/
|
@ -38,6 +38,72 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.get_price_par = exports.get_price = void 0;
|
exports.get_price_par = exports.get_price = void 0;
|
||||||
var api_unstable_1 = require("@fluencelabs/fluence/dist/api.unstable");
|
var api_unstable_1 = require("@fluencelabs/fluence/dist/api.unstable");
|
||||||
|
// Services
|
||||||
|
//Srv
|
||||||
|
//defaultId = "srv"
|
||||||
|
//add_alias: (alias: string, service_id: string) => void
|
||||||
|
//create: (blueprint_id: string) => string
|
||||||
|
//get_interface: (service_id: string) => {function_signatures:{arguments:string[][];name:string;output_types:string[]}[];record_types:{fields:string[][];id:number;name:string}[]}
|
||||||
|
//list: () => {blueprint_id:string;id:string;owner_id:string}[]
|
||||||
|
//remove: (service_id: string) => void
|
||||||
|
//resolve_alias: (alias: string) => string
|
||||||
|
//END Srv
|
||||||
|
//Peer
|
||||||
|
//defaultId = "peer"
|
||||||
|
//connect: (id: string, multiaddrs: string[] | null) => boolean
|
||||||
|
//get_contact: (peer: string) => {addresses:string[];peer_id:string}
|
||||||
|
//identify: () => {external_addresses:string[]}
|
||||||
|
//is_connected: (peer: string) => boolean
|
||||||
|
//timestamp_ms: () => number
|
||||||
|
//timestamp_sec: () => number
|
||||||
|
//END Peer
|
||||||
|
//Op
|
||||||
|
//defaultId = "op"
|
||||||
|
//array: (a: string, b: string | null, c: string | null, d: string | null) => string[]
|
||||||
|
//array_length: (array: string[]) => number
|
||||||
|
//bytes_from_b58: (b: string) => number[]
|
||||||
|
//bytes_to_b58: (bs: number[]) => string
|
||||||
|
//concat: (a: string[], b: string[] | null, c: string[] | null, d: string[] | null) => string[]
|
||||||
|
//identity: (s: string | null) => string | null
|
||||||
|
//noop: () => void
|
||||||
|
//sha256_string: (s: string) => string
|
||||||
|
//string_from_b58: (b: string) => string
|
||||||
|
//string_to_b58: (s: string) => string
|
||||||
|
//END Op
|
||||||
|
//Kademlia
|
||||||
|
//defaultId = "kad"
|
||||||
|
//merge: (target: string, left: string[], right: string[], count: number | null) => string[]
|
||||||
|
//neighborhood: (key: string, already_hashed: boolean | null, count: number | null) => string[]
|
||||||
|
//END Kademlia
|
||||||
|
//MeanService
|
||||||
|
//defaultId = undefined
|
||||||
|
//mean: (data: number[]) => {error_msg:string;result:number;success:boolean}
|
||||||
|
//END MeanService
|
||||||
|
//Script
|
||||||
|
//defaultId = "script"
|
||||||
|
//add: (air_script: string, interval: string | null) => string
|
||||||
|
//list: () => {failures:number;id:string;interval:string;owner:string;src:string}
|
||||||
|
//remove: (script_id: string) => boolean
|
||||||
|
//END Script
|
||||||
|
//Dist
|
||||||
|
//defaultId = "dist"
|
||||||
|
//add_blueprint: (blueprint: {dependencies:string[];name:string}) => string
|
||||||
|
//add_module: (wasm_b56_content: number[], conf: {name:string}) => string
|
||||||
|
//get_interface: (module_id: string) => {function_signatures:{arguments:string[][];name:string;output_types:string[]}[];record_types:{fields:string[][];id:number;name:string}[]}
|
||||||
|
//list_blueprints: () => {dependencies:string[];id:string;name:string}[]
|
||||||
|
//list_modules: () => {config:{name:string};hash:string;name:string}[]
|
||||||
|
//make_blueprint: (name: string, dependencies: string[]) => {dependencies:string[];name:string}
|
||||||
|
//make_module_config: (name: string, mem_pages_count: number | null, logger_enabled: boolean | null, preopened_files: string[] | null, envs: string[][] | null, mapped_dirs: string[][] | null, mounted_binaries: string[][] | null, logging_mask: number | null) => {name:string}
|
||||||
|
//END Dist
|
||||||
|
//F64Op
|
||||||
|
//defaultId = "op"
|
||||||
|
//identity: (x: number) => number
|
||||||
|
//END F64Op
|
||||||
|
//PriceGetterService
|
||||||
|
//defaultId = undefined
|
||||||
|
//price_getter: (coin: string, currency: string, timestamp_ms: number) => {error_msg:string;result:number;success:boolean}
|
||||||
|
//END PriceGetterService
|
||||||
|
// Functions
|
||||||
function get_price(client, coin, currency, node, pg_sid, mean_sid, config) {
|
function get_price(client, coin, currency, node, pg_sid, mean_sid, config) {
|
||||||
return __awaiter(this, void 0, void 0, function () {
|
return __awaiter(this, void 0, void 0, function () {
|
||||||
var request, promise;
|
var request, promise;
|
||||||
@ -71,7 +137,7 @@ function get_price(client, coin, currency, node, pg_sid, mean_sid, config) {
|
|||||||
.handleTimeout(function () {
|
.handleTimeout(function () {
|
||||||
reject('Request timed out for get_price');
|
reject('Request timed out for get_price');
|
||||||
});
|
});
|
||||||
if (config === null || config === void 0 ? void 0 : config.ttl) {
|
if (config && config.ttl) {
|
||||||
r.withTTL(config.ttl);
|
r.withTTL(config.ttl);
|
||||||
}
|
}
|
||||||
request = r.build();
|
request = r.build();
|
||||||
@ -117,7 +183,7 @@ function get_price_par(client, coin, currency, getter_topo, mean_topo, config) {
|
|||||||
.handleTimeout(function () {
|
.handleTimeout(function () {
|
||||||
reject('Request timed out for get_price_par');
|
reject('Request timed out for get_price_par');
|
||||||
});
|
});
|
||||||
if (config === null || config === void 0 ? void 0 : config.ttl) {
|
if (config && config.ttl) {
|
||||||
r.withTTL(config.ttl);
|
r.withTTL(config.ttl);
|
||||||
}
|
}
|
||||||
request = r.build();
|
request = r.build();
|
||||||
|
@ -53,27 +53,38 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
var fluence_1 = require("@fluencelabs/fluence");
|
var fluence_1 = require("@fluencelabs/fluence");
|
||||||
var fluence_network_environment_1 = require("@fluencelabs/fluence-network-environment");
|
var fluence_network_environment_1 = require("@fluencelabs/fluence-network-environment");
|
||||||
var get_crypto_prices_1 = require("./get_crypto_prices");
|
var get_crypto_prices_1 = require("./_aqua/get_crypto_prices");
|
||||||
var getter_topo;
|
var getter_topo;
|
||||||
var mean_topo;
|
var mean_topo;
|
||||||
getter_topo = Array({ "node": "12D3KooWCMr9mU894i8JXAFqpgoFtx6qnV1LFPSfVc3Y34N4h4LS", "service_id": "c315073d-4311-4db3-be57-8f154f032d28" }, { "node": "12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi", "service_id": "25f9123a-f386-4cb2-9c1e-bb7c247c9c09" });
|
getter_topo = Array({
|
||||||
mean_topo = { "node": "12D3KooWCMr9mU894i8JXAFqpgoFtx6qnV1LFPSfVc3Y34N4h4LS", "service_id": "dd47389f-25d9-4870-a2a9-909359e73580" };
|
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",
|
||||||
|
};
|
||||||
function main() {
|
function main() {
|
||||||
return __awaiter(this, void 0, void 0, function () {
|
return __awaiter(this, void 0, void 0, function () {
|
||||||
var fluence, network_result, network_result_par;
|
var network_result, network_result_par;
|
||||||
return __generator(this, function (_a) {
|
return __generator(this, function (_a) {
|
||||||
switch (_a.label) {
|
switch (_a.label) {
|
||||||
case 0:
|
case 0:
|
||||||
console.log("hello crypto investors");
|
console.log("hello crypto investors");
|
||||||
return [4 /*yield*/, fluence_1.createClient(fluence_network_environment_1.krasnodar[2])];
|
// setLogLevel('DEBUG');
|
||||||
|
return [4 /*yield*/, fluence_1.FluencePeer.default.init({ connectTo: fluence_network_environment_1.krasnodar[2] })];
|
||||||
case 1:
|
case 1:
|
||||||
fluence = _a.sent();
|
// setLogLevel('DEBUG');
|
||||||
console.log("created a fluence client %s with relay %s", fluence.selfPeerId, fluence.relayPeerId);
|
_a.sent();
|
||||||
return [4 /*yield*/, get_crypto_prices_1.get_price(fluence, "ethereum", "usd", "12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi", "25f9123a-f386-4cb2-9c1e-bb7c247c9c09", "b2790307-055e-41ca-9640-3c41856d464b")];
|
console.log("created a fluence client %s with relay %s", fluence_1.FluencePeer.default.connectionInfo.selfPeerId, fluence_1.FluencePeer.default.connectionInfo.connectedRelay);
|
||||||
|
return [4 /*yield*/, get_crypto_prices_1.get_price("ethereum", "usd", "12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi", "25f9123a-f386-4cb2-9c1e-bb7c247c9c09", "b2790307-055e-41ca-9640-3c41856d464b")];
|
||||||
case 2:
|
case 2:
|
||||||
network_result = _a.sent();
|
network_result = _a.sent();
|
||||||
console.log("seq result: ", network_result);
|
console.log("seq result: ", network_result);
|
||||||
return [4 /*yield*/, get_crypto_prices_1.get_price_par(fluence, "ethereum", "usd", getter_topo, mean_topo)];
|
return [4 /*yield*/, get_crypto_prices_1.get_price_par("ethereum", "usd", getter_topo, mean_topo)];
|
||||||
case 3:
|
case 3:
|
||||||
network_result_par = _a.sent();
|
network_result_par = _a.sent();
|
||||||
console.log("par result: ", network_result_par);
|
console.log("par result: ", network_result_par);
|
||||||
|
@ -1,237 +0,0 @@
|
|||||||
/**
|
|
||||||
*
|
|
||||||
* 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-163
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
import { FluenceClient, PeerIdB58 } from '@fluencelabs/fluence';
|
|
||||||
import { RequestFlowBuilder } from '@fluencelabs/fluence/dist/api.unstable';
|
|
||||||
import { RequestFlow } from '@fluencelabs/fluence/dist/internal/RequestFlow';
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export async function get_price(client: FluenceClient, coin: string, currency: string, node: string, pg_sid: string, mean_sid: string, config?: {ttl?: number}): Promise<{error_msg:string;result:number;success:boolean}> {
|
|
||||||
let request: RequestFlow;
|
|
||||||
const promise = new Promise<{error_msg:string;result:number;success:boolean}>((resolve, reject) => {
|
|
||||||
const r = new RequestFlowBuilder()
|
|
||||||
.disableInjections()
|
|
||||||
.withRawScript(
|
|
||||||
`
|
|
||||||
(xor
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
|
|
||||||
(call %init_peer_id% ("getDataSrv" "coin") [] coin)
|
|
||||||
)
|
|
||||||
(call %init_peer_id% ("getDataSrv" "currency") [] currency)
|
|
||||||
)
|
|
||||||
(call %init_peer_id% ("getDataSrv" "node") [] node)
|
|
||||||
)
|
|
||||||
(call %init_peer_id% ("getDataSrv" "pg_sid") [] pg_sid)
|
|
||||||
)
|
|
||||||
(call %init_peer_id% ("getDataSrv" "mean_sid") [] mean_sid)
|
|
||||||
)
|
|
||||||
(call -relay- ("op" "noop") [])
|
|
||||||
)
|
|
||||||
(xor
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(call node ("op" "string_to_b58") [node] k)
|
|
||||||
(call node ("peer" "timestamp_ms") [] ts_ms0)
|
|
||||||
)
|
|
||||||
(call node (pg_sid "price_getter") [coin currency ts_ms0] res0)
|
|
||||||
)
|
|
||||||
(call node ("op" "identity") [res0.$.result!] $prices)
|
|
||||||
)
|
|
||||||
(call node ("peer" "timestamp_ms") [] ts_ms1)
|
|
||||||
)
|
|
||||||
(call node (pg_sid "price_getter") [coin currency ts_ms1] res1)
|
|
||||||
)
|
|
||||||
(call node ("op" "identity") [res1.$.result!] $prices)
|
|
||||||
)
|
|
||||||
(call node (mean_sid "mean") [$prices] result)
|
|
||||||
)
|
|
||||||
(seq
|
|
||||||
(call -relay- ("op" "noop") [])
|
|
||||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(call -relay- ("op" "noop") [])
|
|
||||||
)
|
|
||||||
(xor
|
|
||||||
(call %init_peer_id% ("callbackSrv" "response") [result])
|
|
||||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
|
|
||||||
)
|
|
||||||
|
|
||||||
`,
|
|
||||||
)
|
|
||||||
.configHandler((h) => {
|
|
||||||
h.on('getDataSrv', '-relay-', () => {
|
|
||||||
return client.relayPeerId!;
|
|
||||||
});
|
|
||||||
h.on('getDataSrv', 'coin', () => {return coin;});
|
|
||||||
h.on('getDataSrv', 'currency', () => {return currency;});
|
|
||||||
h.on('getDataSrv', 'node', () => {return node;});
|
|
||||||
h.on('getDataSrv', 'pg_sid', () => {return pg_sid;});
|
|
||||||
h.on('getDataSrv', 'mean_sid', () => {return mean_sid;});
|
|
||||||
h.onEvent('callbackSrv', 'response', (args) => {
|
|
||||||
const [res] = args;
|
|
||||||
resolve(res);
|
|
||||||
});
|
|
||||||
|
|
||||||
h.onEvent('errorHandlingSrv', 'error', (args) => {
|
|
||||||
// assuming error is the single argument
|
|
||||||
const [err] = args;
|
|
||||||
reject(err);
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.handleScriptError(reject)
|
|
||||||
.handleTimeout(() => {
|
|
||||||
reject('Request timed out for get_price');
|
|
||||||
})
|
|
||||||
if(config?.ttl) {
|
|
||||||
r.withTTL(config.ttl)
|
|
||||||
}
|
|
||||||
request = r.build();
|
|
||||||
});
|
|
||||||
await client.initiateFlow(request!);
|
|
||||||
return promise;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export async function get_price_par(client: FluenceClient, coin: string, currency: string, getter_topo: {node:string;service_id:string}[], mean_topo: {node:string;service_id:string}, config?: {ttl?: number}): Promise<{error_msg:string;result:number;success:boolean}> {
|
|
||||||
let request: RequestFlow;
|
|
||||||
const promise = new Promise<{error_msg:string;result:number;success:boolean}>((resolve, reject) => {
|
|
||||||
const r = new RequestFlowBuilder()
|
|
||||||
.disableInjections()
|
|
||||||
.withRawScript(
|
|
||||||
`
|
|
||||||
(xor
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
|
|
||||||
(call %init_peer_id% ("getDataSrv" "coin") [] coin)
|
|
||||||
)
|
|
||||||
(call %init_peer_id% ("getDataSrv" "currency") [] currency)
|
|
||||||
)
|
|
||||||
(call %init_peer_id% ("getDataSrv" "getter_topo") [] getter_topo)
|
|
||||||
)
|
|
||||||
(call %init_peer_id% ("getDataSrv" "mean_topo") [] mean_topo)
|
|
||||||
)
|
|
||||||
(fold getter_topo topo
|
|
||||||
(par
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(call -relay- ("op" "noop") [])
|
|
||||||
(xor
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(call topo.$.node! ("op" "string_to_b58") [topo.$.node!] k)
|
|
||||||
(call topo.$.node! ("peer" "timestamp_ms") [] ts_ms)
|
|
||||||
)
|
|
||||||
(call topo.$.node! (topo.$.service_id! "price_getter") [coin currency ts_ms] res)
|
|
||||||
)
|
|
||||||
(call topo.$.node! ("op" "identity") [res.$.result!] $prices)
|
|
||||||
)
|
|
||||||
(seq
|
|
||||||
(call -relay- ("op" "noop") [])
|
|
||||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(call -relay- ("op" "noop") [])
|
|
||||||
)
|
|
||||||
(call %init_peer_id% ("op" "noop") [])
|
|
||||||
)
|
|
||||||
(next topo)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(call %init_peer_id% ("op" "identity") [$prices.$.[2]!])
|
|
||||||
)
|
|
||||||
(call -relay- ("op" "noop") [])
|
|
||||||
)
|
|
||||||
(xor
|
|
||||||
(seq
|
|
||||||
(call -relay- ("op" "noop") [])
|
|
||||||
(call mean_topo.$.node! (mean_topo.$.service_id! "mean") [$prices] result)
|
|
||||||
)
|
|
||||||
(seq
|
|
||||||
(call -relay- ("op" "noop") [])
|
|
||||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(call -relay- ("op" "noop") [])
|
|
||||||
)
|
|
||||||
(xor
|
|
||||||
(call %init_peer_id% ("callbackSrv" "response") [result])
|
|
||||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
|
|
||||||
)
|
|
||||||
|
|
||||||
`,
|
|
||||||
)
|
|
||||||
.configHandler((h) => {
|
|
||||||
h.on('getDataSrv', '-relay-', () => {
|
|
||||||
return client.relayPeerId!;
|
|
||||||
});
|
|
||||||
h.on('getDataSrv', 'coin', () => {return coin;});
|
|
||||||
h.on('getDataSrv', 'currency', () => {return currency;});
|
|
||||||
h.on('getDataSrv', 'getter_topo', () => {return getter_topo;});
|
|
||||||
h.on('getDataSrv', 'mean_topo', () => {return mean_topo;});
|
|
||||||
h.onEvent('callbackSrv', 'response', (args) => {
|
|
||||||
const [res] = args;
|
|
||||||
resolve(res);
|
|
||||||
});
|
|
||||||
|
|
||||||
h.onEvent('errorHandlingSrv', 'error', (args) => {
|
|
||||||
// assuming error is the single argument
|
|
||||||
const [err] = args;
|
|
||||||
reject(err);
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.handleScriptError(reject)
|
|
||||||
.handleTimeout(() => {
|
|
||||||
reject('Request timed out for get_price_par');
|
|
||||||
})
|
|
||||||
if(config?.ttl) {
|
|
||||||
r.withTTL(config.ttl)
|
|
||||||
}
|
|
||||||
request = r.build();
|
|
||||||
});
|
|
||||||
await client.initiateFlow(request!);
|
|
||||||
return promise;
|
|
||||||
}
|
|
||||||
|
|
5839
aqua-examples/price-oracle/client-peer/package-lock.json
generated
5839
aqua-examples/price-oracle/client-peer/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -14,12 +14,12 @@
|
|||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fluencelabs/aqua-lib": "^0.1.9",
|
"@fluencelabs/aqua-lib": "^0.1.9",
|
||||||
"@fluencelabs/fluence": "^0.9.53",
|
"@fluencelabs/fluence": "^0.11.0",
|
||||||
"@fluencelabs/fluence-network-environment": "^1.0.10",
|
"@fluencelabs/fluence-network-environment": "^1.0.10",
|
||||||
"it-all": "^1.0.5"
|
"it-all": "^1.0.5"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"compile-aqua": "aqua -i ../aqua-scripts -o .",
|
"compile-aqua": "aqua -i ../aqua-scripts -o src/_aqua",
|
||||||
"prebuild": "npm run compile-aqua",
|
"prebuild": "npm run compile-aqua",
|
||||||
"build": "tsc",
|
"build": "tsc",
|
||||||
"prestart:local": "npm run build",
|
"prestart:local": "npm run build",
|
||||||
@ -43,7 +43,7 @@
|
|||||||
},
|
},
|
||||||
"homepage": "git+https://github.com/fluencelabs/examples/aqua-examples/price-oracle#readme",
|
"homepage": "git+https://github.com/fluencelabs/examples/aqua-examples/price-oracle#readme",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@fluencelabs/aqua": "0.1.14-207",
|
"@fluencelabs/aqua": "^0.3.0-224",
|
||||||
"typescript": "^3.9.5"
|
"typescript": "^3.9.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,230 +0,0 @@
|
|||||||
/**
|
|
||||||
*
|
|
||||||
* 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-164
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
import { FluenceClient, PeerIdB58 } from '@fluencelabs/fluence';
|
|
||||||
import { RequestFlowBuilder } from '@fluencelabs/fluence/dist/api.unstable';
|
|
||||||
import { RequestFlow } from '@fluencelabs/fluence/dist/internal/RequestFlow';
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export async function get_price(client: FluenceClient, coin: string, currency: string, node: string, pg_sid: string, mean_sid: string, config?: { ttl?: number }): Promise<{ error_msg: string; result: number; success: boolean }> {
|
|
||||||
let request: RequestFlow;
|
|
||||||
const promise = new Promise<{ error_msg: string; result: number; success: boolean }>((resolve, reject) => {
|
|
||||||
const r = new RequestFlowBuilder()
|
|
||||||
.disableInjections()
|
|
||||||
.withRawScript(
|
|
||||||
`
|
|
||||||
(xor
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
|
|
||||||
(call %init_peer_id% ("getDataSrv" "coin") [] coin)
|
|
||||||
)
|
|
||||||
(call %init_peer_id% ("getDataSrv" "currency") [] currency)
|
|
||||||
)
|
|
||||||
(call %init_peer_id% ("getDataSrv" "node") [] node)
|
|
||||||
)
|
|
||||||
(call %init_peer_id% ("getDataSrv" "pg_sid") [] pg_sid)
|
|
||||||
)
|
|
||||||
(call %init_peer_id% ("getDataSrv" "mean_sid") [] mean_sid)
|
|
||||||
)
|
|
||||||
(call -relay- ("op" "noop") [])
|
|
||||||
)
|
|
||||||
(xor
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(call node ("op" "string_to_b58") [node] k)
|
|
||||||
(call node ("peer" "timestamp_ms") [] ts_ms0)
|
|
||||||
)
|
|
||||||
(call node (pg_sid "price_getter") [coin currency ts_ms0] res0)
|
|
||||||
)
|
|
||||||
(call node ("op" "identity") [res0.$.result!] $prices)
|
|
||||||
)
|
|
||||||
(call node ("peer" "timestamp_ms") [] ts_ms1)
|
|
||||||
)
|
|
||||||
(call node (pg_sid "price_getter") [coin currency ts_ms1] res1)
|
|
||||||
)
|
|
||||||
(call node ("op" "identity") [res1.$.result!] $prices)
|
|
||||||
)
|
|
||||||
(call node (mean_sid "mean") [$prices] result)
|
|
||||||
)
|
|
||||||
(seq
|
|
||||||
(call -relay- ("op" "noop") [])
|
|
||||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(call -relay- ("op" "noop") [])
|
|
||||||
)
|
|
||||||
(xor
|
|
||||||
(call %init_peer_id% ("callbackSrv" "response") [result])
|
|
||||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
|
|
||||||
)
|
|
||||||
|
|
||||||
`,
|
|
||||||
)
|
|
||||||
.configHandler((h) => {
|
|
||||||
h.on('getDataSrv', '-relay-', () => {
|
|
||||||
return client.relayPeerId!;
|
|
||||||
});
|
|
||||||
h.on('getDataSrv', 'coin', () => { return coin; });
|
|
||||||
h.on('getDataSrv', 'currency', () => { return currency; });
|
|
||||||
h.on('getDataSrv', 'node', () => { return node; });
|
|
||||||
h.on('getDataSrv', 'pg_sid', () => { return pg_sid; });
|
|
||||||
h.on('getDataSrv', 'mean_sid', () => { return mean_sid; });
|
|
||||||
h.onEvent('callbackSrv', 'response', (args) => {
|
|
||||||
const [res] = args;
|
|
||||||
resolve(res);
|
|
||||||
});
|
|
||||||
|
|
||||||
h.onEvent('errorHandlingSrv', 'error', (args) => {
|
|
||||||
// assuming error is the single argument
|
|
||||||
const [err] = args;
|
|
||||||
reject(err);
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.handleScriptError(reject)
|
|
||||||
.handleTimeout(() => {
|
|
||||||
reject('Request timed out for get_price');
|
|
||||||
})
|
|
||||||
if (config && config.ttl) {
|
|
||||||
r.withTTL(config.ttl)
|
|
||||||
}
|
|
||||||
request = r.build();
|
|
||||||
});
|
|
||||||
await client.initiateFlow(request!);
|
|
||||||
return promise;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export async function get_price_par(client: FluenceClient, coin: string, currency: string, getter_topo: { node: string; service_id: string }[], mean_topo: { node: string; service_id: string }, config?: { ttl?: number }): Promise<{ error_msg: string; result: number; success: boolean }> {
|
|
||||||
let request: RequestFlow;
|
|
||||||
const promise = new Promise<{ error_msg: string; result: number; success: boolean }>((resolve, reject) => {
|
|
||||||
const r = new RequestFlowBuilder()
|
|
||||||
.disableInjections()
|
|
||||||
.withRawScript(
|
|
||||||
`
|
|
||||||
(xor
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
|
|
||||||
(call %init_peer_id% ("getDataSrv" "coin") [] coin)
|
|
||||||
)
|
|
||||||
(call %init_peer_id% ("getDataSrv" "currency") [] currency)
|
|
||||||
)
|
|
||||||
(call %init_peer_id% ("getDataSrv" "getter_topo") [] getter_topo)
|
|
||||||
)
|
|
||||||
(call %init_peer_id% ("getDataSrv" "mean_topo") [] mean_topo)
|
|
||||||
)
|
|
||||||
(fold getter_topo topo
|
|
||||||
(par
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(call -relay- ("op" "noop") [])
|
|
||||||
(xor
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(seq
|
|
||||||
(call topo.$.node! ("op" "string_to_b58") [topo.$.node!] k)
|
|
||||||
(call topo.$.node! ("peer" "timestamp_ms") [] ts_ms)
|
|
||||||
)
|
|
||||||
(call topo.$.node! (topo.$.service_id! "price_getter") [coin currency ts_ms] res)
|
|
||||||
)
|
|
||||||
(call topo.$.node! ("op" "identity") [res.$.result!] $prices)
|
|
||||||
)
|
|
||||||
(seq
|
|
||||||
(call -relay- ("op" "noop") [])
|
|
||||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(call mean_topo.$.node! ("op" "noop") [])
|
|
||||||
)
|
|
||||||
(next topo)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(call -relay- ("op" "noop") [])
|
|
||||||
)
|
|
||||||
(xor
|
|
||||||
(seq
|
|
||||||
(call -relay- ("op" "noop") [])
|
|
||||||
(call mean_topo.$.node! (mean_topo.$.service_id! "mean") [$prices] result)
|
|
||||||
)
|
|
||||||
(seq
|
|
||||||
(call -relay- ("op" "noop") [])
|
|
||||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(call -relay- ("op" "noop") [])
|
|
||||||
)
|
|
||||||
(xor
|
|
||||||
(call %init_peer_id% ("callbackSrv" "response") [result])
|
|
||||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
|
|
||||||
)
|
|
||||||
|
|
||||||
`,
|
|
||||||
)
|
|
||||||
.configHandler((h) => {
|
|
||||||
h.on('getDataSrv', '-relay-', () => {
|
|
||||||
return client.relayPeerId!;
|
|
||||||
});
|
|
||||||
h.on('getDataSrv', 'coin', () => { return coin; });
|
|
||||||
h.on('getDataSrv', 'currency', () => { return currency; });
|
|
||||||
h.on('getDataSrv', 'getter_topo', () => { return getter_topo; });
|
|
||||||
h.on('getDataSrv', 'mean_topo', () => { return mean_topo; });
|
|
||||||
h.onEvent('callbackSrv', 'response', (args) => {
|
|
||||||
const [res] = args;
|
|
||||||
resolve(res);
|
|
||||||
});
|
|
||||||
|
|
||||||
h.onEvent('errorHandlingSrv', 'error', (args) => {
|
|
||||||
// assuming error is the single argument
|
|
||||||
const [err] = args;
|
|
||||||
reject(err);
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.handleScriptError(reject)
|
|
||||||
.handleTimeout(() => {
|
|
||||||
reject('Request timed out for get_price_par');
|
|
||||||
})
|
|
||||||
if (config && config.ttl) {
|
|
||||||
r.withTTL(config.ttl)
|
|
||||||
}
|
|
||||||
request = r.build();
|
|
||||||
});
|
|
||||||
await client.initiateFlow(request!);
|
|
||||||
return promise;
|
|
||||||
}
|
|
@ -14,41 +14,66 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { createClient, setLogLevel, FluenceClient } from "@fluencelabs/fluence";
|
import { setLogLevel, FluencePeer } from "@fluencelabs/fluence";
|
||||||
import { krasnodar, Node } from "@fluencelabs/fluence-network-environment";
|
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 {
|
interface NodeServicePair {
|
||||||
node: string;
|
node: string;
|
||||||
service_id: string;
|
service_id: string;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let getter_topo: Array<NodeServicePair>;
|
let getter_topo: Array<NodeServicePair>;
|
||||||
let mean_topo: NodeServicePair;
|
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" });
|
getter_topo = Array(
|
||||||
mean_topo = { "node": "12D3KooWCMr9mU894i8JXAFqpgoFtx6qnV1LFPSfVc3Y34N4h4LS", "service_id": "dd47389f-25d9-4870-a2a9-909359e73580" };
|
{
|
||||||
|
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",
|
||||||
|
};
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
console.log("hello crypto investors");
|
console.log("hello crypto investors");
|
||||||
// setLogLevel('DEBUG');
|
// setLogLevel('DEBUG');
|
||||||
const fluence = await createClient(krasnodar[2]);
|
await FluencePeer.default.init({ connectTo: krasnodar[2] });
|
||||||
console.log("created a fluence client %s with relay %s", fluence.selfPeerId, fluence.relayPeerId);
|
console.log(
|
||||||
|
"created a fluence client %s with relay %s",
|
||||||
|
FluencePeer.default.connectionInfo.selfPeerId,
|
||||||
|
FluencePeer.default.connectionInfo.connectedRelay
|
||||||
|
);
|
||||||
|
|
||||||
const network_result = await get_price(fluence, "ethereum", "usd", "12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi", "25f9123a-f386-4cb2-9c1e-bb7c247c9c09", "b2790307-055e-41ca-9640-3c41856d464b");
|
const network_result = await get_price(
|
||||||
console.log("seq result: ", network_result);
|
"ethereum",
|
||||||
|
"usd",
|
||||||
|
"12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi",
|
||||||
|
"25f9123a-f386-4cb2-9c1e-bb7c247c9c09",
|
||||||
|
"b2790307-055e-41ca-9640-3c41856d464b"
|
||||||
|
);
|
||||||
|
console.log("seq result: ", network_result);
|
||||||
|
|
||||||
const network_result_par = await get_price_par(fluence, "ethereum", "usd", getter_topo, mean_topo);
|
const network_result_par = await get_price_par(
|
||||||
console.log("par result: ", network_result_par);
|
"ethereum",
|
||||||
|
"usd",
|
||||||
|
getter_topo,
|
||||||
|
mean_topo
|
||||||
|
);
|
||||||
|
console.log("par result: ", network_result_par);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
main()
|
main()
|
||||||
.then(() => process.exit(0))
|
.then(() => process.exit(0))
|
||||||
.catch(error => {
|
.catch((error) => {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user