github.com/koko1123/flow-go-1@v0.29.6/model/flow/quorum_certificate.go (about) 1 package flow 2 3 // QuorumCertificate represents a quorum certificate for a block proposal as defined in the HotStuff algorithm. 4 // A quorum certificate is a collection of votes for a particular block proposal. Valid quorum certificates contain 5 // signatures from a super-majority of consensus committee members. 6 type QuorumCertificate struct { 7 View uint64 8 BlockID Identifier 9 10 // SignerIndices encodes the HotStuff participants whose vote is included in this QC. 11 // For `n` authorized consensus nodes, `SignerIndices` is an n-bit vector (padded with tailing 12 // zeros to reach full bytes). We list the nodes in their canonical order, as defined by the protocol. 13 SignerIndices []byte 14 15 // For consensus cluster, the SigData is a serialization of the following fields 16 // - SigType []byte, bit-vector indicating the type of sig produced by the signer. 17 // - AggregatedStakingSig []byte 18 // - AggregatedRandomBeaconSig []byte 19 // - ReconstructedRandomBeaconSig crypto.Signature 20 // For collector cluster HotStuff, SigData is simply the aggregated staking signatures 21 // from all signers. 22 SigData []byte 23 } 24 25 // QuorumCertificateWithSignerIDs is a QuorumCertificate, where the signing nodes are 26 // identified via their `flow.Identifier`s instead of indices. Working with IDs as opposed to 27 // indices is less efficient, but simpler, because we don't require a canonical node order. 28 // It is used for bootstrapping new Epochs, because the FlowEpoch smart contract has no 29 // notion of node ordering. 30 type QuorumCertificateWithSignerIDs struct { 31 View uint64 32 BlockID Identifier 33 SignerIDs []Identifier 34 SigData []byte 35 }