@@ -21,8 +21,11 @@ pub fn retain_keys_for_transcripts<C: CspIDkgProtocol>(
21
21
if active_transcripts. is_empty ( ) {
22
22
return Ok ( ( ) ) ;
23
23
}
24
- let oldest_public_key = oldest_public_key ( csp_client, node_id, registry, active_transcripts)
25
- . expect ( "at least one public key since there is at least one transcript" ) ?;
24
+ let oldest_public_key: MEGaPublicKey =
25
+ match oldest_public_key ( csp_client, node_id, registry, active_transcripts) {
26
+ None => return Ok ( ( ) ) ,
27
+ Some ( oldest_public_key) => oldest_public_key?,
28
+ } ;
26
29
27
30
let internal_transcripts: Result < BTreeSet < _ > , _ > = active_transcripts
28
31
. iter ( )
@@ -43,7 +46,7 @@ fn oldest_public_key<C: CspIDkgProtocol>(
43
46
registry : & dyn RegistryClient ,
44
47
transcripts : & HashSet < IDkgTranscript > ,
45
48
) -> Option < Result < MEGaPublicKey , IDkgRetainKeysError > > {
46
- minimum_registry_version ( transcripts) . map ( |version| {
49
+ minimum_registry_version_for_node ( transcripts, * node_id ) . map ( |version| {
47
50
match get_mega_pubkey ( node_id, registry, version) {
48
51
Ok ( oldest_public_key) => {
49
52
csp_client
@@ -69,9 +72,12 @@ fn oldest_public_key<C: CspIDkgProtocol>(
69
72
} )
70
73
}
71
74
72
- fn minimum_registry_version ( transcripts : & HashSet < IDkgTranscript > ) -> Option < RegistryVersion > {
75
+ fn minimum_registry_version_for_node (
76
+ transcripts : & HashSet < IDkgTranscript > ,
77
+ node_id : NodeId ,
78
+ ) -> Option < RegistryVersion > {
73
79
transcripts
74
80
. iter ( )
75
- . map ( |transcript| transcript . registry_version )
81
+ . filter_map ( |t| t . has_receiver ( node_id ) . then_some ( t . registry_version ) )
76
82
. min ( )
77
83
}
0 commit comments