Skip to content

Commit 27f09da

Browse files
authored
fix(testnet): metadata api (#511)
* fix(testnet): metadata api * test(mainnet): metadata api * fix: copilot docs improvements
1 parent 69bd47d commit 27f09da

File tree

7 files changed

+622
-554
lines changed

7 files changed

+622
-554
lines changed

Cargo.lock

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ pop-runtime-testnet = { path = "runtime/testnet", default-features = true } # de
8181
frame-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2412", default-features = false }
8282
frame-benchmarking-cli = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2412" }
8383
frame-executive = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2412", default-features = false }
84+
frame-metadata = { version = "18.0.0", default-features = false }
8485
frame-metadata-hash-extension = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2412", default-features = false }
8586
frame-support = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2412", default-features = false }
8687
frame-system = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2412", default-features = false }

runtime/mainnet/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ parachains-common.workspace = true
9494
[dev-dependencies]
9595
enumflags2 = "0.7.9"
9696
env_logger = "0.11.2"
97+
frame-metadata.workspace = true
9798
hex = "0.4.3"
9899
polkadot-runtime-parachains.workspace = true
99100
sp-keyring.workspace = true

runtime/mainnet/src/apis.rs

+39
Original file line numberDiff line numberDiff line change
@@ -505,3 +505,42 @@ impl_runtime_apis! {
505505
}
506506
}
507507
}
508+
509+
#[test]
510+
fn metadata_api_implemented() {
511+
use core::ops::Deref;
512+
513+
use codec::Decode;
514+
use frame_metadata::{RuntimeMetadata, RuntimeMetadataPrefixed};
515+
const V16_UNSTABLE: u32 = u32::MAX;
516+
517+
fn assert<T: sp_api::runtime_decl_for_metadata::Metadata<Block>>() {
518+
let opaque_meta: OpaqueMetadata = T::metadata();
519+
let prefixed_meta = RuntimeMetadataPrefixed::decode(&mut &opaque_meta.deref()[..]).unwrap();
520+
assert_eq!(prefixed_meta, Runtime::metadata());
521+
// Always returns metadata v14:
522+
// https://github.com/paritytech/polkadot-sdk/blob/c36d3066c082b769f20c31dfdbae77d8fd027a0d/substrate/frame/support/procedural/src/construct_runtime/expand/metadata.rs#L151
523+
let RuntimeMetadata::V14(_) = prefixed_meta.1 else {
524+
panic!("Expected metadata V14");
525+
};
526+
527+
assert_eq!(T::metadata_versions(), vec![14, 15, V16_UNSTABLE]);
528+
529+
let version = 15;
530+
let opaque_meta = T::metadata_at_version(version).expect("V15 should exist");
531+
let prefixed_meta_bytes = opaque_meta.deref();
532+
assert_eq!(prefixed_meta_bytes, Runtime::metadata_at_version(version).unwrap().deref());
533+
let prefixed_meta = RuntimeMetadataPrefixed::decode(&mut &prefixed_meta_bytes[..]).unwrap();
534+
// Ensure that we have the V15 variant.
535+
let RuntimeMetadata::V15(metadata) = prefixed_meta.1 else {
536+
panic!("Expected metadata V15");
537+
};
538+
// TODO: This shouldn't be empty and should be resolved with 2503.
539+
assert!(metadata.apis.is_empty());
540+
assert!(!metadata.pallets.is_empty());
541+
542+
// Ensure metadata v16 is not provided.
543+
assert!(T::metadata_at_version(16).is_none());
544+
}
545+
sp_io::TestExternalities::new_empty().execute_with(|| assert::<Runtime>());
546+
}

runtime/testnet/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ pallet-ismp-runtime-api.workspace = true
107107
[dev-dependencies]
108108
enumflags2.workspace = true
109109
env_logger.workspace = true
110+
frame-metadata.workspace = true
110111
hex.workspace = true
111112

112113
[features]

0 commit comments

Comments
 (0)