mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-14 09:51:10 +00:00
Implement runtime version checks in set_code (#4548)
* Implement runtime version checks in `set_code` Check that the new runtime code given to `set_code` fullfills some requirements: - `spec_name` matches - `spec_version` does not decreases - `impl_version` does not decreases - Either `spec_version` and `impl_version` increase * Make tests almost work * Some fixes after master merge * Fix tests * Add missed file * Make depedency check happy? * Remove leftover `sc-executor` * AHHHHH * Reset debug stuff * Remove some 'static * More 'static * Some docs * Update `Cargo.lock`
This commit is contained in:
committed by
Gavin Wood
parent
437772be9e
commit
afc3318f21
@@ -35,7 +35,7 @@ use sp_std::ops::Deref;
|
||||
#[cfg(feature = "std")]
|
||||
use sp_core::{
|
||||
crypto::Pair,
|
||||
traits::KeystoreExt,
|
||||
traits::{KeystoreExt, CallInWasmExt},
|
||||
offchain::{OffchainExt, TransactionPoolExt},
|
||||
hexdisplay::HexDisplay,
|
||||
storage::{ChildStorageKey, ChildInfo},
|
||||
@@ -49,7 +49,7 @@ use sp_core::{
|
||||
};
|
||||
|
||||
#[cfg(feature = "std")]
|
||||
use ::sp_trie::{TrieConfiguration, trie_types::Layout};
|
||||
use sp_trie::{TrieConfiguration, trie_types::Layout};
|
||||
|
||||
use sp_runtime_interface::{runtime_interface, Pointer};
|
||||
|
||||
@@ -351,6 +351,25 @@ pub trait Misc {
|
||||
fn print_hex(data: &[u8]) {
|
||||
log::debug!(target: "runtime", "{}", HexDisplay::from(&data));
|
||||
}
|
||||
|
||||
/// Extract the runtime version of the given wasm blob by calling `Core_version`.
|
||||
///
|
||||
/// Returns the SCALE encoded runtime version and `None` if the call failed.
|
||||
///
|
||||
/// # Performance
|
||||
///
|
||||
/// Calling this function is very expensive and should only be done very occasionally.
|
||||
/// For getting the runtime version, it requires instantiating the wasm blob and calling a
|
||||
/// function in this blob.
|
||||
fn runtime_version(&mut self, wasm: &[u8]) -> Option<Vec<u8>> {
|
||||
// Create some dummy externalities, `Core_version` should not write data anyway.
|
||||
let mut ext = sp_state_machine::BasicExternalities::default();
|
||||
|
||||
self.extension::<CallInWasmExt>()
|
||||
.expect("No `CallInWasmExt` associated for the current context!")
|
||||
.call_in_wasm(wasm, "Core_version", &[], &mut ext)
|
||||
.ok()
|
||||
}
|
||||
}
|
||||
|
||||
/// Interfaces for working with crypto related types from within the runtime.
|
||||
|
||||
Reference in New Issue
Block a user