@@ -53,14 +53,16 @@ mod storage_types;
53
53
use finality_grandpa:: voter_set:: VoterSet ;
54
54
// darwinia-network
55
55
use bp_header_chain:: { justification:: GrandpaJustification , InitializationData } ;
56
- use bp_runtime:: { BlockNumberOf , Chain , HashOf , HasherOf , HeaderOf , OwnedBridgeModule } ;
56
+ use bp_runtime:: {
57
+ BlockNumberOf , BoundedStorageValue , Chain , HashOf , HasherOf , HeaderOf , OwnedBridgeModule ,
58
+ } ;
59
+ use storage_types:: StoredAuthoritySet ;
57
60
// paritytech
58
61
use frame_support:: { ensure, fail, log} ;
59
62
use frame_system:: ensure_signed;
60
63
use sp_finality_grandpa:: { ConsensusLog , GRANDPA_ENGINE_ID } ;
61
64
use sp_runtime:: traits:: { Header as HeaderT , Zero } ;
62
65
use sp_std:: { boxed:: Box , convert:: TryInto } ;
63
- use storage_types:: { StoredAuthoritySet , StoredBridgedHeader } ;
64
66
65
67
/// The target that will be used when publishing logs related to this pallet.
66
68
pub const LOG_TARGET : & str = "runtime::bridge-grandpa" ;
@@ -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 {
@@ -202,8 +207,18 @@ pub mod pallet {
202
207
203
208
let is_authorities_change_enacted =
204
209
try_enact_authority_change :: < T , I > ( & finality_target, set_id) ?;
205
- let finality_target =
206
- StoredBridgedHeader :: < T , I > :: try_from_bridged_header ( * finality_target) ?;
210
+ let finality_target = StoredBridgedHeader :: < T , I > :: try_from_inner ( * finality_target)
211
+ . map_err ( |e| {
212
+ log:: error!(
213
+ target: LOG_TARGET ,
214
+ "Size of header {:?} ({}) is larger that the configured value {}" ,
215
+ hash,
216
+ e. value_size,
217
+ e. maximal_size,
218
+ ) ;
219
+
220
+ Error :: < T , I > :: TooLargeHeader
221
+ } ) ?;
207
222
<RequestCount < T , I > >:: mutate ( |count| * count += 1 ) ;
208
223
insert_header :: < T , I > ( finality_target, hash) ;
209
224
log:: info!(
@@ -507,7 +522,8 @@ pub mod pallet {
507
522
init_params;
508
523
let authority_set = StoredAuthoritySet :: < T , I > :: try_new ( authority_list, set_id)
509
524
. map_err ( |_| Error :: TooManyAuthoritiesInSet ) ?;
510
- let header = StoredBridgedHeader :: < T , I > :: try_from_bridged_header ( * header) ?;
525
+ let header = StoredBridgedHeader :: < T , I > :: try_from_inner ( * header)
526
+ . map_err ( |_| Error :: < T , I > :: TooLargeHeader ) ?;
511
527
512
528
let initial_hash = header. hash ( ) ;
513
529
<InitialHash < T , I > >:: put ( initial_hash) ;
@@ -540,7 +556,7 @@ pub mod pallet {
540
556
) ;
541
557
let hash = header. hash ( ) ;
542
558
insert_header :: < T , I > (
543
- StoredBridgedHeader :: try_from_bridged_header ( header)
559
+ StoredBridgedHeader :: < T , I > :: try_from_inner ( header)
544
560
. expect ( "only used from benchmarks; benchmarks are correct; qed" ) ,
545
561
hash,
546
562
) ;
@@ -556,7 +572,7 @@ impl<T: Config<I>, I: 'static> Pallet<T, I> {
556
572
/// if the pallet has not been initialized yet.
557
573
pub fn best_finalized ( ) -> Option < BridgedHeader < T , I > > {
558
574
let ( _, hash) = <BestFinalized < T , I > >:: get ( ) ?;
559
- <ImportedHeaders < T , I > >:: get ( hash) . map ( |h| h. 0 )
575
+ <ImportedHeaders < T , I > >:: get ( hash) . map ( |h| h. into_inner ( ) )
560
576
}
561
577
562
578
/// Check if a particular header is known to the bridge pallet.
@@ -1106,7 +1122,7 @@ mod tests {
1106
1122
<BestFinalized < TestRuntime > >:: put ( ( 2 , hash) ) ;
1107
1123
<ImportedHeaders < TestRuntime > >:: insert (
1108
1124
hash,
1109
- StoredBridgedHeader :: try_from_bridged_header ( header) . unwrap ( ) ,
1125
+ StoredBridgedHeader :: < TestRuntime , ( ) > :: try_from_inner ( header) . unwrap ( ) ,
1110
1126
) ;
1111
1127
1112
1128
assert_ok ! (
0 commit comments