p2p/
lib.rs

1//#![feature(trivial_bounds)]
2
3extern 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
89/// Returns true if duration value is configured, and, given the time is `now`,
90/// that duration is passed since `then`.
91fn 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> {}