Skip to content

Commit 8c803c3

Browse files
committed
Use a Protocol Avk instead of string in certificate entity
1 parent 90f1f3b commit 8c803c3

File tree

14 files changed

+91
-56
lines changed

14 files changed

+91
-56
lines changed

mithril-aggregator/src/database/provider/certificate.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ impl From<Certificate> for CertificateRecord {
113113
parent_certificate_id,
114114
message: other.signed_message,
115115
signature,
116-
aggregate_verification_key: other.aggregate_verification_key,
116+
aggregate_verification_key: other.aggregate_verification_key.to_json_hex().unwrap(),
117117
epoch: other.beacon.epoch,
118118
beacon: other.beacon,
119119
protocol_version: other.metadata.protocol_version,
@@ -153,7 +153,7 @@ impl From<CertificateRecord> for Certificate {
153153
metadata: certificate_metadata,
154154
signed_message: other.protocol_message.compute_hash(),
155155
protocol_message: other.protocol_message,
156-
aggregate_verification_key: other.aggregate_verification_key,
156+
aggregate_verification_key: other.aggregate_verification_key.try_into().unwrap(),
157157
signature,
158158
}
159159
}

mithril-aggregator/src/message_adapters/to_certificate_list_message.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ impl ToMessageAdapter<Vec<Certificate>, CertificateListMessage>
2727
},
2828
protocol_message: certificate.protocol_message,
2929
signed_message: certificate.signed_message,
30-
aggregate_verification_key: certificate.aggregate_verification_key,
30+
aggregate_verification_key: certificate
31+
.aggregate_verification_key
32+
.to_json_hex()
33+
.unwrap(),
3134
})
3235
.collect()
3336
}
@@ -58,7 +61,10 @@ mod tests {
5861
},
5962
protocol_message: certificate.protocol_message,
6063
signed_message: certificate.signed_message,
61-
aggregate_verification_key: certificate.aggregate_verification_key,
64+
aggregate_verification_key: certificate
65+
.aggregate_verification_key
66+
.to_json_hex()
67+
.unwrap(),
6268
}];
6369

6470
assert_eq!(certificate_list_message_expected, certificate_list_message);

mithril-aggregator/src/message_adapters/to_certificate_message.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@ impl ToMessageAdapter<Certificate, CertificateMessage> for ToCertificateMessageA
3434
metadata,
3535
protocol_message: certificate.protocol_message,
3636
signed_message: certificate.signed_message,
37-
aggregate_verification_key: certificate.aggregate_verification_key,
37+
aggregate_verification_key: certificate
38+
.aggregate_verification_key
39+
.to_json_hex()
40+
.unwrap(),
3841
multi_signature,
3942
genesis_signature,
4043
}

mithril-aggregator/src/multi_signer.rs

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ use mithril_common::{
1111
entities::{self, Epoch, SignerWithStake, StakeDistribution},
1212
protocol::{MultiSigner as ProtocolMultiSigner, SignerBuilder},
1313
store::{StakeStorer, StoreError},
14-
StdError,
1514
};
1615

1716
use crate::{entities::OpenMessage, store::VerificationKeyStorer, ProtocolParametersStorer};
@@ -38,10 +37,6 @@ pub enum ProtocolError {
3837
#[error("single signature already recorded")]
3938
ExistingSingleSignature(entities::PartyId),
4039

41-
/// Codec error.
42-
#[error("codec error: '{0:?}'")]
43-
Codec(StdError),
44-
4540
/// Mithril STM library returned an error.
4641
#[error("core error: '{0}'")]
4742
Core(String),
@@ -122,31 +117,29 @@ pub trait MultiSigner: Sync + Send {
122117
/// Compute stake distribution aggregate verification key
123118
async fn compute_stake_distribution_aggregate_verification_key(
124119
&self,
125-
) -> Result<String, ProtocolError> {
120+
) -> Result<ProtocolAggregateVerificationKey, ProtocolError> {
126121
let signers_with_stake = self.get_signers_with_stake().await?;
127122
let protocol_parameters = self
128123
.get_protocol_parameters()
129124
.await?
130125
.ok_or_else(ProtocolError::UnavailableProtocolParameters)?;
131-
let avk = self
126+
Ok(self
132127
.compute_aggregate_verification_key(&signers_with_stake, &protocol_parameters)
133-
.await?;
134-
Ok(avk.to_json_hex().map_err(ProtocolError::Codec)?)
128+
.await?)
135129
}
136130

137131
/// Compute next stake distribution aggregate verification key
138132
async fn compute_next_stake_distribution_aggregate_verification_key(
139133
&self,
140-
) -> Result<String, ProtocolError> {
134+
) -> Result<ProtocolAggregateVerificationKey, ProtocolError> {
141135
let next_signers_with_stake = self.get_next_signers_with_stake().await?;
142136
let protocol_parameters = self
143137
.get_next_protocol_parameters()
144138
.await?
145139
.ok_or_else(ProtocolError::UnavailableProtocolParameters)?;
146-
let next_avk = self
140+
Ok(self
147141
.compute_aggregate_verification_key(&next_signers_with_stake, &protocol_parameters)
148-
.await?;
149-
Ok(next_avk.to_json_hex().map_err(ProtocolError::Codec)?)
142+
.await?)
150143
}
151144

152145
/// Get signers

mithril-aggregator/src/runtime/runner.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use anyhow::Context;
12
use async_trait::async_trait;
23
use slog_scope::{debug, info, warn};
34
use std::{path::Path, path::PathBuf, sync::Arc};
@@ -369,7 +370,9 @@ impl AggregatorRunnerTrait for AggregatorRunner {
369370
ProtocolMessagePartKey::NextAggregateVerificationKey,
370371
multi_signer
371372
.compute_next_stake_distribution_aggregate_verification_key()
372-
.await?,
373+
.await?
374+
.to_json_hex()
375+
.with_context(|| "convert next avk to json hex failure")?,
373376
);
374377

375378
Ok(protocol_message)

mithril-aggregator/src/tools/genesis.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,6 @@ impl GenesisTools {
8282
let genesis_avk = multi_signer
8383
.compute_next_stake_distribution_aggregate_verification_key()
8484
.await?;
85-
let genesis_avk = ProtocolAggregateVerificationKey::from_json_hex(&genesis_avk)
86-
.with_context(|| "Aggregate verification key decode error")?;
8785

8886
Ok(Self::new(
8987
protocol_parameters,

mithril-aggregator/tests/test_extensions/runtime_tester.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,7 @@ impl RuntimeTester {
416416
let expected_certificate = match signed_entity_record {
417417
None if certificate.is_genesis() => ExpectedCertificate::new_genesis(
418418
certificate.beacon,
419-
certificate.aggregate_verification_key,
419+
certificate.aggregate_verification_key.try_into().unwrap(),
420420
),
421421
None => {
422422
panic!("A certificate should always have a SignedEntity if it's not a genesis certificate");
@@ -429,7 +429,7 @@ impl RuntimeTester {
429429
ExpectedCertificate::new(
430430
certificate.beacon,
431431
&certificate.metadata.signers,
432-
certificate.aggregate_verification_key,
432+
certificate.aggregate_verification_key.try_into().unwrap(),
433433
record.signed_entity_type,
434434
previous_cert_identifier,
435435
)

mithril-client/src/aggregator_client/certificate_client.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,10 @@ mod tests {
108108
},
109109
protocol_message: certificate.protocol_message.clone(),
110110
signed_message: certificate.signed_message.clone(),
111-
aggregate_verification_key: certificate.aggregate_verification_key.clone(),
111+
aggregate_verification_key: certificate
112+
.aggregate_verification_key
113+
.try_into()
114+
.unwrap(),
112115
multi_signature,
113116
genesis_signature,
114117
};

mithril-client/src/message_adapters/from_certificate_message_adapter.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ impl TryFromMessageAdapter<CertificateMessage, Certificate> for FromCertificateM
2727
metadata,
2828
protocol_message: certificate_message.protocol_message,
2929
signed_message: certificate_message.signed_message,
30-
aggregate_verification_key: certificate_message.aggregate_verification_key,
30+
aggregate_verification_key: certificate_message
31+
.aggregate_verification_key
32+
.try_into()?,
3133
signature: if certificate_message.genesis_signature.is_empty() {
3234
CertificateSignature::MultiSignature(
3335
certificate_message.multi_signature.try_into()?,

mithril-common/src/certificate_chain/certificate_genesis.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,6 @@ impl CertificateGenesisProducer {
8888
);
8989
let previous_hash = "".to_string();
9090
let genesis_protocol_message = Self::create_genesis_protocol_message(&genesis_avk)?;
91-
let genesis_avk = genesis_avk
92-
.to_json_hex()
93-
.map_err(CertificateGenesisProducerError::Codec)?;
9491
Ok(Certificate::new(
9592
previous_hash,
9693
beacon,

0 commit comments

Comments
 (0)