Expand description
A lightweight consensus library for making binary decisions in P2P networks.
This library implements the Hashgraph-like Consensus Protocol, which lets groups of peers vote on proposals and reach agreement even when some peers are unreliable or malicious. It’s designed to be fast (O(log n) rounds), secure (Byzantine fault tolerant), and easy to embed in your application.
§How it works
- Someone creates a
types::CreateProposalRequestwithin ascope. - Peers cast votes (yes/no), each cryptographically signed and linked into a hashgraph.
- Once enough votes are collected the session transitions to
session::ConsensusState::ConsensusReachedand atypes::ConsensusEventis emitted.
§Getting started
The main entry point is service::DefaultConsensusService (a type alias for
service::ConsensusService with in-memory storage and broadcast events).
use hashgraph_like_consensus::{
api::ConsensusServiceAPI,
scope::ScopeID,
service::DefaultConsensusService,
types::CreateProposalRequest,
};
use alloy::signers::local::PrivateKeySigner;
let service = DefaultConsensusService::default();
let scope = ScopeID::from("my-scope");
let signer = PrivateKeySigner::random();
let proposal = service
.create_proposal(
&scope,
CreateProposalRequest::new(
"Upgrade contract".into(),
b"Switch to v2".to_vec(),
signer.address().as_slice().to_vec(),
3, // expected voters
60, // expiration (seconds from now)
true, // tie-breaker: YES wins on equality
)?,
)
.await?;
let vote = service
.cast_vote(&scope, proposal.proposal_id, true, signer)
.await?;§Modules
| Module | Purpose |
|---|---|
service | Main ConsensusService and DefaultConsensusService |
api | ConsensusServiceAPI trait defining the public contract |
session | ConsensusSession, ConsensusConfig, and ConsensusState |
scope | ConsensusScope trait and ScopeID alias |
scope_config | Per-scope defaults (ScopeConfig, NetworkType) |
types | Request/event types (CreateProposalRequest, ConsensusEvent) |
storage | ConsensusStorage trait and InMemoryConsensusStorage |
events | ConsensusEventBus trait and BroadcastEventBus |
error | ConsensusError enum |
utils | Low-level validation and hashing helpers |
Modules§
- api
- Public API trait for the consensus service.
- error
- Error types for the consensus library.
- events
- protos
- scope
- scope_
config - Scope-level configuration for consensus defaults.
- service
- service_
consensus - Implementation of
ConsensusServiceAPIforConsensusService. - service_
stats - Scope-level statistics for monitoring consensus activity.
- session
- Consensus session and configuration types.
- storage
- Storage trait and default in-memory implementation.
- types
- Core request and event types.
- utils
- Low-level helpers for hashing, signing, validation, and consensus calculation.