Crates.io | manul |
lib.rs | manul |
version | 0.1.0 |
source | src |
created_at | 2024-10-12 19:59:18.764044 |
updated_at | 2024-11-19 20:09:06.248736 |
description | Generic library for round-based protocols |
homepage | |
repository | https://github.com/entropyxyz/manul |
max_upload_size | |
id | 1406834 |
size | 205,180 |
The body is round
Sans-I/O API. That is, bring your own async libraries, or don't.
Generic over signer/verifier/signature types, so you can use whatever your blockchain uses.
Support parallelization where possible, to offload expensive cryptographic operations into spawned tasks (but since it's Sans-I/O, it's up to you to make use of that functionality).
Provide tools for unit and integration testing of the protocols.
Support generating malicious behavior proofs with bundled signed messages.
Support caching messages intended for the next round and then applying them when it starts (since some nodes can finalize a round before others and send out a new batch of messages).
We try to find the balance between supporting the majority of protocols and keeping the API simple. Currently we operate under the following assumptions:
A protocol consists of several rounds.
A round generates messages to send out without any additional external input, then waits for messages from other parties. When it receives enough messages, it can be finalized.
On finalization, a round can return the result, halt with an error, or continue to another round.
Each round declares a set of parties it sends messages to. Then it can optionally send a direct message to each party in the set, set a regular broadcast to all parties in the set, or send an echo-broadcast to all parties in the set (that is, a broadcast where it is ensured that all parties received the same thing). Any number of these options can be picked.