sc_consensus_subspace/
lib.rs1#![feature(try_blocks, duration_constructors_lite)]
10#![forbid(unsafe_code)]
11#![warn(missing_docs)]
12
13pub mod archiver;
14pub mod aux_schema;
15pub mod block_import;
16pub mod notification;
17pub mod slot_worker;
18#[cfg(test)]
19mod tests;
20pub mod verifier;
21
22use crate::archiver::{ArchivedSegmentNotification, ObjectMappingNotification};
23use crate::block_import::BlockImportingNotification;
24use crate::notification::{SubspaceNotificationSender, SubspaceNotificationStream};
25use crate::slot_worker::{NewSlotNotification, RewardSigningNotification};
26use sp_consensus_subspace::ChainConstants;
27use sp_runtime::traits::Block as BlockT;
28use subspace_erasure_coding::ErasureCoding;
29use subspace_kzg::Kzg;
30
31#[derive(Clone)]
33pub struct SubspaceLink<Block: BlockT> {
34    new_slot_notification_sender: SubspaceNotificationSender<NewSlotNotification>,
35    new_slot_notification_stream: SubspaceNotificationStream<NewSlotNotification>,
36    reward_signing_notification_sender: SubspaceNotificationSender<RewardSigningNotification>,
37    reward_signing_notification_stream: SubspaceNotificationStream<RewardSigningNotification>,
38    object_mapping_notification_sender: SubspaceNotificationSender<ObjectMappingNotification>,
39    object_mapping_notification_stream: SubspaceNotificationStream<ObjectMappingNotification>,
40    archived_segment_notification_sender: SubspaceNotificationSender<ArchivedSegmentNotification>,
41    archived_segment_notification_stream: SubspaceNotificationStream<ArchivedSegmentNotification>,
42    block_importing_notification_sender:
43        SubspaceNotificationSender<BlockImportingNotification<Block>>,
44    block_importing_notification_stream:
45        SubspaceNotificationStream<BlockImportingNotification<Block>>,
46    chain_constants: ChainConstants,
47    kzg: Kzg,
48    erasure_coding: ErasureCoding,
49}
50
51impl<Block: BlockT> SubspaceLink<Block> {
52    pub fn new(chain_constants: ChainConstants, kzg: Kzg, erasure_coding: ErasureCoding) -> Self {
54        let (new_slot_notification_sender, new_slot_notification_stream) =
55            notification::channel("subspace_new_slot_notification_stream");
56        let (reward_signing_notification_sender, reward_signing_notification_stream) =
57            notification::channel("subspace_reward_signing_notification_stream");
58        let (object_mapping_notification_sender, object_mapping_notification_stream) =
59            notification::channel("subspace_object_mapping_notification_stream");
60        let (archived_segment_notification_sender, archived_segment_notification_stream) =
61            notification::channel("subspace_archived_segment_notification_stream");
62        let (block_importing_notification_sender, block_importing_notification_stream) =
63            notification::channel("subspace_block_importing_notification_stream");
64
65        Self {
66            new_slot_notification_sender,
67            new_slot_notification_stream,
68            reward_signing_notification_sender,
69            reward_signing_notification_stream,
70            object_mapping_notification_sender,
71            object_mapping_notification_stream,
72            archived_segment_notification_sender,
73            archived_segment_notification_stream,
74            block_importing_notification_sender,
75            block_importing_notification_stream,
76            chain_constants,
77            kzg,
78            erasure_coding,
79        }
80    }
81
82    pub fn new_slot_notification_stream(&self) -> SubspaceNotificationStream<NewSlotNotification> {
84        self.new_slot_notification_stream.clone()
85    }
86
87    pub fn reward_signing_notification_stream(
90        &self,
91    ) -> SubspaceNotificationStream<RewardSigningNotification> {
92        self.reward_signing_notification_stream.clone()
93    }
94
95    pub fn object_mapping_notification_stream(
97        &self,
98    ) -> SubspaceNotificationStream<ObjectMappingNotification> {
99        self.object_mapping_notification_stream.clone()
100    }
101
102    pub fn archived_segment_notification_stream(
104        &self,
105    ) -> SubspaceNotificationStream<ArchivedSegmentNotification> {
106        self.archived_segment_notification_stream.clone()
107    }
108
109    pub fn block_importing_notification_stream(
115        &self,
116    ) -> SubspaceNotificationStream<BlockImportingNotification<Block>> {
117        self.block_importing_notification_stream.clone()
118    }
119
120    pub fn chain_constants(&self) -> &ChainConstants {
122        &self.chain_constants
123    }
124
125    pub fn kzg(&self) -> &Kzg {
127        &self.kzg
128    }
129
130    pub fn erasure_coding(&self) -> &ErasureCoding {
132        &self.erasure_coding
133    }
134}