simulations/mix_lez_chat/run_simulation.sh:
- Strict mix-pool readiness wait: now requires NUM_NODES-1 client
registrations succeeded on the gifter (one per non-gifter mix node)
AND a "Gifter self-registered as mix relay" log line on node0 —
not just GR>=3 which could pass while node0 itself hadn't yet
finished its own membership flow. Lets every mix node actually be
ready to generate forward proofs before sender starts.
- Bumps testnet KADEMLIA_HARD_CAP to 1800s (30 min). Testnet block
times + finality lag put 4 sequential mix-node registrations well
beyond the old 600s ceiling.
vendor/nwaku bump pulls in:
- unified get_merkle_proofs that returns valid_roots atomically;
- self-verify in spam_protection.generateProof;
- ExternalMerkleProof.validRoots field + pollLoop refresh from it;
- proofRoot/getPollInterval accessors on OnchainLEZGroupManager;
- confirmMembershipLeafIndex helper (unused — wiring foundation for a
follow-up background watcher to close the slot-allocation race).
Replaces the blind 30s post-RLN-ready sleep in sendBytes with a
poll-based wait: capture our cachedProof's merkle root, then wait
until it has been present in our own rootTracker for ≥2 poll cycles
(cap 180s, warn-and-publish on cap). Adaptive to the underlying
chain's block cadence — solves the testnet RLN root-drift race
where a 30-42s sleep wasn't enough for mix-node verifiers to poll
the post-registration root, so proofs failed with
"Spam protection proof verification failed" at mix entry.
Non-OnchainLEZ group managers retain the 30s fallback.
Bumps vendor/nwaku to pick up the OnchainLEZGroupManager.proofRoot +
getPollInterval accessors this gate uses.
Also drops the deprecated logos-cpp-sdk override on the nix-fetched
LOGOSCORE: overriding the SDK breaks liblogos 7df6195's source
(stale requestObject/onEvent shape). Plugins via logos-module-builder
ship the newer SDK and are ABI-compatible with the native build.
Cascades the chain-wide SDK pin bump (a4bd66c → 1468180b) into:
- simulations/mix_lez_chat/run_simulation.sh: logoscore nix-build
override-input
- vendor/logos-lez-rln submodule pointer
All override-inputs in the build chain now agree on rev 1468180b, which
provides invokeRemoteMethodAsync. Avoids the mixed-rev ABI hazard where
a plugin compiled against one SDK rev would silently segfault against
a libsdk compiled against a different rev.
Adds a SIM_NETWORK=testnet path to mix_lez_chat that:
- Skips local sequencer launch; reachability-checks the testnet RPC
up front.
- Selects vendor/logos-lez-rln/testnet/ for wallet config + persistent
state. Default flow runs run_setup against the deployed RLN program
(is_initialized short-circuits to create_funded_user).
- Bootstraps from the submodule-shipped artifacts on first run:
copies testnet/storage.json.seed -> testnet/storage.json and
testnet/{supply_holding,payment_account}.txt ->
~/.logos-lez-rln/{supply_holding,payment_account}_<tree>.txt. Lets
a fresh-clone dev reuse the canonical deployment.
- Adds SIM_SLIM=1 opt-in: skip run_setup entirely, use the shipped
config_account + cached payment_account. Saves devs from building
the lez-rln Rust toolchain (and transitively the lssa nested
submodule).
- Raises timing floors for testnet block times (~60s vs local ~15s);
adds KADEMLIA_HARD_CAP and SIM_PERSIST_LOCAL escape hatches.
- Polled-readiness loops replace fixed sleeps (kademlia mesh, mix
peer counts, receiver join, delivery — each with bounded retry).
- Extracted seed_copy and wait_method_calls helpers; dropped a stale
mix-peer kademlia gate (static mixNodes config seeds the pool via
processBootNodes — kademlia counts are diagnostics only).
README updated with the testnet-flow + slim-mode + fresh-clone story.
Wires the existing mix_lez_chat simulation to drive the gifter's
EIP-191 allowlist auth path end-to-end:
* bumps vendor/nwaku and vendor/logos-lez-rln (and, transitively,
logos-delivery-module and its bundled logos-delivery copy) to pick up
the auth plugin, the auto-registering client's EIP-191 signing, and
the new --mix-gifter-allowlist / --mix-gifter-auth-key CLI flags.
* adds a `gifterAuthKey` knob on WakuConfig + the JSON config bridge in
client_api so chat sender/receiver instances sign their gifter
requests too.
* commits 5 fixed test secp256k1 keys (one per non-gifter mix node and
per chat client) under simulations/mix_lez_chat/fixtures/gifter_auth/
along with their derived addresses.
* run_simulation.sh sources keys.env+addresses.env, sets
`mixGifterAllowlist` on mix node 0, and threads the matching
`mixGifterAuthKey` / `gifterAuthKey` into nodes 1-3 and the
receiver/sender configs.
Test fixtures only — keys must never be reused outside this sim.
TREE_ID_HEX updated from 24 to 32 bytes to match SPEL's tree_id format,
fixing stale payment account lookup that caused silent registration
failures (KeyNotFound error 8).
setup_and_run.sh now restores working tree files in all nested
submodules after git submodule update --init, which resets them.
Multi-stage Dockerfile pre-builds all heavy nix dependencies. Runtime
image (~8.5GB) at ghcr.io/adklempner/logos-chat-sim:latest includes
nix store closure + Rust + cargo-risczero/r0vm + system clang.
run_in_docker.sh pulls from GHCR, symlinks pre-built modules, builds
sequencer + run_setup from source (~10 min per run).
Update vendor/logos-lez-rln to a591645 (rebased onto main with
member-expiry merged, single squashed commit).
Add INSTRUCTIONS.md with macOS, Linux (native), and Docker instructions.