@@ -4,17 +4,16 @@ use std::sync::Arc;
4
4
use async_trait:: async_trait;
5
5
use chrono:: prelude:: * ;
6
6
use hex:: ToHex ;
7
- use mithril_common:: chain_observer:: ChainObserver ;
8
7
use slog_scope:: { debug, trace, warn} ;
9
8
use thiserror:: Error ;
10
9
11
10
use mithril_common:: crypto_helper:: {
12
- key_decode_hex, key_encode_hex, KESPeriod , ProtocolAggregateVerificationKey ,
13
- ProtocolAggregationError , ProtocolClerk , ProtocolKeyRegistration , ProtocolMultiSignature ,
14
- ProtocolParameters , ProtocolPartyId , ProtocolRegistrationError , ProtocolSignerVerificationKey ,
11
+ key_decode_hex, key_encode_hex, ProtocolAggregateVerificationKey , ProtocolAggregationError ,
12
+ ProtocolClerk , ProtocolKeyRegistration , ProtocolMultiSignature , ProtocolParameters ,
13
+ ProtocolPartyId , ProtocolRegistrationError , ProtocolSignerVerificationKey ,
15
14
ProtocolSingleSignature , ProtocolStakeDistribution ,
16
15
} ;
17
- use mithril_common:: entities:: { self , Signer , SignerWithStake } ;
16
+ use mithril_common:: entities:: { self , SignerWithStake } ;
18
17
use mithril_common:: store:: { StakeStore , StakeStorer , StoreError } ;
19
18
use mithril_common:: {
20
19
NEXT_SIGNER_EPOCH_RETRIEVAL_OFFSET , SIGNER_EPOCH_RECORDING_OFFSET ,
@@ -79,10 +78,6 @@ pub enum ProtocolError {
79
78
/// Beacon error.
80
79
#[ error( "beacon error: '{0}'" ) ]
81
80
Beacon ( #[ from] entities:: EpochError ) ,
82
-
83
- /// Chain observer error.
84
- #[ error( "chaim observer error: '{0}'" ) ]
85
- ChainObserver ( String ) ,
86
81
}
87
82
88
83
/// MultiSigner is the cryptographic engine in charge of producing multi signatures from individual signatures
@@ -178,9 +173,6 @@ pub trait MultiSigner: Sync + Send {
178
173
}
179
174
}
180
175
181
- /// Register a signer
182
- async fn register_signer ( & mut self , signer : & Signer ) -> Result < ( ) , ProtocolError > ;
183
-
184
176
/// Get signer
185
177
async fn get_signer_verification_key (
186
178
& self ,
@@ -253,9 +245,6 @@ pub struct MultiSignerImpl {
253
245
254
246
/// Protocol parameters store
255
247
protocol_parameters_store : Arc < ProtocolParametersStore > ,
256
-
257
- /// Chain observer
258
- chain_observer : Arc < dyn ChainObserver > ,
259
248
}
260
249
261
250
impl MultiSignerImpl {
@@ -265,7 +254,6 @@ impl MultiSignerImpl {
265
254
stake_store : Arc < StakeStore > ,
266
255
single_signature_store : Arc < SingleSignatureStore > ,
267
256
protocol_parameters_store : Arc < ProtocolParametersStore > ,
268
- chain_observer : Arc < dyn ChainObserver > ,
269
257
) -> Self {
270
258
debug ! ( "New MultiSignerImpl created" ) ;
271
259
Self {
@@ -279,7 +267,6 @@ impl MultiSignerImpl {
279
267
stake_store,
280
268
single_signature_store,
281
269
protocol_parameters_store,
282
- chain_observer,
283
270
}
284
271
}
285
272
@@ -525,70 +512,6 @@ impl MultiSigner for MultiSignerImpl {
525
512
}
526
513
}
527
514
528
- /// Register a signer
529
- async fn register_signer ( & mut self , signer : & Signer ) -> Result < ( ) , ProtocolError > {
530
- debug ! ( "Register signer {}" , signer. party_id) ;
531
-
532
- let epoch = self
533
- . current_beacon
534
- . as_ref ( )
535
- . ok_or_else ( ProtocolError :: UnavailableBeacon ) ?
536
- . epoch
537
- . offset_by ( SIGNER_EPOCH_RECORDING_OFFSET ) ?;
538
-
539
- let stake_distribution = self
540
- . get_stake_distribution_with_epoch_offset ( SIGNER_EPOCH_RECORDING_OFFSET )
541
- . await ?;
542
- let mut key_registration = ProtocolKeyRegistration :: init ( & stake_distribution) ;
543
- let party_id_register = match signer. party_id . as_str ( ) {
544
- "" => None ,
545
- party_id => Some ( party_id. to_string ( ) ) ,
546
- } ;
547
- let verification_key =
548
- key_decode_hex ( & signer. verification_key ) . map_err ( ProtocolError :: Codec ) ?;
549
- let verification_key_signature = match & signer. verification_key_signature {
550
- Some ( verification_key_signature) => {
551
- Some ( key_decode_hex ( verification_key_signature) . map_err ( ProtocolError :: Codec ) ?)
552
- }
553
- _ => None ,
554
- } ;
555
- let operational_certificate = match & signer. operational_certificate {
556
- Some ( operational_certificate) => {
557
- Some ( key_decode_hex ( operational_certificate) . map_err ( ProtocolError :: Codec ) ?)
558
- }
559
- _ => None ,
560
- } ;
561
- let kes_period = match & operational_certificate {
562
- Some ( operational_certificate) => Some (
563
- self . chain_observer
564
- . get_current_kes_period ( operational_certificate)
565
- . await
566
- . map_err ( |e| ProtocolError :: ChainObserver ( e. to_string ( ) ) ) ?
567
- . unwrap_or_default ( )
568
- - operational_certificate. start_kes_period as KESPeriod ,
569
- ) ,
570
- None => None ,
571
- } ;
572
- let party_id_save = key_registration. register (
573
- party_id_register. clone ( ) ,
574
- operational_certificate,
575
- verification_key_signature,
576
- kes_period,
577
- verification_key,
578
- ) ?;
579
- let mut signer_save = signer. to_owned ( ) ;
580
- signer_save. party_id = party_id_save;
581
-
582
- match self
583
- . verification_key_store
584
- . save_verification_key ( epoch, signer_save)
585
- . await ?
586
- {
587
- Some ( _) => Err ( ProtocolError :: ExistingSigner ( ) ) ,
588
- None => Ok ( ( ) ) ,
589
- }
590
- }
591
-
592
515
/// Get signer verification key
593
516
async fn get_signer_verification_key (
594
517
& self ,
@@ -804,7 +727,6 @@ mod tests {
804
727
use crate :: store:: { SingleSignatureStore , VerificationKeyStore } ;
805
728
use crate :: ProtocolParametersStore ;
806
729
807
- use mithril_common:: chain_observer:: FakeObserver ;
808
730
use mithril_common:: crypto_helper:: tests_setup:: * ;
809
731
use mithril_common:: fake_data;
810
732
use mithril_common:: store:: adapter:: MemoryAdapter ;
@@ -859,13 +781,11 @@ mod tests {
859
781
) ,
860
782
None ,
861
783
) ;
862
- let chain_observer = FakeObserver :: default ( ) ;
863
784
let mut multi_signer = MultiSignerImpl :: new (
864
785
Arc :: new ( verification_key_store) ,
865
786
Arc :: new ( stake_store) ,
866
787
Arc :: new ( single_signature_store) ,
867
788
Arc :: new ( protocol_parameters_store) ,
868
- Arc :: new ( chain_observer) ,
869
789
) ;
870
790
871
791
multi_signer
@@ -992,76 +912,11 @@ mod tests {
992
912
assert_eq ! ( stake_distribution_next_expected, stake_distribution) ;
993
913
}
994
914
995
- #[ tokio:: test]
996
- async fn test_multi_signer_register_signer_ok ( ) {
997
- let mut multi_signer = setup_multi_signer ( ) . await ;
998
-
999
- let protocol_parameters_expected = setup_protocol_parameters ( ) ;
1000
- multi_signer
1001
- . update_protocol_parameters ( & protocol_parameters_expected)
1002
- . await
1003
- . expect ( "update protocol parameters failed" ) ;
1004
-
1005
- let signers = setup_signers ( 5 , & protocol_parameters_expected) ;
1006
-
1007
- let stake_distribution_expected: ProtocolStakeDistribution = signers
1008
- . iter ( )
1009
- . map ( |( signer_with_stake, _, _) | {
1010
- (
1011
- signer_with_stake. party_id . to_owned ( ) ,
1012
- signer_with_stake. stake ,
1013
- )
1014
- } )
1015
- . collect :: < _ > ( ) ;
1016
- multi_signer
1017
- . update_stake_distribution ( & stake_distribution_expected)
1018
- . await
1019
- . expect ( "update stake distribution failed" ) ;
1020
-
1021
- for ( signer_with_stake, _, _) in & signers {
1022
- multi_signer
1023
- . register_signer ( & signer_with_stake. to_owned ( ) . into ( ) )
1024
- . await
1025
- . expect ( "register should have succeeded" )
1026
- }
1027
-
1028
- offset_epoch (
1029
- & mut multi_signer,
1030
- ( SIGNER_EPOCH_RECORDING_OFFSET - SIGNER_EPOCH_RETRIEVAL_OFFSET ) as i64 ,
1031
- )
1032
- . await ;
1033
-
1034
- let mut signers_with_stake_all_expected = Vec :: new ( ) ;
1035
- for ( signer_with_stake, _, _) in & signers {
1036
- signers_with_stake_all_expected. push ( signer_with_stake. to_owned ( ) ) ;
1037
- }
1038
- signers_with_stake_all_expected. sort_by_key ( |signer| signer. party_id . to_owned ( ) ) ;
1039
- let signers_all_expected = signers_with_stake_all_expected
1040
- . clone ( )
1041
- . into_iter ( )
1042
- . map ( |signer| signer. into ( ) )
1043
- . collect :: < Vec < entities:: Signer > > ( ) ;
1044
-
1045
- let mut signers_with_stake_all = multi_signer
1046
- . get_signers_with_stake ( )
1047
- . await
1048
- . expect ( "get signers with stake should have been succeeded" ) ;
1049
- signers_with_stake_all. sort_by_key ( |signer| signer. party_id . to_owned ( ) ) ;
1050
-
1051
- assert_eq ! ( signers_with_stake_all_expected, signers_with_stake_all) ;
1052
-
1053
- let mut signers_all = multi_signer
1054
- . get_signers ( )
1055
- . await
1056
- . expect ( "get signers should have been succeeded" ) ;
1057
- signers_all. sort_by_key ( |signer| signer. party_id . to_owned ( ) ) ;
1058
-
1059
- assert_eq ! ( signers_all_expected, signers_all) ;
1060
- }
1061
-
1062
915
#[ tokio:: test]
1063
916
async fn test_multi_signer_multi_signature_ok ( ) {
1064
917
let mut multi_signer = setup_multi_signer ( ) . await ;
918
+ let verification_key_store = multi_signer. verification_key_store . clone ( ) ;
919
+ let start_epoch = multi_signer. current_beacon . as_ref ( ) . unwrap ( ) . epoch ;
1065
920
1066
921
let message = setup_message ( ) ;
1067
922
let protocol_parameters = setup_protocol_parameters ( ) ;
@@ -1086,10 +941,13 @@ mod tests {
1086
941
. await
1087
942
. expect ( "update stake distribution failed" ) ;
1088
943
for ( signer_with_stake, _, _) in & signers {
1089
- multi_signer
1090
- . register_signer ( & signer_with_stake. to_owned ( ) . into ( ) )
944
+ verification_key_store
945
+ . save_verification_key (
946
+ start_epoch. offset_to_recording_epoch ( ) . unwrap ( ) ,
947
+ signer_with_stake. to_owned ( ) . into ( ) ,
948
+ )
1091
949
. await
1092
- . expect ( "register should have succeeded" )
950
+ . expect ( "register should have succeeded" ) ;
1093
951
}
1094
952
1095
953
offset_epoch (
0 commit comments