Skip to content

Commit 20fdba7

Browse files
committed
Define and use a new SlotNumber type in mithril-common
1 parent 4c0d094 commit 20fdba7

17 files changed

+336
-122
lines changed

mithril-common/src/cardano_block_scanner/chain_reader_block_streamer.rs

Lines changed: 92 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ use tokio::sync::Mutex;
77
use crate::cardano_block_scanner::BlockStreamer;
88
use crate::cardano_block_scanner::ChainScannedBlocks;
99
use crate::chain_reader::{ChainBlockNextAction, ChainBlockReader};
10-
use crate::entities::BlockNumber;
11-
use crate::entities::ChainPoint;
10+
use crate::entities::{BlockNumber, ChainPoint};
1211
use crate::StdResult;
1312

1413
/// The action that indicates what to do next with the streamer
@@ -157,6 +156,7 @@ impl ChainReaderBlockStreamer {
157156
mod tests {
158157
use crate::cardano_block_scanner::ScannedBlock;
159158
use crate::chain_reader::FakeChainReader;
159+
use crate::entities::SlotNumber;
160160
use crate::test_utils::TestLogger;
161161

162162
use super::*;
@@ -172,15 +172,15 @@ mod tests {
172172
parsed_block: ScannedBlock::new(
173173
"hash-1",
174174
until_block_number,
175-
100,
175+
SlotNumber(100),
176176
Vec::<&str>::new(),
177177
),
178178
},
179179
ChainBlockNextAction::RollForward {
180180
parsed_block: ScannedBlock::new(
181181
"hash-2",
182182
until_block_number,
183-
100,
183+
SlotNumber(100),
184184
Vec::<&str>::new(),
185185
),
186186
},
@@ -213,7 +213,7 @@ mod tests {
213213
Some(ChainScannedBlocks::RollForwards(vec![ScannedBlock::new(
214214
"hash-2",
215215
until_block_number,
216-
100,
216+
SlotNumber(100),
217217
Vec::<&str>::new(),
218218
)])),
219219
scanned_blocks
@@ -224,10 +224,20 @@ mod tests {
224224
async fn test_parse_expected_multiple_rollforwards_below_block_number_threshold() {
225225
let chain_reader = Arc::new(Mutex::new(FakeChainReader::new(vec![
226226
ChainBlockNextAction::RollForward {
227-
parsed_block: ScannedBlock::new("hash-1", BlockNumber(1), 10, Vec::<&str>::new()),
227+
parsed_block: ScannedBlock::new(
228+
"hash-1",
229+
BlockNumber(1),
230+
SlotNumber(10),
231+
Vec::<&str>::new(),
232+
),
228233
},
229234
ChainBlockNextAction::RollForward {
230-
parsed_block: ScannedBlock::new("hash-2", BlockNumber(2), 20, Vec::<&str>::new()),
235+
parsed_block: ScannedBlock::new(
236+
"hash-2",
237+
BlockNumber(2),
238+
SlotNumber(20),
239+
Vec::<&str>::new(),
240+
),
231241
},
232242
])));
233243
let mut block_streamer = ChainReaderBlockStreamer::try_new(
@@ -244,8 +254,8 @@ mod tests {
244254

245255
assert_eq!(
246256
Some(ChainScannedBlocks::RollForwards(vec![
247-
ScannedBlock::new("hash-1", BlockNumber(1), 10, Vec::<&str>::new()),
248-
ScannedBlock::new("hash-2", BlockNumber(2), 20, Vec::<&str>::new())
257+
ScannedBlock::new("hash-1", BlockNumber(1), SlotNumber(10), Vec::<&str>::new()),
258+
ScannedBlock::new("hash-2", BlockNumber(2), SlotNumber(20), Vec::<&str>::new())
249259
])),
250260
scanned_blocks,
251261
);
@@ -255,13 +265,28 @@ mod tests {
255265
async fn test_parse_expected_maximum_rollforwards_retrieved_per_poll() {
256266
let chain_reader = Arc::new(Mutex::new(FakeChainReader::new(vec![
257267
ChainBlockNextAction::RollForward {
258-
parsed_block: ScannedBlock::new("hash-1", BlockNumber(1), 10, Vec::<&str>::new()),
268+
parsed_block: ScannedBlock::new(
269+
"hash-1",
270+
BlockNumber(1),
271+
SlotNumber(10),
272+
Vec::<&str>::new(),
273+
),
259274
},
260275
ChainBlockNextAction::RollForward {
261-
parsed_block: ScannedBlock::new("hash-2", BlockNumber(2), 20, Vec::<&str>::new()),
276+
parsed_block: ScannedBlock::new(
277+
"hash-2",
278+
BlockNumber(2),
279+
SlotNumber(20),
280+
Vec::<&str>::new(),
281+
),
262282
},
263283
ChainBlockNextAction::RollForward {
264-
parsed_block: ScannedBlock::new("hash-3", BlockNumber(3), 30, Vec::<&str>::new()),
284+
parsed_block: ScannedBlock::new(
285+
"hash-3",
286+
BlockNumber(3),
287+
SlotNumber(30),
288+
Vec::<&str>::new(),
289+
),
265290
},
266291
])));
267292
let mut block_streamer = ChainReaderBlockStreamer::try_new(
@@ -278,8 +303,8 @@ mod tests {
278303
let scanned_blocks = block_streamer.poll_next().await.expect("poll_next failed");
279304
assert_eq!(
280305
Some(ChainScannedBlocks::RollForwards(vec![
281-
ScannedBlock::new("hash-1", BlockNumber(1), 10, Vec::<&str>::new()),
282-
ScannedBlock::new("hash-2", BlockNumber(2), 20, Vec::<&str>::new())
306+
ScannedBlock::new("hash-1", BlockNumber(1), SlotNumber(10), Vec::<&str>::new()),
307+
ScannedBlock::new("hash-2", BlockNumber(2), SlotNumber(20), Vec::<&str>::new())
283308
])),
284309
scanned_blocks,
285310
);
@@ -289,7 +314,7 @@ mod tests {
289314
Some(ChainScannedBlocks::RollForwards(vec![ScannedBlock::new(
290315
"hash-3",
291316
BlockNumber(3),
292-
30,
317+
SlotNumber(30),
293318
Vec::<&str>::new()
294319
),])),
295320
scanned_blocks,
@@ -302,11 +327,17 @@ mod tests {
302327
#[tokio::test]
303328
async fn test_parse_expected_nothing_when_rollbackward_on_same_point() {
304329
let chain_reader = Arc::new(Mutex::new(FakeChainReader::new(vec![
305-
ChainBlockNextAction::RollBackward { slot_number: 100 },
330+
ChainBlockNextAction::RollBackward {
331+
slot_number: SlotNumber(100),
332+
},
306333
])));
307334
let mut block_streamer = ChainReaderBlockStreamer::try_new(
308335
chain_reader,
309-
Some(ChainPoint::new(100, BlockNumber(10), "hash-123")),
336+
Some(ChainPoint::new(
337+
SlotNumber(100),
338+
BlockNumber(10),
339+
"hash-123",
340+
)),
310341
BlockNumber(1),
311342
MAX_ROLL_FORWARDS_PER_POLL,
312343
TestLogger::stdout(),
@@ -322,7 +353,9 @@ mod tests {
322353
async fn test_parse_expected_rollbackward_when_on_different_point_and_no_previous_rollforward()
323354
{
324355
let chain_reader = Arc::new(Mutex::new(FakeChainReader::new(vec![
325-
ChainBlockNextAction::RollBackward { slot_number: 100 },
356+
ChainBlockNextAction::RollBackward {
357+
slot_number: SlotNumber(100),
358+
},
326359
])));
327360
let mut block_streamer = ChainReaderBlockStreamer::try_new(
328361
chain_reader,
@@ -336,7 +369,10 @@ mod tests {
336369

337370
let scanned_blocks = block_streamer.poll_next().await.expect("poll_next failed");
338371

339-
assert_eq!(Some(ChainScannedBlocks::RollBackward(100)), scanned_blocks,);
372+
assert_eq!(
373+
Some(ChainScannedBlocks::RollBackward(SlotNumber(100))),
374+
scanned_blocks,
375+
);
340376

341377
let scanned_blocks = block_streamer.poll_next().await.expect("poll_next failed");
342378
assert_eq!(None, scanned_blocks);
@@ -347,20 +383,32 @@ mod tests {
347383
) {
348384
let chain_reader = Arc::new(Mutex::new(FakeChainReader::new(vec![
349385
ChainBlockNextAction::RollForward {
350-
parsed_block: ScannedBlock::new("hash-8", BlockNumber(80), 8, Vec::<&str>::new()),
386+
parsed_block: ScannedBlock::new(
387+
"hash-8",
388+
BlockNumber(80),
389+
SlotNumber(8),
390+
Vec::<&str>::new(),
391+
),
351392
},
352393
ChainBlockNextAction::RollForward {
353-
parsed_block: ScannedBlock::new("hash-9", BlockNumber(90), 9, Vec::<&str>::new()),
394+
parsed_block: ScannedBlock::new(
395+
"hash-9",
396+
BlockNumber(90),
397+
SlotNumber(9),
398+
Vec::<&str>::new(),
399+
),
354400
},
355401
ChainBlockNextAction::RollForward {
356402
parsed_block: ScannedBlock::new(
357403
"hash-10",
358404
BlockNumber(100),
359-
10,
405+
SlotNumber(10),
360406
Vec::<&str>::new(),
361407
),
362408
},
363-
ChainBlockNextAction::RollBackward { slot_number: 9 },
409+
ChainBlockNextAction::RollBackward {
410+
slot_number: SlotNumber(9),
411+
},
364412
])));
365413
let mut block_streamer = ChainReaderBlockStreamer::try_new(
366414
chain_reader,
@@ -376,8 +424,8 @@ mod tests {
376424

377425
assert_eq!(
378426
Some(ChainScannedBlocks::RollForwards(vec![
379-
ScannedBlock::new("hash-8", BlockNumber(80), 8, Vec::<&str>::new()),
380-
ScannedBlock::new("hash-9", BlockNumber(90), 9, Vec::<&str>::new())
427+
ScannedBlock::new("hash-8", BlockNumber(80), SlotNumber(8), Vec::<&str>::new()),
428+
ScannedBlock::new("hash-9", BlockNumber(90), SlotNumber(9), Vec::<&str>::new())
381429
])),
382430
scanned_blocks,
383431
);
@@ -388,12 +436,24 @@ mod tests {
388436
) {
389437
let chain_reader = Arc::new(Mutex::new(FakeChainReader::new(vec![
390438
ChainBlockNextAction::RollForward {
391-
parsed_block: ScannedBlock::new("hash-8", BlockNumber(80), 8, Vec::<&str>::new()),
439+
parsed_block: ScannedBlock::new(
440+
"hash-8",
441+
BlockNumber(80),
442+
SlotNumber(8),
443+
Vec::<&str>::new(),
444+
),
392445
},
393446
ChainBlockNextAction::RollForward {
394-
parsed_block: ScannedBlock::new("hash-9", BlockNumber(90), 9, Vec::<&str>::new()),
447+
parsed_block: ScannedBlock::new(
448+
"hash-9",
449+
BlockNumber(90),
450+
SlotNumber(9),
451+
Vec::<&str>::new(),
452+
),
453+
},
454+
ChainBlockNextAction::RollBackward {
455+
slot_number: SlotNumber(3),
395456
},
396-
ChainBlockNextAction::RollBackward { slot_number: 3 },
397457
])));
398458
let mut block_streamer = ChainReaderBlockStreamer::try_new(
399459
chain_reader,
@@ -407,7 +467,10 @@ mod tests {
407467

408468
let scanned_blocks = block_streamer.poll_next().await.expect("poll_next failed");
409469

410-
assert_eq!(Some(ChainScannedBlocks::RollBackward(3)), scanned_blocks,);
470+
assert_eq!(
471+
Some(ChainScannedBlocks::RollBackward(SlotNumber(3))),
472+
scanned_blocks,
473+
);
411474
}
412475

413476
#[tokio::test]

mithril-common/src/cardano_block_scanner/dumb_block_scanner.rs

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ mod tests {
122122

123123
use super::*;
124124

125+
use crate::entities::SlotNumber;
126+
125127
#[tokio::test]
126128
async fn polling_without_set_of_block_return_none() {
127129
let mut streamer = DumbBlockStreamer::new().forwards(vec![]);
@@ -134,7 +136,7 @@ mod tests {
134136
let expected_blocks = vec![ScannedBlock::new(
135137
"hash-1",
136138
BlockNumber(1),
137-
10,
139+
SlotNumber(10),
138140
Vec::<&str>::new(),
139141
)];
140142
let mut streamer = DumbBlockStreamer::new().forwards(vec![expected_blocks.clone()]);
@@ -155,17 +157,17 @@ mod tests {
155157
vec![ScannedBlock::new(
156158
"hash-1",
157159
BlockNumber(1),
158-
10,
160+
SlotNumber(10),
159161
Vec::<&str>::new(),
160162
)],
161163
vec![
162-
ScannedBlock::new("hash-2", BlockNumber(2), 11, Vec::<&str>::new()),
163-
ScannedBlock::new("hash-3", BlockNumber(3), 12, Vec::<&str>::new()),
164+
ScannedBlock::new("hash-2", BlockNumber(2), SlotNumber(11), Vec::<&str>::new()),
165+
ScannedBlock::new("hash-3", BlockNumber(3), SlotNumber(12), Vec::<&str>::new()),
164166
],
165167
vec![ScannedBlock::new(
166168
"hash-4",
167169
BlockNumber(4),
168-
13,
170+
SlotNumber(13),
169171
Vec::<&str>::new(),
170172
)],
171173
];
@@ -198,7 +200,7 @@ mod tests {
198200
let expected_blocks = vec![ScannedBlock::new(
199201
"hash-1",
200202
BlockNumber(1),
201-
10,
203+
SlotNumber(10),
202204
Vec::<&str>::new(),
203205
)];
204206

@@ -214,10 +216,10 @@ mod tests {
214216
let expected_blocks = vec![ScannedBlock::new(
215217
"hash-1",
216218
BlockNumber(1),
217-
10,
219+
SlotNumber(10),
218220
Vec::<&str>::new(),
219221
)];
220-
let expected_chain_point = ChainPoint::new(10, BlockNumber(2), "block-hash");
222+
let expected_chain_point = ChainPoint::new(SlotNumber(10), BlockNumber(2), "block-hash");
221223

222224
let scanner = DumbBlockScanner::new()
223225
.forwards(vec![expected_blocks.clone()])
@@ -245,18 +247,18 @@ mod tests {
245247
vec![ScannedBlock::new(
246248
"hash-1",
247249
BlockNumber(1),
248-
10,
250+
SlotNumber(10),
249251
Vec::<&str>::new(),
250252
)],
251253
vec![ScannedBlock::new(
252254
"hash-4",
253255
BlockNumber(4),
254-
13,
256+
SlotNumber(13),
255257
Vec::<&str>::new(),
256258
)],
257259
];
258260

259-
let expected_chain_point = ChainPoint::new(10, BlockNumber(2), "block-hash");
261+
let expected_chain_point = ChainPoint::new(SlotNumber(10), BlockNumber(2), "block-hash");
260262

261263
let mut streamer = DumbBlockStreamer::new()
262264
.forwards(expected_blocks.clone())

mithril-common/src/cardano_block_scanner/scanned_block.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ impl ScannedBlock {
4040
Self::new(
4141
multi_era_block.hash().to_string(),
4242
BlockNumber(multi_era_block.number()),
43-
multi_era_block.slot(),
43+
SlotNumber(multi_era_block.slot()),
4444
transactions,
4545
)
4646
}

mithril-common/src/chain_observer/cli_observer.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use tokio::process::Command;
1212
use crate::chain_observer::interface::{ChainObserver, ChainObserverError};
1313
use crate::chain_observer::{ChainAddress, TxDatum};
1414
use crate::crypto_helper::{encode_bech32, KESPeriod, OpCert, SerDeShelleyFileFormat};
15-
use crate::entities::{BlockNumber, ChainPoint, Epoch, StakeDistribution};
15+
use crate::entities::{BlockNumber, ChainPoint, Epoch, SlotNumber, StakeDistribution};
1616
use crate::{CardanoNetwork, StdResult};
1717

1818
/// `CliRunner` trait defines the asynchronous methods
@@ -445,7 +445,7 @@ impl ChainObserver for CardanoCliChainObserver {
445445

446446
if let Value::String(hash) = &v["hash"] {
447447
Ok(Some(ChainPoint {
448-
slot_number: v["slot"].as_u64().unwrap_or_default(),
448+
slot_number: SlotNumber(v["slot"].as_u64().unwrap_or_default()),
449449
block_number: BlockNumber(v["block"].as_u64().unwrap_or_default()),
450450
block_hash: hash.to_string(),
451451
}))
@@ -539,7 +539,7 @@ mod tests {
539539

540540
assert_eq!(
541541
ChainPoint {
542-
slot_number: 25886617,
542+
slot_number: SlotNumber(25886617),
543543
block_number: BlockNumber(1270276),
544544
block_hash: "7383b17d7b05b0953cf0649abff60173995eb9febe556889333e20e1e5b7ca84"
545545
.to_string(),

0 commit comments

Comments
 (0)