Files
Arseniy Klempner 072e0755f1 drop journey docs; add the live-registry scenario
Journey docs leave the repo (run logs are the record; the old mix
JOURNEY.md stays a local untracked doc beside its scenario).

scenarios/live-registry: the registry-provider crate's gated testnet_*
cargo tests against the target's deployment — pinned source materialized +
staged (or RLN_MODULES_CHECKOUT), deployment-shim symlink satisfies the
tests' LEZ_RLN_CHECKOUT layout, persistent CARGO_TARGET_DIR so reruns skip
the cold zerokit build. Not yet run against a chain.
2026-08-10 20:06:53 -06:00

3.8 KiB

logos-rln-e2e

End-to-end composition testing for RLN-on-LEZ. This repo pins the producer repos — logos-lez-rln (chain: guest programs, sequencer + deployment tooling) and logos-rln-modules (the module stack) — and runs cross-repo scenarios against a real chain: a local sequencer by default (zero external infra), the hosted testnet on request. Unit and hermetic tests stay in the producer repos; what lives here is anything that needs two repos plus a running chain.

Formerly logos-rln-mix-sim: the 5-node RLN-over-mix simulation is now one scenario of several (currently quarantined — scenarios/mix/STATUS.md).

Scenarios

id status proves
register in progress full single-node membership lifecycle: faucet claim → register → merkle proof + registry cross-check → generate/verify proof (valid + tampered)
live-registry planned the registry-provider module's live-chain cargo tests against a provisioned deployment
delivery planned logos-delivery-module propagation; RLN-gated delivery once logos-core wires RLN-on-LEZ into it
mix quarantined gifted membership allocation (LIP-158) + per-hop RLN over a 3-hop Sphinx mix (LIP-144)
./run.sh --list
./run.sh register --target local     # boots a local sequencer, provisions a fresh RLN tree
./run.sh register --target testnet   # runs against a committed testnet deployment

A scenario is scenarios/<id>/{scenario.env,run.sh} driven through the harness contract (docs/contract.md); a target (harness/targets/{local,testnet}.sh) stands up and provisions the chain. The target is always a flag, never part of a scenario's name.

Prerequisites

  • nix (flakes) — logoscore and the module bundles build from the flake pins.
  • Stock host tools: bash, jq, python3, curl, openssl, rsync, tar (preinstalled on macOS and most Linux; nix develop provides them too).
  • --target local: a logos-lez-rln checkout (default ../logos-lez-rln, override with LEZ_RLN_CHECKOUT) with the host binaries and risc0 guest blobs built — the target prints the exact build recipe when they are missing.
  • docker — only for compose-topology scenarios (mix, later delivery).

Platforms: darwin-arm64 and linux (x86_64/aarch64).

Pinning

flake.lock is the compatibility matrix: the exact revisions of logos-lez-rln, logos-rln-modules and logoscore this repo's scenarios are known to compose. Bumping the lock is the act of declaring a new known-good set. Artifact resolution (env override → nix build → staged-source build) is harness/artifacts.sh.

Naming

The module stack was renamed on 2026-08-10 and two names swapped meaning — read docs/naming.md before touching anything that mentions liblogos_rln_module. tools/check-naming.sh guards the active tree.

Layout

run.sh                  entrypoint: ./run.sh <scenario> --target <t>
flake.nix flake.lock    the pins (lez-rln, rln-modules, logoscore)
harness/
  artifacts.sh          binary/bundle resolution
  lib/                  shared primitives (json, lgx, daemon, wallet, chain)
  targets/              local (sequencer lifecycle + provisioning) / testnet
  container/            compose topology pieces (quarantined with mix)
scenarios/
  register/  live-registry/  delivery/  mix/
deployments/            committed testnet descriptors (local is per-run)
docs/                   contract.md, naming.md
tools/                  check-naming.sh

License

Dual-licensed under MIT or Apache 2.0, at your option.