Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
improve deserialization of messages
  • Loading branch information
ong-jonas committed Oct 12, 2023
commit 34dd150840cbdec6b59d277853d2bd4bc42d0a8e
42 changes: 14 additions & 28 deletions src/engine.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ use crate::{
behaviour::{Behaviour, PeerNetworkEvent},
config,
conversions,
messages::{DroppedTxMessage, Envelope, Topic},
messages::{DroppedTxMessage, Envelope, Topic, Message},
messages::Topic::{DroppedTxns, HotStuffRsBroadcast, HotStuffRsSend, Mempool},
peer::{EngineCommand, PeerBuilder, Peer},
};
Expand Down Expand Up @@ -89,7 +89,7 @@ pub(crate) async fn start(
}

// 3. Subscribe to Topic
swarm.behaviour_mut().subscribe(config::fullnode_topics(local_public_address))?;
swarm.behaviour_mut().subscribe(config.topics_to_subscribe.clone())?;

// 4. Start p2p networking
let (sender, mut receiver) =
Expand Down Expand Up @@ -169,47 +169,33 @@ pub(crate) async fn start(
// So we need to convert Vec<u8> to pchain_network::Message. Instead of implementing
// TryFrom trait for Vec<u8> to Message, implement a function that takes in the Message Topic to help
// converting Vec<u8> to Message. You can refer to fullnode/mempool messagegate to see how to
// deserialise each Message type.

// deserialise each Message type.
let topic = config::fullnode_topics(local_public_address)
.into_iter()
.find(|t| t.clone().hash() == message.topic);


if let Some(topic) = topic {
match topic {
let pchain_message = match topic {
HotStuffRsBroadcast => {
let hotstuff_message =
hotstuff_rs::messages::Message::deserialize(&mut message.data.as_slice())
.map_or(None, |msg| {
Some(msg)
});
hotstuff_rs::messages::Message::deserialize(&mut message.data.as_slice())
.map(|hotstuff_message| Message::Consensus(hotstuff_message))
},
Mempool => {
let mempool_message =
pchain_types::blockchain::TransactionV1::deserialize(&mut message.data.as_slice())
.map_or(None, |msg| {
Some(msg)
});
.map(|mempool_message| Message::Mempool(mempool_message))
},
DroppedTxns => {
let droppedtx_message =
DroppedTxMessage::deserialize(&mut message.data.as_slice())
.map_or(None, |msg| {
Some(msg)
});
.map(|droppedtx_message| Message::DroppedTx(droppedtx_message))
},
HotStuffRsSend(local_public_address) => {
let hotstuff_message =
HotStuffRsSend(address) => {
hotstuff_rs::messages::Message::deserialize(&mut message.data.as_slice())
.map_or(None, |msg| {
Some(msg)
});
.map(|hotstuff_message| Message::Consensus(hotstuff_message))
}
}

} else {
log::debug!("Invalid message topic");
}
};
}

} else {
log::debug!("Receive unknown gossip message");
}
Expand Down