| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Ouroboros.Consensus.Committee.WFALS
Description
Weighted Fait-Accompli with Local Sortition (wFA^LS) committee selection.
This module implements a generic committee selection scheme based the on Weighted Fait-Accompli with Local Sortition (wFA^LS) algorithm from the paper:
Peter Gaži, Aggelos Kiayias, and Alexander Russell. 2023. Fait Accompli Committee Selection: Improving the Size-Security Tradeoff of Stake-Based Committees. In Proceedings of the 2023 ACM SIGSAC Conference on Computer and Communications Security (CCS '23). Association for Computing Machinery, New York, NY, USA, 845–858. https://doi.org/10.1145/3576915.3623194
PDF: https://eprint.iacr.org/2023/1273.pdf
For this, we combine the deterministic portion of the weighted Fait-Accompli
scheme (defined in Ouroboros.Consensus.Committee.WFA) with local sortition
(defined in Ouroboros.Consensus.Committee.LS) as a fallback scheme.
Synopsis
- data WFALS
- data family VotingCommittee crypto committee
- data family VotingCommitteeInput crypto committee
- data family VotingCommitteeError crypto committee
- data family EligibilityWitness crypto committee
- data family Vote crypto committee
- data family Cert crypto committee
- candidateSeats ∷ VotingCommittee crypto WFALS → Map PoolId SeatIndex
- persistentCommitteeSize ∷ VotingCommittee crypto WFALS → PersistentCommitteeSize
- nonPersistentCommitteeSize ∷ VotingCommittee crypto WFALS → NonPersistentCommitteeSize
- totalPersistentStake ∷ VotingCommittee crypto WFALS → TotalPersistentStake
- totalNonPersistentStake ∷ VotingCommittee crypto WFALS → TotalNonPersistentStake
Voting committee interface
Tag for weighted Fait-Accompli with Local Sortition (wFA^LS)
Instances
data family VotingCommittee crypto committee Source #
Structure storing the voting committee context
Instances
| data VotingCommittee crypto EveryoneVotes Source # | |
Defined in Ouroboros.Consensus.Committee.EveryoneVotes | |
| data VotingCommittee crypto WFALS Source # | |
Defined in Ouroboros.Consensus.Committee.WFALS data VotingCommittee crypto WFALS = WFALSVotingCommittee {
| |
data family VotingCommitteeInput crypto committee Source #
Input information needed to construct a voting committee
Instances
| data VotingCommitteeInput crypto EveryoneVotes Source # | |
Defined in Ouroboros.Consensus.Committee.EveryoneVotes data VotingCommitteeInput crypto EveryoneVotes = EveryoneVotesVotingCommitteeInput !(ExtWFAStakeDistr (PublicKey crypto)) | |
| data VotingCommitteeInput crypto WFALS Source # | |
Defined in Ouroboros.Consensus.Committee.WFALS data VotingCommitteeInput crypto WFALS = WFALSVotingCommitteeInput !Nonce !TargetCommitteeSize !(ExtWFAStakeDistr (PublicKey crypto)) | |
data family VotingCommitteeError crypto committee Source #
Errors that can occur when operating on a voting committee
Instances
| Show (VotingCommitteeError crypto EveryoneVotes) Source # | |
Defined in Ouroboros.Consensus.Committee.EveryoneVotes Methods showsPrec ∷ Int → VotingCommitteeError crypto EveryoneVotes → ShowS # show ∷ VotingCommitteeError crypto EveryoneVotes → String # showList ∷ [VotingCommitteeError crypto EveryoneVotes] → ShowS # | |
| Show (VotingCommitteeError crypto WFALS) Source # | |
Defined in Ouroboros.Consensus.Committee.WFALS | |
| Eq (VotingCommitteeError crypto EveryoneVotes) Source # | |
Defined in Ouroboros.Consensus.Committee.EveryoneVotes Methods (==) ∷ VotingCommitteeError crypto EveryoneVotes → VotingCommitteeError crypto EveryoneVotes → Bool # (/=) ∷ VotingCommitteeError crypto EveryoneVotes → VotingCommitteeError crypto EveryoneVotes → Bool # | |
| Eq (VotingCommitteeError crypto WFALS) Source # | |
Defined in Ouroboros.Consensus.Committee.WFALS Methods (==) ∷ VotingCommitteeError crypto WFALS → VotingCommitteeError crypto WFALS → Bool # (/=) ∷ VotingCommitteeError crypto WFALS → VotingCommitteeError crypto WFALS → Bool # | |
| data VotingCommitteeError crypto EveryoneVotes Source # | |
| data VotingCommitteeError crypto WFALS Source # | |
Defined in Ouroboros.Consensus.Committee.WFALS | |
data family EligibilityWitness crypto committee Source #
Witness attesting that a party is eligible to vote in a given election
NOTE: this is not necessarily the same as the cryptographic proof of eligibility used in concrete votes and certificates sent over the wire.
Instances
| data EligibilityWitness crypto EveryoneVotes Source # | |
Defined in Ouroboros.Consensus.Committee.EveryoneVotes data EligibilityWitness crypto EveryoneVotes = EveryoneVotesMember !SeatIndex !(NonZero LedgerStake) | |
| data EligibilityWitness crypto WFALS Source # | |
Defined in Ouroboros.Consensus.Committee.WFALS | |
data family Vote crypto committee Source #
Abstract vote cast by a committee member in a given election
Instances
| data Vote crypto EveryoneVotes Source # | |
Defined in Ouroboros.Consensus.Committee.EveryoneVotes data Vote crypto EveryoneVotes = EveryoneVotesVote !SeatIndex !(ElectionId crypto) !(VoteCandidate crypto) !(VoteSignature crypto) | |
| data Vote crypto WFALS Source # | |
Defined in Ouroboros.Consensus.Committee.WFALS data Vote crypto WFALS
| |
data family Cert crypto committee Source #
Abstract certificate attesting the winner of a given election
Instances
| data Cert crypto EveryoneVotes Source # | |
Defined in Ouroboros.Consensus.Committee.EveryoneVotes data Cert crypto EveryoneVotes = EveryoneVotesCert !(ElectionId crypto) !(VoteCandidate crypto) !(NE (Set SeatIndex)) !(AggregateVoteSignature crypto) | |
| data Cert crypto WFALS Source # | |
Defined in Ouroboros.Consensus.Committee.WFALS data Cert crypto WFALS = WFALSCert !(ElectionId crypto) !(VoteCandidate crypto) !(NE (Map SeatIndex (Maybe (VRFOutput crypto)))) !(AggregateVoteSignature crypto) | |
Metrics about the voting committee composition
candidateSeats ∷ VotingCommittee crypto WFALS → Map PoolId SeatIndex Source #