p2p/network/pubsub/
mod.rs1pub mod pb {
2 include!(concat!(env!("OUT_DIR"), "/gossipsub.rs"));
3}
4pub use openmina_core::p2p::P2pNetworkPubsubMessageCacheId;
5mod p2p_network_pubsub_actions;
6pub use self::p2p_network_pubsub_actions::P2pNetworkPubsubAction;
7
8mod p2p_network_pubsub_state;
9pub use self::p2p_network_pubsub_state::{
10 P2pNetworkPubsubClientState, P2pNetworkPubsubClientTopicState, P2pNetworkPubsubState,
11};
12
13#[cfg(feature = "p2p-libp2p")]
14mod p2p_network_pubsub_reducer;
15
16#[cfg(feature = "p2p-libp2p")]
17const TOPIC: &str = "coda/consensus-messages/0.0.1";
18
19pub mod pubsub_effectful;
20use openmina_core::snark::SnarkJobId;
21pub use pubsub_effectful::P2pNetworkPubsubEffectfulAction;
22
23use binprot::BinProtWrite;
24use mina_p2p_messages::gossip::GossipNetMessageV2;
25use openmina_core::bug_condition;
26use sha2::{Digest, Sha256};
27
28use crate::identity::SecretKey;
29
30#[derive(serde::Serialize, serde:: Deserialize, Debug, Clone)]
31pub enum BroadcastMessageId {
32 BlockHash {
33 hash: mina_p2p_messages::v2::StateHash,
34 },
35 Snark {
36 job_id: SnarkJobId,
37 },
38 MessageId {
39 message_id: P2pNetworkPubsubMessageCacheId,
40 },
41}
42
43pub(super) fn webrtc_source_sk(message: &GossipNetMessageV2) -> SecretKey {
44 let mut hasher = Sha256::new();
45 if let Err(err) = message.binprot_write(&mut hasher) {
46 bug_condition!("trying to broadcast message which can't be binprot serialized! err: {err}");
47 return SecretKey::from_bytes([0; 32]);
48 }
49 SecretKey::from_bytes(hasher.finalize().into())
50}
51
52pub(super) fn webrtc_source_sk_from_bytes(bytes: &[u8]) -> SecretKey {
53 let mut hasher = Sha256::new();
54 hasher.update(bytes);
55 SecretKey::from_bytes(hasher.finalize().into())
56}
57
58pub(super) fn encode_message(message: &GossipNetMessageV2) -> std::io::Result<Vec<u8>> {
59 let mut buffer = vec![0; 8];
60
61 message.binprot_write(&mut buffer)?;
62
63 let len = buffer.len() - 8;
64 buffer[..8].clone_from_slice(&(len as u64).to_le_bytes());
65
66 Ok(buffer)
67}