mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-01-05 23:43:07 +00:00
Merge ce19d16c31b26e193f98e42fd1a9261dab386b98 into 834eea945d05b4092466f3953467b28467e6b24c
This commit is contained in:
commit
c006b52ab6
53
.github/workflows/test-nimble-install.yml
vendored
Normal file
53
.github/workflows/test-nimble-install.yml
vendored
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
name: Test Nimble Installation
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- simpler-deps
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test-nimble-install:
|
||||||
|
continue-on-error: true # Some runs get oddly cancelled
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest] # TODO: Windows
|
||||||
|
nim-version: ['2.2.4'] # TODO: tests with more versions
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: "true" # Needed to pull RLN script
|
||||||
|
|
||||||
|
- uses: nim-lang/setup-nimble-action@v1
|
||||||
|
with:
|
||||||
|
nimble-version: "0.20.1"
|
||||||
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Display Nimble version
|
||||||
|
run: nimble --version
|
||||||
|
|
||||||
|
- name: Run nimble install on waku
|
||||||
|
run: nimble install
|
||||||
|
timeout-minutes: 60
|
||||||
|
|
||||||
|
- name: Run nimble check on waku
|
||||||
|
run: nimble check -l
|
||||||
|
timeout-minutes: 60
|
||||||
|
|
||||||
|
- name: Build example project
|
||||||
|
working-directory: examples/nimble
|
||||||
|
run: |
|
||||||
|
echo "Building example project..."
|
||||||
|
nimble --verbose build
|
||||||
|
|
||||||
|
- name: Run example project
|
||||||
|
working-directory: examples/nimble
|
||||||
|
run: |
|
||||||
|
echo "Running example project..."
|
||||||
|
# nimble --verbose run # TODO: Use nimble run
|
||||||
|
./example
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
# Nimble packages
|
# Nimble packages
|
||||||
/vendor/.nimble
|
/vendor/.nimble
|
||||||
|
nimbledeps
|
||||||
|
|
||||||
# Generated Files
|
# Generated Files
|
||||||
*.generated.nim
|
*.generated.nim
|
||||||
|
|||||||
4
examples/nimble/.gitignore
vendored
Normal file
4
examples/nimble/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
nimbledeps
|
||||||
|
nimble.develop
|
||||||
|
nimble.paths
|
||||||
|
example
|
||||||
11
examples/nimble/config.nims
Normal file
11
examples/nimble/config.nims
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# begin Nimble config (version 2)
|
||||||
|
when withDir(thisDir(), system.fileExists("nimble.paths")):
|
||||||
|
include "nimble.paths"
|
||||||
|
# end Nimble config
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
let rlnLib = getCurrentDir() / "build" / "librln.a"
|
||||||
|
echo "RLN lib path: ", rlnLib
|
||||||
|
switch("passL", rlnLib)
|
||||||
|
switch("passL", "-lm")
|
||||||
33
examples/nimble/example.nimble
Normal file
33
examples/nimble/example.nimble
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# Package
|
||||||
|
|
||||||
|
version = "0.1.0"
|
||||||
|
author = "fryorcraken"
|
||||||
|
description = "Test Waku with nimble"
|
||||||
|
license = "MIT"
|
||||||
|
srcDir = "src"
|
||||||
|
bin = @["example"]
|
||||||
|
|
||||||
|
# Dependencies
|
||||||
|
|
||||||
|
requires "chronos"
|
||||||
|
requires "results"
|
||||||
|
requires "waku#44bfddb245e30eeab850730dee67c41cbe7f7252"
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
proc ensureRln(libFile: string = "build/librln.a", version = "v0.8.0") =
|
||||||
|
if not fileExists(libFile):
|
||||||
|
echo "Building RLN library..."
|
||||||
|
let buildDir = parentDir(parentDir(getCurrentDir())) & "/vendor/zerokit"
|
||||||
|
let outFile = libFile
|
||||||
|
|
||||||
|
let outDir = parentDir(outFile)
|
||||||
|
if not dirExists(outDir):
|
||||||
|
mkDir(outDir) # Ensure build directory exists
|
||||||
|
|
||||||
|
exec "bash ../../scripts/build_rln.sh " & buildDir & " " & version & " " & outFile
|
||||||
|
else:
|
||||||
|
echo "RLN library already exists: " & libFile
|
||||||
|
|
||||||
|
before build:
|
||||||
|
ensureRln()
|
||||||
28
examples/nimble/src/example.nim
Normal file
28
examples/nimble/src/example.nim
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import chronos, results
|
||||||
|
import waku
|
||||||
|
|
||||||
|
proc main() {.async.} =
|
||||||
|
echo("Starting Waku node...")
|
||||||
|
|
||||||
|
# Create a basic configuration for the Waku node
|
||||||
|
# No RLN so we don't need to path an eth rpc endpoint
|
||||||
|
let config = NodeConfig.init(
|
||||||
|
protocolsConfig = ProtocolsConfig.init(entryNodes = @[], clusterId = 42)
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create the node using the library API's createNode function
|
||||||
|
let node = (await createNode(config)).valueOr:
|
||||||
|
echo("Failed to create node: ", error)
|
||||||
|
quit(1)
|
||||||
|
|
||||||
|
echo("Waku node created successfully!")
|
||||||
|
|
||||||
|
# Start the node
|
||||||
|
(await startWaku(addr node)).isOkOr:
|
||||||
|
echo("Failed to start node: ", error)
|
||||||
|
quit(1)
|
||||||
|
|
||||||
|
echo("Node started successfully! exiting")
|
||||||
|
|
||||||
|
when isMainModule:
|
||||||
|
waitFor main()
|
||||||
@ -19,7 +19,7 @@ host_triplet=$(rustc --version --verbose | awk '/host:/{print $2}')
|
|||||||
|
|
||||||
tarball="${host_triplet}"
|
tarball="${host_triplet}"
|
||||||
|
|
||||||
tarball+="-rln.tar.gz"
|
tarball+="-default-rln.tar.gz"
|
||||||
|
|
||||||
# Download the prebuilt rln library if it is available
|
# Download the prebuilt rln library if it is available
|
||||||
if curl --silent --fail-with-body -L \
|
if curl --silent --fail-with-body -L \
|
||||||
|
|||||||
@ -8,6 +8,7 @@ version = "0.36.0"
|
|||||||
author = "Status Research & Development GmbH"
|
author = "Status Research & Development GmbH"
|
||||||
description = "Waku, Private P2P Messaging for Resource-Restricted Devices"
|
description = "Waku, Private P2P Messaging for Resource-Restricted Devices"
|
||||||
license = "MIT or Apache License 2.0"
|
license = "MIT or Apache License 2.0"
|
||||||
|
srcDir = "waku"
|
||||||
#bin = @["build/waku"]
|
#bin = @["build/waku"]
|
||||||
|
|
||||||
### Dependencies
|
### Dependencies
|
||||||
@ -30,7 +31,8 @@ requires "nim >= 2.2.4",
|
|||||||
"regex",
|
"regex",
|
||||||
"results",
|
"results",
|
||||||
"db_connector",
|
"db_connector",
|
||||||
"minilru"
|
"minilru",
|
||||||
|
"https://github.com/vacp2p/mix#v0.1.0"
|
||||||
|
|
||||||
### Helper functions
|
### Helper functions
|
||||||
proc buildModule(filePath, params = "", lang = "c"): bool =
|
proc buildModule(filePath, params = "", lang = "c"): bool =
|
||||||
|
|||||||
@ -7,4 +7,4 @@ import bearssl/rand, stew/byteutils
|
|||||||
proc generateRequestId*(rng: ref HmacDrbgContext): string =
|
proc generateRequestId*(rng: ref HmacDrbgContext): string =
|
||||||
var bytes: array[10, byte]
|
var bytes: array[10, byte]
|
||||||
hmacDrbgGenerate(rng[], bytes)
|
hmacDrbgGenerate(rng[], bytes)
|
||||||
return toHex(bytes)
|
return byteutils.toHex(bytes)
|
||||||
|
|||||||
@ -30,7 +30,7 @@ type WakuFilterClient* = ref object of LPProtocol
|
|||||||
func generateRequestId(rng: ref HmacDrbgContext): string =
|
func generateRequestId(rng: ref HmacDrbgContext): string =
|
||||||
var bytes: array[10, byte]
|
var bytes: array[10, byte]
|
||||||
hmacDrbgGenerate(rng[], bytes)
|
hmacDrbgGenerate(rng[], bytes)
|
||||||
return toHex(bytes)
|
return byteutils.toHex(bytes)
|
||||||
|
|
||||||
proc addSubscrObserver*(wfc: WakuFilterClient, obs: SubscriptionObserver) =
|
proc addSubscrObserver*(wfc: WakuFilterClient, obs: SubscriptionObserver) =
|
||||||
wfc.subscrObservers.add(obs)
|
wfc.subscrObservers.add(obs)
|
||||||
|
|||||||
@ -79,7 +79,7 @@ proc messageIngress*(
|
|||||||
let id = SyncID(time: msg.timestamp, hash: msgHash)
|
let id = SyncID(time: msg.timestamp, hash: msgHash)
|
||||||
|
|
||||||
self.storage.insert(id, pubsubTopic, msg.contentTopic).isOkOr:
|
self.storage.insert(id, pubsubTopic, msg.contentTopic).isOkOr:
|
||||||
error "failed to insert new message", msg_hash = $id.hash.toHex(), error = $error
|
error "failed to insert new message", msg_hash = $byteutils.toHex(id.hash), error = $error
|
||||||
|
|
||||||
proc messageIngress*(
|
proc messageIngress*(
|
||||||
self: SyncReconciliation,
|
self: SyncReconciliation,
|
||||||
@ -87,7 +87,7 @@ proc messageIngress*(
|
|||||||
pubsubTopic: PubsubTopic,
|
pubsubTopic: PubsubTopic,
|
||||||
msg: WakuMessage,
|
msg: WakuMessage,
|
||||||
) =
|
) =
|
||||||
trace "message ingress", msg_hash = msgHash.toHex(), msg = msg
|
trace "message ingress", msg_hash = byteutils.toHex(msgHash), msg = msg
|
||||||
|
|
||||||
if msg.ephemeral:
|
if msg.ephemeral:
|
||||||
return
|
return
|
||||||
@ -95,7 +95,7 @@ proc messageIngress*(
|
|||||||
let id = SyncID(time: msg.timestamp, hash: msgHash)
|
let id = SyncID(time: msg.timestamp, hash: msgHash)
|
||||||
|
|
||||||
self.storage.insert(id, pubsubTopic, msg.contentTopic).isOkOr:
|
self.storage.insert(id, pubsubTopic, msg.contentTopic).isOkOr:
|
||||||
error "failed to insert new message", msg_hash = $id.hash.toHex(), error = $error
|
error "failed to insert new message", msg_hash = $byteutils.toHex(id.hash), error = $error
|
||||||
|
|
||||||
proc messageIngress*(
|
proc messageIngress*(
|
||||||
self: SyncReconciliation,
|
self: SyncReconciliation,
|
||||||
@ -104,7 +104,7 @@ proc messageIngress*(
|
|||||||
contentTopic: ContentTopic,
|
contentTopic: ContentTopic,
|
||||||
) =
|
) =
|
||||||
self.storage.insert(id, pubsubTopic, contentTopic).isOkOr:
|
self.storage.insert(id, pubsubTopic, contentTopic).isOkOr:
|
||||||
error "failed to insert new message", msg_hash = $id.hash.toHex(), error = $error
|
error "failed to insert new message", msg_hash = $byteutils.toHex(id.hash), error = $error
|
||||||
|
|
||||||
proc preProcessPayload(
|
proc preProcessPayload(
|
||||||
self: SyncReconciliation, payload: RangesData
|
self: SyncReconciliation, payload: RangesData
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user