Integrate logos-chat with the LEZ-backed mix network: - Update vendor/nwaku to logos-delivery fork (feat/mix-rln-gifter-sim) with mix protocol, OnchainLEZGroupManager, RLN gifter client, and mix-rln-spam-protection-plugin - Add vendor/logos-lez-rln submodule for reproducible LEZ module builds - Add RLN FFI surface to liblogoschat: chat_set_rln_fetcher, chat_set_rln_config, chat_push_roots, chat_push_proof, etc. - Wire gifter client for RLN membership registration via mix network - Switch to filter-based message reception (relay: false, filter: true) - Send via lightpushPublish(mixify=true) for Sphinx onion routing - Add mix-librln separate build + duplicate symbol resolution - Exclude vendor/logos-lez-rln from nimble link creation - Update nix build for mix-librln and cross-platform support
rust-bundle
A minimal Rust staticlib crate that bundles libchat and rln into a single archive (liblogoschat_rust_bundle.a), suitable for static linking into the Nim application.
Motivation
libchat and rln are both Rust crates. Linking them as separate static archives (.a files) causes duplicate symbol errors at link time, because each archive would embed its own copy of the Rust standard library.
By declaring both as rlib dependencies of a single staticlib crate, rustc resolves and links everything in one pass. The resulting liblogoschat_rust_bundle.a exposes all #[no_mangle] pub extern "C" symbols from both crates without any stdlib duplication.
This approach follows the guidance in the official Rust Reference: https://doc.rust-lang.org/reference/linkage.html#mixed-rust-and-foreign-codebases.
Build
cargo build --release --manifest-path rust-bundle/Cargo.toml
Output: rust-bundle/target/release/liblogoschat_rust_bundle.a
From the project root, use the build-bundle Makefile target, which handles this after building librln from the nwaku vendor tree.
Dependencies
| Crate | Path |
|---|---|
libchat |
vendor/libchat/conversations |
rln |
vendor/nwaku/vendor/zerokit/rln |