1
- use crate :: runtime:: { AggregatorRunnerTrait , RuntimeError } ;
1
+ use crate :: {
2
+ entities:: OpenMessage ,
3
+ runtime:: { AggregatorRunnerTrait , RuntimeError } ,
4
+ } ;
2
5
3
- use mithril_common:: entities:: { Beacon , ProtocolMessage , SignedEntityType } ;
6
+ use mithril_common:: entities:: Beacon ;
4
7
use slog_scope:: { crit, info, trace, warn} ;
5
8
use std:: fmt:: Display ;
6
9
use std:: sync:: Arc ;
@@ -19,8 +22,7 @@ pub struct ReadyState {
19
22
#[ derive( Clone , Debug , PartialEq ) ]
20
23
pub struct SigningState {
21
24
current_beacon : Beacon ,
22
- signed_entity_type : SignedEntityType ,
23
- protocol_message : ProtocolMessage ,
25
+ open_message : OpenMessage ,
24
26
}
25
27
26
28
#[ derive( Clone , Debug , PartialEq ) ]
@@ -179,11 +181,18 @@ impl AggregatorRuntime {
179
181
self . state = AggregatorState :: Idle ( IdleState {
180
182
current_beacon : Some ( state. current_beacon ) ,
181
183
} ) ;
182
- } else if self
184
+ } else if let Some ( open_message ) = self
183
185
. runner
184
- . does_certificate_exist_for_beacon ( & state . current_beacon )
186
+ . get_current_non_certified_open_message ( )
185
187
. await ?
186
- {
188
+ {
189
+ // transition READY > SIGNING
190
+ info ! ( "→ transitioning to SIGNING" ) ;
191
+ let new_state = self
192
+ . transition_from_ready_to_signing ( state. current_beacon , open_message)
193
+ . await ?;
194
+ self . state = AggregatorState :: Signing ( new_state) ;
195
+ } else {
187
196
// READY > READY
188
197
info ! (
189
198
" ⋅ a certificate already exists for this beacon, waiting…" ;
@@ -192,13 +201,6 @@ impl AggregatorRuntime {
192
201
self . state = AggregatorState :: Ready ( ReadyState {
193
202
current_beacon : chain_beacon,
194
203
} ) ;
195
- } else {
196
- // transition READY > SIGNING
197
- info ! ( "→ transitioning to SIGNING" ) ;
198
- let new_state = self
199
- . transition_from_ready_to_signing ( state. current_beacon )
200
- . await ?;
201
- self . state = AggregatorState :: Signing ( new_state) ;
202
204
}
203
205
}
204
206
AggregatorState :: Signing ( state) => {
@@ -274,7 +276,7 @@ impl AggregatorRuntime {
274
276
trace ! ( "launching transition from SIGNING to IDLE state" ) ;
275
277
let certificate = self
276
278
. runner
277
- . create_certificate ( & state. signed_entity_type )
279
+ . create_certificate ( & state. open_message . signed_entity_type )
278
280
. await ?
279
281
. ok_or_else ( || RuntimeError :: KeepState {
280
282
message : "not enough signature yet to create a certificate, waiting…" . to_string ( ) ,
@@ -283,7 +285,7 @@ impl AggregatorRuntime {
283
285
284
286
self . runner . drop_pending_certificate ( ) . await ?;
285
287
self . runner
286
- . create_artifact ( & state. signed_entity_type , & certificate)
288
+ . create_artifact ( & state. open_message . signed_entity_type , & certificate)
287
289
. await ?;
288
290
289
291
Ok ( IdleState {
@@ -310,33 +312,24 @@ impl AggregatorRuntime {
310
312
async fn transition_from_ready_to_signing (
311
313
& mut self ,
312
314
new_beacon : Beacon ,
315
+ open_message : OpenMessage ,
313
316
) -> Result < SigningState , RuntimeError > {
314
317
trace ! ( "launching transition from READY to SIGNING state" ) ;
315
- // TODO: Temporary, we need to compute the signed entity type for other types than Cardano immutable files
316
- let signed_entity_type = SignedEntityType :: CardanoImmutableFilesFull ( new_beacon. clone ( ) ) ;
317
318
self . runner . update_beacon ( & new_beacon) . await ?;
318
319
319
- let protocol_message = self
320
- . runner
321
- . compute_protocol_message ( & signed_entity_type)
322
- . await ?;
323
- self . runner
324
- . create_open_message ( & signed_entity_type, & protocol_message)
325
- . await ?;
326
320
let certificate_pending = self
327
321
. runner
328
322
. create_new_pending_certificate_from_multisigner (
329
323
new_beacon. clone ( ) ,
330
- & signed_entity_type,
324
+ & open_message . signed_entity_type ,
331
325
)
332
326
. await ?;
333
327
self . runner
334
328
. save_pending_certificate ( certificate_pending. clone ( ) )
335
329
. await ?;
336
330
let state = SigningState {
337
331
current_beacon : new_beacon,
338
- signed_entity_type,
339
- protocol_message,
332
+ open_message,
340
333
} ;
341
334
342
335
Ok ( state)
@@ -522,7 +515,7 @@ mod tests {
522
515
}
523
516
524
517
#[ tokio:: test]
525
- pub async fn ready_certificate_already_exist_for_beacon ( ) {
518
+ pub async fn ready_open_message_not_exist ( ) {
526
519
let mut runner = MockAggregatorRunner :: new ( ) ;
527
520
let beacon = fake_data:: beacon ( ) ;
528
521
let next_beacon = Beacon {
@@ -535,9 +528,9 @@ mod tests {
535
528
. once ( )
536
529
. returning ( move || Ok ( next_beacon. clone ( ) ) ) ;
537
530
runner
538
- . expect_does_certificate_exist_for_beacon ( )
531
+ . expect_get_current_non_certified_open_message ( )
539
532
. once ( )
540
- . returning ( |_ | Ok ( true ) ) ;
533
+ . returning ( || Ok ( None ) ) ;
541
534
let mut runtime = init_runtime (
542
535
Some ( AggregatorState :: Ready ( ReadyState {
543
536
current_beacon : beacon. clone ( ) ,
@@ -564,18 +557,20 @@ mod tests {
564
557
. once ( )
565
558
. returning ( || Ok ( fake_data:: beacon ( ) ) ) ;
566
559
runner
567
- . expect_does_certificate_exist_for_beacon ( )
560
+ . expect_get_current_non_certified_open_message ( )
568
561
. once ( )
569
- . returning ( |_| Ok ( false ) ) ;
562
+ . returning ( || {
563
+ let open_message = OpenMessage {
564
+ is_certified : false ,
565
+ ..OpenMessage :: dummy ( )
566
+ } ;
567
+ Ok ( Some ( open_message) )
568
+ } ) ;
570
569
runner
571
570
. expect_update_beacon ( )
572
571
. with ( predicate:: eq ( fake_data:: beacon ( ) ) )
573
572
. once ( )
574
573
. returning ( |_| Ok ( ( ) ) ) ;
575
- runner
576
- . expect_compute_protocol_message ( )
577
- . once ( )
578
- . returning ( |_| Ok ( ProtocolMessage :: new ( ) ) ) ;
579
574
runner
580
575
. expect_create_new_pending_certificate_from_multisigner ( )
581
576
. once ( )
@@ -584,10 +579,6 @@ mod tests {
584
579
. expect_save_pending_certificate ( )
585
580
. once ( )
586
581
. returning ( |_| Ok ( ( ) ) ) ;
587
- runner
588
- . expect_create_open_message ( )
589
- . once ( )
590
- . returning ( |_, _| Ok ( OpenMessage :: dummy ( ) ) ) ;
591
582
592
583
let mut runtime = init_runtime (
593
584
Some ( AggregatorState :: Ready ( ReadyState {
@@ -622,8 +613,7 @@ mod tests {
622
613
623
614
beacon
624
615
} ,
625
- signed_entity_type : SignedEntityType :: dummy ( ) ,
626
- protocol_message : ProtocolMessage :: default ( ) ,
616
+ open_message : OpenMessage :: dummy ( ) ,
627
617
} ;
628
618
let mut runtime = init_runtime ( Some ( AggregatorState :: Signing ( state) ) , runner) . await ;
629
619
runtime. cycle ( ) . await . unwrap ( ) ;
@@ -644,8 +634,7 @@ mod tests {
644
634
. returning ( |_| Ok ( None ) ) ;
645
635
let state = SigningState {
646
636
current_beacon : fake_data:: beacon ( ) ,
647
- signed_entity_type : SignedEntityType :: dummy ( ) ,
648
- protocol_message : ProtocolMessage :: default ( ) ,
637
+ open_message : OpenMessage :: dummy ( ) ,
649
638
} ;
650
639
let mut runtime = init_runtime ( Some ( AggregatorState :: Signing ( state) ) , runner) . await ;
651
640
runtime
@@ -677,8 +666,7 @@ mod tests {
677
666
678
667
let state = SigningState {
679
668
current_beacon : fake_data:: beacon ( ) ,
680
- signed_entity_type : SignedEntityType :: dummy ( ) ,
681
- protocol_message : ProtocolMessage :: default ( ) ,
669
+ open_message : OpenMessage :: dummy ( ) ,
682
670
} ;
683
671
let mut runtime = init_runtime ( Some ( AggregatorState :: Signing ( state) ) , runner) . await ;
684
672
runtime. cycle ( ) . await . unwrap ( ) ;
0 commit comments