mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-21 05:05:41 +00:00
Stabilize V15 Metadata (#14481)
* Update frame-metadata to latest branch Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Stabilize V15 Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Update frame-metadata Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Use frame-metadata from crates.io Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Adjust testing Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * test: Adjust frame-support metadata docs Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Update primitives/metadata-ir/src/lib.rs Co-authored-by: James Wilson <james@jsdw.me> --------- Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> Co-authored-by: James Wilson <james@jsdw.me> Co-authored-by: parity-processbot <>
This commit is contained in:
Generated
+2
-2
@@ -2699,9 +2699,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "frame-metadata"
|
name = "frame-metadata"
|
||||||
version = "15.2.0"
|
version = "16.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f2a893ede8dde2293e94dacf9c8f5db5d0506cd909257a8f0ac2b7d610baf50c"
|
checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"]
|
|||||||
serde = { version = "1.0.163", default-features = false, features = ["alloc", "derive"] }
|
serde = { version = "1.0.163", default-features = false, features = ["alloc", "derive"] }
|
||||||
codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive", "max-encoded-len"] }
|
codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive", "max-encoded-len"] }
|
||||||
scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
|
scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
|
||||||
frame-metadata = { version = "15.2.0", default-features = false, features = ["unstable"] }
|
frame-metadata = { version = "16.0.0", default-features = false, features = ["current"] }
|
||||||
sp-api = { version = "4.0.0-dev", default-features = false, path = "../../primitives/api" }
|
sp-api = { version = "4.0.0-dev", default-features = false, path = "../../primitives/api" }
|
||||||
sp-std = { version = "8.0.0", default-features = false, path = "../../primitives/std" }
|
sp-std = { version = "8.0.0", default-features = false, path = "../../primitives/std" }
|
||||||
sp-io = { version = "23.0.0", default-features = false, path = "../../primitives/io" }
|
sp-io = { version = "23.0.0", default-features = false, path = "../../primitives/io" }
|
||||||
|
|||||||
@@ -145,7 +145,9 @@ pub fn expand_runtime_metadata(
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn metadata() -> #scrate::metadata::RuntimeMetadataPrefixed {
|
pub fn metadata() -> #scrate::metadata::RuntimeMetadataPrefixed {
|
||||||
#scrate::metadata_ir::into_latest(#runtime::metadata_ir())
|
// Note: this always returns the V14 version. The runtime API function
|
||||||
|
// must be deprecated.
|
||||||
|
#scrate::metadata_ir::into_v14(#runtime::metadata_ir())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn metadata_at_version(version: u32) -> Option<#scrate::OpaqueMetadata> {
|
pub fn metadata_at_version(version: u32) -> Option<#scrate::OpaqueMetadata> {
|
||||||
|
|||||||
@@ -631,7 +631,7 @@ fn call_subtype_conversion() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_metadata() {
|
fn test_metadata() {
|
||||||
use frame_support::metadata::*;
|
use frame_support::metadata::{v14::*, *};
|
||||||
use scale_info::meta_type;
|
use scale_info::meta_type;
|
||||||
|
|
||||||
let pallets = vec![
|
let pallets = vec![
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ parameter_types! {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Latest stable metadata version used for testing.
|
/// Latest stable metadata version used for testing.
|
||||||
const LATEST_METADATA_VERSION: u32 = 14;
|
const LATEST_METADATA_VERSION: u32 = 15;
|
||||||
|
|
||||||
pub struct SomeType1;
|
pub struct SomeType1;
|
||||||
impl From<SomeType1> for u64 {
|
impl From<SomeType1> for u64 {
|
||||||
@@ -1300,7 +1300,8 @@ fn migrate_from_pallet_version_to_storage_version() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn metadata() {
|
fn metadata() {
|
||||||
use frame_support::metadata::*;
|
use codec::Decode;
|
||||||
|
use frame_support::metadata::{v15::*, *};
|
||||||
|
|
||||||
fn maybe_docs(doc: Vec<&'static str>) -> Vec<&'static str> {
|
fn maybe_docs(doc: Vec<&'static str>) -> Vec<&'static str> {
|
||||||
if cfg!(feature = "no-metadata-docs") {
|
if cfg!(feature = "no-metadata-docs") {
|
||||||
@@ -1310,6 +1311,9 @@ fn metadata() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let readme = "Support code for the runtime.\n\nLicense: Apache-2.0";
|
||||||
|
let expected_pallet_doc = vec![" Pallet documentation", readme, readme];
|
||||||
|
|
||||||
let pallets = vec![
|
let pallets = vec![
|
||||||
PalletMetadata {
|
PalletMetadata {
|
||||||
index: 1,
|
index: 1,
|
||||||
@@ -1570,6 +1574,7 @@ fn metadata() {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
error: Some(PalletErrorMetadata { ty: meta_type::<pallet::Error<Runtime>>() }),
|
error: Some(PalletErrorMetadata { ty: meta_type::<pallet::Error<Runtime>>() }),
|
||||||
|
docs: expected_pallet_doc,
|
||||||
},
|
},
|
||||||
PalletMetadata {
|
PalletMetadata {
|
||||||
index: 2,
|
index: 2,
|
||||||
@@ -1608,6 +1613,7 @@ fn metadata() {
|
|||||||
event: Some(PalletEventMetadata { ty: meta_type::<pallet2::Event>() }),
|
event: Some(PalletEventMetadata { ty: meta_type::<pallet2::Event>() }),
|
||||||
constants: vec![],
|
constants: vec![],
|
||||||
error: None,
|
error: None,
|
||||||
|
docs: vec![],
|
||||||
},
|
},
|
||||||
#[cfg(feature = "frame-feature-testing")]
|
#[cfg(feature = "frame-feature-testing")]
|
||||||
PalletMetadata {
|
PalletMetadata {
|
||||||
@@ -1618,6 +1624,7 @@ fn metadata() {
|
|||||||
event: None,
|
event: None,
|
||||||
constants: vec![],
|
constants: vec![],
|
||||||
error: None,
|
error: None,
|
||||||
|
docs: vec![" Test that the supertrait check works when we pass some parameter to the `frame_system::Config`."],
|
||||||
},
|
},
|
||||||
#[cfg(feature = "frame-feature-testing-2")]
|
#[cfg(feature = "frame-feature-testing-2")]
|
||||||
PalletMetadata {
|
PalletMetadata {
|
||||||
@@ -1628,6 +1635,7 @@ fn metadata() {
|
|||||||
event: None,
|
event: None,
|
||||||
constants: vec![],
|
constants: vec![],
|
||||||
error: None,
|
error: None,
|
||||||
|
docs: vec![" Test that the supertrait check works when we pass some parameter to the `frame_system::Config`."],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -1642,24 +1650,48 @@ fn metadata() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let extrinsic = ExtrinsicMetadata {
|
let extrinsic = ExtrinsicMetadata {
|
||||||
ty: meta_type::<UncheckedExtrinsic>(),
|
|
||||||
version: 4,
|
version: 4,
|
||||||
signed_extensions: vec![SignedExtensionMetadata {
|
signed_extensions: vec![SignedExtensionMetadata {
|
||||||
identifier: "UnitSignedExtension",
|
identifier: "UnitSignedExtension",
|
||||||
ty: meta_type::<()>(),
|
ty: meta_type::<()>(),
|
||||||
additional_signed: meta_type::<()>(),
|
additional_signed: meta_type::<()>(),
|
||||||
}],
|
}],
|
||||||
|
address_ty: meta_type::<<<UncheckedExtrinsic as ExtrinsicT>::SignaturePayload as SignaturePayloadT>::SignatureAddress>(),
|
||||||
|
call_ty: meta_type::<<UncheckedExtrinsic as ExtrinsicT>::Call>(),
|
||||||
|
signature_ty: meta_type::<
|
||||||
|
<<UncheckedExtrinsic as ExtrinsicT>::SignaturePayload as SignaturePayloadT>::Signature
|
||||||
|
>(),
|
||||||
|
extra_ty: meta_type::<<<UncheckedExtrinsic as ExtrinsicT>::SignaturePayload as SignaturePayloadT>::SignatureExtra>(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let expected_metadata: RuntimeMetadataPrefixed =
|
let outer_enums = OuterEnums {
|
||||||
RuntimeMetadataLastVersion::new(pallets, extrinsic, meta_type::<Runtime>()).into();
|
call_enum_ty: meta_type::<RuntimeCall>(),
|
||||||
|
event_enum_ty: meta_type::<RuntimeEvent>(),
|
||||||
|
error_enum_ty: meta_type::<RuntimeError>(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let expected_metadata: RuntimeMetadataPrefixed = RuntimeMetadataLastVersion::new(
|
||||||
|
pallets,
|
||||||
|
extrinsic,
|
||||||
|
meta_type::<Runtime>(),
|
||||||
|
vec![],
|
||||||
|
outer_enums,
|
||||||
|
CustomMetadata { map: Default::default() },
|
||||||
|
)
|
||||||
|
.into();
|
||||||
let expected_metadata = match expected_metadata.1 {
|
let expected_metadata = match expected_metadata.1 {
|
||||||
RuntimeMetadata::V14(metadata) => metadata,
|
RuntimeMetadata::V15(metadata) => metadata,
|
||||||
_ => panic!("metadata has been bumped, test needs to be updated"),
|
_ => panic!("metadata has been bumped, test needs to be updated"),
|
||||||
};
|
};
|
||||||
|
|
||||||
let actual_metadata = match Runtime::metadata().1 {
|
let bytes = &Runtime::metadata_at_version(LATEST_METADATA_VERSION)
|
||||||
RuntimeMetadata::V14(metadata) => metadata,
|
.expect("Metadata must be present; qed");
|
||||||
|
|
||||||
|
let actual_metadata: RuntimeMetadataPrefixed =
|
||||||
|
Decode::decode(&mut &bytes[..]).expect("Metadata encoded properly; qed");
|
||||||
|
|
||||||
|
let actual_metadata = match actual_metadata.1 {
|
||||||
|
RuntimeMetadata::V15(metadata) => metadata,
|
||||||
_ => panic!("metadata has been bumped, test needs to be updated"),
|
_ => panic!("metadata has been bumped, test needs to be updated"),
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1671,8 +1703,9 @@ fn metadata_at_version() {
|
|||||||
use frame_support::metadata::*;
|
use frame_support::metadata::*;
|
||||||
use sp_core::Decode;
|
use sp_core::Decode;
|
||||||
|
|
||||||
|
// Metadata always returns the V14.3
|
||||||
let metadata = Runtime::metadata();
|
let metadata = Runtime::metadata();
|
||||||
let at_metadata = match Runtime::metadata_at_version(LATEST_METADATA_VERSION) {
|
let at_metadata = match Runtime::metadata_at_version(14) {
|
||||||
Some(opaque) => {
|
Some(opaque) => {
|
||||||
let bytes = &*opaque;
|
let bytes = &*opaque;
|
||||||
let metadata: RuntimeMetadataPrefixed = Decode::decode(&mut &bytes[..]).unwrap();
|
let metadata: RuntimeMetadataPrefixed = Decode::decode(&mut &bytes[..]).unwrap();
|
||||||
@@ -1686,7 +1719,7 @@ fn metadata_at_version() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn metadata_versions() {
|
fn metadata_versions() {
|
||||||
assert_eq!(vec![LATEST_METADATA_VERSION, u32::MAX], Runtime::metadata_versions());
|
assert_eq!(vec![14, LATEST_METADATA_VERSION], Runtime::metadata_versions());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
@@ -723,7 +723,7 @@ fn pallet_on_genesis() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn metadata() {
|
fn metadata() {
|
||||||
use frame_support::metadata::*;
|
use frame_support::metadata::{v14::*, *};
|
||||||
|
|
||||||
let system_pallet_metadata = PalletMetadata {
|
let system_pallet_metadata = PalletMetadata {
|
||||||
index: 0,
|
index: 0,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ targets = ["x86_64-unknown-linux-gnu"]
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false }
|
codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false }
|
||||||
frame-metadata = { version = "15.2.0", default-features = false, features = ["unstable"] }
|
frame-metadata = { version = "16.0.0", default-features = false, features = ["current"] }
|
||||||
scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
|
scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
|
||||||
sp-std = { version = "8.0.0", default-features = false, path = "../std" }
|
sp-std = { version = "8.0.0", default-features = false, path = "../std" }
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
pub use frame_metadata;
|
pub use frame_metadata;
|
||||||
|
|
||||||
mod types;
|
mod types;
|
||||||
use frame_metadata::{RuntimeMetadataPrefixed, RuntimeMetadataV14};
|
use frame_metadata::RuntimeMetadataPrefixed;
|
||||||
pub use types::*;
|
pub use types::*;
|
||||||
|
|
||||||
mod v14;
|
mod v14;
|
||||||
@@ -35,25 +35,18 @@ mod v15;
|
|||||||
const V14: u32 = 14;
|
const V14: u32 = 14;
|
||||||
|
|
||||||
/// Metadata V15.
|
/// Metadata V15.
|
||||||
///
|
const V15: u32 = 15;
|
||||||
/// Not yet stable, thus we set it to `u32::MAX`.
|
|
||||||
const V15: u32 = u32::MAX;
|
|
||||||
|
|
||||||
/// Transform the IR to the specified version.
|
/// Transform the IR to the specified version.
|
||||||
///
|
///
|
||||||
/// Use [`supported_versions`] to find supported versions.
|
/// Use [`supported_versions`] to find supported versions.
|
||||||
pub fn into_version(metadata: MetadataIR, version: u32) -> Option<RuntimeMetadataPrefixed> {
|
pub fn into_version(metadata: MetadataIR, version: u32) -> Option<RuntimeMetadataPrefixed> {
|
||||||
|
// Note: Unstable metadata version is `u32::MAX` until stabilized.
|
||||||
match version {
|
match version {
|
||||||
// Latest stable version.
|
// Latest stable version.
|
||||||
V14 => {
|
V14 => Some(into_v14(metadata)),
|
||||||
let v14: frame_metadata::v14::RuntimeMetadataV14 = metadata.into();
|
|
||||||
Some(v14.into())
|
|
||||||
},
|
|
||||||
// Unstable metadata.
|
// Unstable metadata.
|
||||||
V15 => {
|
V15 => Some(into_latest(metadata)),
|
||||||
let v15: frame_metadata::v15::RuntimeMetadataV15 = metadata.into();
|
|
||||||
Some(v15.into())
|
|
||||||
},
|
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -65,7 +58,13 @@ pub fn supported_versions() -> sp_std::vec::Vec<u32> {
|
|||||||
|
|
||||||
/// Transform the IR to the latest stable metadata version.
|
/// Transform the IR to the latest stable metadata version.
|
||||||
pub fn into_latest(metadata: MetadataIR) -> RuntimeMetadataPrefixed {
|
pub fn into_latest(metadata: MetadataIR) -> RuntimeMetadataPrefixed {
|
||||||
let latest: RuntimeMetadataV14 = metadata.into();
|
let latest: frame_metadata::v15::RuntimeMetadataV15 = metadata.into();
|
||||||
|
latest.into()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Transform the IR to metadata version 14.
|
||||||
|
pub fn into_v14(metadata: MetadataIR) -> RuntimeMetadataPrefixed {
|
||||||
|
let latest: frame_metadata::v14::RuntimeMetadataV14 = metadata.into();
|
||||||
latest.into()
|
latest.into()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user