mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-22 11:27:58 +00:00
Fix codegen validation when Runtime APIs are stripped (#1000)
* modify code gen * cargo fmt * fix return * move the runtime_apis static * small layout change * tidy up metadata UI testing and test validation function too * fix validation tests to point to metadata * update codegen * fix clippy and tests * tweak a comment * rename validate_codegen => is_codegen_valid_for --------- Co-authored-by: James Wilson <james@jsdw.me>
This commit is contained in:
+18
-12
@@ -322,11 +322,14 @@ impl RuntimeGenerator {
|
||||
.collect();
|
||||
let pallet_names_len = pallet_names.len();
|
||||
|
||||
let metadata_hash = self
|
||||
let runtime_api_names: Vec<_> = self
|
||||
.metadata
|
||||
.hasher()
|
||||
.only_these_pallets(&pallet_names)
|
||||
.hash();
|
||||
.runtime_api_traits()
|
||||
.map(|api| api.name().to_string())
|
||||
.collect();
|
||||
let runtime_api_names_len = runtime_api_names.len();
|
||||
|
||||
let metadata_hash = self.metadata.hasher().hash();
|
||||
|
||||
let modules = pallets_with_mod_names
|
||||
.iter()
|
||||
@@ -542,6 +545,9 @@ impl RuntimeGenerator {
|
||||
// Identify the pallets composing the static metadata by name.
|
||||
pub static PALLETS: [&str; #pallet_names_len] = [ #(#pallet_names,)* ];
|
||||
|
||||
// Runtime APIs in the metadata by name.
|
||||
pub static RUNTIME_APIS: [&str; #runtime_api_names_len] = [ #(#runtime_api_names,)* ];
|
||||
|
||||
/// The error type returned when there is a runtime issue.
|
||||
pub type DispatchError = #types_mod_ident::sp_runtime::DispatchError;
|
||||
|
||||
@@ -621,14 +627,14 @@ impl RuntimeGenerator {
|
||||
)*
|
||||
}
|
||||
|
||||
/// check whether the Client you are using is aligned with the statically generated codegen.
|
||||
pub fn validate_codegen<T: #crate_path::Config, C: #crate_path::client::OfflineClientT<T>>(client: &C) -> Result<(), #crate_path::error::MetadataError> {
|
||||
let runtime_metadata_hash = client.metadata().hasher().only_these_pallets(&PALLETS).hash();
|
||||
if runtime_metadata_hash != [ #(#metadata_hash,)* ] {
|
||||
Err(#crate_path::error::MetadataError::IncompatibleCodegen)
|
||||
} else {
|
||||
Ok(())
|
||||
}
|
||||
/// check whether the metadata provided is aligned with this statically generated code.
|
||||
pub fn is_codegen_valid_for(metadata: &#crate_path::Metadata) -> bool {
|
||||
let runtime_metadata_hash = metadata
|
||||
.hasher()
|
||||
.only_these_pallets(&PALLETS)
|
||||
.only_these_runtime_apis(&RUNTIME_APIS)
|
||||
.hash();
|
||||
runtime_metadata_hash == [ #(#metadata_hash,)* ]
|
||||
}
|
||||
|
||||
#( #modules )*
|
||||
|
||||
Reference in New Issue
Block a user