From a795b62b491d93335ed501736db1ecdfb0fe1390 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Thu, 13 Apr 2023 15:54:10 +0300 Subject: [PATCH] metadata: Convert v14 to v15 Signed-off-by: Alexandru Vasile --- metadata/src/lib.rs | 93 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 92 insertions(+), 1 deletion(-) diff --git a/metadata/src/lib.rs b/metadata/src/lib.rs index 3b31f205e9..49e23d9a04 100644 --- a/metadata/src/lib.rs +++ b/metadata/src/lib.rs @@ -5,10 +5,101 @@ mod retain; mod validation; -pub use sp_metadata_ir as metadata_ir; +use frame_metadata::{v14::RuntimeMetadataV14, v15::RuntimeMetadataV15}; pub use retain::retain_metadata_pallets; pub use validation::{ get_call_hash, get_constant_hash, get_metadata_hash, get_metadata_per_pallet_hash, get_pallet_hash, get_storage_hash, NotFound, }; + +/// Latest runtime metadata version supported by subxt. +pub type LatestRuntimeMetadata = RuntimeMetadataV15; + +/// Convert the metadata V14 to the latest metadata version. +pub fn metadata_v14_to_latest(metadata: RuntimeMetadataV14) -> LatestRuntimeMetadata { + RuntimeMetadataV15 { + types: metadata.types, + pallets: metadata + .pallets + .into_iter() + .map(|pallet| frame_metadata::v15::PalletMetadata { + name: pallet.name, + storage: pallet + .storage + .map(|storage| frame_metadata::v15::PalletStorageMetadata { + prefix: storage.prefix, + entries: storage + .entries + .into_iter() + .map(|entry| { + let modifier = match entry.modifier { + frame_metadata::v14::StorageEntryModifier::Optional => { + frame_metadata::v15::StorageEntryModifier::Optional + } + frame_metadata::v14::StorageEntryModifier::Default => { + frame_metadata::v15::StorageEntryModifier::Default + } + }; + + let ty = match entry.ty { + frame_metadata::v14::StorageEntryType::Plain(ty) => { + frame_metadata::v15::StorageEntryType::Plain(ty) + }, + frame_metadata::v14::StorageEntryType::Map { + hashers, + key, + value, + } => frame_metadata::v15::StorageEntryType::Map { + hashers: hashers.into_iter().map(|hasher| match hasher { + frame_metadata::v14::StorageHasher::Blake2_128 => frame_metadata::v15::StorageHasher::Blake2_128, + frame_metadata::v14::StorageHasher::Blake2_256 => frame_metadata::v15::StorageHasher::Blake2_256, + frame_metadata::v14::StorageHasher::Blake2_128Concat => frame_metadata::v15::StorageHasher::Blake2_128Concat , + frame_metadata::v14::StorageHasher::Twox128 => frame_metadata::v15::StorageHasher::Twox128, + frame_metadata::v14::StorageHasher::Twox256 => frame_metadata::v15::StorageHasher::Twox256, + frame_metadata::v14::StorageHasher::Twox64Concat => frame_metadata::v15::StorageHasher::Twox64Concat, + frame_metadata::v14::StorageHasher::Identity=> frame_metadata::v15::StorageHasher::Identity, + }).collect(), + key, + value, + }, + }; + + frame_metadata::v15::StorageEntryMetadata { + name: entry.name, + modifier, + ty, + default: entry.default, + docs: entry.docs, + } + }) + .collect(), + }), + calls: pallet.calls.map(|calls| frame_metadata::v15::PalletCallMetadata { ty: calls.ty } ), + event: pallet.event.map(|event| frame_metadata::v15::PalletEventMetadata { ty: event.ty } ), + constants: pallet.constants.into_iter().map(|constant| frame_metadata::v15::PalletConstantMetadata { + name: constant.name, + ty: constant.ty, + value: constant.value, + docs: constant.docs, + } ).collect(), + error: pallet.error.map(|error| frame_metadata::v15::PalletErrorMetadata { ty: error.ty } ), + index: pallet.index, + docs: Default::default(), + }) + .collect(), + extrinsic: frame_metadata::v15::ExtrinsicMetadata { + ty: metadata.extrinsic.ty, + version: metadata.extrinsic.version, + signed_extensions: metadata.extrinsic.signed_extensions.into_iter().map(|ext| { + frame_metadata::v15::SignedExtensionMetadata { + identifier: ext.identifier, + ty: ext.ty, + additional_signed: ext.additional_signed, + } + }).collect() + }, + ty: metadata.ty, + apis: Default::default(), + } +}