| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Ouroboros.Consensus.Committee.Class
Description
Generic interface used by implementations of voting committees.
Synopsis
- class CryptoSupportsVoteSigning crypto ⇒ CryptoSupportsVotingCommittee crypto committee where
- data VotingCommittee crypto committee
- data VotingCommitteeInput crypto committee
- data VotingCommitteeError crypto committee
- data EligibilityWitness crypto committee
- data Vote crypto committee
- data Cert crypto committee
- mkVotingCommittee ∷ VotingCommitteeInput crypto committee → Either (VotingCommitteeError crypto committee) (VotingCommittee crypto committee)
- checkShouldVote ∷ VotingCommittee crypto committee → PoolId → PrivateKey crypto → ElectionId crypto → Either (VotingCommitteeError crypto committee) (Maybe (EligibilityWitness crypto committee))
- forgeVote ∷ EligibilityWitness crypto committee → PrivateKey crypto → ElectionId crypto → VoteCandidate crypto → Vote crypto committee
- verifyVote ∷ VotingCommittee crypto committee → Vote crypto committee → Either (VotingCommitteeError crypto committee) (EligibilityWitness crypto committee)
- eligiblePartyVoteWeight ∷ VotingCommittee crypto committee → EligibilityWitness crypto committee → VoteWeight
- forgeCert ∷ UniqueVotesWithSameTarget crypto committee → Either (VotingCommitteeError crypto committee) (Cert crypto committee)
- verifyCert ∷ VotingCommittee crypto committee → Cert crypto committee → Either (VotingCommitteeError crypto committee) (NE [EligibilityWitness crypto committee])
- data UniqueVotesWithSameTarget crypto committee
- getElectionIdFromVotes ∷ UniqueVotesWithSameTarget crypto committee → ElectionId crypto
- getVoteCandidateFromVotes ∷ UniqueVotesWithSameTarget crypto committee → VoteCandidate crypto
- getRawVotes ∷ UniqueVotesWithSameTarget crypto committee → NE [Vote crypto committee]
- data UniqueVotesWithSameTargetError vote
- = DuplicateVotes (NE [vote])
- | TargetMismatch vote (NE [vote])
- ensureUniqueVotesWithSameTarget ∷ (Eq (ElectionId crypto), Eq (VoteCandidate crypto)) ⇒ (Vote crypto committee → (ElectionId crypto, VoteCandidate crypto)) → (Vote crypto committee → Vote crypto committee → Ordering) → NE [Vote crypto committee] → Either (UniqueVotesWithSameTargetError (Vote crypto committee)) (UniqueVotesWithSameTarget crypto committee)
- unsafeUniqueVotesWithSameTarget ∷ (Eq (ElectionId crypto), Eq (VoteCandidate crypto)) ⇒ (Vote crypto committee → (ElectionId crypto, VoteCandidate crypto)) → (Vote crypto committee → Vote crypto committee → Ordering) → NE [Vote crypto committee] → UniqueVotesWithSameTarget crypto committee
- checkUniqueVotesWithSameTarget ∷ (Eq (ElectionId crypto), Eq (VoteCandidate crypto)) ⇒ Proxy crypto → (vote → (ElectionId crypto, VoteCandidate crypto)) → (vote → vote → Ordering) → NE [vote] → Either (UniqueVotesWithSameTargetError vote) ()
Voting committee interface
class CryptoSupportsVoteSigning crypto ⇒ CryptoSupportsVotingCommittee crypto committee where Source #
Interface for voting committee schemes.
This class is parametrized by the crypto primitives and the committee selection data structure. Instances define how to check whether a party should vote and how to compute the voting weight of a committee member.
Associated Types
data VotingCommittee crypto committee Source #
Structure storing the voting committee context
data VotingCommitteeInput crypto committee Source #
Input information needed to construct a voting committee
data VotingCommitteeError crypto committee Source #
Errors that can occur when operating on a voting committee
data 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.
data Vote crypto committee Source #
Abstract vote cast by a committee member in a given election
data Cert crypto committee Source #
Abstract certificate attesting the winner of a given election
Methods
mkVotingCommittee ∷ VotingCommitteeInput crypto committee → Either (VotingCommitteeError crypto committee) (VotingCommittee crypto committee) Source #
Construct a voting committee
checkShouldVote ∷ VotingCommittee crypto committee → PoolId → PrivateKey crypto → ElectionId crypto → Either (VotingCommitteeError crypto committee) (Maybe (EligibilityWitness crypto committee)) Source #
Check whether we should vote in a given election
forgeVote ∷ EligibilityWitness crypto committee → PrivateKey crypto → ElectionId crypto → VoteCandidate crypto → Vote crypto committee Source #
Forge a vote for a given election and candidate
verifyVote ∷ VotingCommittee crypto committee → Vote crypto committee → Either (VotingCommitteeError crypto committee) (EligibilityWitness crypto committee) Source #
Verify a vote cast by a committee member in a given election
eligiblePartyVoteWeight ∷ VotingCommittee crypto committee → EligibilityWitness crypto committee → VoteWeight Source #
Compute the voting weight of a eligibile party
forgeCert ∷ UniqueVotesWithSameTarget crypto committee → Either (VotingCommitteeError crypto committee) (Cert crypto committee) Source #
Forge a certificate attesting the winner of a given election
verifyCert ∷ VotingCommittee crypto committee → Cert crypto committee → Either (VotingCommitteeError crypto committee) (NE [EligibilityWitness crypto committee]) Source #
Verify a certificate attesting the winner of a given election
Instances
Votes with same target
data UniqueVotesWithSameTarget crypto committee Source #
Collection of unique votes all targeting the same election and candidate
getElectionIdFromVotes ∷ UniqueVotesWithSameTarget crypto committee → ElectionId crypto Source #
Get the election identifier targeted by a collection of votes
getVoteCandidateFromVotes ∷ UniqueVotesWithSameTarget crypto committee → VoteCandidate crypto Source #
Get the vote candidate targeted by a collection of votes
getRawVotes ∷ UniqueVotesWithSameTarget crypto committee → NE [Vote crypto committee] Source #
Get the raw votes from a collection of votes with the same target.
NOTE: this returns votes in ascending seat index order.
data UniqueVotesWithSameTargetError vote Source #
Errors when votes do not all target the same election and candidate
Constructors
| DuplicateVotes (NE [vote]) | |
| TargetMismatch vote (NE [vote]) |
ensureUniqueVotesWithSameTarget Source #
Arguments
| ∷ (Eq (ElectionId crypto), Eq (VoteCandidate crypto)) | |
| ⇒ (Vote crypto committee → (ElectionId crypto, VoteCandidate crypto)) | How to project the target from an abstract vote |
| → (Vote crypto committee → Vote crypto committee → Ordering) | How to compare votes by ID, where EQ means that two votes have the same ID and are either total duplicates, or are equivocating (i.e., they have the same ID but a different target) |
| → NE [Vote crypto committee] | Collection of votes to check |
| → Either (UniqueVotesWithSameTargetError (Vote crypto committee)) (UniqueVotesWithSameTarget crypto committee) |
Check that a non-empty list of votes all target the same election and candidate and there are no duplicates.
NOTE: duplicates are reported in preference to target mismatches.
unsafeUniqueVotesWithSameTarget Source #
Arguments
| ∷ (Eq (ElectionId crypto), Eq (VoteCandidate crypto)) | |
| ⇒ (Vote crypto committee → (ElectionId crypto, VoteCandidate crypto)) | How to project the target from an abstract vote |
| → (Vote crypto committee → Vote crypto committee → Ordering) | How to compare votes by ID, where EQ means that two votes have the same ID and are either total duplicates, or are equivocating (i.e., they have the same ID but a different target) |
| → NE [Vote crypto committee] | Collection of votes to check |
| → UniqueVotesWithSameTarget crypto committee |
Same as ensureUniqueVotesWithSameTarget but turns the invariant
checks into assertions.
WARNING: asserts become a no-op if the code is compiled with optimizations, thus this function should only be used in production when the caller can guarantee that the input votes satisfy the contract.
checkUniqueVotesWithSameTarget Source #
Arguments
| ∷ (Eq (ElectionId crypto), Eq (VoteCandidate crypto)) | |
| ⇒ Proxy crypto | |
| → (vote → (ElectionId crypto, VoteCandidate crypto)) | How to project the target an abstract vote |
| → (vote → vote → Ordering) | How to compare votes by ID, where EQ means that two votes have the same ID and are either total duplicates, or are equivocating (i.e., they have the same ID but a different target) |
| → NE [vote] | Collection of votes to check |
| → Either (UniqueVotesWithSameTargetError vote) () |
Validate that a non-empty collection of votes is well-formed for
certificate forging: all votes target the same election and candidate
(per getTarget), and no two votes are equal under cmpVotes.
Equality (EQ) is treated as evidence of a duplicate or equivocating vote
and is reported via DuplicateVotes in preference to any TargetMismatch.
NOTE: this is exposed for testing; production code should use
ensureUniqueVotesWithSameTarget or unsafeUniqueVotesWithSameTarget.