mirror of
https://github.com/fluencelabs/examples
synced 2025-04-25 02:32:16 +00:00
Refactor fuzzing: pass relay address, allow to enable debug logs
This commit is contained in:
parent
6e320d081d
commit
b040f692ce
@ -1,60 +1,72 @@
|
||||
import "@fluencelabs/aqua-lib/builtin.aqua"
|
||||
|
||||
-- per-node timeout to decide if it's down
|
||||
const TIMEOUT = 2000
|
||||
|
||||
-- simple timestamp getter for kademlia neigborhodd which is max size 20
|
||||
func ts_getter() -> []u64:
|
||||
-- simple timestamp getter for kademlia neigborhood which is max size 20
|
||||
func collect_timestamps_from_neighborhood() -> []u64, []PeerId:
|
||||
timestamps: *u64
|
||||
statuses: *string
|
||||
dead_peers: *PeerId
|
||||
-- on this peer
|
||||
on HOST_PEER_ID:
|
||||
-- convert peer id to b58
|
||||
k <- Op.string_to_b58(HOST_PEER_ID)
|
||||
-- get all neighbors
|
||||
nodes <- Kademlia.neighborhood(k, nil, nil)
|
||||
res: *u64
|
||||
-- for each neighbor
|
||||
for n <- nodes par:
|
||||
status: *string
|
||||
-- on selected neighbor peer
|
||||
on n:
|
||||
-- get the timestamp from that node
|
||||
res <- Peer.timestamp_ms()
|
||||
-- hot fix to force switching to peer
|
||||
Op.noop()
|
||||
-- join the results, which is tricky rght now since we can't use array len
|
||||
-- the testnet size n is 10 so n -1
|
||||
join res[9]
|
||||
<- res
|
||||
timestamps <- Peer.timestamp_ms()
|
||||
status <<- "ok"
|
||||
-- run timeout task in parallel, so if node `n` is down, we'll get `timed out` status
|
||||
-- this pattern is documented: https://doc.fluence.dev/aqua-book/language/flow/parallel#timeout-and-race-patterns
|
||||
par status <- Peer.timeout(TIMEOUT, "timed out")
|
||||
statuses <<- status!
|
||||
if status! != "ok":
|
||||
dead_peers <<- n
|
||||
|
||||
-- wait for all nodes to respond or timeout
|
||||
length <- Op.array_length(nodes)
|
||||
join statuses[length - 1]
|
||||
<- timestamps, dead_peers
|
||||
|
||||
|
||||
-- timestamp getter with error collector over neighborhood
|
||||
func ts_getter_with_timeout()-> []u64, []string:
|
||||
-- timeout in ms
|
||||
rtt = 1000
|
||||
|
||||
res: *u64
|
||||
-- -- timestamp getter with error collector over neighborhood
|
||||
-- func ts_getter_with_timeout()-> []u64, []string:
|
||||
-- -- timeout in ms
|
||||
-- rtt = 1000
|
||||
|
||||
-- error value for no timestamp
|
||||
err_value = 0
|
||||
-- res: *u64
|
||||
|
||||
-- neighborhood n = 20 decr by 1 for array
|
||||
n_neighborhood = 19
|
||||
-- -- error value for no timestamp
|
||||
-- err_value = 0
|
||||
|
||||
-- err message
|
||||
msg = "timeout"
|
||||
-- -- neighborhood n = 20 decr by 1 for array
|
||||
-- n_neighborhood = 19
|
||||
|
||||
-- -- err message
|
||||
-- msg = "timeout"
|
||||
|
||||
-- collect non-responsive peer ids, if any
|
||||
dead_peers: *string
|
||||
on HOST_PEER_ID:
|
||||
k <- Op.string_to_b58(HOST_PEER_ID)
|
||||
nodes <- Kademlia.neighborhood(k, nil, nil)
|
||||
for n <- nodes par:
|
||||
status: *string
|
||||
on n:
|
||||
res <- Peer.timestamp_ms()
|
||||
status <<- "success"
|
||||
par status <- Peer.timeout(rtt, msg)
|
||||
if status! != "success":
|
||||
res <<- err_value
|
||||
dead_peers <<- n
|
||||
Op.noop()
|
||||
-- -- collect non-responsive peer ids, if any
|
||||
-- dead_peers: *string
|
||||
-- on HOST_PEER_ID:
|
||||
-- k <- Op.string_to_b58(HOST_PEER_ID)
|
||||
-- nodes <- Kademlia.neighborhood(k, nil, nil)
|
||||
-- for n <- nodes par:
|
||||
-- status: *string
|
||||
-- on n:
|
||||
-- res <- Peer.timestamp_ms()
|
||||
-- status <<- "success"
|
||||
-- par status <- Peer.timeout(rtt, msg)
|
||||
-- if status! != "success":
|
||||
-- res <<- err_value
|
||||
-- dead_peers <<- n
|
||||
-- Op.noop()
|
||||
|
||||
join res[n_neighborhood]
|
||||
<- res, dead_peers
|
||||
-- join res[n_neighborhood]
|
||||
-- <- res, dead_peers
|
||||
|
115
fuzz-client/package-lock.json
generated
115
fuzz-client/package-lock.json
generated
@ -9,14 +9,12 @@
|
||||
"version": "0.1.0",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@fluencelabs/aqua-lib": "^0.4.3",
|
||||
"@fluencelabs/fluence": "0.21.6",
|
||||
"@fluencelabs/fluence": "^0.21.7",
|
||||
"@fluencelabs/fluence-network-environment": "1.0.13",
|
||||
"it-all": "^1.0.6",
|
||||
"ts-node": "^10.7.0"
|
||||
"it-all": "^1.0.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@fluencelabs/aqua": "^0.7.0-285",
|
||||
"@fluencelabs/aqua": "0.7.1-293",
|
||||
"@fluencelabs/aqua-lib": "^0.4.3",
|
||||
"ts-node": "^10.7.0",
|
||||
"typescript": "^4.6.3"
|
||||
@ -101,14 +99,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@fluencelabs/aqua": {
|
||||
"version": "0.7.0-287",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/aqua/-/aqua-0.7.0-287.tgz",
|
||||
"integrity": "sha512-mshgECE6u01MbTU3vZfDdoJn+ZBm3uuvjzRf5xhvytzq4B9v4I2pap/wrpnYezApXEdbgMkhYi8Sp1PHlRz0bg==",
|
||||
"version": "0.7.1-293",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/aqua/-/aqua-0.7.1-293.tgz",
|
||||
"integrity": "sha512-D29meiuZrJBq076kCE8UbMq9PPHcLFctsgfRSENEgybfyw4MbgEPQZorHHHOrbDfckmBvAZB7+5oUNTIgiiwEw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@fluencelabs/aqua-ipfs": "0.5.2",
|
||||
"@fluencelabs/aqua-lib": "0.4.0",
|
||||
"@fluencelabs/fluence": "0.21.5",
|
||||
"@fluencelabs/fluence": "0.21.7",
|
||||
"@fluencelabs/fluence-network-environment": "1.0.13",
|
||||
"ipfs-http-client": "50.1.2"
|
||||
},
|
||||
@ -144,40 +142,6 @@
|
||||
"integrity": "sha512-bad282cCZrE//I+Hzsl/vWgudwXuNiaqJOonv11xkgOBBvL7Gg3SIap8HioNvkaDxIvylVB+POjYJ7E5sGNoVQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@fluencelabs/aqua/node_modules/@fluencelabs/fluence": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.21.5.tgz",
|
||||
"integrity": "sha512-Zldn2I09ENp+F4MDYxsIMkJQOIQyfpiYmcAmVl60yTdKls78GmmnSyvAI+dZxUcNrhPqscnrtaENJoKwGwgm+Q==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@chainsafe/libp2p-noise": "^4.1.1",
|
||||
"@fluencelabs/avm": "^0.21.3",
|
||||
"@fluencelabs/avm-runner-background": "0.2.0",
|
||||
"@fluencelabs/avm-runner-interface": "^0.2.0",
|
||||
"@fluencelabs/marine-js": "0.1.0",
|
||||
"async": "3.2.0",
|
||||
"browser-or-node": "^2.0.0",
|
||||
"bs58": "4.0.1",
|
||||
"buffer": "^6.0.3",
|
||||
"cids": "0.8.1",
|
||||
"it-length-prefixed": "3.0.1",
|
||||
"it-pipe": "1.1.0",
|
||||
"libp2p": "=0.33.0",
|
||||
"libp2p-crypto": "=0.20.0",
|
||||
"libp2p-mplex": "=0.10.2",
|
||||
"libp2p-websockets": "^0.16.2",
|
||||
"loglevel": "1.7.0",
|
||||
"multiaddr": "^10.0.1",
|
||||
"multiformats": "^9.6.4",
|
||||
"peer-id": "=0.15.4",
|
||||
"rxjs": "^7.3.0",
|
||||
"ts-pattern": "^3.3.3",
|
||||
"uuid": "8.3.0"
|
||||
},
|
||||
"bin": {
|
||||
"copy-avm-public": "dist/tools/copyAvmPublic.js"
|
||||
}
|
||||
},
|
||||
"node_modules/@fluencelabs/avm": {
|
||||
"version": "0.21.7",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.21.7.tgz",
|
||||
@ -205,9 +169,9 @@
|
||||
"integrity": "sha512-Y41pL+UwZZVdormxju8cJQsNRp6tdER0VqJ9Kg9gH2wd1KJAaYTJkyVbn8NB7fEFRUbqfbb1BXHi9wWBYOgGYQ=="
|
||||
},
|
||||
"node_modules/@fluencelabs/fluence": {
|
||||
"version": "0.21.6",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.21.6.tgz",
|
||||
"integrity": "sha512-g0nbg6IeBdivcU7jutb3M6UdNrUvVX4IIQKsZ80y6yzVqeWTqHbYsb+6q0zzv12q4OllpO4lcUWKUbUQyl4QMg==",
|
||||
"version": "0.21.7",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.21.7.tgz",
|
||||
"integrity": "sha512-ry7sAaWDaMT0tuy4IZ0kaEY5mzuflEV3lPj8c/xkvZmvuf9fVfJdVr+v63yr1Qb/XuA8QHor64BP10/a8aa3Dw==",
|
||||
"dependencies": {
|
||||
"@chainsafe/libp2p-noise": "^4.1.1",
|
||||
"@fluencelabs/avm": "^0.21.3",
|
||||
@ -215,7 +179,6 @@
|
||||
"@fluencelabs/avm-runner-interface": "^0.2.0",
|
||||
"@fluencelabs/marine-js": "0.1.0",
|
||||
"async": "3.2.0",
|
||||
"browser-or-node": "^2.0.0",
|
||||
"bs58": "4.0.1",
|
||||
"buffer": "^6.0.3",
|
||||
"cids": "0.8.1",
|
||||
@ -229,6 +192,7 @@
|
||||
"multiaddr": "^10.0.1",
|
||||
"multiformats": "^9.6.4",
|
||||
"peer-id": "=0.15.4",
|
||||
"platform": "^1.3.6",
|
||||
"rxjs": "^7.3.0",
|
||||
"ts-pattern": "^3.3.3",
|
||||
"uuid": "8.3.0"
|
||||
@ -3726,6 +3690,11 @@
|
||||
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
|
||||
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
|
||||
},
|
||||
"node_modules/platform": {
|
||||
"version": "1.3.6",
|
||||
"resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz",
|
||||
"integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg=="
|
||||
},
|
||||
"node_modules/private-ip": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/private-ip/-/private-ip-2.3.3.tgz",
|
||||
@ -4410,14 +4379,14 @@
|
||||
}
|
||||
},
|
||||
"@fluencelabs/aqua": {
|
||||
"version": "0.7.0-287",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/aqua/-/aqua-0.7.0-287.tgz",
|
||||
"integrity": "sha512-mshgECE6u01MbTU3vZfDdoJn+ZBm3uuvjzRf5xhvytzq4B9v4I2pap/wrpnYezApXEdbgMkhYi8Sp1PHlRz0bg==",
|
||||
"version": "0.7.1-293",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/aqua/-/aqua-0.7.1-293.tgz",
|
||||
"integrity": "sha512-D29meiuZrJBq076kCE8UbMq9PPHcLFctsgfRSENEgybfyw4MbgEPQZorHHHOrbDfckmBvAZB7+5oUNTIgiiwEw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@fluencelabs/aqua-ipfs": "0.5.2",
|
||||
"@fluencelabs/aqua-lib": "0.4.0",
|
||||
"@fluencelabs/fluence": "0.21.5",
|
||||
"@fluencelabs/fluence": "0.21.7",
|
||||
"@fluencelabs/fluence-network-environment": "1.0.13",
|
||||
"ipfs-http-client": "50.1.2"
|
||||
},
|
||||
@ -4427,37 +4396,6 @@
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/aqua-lib/-/aqua-lib-0.4.0.tgz",
|
||||
"integrity": "sha512-bad282cCZrE//I+Hzsl/vWgudwXuNiaqJOonv11xkgOBBvL7Gg3SIap8HioNvkaDxIvylVB+POjYJ7E5sGNoVQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@fluencelabs/fluence": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.21.5.tgz",
|
||||
"integrity": "sha512-Zldn2I09ENp+F4MDYxsIMkJQOIQyfpiYmcAmVl60yTdKls78GmmnSyvAI+dZxUcNrhPqscnrtaENJoKwGwgm+Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@chainsafe/libp2p-noise": "^4.1.1",
|
||||
"@fluencelabs/avm": "^0.21.3",
|
||||
"@fluencelabs/avm-runner-background": "0.2.0",
|
||||
"@fluencelabs/avm-runner-interface": "^0.2.0",
|
||||
"@fluencelabs/marine-js": "0.1.0",
|
||||
"async": "3.2.0",
|
||||
"browser-or-node": "^2.0.0",
|
||||
"bs58": "4.0.1",
|
||||
"buffer": "^6.0.3",
|
||||
"cids": "0.8.1",
|
||||
"it-length-prefixed": "3.0.1",
|
||||
"it-pipe": "1.1.0",
|
||||
"libp2p": "=0.33.0",
|
||||
"libp2p-crypto": "=0.20.0",
|
||||
"libp2p-mplex": "=0.10.2",
|
||||
"libp2p-websockets": "^0.16.2",
|
||||
"loglevel": "1.7.0",
|
||||
"multiaddr": "^10.0.1",
|
||||
"multiformats": "^9.6.4",
|
||||
"peer-id": "=0.15.4",
|
||||
"rxjs": "^7.3.0",
|
||||
"ts-pattern": "^3.3.3",
|
||||
"uuid": "8.3.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -4505,9 +4443,9 @@
|
||||
"integrity": "sha512-Y41pL+UwZZVdormxju8cJQsNRp6tdER0VqJ9Kg9gH2wd1KJAaYTJkyVbn8NB7fEFRUbqfbb1BXHi9wWBYOgGYQ=="
|
||||
},
|
||||
"@fluencelabs/fluence": {
|
||||
"version": "0.21.6",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.21.6.tgz",
|
||||
"integrity": "sha512-g0nbg6IeBdivcU7jutb3M6UdNrUvVX4IIQKsZ80y6yzVqeWTqHbYsb+6q0zzv12q4OllpO4lcUWKUbUQyl4QMg==",
|
||||
"version": "0.21.7",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.21.7.tgz",
|
||||
"integrity": "sha512-ry7sAaWDaMT0tuy4IZ0kaEY5mzuflEV3lPj8c/xkvZmvuf9fVfJdVr+v63yr1Qb/XuA8QHor64BP10/a8aa3Dw==",
|
||||
"requires": {
|
||||
"@chainsafe/libp2p-noise": "^4.1.1",
|
||||
"@fluencelabs/avm": "^0.21.3",
|
||||
@ -4515,7 +4453,6 @@
|
||||
"@fluencelabs/avm-runner-interface": "^0.2.0",
|
||||
"@fluencelabs/marine-js": "0.1.0",
|
||||
"async": "3.2.0",
|
||||
"browser-or-node": "^2.0.0",
|
||||
"bs58": "4.0.1",
|
||||
"buffer": "^6.0.3",
|
||||
"cids": "0.8.1",
|
||||
@ -4529,6 +4466,7 @@
|
||||
"multiaddr": "^10.0.1",
|
||||
"multiformats": "^9.6.4",
|
||||
"peer-id": "=0.15.4",
|
||||
"platform": "^1.3.6",
|
||||
"rxjs": "^7.3.0",
|
||||
"ts-pattern": "^3.3.3",
|
||||
"uuid": "8.3.0"
|
||||
@ -7468,6 +7406,11 @@
|
||||
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
|
||||
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
|
||||
},
|
||||
"platform": {
|
||||
"version": "1.3.6",
|
||||
"resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz",
|
||||
"integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg=="
|
||||
},
|
||||
"private-ip": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/private-ip/-/private-ip-2.3.3.tgz",
|
||||
|
@ -13,11 +13,9 @@
|
||||
"package-lock.json"
|
||||
],
|
||||
"dependencies": {
|
||||
"@fluencelabs/aqua-lib": "^0.4.3",
|
||||
"@fluencelabs/fluence": "0.21.6",
|
||||
"@fluencelabs/fluence": "^0.21.7",
|
||||
"@fluencelabs/fluence-network-environment": "1.0.13",
|
||||
"it-all": "^1.0.6",
|
||||
"ts-node": "^10.7.0"
|
||||
"it-all": "^1.0.6"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "node -r ts-node/register src/index.ts",
|
||||
@ -34,7 +32,7 @@
|
||||
"url": "git+https://github.com/fluencelabs/examples/issues"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@fluencelabs/aqua": "^0.7.0-285",
|
||||
"@fluencelabs/aqua": "0.7.1-293",
|
||||
"@fluencelabs/aqua-lib": "^0.4.3",
|
||||
"ts-node": "^10.7.0",
|
||||
"typescript": "^4.6.3"
|
||||
|
@ -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.6.0-272
|
||||
* Aqua version: 0.7.1-293
|
||||
*
|
||||
*/
|
||||
import { Fluence, FluencePeer } from '@fluencelabs/fluence';
|
||||
@ -11,68 +11,100 @@ import {
|
||||
CallParams,
|
||||
callFunction,
|
||||
registerService,
|
||||
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
|
||||
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v3';
|
||||
|
||||
|
||||
// Services
|
||||
|
||||
// Functions
|
||||
|
||||
|
||||
export function ts_getter(
|
||||
export type Collect_timestamps_from_neighborhoodResult = [number[], string[]]
|
||||
export function collect_timestamps_from_neighborhood(
|
||||
config?: {ttl?: number}
|
||||
): Promise<number[]>;
|
||||
): Promise<Collect_timestamps_from_neighborhoodResult>;
|
||||
|
||||
export function ts_getter(
|
||||
export function collect_timestamps_from_neighborhood(
|
||||
peer: FluencePeer,
|
||||
config?: {ttl?: number}
|
||||
): Promise<number[]>;
|
||||
): Promise<Collect_timestamps_from_neighborhoodResult>;
|
||||
|
||||
export function ts_getter(...args: any) {
|
||||
export function collect_timestamps_from_neighborhood(...args: any) {
|
||||
|
||||
let script = `
|
||||
(xor
|
||||
(seq
|
||||
(seq
|
||||
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
|
||||
(new $res
|
||||
(seq
|
||||
(xor
|
||||
(seq
|
||||
(new $statuses
|
||||
(new $timestamps
|
||||
(seq
|
||||
(new $dead_peers
|
||||
(seq
|
||||
(seq
|
||||
(call -relay- ("op" "string_to_b58") [-relay-] k)
|
||||
(call -relay- ("kad" "neighborhood") [k [] []] nodes)
|
||||
)
|
||||
(par
|
||||
(fold nodes n
|
||||
(par
|
||||
(xor
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(xor
|
||||
(call n ("peer" "timestamp_ms") [] $res)
|
||||
(seq
|
||||
(seq
|
||||
(call -relay- ("op" "noop") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
|
||||
(call -relay- ("op" "string_to_b58") [-relay-] k)
|
||||
(call -relay- ("kad" "neighborhood") [k [] []] nodes)
|
||||
)
|
||||
(par
|
||||
(fold nodes n
|
||||
(par
|
||||
(new $status
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(par
|
||||
(xor
|
||||
(seq
|
||||
(call n ("peer" "timestamp_ms") [] $timestamps)
|
||||
(ap "ok" $status)
|
||||
)
|
||||
(seq
|
||||
(call -relay- ("op" "noop") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
|
||||
)
|
||||
)
|
||||
(call -relay- ("peer" "timeout") [2000 "timed out"] $status)
|
||||
)
|
||||
(call -relay- ("op" "identity") [$status.$.[0]!] push-to-stream-30)
|
||||
)
|
||||
(ap push-to-stream-30 $statuses)
|
||||
)
|
||||
(xor
|
||||
(mismatch $status.$.[0]! "ok"
|
||||
(ap n $dead_peers)
|
||||
)
|
||||
(null)
|
||||
)
|
||||
)
|
||||
)
|
||||
(next n)
|
||||
)
|
||||
)
|
||||
(null)
|
||||
)
|
||||
)
|
||||
(call -relay- ("op" "noop") [])
|
||||
(call -relay- ("op" "array_length") [nodes] length)
|
||||
)
|
||||
(next n)
|
||||
(call -relay- ("math" "sub") [length 1] sub)
|
||||
)
|
||||
(call -relay- ("op" "noop") [$statuses.$.[sub]!])
|
||||
)
|
||||
(null)
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
|
||||
)
|
||||
(call %init_peer_id% ("op" "identity") [$dead_peers] dead_peers-fix)
|
||||
)
|
||||
(call -relay- ("op" "noop") [$res.$.[9]!])
|
||||
)
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
|
||||
(call %init_peer_id% ("op" "identity") [$timestamps] timestamps-fix)
|
||||
)
|
||||
(call %init_peer_id% ("op" "identity") [$res] res-fix)
|
||||
)
|
||||
)
|
||||
)
|
||||
(xor
|
||||
(call %init_peer_id% ("callbackSrv" "response") [res-fix])
|
||||
(call %init_peer_id% ("callbackSrv" "response") [timestamps-fix dead_peers-fix])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
|
||||
)
|
||||
)
|
||||
@ -82,132 +114,35 @@ export function ts_getter(...args: any) {
|
||||
return callFunction(
|
||||
args,
|
||||
{
|
||||
"functionName" : "ts_getter",
|
||||
"returnType" : {
|
||||
"tag" : "primitive"
|
||||
},
|
||||
"argDefs" : [
|
||||
],
|
||||
"names" : {
|
||||
"relay" : "-relay-",
|
||||
"getDataSrv" : "getDataSrv",
|
||||
"callbackSrv" : "callbackSrv",
|
||||
"responseSrv" : "callbackSrv",
|
||||
"responseFnName" : "response",
|
||||
"errorHandlingSrv" : "errorHandlingSrv",
|
||||
"errorFnName" : "error"
|
||||
}
|
||||
},
|
||||
script
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
export type Ts_getter_with_timeoutResult = [number[], string[]]
|
||||
export function ts_getter_with_timeout(
|
||||
config?: {ttl?: number}
|
||||
): Promise<Ts_getter_with_timeoutResult>;
|
||||
|
||||
export function ts_getter_with_timeout(
|
||||
peer: FluencePeer,
|
||||
config?: {ttl?: number}
|
||||
): Promise<Ts_getter_with_timeoutResult>;
|
||||
|
||||
export function ts_getter_with_timeout(...args: any) {
|
||||
|
||||
let script = `
|
||||
(xor
|
||||
(seq
|
||||
(seq
|
||||
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
|
||||
(new $res
|
||||
(seq
|
||||
(new $dead_peers
|
||||
(seq
|
||||
(xor
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call -relay- ("op" "string_to_b58") [-relay-] k)
|
||||
(call -relay- ("kad" "neighborhood") [k [] []] nodes)
|
||||
)
|
||||
(par
|
||||
(fold nodes n
|
||||
(par
|
||||
(new $status
|
||||
(seq
|
||||
(seq
|
||||
(par
|
||||
(xor
|
||||
(seq
|
||||
(call n ("peer" "timestamp_ms") [] $res)
|
||||
(ap "success" $status)
|
||||
)
|
||||
(seq
|
||||
(call -relay- ("op" "noop") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
|
||||
)
|
||||
)
|
||||
(call -relay- ("peer" "timeout") [1000 "timeout"] $status)
|
||||
)
|
||||
(xor
|
||||
(mismatch $status.$.[0]! "success"
|
||||
(xor
|
||||
(seq
|
||||
(ap 0 $res)
|
||||
(ap n $dead_peers)
|
||||
)
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
|
||||
)
|
||||
)
|
||||
(null)
|
||||
)
|
||||
)
|
||||
(call -relay- ("op" "noop") [])
|
||||
)
|
||||
)
|
||||
(next n)
|
||||
)
|
||||
)
|
||||
(null)
|
||||
)
|
||||
)
|
||||
(call -relay- ("op" "noop") [$res.$.[19]!])
|
||||
)
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
|
||||
)
|
||||
(call %init_peer_id% ("op" "identity") [$dead_peers] dead_peers-fix)
|
||||
)
|
||||
)
|
||||
(call %init_peer_id% ("op" "identity") [$res] res-fix)
|
||||
)
|
||||
)
|
||||
)
|
||||
(xor
|
||||
(call %init_peer_id% ("callbackSrv" "response") [res-fix dead_peers-fix])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
|
||||
)
|
||||
)
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5])
|
||||
)
|
||||
`
|
||||
return callFunction(
|
||||
args,
|
||||
{
|
||||
"functionName" : "ts_getter_with_timeout",
|
||||
"returnType" : {
|
||||
"tag" : "multiReturn",
|
||||
"returnItems" : [
|
||||
{
|
||||
"tag" : "primitive"
|
||||
},
|
||||
{
|
||||
"tag" : "primitive"
|
||||
"functionName" : "collect_timestamps_from_neighborhood",
|
||||
"arrow" : {
|
||||
"tag" : "arrow",
|
||||
"domain" : {
|
||||
"tag" : "labeledProduct",
|
||||
"fields" : {
|
||||
|
||||
}
|
||||
]
|
||||
},
|
||||
"codomain" : {
|
||||
"tag" : "unlabeledProduct",
|
||||
"items" : [
|
||||
{
|
||||
"tag" : "array",
|
||||
"type" : {
|
||||
"tag" : "scalar",
|
||||
"name" : "u64"
|
||||
}
|
||||
},
|
||||
{
|
||||
"tag" : "array",
|
||||
"type" : {
|
||||
"tag" : "scalar",
|
||||
"name" : "string"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"argDefs" : [
|
||||
],
|
||||
"names" : {
|
||||
"relay" : "-relay-",
|
||||
"getDataSrv" : "getDataSrv",
|
||||
|
@ -15,14 +15,18 @@
|
||||
*/
|
||||
|
||||
import { setLogLevel, Fluence } from "@fluencelabs/fluence";
|
||||
import { krasnodar, Node } from "@fluencelabs/fluence-network-environment";
|
||||
import { ts_getter, ts_getter_with_timeout } from "./_aqua/timestamp_gatherer";
|
||||
import { krasnodar } from "@fluencelabs/fluence-network-environment";
|
||||
import { collect_timestamps_from_neighborhood } from "./_aqua/timestamp_gatherer";
|
||||
|
||||
async function main() {
|
||||
if (process.env.DEBUG) {
|
||||
setLogLevel("DEBUG");
|
||||
}
|
||||
|
||||
// create the Fluence client for the Krasnodar testnet
|
||||
// and we're using peer 6 to do so
|
||||
await Fluence.start({ connectTo: krasnodar[5] });
|
||||
// Connect to the address specified by environment variable RELAY or use krasnodar[5] if not set
|
||||
let relay = process.env.RELAY || krasnodar[5];
|
||||
|
||||
await Fluence.start({ connectTo: relay });
|
||||
console.log(
|
||||
"Created a fluence client with peer id %s and relay id %s",
|
||||
Fluence.getStatus().peerId,
|
||||
@ -30,13 +34,9 @@ async function main() {
|
||||
);
|
||||
|
||||
// call the simple getter
|
||||
const ts_result = await ts_getter();
|
||||
console.log("simple result: ", ts_result);
|
||||
|
||||
// call the bounded getter
|
||||
const ts_result_tuple = await ts_getter_with_timeout();
|
||||
console.log("raw timestamps: %s\ndead peers: %s ", ts_result_tuple[0].filter(e => e !== 0), ts_result_tuple[1]);
|
||||
|
||||
const [timestamps, dead_peers] = await collect_timestamps_from_neighborhood();
|
||||
console.log("timestamps: %s", timestamps);
|
||||
console.log("dead peers: %s ", dead_peers);
|
||||
|
||||
await Fluence.stop();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user