36
36
// Runtime-generated enums
37
37
#![ allow( clippy:: large_enum_variant) ]
38
38
39
- use storage_types:: { StoredAuthoritySet , StoredBridgedHeader } ;
39
+ use storage_types:: StoredAuthoritySet ;
40
40
41
41
use bp_header_chain:: { justification:: GrandpaJustification , InitializationData } ;
42
- use bp_runtime:: { BlockNumberOf , Chain , HashOf , HasherOf , HeaderOf , OwnedBridgeModule } ;
42
+ use bp_runtime:: {
43
+ BlockNumberOf , BoundedStorageValue , Chain , HashOf , HasherOf , HeaderOf , OwnedBridgeModule ,
44
+ } ;
43
45
use finality_grandpa:: voter_set:: VoterSet ;
44
46
use frame_support:: { ensure, fail} ;
45
47
use frame_system:: ensure_signed;
@@ -73,6 +75,9 @@ pub type BridgedBlockHash<T, I> = HashOf<<T as Config<I>>::BridgedChain>;
73
75
pub type BridgedBlockHasher < T , I > = HasherOf < <T as Config < I > >:: BridgedChain > ;
74
76
/// Header of the bridged chain.
75
77
pub type BridgedHeader < T , I > = HeaderOf < <T as Config < I > >:: BridgedChain > ;
78
+ /// Stored header of the bridged chain.
79
+ pub type StoredBridgedHeader < T , I > =
80
+ BoundedStorageValue < <T as Config < I > >:: MaxBridgedHeaderSize , BridgedHeader < T , I > > ;
76
81
77
82
#[ frame_support:: pallet]
78
83
pub mod pallet {
@@ -199,8 +204,18 @@ pub mod pallet {
199
204
200
205
let is_authorities_change_enacted =
201
206
try_enact_authority_change :: < T , I > ( & finality_target, set_id) ?;
202
- let finality_target =
203
- StoredBridgedHeader :: < T , I > :: try_from_bridged_header ( * finality_target) ?;
207
+ let finality_target = StoredBridgedHeader :: < T , I > :: try_from_inner ( * finality_target)
208
+ . map_err ( |e| {
209
+ log:: error!(
210
+ target: LOG_TARGET ,
211
+ "Size of header {:?} ({}) is larger that the configured value {}" ,
212
+ hash,
213
+ e. value_size,
214
+ e. maximal_size,
215
+ ) ;
216
+
217
+ Error :: < T , I > :: TooLargeHeader
218
+ } ) ?;
204
219
<RequestCount < T , I > >:: mutate ( |count| * count += 1 ) ;
205
220
insert_header :: < T , I > ( finality_target, hash) ;
206
221
log:: info!(
@@ -504,7 +519,8 @@ pub mod pallet {
504
519
init_params;
505
520
let authority_set = StoredAuthoritySet :: < T , I > :: try_new ( authority_list, set_id)
506
521
. map_err ( |_| Error :: TooManyAuthoritiesInSet ) ?;
507
- let header = StoredBridgedHeader :: < T , I > :: try_from_bridged_header ( * header) ?;
522
+ let header = StoredBridgedHeader :: < T , I > :: try_from_inner ( * header)
523
+ . map_err ( |_| Error :: < T , I > :: TooLargeHeader ) ?;
508
524
509
525
let initial_hash = header. hash ( ) ;
510
526
<InitialHash < T , I > >:: put ( initial_hash) ;
@@ -538,7 +554,7 @@ pub mod pallet {
538
554
) ;
539
555
let hash = header. hash ( ) ;
540
556
insert_header :: < T , I > (
541
- StoredBridgedHeader :: try_from_bridged_header ( header)
557
+ StoredBridgedHeader :: < T , I > :: try_from_inner ( header)
542
558
. expect ( "only used from benchmarks; benchmarks are correct; qed" ) ,
543
559
hash,
544
560
) ;
@@ -553,7 +569,7 @@ impl<T: Config<I>, I: 'static> Pallet<T, I> {
553
569
/// if the pallet has not been initialized yet.
554
570
pub fn best_finalized ( ) -> Option < BridgedHeader < T , I > > {
555
571
let ( _, hash) = <BestFinalized < T , I > >:: get ( ) ?;
556
- <ImportedHeaders < T , I > >:: get ( hash) . map ( |h| h. 0 )
572
+ <ImportedHeaders < T , I > >:: get ( hash) . map ( |h| h. into_inner ( ) )
557
573
}
558
574
559
575
/// Check if a particular header is known to the bridge pallet.
@@ -1103,7 +1119,7 @@ mod tests {
1103
1119
<BestFinalized < TestRuntime > >:: put ( ( 2 , hash) ) ;
1104
1120
<ImportedHeaders < TestRuntime > >:: insert (
1105
1121
hash,
1106
- StoredBridgedHeader :: try_from_bridged_header ( header) . unwrap ( ) ,
1122
+ StoredBridgedHeader :: < TestRuntime , ( ) > :: try_from_inner ( header) . unwrap ( ) ,
1107
1123
) ;
1108
1124
1109
1125
assert_ok ! (
0 commit comments