diff --git a/p2p/src/connection/incoming/p2p_connection_incoming_reducer.rs b/p2p/src/connection/incoming/p2p_connection_incoming_reducer.rs index 9392c24333..1bc8489bd0 100644 --- a/p2p/src/connection/incoming/p2p_connection_incoming_reducer.rs +++ b/p2p/src/connection/incoming/p2p_connection_incoming_reducer.rs @@ -142,7 +142,7 @@ impl P2pConnectionIncomingState { } P2pConnectionIncomingAction::AnswerReady { peer_id, answer } => { let state = p2p_state - .incoming_peer_connection_mut(&peer_id) + .incoming_peer_connection_mut(peer_id) .ok_or_else(|| format!("Invalid state for: {:?}", action))?; if let Self::AnswerSdpCreateSuccess { signaling, diff --git a/p2p/src/network/pubsub/p2p_network_pubsub_state.rs b/p2p/src/network/pubsub/p2p_network_pubsub_state.rs index b551552723..df750de320 100644 --- a/p2p/src/network/pubsub/p2p_network_pubsub_state.rs +++ b/p2p/src/network/pubsub/p2p_network_pubsub_state.rs @@ -1,9 +1,11 @@ use super::pb; use crate::{token::BroadcastAlgorithm, ConnectionAddr, PeerId, StreamId}; + +use std::collections::{BTreeMap, VecDeque}; + use mina_p2p_messages::v2; use openmina_core::{snark::Snark, transaction::Transaction}; use serde::{Deserialize, Serialize}; -use std::collections::{BTreeMap, VecDeque}; #[derive(Default, Serialize, Deserialize, Debug, Clone)] pub struct P2pNetworkPubsubState { diff --git a/p2p/src/network/pubsub/pubsub_effectful/p2p_network_pubsub_effectful_effects.rs b/p2p/src/network/pubsub/pubsub_effectful/p2p_network_pubsub_effectful_effects.rs index 8bb010578e..7b7b713c06 100644 --- a/p2p/src/network/pubsub/pubsub_effectful/p2p_network_pubsub_effectful_effects.rs +++ b/p2p/src/network/pubsub/pubsub_effectful/p2p_network_pubsub_effectful_effects.rs @@ -1,6 +1,8 @@ use openmina_core::bug_condition; -use libp2p_identity::PublicKey; +use libp2p_identity::{DecodingError, PublicKey}; + +use super::super::pb; use crate::{ P2pCryptoService, P2pNetworkConnectionError, P2pNetworkPubsubAction, P2pNetworkSchedulerAction, @@ -42,14 +44,10 @@ impl P2pNetworkPubsubEffectfulAction { for mut message in messages { let mut error = None; - let originator = - match message.key.as_deref().map(PublicKey::try_decode_protobuf) { - Some(Ok(v)) => Some(v), - _ => PublicKey::try_decode_protobuf(&message.from()[2..]).ok(), - }; + let originator = originator(&message); if let Some(signature) = message.signature.take() { - if let Some(pk) = originator { + if let Ok(Some(pk)) = originator { message.key = None; let mut data = vec![]; @@ -66,6 +64,8 @@ impl P2pNetworkPubsubEffectfulAction { } else { error = Some("message doesn't contain verifying key"); } + + message.signature = Some(signature); } else { error = Some("message doesn't contain signature"); } @@ -95,3 +95,12 @@ impl P2pNetworkPubsubEffectfulAction { } } } + +pub fn originator(message: &pb::Message) -> Result, DecodingError> { + message + .key + .as_deref() + .or_else(|| message.from.as_deref().and_then(|f| f.get(2..))) + .map(PublicKey::try_decode_protobuf) + .transpose() +}