docs(anoncomms): add AnonComms roadmap for Testnet v0.3#471
Conversation
|
|
||
| **FURPS**: | ||
|
|
||
| - P1. The service discovery module provides comparable performance to discv5 when all nodes support the same service |
There was a problem hiding this comment.
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"
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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.
|
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 |
There was a problem hiding this comment.
on behalf of a Logos module
Should we specify the which Logos module?
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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) |
| **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 |
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
Something to consider is whether or not the RLN key should be stored in the accounts module
There was a problem hiding this comment.
Good point. I think this we can explore when we get to this deliverable.
There was a problem hiding this comment.
(But it will be awesome if it could use it!)
…03' into anoncomms/roadmap-v03
…ting tracks and milestones
|
|
||
| **FURPS**: | ||
|
|
||
| - U10. De-MLS integrates into libchat as a standard module using caller-provided services |
There was a problem hiding this comment.
@seugu when we say "standard module", do we mean a Logos core module?
There was a problem hiding this comment.
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
| - P1. Price updates are completed within a reasonable time bound | ||
| - P2. Cross-zone transaction latency is benchmarked |
There was a problem hiding this comment.
@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)
There was a problem hiding this comment.
Yes indeed. Added here by adding U5 and U6, as well as oracle_v.0.3.md
|
|
||
| **FURPS**: | ||
|
|
||
| - P1. The service discovery module provides comparable performance to discv5 when all nodes support the same service |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
(But it will be awesome if it could use it!)
There was a problem hiding this comment.
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.There was a problem hiding this comment.
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.
There was a problem hiding this comment.
@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.
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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.
tinniaru3005
left a comment
There was a problem hiding this comment.
LGTM for the discovery deliverables.
Add the Roadmap (FURPS and Deliverables) for AnonComms in Testnet v0.3 scope