Skip to content

Commit 1846675

Browse files
authored
polkadot v1.12.0 (#1003)
* [tokens] update fungible implementation * [benchmarking] update benchmarks * [asset-registry] add `XcmRecorder` associated type to mocks * [tokens] add preservation arg to tests * [xtokens] add `XcmRecorder` associated type to mocks * fmt * [benchmarking] fix tests * add updated Cargo.dev.toml
1 parent f2fc5ee commit 1846675

File tree

14 files changed

+127
-115
lines changed

14 files changed

+127
-115
lines changed

Cargo.dev.toml

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -37,35 +37,35 @@ scale-info = { version = "2.10.0", default-features = false, features = ["derive
3737
serde = { version = "1.0.189" }
3838
parity-scale-codec = { version = "3.6.5", default-features = false, features = ["max-encoded-len"] }
3939

40-
cumulus-pallet-xcm = { version = "0.11.0", default-features = false }
41-
cumulus-primitives-core = { version = "0.11.0", default-features = false }
42-
frame-benchmarking = { version = "32.0.0", default-features = false }
43-
frame-support = { version = "32.0.0", default-features = false }
44-
frame-system = { version = "32.0.0", default-features = false }
45-
pallet-balances = { version = "33.0.0", default-features = false }
46-
pallet-elections-phragmen = { version = "33.0.0", default-features = false }
47-
pallet-message-queue = { version = "35.0.0", default-features = false }
48-
pallet-preimage = { version = "32.0.0", default-features = false }
49-
pallet-root-testing = { version = "8.0.0", default-features = false }
50-
pallet-scheduler = { version = "33.0.0", default-features = false }
51-
pallet-timestamp = { version = "31.0.0", default-features = false }
52-
pallet-treasury = { version = "31.0.0", default-features = false }
53-
pallet-xcm = { version = "11.0.0", default-features = false }
54-
polkadot-parachain-primitives = { version = "10.0.0", default-features = false }
55-
polkadot-runtime-common = { version = "11.0.0", default-features = false }
56-
polkadot-runtime-parachains = { version = "11.0.0", default-features = false }
57-
sp-api = { version = "30.0.0", default-features = false }
58-
sp-application-crypto = { version = "34.0.0", default-features = false }
40+
cumulus-pallet-xcm = { version = "0.13.0", default-features = false }
41+
cumulus-primitives-core = { version = "0.13.0", default-features = false }
42+
frame-benchmarking = { version = "34.0.0", default-features = false }
43+
frame-support = { version = "34.0.0", default-features = false }
44+
frame-system = { version = "34.0.1", default-features = false }
45+
pallet-balances = { version = "35.0.0", default-features = false }
46+
pallet-elections-phragmen = { version = "35.0.0", default-features = false }
47+
pallet-message-queue = { version = "37.0.0", default-features = false }
48+
pallet-preimage = { version = "34.0.0", default-features = false }
49+
pallet-root-testing = { version = "10.0.0", default-features = false }
50+
pallet-scheduler = { version = "35.0.0", default-features = false }
51+
pallet-timestamp = { version = "33.0.0", default-features = false }
52+
pallet-treasury = { version = "33.0.0", default-features = false }
53+
pallet-xcm = { version = "13.0.0", default-features = false }
54+
polkadot-parachain-primitives = { version = "12.0.0", default-features = false }
55+
polkadot-runtime-common = { version = "13.0.0", default-features = false }
56+
polkadot-runtime-parachains = { version = "13.0.0", default-features = false }
57+
sp-api = { version = "32.0.0", default-features = false }
58+
sp-application-crypto = { version = "36.0.0", default-features = false }
5959
sp-arithmetic = { version = "26.0.0", default-features = false }
60-
sp-core = { version = "32.0.0", default-features = false }
61-
sp-io = { version = "34.0.0", default-features = false }
62-
sp-runtime = { version = "35.0.0", default-features = false }
60+
sp-core = { version = "33.0.1", default-features = false }
61+
sp-io = { version = "36.0.0", default-features = false }
62+
sp-runtime = { version = "37.0.0", default-features = false }
6363
sp-runtime-interface = { version = "27.0.0", default-features = false }
64-
sp-staking = { version = "30.0.0", default-features = false }
64+
sp-staking = { version = "32.0.0", default-features = false }
6565
sp-std = { version = "14.0.0", default-features = false }
6666
sp-storage = { version = "21.0.0", default-features = false }
67-
xcm = { version = "11.0.0", package = "staging-xcm", default-features = false }
68-
xcm-builder = { version = "11.0.0", package = "staging-xcm-builder", default-features = false }
69-
xcm-executor = { version = "11.0.0", package = "staging-xcm-executor", default-features = false }
67+
xcm = { version = "13.0.1", package = "staging-xcm", default-features = false }
68+
xcm-builder = { version = "13.0.0", package = "staging-xcm-builder", default-features = false }
69+
xcm-executor = { version = "13.0.0", package = "staging-xcm-executor", default-features = false }
7070

71-
xcm-simulator = { version = "11.0.0" }
71+
xcm-simulator = { version = "13.0.0" }

asset-registry/src/mock/para.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,7 @@ impl Config for XcmConfig {
236236
type HrmpNewChannelOpenRequestHandler = ();
237237
type HrmpChannelAcceptedHandler = ();
238238
type HrmpChannelClosingHandler = ();
239+
type XcmRecorder = ();
239240
}
240241

241242
impl cumulus_pallet_xcm::Config for Runtime {

asset-registry/src/mock/relay.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ impl Config for XcmConfig {
113113
type HrmpNewChannelOpenRequestHandler = ();
114114
type HrmpChannelAcceptedHandler = ();
115115
type HrmpChannelClosingHandler = ();
116+
type XcmRecorder = ();
116117
}
117118

118119
pub type LocalOriginToLocation = SignedToAccountId32<RuntimeOrigin, AccountId, KusamaNetwork>;

benchmarking/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ serde = { workspace = true, optional = true }
1717
frame-benchmarking = { workspace = true }
1818
frame-support = { workspace = true }
1919
sp-api = { workspace = true }
20+
sp-core = { workspace = true }
2021
sp-io = { workspace = true }
2122
sp-runtime = { workspace = true }
2223
sp-runtime-interface = { workspace = true }
@@ -38,6 +39,7 @@ std = [
3839
"scale-info/std",
3940
"serde",
4041
"sp-api/std",
42+
"sp-core/std",
4143
"sp-io/std",
4244
"sp-runtime-interface/std",
4345
"sp-runtime/std",

benchmarking/src/lib.rs

Lines changed: 36 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ mod tests;
77

88
pub use frame_benchmarking::{
99
benchmarking, whitelisted_caller, BenchmarkBatch, BenchmarkConfig, BenchmarkError, BenchmarkList,
10-
BenchmarkMetadata, BenchmarkParameter, BenchmarkResult, Benchmarking, BenchmarkingSetup,
10+
BenchmarkMetadata, BenchmarkParameter, BenchmarkRecording, BenchmarkResult, Benchmarking, BenchmarkingSetup,
11+
Recording,
1112
};
13+
1214
#[cfg(feature = "std")]
1315
pub use frame_benchmarking::{Analysis, BenchmarkSelector};
1416
#[doc(hidden)]
@@ -20,6 +22,8 @@ pub use parity_scale_codec;
2022
#[doc(hidden)]
2123
pub use paste;
2224
#[doc(hidden)]
25+
pub use sp_core::defer;
26+
#[doc(hidden)]
2327
pub use sp_io::storage::root as storage_root;
2428
#[doc(hidden)]
2529
pub use sp_runtime::traits::Zero;
@@ -176,7 +180,6 @@ macro_rules! whitelist_account {
176180
/// });
177181
/// }
178182
/// ```
179-
180183
#[macro_export]
181184
macro_rules! runtime_benchmarks {
182185
(
@@ -626,9 +629,10 @@ macro_rules! benchmark_backend {
626629

627630
fn instance(
628631
&self,
632+
recording: &mut impl $crate::Recording,
629633
components: &[($crate::BenchmarkParameter, u32)],
630634
verify: bool
631-
) -> Result<$crate::Box<dyn FnOnce() -> Result<(), $crate::BenchmarkError>>, $crate::BenchmarkError> {
635+
) -> Result<(), $crate::BenchmarkError> {
632636
$(
633637
// Prepare instance
634638
let $param = components.iter()
@@ -642,13 +646,14 @@ macro_rules! benchmark_backend {
642646
$( $param_instancer ; )*
643647
$( $post )*
644648

645-
Ok($crate::Box::new(move || -> Result<(), $crate::BenchmarkError> {
646-
$eval;
647-
if verify {
648-
$postcode;
649-
}
650-
Ok(())
651-
}))
649+
recording.start();
650+
$eval;
651+
recording.stop();
652+
653+
if verify {
654+
$postcode;
655+
}
656+
Ok(())
652657
}
653658
}
654659
};
@@ -696,14 +701,15 @@ macro_rules! selected_benchmark {
696701

697702
fn instance(
698703
&self,
704+
recording: &mut impl $crate::Recording,
699705
components: &[($crate::BenchmarkParameter, u32)],
700706
verify: bool
701-
) -> Result<$crate::Box<dyn FnOnce() -> Result<(), $crate::BenchmarkError>>, $crate::BenchmarkError> {
707+
) -> Result<(), $crate::BenchmarkError> {
702708
match self {
703709
$(
704710
Self::$bench => <
705711
$bench as $crate::BenchmarkingSetup<$runtime $(, $bench_inst)? >
706-
>::instance(&$bench, components, verify),
712+
>::instance(&$bench, recording, components, verify),
707713
)*
708714
}
709715
}
@@ -781,14 +787,7 @@ macro_rules! impl_benchmark {
781787

782788
let mut results: $crate::Vec<$crate::BenchmarkResult> = $crate::Vec::new();
783789

784-
// Always do at least one internal repeat...
785-
for _ in 0 .. internal_repeats.max(1) {
786-
// Set up the externalities environment for the setup we want to
787-
// benchmark.
788-
let closure_to_benchmark = <
789-
SelectedBenchmark as $crate::BenchmarkingSetup<$runtime $(, $instance)?>
790-
>::instance(&selected_benchmark, c, verify)?;
791-
790+
let on_before_start = || {
792791
// Set the block number to at least 1 so events are deposited.
793792
if $crate::Zero::is_zero(&frame_system::Pallet::<$runtime>::block_number()) {
794793
frame_system::Pallet::<$runtime>::set_block_number(1u32.into());
@@ -800,27 +799,25 @@ macro_rules! impl_benchmark {
800799

801800
// Reset the read/write counter so we don't count operations in the setup process.
802801
$crate::benchmarking::reset_read_write_count();
802+
};
803+
804+
// Always do at least one internal repeat...
805+
for _ in 0 .. internal_repeats.max(1) {
806+
// Always reset the state after the benchmark.
807+
$crate::defer!($crate::benchmarking::wipe_db());
803808

804809
// Time the extrinsic logic.
805810
$crate::log::trace!(
806811
target: "benchmark",
807812
"Start Benchmark: {:?}", c
808813
);
809814

810-
let start_pov = $crate::benchmarking::proof_size();
811-
let start_extrinsic = $crate::benchmarking::current_time();
812-
813-
closure_to_benchmark()?;
814-
815-
let finish_extrinsic = $crate::benchmarking::current_time();
816-
let end_pov = $crate::benchmarking::proof_size();
815+
let mut recording = $crate::BenchmarkRecording::new(&on_before_start);
816+
<SelectedBenchmark as $crate::BenchmarkingSetup<$runtime>>::instance(&selected_benchmark, &mut recording, c, verify)?;
817817

818818
// Calculate the diff caused by the benchmark.
819-
let elapsed_extrinsic = finish_extrinsic.saturating_sub(start_extrinsic);
820-
let diff_pov = match (start_pov, end_pov) {
821-
(Some(start), Some(end)) => end.saturating_sub(start),
822-
_ => Default::default(),
823-
};
819+
let elapsed_extrinsic = recording.elapsed_extrinsic().expect("elapsed time should be recorded");
820+
let diff_pov = recording.diff_pov().unwrap_or_default();
824821

825822
// Commit the changes to get proper write count
826823
$crate::benchmarking::commit_db();
@@ -917,18 +914,16 @@ macro_rules! impl_benchmark_test {
917914
let execute_benchmark = |
918915
c: $crate::Vec<($crate::BenchmarkParameter, u32)>
919916
| -> Result<(), $crate::BenchmarkError> {
920-
// Set up the benchmark, return execution + verification function.
921-
let closure_to_verify = <
922-
SelectedBenchmark as $crate::BenchmarkingSetup<$runtime, _>
923-
>::instance(&selected_benchmark, &c, true)?;
924917

925-
// Set the block number to at least 1 so events are deposited.
926-
if $crate::Zero::is_zero(&frame_system::Pallet::<$runtime>::block_number()) {
927-
frame_system::Pallet::<$runtime>::set_block_number(1u32.into());
928-
}
918+
let on_before_start = || {
919+
// Set the block number to at least 1 so events are deposited.
920+
if $crate::Zero::is_zero(&frame_system::Pallet::<$runtime>::block_number()) {
921+
frame_system::Pallet::<$runtime>::set_block_number(1u32.into());
922+
}
923+
};
929924

930925
// Run execution + verification
931-
closure_to_verify()?;
926+
<SelectedBenchmark as $crate::BenchmarkingSetup<$runtime, _>>::test_instance(&selected_benchmark, &c, &on_before_start)?;
932927

933928
// Reset the state
934929
$crate::benchmarking::wipe_db();
@@ -1386,7 +1381,6 @@ macro_rules! cb_add_benchmarks {
13861381
/// ```
13871382
///
13881383
/// This should match what exists with the `add_benchmark!` macro.
1389-
13901384
#[macro_export]
13911385
macro_rules! list_benchmark {
13921386
( $list:ident, $extra:ident, $name:path, $( $location:tt )* ) => (

benchmarking/src/tests.rs

Lines changed: 30 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -127,79 +127,67 @@ fn benchmarks_macro_works() {
127127
let components = <SelectedBenchmark as BenchmarkingSetup<Test>>::components(&selected_benchmark);
128128
assert_eq!(components, vec![(BenchmarkParameter::b, 1, 1000)]);
129129

130-
let closure = <SelectedBenchmark as BenchmarkingSetup<Test>>::instance(
131-
&selected_benchmark,
132-
&[(BenchmarkParameter::b, 1)],
133-
true,
134-
)
135-
.expect("failed to create closure");
136-
137130
new_test_ext().execute_with(|| {
138-
assert_eq!(closure(), Ok(()));
131+
assert_ok!(<SelectedBenchmark as BenchmarkingSetup<Test>>::unit_test_instance(
132+
&selected_benchmark,
133+
&[(BenchmarkParameter::b, 1)],
134+
));
139135
});
140136
}
141137

142138
#[test]
143139
fn benchmarks_macro_rename_works() {
144140
// Check benchmark creation for `other_dummy`.
145-
let selected_benchmark = SelectedBenchmark::other_name;
146-
let components = <SelectedBenchmark as BenchmarkingSetup<Test>>::components(&selected_benchmark);
141+
let selected = SelectedBenchmark::other_name;
142+
let components = <SelectedBenchmark as BenchmarkingSetup<Test>>::components(&selected);
147143
assert_eq!(components, vec![(BenchmarkParameter::b, 1, 1000)]);
148144

149-
let closure = <SelectedBenchmark as BenchmarkingSetup<Test>>::instance(
150-
&selected_benchmark,
151-
&[(BenchmarkParameter::b, 1)],
152-
true,
153-
)
154-
.expect("failed to create closure");
155-
156145
new_test_ext().execute_with(|| {
157-
assert_ok!(closure());
146+
assert_ok!(<SelectedBenchmark as BenchmarkingSetup<Test>>::unit_test_instance(
147+
&selected,
148+
&[(BenchmarkParameter::b, 1)],
149+
));
158150
});
159151
}
160152

161153
#[test]
162154
fn benchmarks_macro_works_for_non_dispatchable() {
163-
let selected_benchmark = SelectedBenchmark::sort_vector;
155+
let selected = SelectedBenchmark::sort_vector;
164156

165-
let components = <SelectedBenchmark as BenchmarkingSetup<Test>>::components(&selected_benchmark);
157+
let components = <SelectedBenchmark as BenchmarkingSetup<Test>>::components(&selected);
166158
assert_eq!(components, vec![(BenchmarkParameter::x, 1, 10000)]);
167159

168-
let closure = <SelectedBenchmark as BenchmarkingSetup<Test>>::instance(
169-
&selected_benchmark,
170-
&[(BenchmarkParameter::x, 1)],
171-
true,
172-
)
173-
.expect("failed to create closure");
174-
175-
assert_eq!(closure(), Ok(()));
160+
new_test_ext().execute_with(|| {
161+
assert_ok!(<SelectedBenchmark as BenchmarkingSetup<Test>>::unit_test_instance(
162+
&selected,
163+
&[(BenchmarkParameter::x, 1)],
164+
));
165+
});
176166
}
177167

178168
#[test]
179169
fn benchmarks_macro_verify_works() {
180170
// Check postcondition for benchmark `set_value` is valid.
181-
let selected_benchmark = SelectedBenchmark::set_value;
182-
183-
let closure = <SelectedBenchmark as BenchmarkingSetup<Test>>::instance(
184-
&selected_benchmark,
185-
&[(BenchmarkParameter::b, 1)],
186-
true,
187-
)
188-
.expect("failed to create closure");
171+
let selected = SelectedBenchmark::set_value;
189172

190173
new_test_ext().execute_with(|| {
191-
assert_ok!(closure());
174+
assert_ok!(<SelectedBenchmark as BenchmarkingSetup<Test>>::unit_test_instance(
175+
&selected,
176+
&[(BenchmarkParameter::b, 1)],
177+
));
192178
});
193179

194180
// Check postcondition for benchmark `bad_verify` is invalid.
195181
let selected = SelectedBenchmark::bad_verify;
196182

197-
let closure =
198-
<SelectedBenchmark as BenchmarkingSetup<Test>>::instance(&selected, &[(BenchmarkParameter::x, 10000)], true)
199-
.expect("failed to create closure");
200-
201183
new_test_ext().execute_with(|| {
202-
assert_err!(closure(), "You forgot to sort!");
184+
assert_err!(
185+
<SelectedBenchmark as BenchmarkingSetup<Test>>::unit_test_instance(
186+
&selected,
187+
&[(BenchmarkParameter::x, 10000)],
188+
),
189+
"You forgot to sort!"
190+
);
203191
});
204192
}
205193

0 commit comments

Comments
 (0)