mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 14:37:57 +00:00
Enrich metadata with type information (#8615)
* Cargo.lock after merge * Restore scale-info feature * Fully qualify TypeInfo derive * Skip PendingSwap T * Add missing skip_type_params attr * metadata docs features * Reduce pallet event attribute to struct * Cargo.lock * Update frame/balances/src/tests_composite.rs Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com> * Line widths check * Cargo.lock * Add scale-info/std * Update frame/system/src/lib.rs Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com> * Use `skip_type_params` to remove `TypeInfo` requirements on checks * Revert "Remove unused Call metadata stuff" This reverts commit 41311f85 * Skip BalanceSwapAction type parameter * Remove unused event metadata macro * Update frame-metadata * Update primitives/npos-elections/compact/src/codec.rs Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com> * Manual TypeInfo for Header * Remove TypeInfo requirement for consts in BoundedVec etc. * Another TypeInfo bound removed * review: fix indentation * TypeInfo impls for Identity types * Add some todos to add custom TypeInfo impls * Update frame/support/procedural/src/pallet/expand/pallet_struct.rs Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com> * Add some todos to add custom TypeInfo impls * Add a test for manual Data TypeInfo impl * Add custom TypeInfo impl for Vote * Era custom TypeInfo crimes * Revert finality-grandpa version to 0.14.z * review: renamed module to pallet_constants_metadata * New line at end of file * Add missing scale-info/std * Update frame/support/src/storage/types/mod.rs Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com> * Remove StorageEntryType::Map unused flag * Add missing scale-info dependency after merge * SignedExtension::AdditionalSigned metadata * Update frame-metadata, use abbreviated docs and args fields * Update frame/example/Cargo.toml Co-authored-by: Keith Yeung <kungfukeith11@gmail.com> * Add scale_info/std and remove unused scale-info dependency * Remove scale-info dependency * Remove treasury pallet::metadata * Remove redundant Event test * Add back scale-info as dev dependency * fix error metadata when no error defined in decl_module * Add Module3 to tests * Fix metadata test * Add docs feature to frame-support test * WIP fixing pallet metadata test * Remove redundant FunctionMetadata, FunctionArgumentMetadata as per https://github.com/paritytech/frame-metadata/pull/20 * Use main branch of frame-metadata * Use patch of scale-info for latest changes * Use latest patched scale-info * Manual TypeInfo for DigestItem * Manual TypeInfo for DigestItem * Update scale-info * Skip __Ignore variants for Error, depends on https://github.com/paritytech/scale-info/pull/117 * Named fields for FRAME v2 pallet Call variants * Named fields for FRAME v1 pallet Call variants * Add missing scale-info dependency * WIP expand benchmark call variant * fix benchmark with new function create a new function for each variant of a pallet call. This function is called by benchmarking macro in order not to break call creation with unnamed argument * fix tests * more fix * Fix staking tests * Fix offchain workers calls * Cherry pick rustfmt.toml from master * cargo +nightly-2021-06-22 fmt --all * Update to new call variant structs * More call variant struct updates * Remove unused import * More call variant structs * More call variant structs * Even more call variant structs * Mooar variant structs * Evermore variant structs * Call variant structs ad infinitum * Fmt * More call variants * Last call variant * Call variants all done? * Fix SS58Prefix type * Potential workaround for BitFlags<IdentityFields> TypeInfo * Enable docs capturing for Call, Event, and Error types * Fix IdentityFields TypeInfo * Remove metadata-docs feature * Add capture_docs = true for legacy Call, Event and Error types * Fmt * Fix metadata test type * Update benchmarks with call struct variants * Fmt * More test fixes * Fmt * Fix benches * Use latest capture_docs attr * Latest scale_info * Fmt * review: change &Vec to &[] * Remove pallet metadata attr * review: remove commented out test code * review: skip_type_params trailing comma suggestion * Update to scale-info 0.10.0 * Update construct_runtime ui tests, different because of metadata TypeInfo impls * Add some TypeInfo derives for UI tests * Update storage ensure span ui stderrs * Update call argument bound ui tests Possibly changed because change from tuple to struct variants? * Add scale-info dev dependency * Update to latest finality-grandpa release * review: missing newline * review: missing scale-info/std * review: remove duplicate scale-info/std * review: remove fully qualified TypeInfo * review: add missing scale-info/std * review: remove unnecessary imports. * Fmt * Use crates.io RC version of frame-metadata * Remove scale-info/std because it is a dev dependency * Add missing scale_info dev-dependency for test * Delete empty metadata folder * Fix sp_std import * review: improve manual UncheckedExtrinsic TypeInfo impl * review: use full scale-info for dev-dependency * Remove DefaultByteGetter impl * review: derive TypeInfo for generic header * Fmt * Update primitives/runtime/src/generic/unchecked_extrinsic.rs Co-authored-by: Keith Yeung <kungfukeith11@gmail.com> * Update primitives/runtime/src/generic/unchecked_extrinsic.rs Co-authored-by: Keith Yeung <kungfukeith11@gmail.com> * Update bin/node/executor/Cargo.toml Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com> * Update frame/identity/src/types.rs Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com> * Update frame/support/src/dispatch.rs Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com> * Remove redundant derive * Simplify scale-info dependency * Strip underscore prefix from call variant struct names * Another underscore field * More underscore fields * Another underscore field * Update to frame-metadata 14.0.0-rc.2 with combined StorageEntryType::Map * Fmt * Revert weights formatting * Fix up some tests * Fix up some tests for StorageEntryTypeMetadata * scale-info dev dependency * Fix test error * Add missing TypeInfo derives * Add back missing scale-info dependency * Add back missing scale-info dependency * Fix npos compact impls * Cargo.lock * Fmt * Fix errors * Fmt * Fix renamed raw_solution field * Fix error * Fmt * Fix some benchmarks * Fmt * Stray R * Fix * Add missing TypeInfos * ui test fix * Fix line widths * Revert "ui test fix" This reverts commit 2d15ec058a216e3f92d713f1174603a2bb1eac65. * Upgrade to scale-info 0.11.0 * Revert "Upgrade to scale-info 0.11.0" This reverts commit 047bb179085a0059c36cd20ab405f55cf0867e28. * Add Runtime type * Update to scale-info 0.12 * Update to scale-info 1.0 * Update frame-metadata to version 14.0.0 * Patch finality-grandpa until release available * Fix metadata tests * Fix metadata tests * Fmt * Remove patched finality-grandpa * Fix tests, use scale_info imports * Fix pallet tests * Add BlockNumber TypeInfo bound * ui test fix * Cargo.lock * Remove pallet metadata * Cargo.lock * Add missing scale-info dependency * Remove pallet event metadata * Fix error * Fix collective errors * Semicolol * Fmt * Remove another metadata attribute * Add new variant to custom digest TypeInfo * Fmt * Cargo.lock from master * Remove comma lol * Fix example call error * Fix example call error properly Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com> Co-authored-by: Keith Yeung <kungfukeith11@gmail.com> Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com> Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
This commit is contained in:
@@ -29,7 +29,7 @@ use sp_runtime::DispatchError;
|
||||
|
||||
#[frame_support::pallet]
|
||||
pub mod pallet {
|
||||
use frame_support::pallet_prelude::*;
|
||||
use frame_support::{pallet_prelude::*, scale_info};
|
||||
use frame_system::pallet_prelude::*;
|
||||
use sp_std::any::TypeId;
|
||||
|
||||
@@ -39,7 +39,7 @@ pub mod pallet {
|
||||
pub trait Config<I: 'static = ()>: frame_system::Config {
|
||||
#[pallet::constant]
|
||||
type MyGetParam: Get<u32>;
|
||||
type Balance: Parameter + Default;
|
||||
type Balance: Parameter + Default + scale_info::StaticTypeInfo;
|
||||
type Event: From<Event<Self, I>> + IsType<<Self as frame_system::Config>::Event>;
|
||||
}
|
||||
|
||||
@@ -109,7 +109,6 @@ pub mod pallet {
|
||||
}
|
||||
|
||||
#[pallet::event]
|
||||
#[pallet::metadata(BalanceOf<T, I> = "Balance", u32 = "Other")]
|
||||
#[pallet::generate_deposit(fn deposit_event)]
|
||||
pub enum Event<T: Config<I>, I: 'static = ()> {
|
||||
/// doc comment put in metadata
|
||||
@@ -157,7 +156,16 @@ pub mod pallet {
|
||||
}
|
||||
|
||||
#[pallet::origin]
|
||||
#[derive(EqNoBound, RuntimeDebugNoBound, CloneNoBound, PartialEqNoBound, Encode, Decode)]
|
||||
#[derive(
|
||||
EqNoBound,
|
||||
RuntimeDebugNoBound,
|
||||
CloneNoBound,
|
||||
PartialEqNoBound,
|
||||
Encode,
|
||||
Decode,
|
||||
scale_info::TypeInfo,
|
||||
)]
|
||||
#[scale_info(skip_type_params(T, I))]
|
||||
pub struct Origin<T, I = ()>(PhantomData<(T, I)>);
|
||||
|
||||
#[pallet::validate_unsigned]
|
||||
@@ -306,7 +314,7 @@ frame_support::construct_runtime!(
|
||||
|
||||
#[test]
|
||||
fn call_expand() {
|
||||
let call_foo = pallet::Call::<Runtime>::foo(3);
|
||||
let call_foo = pallet::Call::<Runtime>::foo { foo: 3 };
|
||||
assert_eq!(
|
||||
call_foo.get_dispatch_info(),
|
||||
DispatchInfo { weight: 3, class: DispatchClass::Normal, pays_fee: Pays::Yes }
|
||||
@@ -314,7 +322,7 @@ fn call_expand() {
|
||||
assert_eq!(call_foo.get_call_name(), "foo");
|
||||
assert_eq!(pallet::Call::<Runtime>::get_call_names(), &["foo", "foo_transactional"]);
|
||||
|
||||
let call_foo = pallet::Call::<Runtime, pallet::Instance1>::foo(3);
|
||||
let call_foo = pallet::Call::<Runtime, pallet::Instance1>::foo { foo: 3 };
|
||||
assert_eq!(
|
||||
call_foo.get_dispatch_info(),
|
||||
DispatchInfo { weight: 3, class: DispatchClass::Normal, pays_fee: Pays::Yes }
|
||||
@@ -369,7 +377,9 @@ fn instance_expand() {
|
||||
fn pallet_expand_deposit_event() {
|
||||
TestExternalities::default().execute_with(|| {
|
||||
frame_system::Pallet::<Runtime>::set_block_number(1);
|
||||
pallet::Call::<Runtime>::foo(3).dispatch_bypass_filter(None.into()).unwrap();
|
||||
pallet::Call::<Runtime>::foo { foo: 3 }
|
||||
.dispatch_bypass_filter(None.into())
|
||||
.unwrap();
|
||||
assert_eq!(
|
||||
frame_system::Pallet::<Runtime>::events()[0].event,
|
||||
Event::Example(pallet::Event::Something(3)),
|
||||
@@ -378,7 +388,7 @@ fn pallet_expand_deposit_event() {
|
||||
|
||||
TestExternalities::default().execute_with(|| {
|
||||
frame_system::Pallet::<Runtime>::set_block_number(1);
|
||||
pallet::Call::<Runtime, pallet::Instance1>::foo(3)
|
||||
pallet::Call::<Runtime, pallet::Instance1>::foo { foo: 3 }
|
||||
.dispatch_bypass_filter(None.into())
|
||||
.unwrap();
|
||||
assert_eq!(
|
||||
@@ -544,183 +554,207 @@ fn pallet_on_genesis() {
|
||||
|
||||
#[test]
|
||||
fn metadata() {
|
||||
use codec::{Decode, Encode};
|
||||
use frame_metadata::*;
|
||||
use frame_support::metadata::*;
|
||||
|
||||
let expected_pallet_metadata = ModuleMetadata {
|
||||
index: 1,
|
||||
name: DecodeDifferent::Decoded("Example".to_string()),
|
||||
storage: Some(DecodeDifferent::Decoded(StorageMetadata {
|
||||
prefix: DecodeDifferent::Decoded("Example".to_string()),
|
||||
entries: DecodeDifferent::Decoded(vec![
|
||||
StorageEntryMetadata {
|
||||
name: DecodeDifferent::Decoded("Value".to_string()),
|
||||
modifier: StorageEntryModifier::Optional,
|
||||
ty: StorageEntryType::Plain(DecodeDifferent::Decoded("u32".to_string())),
|
||||
default: DecodeDifferent::Decoded(vec![0]),
|
||||
documentation: DecodeDifferent::Decoded(vec![]),
|
||||
},
|
||||
StorageEntryMetadata {
|
||||
name: DecodeDifferent::Decoded("Map".to_string()),
|
||||
modifier: StorageEntryModifier::Optional,
|
||||
ty: StorageEntryType::Map {
|
||||
key: DecodeDifferent::Decoded("u8".to_string()),
|
||||
value: DecodeDifferent::Decoded("u16".to_string()),
|
||||
hasher: StorageHasher::Blake2_128Concat,
|
||||
unused: false,
|
||||
},
|
||||
default: DecodeDifferent::Decoded(vec![0]),
|
||||
documentation: DecodeDifferent::Decoded(vec![]),
|
||||
},
|
||||
StorageEntryMetadata {
|
||||
name: DecodeDifferent::Decoded("Map2".to_string()),
|
||||
modifier: StorageEntryModifier::Optional,
|
||||
ty: StorageEntryType::Map {
|
||||
key: DecodeDifferent::Decoded("u16".to_string()),
|
||||
value: DecodeDifferent::Decoded("u32".to_string()),
|
||||
hasher: StorageHasher::Twox64Concat,
|
||||
unused: false,
|
||||
},
|
||||
default: DecodeDifferent::Decoded(vec![0]),
|
||||
documentation: DecodeDifferent::Decoded(vec![]),
|
||||
},
|
||||
StorageEntryMetadata {
|
||||
name: DecodeDifferent::Decoded("DoubleMap".to_string()),
|
||||
modifier: StorageEntryModifier::Optional,
|
||||
ty: StorageEntryType::DoubleMap {
|
||||
value: DecodeDifferent::Decoded("u32".to_string()),
|
||||
key1: DecodeDifferent::Decoded("u8".to_string()),
|
||||
key2: DecodeDifferent::Decoded("u16".to_string()),
|
||||
hasher: StorageHasher::Blake2_128Concat,
|
||||
key2_hasher: StorageHasher::Twox64Concat,
|
||||
},
|
||||
default: DecodeDifferent::Decoded(vec![0]),
|
||||
documentation: DecodeDifferent::Decoded(vec![]),
|
||||
},
|
||||
StorageEntryMetadata {
|
||||
name: DecodeDifferent::Decoded("DoubleMap2".to_string()),
|
||||
modifier: StorageEntryModifier::Optional,
|
||||
ty: StorageEntryType::DoubleMap {
|
||||
value: DecodeDifferent::Decoded("u64".to_string()),
|
||||
key1: DecodeDifferent::Decoded("u16".to_string()),
|
||||
key2: DecodeDifferent::Decoded("u32".to_string()),
|
||||
hasher: StorageHasher::Twox64Concat,
|
||||
key2_hasher: StorageHasher::Blake2_128Concat,
|
||||
},
|
||||
default: DecodeDifferent::Decoded(vec![0]),
|
||||
documentation: DecodeDifferent::Decoded(vec![]),
|
||||
},
|
||||
StorageEntryMetadata {
|
||||
name: DecodeDifferent::Decoded("NMap".to_string()),
|
||||
modifier: StorageEntryModifier::Optional,
|
||||
ty: StorageEntryType::NMap {
|
||||
keys: DecodeDifferent::Decoded(vec!["u8".to_string()]),
|
||||
hashers: DecodeDifferent::Decoded(vec![StorageHasher::Blake2_128Concat]),
|
||||
value: DecodeDifferent::Decoded("u32".to_string()),
|
||||
},
|
||||
default: DecodeDifferent::Decoded(vec![0]),
|
||||
documentation: DecodeDifferent::Decoded(vec![]),
|
||||
},
|
||||
StorageEntryMetadata {
|
||||
name: DecodeDifferent::Decoded("NMap2".to_string()),
|
||||
modifier: StorageEntryModifier::Optional,
|
||||
ty: StorageEntryType::NMap {
|
||||
keys: DecodeDifferent::Decoded(vec!["u16".to_string(), "u32".to_string()]),
|
||||
hashers: DecodeDifferent::Decoded(vec![
|
||||
StorageHasher::Twox64Concat,
|
||||
StorageHasher::Blake2_128Concat,
|
||||
]),
|
||||
value: DecodeDifferent::Decoded("u64".to_string()),
|
||||
},
|
||||
default: DecodeDifferent::Decoded(vec![0]),
|
||||
documentation: DecodeDifferent::Decoded(vec![]),
|
||||
},
|
||||
]),
|
||||
})),
|
||||
calls: Some(DecodeDifferent::Decoded(vec![
|
||||
FunctionMetadata {
|
||||
name: DecodeDifferent::Decoded("foo".to_string()),
|
||||
arguments: DecodeDifferent::Decoded(vec![FunctionArgumentMetadata {
|
||||
name: DecodeDifferent::Decoded("_foo".to_string()),
|
||||
ty: DecodeDifferent::Decoded("Compact<u32>".to_string()),
|
||||
}]),
|
||||
documentation: DecodeDifferent::Decoded(vec![
|
||||
" Doc comment put in metadata".to_string()
|
||||
]),
|
||||
let system_pallet_metadata = PalletMetadata {
|
||||
index: 0,
|
||||
name: "System",
|
||||
storage: None,
|
||||
calls: Some(scale_info::meta_type::<frame_system::Call<Runtime>>().into()),
|
||||
event: Some(PalletEventMetadata {
|
||||
ty: scale_info::meta_type::<frame_system::Event<Runtime>>(),
|
||||
}),
|
||||
constants: vec![
|
||||
PalletConstantMetadata {
|
||||
name: "BlockWeights",
|
||||
ty: scale_info::meta_type::<frame_system::limits::BlockWeights>(),
|
||||
value: vec![],
|
||||
docs: vec![],
|
||||
},
|
||||
FunctionMetadata {
|
||||
name: DecodeDifferent::Decoded("foo_transactional".to_string()),
|
||||
arguments: DecodeDifferent::Decoded(vec![FunctionArgumentMetadata {
|
||||
name: DecodeDifferent::Decoded("_foo".to_string()),
|
||||
ty: DecodeDifferent::Decoded("Compact<u32>".to_string()),
|
||||
}]),
|
||||
documentation: DecodeDifferent::Decoded(vec![
|
||||
" Doc comment put in metadata".to_string()
|
||||
]),
|
||||
PalletConstantMetadata {
|
||||
name: "BlockLength",
|
||||
ty: scale_info::meta_type::<frame_system::limits::BlockLength>(),
|
||||
value: vec![],
|
||||
docs: vec![],
|
||||
},
|
||||
])),
|
||||
event: Some(DecodeDifferent::Decoded(vec![
|
||||
EventMetadata {
|
||||
name: DecodeDifferent::Decoded("Proposed".to_string()),
|
||||
arguments: DecodeDifferent::Decoded(vec![
|
||||
"<T as frame_system::Config>::AccountId".to_string()
|
||||
]),
|
||||
documentation: DecodeDifferent::Decoded(vec![
|
||||
" doc comment put in metadata".to_string()
|
||||
]),
|
||||
PalletConstantMetadata {
|
||||
name: "BlockHashCount",
|
||||
ty: scale_info::meta_type::<u32>(),
|
||||
value: vec![],
|
||||
docs: vec![],
|
||||
},
|
||||
EventMetadata {
|
||||
name: DecodeDifferent::Decoded("Spending".to_string()),
|
||||
arguments: DecodeDifferent::Decoded(vec!["Balance".to_string()]),
|
||||
documentation: DecodeDifferent::Decoded(vec![" doc".to_string()]),
|
||||
PalletConstantMetadata {
|
||||
name: "DbWeight",
|
||||
ty: scale_info::meta_type::<frame_support::weights::RuntimeDbWeight>(),
|
||||
value: vec![],
|
||||
docs: vec![],
|
||||
},
|
||||
EventMetadata {
|
||||
name: DecodeDifferent::Decoded("Something".to_string()),
|
||||
arguments: DecodeDifferent::Decoded(vec!["Other".to_string()]),
|
||||
documentation: DecodeDifferent::Decoded(vec![]),
|
||||
PalletConstantMetadata {
|
||||
name: "Version",
|
||||
ty: scale_info::meta_type::<sp_version::RuntimeVersion>(),
|
||||
value: vec![],
|
||||
docs: vec![],
|
||||
},
|
||||
])),
|
||||
constants: DecodeDifferent::Decoded(vec![ModuleConstantMetadata {
|
||||
name: DecodeDifferent::Decoded("MyGetParam".to_string()),
|
||||
ty: DecodeDifferent::Decoded("u32".to_string()),
|
||||
value: DecodeDifferent::Decoded(vec![10, 0, 0, 0]),
|
||||
documentation: DecodeDifferent::Decoded(vec![]),
|
||||
}]),
|
||||
errors: DecodeDifferent::Decoded(vec![ErrorMetadata {
|
||||
name: DecodeDifferent::Decoded("InsufficientProposersBalance".to_string()),
|
||||
documentation: DecodeDifferent::Decoded(vec![
|
||||
" doc comment put into metadata".to_string()
|
||||
]),
|
||||
}]),
|
||||
PalletConstantMetadata {
|
||||
name: "SS58Prefix",
|
||||
ty: scale_info::meta_type::<u16>(),
|
||||
value: vec![],
|
||||
docs: vec![],
|
||||
},
|
||||
],
|
||||
error: Some(PalletErrorMetadata {
|
||||
ty: scale_info::meta_type::<frame_system::Error<Runtime>>(),
|
||||
}),
|
||||
};
|
||||
|
||||
let mut expected_pallet_instance1_metadata = expected_pallet_metadata.clone();
|
||||
expected_pallet_instance1_metadata.name =
|
||||
DecodeDifferent::Decoded("Instance1Example".to_string());
|
||||
expected_pallet_instance1_metadata.index = 2;
|
||||
match expected_pallet_instance1_metadata.storage {
|
||||
Some(DecodeDifferent::Decoded(ref mut storage_meta)) => {
|
||||
storage_meta.prefix = DecodeDifferent::Decoded("Instance1Example".to_string());
|
||||
let example_pallet_metadata = PalletMetadata {
|
||||
index: 1,
|
||||
name: "Example",
|
||||
storage: Some(PalletStorageMetadata {
|
||||
prefix: "Example",
|
||||
entries: vec![
|
||||
StorageEntryMetadata {
|
||||
name: "Value",
|
||||
modifier: StorageEntryModifier::Optional,
|
||||
ty: StorageEntryType::Plain(scale_info::meta_type::<u32>()),
|
||||
default: vec![0],
|
||||
docs: vec![],
|
||||
},
|
||||
StorageEntryMetadata {
|
||||
name: "Map",
|
||||
modifier: StorageEntryModifier::Optional,
|
||||
ty: StorageEntryType::Map {
|
||||
key: scale_info::meta_type::<u8>(),
|
||||
value: scale_info::meta_type::<u16>(),
|
||||
hashers: vec![StorageHasher::Blake2_128Concat],
|
||||
},
|
||||
default: vec![0],
|
||||
docs: vec![],
|
||||
},
|
||||
StorageEntryMetadata {
|
||||
name: "Map2",
|
||||
modifier: StorageEntryModifier::Optional,
|
||||
ty: StorageEntryType::Map {
|
||||
key: scale_info::meta_type::<u16>(),
|
||||
value: scale_info::meta_type::<u32>(),
|
||||
hashers: vec![StorageHasher::Twox64Concat],
|
||||
},
|
||||
default: vec![0],
|
||||
docs: vec![],
|
||||
},
|
||||
StorageEntryMetadata {
|
||||
name: "DoubleMap",
|
||||
modifier: StorageEntryModifier::Optional,
|
||||
ty: StorageEntryType::Map {
|
||||
value: scale_info::meta_type::<u32>(),
|
||||
key: scale_info::meta_type::<(u8, u16)>(),
|
||||
hashers: vec![StorageHasher::Blake2_128Concat, StorageHasher::Twox64Concat],
|
||||
},
|
||||
default: vec![0],
|
||||
docs: vec![],
|
||||
},
|
||||
StorageEntryMetadata {
|
||||
name: "DoubleMap2",
|
||||
modifier: StorageEntryModifier::Optional,
|
||||
ty: StorageEntryType::Map {
|
||||
value: scale_info::meta_type::<u64>(),
|
||||
key: scale_info::meta_type::<(u16, u32)>(),
|
||||
hashers: vec![StorageHasher::Twox64Concat, StorageHasher::Blake2_128Concat],
|
||||
},
|
||||
default: vec![0],
|
||||
docs: vec![],
|
||||
},
|
||||
StorageEntryMetadata {
|
||||
name: "NMap",
|
||||
modifier: StorageEntryModifier::Optional,
|
||||
ty: StorageEntryType::Map {
|
||||
key: scale_info::meta_type::<u8>(),
|
||||
hashers: vec![StorageHasher::Blake2_128Concat],
|
||||
value: scale_info::meta_type::<u32>(),
|
||||
},
|
||||
default: vec![0],
|
||||
docs: vec![],
|
||||
},
|
||||
StorageEntryMetadata {
|
||||
name: "NMap2",
|
||||
modifier: StorageEntryModifier::Optional,
|
||||
ty: StorageEntryType::Map {
|
||||
key: scale_info::meta_type::<(u16, u32)>(),
|
||||
hashers: vec![StorageHasher::Twox64Concat, StorageHasher::Blake2_128Concat],
|
||||
value: scale_info::meta_type::<u64>(),
|
||||
},
|
||||
default: vec![0],
|
||||
docs: vec![],
|
||||
},
|
||||
],
|
||||
}),
|
||||
calls: Some(scale_info::meta_type::<pallet::Call<Runtime>>().into()),
|
||||
event: Some(PalletEventMetadata { ty: scale_info::meta_type::<pallet::Event<Runtime>>() }),
|
||||
constants: vec![PalletConstantMetadata {
|
||||
name: "MyGetParam",
|
||||
ty: scale_info::meta_type::<u32>(),
|
||||
value: vec![10, 0, 0, 0],
|
||||
docs: vec![],
|
||||
}],
|
||||
error: Some(PalletErrorMetadata { ty: scale_info::meta_type::<pallet::Error<Runtime>>() }),
|
||||
};
|
||||
|
||||
let mut example_pallet_instance1_metadata = example_pallet_metadata.clone();
|
||||
example_pallet_instance1_metadata.name = "Instance1Example";
|
||||
example_pallet_instance1_metadata.index = 2;
|
||||
match example_pallet_instance1_metadata.calls {
|
||||
Some(ref mut calls_meta) => {
|
||||
calls_meta.ty = scale_info::meta_type::<pallet::Call<Runtime, pallet::Instance1>>();
|
||||
},
|
||||
_ => unreachable!(),
|
||||
}
|
||||
match example_pallet_instance1_metadata.event {
|
||||
Some(ref mut event_meta) => {
|
||||
event_meta.ty = scale_info::meta_type::<pallet::Event<Runtime, pallet::Instance1>>();
|
||||
},
|
||||
_ => unreachable!(),
|
||||
}
|
||||
match example_pallet_instance1_metadata.error {
|
||||
Some(ref mut error_meta) => {
|
||||
error_meta.ty = scale_info::meta_type::<pallet::Error<Runtime, pallet::Instance1>>();
|
||||
},
|
||||
_ => unreachable!(),
|
||||
}
|
||||
match example_pallet_instance1_metadata.storage {
|
||||
Some(ref mut storage_meta) => {
|
||||
storage_meta.prefix = "Instance1Example";
|
||||
},
|
||||
_ => unreachable!(),
|
||||
}
|
||||
|
||||
let metadata = match Runtime::metadata().1 {
|
||||
RuntimeMetadata::V13(metadata) => metadata,
|
||||
_ => panic!("metadata has been bump, test needs to be updated"),
|
||||
let pallets =
|
||||
vec![system_pallet_metadata, example_pallet_metadata, example_pallet_instance1_metadata];
|
||||
|
||||
let extrinsic = ExtrinsicMetadata {
|
||||
ty: scale_info::meta_type::<UncheckedExtrinsic>(),
|
||||
version: 4,
|
||||
signed_extensions: vec![SignedExtensionMetadata {
|
||||
identifier: "UnitSignedExtension",
|
||||
ty: scale_info::meta_type::<()>(),
|
||||
additional_signed: scale_info::meta_type::<()>(),
|
||||
}],
|
||||
};
|
||||
|
||||
let modules_metadata = match metadata.modules {
|
||||
DecodeDifferent::Encode(modules_metadata) => modules_metadata,
|
||||
_ => unreachable!(),
|
||||
let expected_metadata: RuntimeMetadataPrefixed =
|
||||
RuntimeMetadataLastVersion::new(pallets, extrinsic, scale_info::meta_type::<Runtime>())
|
||||
.into();
|
||||
let expected_metadata = match expected_metadata.1 {
|
||||
RuntimeMetadata::V14(metadata) => metadata,
|
||||
_ => panic!("metadata has been bumped, test needs to be updated"),
|
||||
};
|
||||
|
||||
let pallet_metadata = ModuleMetadata::decode(&mut &modules_metadata[1].encode()[..]).unwrap();
|
||||
let pallet_instance1_metadata =
|
||||
ModuleMetadata::decode(&mut &modules_metadata[2].encode()[..]).unwrap();
|
||||
let actual_metadata = match Runtime::metadata().1 {
|
||||
RuntimeMetadata::V14(metadata) => metadata,
|
||||
_ => panic!("metadata has been bumped, test needs to be updated"),
|
||||
};
|
||||
|
||||
pretty_assertions::assert_eq!(pallet_metadata, expected_pallet_metadata);
|
||||
pretty_assertions::assert_eq!(pallet_instance1_metadata, expected_pallet_instance1_metadata);
|
||||
pretty_assertions::assert_eq!(actual_metadata.pallets[1], expected_metadata.pallets[1]);
|
||||
pretty_assertions::assert_eq!(actual_metadata.pallets[2], expected_metadata.pallets[2]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user