mirror of
https://github.com/fluencelabs/registry.git
synced 2025-04-25 02:02:14 +00:00
High-level dht api (#11)
* dht api * add branch to ci to test release * add some comments * add aqua-lib dependency * par in onProviders * release! * delete release branch * Tiny changes Co-authored-by: dmitry <dmitry@fluence.one>
This commit is contained in:
parent
a621c64a86
commit
fe5dcd46c7
2
.gitignore
vendored
2
.gitignore
vendored
@ -13,3 +13,5 @@ Cargo.lock
|
||||
# Added by cargo
|
||||
|
||||
/target
|
||||
|
||||
.idea
|
2
npm/.gitignore
vendored
2
npm/.gitignore
vendored
@ -1 +1,3 @@
|
||||
*.tgz
|
||||
node_modules
|
||||
target
|
86
npm/dht-api.aqua
Normal file
86
npm/dht-api.aqua
Normal file
@ -0,0 +1,86 @@
|
||||
import "dht.aqua"
|
||||
import "@fluencelabs/aqua-lib/builtin.aqua"
|
||||
|
||||
-- get neighbors in Kademlia network
|
||||
func getNeighbours(key: string, node_id: string) -> []PeerId:
|
||||
on node_id:
|
||||
k <- Op.string_to_b58(key)
|
||||
nodes <- Kademlia.neighborhood(k, false)
|
||||
<- nodes
|
||||
|
||||
func clearHostValue(key: string, node_id: string):
|
||||
nodes <- getNeighbours(key, node_id)
|
||||
for n <- nodes par:
|
||||
on n:
|
||||
try:
|
||||
t <- Peer.timestamp_sec()
|
||||
AquaDHT.clear_host_value(key, t)
|
||||
|
||||
func registerKey(node_id: string, key: string) -> []string:
|
||||
nodes <- getNeighbours(key, node_id)
|
||||
for n <- nodes par:
|
||||
on n:
|
||||
try:
|
||||
t <- Peer.timestamp_sec()
|
||||
AquaDHT.register_key(key, t, true, 0)
|
||||
<- nodes
|
||||
|
||||
func registerKeyPutValue(node_id: string, key: string, value: string, relay_id: ?string, service_id: ?string) -> []string:
|
||||
nodes <- getNeighbours(key, node_id)
|
||||
on node_id:
|
||||
for n <- nodes par:
|
||||
on n:
|
||||
try:
|
||||
t <- Peer.timestamp_sec()
|
||||
AquaDHT.register_key(key, t, false, 0)
|
||||
AquaDHT.put_value(key, value, t, relay_id, service_id, 0)
|
||||
<- nodes
|
||||
|
||||
func registerKeyPutHostValue(node_id: string, key: string, value: string, service_id: ?string):
|
||||
on node_id:
|
||||
t <- Peer.timestamp_sec()
|
||||
AquaDHT.register_key(key, t, false, 0)
|
||||
nil: ?string
|
||||
AquaDHT.put_host_value(key, value, t, nil, service_id, 0)
|
||||
|
||||
-- get all neighbors around the key in Kademlia network and store a value into them
|
||||
-- relay_id is for finding a route to the owner of the value
|
||||
func putValue(node_id: string, key: string, value: string, relay_id: ?string, service_id: ?string) -> []string:
|
||||
nodes <- getNeighbours(key, node_id)
|
||||
for n <- nodes par:
|
||||
on n:
|
||||
try:
|
||||
t <- Peer.timestamp_sec()
|
||||
AquaDHT.put_value(key, value, t, relay_id, service_id, 0)
|
||||
<- nodes
|
||||
|
||||
-- put a value on behalf of node_id (ie owner of the record will be node_id)
|
||||
func putHostValue(node_id: string, key: string, value: string, service_id: ?string):
|
||||
on node_id:
|
||||
nil: ?string
|
||||
t <- Peer.timestamp_sec()
|
||||
AquaDHT.put_host_value(key, value, t, nil, service_id, 0)
|
||||
|
||||
func getValues(node_id: string, key: string) -> []Record:
|
||||
on node_id:
|
||||
k <- Op.string_to_b58(key)
|
||||
nodes <- Kademlia.neighborhood(k, false)
|
||||
res: *GetValuesResult
|
||||
for n <- nodes par:
|
||||
on n:
|
||||
try:
|
||||
t <- Peer.timestamp_sec()
|
||||
res <- AquaDHT.get_values(key, t)
|
||||
v <- AquaDHT.merge_two(res!.result, res!1.result)
|
||||
<- v.result
|
||||
|
||||
-- get records by key and call the callback on their owners
|
||||
func onProviders(node_id: string, key: string, callback: Record -> ()):
|
||||
on node_id:
|
||||
k <- Op.string_to_b58(key)
|
||||
t <- Peer.timestamp_sec()
|
||||
res <- AquaDHT.get_values(key, t)
|
||||
for r <- res.result par:
|
||||
on r.peer_id via r.relay_id:
|
||||
callback(r)
|
||||
|
19
npm/dht-scheduled-scripts.aqua
Normal file
19
npm/dht-scheduled-scripts.aqua
Normal file
@ -0,0 +1,19 @@
|
||||
import "dht.aqua"
|
||||
import "@fluencelabs/aqua-lib/builtin.aqua"
|
||||
|
||||
-- clears expired records
|
||||
func clearExpired():
|
||||
t <- Peer.timestamp_sec()
|
||||
AquaDHT.clear_expired(t)
|
||||
|
||||
-- get all old records and replicate it by keys
|
||||
func replicate():
|
||||
t <- Peer.timestamp_sec()
|
||||
res <- AquaDHT.evict_stale(t)
|
||||
for r <- res.results par:
|
||||
k <- Op.string_to_b58(r.key.key)
|
||||
nodes <- Kademlia.neighborhood(k, false)
|
||||
for n <- nodes par:
|
||||
on n:
|
||||
AquaDHT.republish_key(r.key, t)
|
||||
AquaDHT.republish_values(r.key.key, r.records, t)
|
@ -0,0 +1 @@
|
||||
-- this file will be generated automatically
|
43
npm/package-lock.json
generated
43
npm/package-lock.json
generated
@ -1,5 +1,46 @@
|
||||
{
|
||||
"name": "@fluencelabs/aqua-dht",
|
||||
"version": "0.1.0",
|
||||
"lockfileVersion": 1
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@fluencelabs/aqua-dht",
|
||||
"version": "0.1.0",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@fluencelabs/aqua-lib": "^0.1.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@fluencelabs/aqua-cli": "^0.1.4-136"
|
||||
}
|
||||
},
|
||||
"node_modules/@fluencelabs/aqua-cli": {
|
||||
"version": "0.1.4-136",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/aqua-cli/-/aqua-cli-0.1.4-136.tgz",
|
||||
"integrity": "sha512-hvoS+Mc5xOlyWV2i7tCvnABSuSifoKQehoepaREerUhRvymAFwg7nOSc9HPtLY9Ou0j3H3TWhRgTI27+4wZrlA==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"aqua-cli": "index.js"
|
||||
}
|
||||
},
|
||||
"node_modules/@fluencelabs/aqua-lib": {
|
||||
"version": "0.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/aqua-lib/-/aqua-lib-0.1.5.tgz",
|
||||
"integrity": "sha512-0f5Lo9NT4ZvN+S/oGYiNxLUtpZsTfDy2qL0D4SFPVoj2+YPPK2PKSzZnja2clfM1KHHP6kT6Jd20sHVBIxBMtw=="
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@fluencelabs/aqua-cli": {
|
||||
"version": "0.1.4-136",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/aqua-cli/-/aqua-cli-0.1.4-136.tgz",
|
||||
"integrity": "sha512-hvoS+Mc5xOlyWV2i7tCvnABSuSifoKQehoepaREerUhRvymAFwg7nOSc9HPtLY9Ou0j3H3TWhRgTI27+4wZrlA==",
|
||||
"dev": true
|
||||
},
|
||||
"@fluencelabs/aqua-lib": {
|
||||
"version": "0.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/aqua-lib/-/aqua-lib-0.1.5.tgz",
|
||||
"integrity": "sha512-0f5Lo9NT4ZvN+S/oGYiNxLUtpZsTfDy2qL0D4SFPVoj2+YPPK2PKSzZnja2clfM1KHHP6kT6Jd20sHVBIxBMtw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,9 +3,16 @@
|
||||
"version": "0.1.0",
|
||||
"description": "Aqua DHT library",
|
||||
"files": [
|
||||
"dht.aqua"
|
||||
"dht.aqua",
|
||||
"dht-api.aqua",
|
||||
"dht-scheduled-scripts"
|
||||
],
|
||||
"scripts": {},
|
||||
"dependencies": {
|
||||
"@fluencelabs/aqua-lib": "^0.1.5"
|
||||
},
|
||||
"scripts": {
|
||||
"compile-aqua": "aqua-cli -i . -o ./target"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/fluencelabs/aqua-dht.git"
|
||||
@ -19,5 +26,8 @@
|
||||
"bugs": {
|
||||
"url": "https://github.com/fluencelabs/aqua-dht/issues"
|
||||
},
|
||||
"homepage": "https://github.com/fluencelabs/aqua-dht#readme"
|
||||
"homepage": "https://github.com/fluencelabs/aqua-dht#readme",
|
||||
"devDependencies": {
|
||||
"@fluencelabs/aqua-cli": "^0.1.4-136"
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user