Skip to content

Commit 4bd2035

Browse files
committed
Add json hex encode/decode method to EraMarkersPayload
This allow to reduce duplicate usage of `key_encode_hex` of `key_decode_hex`
1 parent ae222f7 commit 4bd2035

File tree

2 files changed

+26
-14
lines changed

2 files changed

+26
-14
lines changed

mithril-aggregator/src/tools/era.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use anyhow::anyhow;
22
use mithril_common::{
33
chain_observer::{TxDatumBuilder, TxDatumFieldValue},
4-
crypto_helper::{key_encode_hex, EraMarkersSigner},
4+
crypto_helper::EraMarkersSigner,
55
entities::Epoch,
66
era::{adapters::EraMarkersPayloadCardanoChain, EraMarker, SupportedEra},
77
StdResult,
@@ -52,11 +52,7 @@ impl EraTools {
5252
.sign(era_markers_signer)?;
5353

5454
let tx_datum = TxDatumBuilder::new()
55-
.add_field(TxDatumFieldValue::Bytes(
56-
key_encode_hex(era_markers_payload).map_err(|e| {
57-
anyhow!(e).context("era markerspayload could not be hex encoded")
58-
})?,
59-
))
55+
.add_field(TxDatumFieldValue::Bytes(era_markers_payload.to_json_hex()?))
6056
.build()?;
6157
Ok(tx_datum.0)
6258
}

mithril-common/src/era/adapters/cardano_chain.rs

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
use crate::{
22
chain_observer::{ChainAddress, ChainObserver, TxDatumFieldTypeName},
33
crypto_helper::{
4-
key_decode_hex, EraMarkersSigner, EraMarkersVerifier, EraMarkersVerifierSignature,
5-
EraMarkersVerifierVerificationKey,
4+
key_decode_hex, key_encode_hex, EraMarkersSigner, EraMarkersVerifier,
5+
EraMarkersVerifierSignature, EraMarkersVerifierVerificationKey,
66
},
77
era::{EraMarker, EraReaderAdapter},
88
StdError, StdResult,
99
};
10+
use anyhow::anyhow;
1011
use async_trait::async_trait;
1112
use serde::{Deserialize, Serialize};
1213
use std::sync::Arc;
@@ -52,6 +53,20 @@ impl EraMarkersPayload {
5253
.map_err(|e| EraMarkersPayloadError::SerializeMessage(e.into()))
5354
}
5455

56+
/// Encode this payload to a json hex string
57+
pub fn to_json_hex(&self) -> StdResult<String> {
58+
key_encode_hex(self)
59+
.map_err(|e| anyhow!(e).context("era markers payload could not be json hex encoded"))
60+
}
61+
62+
/// Decode a [EraMarkersPayload] from a json hex string
63+
pub fn from_json_hex(payload: &str) -> StdResult<Self> {
64+
let payload = key_decode_hex(payload).map_err(|e| {
65+
anyhow!(e).context("era markers payload could not be decoded from json hex")
66+
})?;
67+
Ok(payload)
68+
}
69+
5570
/// Verify the signature an era markers payload
5671
pub fn verify_signature(
5772
&self,
@@ -60,7 +75,8 @@ impl EraMarkersPayload {
6075
let signature = self
6176
.signature
6277
.ok_or(EraMarkersPayloadError::MissingSignature)?;
63-
let markers_verifier = EraMarkersVerifier::from_verification_key(verification_key);
78+
let markers_verifier: EraMarkersVerifier =
79+
EraMarkersVerifier::from_verification_key(verification_key);
6480

6581
markers_verifier
6682
.verify(&self.message_to_bytes()?, &signature)
@@ -121,8 +137,8 @@ impl EraReaderAdapter for CardanoChainAdapter {
121137
.collect::<Vec<String>>()
122138
.join("")
123139
})
124-
.filter_map(|field_value_str| key_decode_hex(&field_value_str).ok())
125-
.filter_map(|era_markers_payload: EraMarkersPayload| {
140+
.filter_map(|field_value_str| EraMarkersPayload::from_json_hex(&field_value_str).ok())
141+
.filter_map(|era_markers_payload| {
126142
era_markers_payload
127143
.verify_signature(self.verification_key)
128144
.ok()
@@ -137,7 +153,7 @@ impl EraReaderAdapter for CardanoChainAdapter {
137153
#[cfg(test)]
138154
mod test {
139155
use crate::chain_observer::{FakeObserver, TxDatum, TxDatumBuilder, TxDatumFieldValue};
140-
use crate::crypto_helper::{key_encode_hex, EraMarkersSigner};
156+
use crate::crypto_helper::EraMarkersSigner;
141157
use crate::entities::Epoch;
142158

143159
use super::*;
@@ -154,7 +170,7 @@ mod test {
154170
.into_iter()
155171
.map(|payload| {
156172
TxDatumBuilder::new()
157-
.add_field(TxDatumFieldValue::Bytes(key_encode_hex(payload).unwrap()))
173+
.add_field(TxDatumFieldValue::Bytes(payload.to_json_hex().unwrap()))
158174
.build()
159175
.unwrap()
160176
})
@@ -163,7 +179,7 @@ mod test {
163179

164180
#[test]
165181
fn golden_markers_payload_with_signature() {
166-
let _: EraMarkersPayload = key_decode_hex(GOLDEN_ERA_MARKERS_PAYLOAD_WITH_SIGNATURE)
182+
EraMarkersPayload::from_json_hex(GOLDEN_ERA_MARKERS_PAYLOAD_WITH_SIGNATURE)
167183
.expect("Decoding golden markers payload should not fail");
168184
}
169185

0 commit comments

Comments
 (0)