p2p/network/pubsub/
mod.rs

1pub 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}