Skip to content

Commit 2692d24

Browse files
committed
sim-rs: fix indefinite length map encoding
1 parent 79b78a1 commit 2692d24

File tree

3 files changed

+106
-45
lines changed

3 files changed

+106
-45
lines changed

sim-rs/sim-cli/src/events.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,7 @@ impl EventMonitor {
258258
header_bytes,
259259
total_bytes,
260260
transactions,
261+
..
261262
} => {
262263
generated_ibs += 1;
263264
if transactions.is_empty() {

sim-rs/sim-core/src/events.rs

Lines changed: 96 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -93,83 +93,111 @@ pub enum Event {
9393
recipient: Node,
9494
},
9595
RBLotteryWon {
96-
#[serde(flatten)]
9796
id: BlockId<Node>,
97+
slot: u64,
98+
producer: Node,
9899
},
99100
RBGenerated {
100-
#[serde(flatten)]
101101
id: BlockId<Node>,
102+
slot: u64,
103+
producer: Node,
102104
vrf: u64,
103105
parent: Option<BlockId<Node>>,
104106
header_bytes: u64,
105107
endorsement: Option<Endorsement<Node>>,
106108
transactions: Vec<TransactionId>,
107109
},
108110
RBSent {
109-
#[serde(flatten)]
110111
id: BlockId<Node>,
112+
slot: u64,
113+
producer: Node,
111114
sender: Node,
112115
recipient: Node,
113116
},
114117
RBReceived {
115-
#[serde(flatten)]
116118
id: BlockId<Node>,
119+
slot: u64,
120+
producer: Node,
117121
sender: Node,
118122
recipient: Node,
119123
},
120124
IBLotteryWon {
121-
#[serde(flatten)]
122125
id: InputBlockId<Node>,
126+
slot: u64,
127+
pipeline: u64,
128+
producer: Node,
129+
index: u64,
123130
},
124131
IBGenerated {
125-
#[serde(flatten)]
126132
id: InputBlockId<Node>,
133+
slot: u64,
134+
pipeline: u64,
135+
producer: Node,
136+
index: u64,
127137
header_bytes: u64,
128138
total_bytes: u64,
129139
transactions: Vec<TransactionId>,
130140
},
131141
IBSent {
132-
#[serde(flatten)]
133142
id: InputBlockId<Node>,
143+
slot: u64,
144+
pipeline: u64,
145+
producer: Node,
146+
index: u64,
134147
sender: Node,
135148
recipient: Node,
136149
},
137150
IBReceived {
138-
#[serde(flatten)]
139151
id: InputBlockId<Node>,
152+
slot: u64,
153+
pipeline: u64,
154+
producer: Node,
155+
index: u64,
140156
sender: Node,
141157
recipient: Node,
142158
},
143159
EBLotteryWon {
144-
#[serde(flatten)]
145160
id: EndorserBlockId<Node>,
161+
slot: u64,
162+
pipeline: u64,
163+
producer: Node,
146164
},
147165
EBGenerated {
148-
#[serde(flatten)]
149166
id: EndorserBlockId<Node>,
167+
slot: u64,
168+
pipeline: u64,
169+
producer: Node,
150170
bytes: u64,
151171
input_blocks: Vec<InputBlockId<Node>>,
152172
endorser_blocks: Vec<EndorserBlockId<Node>>,
153173
},
154174
EBSent {
155-
#[serde(flatten)]
156175
id: EndorserBlockId<Node>,
176+
slot: u64,
177+
pipeline: u64,
178+
producer: Node,
157179
sender: Node,
158180
recipient: Node,
159181
},
160182
EBReceived {
161-
#[serde(flatten)]
162183
id: EndorserBlockId<Node>,
184+
slot: u64,
185+
pipeline: u64,
186+
producer: Node,
163187
sender: Node,
164188
recipient: Node,
165189
},
166190
VTLotteryWon {
167-
#[serde(flatten)]
168191
id: VoteBundleId<Node>,
192+
slot: u64,
193+
pipeline: u64,
194+
producer: Node,
169195
},
170196
VTBundleGenerated {
171-
#[serde(flatten)]
172197
id: VoteBundleId<Node>,
198+
slot: u64,
199+
pipeline: u64,
200+
producer: Node,
173201
bytes: u64,
174202
votes: Votes<Node>,
175203
},
@@ -181,14 +209,18 @@ pub enum Event {
181209
reason: NoVoteReason,
182210
},
183211
VTBundleSent {
184-
#[serde(flatten)]
185212
id: VoteBundleId<Node>,
213+
slot: u64,
214+
pipeline: u64,
215+
producer: Node,
186216
sender: Node,
187217
recipient: Node,
188218
},
189219
VTBundleReceived {
190-
#[serde(flatten)]
191220
id: VoteBundleId<Node>,
221+
slot: u64,
222+
pipeline: u64,
223+
producer: Node,
192224
sender: Node,
193225
recipient: Node,
194226
},
@@ -273,12 +305,16 @@ impl EventTracker {
273305
pub fn track_praos_block_lottery_won(&self, block: &Block) {
274306
self.send(Event::RBLotteryWon {
275307
id: self.to_block(block.id),
308+
slot: block.id.slot,
309+
producer: self.to_node(block.id.producer),
276310
});
277311
}
278312

279313
pub fn track_praos_block_generated(&self, block: &Block) {
280314
self.send(Event::RBGenerated {
281315
id: self.to_block(block.id),
316+
slot: block.id.slot,
317+
producer: self.to_node(block.id.producer),
282318
vrf: block.vrf,
283319
parent: block.parent.map(|id| self.to_block(id)),
284320
header_bytes: block.header_bytes,
@@ -298,6 +334,8 @@ impl EventTracker {
298334
pub fn track_praos_block_sent(&self, block: &Block, sender: NodeId, recipient: NodeId) {
299335
self.send(Event::RBSent {
300336
id: self.to_block(block.id),
337+
slot: block.id.slot,
338+
producer: self.to_node(block.id.producer),
301339
sender: self.to_node(sender),
302340
recipient: self.to_node(recipient),
303341
});
@@ -306,6 +344,8 @@ impl EventTracker {
306344
pub fn track_praos_block_received(&self, block: &Block, sender: NodeId, recipient: NodeId) {
307345
self.send(Event::RBReceived {
308346
id: self.to_block(block.id),
347+
slot: block.id.slot,
348+
producer: self.to_node(block.id.producer),
309349
sender: self.to_node(sender),
310350
recipient: self.to_node(recipient),
311351
});
@@ -338,12 +378,20 @@ impl EventTracker {
338378
pub fn track_ib_lottery_won(&self, id: InputBlockId) {
339379
self.send(Event::IBLotteryWon {
340380
id: self.to_input_block(id),
381+
slot: id.slot,
382+
pipeline: id.pipeline,
383+
producer: self.to_node(id.producer),
384+
index: id.index,
341385
});
342386
}
343387

344388
pub fn track_ib_generated(&self, block: &crate::model::InputBlock) {
345389
self.send(Event::IBGenerated {
346390
id: self.to_input_block(block.header.id),
391+
slot: block.header.id.slot,
392+
pipeline: block.header.id.pipeline,
393+
producer: self.to_node(block.header.id.producer),
394+
index: block.header.id.index,
347395
header_bytes: block.header.bytes,
348396
total_bytes: block.header.bytes
349397
+ block.transactions.iter().map(|tx| tx.bytes).sum::<u64>(),
@@ -354,6 +402,10 @@ impl EventTracker {
354402
pub fn track_ib_sent(&self, id: InputBlockId, sender: NodeId, recipient: NodeId) {
355403
self.send(Event::IBSent {
356404
id: self.to_input_block(id),
405+
slot: id.slot,
406+
pipeline: id.pipeline,
407+
producer: self.to_node(id.producer),
408+
index: id.index,
357409
sender: self.to_node(sender),
358410
recipient: self.to_node(recipient),
359411
});
@@ -362,6 +414,10 @@ impl EventTracker {
362414
pub fn track_ib_received(&self, id: InputBlockId, sender: NodeId, recipient: NodeId) {
363415
self.send(Event::IBReceived {
364416
id: self.to_input_block(id),
417+
slot: id.slot,
418+
pipeline: id.pipeline,
419+
producer: self.to_node(id.producer),
420+
index: id.index,
365421
sender: self.to_node(sender),
366422
recipient: self.to_node(recipient),
367423
});
@@ -370,12 +426,18 @@ impl EventTracker {
370426
pub fn track_eb_lottery_won(&self, id: EndorserBlockId) {
371427
self.send(Event::EBLotteryWon {
372428
id: self.to_endorser_block(id),
429+
slot: id.slot,
430+
pipeline: id.pipeline,
431+
producer: self.to_node(id.producer),
373432
});
374433
}
375434

376435
pub fn track_eb_generated(&self, block: &crate::model::EndorserBlock) {
377436
self.send(Event::EBGenerated {
378437
id: self.to_endorser_block(block.id()),
438+
slot: block.slot,
439+
pipeline: block.pipeline,
440+
producer: self.to_node(block.producer),
379441
bytes: block.bytes,
380442
input_blocks: block
381443
.ibs
@@ -393,6 +455,9 @@ impl EventTracker {
393455
pub fn track_eb_sent(&self, id: EndorserBlockId, sender: NodeId, recipient: NodeId) {
394456
self.send(Event::EBSent {
395457
id: self.to_endorser_block(id),
458+
slot: id.slot,
459+
pipeline: id.pipeline,
460+
producer: self.to_node(id.producer),
396461
sender: self.to_node(sender),
397462
recipient: self.to_node(recipient),
398463
});
@@ -401,6 +466,9 @@ impl EventTracker {
401466
pub fn track_eb_received(&self, id: EndorserBlockId, sender: NodeId, recipient: NodeId) {
402467
self.send(Event::EBReceived {
403468
id: self.to_endorser_block(id),
469+
slot: id.slot,
470+
pipeline: id.pipeline,
471+
producer: self.to_node(id.producer),
404472
sender: self.to_node(sender),
405473
recipient: self.to_node(recipient),
406474
});
@@ -409,12 +477,18 @@ impl EventTracker {
409477
pub fn track_vote_lottery_won(&self, id: VoteBundleId) {
410478
self.send(Event::VTLotteryWon {
411479
id: self.to_vote_bundle(id),
480+
slot: id.slot,
481+
pipeline: id.pipeline,
482+
producer: self.to_node(id.producer),
412483
});
413484
}
414485

415486
pub fn track_votes_generated(&self, votes: &VoteBundle) {
416487
self.send(Event::VTBundleGenerated {
417488
id: self.to_vote_bundle(votes.id),
489+
slot: votes.id.slot,
490+
pipeline: votes.id.pipeline,
491+
producer: self.to_node(votes.id.producer),
418492
bytes: votes.bytes,
419493
votes: Votes(
420494
votes
@@ -446,6 +520,9 @@ impl EventTracker {
446520
pub fn track_votes_sent(&self, votes: &VoteBundle, sender: NodeId, recipient: NodeId) {
447521
self.send(Event::VTBundleSent {
448522
id: self.to_vote_bundle(votes.id),
523+
slot: votes.id.slot,
524+
pipeline: votes.id.pipeline,
525+
producer: self.to_node(votes.id.producer),
449526
sender: self.to_node(sender),
450527
recipient: self.to_node(recipient),
451528
});
@@ -454,6 +531,9 @@ impl EventTracker {
454531
pub fn track_votes_received(&self, votes: &VoteBundle, sender: NodeId, recipient: NodeId) {
455532
self.send(Event::VTBundleReceived {
456533
id: self.to_vote_bundle(votes.id),
534+
slot: votes.id.slot,
535+
pipeline: votes.id.pipeline,
536+
producer: self.to_node(votes.id.producer),
457537
sender: self.to_node(sender),
458538
recipient: self.to_node(recipient),
459539
});

sim-rs/sim-core/src/model.rs

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::{collections::BTreeMap, fmt::Display, sync::Arc};
22

33
use crate::{clock::Timestamp, config::NodeId};
4-
use serde::{ser::SerializeStruct, Serialize};
4+
use serde::Serialize;
55

66
macro_rules! id_wrapper {
77
($outer:ident, $inner:ty) => {
@@ -53,16 +53,12 @@ impl<Node: Display> Display for BlockId<Node> {
5353
}
5454
}
5555

56-
impl<Node: Display + Serialize> Serialize for BlockId<Node> {
56+
impl<Node: Display> Serialize for BlockId<Node> {
5757
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
5858
where
5959
S: serde::Serializer,
6060
{
61-
let mut obj = serializer.serialize_struct("BlockId", 3)?;
62-
obj.serialize_field("id", &self.to_string())?;
63-
obj.serialize_field("slot", &self.slot)?;
64-
obj.serialize_field("producer", &self.producer)?;
65-
obj.end()
61+
serializer.serialize_str(&self.to_string())
6662
}
6763
}
6864

@@ -116,18 +112,12 @@ impl<Node: Display> Display for InputBlockId<Node> {
116112
}
117113
}
118114

119-
impl<Node: Display + Serialize> Serialize for InputBlockId<Node> {
115+
impl<Node: Display> Serialize for InputBlockId<Node> {
120116
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
121117
where
122118
S: serde::Serializer,
123119
{
124-
let mut obj = serializer.serialize_struct("InputBlockId", 5)?;
125-
obj.serialize_field("id", &self.to_string())?;
126-
obj.serialize_field("slot", &self.slot)?;
127-
obj.serialize_field("pipeline", &self.pipeline)?;
128-
obj.serialize_field("producer", &self.producer)?;
129-
obj.serialize_field("index", &self.index)?;
130-
obj.end()
120+
serializer.serialize_str(&self.to_string())
131121
}
132122
}
133123

@@ -161,17 +151,12 @@ impl<Node: Display> Display for EndorserBlockId<Node> {
161151
f.write_fmt(format_args!("{}-{}", self.slot, self.producer))
162152
}
163153
}
164-
impl<Node: Display + Serialize> Serialize for EndorserBlockId<Node> {
154+
impl<Node: Display> Serialize for EndorserBlockId<Node> {
165155
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
166156
where
167157
S: serde::Serializer,
168158
{
169-
let mut obj = serializer.serialize_struct("EndorserBlockId", 4)?;
170-
obj.serialize_field("id", &self.to_string())?;
171-
obj.serialize_field("slot", &self.slot)?;
172-
obj.serialize_field("pipeline", &self.pipeline)?;
173-
obj.serialize_field("producer", &self.producer)?;
174-
obj.end()
159+
serializer.serialize_str(&self.to_string())
175160
}
176161
}
177162

@@ -206,17 +191,12 @@ impl<Node: Display> Display for VoteBundleId<Node> {
206191
f.write_fmt(format_args!("{}-{}", self.slot, self.producer))
207192
}
208193
}
209-
impl<Node: Display + Serialize> Serialize for VoteBundleId<Node> {
194+
impl<Node: Display> Serialize for VoteBundleId<Node> {
210195
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
211196
where
212197
S: serde::Serializer,
213198
{
214-
let mut obj = serializer.serialize_struct("VoteBundleId", 4)?;
215-
obj.serialize_field("id", &self.to_string())?;
216-
obj.serialize_field("slot", &self.slot)?;
217-
obj.serialize_field("pipeline", &self.pipeline)?;
218-
obj.serialize_field("producer", &self.producer)?;
219-
obj.end()
199+
serializer.serialize_str(&self.to_string())
220200
}
221201
}
222202

0 commit comments

Comments
 (0)