Skip to content

Commit 632a99b

Browse files
committed
Depreciate signers, next_signers, protocol_parameters and next_protocol_parameters from CertificatePendingMessage`
1 parent aac8161 commit 632a99b

File tree

6 files changed

+74
-36
lines changed

6 files changed

+74
-36
lines changed

mithril-common/src/entities/certificate_pending.rs

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use serde::{Deserialize, Serialize};
22

3-
use crate::entities::{Epoch, PartyId, ProtocolParameters, SignedEntityType, Signer};
3+
use crate::entities::{Epoch, ProtocolParameters, SignedEntityType, Signer};
44

55
/// CertificatePending represents a pending certificate in the process of production
66
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
@@ -46,31 +46,4 @@ impl CertificatePending {
4646
next_signers,
4747
}
4848
}
49-
50-
/// get a signer from the certificate pending if it has registered
51-
pub fn get_signer(&self, party_id: PartyId) -> Option<&Signer> {
52-
self.signers.iter().find(|s| s.party_id == party_id)
53-
}
54-
}
55-
56-
#[cfg(test)]
57-
mod tests {
58-
use crate::test_utils::fake_data;
59-
60-
use super::*;
61-
62-
#[test]
63-
fn certificate_pending_get_signers() {
64-
let certificate_pending = {
65-
let mut signers = fake_data::signers(3);
66-
signers[0].party_id = "1".to_string();
67-
CertificatePending {
68-
signers,
69-
..fake_data::certificate_pending()
70-
}
71-
};
72-
73-
assert!(certificate_pending.get_signer("1".to_string()).is_some());
74-
assert!(certificate_pending.get_signer("5".to_string()).is_none());
75-
}
7649
}

mithril-common/src/messages/certificate_pending.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,33 @@ pub struct CertificatePendingMessage {
1919
pub signed_entity_type: SignedEntityType,
2020

2121
/// Current Protocol parameters
22+
#[deprecated(
23+
since = "0.4.47",
24+
note = "Exist only for backward-compatibility, will be removed in the future"
25+
)]
2226
#[serde(rename = "protocol")]
2327
pub protocol_parameters: ProtocolParameters,
2428

2529
/// Next Protocol parameters
30+
#[deprecated(
31+
since = "0.4.47",
32+
note = "Exist only for backward-compatibility, will be removed in the future"
33+
)]
2634
#[serde(rename = "next_protocol")]
2735
pub next_protocol_parameters: ProtocolParameters,
2836

29-
/// Current Signers
37+
/// Current Signers
38+
#[deprecated(
39+
since = "0.4.47",
40+
note = "Exist only for backward-compatibility, will be removed in the future"
41+
)]
3042
pub signers: Vec<SignerMessagePart>,
3143

3244
/// Signers that will be able to sign on the next epoch
45+
#[deprecated(
46+
since = "0.4.47",
47+
note = "Exist only for backward-compatibility, will be removed in the future"
48+
)]
3349
pub next_signers: Vec<SignerMessagePart>,
3450
}
3551

mithril-signer/src/message_adapters/from_pending_certificate_message.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ impl TryFromMessageAdapter<CertificatePendingMessage, CertificatePending>
5959
let certificate = CertificatePending {
6060
epoch: message.epoch,
6161
signed_entity_type: message.signed_entity_type,
62+
// TODO XXX do not use `message` to fill those fields which must not be used anymore.
6263
protocol_parameters: message.protocol_parameters,
6364
next_protocol_parameters: message.next_protocol_parameters,
6465
signers: to_signers(&message.signers).with_context(|| {

mithril-signer/src/runtime/runner.rs

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -299,9 +299,23 @@ impl Runner for SignerRunner {
299299
return Ok(false);
300300
}
301301

302-
if let Some(signer) =
303-
pending_certificate.get_signer(self.services.single_signer.get_party_id())
304-
{
302+
// TODO XXX How handle errors ? It occurs in test_create_immutable_files_full_single_signature integration test (no signers in epoch 1)
303+
// TODO XXX Do we warn and return "can not sign" or return an error ?
304+
let current_signer_with_stake: Option<SignerWithStake> = {
305+
let epoch_service = self.services.epoch_service.read().await;
306+
let current_signers = epoch_service.current_signers_with_stake().await;
307+
if let Ok(signers) = current_signers {
308+
signers
309+
.iter()
310+
.find(|s| s.party_id == self.services.single_signer.get_party_id())
311+
.cloned()
312+
} else {
313+
warn!(" > could not get current signers with stake, can NOT sign");
314+
return Ok(false);
315+
}
316+
};
317+
318+
if let Some(signer) = current_signer_with_stake {
305319
debug!(" > got a Signer from pending certificate");
306320

307321
if let Some(protocol_initializer) = self
@@ -502,7 +516,7 @@ mod tests {
502516
MKMap, MKMapNode, MKTreeNode, MKTreeStoreInMemory, MKTreeStorer, ProtocolInitializer,
503517
},
504518
digesters::{DumbImmutableDigester, DumbImmutableFileObserver},
505-
entities::{BlockNumber, BlockRange, CardanoDbBeacon, Epoch},
519+
entities::{BlockNumber, BlockRange, CardanoDbBeacon, Epoch, StakeDistribution},
506520
era::{adapters::EraReaderBootstrapAdapter, EraChecker, EraReader},
507521
signable_builder::{
508522
BlockRangeRootRetriever, CardanoImmutableFilesFullSignableBuilder,
@@ -764,16 +778,35 @@ mod tests {
764778

765779
#[tokio::test]
766780
async fn test_can_i_sign() {
781+
let signers_with_stake = fake_data::signers_with_stakes(5);
782+
let signers = Signer::vec_from(signers_with_stake.to_vec());
783+
let stake_distribution = signers_with_stake
784+
.iter()
785+
.map(|signer| (signer.party_id.clone(), signer.stake))
786+
.collect();
787+
788+
let mut current_signers = signers[1..3].to_vec();
789+
let next_signers = signers[2..5].to_vec();
790+
767791
let mut pending_certificate = fake_data::certificate_pending();
792+
pending_certificate.signers = vec![];
793+
pending_certificate.next_signers = vec![];
768794
let epoch = pending_certificate.epoch;
769-
let signer = &mut pending_certificate.signers[0];
770-
// All signed entities are available for signing.
795+
let signer = &mut current_signers[0];
796+
771797
let signed_entity_type_lock = Arc::new(SignedEntityTypeLock::new());
772798
let mut services = init_services().await;
773799
let protocol_initializer_store = services.protocol_initializer_store.clone();
774800
services.single_signer = Arc::new(MithrilSingleSigner::new(signer.party_id.to_owned()));
775801
services.signed_entity_type_lock = signed_entity_type_lock.clone();
776-
let runner = init_runner(Some(services), None).await;
802+
services
803+
.stake_store
804+
.save_stakes(
805+
epoch.offset_to_signer_retrieval_epoch().unwrap(),
806+
stake_distribution,
807+
)
808+
.await
809+
.expect("save_stakes should not fail");
777810

778811
let protocol_initializer = MithrilProtocolInitializerBuilder::build(
779812
&100,
@@ -793,6 +826,16 @@ mod tests {
793826
.await
794827
.expect("save_protocol_initializer should not fail");
795828

829+
let runner = init_runner(Some(services), None).await;
830+
// inform epoch settings
831+
let epoch_settings = EpochSettings {
832+
epoch,
833+
current_signers,
834+
next_signers,
835+
..fake_data::epoch_settings().clone()
836+
};
837+
runner.inform_epoch_settings(epoch_settings).await.unwrap();
838+
796839
let can_i_sign_result = runner.can_i_sign(&pending_certificate).await.unwrap();
797840
assert!(can_i_sign_result);
798841

mithril-signer/src/services/epoch_service.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ impl EpochService for MithrilEpochService {
134134

135135
self.epoch_data = Some(EpochData {
136136
epoch: epoch_settings.epoch,
137+
// TODO XXX Do we need protocol parameters ?
137138
next_protocol_parameters: epoch_settings.next_protocol_parameters,
138139
current_signers: epoch_settings.current_signers,
139140
next_signers: epoch_settings.next_signers,

openapi.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -843,14 +843,18 @@ components:
843843
entity_type:
844844
$ref: "#/components/schemas/SignedEntityType"
845845
protocol:
846+
deprecated: true
846847
$ref: "#/components/schemas/ProtocolParameters"
847848
next_protocol:
849+
deprecated: true
848850
$ref: "#/components/schemas/ProtocolParameters"
849851
signers:
852+
deprecated: true
850853
type: array
851854
items:
852855
$ref: "#/components/schemas/Signer"
853856
next_signers:
857+
deprecated: true
854858
type: array
855859
items:
856860
$ref: "#/components/schemas/Signer"

0 commit comments

Comments
 (0)