@@ -21,12 +21,14 @@ use crate::test_genesis::test_genesis_setup;
21
21
use crate :: { helpers:: enclave_signer_account, Stf , StfError , ENCLAVE_ACCOUNT_KEY } ;
22
22
use codec:: Encode ;
23
23
use frame_support:: traits:: { OriginTrait , UnfilteredDispatchable } ;
24
+ use ita_sgx_runtime:: Executive ;
24
25
use itp_node_api:: metadata:: {
25
26
pallet_imp:: IMPCallIndexes , pallet_teerex:: TeerexCallIndexes , provider:: AccessNodeMetadata ,
26
27
} ;
27
28
use itp_sgx_externalities:: SgxExternalitiesTrait ;
28
29
use itp_stf_interface:: {
29
30
parentchain_pallet:: ParentchainPalletInterface ,
31
+ runtime_upgrade:: RuntimeUpgradeInterface ,
30
32
sudo_pallet:: SudoPalletInterface ,
31
33
system_pallet:: { SystemPalletAccountInterface , SystemPalletEventInterface } ,
32
34
ExecuteCall , ExecuteGetter , InitState , StateCallInterface , StateGetterInterface , UpdateState ,
@@ -247,6 +249,42 @@ where
247
249
}
248
250
}
249
251
252
+ impl < Call , Getter , State , Runtime > RuntimeUpgradeInterface < State >
253
+ for Stf < Call , Getter , State , Runtime >
254
+ where
255
+ State : SgxExternalitiesTrait ,
256
+ Runtime : frame_system:: Config ,
257
+ {
258
+ type Error = StfError ;
259
+
260
+ fn on_runtime_upgrade ( state : & mut State ) -> Result < ( ) , Self :: Error > {
261
+ // Returns if the runtime was upgraded since the last time this function was called.
262
+ let runtime_upgraded =
263
+ || -> bool {
264
+ let last = frame_system:: LastRuntimeUpgrade :: < Runtime > :: get ( ) ;
265
+ let current = <<Runtime as frame_system:: Config >:: Version as frame_support:: traits:: Get < _ > >:: get ( ) ;
266
+
267
+ if last. map ( |v| v. was_upgraded ( & current) ) . unwrap_or ( true ) {
268
+ frame_system:: LastRuntimeUpgrade :: < Runtime > :: put (
269
+ frame_system:: LastRuntimeUpgradeInfo :: from ( current) ,
270
+ ) ;
271
+ debug ! ( "Do some migraions" ) ;
272
+ true
273
+ } else {
274
+ debug ! ( "No need to migrate" ) ;
275
+ false
276
+ }
277
+ } ;
278
+
279
+ state. execute_with ( || {
280
+ if runtime_upgraded ( ) {
281
+ Executive :: execute_on_runtime_upgrade ( ) ;
282
+ }
283
+ } ) ;
284
+ Ok ( ( ) )
285
+ }
286
+ }
287
+
250
288
pub fn storage_hashes_to_update_per_shard ( _shard : & ShardIdentifier ) -> Vec < Vec < u8 > > {
251
289
Vec :: new ( )
252
290
}
0 commit comments