Skip to content

docs(anoncomms): add AnonComms roadmap for Testnet v0.3#471

Draft
jm-clius wants to merge 15 commits into
v4from
anoncomms/roadmap-v03
Draft

docs(anoncomms): add AnonComms roadmap for Testnet v0.3#471
jm-clius wants to merge 15 commits into
v4from
anoncomms/roadmap-v03

Conversation

@jm-clius

@jm-clius jm-clius commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Add the Roadmap (FURPS and Deliverables) for AnonComms in Testnet v0.3 scope

@jm-clius jm-clius changed the title docs(anoncomms): add discovery FURPS and deliverables for v0.3 docs(anoncomms): add AnonComms roadmap for Testnet v0.3 Jun 11, 2026
Comment thread content/anoncomms/furps/discovery.md
Comment thread content/anoncomms/roadmap/testnet_v0.2/discovery_v0.2.md

**FURPS**:

- P1. The service discovery module provides comparable performance to discv5 when all nodes support the same service

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When all nodes support the same service is exactly the scenario where service discovery has inherent overhead that discv5 does not — admission control, waiting times, ticket rounds, and K_register × m registration attempts per advertiser. The protocol is designed for the sparse case, not the popular one.

We can reframe as "service discovery performs within an acceptable overhead bound compared to discv5 for popular services"

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! I get your point re overhead when all nodes are running the same service. However, I'm not sure how that affects the subjective behaviour of "how long does it take me to discover up to n peers supporting this service?". I.e. even though nodes will have some overhead with registering, congestion control, etc. we still want to see the discoverer be able to discover new peers in a way that's roughly "comparable" to discv5. Admittedly, "comparable" is a very vague term here, meant to give us the leeway to explain it as either a little faster (because less random) or with some overhead, depending on what we observe.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, registration/ticketing overhead on the advertiser side doesn't necessarily hurt the discoverer's discovery latency — that's really the metric we care about here. Maybe instead of leaving "comparable" undefined, we scope it to that specifically:

"The service discovery module's time for a discoverer to find N peers is comparable to discv5's when all nodes support the same service"


**FURPS**:

- P3. Service discovery integrated in Logos Delivery provides comparable performance to discv5 when all nodes support the same service

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similarly here also we can reframe to clarify little on what comparable means as for all nodes participating in same service, ie, a popular service case, service discovery has extra overhead.

@tinniaru3005

Copy link
Copy Markdown

Thanks for working on this, @jm-clius . I left a few comments that I think could help clarify some of the deliverables.

3. Logos modules can use the service as client to obtain adequate registered RLN identities without interacting with the contract
4. The RLN membership allocation service can run as a standalone module or mounted on existing modules
5. Logos modules can read the on-chain Merkle root and proofs
6. The basic RLN membership management module can register RLN memberships on-chain on behalf of a Logos module

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

on behalf of a Logos module

Should we specify the which Logos module?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, in this case the functionality should allow "any" Logos module to call this API to receive a membership. We do specify later on that we will do one such integration into Logos Delivery.


**FURPS**:

- F9. The full RLN module encapsulates Zerokit proof generation and verification, expanding the basic RLN membership management module

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am a big fan of the separation of concerns, but we also need to consider the performance overhead of generating proofs using logos core module cross-calls v.s. generating proofs within the same process (as is currently done in logos-delivery)

- [ ] Dogfood: link to dogfooding session/artefact
- [ ] Docs: links to README.md or other docs

### [Migrate Logos Delivery to LEZ-based RLN using the RLN membership management module](TBD: anoncomms-pm issue)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

**FURPS**:

- U2. Logos Delivery and Chat can use the service to obtain RLN memberships
- U5. Logos Delivery uses the basic RLN membership management module and LEZ-based RLN for all membership acquisition and management

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does this include storing the membership? i.e. instead of loading the identity secret from a local keystore to memory, logos-delivery would call the management module to load this value

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. The persistence is defined as part of the module deliverable. This deliverable just directs Delivery to use the module (including its persistence/keystore)

**FURPS**:

- F6. The basic RLN membership management module can register RLN memberships on-chain on behalf of a Logos module
- F7. The basic RLN membership management module stores and manages RLN keys for a Logos module

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Something to consider is whether or not the RLN key should be stored in the accounts module

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point. I think this we can explore when we get to this deliverable.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(But it will be awesome if it could use it!)


**FURPS**:

- U10. De-MLS integrates into libchat as a standard module using caller-provided services

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@seugu when we say "standard module", do we mean a Logos core module?

@seugu seugu Jul 10, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch actually. it is vague here. So it must be libchat module, I removed the "module" term since it may confuse everyone. Here.

De-MLS is integrated into libchat using caller-provided services

Comment on lines +77 to +78
- P1. Price updates are completed within a reasonable time bound
- P2. Cross-zone transaction latency is benchmarked

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@seugu it would be useful to include a U-item here to define exactly what kind of tangible deliverable we are expecting here (e.g. U5. Developer documentation for the Oracle Zone is published in a document & U6. Benchmark results for the Oracle Zone is published in a research blog)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes indeed. Added here by adding U5 and U6, as well as oracle_v.0.3.md

Comment thread content/anoncomms/furps/discovery.md
Comment thread content/anoncomms/roadmap/testnet_v0.2/discovery_v0.2.md

**FURPS**:

- P1. The service discovery module provides comparable performance to discv5 when all nodes support the same service

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! I get your point re overhead when all nodes are running the same service. However, I'm not sure how that affects the subjective behaviour of "how long does it take me to discover up to n peers supporting this service?". I.e. even though nodes will have some overhead with registering, congestion control, etc. we still want to see the discoverer be able to discover new peers in a way that's roughly "comparable" to discv5. Admittedly, "comparable" is a very vague term here, meant to give us the leeway to explain it as either a little faster (because less random) or with some overhead, depending on what we observe.

3. Logos modules can use the service as client to obtain adequate registered RLN identities without interacting with the contract
4. The RLN membership allocation service can run as a standalone module or mounted on existing modules
5. Logos modules can read the on-chain Merkle root and proofs
6. The basic RLN membership management module can register RLN memberships on-chain on behalf of a Logos module

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, in this case the functionality should allow "any" Logos module to call this API to receive a membership. We do specify later on that we will do one such integration into Logos Delivery.

**FURPS**:

- U2. Logos Delivery and Chat can use the service to obtain RLN memberships
- U5. Logos Delivery uses the basic RLN membership management module and LEZ-based RLN for all membership acquisition and management

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. The persistence is defined as part of the module deliverable. This deliverable just directs Delivery to use the module (including its persistence/keystore)

**FURPS**:

- F6. The basic RLN membership management module can register RLN memberships on-chain on behalf of a Logos module
- F7. The basic RLN membership management module stores and manages RLN keys for a Logos module

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point. I think this we can explore when we get to this deliverable.

**FURPS**:

- F6. The basic RLN membership management module can register RLN memberships on-chain on behalf of a Logos module
- F7. The basic RLN membership management module stores and manages RLN keys for a Logos module

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(But it will be awesome if it could use it!)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suggested these changes to the zerokit FURPS to align with the current and upcoming roadmap.

# Zerokit FURPS

## Functionality

1. Zerokit supports the automatic generation of round parameters for Poseidon.
2. Zerokit supports Poseidon2 as an alternative hash function alongside Poseidon.

## Usability

1. The Zerokit public API is defined by a specification.
2. The Zerokit public API provides an easy-to-use interface for Rust developers.
3. The Zerokit FFI provides an easy-to-use interface for developers using C and Nim.
4. Zerokit provides a WebAssembly (WASM) interface for both Node.js and browser environments.
5. Zerokit supports the automatic generation of round parameters for both Poseidon and Poseidon2.
7. Hash function selection (Poseidon vs. Poseidon2) is exposed through a runtime-configurable option.
6. The implementation of the new Poseidon2 circuit has been completed and documented in the circom-rln repo.
8. The Zerokit architecture is changed from compile-time feature flags to runtime configuration based on enums.

## Reliability

1. Poseidon2 proofs verify correctly, and Poseidon behavior remains unchanged when Poseidon2 is enabled.

## Performance

1. Poseidon2 proof generation is benchmarked against Poseidon and demonstrates measurable performance improvements.

## Supportability

1. Static analysis of the circuits for both Poseidon and Poseidon2 is performed and documented.
1. Outstanding issues are resolved, and dependencies are updated to keep the codebase maintainable.
3. New Poseidon2-related functionality and APIs are fully exposed through the FFI and WASM interfaces.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@seugu mind taking a look :)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @vinhtc27, really appreciate your suggestion.
I noticed your changes drop "F1. The Zerokit module supports big-endian operations" (and the big-endian FFI item in the old U3)
My guess is that these are already implemented in Zerokit, so they no longer need to be tracked here. Is that right? If you don't mind, could you add a line-by-line comment explaining each change (removing and changing)? That would make it much easier for both of us to go through.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@seugu
Yes, big-endian operations are now fully supported in Zerokit across the Rust public API, FFI, and WASM.
Partial proof support and the multi-message ID are now runtime configurable, with full support in Rust, FFI, and WASM.
I think we can remove both of these from the Usability section since they are already completed.

The remaining upcoming features are:
5. Zerokit supports the automatic generation of round parameters for both Poseidon and Poseidon2.
6. The implementation of the new Poseidon2 circuit has been completed and documented in the circom-rln repository.
7. Hash function selection (Poseidon vs. Poseidon2) is exposed through a runtime-configurable option.

Also, the work from U1 to U4 and U8 is something we should keep in mind when developing any new features.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you,

Yes, big-endian operations are now fully supported in Zerokit across the Rust public API, FFI, and WASM.

So, we are keeping F1 (not mention in v0.3 since we already have this) and add new ones for v0.3, and deliver these new items. So you can add the new ones and modification requirements.

**Resources Required**:
- 3 developers for 12 weeks

## Deliverables

@vinhtc27 vinhtc27 Jul 9, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should add another deliverable to support the automatic generation of Poseidon round parameters.
This corresponds to FURPS: F1, U5, and R1 from the changes I proposed in zerokit.md file.

Since we will be doing substantial work related to the Poseidon hash in Testnet v0.3, this is a good opportunity to address this longstanding TODO in the zerokit codebase.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@seugu mind taking a look :)

@tinniaru3005 tinniaru3005 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM for the discovery deliverables.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants