@@ -4,7 +4,7 @@ use crate::{
4
4
key_decode_hex, EraMarkersSigner , EraMarkersVerifier , EraMarkersVerifierSignature ,
5
5
EraMarkersVerifierVerificationKey ,
6
6
} ,
7
- entities:: { Epoch , HexEncodedEraMarkersSignature } ,
7
+ entities:: HexEncodedEraMarkersSignature ,
8
8
era:: { EraMarker , EraReaderAdapter } ,
9
9
} ;
10
10
use async_trait:: async_trait;
@@ -40,45 +40,11 @@ pub enum EraMarkersPayloadError {
40
40
CreateSignature ( GeneralError ) ,
41
41
}
42
42
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
-
77
43
/// Era markers payload
78
44
#[ derive( Debug , Clone , PartialEq , Eq , Serialize , Deserialize ) ]
79
45
pub struct EraMarkersPayload {
80
46
/// List of Era markers
81
- pub markers : Vec < EraMarkerItem > ,
47
+ pub markers : Vec < EraMarker > ,
82
48
83
49
/// Era markers signature
84
50
pub signature : Option < HexEncodedEraMarkersSignature > ,
@@ -162,27 +128,20 @@ impl EraReaderAdapter for CardanoChainAdapter {
162
128
. await ?;
163
129
let markers_list = tx_datums
164
130
. 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 )
186
145
} )
187
146
. collect :: < Vec < Vec < EraMarker > > > ( ) ;
188
147
@@ -203,12 +162,7 @@ mod test {
203
162
. into_iter ( )
204
163
. map ( |payload| {
205
164
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 ( ) ) )
212
166
. build ( )
213
167
. unwrap ( )
214
168
} )
@@ -221,15 +175,15 @@ mod test {
221
175
let fake_address = "addr_test_123456" . to_string ( ) ;
222
176
let era_marker_payload_1 = EraMarkersPayload {
223
177
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 ) ,
226
180
] ,
227
181
signature : None ,
228
182
} ;
229
183
let era_marker_payload_2 = EraMarkersPayload {
230
184
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 ) ) ) ,
233
187
] ,
234
188
signature : None ,
235
189
} ;
@@ -252,11 +206,7 @@ mod test {
252
206
. read ( )
253
207
. await
254
208
. 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 ( ) ;
260
210
assert_eq ! ( expected_markers, markers) ;
261
211
}
262
212
}
0 commit comments