Network Types
These types are those that are actually sent over the network to subsystems.
Universal Types
#![allow(unused)] fn main() { type RequestId = u64; type ProtocolVersion = u32; struct PeerId(...); // opaque, unique identifier of a peer. struct View { // Up to `N` (5?) chain heads. heads: Vec<Hash>, // The number of the finalized block. finalized_number: BlockNumber, } enum ObservedRole { Full, Light, } }
V1 Network Subsystem Message Types
Approval Distribution V1
#![allow(unused)] fn main() { enum ApprovalDistributionV1Message { /// Assignments for candidates in recent, unfinalized blocks. /// /// The u32 is the claimed index of the candidate this assignment corresponds to. Actually checking the assignment /// may yield a different result. Assignments(Vec<(IndirectAssignmentCert, u32)>), /// Approvals for candidates in some recent, unfinalized block. Approvals(Vec<IndirectSignedApprovalVote>), } }
Availability Distribution V1
#![allow(unused)] fn main() { enum AvailabilityDistributionV1Message { /// An erasure chunk for a given candidate hash. Chunk(CandidateHash, ErasureChunk), } }
Availability Recovery V1
#![allow(unused)] fn main() { enum AvailabilityRecoveryV1Message { /// Request a chunk for a given candidate hash and validator index. RequestChunk(RequestId, CandidateHash, ValidatorIndex), /// Respond with chunk for a given candidate hash and validator index. /// The response may be `None` if the requestee does not have the chunk. Chunk(RequestId, Option<ErasureChunk>), /// Request the full data for a given candidate hash. RequestFullData(RequestId, CandidateHash), /// Respond with data for a given candidate hash and validator index. /// The response may be `None` if the requestee does not have the data. FullData(RequestId, Option<AvailableData>), } }
Bitfield Distribution V1
#![allow(unused)] fn main() { enum BitfieldDistributionV1Message { /// A signed availability bitfield for a given relay-parent hash. Bitfield(Hash, SignedAvailabilityBitfield), } }
PoV Distribution V1
#![allow(unused)] fn main() { enum PoVDistributionV1Message { /// Notification that we are awaiting the given PoVs (by hash) against a /// specific relay-parent hash. Awaiting(Hash, Vec<Hash>), /// Notification of an awaited PoV, in a given relay-parent context. /// (`relay_parent`, `pov_hash`, `pov`) SendPoV(Hash, Hash, PoV), } }
Statement Distribution V1
#![allow(unused)] fn main() { enum StatementDistributionV1Message { /// A signed full statement under a given relay-parent. Statement(Hash, SignedFullStatement) } }
Collator Protocol V1
#![allow(unused)] fn main() { enum CollatorProtocolV1Message { /// Declare the intent to advertise collations under a collator ID and `Para`, attaching a /// signature of the `PeerId` of the node using the given collator ID key. Declare(CollatorId, ParaId, CollatorSignature), /// Advertise a collation to a validator. Can only be sent once the peer has /// declared that they are a collator with given ID. AdvertiseCollation(Hash), /// A collation sent to a validator was seconded. CollationSeconded(SignedFullStatement), } }
V1 Wire Protocols
Validation V1
These are the messages for the protocol on the validation peer-set.
#![allow(unused)] fn main() { enum ValidationProtocolV1 { ApprovalDistribution(ApprovalDistributionV1Message), AvailabilityDistribution(AvailabilityDistributionV1Message), AvailabilityRecovery(AvailabilityRecoveryV1Message), BitfieldDistribution(BitfieldDistributionV1Message), PoVDistribution(PoVDistributionV1Message), StatementDistribution(StatementDistributionV1Message), } }
Collation V1
These are the messages for the protocol on the collation peer-set
#![allow(unused)] fn main() { enum CollationProtocolV1 { CollatorProtocol(CollatorProtocolV1Message), } }
Network Bridge Event
These updates are posted from the Network Bridge Subsystem to other subsystems based on registered listeners.
#![allow(unused)] fn main() { struct NewGossipTopology { /// The session index this topology corresponds to. session: SessionIndex, /// The topology itself. topology: SessionGridTopology, /// The local validator index, if any. local_index: Option<ValidatorIndex>, } struct SessionGridTopology { /// An array mapping validator indices to their indices in the /// shuffling itself. This has the same size as the number of validators /// in the session. shuffled_indices: Vec<usize>, /// The canonical shuffling of validators for the session. canonical_shuffling: Vec<TopologyPeerInfo>, } struct TopologyPeerInfo { /// The validator's known peer IDs. peer_ids: Vec<PeerId>, /// The index of the validator in the discovery keys of the corresponding /// `SessionInfo`. This can extend _beyond_ the set of active parachain validators. validator_index: ValidatorIndex, /// The authority discovery public key of the validator in the corresponding /// `SessionInfo`. discovery_id: AuthorityDiscoveryId, } enum NetworkBridgeEvent<M> { /// A peer with given ID is now connected. PeerConnected(PeerId, ObservedRole, ProtocolVersion, Option<HashSet<AuthorityDiscoveryId>>), /// A peer with given ID is now disconnected. PeerDisconnected(PeerId), /// Our neighbors in the new gossip topology. /// We're not necessarily connected to all of them. /// /// This message is issued only on the validation peer set. /// /// Note, that the distribution subsystems need to handle the last /// view update of the newly added gossip peers manually. NewGossipTopology(NewGossipTopology), /// We received a message from the given peer. PeerMessage(PeerId, M), /// The given peer has updated its description of its view. PeerViewChange(PeerId, View), // guaranteed to come after peer connected event. /// We have posted the given view update to all connected peers. OurViewChange(View), } }