2025-09-11 20:40:01 +05:30
|
|
|
# Mixnet simulation
|
|
|
|
|
|
|
|
|
|
## Aim
|
|
|
|
|
|
|
|
|
|
Simulate a local mixnet along with a chat app to publish using mix.
|
feat(mix): integrate mix protocol with extended kademlia + RLN spam protection
Rebased poc/mix-spam-protection onto origin/master. Bundles:
- Extended kademlia discovery integration for mix node pool
(waku/discovery/waku_kademlia.nim, tools/confutils/cli_args.nim)
- RLN spam protection plugin (vacp2p/mix-rln-spam-protection) wired in:
WakuMix gains mixRlnSpamProtection + publishMessage callback,
per-hop proof generation / verification, membership coordination
via /mix/rln/metadata/v1 content topic
- chat2mix sim app: filter-subscribes to spam-protection coordination
topic, defers publishing until mix node pool is populated
- Makefile: automated librln_mix_v2.0.0.a build via
scripts/build_rln_mix.sh and mix-librln target
- simulations/mixnet: 5-node mixnet sim infrastructure
(config1-4.toml, run_*.sh, build_setup.sh, setup_credentials.nim,
README, roundtrip_check.sh automated round-trip verification)
Rebase fixes:
- Plugin previously vendored as submodule; now a nimble requires entry
pinned to logos-co/mix-rln-spam-protection-plugin@037f8e10
- waku.nimble: zlib < 0.2 pin to keep nimble lock resolution stable
(upstream zlib HEAD bumped to 0.2.0)
- apps/chat2mix/config_chat2mix.nim: replace
`defaultValue: parseIpAddress("...")` with IpAddress literal,
works around confutils macro generating
`defaultValueHelpName(): string {.raises: [].}` that violates the
raises pragma when stringifying a parseIpAddress call
- config.nims: nimble setup --noNimblePath reordering
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:44:28 +05:30
|
|
|
This is helpful to test any changes during development.
|
2025-09-11 20:40:01 +05:30
|
|
|
|
|
|
|
|
## Simulation Details
|
|
|
|
|
|
feat(mix): integrate mix protocol with extended kademlia + RLN spam protection
Rebased poc/mix-spam-protection onto origin/master. Bundles:
- Extended kademlia discovery integration for mix node pool
(waku/discovery/waku_kademlia.nim, tools/confutils/cli_args.nim)
- RLN spam protection plugin (vacp2p/mix-rln-spam-protection) wired in:
WakuMix gains mixRlnSpamProtection + publishMessage callback,
per-hop proof generation / verification, membership coordination
via /mix/rln/metadata/v1 content topic
- chat2mix sim app: filter-subscribes to spam-protection coordination
topic, defers publishing until mix node pool is populated
- Makefile: automated librln_mix_v2.0.0.a build via
scripts/build_rln_mix.sh and mix-librln target
- simulations/mixnet: 5-node mixnet sim infrastructure
(config1-4.toml, run_*.sh, build_setup.sh, setup_credentials.nim,
README, roundtrip_check.sh automated round-trip verification)
Rebase fixes:
- Plugin previously vendored as submodule; now a nimble requires entry
pinned to logos-co/mix-rln-spam-protection-plugin@037f8e10
- waku.nimble: zlib < 0.2 pin to keep nimble lock resolution stable
(upstream zlib HEAD bumped to 0.2.0)
- apps/chat2mix/config_chat2mix.nim: replace
`defaultValue: parseIpAddress("...")` with IpAddress literal,
works around confutils macro generating
`defaultValueHelpName(): string {.raises: [].}` that violates the
raises pragma when stringifying a parseIpAddress call
- config.nims: nimble setup --noNimblePath reordering
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:44:28 +05:30
|
|
|
The simulation includes:
|
|
|
|
|
|
|
|
|
|
1. A 5-node mixnet where `run_mix_node.sh` is the bootstrap node for the other 4 nodes
|
|
|
|
|
2. Two chat app instances that publish messages using lightpush protocol over the mixnet
|
|
|
|
|
|
|
|
|
|
### Available Scripts
|
|
|
|
|
|
|
|
|
|
| Script | Description |
|
|
|
|
|
| ------------------ | ------------------------------------------ |
|
|
|
|
|
| `run_mix_node.sh` | Bootstrap mix node (must be started first) |
|
|
|
|
|
| `run_mix_node1.sh` | Mix node 1 |
|
|
|
|
|
| `run_mix_node2.sh` | Mix node 2 |
|
|
|
|
|
| `run_mix_node3.sh` | Mix node 3 |
|
|
|
|
|
| `run_mix_node4.sh` | Mix node 4 |
|
|
|
|
|
| `run_chat_mix.sh` | Chat app instance 1 |
|
|
|
|
|
| `run_chat_mix1.sh` | Chat app instance 2 |
|
|
|
|
|
| `build_setup.sh` | Build and generate RLN credentials |
|
|
|
|
|
|
|
|
|
|
## Prerequisites
|
|
|
|
|
|
|
|
|
|
Before running the simulation, build `wakunode2` and `chat2mix`:
|
2025-09-11 20:40:01 +05:30
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
cd <repo-root-dir>
|
feat(mix): integrate mix protocol with extended kademlia + RLN spam protection
Rebased poc/mix-spam-protection onto origin/master. Bundles:
- Extended kademlia discovery integration for mix node pool
(waku/discovery/waku_kademlia.nim, tools/confutils/cli_args.nim)
- RLN spam protection plugin (vacp2p/mix-rln-spam-protection) wired in:
WakuMix gains mixRlnSpamProtection + publishMessage callback,
per-hop proof generation / verification, membership coordination
via /mix/rln/metadata/v1 content topic
- chat2mix sim app: filter-subscribes to spam-protection coordination
topic, defers publishing until mix node pool is populated
- Makefile: automated librln_mix_v2.0.0.a build via
scripts/build_rln_mix.sh and mix-librln target
- simulations/mixnet: 5-node mixnet sim infrastructure
(config1-4.toml, run_*.sh, build_setup.sh, setup_credentials.nim,
README, roundtrip_check.sh automated round-trip verification)
Rebase fixes:
- Plugin previously vendored as submodule; now a nimble requires entry
pinned to logos-co/mix-rln-spam-protection-plugin@037f8e10
- waku.nimble: zlib < 0.2 pin to keep nimble lock resolution stable
(upstream zlib HEAD bumped to 0.2.0)
- apps/chat2mix/config_chat2mix.nim: replace
`defaultValue: parseIpAddress("...")` with IpAddress literal,
works around confutils macro generating
`defaultValueHelpName(): string {.raises: [].}` that violates the
raises pragma when stringifying a parseIpAddress call
- config.nims: nimble setup --noNimblePath reordering
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:44:28 +05:30
|
|
|
source env.sh
|
|
|
|
|
make wakunode2 chat2mix
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## RLN Spam Protection Setup
|
|
|
|
|
|
|
|
|
|
Generate RLN credentials and the shared Merkle tree for all nodes:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
cd simulations/mixnet
|
|
|
|
|
./build_setup.sh
|
2025-09-11 20:40:01 +05:30
|
|
|
```
|
|
|
|
|
|
feat(mix): integrate mix protocol with extended kademlia + RLN spam protection
Rebased poc/mix-spam-protection onto origin/master. Bundles:
- Extended kademlia discovery integration for mix node pool
(waku/discovery/waku_kademlia.nim, tools/confutils/cli_args.nim)
- RLN spam protection plugin (vacp2p/mix-rln-spam-protection) wired in:
WakuMix gains mixRlnSpamProtection + publishMessage callback,
per-hop proof generation / verification, membership coordination
via /mix/rln/metadata/v1 content topic
- chat2mix sim app: filter-subscribes to spam-protection coordination
topic, defers publishing until mix node pool is populated
- Makefile: automated librln_mix_v2.0.0.a build via
scripts/build_rln_mix.sh and mix-librln target
- simulations/mixnet: 5-node mixnet sim infrastructure
(config1-4.toml, run_*.sh, build_setup.sh, setup_credentials.nim,
README, roundtrip_check.sh automated round-trip verification)
Rebase fixes:
- Plugin previously vendored as submodule; now a nimble requires entry
pinned to logos-co/mix-rln-spam-protection-plugin@037f8e10
- waku.nimble: zlib < 0.2 pin to keep nimble lock resolution stable
(upstream zlib HEAD bumped to 0.2.0)
- apps/chat2mix/config_chat2mix.nim: replace
`defaultValue: parseIpAddress("...")` with IpAddress literal,
works around confutils macro generating
`defaultValueHelpName(): string {.raises: [].}` that violates the
raises pragma when stringifying a parseIpAddress call
- config.nims: nimble setup --noNimblePath reordering
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:44:28 +05:30
|
|
|
This script will:
|
|
|
|
|
|
|
|
|
|
1. Build and run the `setup_credentials` tool
|
|
|
|
|
2. Generate RLN credentials for all nodes (5 mix nodes + 2 chat clients)
|
|
|
|
|
3. Create `rln_tree.db` - the shared Merkle tree with all members
|
|
|
|
|
4. Create keystore files (`rln_keystore_{peerId}.json`) for each node
|
2025-09-11 20:40:01 +05:30
|
|
|
|
feat(mix): integrate mix protocol with extended kademlia + RLN spam protection
Rebased poc/mix-spam-protection onto origin/master. Bundles:
- Extended kademlia discovery integration for mix node pool
(waku/discovery/waku_kademlia.nim, tools/confutils/cli_args.nim)
- RLN spam protection plugin (vacp2p/mix-rln-spam-protection) wired in:
WakuMix gains mixRlnSpamProtection + publishMessage callback,
per-hop proof generation / verification, membership coordination
via /mix/rln/metadata/v1 content topic
- chat2mix sim app: filter-subscribes to spam-protection coordination
topic, defers publishing until mix node pool is populated
- Makefile: automated librln_mix_v2.0.0.a build via
scripts/build_rln_mix.sh and mix-librln target
- simulations/mixnet: 5-node mixnet sim infrastructure
(config1-4.toml, run_*.sh, build_setup.sh, setup_credentials.nim,
README, roundtrip_check.sh automated round-trip verification)
Rebase fixes:
- Plugin previously vendored as submodule; now a nimble requires entry
pinned to logos-co/mix-rln-spam-protection-plugin@037f8e10
- waku.nimble: zlib < 0.2 pin to keep nimble lock resolution stable
(upstream zlib HEAD bumped to 0.2.0)
- apps/chat2mix/config_chat2mix.nim: replace
`defaultValue: parseIpAddress("...")` with IpAddress literal,
works around confutils macro generating
`defaultValueHelpName(): string {.raises: [].}` that violates the
raises pragma when stringifying a parseIpAddress call
- config.nims: nimble setup --noNimblePath reordering
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:44:28 +05:30
|
|
|
**Important:** All scripts must be run from this directory (`simulations/mixnet/`) so they can access their credentials and tree file.
|
|
|
|
|
|
|
|
|
|
To regenerate credentials (e.g., after adding new nodes), run `./build_setup.sh` again - it will clean up old files first.
|
2025-09-11 20:40:01 +05:30
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
feat(mix): integrate mix protocol with extended kademlia + RLN spam protection
Rebased poc/mix-spam-protection onto origin/master. Bundles:
- Extended kademlia discovery integration for mix node pool
(waku/discovery/waku_kademlia.nim, tools/confutils/cli_args.nim)
- RLN spam protection plugin (vacp2p/mix-rln-spam-protection) wired in:
WakuMix gains mixRlnSpamProtection + publishMessage callback,
per-hop proof generation / verification, membership coordination
via /mix/rln/metadata/v1 content topic
- chat2mix sim app: filter-subscribes to spam-protection coordination
topic, defers publishing until mix node pool is populated
- Makefile: automated librln_mix_v2.0.0.a build via
scripts/build_rln_mix.sh and mix-librln target
- simulations/mixnet: 5-node mixnet sim infrastructure
(config1-4.toml, run_*.sh, build_setup.sh, setup_credentials.nim,
README, roundtrip_check.sh automated round-trip verification)
Rebase fixes:
- Plugin previously vendored as submodule; now a nimble requires entry
pinned to logos-co/mix-rln-spam-protection-plugin@037f8e10
- waku.nimble: zlib < 0.2 pin to keep nimble lock resolution stable
(upstream zlib HEAD bumped to 0.2.0)
- apps/chat2mix/config_chat2mix.nim: replace
`defaultValue: parseIpAddress("...")` with IpAddress literal,
works around confutils macro generating
`defaultValueHelpName(): string {.raises: [].}` that violates the
raises pragma when stringifying a parseIpAddress call
- config.nims: nimble setup --noNimblePath reordering
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:44:28 +05:30
|
|
|
### Step 1: Start the Mix Nodes
|
|
|
|
|
|
|
|
|
|
Start the bootstrap node first (in a separate terminal):
|
2025-09-11 20:40:01 +05:30
|
|
|
|
feat(mix): integrate mix protocol with extended kademlia + RLN spam protection
Rebased poc/mix-spam-protection onto origin/master. Bundles:
- Extended kademlia discovery integration for mix node pool
(waku/discovery/waku_kademlia.nim, tools/confutils/cli_args.nim)
- RLN spam protection plugin (vacp2p/mix-rln-spam-protection) wired in:
WakuMix gains mixRlnSpamProtection + publishMessage callback,
per-hop proof generation / verification, membership coordination
via /mix/rln/metadata/v1 content topic
- chat2mix sim app: filter-subscribes to spam-protection coordination
topic, defers publishing until mix node pool is populated
- Makefile: automated librln_mix_v2.0.0.a build via
scripts/build_rln_mix.sh and mix-librln target
- simulations/mixnet: 5-node mixnet sim infrastructure
(config1-4.toml, run_*.sh, build_setup.sh, setup_credentials.nim,
README, roundtrip_check.sh automated round-trip verification)
Rebase fixes:
- Plugin previously vendored as submodule; now a nimble requires entry
pinned to logos-co/mix-rln-spam-protection-plugin@037f8e10
- waku.nimble: zlib < 0.2 pin to keep nimble lock resolution stable
(upstream zlib HEAD bumped to 0.2.0)
- apps/chat2mix/config_chat2mix.nim: replace
`defaultValue: parseIpAddress("...")` with IpAddress literal,
works around confutils macro generating
`defaultValueHelpName(): string {.raises: [].}` that violates the
raises pragma when stringifying a parseIpAddress call
- config.nims: nimble setup --noNimblePath reordering
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:44:28 +05:30
|
|
|
```bash
|
|
|
|
|
./run_mix_node.sh
|
|
|
|
|
```
|
2025-09-11 20:40:01 +05:30
|
|
|
|
feat(mix): integrate mix protocol with extended kademlia + RLN spam protection
Rebased poc/mix-spam-protection onto origin/master. Bundles:
- Extended kademlia discovery integration for mix node pool
(waku/discovery/waku_kademlia.nim, tools/confutils/cli_args.nim)
- RLN spam protection plugin (vacp2p/mix-rln-spam-protection) wired in:
WakuMix gains mixRlnSpamProtection + publishMessage callback,
per-hop proof generation / verification, membership coordination
via /mix/rln/metadata/v1 content topic
- chat2mix sim app: filter-subscribes to spam-protection coordination
topic, defers publishing until mix node pool is populated
- Makefile: automated librln_mix_v2.0.0.a build via
scripts/build_rln_mix.sh and mix-librln target
- simulations/mixnet: 5-node mixnet sim infrastructure
(config1-4.toml, run_*.sh, build_setup.sh, setup_credentials.nim,
README, roundtrip_check.sh automated round-trip verification)
Rebase fixes:
- Plugin previously vendored as submodule; now a nimble requires entry
pinned to logos-co/mix-rln-spam-protection-plugin@037f8e10
- waku.nimble: zlib < 0.2 pin to keep nimble lock resolution stable
(upstream zlib HEAD bumped to 0.2.0)
- apps/chat2mix/config_chat2mix.nim: replace
`defaultValue: parseIpAddress("...")` with IpAddress literal,
works around confutils macro generating
`defaultValueHelpName(): string {.raises: [].}` that violates the
raises pragma when stringifying a parseIpAddress call
- config.nims: nimble setup --noNimblePath reordering
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:44:28 +05:30
|
|
|
Look for the following log lines to ensure the node started successfully:
|
2025-09-11 20:40:01 +05:30
|
|
|
|
feat(mix): integrate mix protocol with extended kademlia + RLN spam protection
Rebased poc/mix-spam-protection onto origin/master. Bundles:
- Extended kademlia discovery integration for mix node pool
(waku/discovery/waku_kademlia.nim, tools/confutils/cli_args.nim)
- RLN spam protection plugin (vacp2p/mix-rln-spam-protection) wired in:
WakuMix gains mixRlnSpamProtection + publishMessage callback,
per-hop proof generation / verification, membership coordination
via /mix/rln/metadata/v1 content topic
- chat2mix sim app: filter-subscribes to spam-protection coordination
topic, defers publishing until mix node pool is populated
- Makefile: automated librln_mix_v2.0.0.a build via
scripts/build_rln_mix.sh and mix-librln target
- simulations/mixnet: 5-node mixnet sim infrastructure
(config1-4.toml, run_*.sh, build_setup.sh, setup_credentials.nim,
README, roundtrip_check.sh automated round-trip verification)
Rebase fixes:
- Plugin previously vendored as submodule; now a nimble requires entry
pinned to logos-co/mix-rln-spam-protection-plugin@037f8e10
- waku.nimble: zlib < 0.2 pin to keep nimble lock resolution stable
(upstream zlib HEAD bumped to 0.2.0)
- apps/chat2mix/config_chat2mix.nim: replace
`defaultValue: parseIpAddress("...")` with IpAddress literal,
works around confutils macro generating
`defaultValueHelpName(): string {.raises: [].}` that violates the
raises pragma when stringifying a parseIpAddress call
- config.nims: nimble setup --noNimblePath reordering
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:44:28 +05:30
|
|
|
```log
|
|
|
|
|
INF mounting mix protocol topics="waku node"
|
|
|
|
|
INF Node setup complete topics="wakunode main"
|
|
|
|
|
```
|
2025-09-11 20:40:01 +05:30
|
|
|
|
feat(mix): integrate mix protocol with extended kademlia + RLN spam protection
Rebased poc/mix-spam-protection onto origin/master. Bundles:
- Extended kademlia discovery integration for mix node pool
(waku/discovery/waku_kademlia.nim, tools/confutils/cli_args.nim)
- RLN spam protection plugin (vacp2p/mix-rln-spam-protection) wired in:
WakuMix gains mixRlnSpamProtection + publishMessage callback,
per-hop proof generation / verification, membership coordination
via /mix/rln/metadata/v1 content topic
- chat2mix sim app: filter-subscribes to spam-protection coordination
topic, defers publishing until mix node pool is populated
- Makefile: automated librln_mix_v2.0.0.a build via
scripts/build_rln_mix.sh and mix-librln target
- simulations/mixnet: 5-node mixnet sim infrastructure
(config1-4.toml, run_*.sh, build_setup.sh, setup_credentials.nim,
README, roundtrip_check.sh automated round-trip verification)
Rebase fixes:
- Plugin previously vendored as submodule; now a nimble requires entry
pinned to logos-co/mix-rln-spam-protection-plugin@037f8e10
- waku.nimble: zlib < 0.2 pin to keep nimble lock resolution stable
(upstream zlib HEAD bumped to 0.2.0)
- apps/chat2mix/config_chat2mix.nim: replace
`defaultValue: parseIpAddress("...")` with IpAddress literal,
works around confutils macro generating
`defaultValueHelpName(): string {.raises: [].}` that violates the
raises pragma when stringifying a parseIpAddress call
- config.nims: nimble setup --noNimblePath reordering
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:44:28 +05:30
|
|
|
Verify RLN spam protection initialized correctly by checking for these logs:
|
2025-09-11 20:40:01 +05:30
|
|
|
|
|
|
|
|
```log
|
feat(mix): integrate mix protocol with extended kademlia + RLN spam protection
Rebased poc/mix-spam-protection onto origin/master. Bundles:
- Extended kademlia discovery integration for mix node pool
(waku/discovery/waku_kademlia.nim, tools/confutils/cli_args.nim)
- RLN spam protection plugin (vacp2p/mix-rln-spam-protection) wired in:
WakuMix gains mixRlnSpamProtection + publishMessage callback,
per-hop proof generation / verification, membership coordination
via /mix/rln/metadata/v1 content topic
- chat2mix sim app: filter-subscribes to spam-protection coordination
topic, defers publishing until mix node pool is populated
- Makefile: automated librln_mix_v2.0.0.a build via
scripts/build_rln_mix.sh and mix-librln target
- simulations/mixnet: 5-node mixnet sim infrastructure
(config1-4.toml, run_*.sh, build_setup.sh, setup_credentials.nim,
README, roundtrip_check.sh automated round-trip verification)
Rebase fixes:
- Plugin previously vendored as submodule; now a nimble requires entry
pinned to logos-co/mix-rln-spam-protection-plugin@037f8e10
- waku.nimble: zlib < 0.2 pin to keep nimble lock resolution stable
(upstream zlib HEAD bumped to 0.2.0)
- apps/chat2mix/config_chat2mix.nim: replace
`defaultValue: parseIpAddress("...")` with IpAddress literal,
works around confutils macro generating
`defaultValueHelpName(): string {.raises: [].}` that violates the
raises pragma when stringifying a parseIpAddress call
- config.nims: nimble setup --noNimblePath reordering
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:44:28 +05:30
|
|
|
INF Initializing MixRlnSpamProtection
|
|
|
|
|
INF MixRlnSpamProtection initialized, waiting for sync
|
|
|
|
|
DBG Tree loaded from file
|
|
|
|
|
INF MixRlnSpamProtection started
|
|
|
|
|
```
|
2025-09-11 20:40:01 +05:30
|
|
|
|
feat(mix): integrate mix protocol with extended kademlia + RLN spam protection
Rebased poc/mix-spam-protection onto origin/master. Bundles:
- Extended kademlia discovery integration for mix node pool
(waku/discovery/waku_kademlia.nim, tools/confutils/cli_args.nim)
- RLN spam protection plugin (vacp2p/mix-rln-spam-protection) wired in:
WakuMix gains mixRlnSpamProtection + publishMessage callback,
per-hop proof generation / verification, membership coordination
via /mix/rln/metadata/v1 content topic
- chat2mix sim app: filter-subscribes to spam-protection coordination
topic, defers publishing until mix node pool is populated
- Makefile: automated librln_mix_v2.0.0.a build via
scripts/build_rln_mix.sh and mix-librln target
- simulations/mixnet: 5-node mixnet sim infrastructure
(config1-4.toml, run_*.sh, build_setup.sh, setup_credentials.nim,
README, roundtrip_check.sh automated round-trip verification)
Rebase fixes:
- Plugin previously vendored as submodule; now a nimble requires entry
pinned to logos-co/mix-rln-spam-protection-plugin@037f8e10
- waku.nimble: zlib < 0.2 pin to keep nimble lock resolution stable
(upstream zlib HEAD bumped to 0.2.0)
- apps/chat2mix/config_chat2mix.nim: replace
`defaultValue: parseIpAddress("...")` with IpAddress literal,
works around confutils macro generating
`defaultValueHelpName(): string {.raises: [].}` that violates the
raises pragma when stringifying a parseIpAddress call
- config.nims: nimble setup --noNimblePath reordering
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:44:28 +05:30
|
|
|
Then start the remaining mix nodes in separate terminals:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
./run_mix_node1.sh
|
|
|
|
|
./run_mix_node2.sh
|
|
|
|
|
./run_mix_node3.sh
|
|
|
|
|
./run_mix_node4.sh
|
2025-09-11 20:40:01 +05:30
|
|
|
```
|
|
|
|
|
|
feat(mix): integrate mix protocol with extended kademlia + RLN spam protection
Rebased poc/mix-spam-protection onto origin/master. Bundles:
- Extended kademlia discovery integration for mix node pool
(waku/discovery/waku_kademlia.nim, tools/confutils/cli_args.nim)
- RLN spam protection plugin (vacp2p/mix-rln-spam-protection) wired in:
WakuMix gains mixRlnSpamProtection + publishMessage callback,
per-hop proof generation / verification, membership coordination
via /mix/rln/metadata/v1 content topic
- chat2mix sim app: filter-subscribes to spam-protection coordination
topic, defers publishing until mix node pool is populated
- Makefile: automated librln_mix_v2.0.0.a build via
scripts/build_rln_mix.sh and mix-librln target
- simulations/mixnet: 5-node mixnet sim infrastructure
(config1-4.toml, run_*.sh, build_setup.sh, setup_credentials.nim,
README, roundtrip_check.sh automated round-trip verification)
Rebase fixes:
- Plugin previously vendored as submodule; now a nimble requires entry
pinned to logos-co/mix-rln-spam-protection-plugin@037f8e10
- waku.nimble: zlib < 0.2 pin to keep nimble lock resolution stable
(upstream zlib HEAD bumped to 0.2.0)
- apps/chat2mix/config_chat2mix.nim: replace
`defaultValue: parseIpAddress("...")` with IpAddress literal,
works around confutils macro generating
`defaultValueHelpName(): string {.raises: [].}` that violates the
raises pragma when stringifying a parseIpAddress call
- config.nims: nimble setup --noNimblePath reordering
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:44:28 +05:30
|
|
|
### Step 2: Start the Chat Applications
|
|
|
|
|
|
|
|
|
|
Once all 5 mix nodes are running, start the first chat app:
|
2025-09-11 20:40:01 +05:30
|
|
|
|
feat(mix): integrate mix protocol with extended kademlia + RLN spam protection
Rebased poc/mix-spam-protection onto origin/master. Bundles:
- Extended kademlia discovery integration for mix node pool
(waku/discovery/waku_kademlia.nim, tools/confutils/cli_args.nim)
- RLN spam protection plugin (vacp2p/mix-rln-spam-protection) wired in:
WakuMix gains mixRlnSpamProtection + publishMessage callback,
per-hop proof generation / verification, membership coordination
via /mix/rln/metadata/v1 content topic
- chat2mix sim app: filter-subscribes to spam-protection coordination
topic, defers publishing until mix node pool is populated
- Makefile: automated librln_mix_v2.0.0.a build via
scripts/build_rln_mix.sh and mix-librln target
- simulations/mixnet: 5-node mixnet sim infrastructure
(config1-4.toml, run_*.sh, build_setup.sh, setup_credentials.nim,
README, roundtrip_check.sh automated round-trip verification)
Rebase fixes:
- Plugin previously vendored as submodule; now a nimble requires entry
pinned to logos-co/mix-rln-spam-protection-plugin@037f8e10
- waku.nimble: zlib < 0.2 pin to keep nimble lock resolution stable
(upstream zlib HEAD bumped to 0.2.0)
- apps/chat2mix/config_chat2mix.nim: replace
`defaultValue: parseIpAddress("...")` with IpAddress literal,
works around confutils macro generating
`defaultValueHelpName(): string {.raises: [].}` that violates the
raises pragma when stringifying a parseIpAddress call
- config.nims: nimble setup --noNimblePath reordering
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:44:28 +05:30
|
|
|
```bash
|
|
|
|
|
./run_chat_mix.sh
|
|
|
|
|
```
|
2025-09-11 20:40:01 +05:30
|
|
|
|
feat(mix): integrate mix protocol with extended kademlia + RLN spam protection
Rebased poc/mix-spam-protection onto origin/master. Bundles:
- Extended kademlia discovery integration for mix node pool
(waku/discovery/waku_kademlia.nim, tools/confutils/cli_args.nim)
- RLN spam protection plugin (vacp2p/mix-rln-spam-protection) wired in:
WakuMix gains mixRlnSpamProtection + publishMessage callback,
per-hop proof generation / verification, membership coordination
via /mix/rln/metadata/v1 content topic
- chat2mix sim app: filter-subscribes to spam-protection coordination
topic, defers publishing until mix node pool is populated
- Makefile: automated librln_mix_v2.0.0.a build via
scripts/build_rln_mix.sh and mix-librln target
- simulations/mixnet: 5-node mixnet sim infrastructure
(config1-4.toml, run_*.sh, build_setup.sh, setup_credentials.nim,
README, roundtrip_check.sh automated round-trip verification)
Rebase fixes:
- Plugin previously vendored as submodule; now a nimble requires entry
pinned to logos-co/mix-rln-spam-protection-plugin@037f8e10
- waku.nimble: zlib < 0.2 pin to keep nimble lock resolution stable
(upstream zlib HEAD bumped to 0.2.0)
- apps/chat2mix/config_chat2mix.nim: replace
`defaultValue: parseIpAddress("...")` with IpAddress literal,
works around confutils macro generating
`defaultValueHelpName(): string {.raises: [].}` that violates the
raises pragma when stringifying a parseIpAddress call
- config.nims: nimble setup --noNimblePath reordering
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:44:28 +05:30
|
|
|
Enter a nickname when prompted:
|
2025-09-11 20:40:01 +05:30
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
pubsub topic is: /waku/2/rs/2/0
|
|
|
|
|
Choose a nickname >>
|
|
|
|
|
```
|
|
|
|
|
|
feat(mix): integrate mix protocol with extended kademlia + RLN spam protection
Rebased poc/mix-spam-protection onto origin/master. Bundles:
- Extended kademlia discovery integration for mix node pool
(waku/discovery/waku_kademlia.nim, tools/confutils/cli_args.nim)
- RLN spam protection plugin (vacp2p/mix-rln-spam-protection) wired in:
WakuMix gains mixRlnSpamProtection + publishMessage callback,
per-hop proof generation / verification, membership coordination
via /mix/rln/metadata/v1 content topic
- chat2mix sim app: filter-subscribes to spam-protection coordination
topic, defers publishing until mix node pool is populated
- Makefile: automated librln_mix_v2.0.0.a build via
scripts/build_rln_mix.sh and mix-librln target
- simulations/mixnet: 5-node mixnet sim infrastructure
(config1-4.toml, run_*.sh, build_setup.sh, setup_credentials.nim,
README, roundtrip_check.sh automated round-trip verification)
Rebase fixes:
- Plugin previously vendored as submodule; now a nimble requires entry
pinned to logos-co/mix-rln-spam-protection-plugin@037f8e10
- waku.nimble: zlib < 0.2 pin to keep nimble lock resolution stable
(upstream zlib HEAD bumped to 0.2.0)
- apps/chat2mix/config_chat2mix.nim: replace
`defaultValue: parseIpAddress("...")` with IpAddress literal,
works around confutils macro generating
`defaultValueHelpName(): string {.raises: [].}` that violates the
raises pragma when stringifying a parseIpAddress call
- config.nims: nimble setup --noNimblePath reordering
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:44:28 +05:30
|
|
|
Once you see the following log, the app is ready to publish messages over the mixnet:
|
2025-09-11 20:40:01 +05:30
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
Welcome, test!
|
|
|
|
|
Listening on
|
feat(mix): integrate mix protocol with extended kademlia + RLN spam protection
Rebased poc/mix-spam-protection onto origin/master. Bundles:
- Extended kademlia discovery integration for mix node pool
(waku/discovery/waku_kademlia.nim, tools/confutils/cli_args.nim)
- RLN spam protection plugin (vacp2p/mix-rln-spam-protection) wired in:
WakuMix gains mixRlnSpamProtection + publishMessage callback,
per-hop proof generation / verification, membership coordination
via /mix/rln/metadata/v1 content topic
- chat2mix sim app: filter-subscribes to spam-protection coordination
topic, defers publishing until mix node pool is populated
- Makefile: automated librln_mix_v2.0.0.a build via
scripts/build_rln_mix.sh and mix-librln target
- simulations/mixnet: 5-node mixnet sim infrastructure
(config1-4.toml, run_*.sh, build_setup.sh, setup_credentials.nim,
README, roundtrip_check.sh automated round-trip verification)
Rebase fixes:
- Plugin previously vendored as submodule; now a nimble requires entry
pinned to logos-co/mix-rln-spam-protection-plugin@037f8e10
- waku.nimble: zlib < 0.2 pin to keep nimble lock resolution stable
(upstream zlib HEAD bumped to 0.2.0)
- apps/chat2mix/config_chat2mix.nim: replace
`defaultValue: parseIpAddress("...")` with IpAddress literal,
works around confutils macro generating
`defaultValueHelpName(): string {.raises: [].}` that violates the
raises pragma when stringifying a parseIpAddress call
- config.nims: nimble setup --noNimblePath reordering
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:44:28 +05:30
|
|
|
/ip4/<local-network-ip>/tcp/60000/p2p/16Uiu2HAkxDGqix1ifY3wF1ZzojQWRAQEdKP75wn1LJMfoHhfHz57
|
2025-09-11 20:40:01 +05:30
|
|
|
ready to publish messages now
|
|
|
|
|
```
|
|
|
|
|
|
feat(mix): integrate mix protocol with extended kademlia + RLN spam protection
Rebased poc/mix-spam-protection onto origin/master. Bundles:
- Extended kademlia discovery integration for mix node pool
(waku/discovery/waku_kademlia.nim, tools/confutils/cli_args.nim)
- RLN spam protection plugin (vacp2p/mix-rln-spam-protection) wired in:
WakuMix gains mixRlnSpamProtection + publishMessage callback,
per-hop proof generation / verification, membership coordination
via /mix/rln/metadata/v1 content topic
- chat2mix sim app: filter-subscribes to spam-protection coordination
topic, defers publishing until mix node pool is populated
- Makefile: automated librln_mix_v2.0.0.a build via
scripts/build_rln_mix.sh and mix-librln target
- simulations/mixnet: 5-node mixnet sim infrastructure
(config1-4.toml, run_*.sh, build_setup.sh, setup_credentials.nim,
README, roundtrip_check.sh automated round-trip verification)
Rebase fixes:
- Plugin previously vendored as submodule; now a nimble requires entry
pinned to logos-co/mix-rln-spam-protection-plugin@037f8e10
- waku.nimble: zlib < 0.2 pin to keep nimble lock resolution stable
(upstream zlib HEAD bumped to 0.2.0)
- apps/chat2mix/config_chat2mix.nim: replace
`defaultValue: parseIpAddress("...")` with IpAddress literal,
works around confutils macro generating
`defaultValueHelpName(): string {.raises: [].}` that violates the
raises pragma when stringifying a parseIpAddress call
- config.nims: nimble setup --noNimblePath reordering
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:44:28 +05:30
|
|
|
Start the second chat app in another terminal:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
./run_chat_mix1.sh
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Step 3: Test Messaging
|
|
|
|
|
|
|
|
|
|
Once both chat apps are running, send a message from one and verify it is received by the other.
|
2025-09-11 20:40:01 +05:30
|
|
|
|
feat(mix): integrate mix protocol with extended kademlia + RLN spam protection
Rebased poc/mix-spam-protection onto origin/master. Bundles:
- Extended kademlia discovery integration for mix node pool
(waku/discovery/waku_kademlia.nim, tools/confutils/cli_args.nim)
- RLN spam protection plugin (vacp2p/mix-rln-spam-protection) wired in:
WakuMix gains mixRlnSpamProtection + publishMessage callback,
per-hop proof generation / verification, membership coordination
via /mix/rln/metadata/v1 content topic
- chat2mix sim app: filter-subscribes to spam-protection coordination
topic, defers publishing until mix node pool is populated
- Makefile: automated librln_mix_v2.0.0.a build via
scripts/build_rln_mix.sh and mix-librln target
- simulations/mixnet: 5-node mixnet sim infrastructure
(config1-4.toml, run_*.sh, build_setup.sh, setup_credentials.nim,
README, roundtrip_check.sh automated round-trip verification)
Rebase fixes:
- Plugin previously vendored as submodule; now a nimble requires entry
pinned to logos-co/mix-rln-spam-protection-plugin@037f8e10
- waku.nimble: zlib < 0.2 pin to keep nimble lock resolution stable
(upstream zlib HEAD bumped to 0.2.0)
- apps/chat2mix/config_chat2mix.nim: replace
`defaultValue: parseIpAddress("...")` with IpAddress literal,
works around confutils macro generating
`defaultValueHelpName(): string {.raises: [].}` that violates the
raises pragma when stringifying a parseIpAddress call
- config.nims: nimble setup --noNimblePath reordering
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:44:28 +05:30
|
|
|
To exit the chat apps, enter `/exit`:
|
2025-09-11 20:40:01 +05:30
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
>> /exit
|
|
|
|
|
quitting...
|
|
|
|
|
```
|