Skip to content
Snippets Groups Projects
Unverified Commit ab7501c1 authored by bgallois's avatar bgallois
Browse files

add automatic max block weight from metadata

parent 12ee6f18
No related branches found
No related tags found
No related merge requests found
Pipeline #35118 passed
...@@ -8863,6 +8863,17 @@ dependencies = [ ...@@ -8863,6 +8863,17 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "scale-bits"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "036575c29af9b6e4866ffb7fa055dbf623fe7a9cc159b33786de6013a6969d89"
dependencies = [
"parity-scale-codec",
"scale-info",
"serde",
]
[[package]] [[package]]
name = "scale-decode" name = "scale-decode"
version = "0.5.0" version = "0.5.0"
...@@ -8871,12 +8882,25 @@ checksum = "c7e5527e4b3bf079d4c0b2f253418598c380722ba37ef20fac9088081407f2b6" ...@@ -8871,12 +8882,25 @@ checksum = "c7e5527e4b3bf079d4c0b2f253418598c380722ba37ef20fac9088081407f2b6"
dependencies = [ dependencies = [
"parity-scale-codec", "parity-scale-codec",
"primitive-types", "primitive-types",
"scale-bits", "scale-bits 0.3.0",
"scale-decode-derive", "scale-decode-derive",
"scale-info", "scale-info",
"thiserror", "thiserror",
] ]
[[package]]
name = "scale-decode"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7caaf753f8ed1ab4752c6afb20174f03598c664724e0e32628e161c21000ff76"
dependencies = [
"derive_more",
"parity-scale-codec",
"scale-bits 0.4.0",
"scale-info",
"smallvec",
]
[[package]] [[package]]
name = "scale-decode-derive" name = "scale-decode-derive"
version = "0.5.0" version = "0.5.0"
...@@ -8898,12 +8922,25 @@ checksum = "15546e5efbb45f0fc2291f7e202dee8623274c5d8bbfdf9c6886cc8b44a7ced3" ...@@ -8898,12 +8922,25 @@ checksum = "15546e5efbb45f0fc2291f7e202dee8623274c5d8bbfdf9c6886cc8b44a7ced3"
dependencies = [ dependencies = [
"parity-scale-codec", "parity-scale-codec",
"primitive-types", "primitive-types",
"scale-bits", "scale-bits 0.3.0",
"scale-encode-derive", "scale-encode-derive",
"scale-info", "scale-info",
"thiserror", "thiserror",
] ]
[[package]]
name = "scale-encode"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d70cb4b29360105483fac1ed567ff95d65224a14dd275b6303ed0a654c78de5"
dependencies = [
"derive_more",
"parity-scale-codec",
"scale-bits 0.4.0",
"scale-info",
"smallvec",
]
[[package]] [[package]]
name = "scale-encode-derive" name = "scale-encode-derive"
version = "0.1.2" version = "0.1.2"
...@@ -8952,13 +8989,33 @@ dependencies = [ ...@@ -8952,13 +8989,33 @@ dependencies = [
"either", "either",
"frame-metadata", "frame-metadata",
"parity-scale-codec", "parity-scale-codec",
"scale-bits", "scale-bits 0.3.0",
"scale-decode", "scale-decode 0.5.0",
"scale-encode", "scale-encode 0.1.2",
"scale-info", "scale-info",
"serde", "serde",
"thiserror", "thiserror",
"yap", "yap 0.10.0",
]
[[package]]
name = "scale-value"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "58223c7691bf0bd46b43c9aea6f0472d1067f378d574180232358d7c6e0a8089"
dependencies = [
"base58",
"blake2",
"derive_more",
"either",
"frame-metadata",
"parity-scale-codec",
"scale-bits 0.4.0",
"scale-decode 0.10.0",
"scale-encode 0.5.0",
"scale-info",
"serde",
"yap 0.11.0",
] ]
[[package]] [[package]]
...@@ -10423,11 +10480,11 @@ dependencies = [ ...@@ -10423,11 +10480,11 @@ dependencies = [
"parity-scale-codec", "parity-scale-codec",
"parking_lot 0.12.1", "parking_lot 0.12.1",
"primitive-types", "primitive-types",
"scale-bits", "scale-bits 0.3.0",
"scale-decode", "scale-decode 0.5.0",
"scale-encode", "scale-encode 0.1.2",
"scale-info", "scale-info",
"scale-value", "scale-value 0.7.0",
"serde", "serde",
"serde_json", "serde_json",
"sp-core", "sp-core",
...@@ -12426,6 +12483,7 @@ dependencies = [ ...@@ -12426,6 +12483,7 @@ dependencies = [
"reqwest", "reqwest",
"run_script", "run_script",
"scale-info", "scale-info",
"scale-value 0.13.0",
"serde", "serde",
"serde_json", "serde_json",
"tera", "tera",
...@@ -12455,6 +12513,12 @@ version = "0.10.0" ...@@ -12455,6 +12513,12 @@ version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2a7eb6d82a11e4d0b8e6bda8347169aff4ccd8235d039bba7c47482d977dcf7" checksum = "e2a7eb6d82a11e4d0b8e6bda8347169aff4ccd8235d039bba7c47482d977dcf7"
[[package]]
name = "yap"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff4524214bc4629eba08d78ceb1d6507070cc0bcbbed23af74e19e6e924a24cf"
[[package]] [[package]]
name = "yasna" name = "yasna"
version = "0.5.2" version = "0.5.2"
......
...@@ -23,6 +23,11 @@ impl Div<&MaxBlockWeight> for f64 { ...@@ -23,6 +23,11 @@ impl Div<&MaxBlockWeight> for f64 {
self / max_block_weight.0 self / max_block_weight.0
} }
} }
impl MaxBlockWeight {
pub fn new(value: f64) -> Self {
MaxBlockWeight(value)
}
}
#[derive(Clone, Debug, Serialize)] #[derive(Clone, Debug, Serialize)]
pub struct WeightInfo { pub struct WeightInfo {
......
...@@ -31,3 +31,4 @@ version_check = "0.9.2" ...@@ -31,3 +31,4 @@ version_check = "0.9.2"
version-compare = "0.0.11" version-compare = "0.0.11"
tera = { version = "1", default-features = false } tera = { version = "1", default-features = false }
weight-analyzer = {path = "../resources/weight_analyzer"} weight-analyzer = {path = "../resources/weight_analyzer"}
scale-value = "0.13.0"
...@@ -255,8 +255,8 @@ pub(super) fn gen_doc() -> Result<()> { ...@@ -255,8 +255,8 @@ pub(super) fn gen_doc() -> Result<()> {
println!("Metadata successfully loaded!"); println!("Metadata successfully loaded!");
let mut runtime = if let frame_metadata::RuntimeMetadata::V14(metadata_v14) = metadata.1 { let mut runtime = if let frame_metadata::RuntimeMetadata::V14(ref metadata_v14) = metadata.1 {
get_from_metadata_v14(metadata_v14)? get_from_metadata_v14(metadata_v14.clone())?
} else { } else {
bail!("unsuported metadata version") bail!("unsuported metadata version")
}; };
...@@ -264,8 +264,53 @@ pub(super) fn gen_doc() -> Result<()> { ...@@ -264,8 +264,53 @@ pub(super) fn gen_doc() -> Result<()> {
// Compute the weights from the weight files. // Compute the weights from the weight files.
// Require the `pallet_xxx.rs` weights, // Require the `pallet_xxx.rs` weights,
// the `paritydb_weights.rs` and the `extrinsic_weights.rs` // the `paritydb_weights.rs` and the `extrinsic_weights.rs`
let mut weights = get_weights(); // TODO SIMPLIFY IF POSSIBLE!!!
let max_weight = if let frame_metadata::RuntimeMetadata::V14(metadata_v14) = metadata.1 {
let block_weights = metadata_v14
.pallets
.iter()
.find(|pallet| pallet.name == "System")
.unwrap()
.constants
.iter()
.find(|constant| constant.name == "BlockWeights")
.unwrap();
let block_weights = scale_value::scale::decode_as_type(
&mut &*block_weights.value,
block_weights.ty.id,
&metadata_v14.types,
)
.unwrap()
.value;
let max_weight: u128 =
if let scale_value::ValueDef::Composite(scale_value::Composite::Named(i)) =
block_weights
{
if let scale_value::ValueDef::Composite(scale_value::Composite::Named(j)) =
&i.iter().find(|name| name.0 == "max_block").unwrap().1.value
{
if let scale_value::ValueDef::Primitive(scale_value::Primitive::U128(k)) =
&j.iter().find(|name| name.0 == "ref_time").unwrap().1.value
{
*k
} else {
0u128
}
} else {
0u128
}
} else {
0u128
};
max_weight
} else {
0u128
};
let mut weights = get_weights(max_weight);
// AdHoc names convertion // AdHoc names convertion
// TODO automatic, possible??? // TODO automatic, possible???
rename_key(&mut weights, &"FrameSystem".into(), "System".into()); rename_key(&mut weights, &"FrameSystem".into(), "System".into());
...@@ -393,8 +438,11 @@ fn get_from_metadata_v14( ...@@ -393,8 +438,11 @@ fn get_from_metadata_v14(
Ok(pallets) Ok(pallets)
} }
fn get_weights() -> HashMap<String, HashMap<String, WeightInfo>> { fn get_weights(max_weight: u128) -> HashMap<String, HashMap<String, WeightInfo>> {
analyze_weight(Path::new(WEIGHT_FILEPATH), &MaxBlockWeight::default()) analyze_weight(
Path::new(WEIGHT_FILEPATH),
&MaxBlockWeight::new(max_weight as f64),
)
.expect("Weights unavailable") .expect("Weights unavailable")
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment