1extern crate graphannis_malloc_size_of as malloc_size_of;
4extern crate graphannis_malloc_size_of_derive as malloc_size_of_derive;
5
6pub mod channels;
7pub mod connection;
8pub mod disconnection;
9pub mod disconnection_effectful;
10pub mod identity;
11use bootstrap::P2pNetworkKadBootstrapState;
12use channels::{
13 best_tip::P2pChannelsBestTipAction,
14 rpc::P2pChannelsRpcAction,
15 signaling::{
16 discovery::P2pChannelsSignalingDiscoveryAction,
17 exchange::P2pChannelsSignalingExchangeAction,
18 },
19 snark::P2pChannelsSnarkAction,
20 snark_job_commitment::P2pChannelsSnarkJobCommitmentAction,
21 streaming_rpc::P2pChannelsStreamingRpcAction,
22 transaction::P2pChannelsTransactionAction,
23 P2pChannelsEffectfulAction,
24};
25use connection::{
26 incoming::P2pConnectionIncomingAction,
27 incoming_effectful::P2pConnectionIncomingEffectfulAction,
28 outgoing_effectful::P2pConnectionOutgoingEffectfulAction,
29};
30use disconnection::P2pDisconnectionAction;
31use disconnection_effectful::P2pDisconnectionEffectfulAction;
32use identify::P2pIdentifyAction;
33pub use identity::PeerId;
34use network::identify::{
35 stream_effectful::P2pNetworkIdentifyStreamEffectfulAction, P2pNetworkIdentifyState,
36 P2pNetworkIdentifyStreamAction,
37};
38use openmina_core::SubstateAccess;
39
40pub mod webrtc;
41
42pub mod identify;
43
44pub mod network;
45pub use self::network::*;
46
47pub mod peer;
48pub use peer::*;
49
50mod p2p_config;
51pub use p2p_config::*;
52
53mod p2p_event;
54pub use p2p_event::*;
55
56mod p2p_actions;
57pub use p2p_actions::*;
58
59mod p2p_state;
60pub use p2p_state::*;
61
62mod p2p_reducer;
63
64mod p2p_effects;
65
66mod p2p_service;
67pub use p2p_service::*;
68pub mod service {
69 pub use super::p2p_service::*;
70}
71
72pub mod service_impl;
73
74pub use libp2p_identity;
75pub use multiaddr;
76
77#[cfg(all(
78 not(target_arch = "wasm32"),
79 feature = "p2p-libp2p",
80 feature = "fuzzing"
81))]
82pub mod fuzzer;
83
84use redux::{AnyAction, EnablingCondition, SubStore};
85
86pub trait P2pStore<GlobalState>: SubStore<GlobalState, P2pState, SubAction = P2pAction> {}
87impl<S, T: SubStore<S, P2pState, SubAction = P2pAction>> P2pStore<S> for T {}
88
89fn is_time_passed(
92 now: redux::Timestamp,
93 then: redux::Timestamp,
94 duration: Option<std::time::Duration>,
95) -> bool {
96 duration.is_some_and(|d| now.checked_sub(then) >= Some(d))
97}
98
99pub trait P2pStateTrait:
100 SubstateAccess<P2pState>
101 + SubstateAccess<P2pNetworkState>
102 + SubstateAccess<P2pNetworkKadState>
103 + SubstateAccess<P2pNetworkKadBootstrapState>
104 + SubstateAccess<P2pNetworkIdentifyState>
105 + SubstateAccess<P2pNetworkSchedulerState>
106 + SubstateAccess<P2pLimits>
107 + SubstateAccess<P2pNetworkPubsubState>
108 + SubstateAccess<P2pConfig>
109{
110}
111
112pub trait P2pActionTrait<State>:
113 EnablingCondition<State>
114 + From<AnyAction>
115 + From<P2pAction>
116 + From<P2pEffectfulAction>
117 + From<P2pNetworkKademliaStreamAction>
118 + From<P2pNetworkKadRequestAction>
119 + From<P2pNetworkKadBootstrapAction>
120 + From<connection::outgoing::P2pConnectionOutgoingAction>
121 + From<P2pNetworkYamuxAction>
122 + From<peer::P2pPeerAction>
123 + From<P2pNetworkKademliaAction>
124 + From<P2pNetworkSchedulerAction>
125 + From<P2pNetworkIdentifyStreamAction>
126 + From<P2pIdentifyAction>
127 + From<P2pNetworkIdentifyStreamEffectfulAction>
128 + From<P2pNetworkSelectAction>
129 + From<P2pNetworkPnetAction>
130 + From<P2pNetworkPnetEffectfulAction>
131 + From<P2pNetworkNoiseAction>
132 + From<P2pConnectionIncomingAction>
133 + From<P2pNetworkPubsubAction>
134 + From<P2pNetworkPubsubEffectfulAction>
135 + From<P2pChannelsSignalingExchangeAction>
136 + From<P2pChannelsSignalingDiscoveryAction>
137 + From<P2pChannelsTransactionAction>
138 + From<P2pChannelsSnarkAction>
139 + From<P2pNetworkRpcAction>
140 + From<P2pChannelsRpcAction>
141 + From<P2pDisconnectionAction>
142 + From<P2pNetworkSchedulerEffectfulAction>
143 + From<P2pChannelsBestTipAction>
144 + From<P2pChannelsSnarkJobCommitmentAction>
145 + From<P2pChannelsStreamingRpcAction>
146 + From<P2pConnectionIncomingEffectfulAction>
147 + From<P2pConnectionOutgoingEffectfulAction>
148 + From<P2pDisconnectionEffectfulAction>
149 + From<P2pNetworkKadEffectfulAction>
150 + From<P2pChannelsEffectfulAction>
151{
152}
153
154pub trait Action: From<P2pChannelsEffectfulAction> {}