@@ -4,7 +4,7 @@ use crate::{
44 key_decode_hex, EraMarkersSigner , EraMarkersVerifier , EraMarkersVerifierSignature ,
55 EraMarkersVerifierVerificationKey ,
66 } ,
7- entities:: { Epoch , HexEncodedEraMarkersSignature } ,
7+ entities:: HexEncodedEraMarkersSignature ,
88 era:: { EraMarker , EraReaderAdapter } ,
99} ;
1010use async_trait:: async_trait;
@@ -40,45 +40,11 @@ pub enum EraMarkersPayloadError {
4040 CreateSignature ( GeneralError ) ,
4141}
4242
43- /// Era marker item
44- /// Value object that represents a tag of Era change.
45- #[ derive( Debug , Clone , PartialEq , Eq , Serialize , Deserialize ) ]
46- pub struct EraMarkerItem {
47- /// Era name
48- #[ serde( rename = "n" ) ]
49- pub name : String ,
50-
51- /// Eventual information that advertises the Epoch of transition.
52- #[ serde( rename = "e" ) ]
53- pub epoch : Option < Epoch > ,
54- }
55-
56- impl EraMarkerItem {
57- /// Instantiate a new [EraMarkerItem].
58- pub fn new ( name : & str , epoch : Option < Epoch > ) -> Self {
59- let name = name. to_string ( ) ;
60-
61- Self { name, epoch }
62- }
63- }
64-
65- impl From < EraMarker > for EraMarkerItem {
66- fn from ( other : EraMarker ) -> EraMarkerItem {
67- EraMarkerItem :: new ( & other. name , other. epoch )
68- }
69- }
70-
71- impl From < EraMarkerItem > for EraMarker {
72- fn from ( other : EraMarkerItem ) -> EraMarker {
73- EraMarker :: new ( & other. name , other. epoch )
74- }
75- }
76-
7743/// Era markers payload
7844#[ derive( Debug , Clone , PartialEq , Eq , Serialize , Deserialize ) ]
7945pub struct EraMarkersPayload {
8046 /// List of Era markers
81- pub markers : Vec < EraMarkerItem > ,
47+ pub markers : Vec < EraMarker > ,
8248
8349 /// Era markers signature
8450 pub signature : Option < HexEncodedEraMarkersSignature > ,
@@ -162,27 +128,20 @@ impl EraReaderAdapter for CardanoChainAdapter {
162128 . await ?;
163129 let markers_list = tx_datums
164130 . into_iter ( )
165- . filter_map ( |datum| {
166- match (
167- datum. get_nth_field_by_type ( & TxDatumFieldTypeName :: Bytes , 0 ) ,
168- datum. get_nth_field_by_type ( & TxDatumFieldTypeName :: Bytes , 1 ) ,
169- ) {
170- ( Ok ( markers) , Ok ( signature) ) => {
171- let markers = markers. as_str ( ) . map ( |s| s. to_string ( ) ) . unwrap_or_default ( ) ;
172- let signature = signature. as_str ( ) . map ( |s| s. to_string ( ) ) ;
173- match key_decode_hex :: < Vec < _ > > ( & markers) {
174- Ok ( markers) => EraMarkersPayload {
175- markers : markers. clone ( ) ,
176- signature,
177- }
178- . verify_signature ( self . verification_key )
179- . ok ( )
180- . map ( |_| markers. into_iter ( ) . map ( |em| em. into ( ) ) . collect ( ) ) ,
181- Err ( _) => None ,
182- }
183- }
184- _ => None ,
185- }
131+ . filter_map ( |datum| datum. get_fields_by_type ( & TxDatumFieldTypeName :: Bytes ) . ok ( ) )
132+ . map ( |fields| {
133+ fields
134+ . iter ( )
135+ . filter_map ( |field_value| field_value. as_str ( ) . map ( |s| s. to_string ( ) ) )
136+ . collect :: < Vec < String > > ( )
137+ . join ( "" )
138+ } )
139+ . filter_map ( |field_value_str| key_decode_hex ( & field_value_str) . ok ( ) )
140+ . filter_map ( |era_markers_payload : EraMarkersPayload | {
141+ era_markers_payload
142+ . verify_signature ( self . verification_key )
143+ . ok ( )
144+ . map ( |_| era_markers_payload. markers )
186145 } )
187146 . collect :: < Vec < Vec < EraMarker > > > ( ) ;
188147
@@ -203,12 +162,7 @@ mod test {
203162 . into_iter ( )
204163 . map ( |payload| {
205164 TxDatumBuilder :: new ( )
206- . add_field ( TxDatumFieldValue :: Bytes (
207- key_encode_hex ( payload. markers ) . unwrap ( ) ,
208- ) )
209- . add_field ( TxDatumFieldValue :: Bytes (
210- payload. signature . unwrap_or_default ( ) ,
211- ) )
165+ . add_field ( TxDatumFieldValue :: Bytes ( key_encode_hex ( payload) . unwrap ( ) ) )
212166 . build ( )
213167 . unwrap ( )
214168 } )
@@ -221,15 +175,15 @@ mod test {
221175 let fake_address = "addr_test_123456" . to_string ( ) ;
222176 let era_marker_payload_1 = EraMarkersPayload {
223177 markers : vec ! [
224- EraMarkerItem :: new( "thales" , Some ( Epoch ( 1 ) ) ) ,
225- EraMarkerItem :: new( "pythagoras" , None ) ,
178+ EraMarker :: new( "thales" , Some ( Epoch ( 1 ) ) ) ,
179+ EraMarker :: new( "pythagoras" , None ) ,
226180 ] ,
227181 signature : None ,
228182 } ;
229183 let era_marker_payload_2 = EraMarkersPayload {
230184 markers : vec ! [
231- EraMarkerItem :: new( "thales" , Some ( Epoch ( 1 ) ) ) ,
232- EraMarkerItem :: new( "pythagoras" , Some ( Epoch ( 2 ) ) ) ,
185+ EraMarker :: new( "thales" , Some ( Epoch ( 1 ) ) ) ,
186+ EraMarker :: new( "pythagoras" , Some ( Epoch ( 2 ) ) ) ,
233187 ] ,
234188 signature : None ,
235189 } ;
@@ -252,11 +206,7 @@ mod test {
252206 . read ( )
253207 . await
254208 . expect ( "CardanoChainAdapter read should not fail" ) ;
255- let expected_markers = era_marker_payload_2
256- . markers
257- . into_iter ( )
258- . map ( |em| em. into ( ) )
259- . collect :: < Vec < EraMarker > > ( ) ;
209+ let expected_markers = era_marker_payload_2. markers . to_owned ( ) ;
260210 assert_eq ! ( expected_markers, markers) ;
261211 }
262212}
0 commit comments