@@ -11,6 +11,7 @@ use libp2p::{
11
11
} ;
12
12
use mithril_common:: {
13
13
StdResult ,
14
+ crypto_helper:: { TryFromBytes , TryToBytes } ,
14
15
logging:: LoggerExtensions ,
15
16
messages:: { RegisterSignatureMessageHttp , RegisterSignerMessage } ,
16
17
} ;
@@ -74,6 +75,25 @@ pub enum BroadcastMessage {
74
75
RegisterSignatureDmq ( DmqMessage ) ,
75
76
}
76
77
78
+ impl TryToBytes for BroadcastMessage {
79
+ fn to_bytes_vec ( & self ) -> StdResult < Vec < u8 > > {
80
+ let bytes =
81
+ bincode:: serde:: encode_to_vec ( self , bincode:: config:: standard ( ) ) . map_err ( |e| e. into ( ) ) ;
82
+
83
+ bytes
84
+ }
85
+ }
86
+
87
+ impl TryFromBytes for BroadcastMessage {
88
+ fn try_from_bytes ( bytes : & [ u8 ] ) -> StdResult < Self > {
89
+ let ( res, _) =
90
+ bincode:: serde:: decode_from_slice :: < Self , _ > ( bytes, bincode:: config:: standard ( ) )
91
+ . map_err ( |e| anyhow ! ( e) ) ?;
92
+
93
+ Ok ( res)
94
+ }
95
+ }
96
+
77
97
/// A peer in the P2P network
78
98
pub struct Peer {
79
99
topics : HashMap < TopicName , gossipsub:: IdentTopic > ,
@@ -185,7 +205,7 @@ impl Peer {
185
205
match event {
186
206
PeerEvent :: Behaviour {
187
207
event : PeerBehaviourEvent :: Gossipsub ( gossipsub:: Event :: Message { message, .. } ) ,
188
- } => Ok ( Some ( serde_json :: from_slice ( & message. data ) ?) ) ,
208
+ } => Ok ( Some ( BroadcastMessage :: try_from_bytes ( & message. data ) ?) ) ,
189
209
_ => Ok ( None ) ,
190
210
}
191
211
}
@@ -247,6 +267,17 @@ impl Peer {
247
267
)
248
268
}
249
269
270
+ /// Publish a signer registration on the P2P pubsub
271
+ pub fn publish_signer_registration (
272
+ & mut self ,
273
+ message : & RegisterSignerMessage ,
274
+ ) -> StdResult < gossipsub:: MessageId > {
275
+ self . publish_broadcast_message (
276
+ & BroadcastMessage :: RegisterSignerHttp ( message. to_owned ( ) ) ,
277
+ mithril_p2p_topic:: SIGNERS_HTTP ,
278
+ )
279
+ }
280
+
250
281
/// Publish a broadcast message on the P2P pubsub
251
282
pub fn publish_broadcast_message (
252
283
& mut self ,
@@ -261,9 +292,10 @@ impl Peer {
261
292
format ! ( "Can not publish broadcast message on invalid topic: {topic_name}" )
262
293
} ) ?
263
294
. to_owned ( ) ;
264
- let data = serde_json :: to_vec ( message) . with_context ( || {
295
+ let data = message. to_bytes_vec ( ) . with_context ( || {
265
296
format ! ( "Can not publish broadcast message with invalid format on topic {topic_name}" )
266
297
} ) ?;
298
+ println ! ( "Publishing message on topic {topic_name}: {:?}" , data. len( ) ) ;
267
299
268
300
let message_id = self
269
301
. swarm
@@ -283,17 +315,6 @@ impl Peer {
283
315
Ok ( message_id. to_owned ( ) )
284
316
}
285
317
286
- /// Publish a signer registration on the P2P pubsub
287
- pub fn publish_signer_registration (
288
- & mut self ,
289
- message : & RegisterSignerMessage ,
290
- ) -> StdResult < gossipsub:: MessageId > {
291
- self . publish_broadcast_message (
292
- & BroadcastMessage :: RegisterSignerHttp ( message. to_owned ( ) ) ,
293
- mithril_p2p_topic:: SIGNERS_HTTP ,
294
- )
295
- }
296
-
297
318
/// Connect to a remote peer
298
319
pub fn dial ( & mut self , addr : Multiaddr ) -> StdResult < ( ) > {
299
320
debug ! ( self . logger, "Dialing to" ; "address" => ?addr, "local_peer_id" => ?self . local_peer_id( ) ) ;
0 commit comments