diff --git a/Cargo.lock b/Cargo.lock index 966a4e812ae62e681570eb1e93cb1bafb0e52624..7c939dae90fe4114d37d5934cd15ab862df6c7f6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8863,6 +8863,17 @@ dependencies = [ "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]] name = "scale-decode" version = "0.5.0" @@ -8871,12 +8882,25 @@ checksum = "c7e5527e4b3bf079d4c0b2f253418598c380722ba37ef20fac9088081407f2b6" dependencies = [ "parity-scale-codec", "primitive-types", - "scale-bits", + "scale-bits 0.3.0", "scale-decode-derive", "scale-info", "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]] name = "scale-decode-derive" version = "0.5.0" @@ -8898,12 +8922,25 @@ checksum = "15546e5efbb45f0fc2291f7e202dee8623274c5d8bbfdf9c6886cc8b44a7ced3" dependencies = [ "parity-scale-codec", "primitive-types", - "scale-bits", + "scale-bits 0.3.0", "scale-encode-derive", "scale-info", "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]] name = "scale-encode-derive" version = "0.1.2" @@ -8952,13 +8989,33 @@ dependencies = [ "either", "frame-metadata", "parity-scale-codec", - "scale-bits", - "scale-decode", - "scale-encode", + "scale-bits 0.3.0", + "scale-decode 0.5.0", + "scale-encode 0.1.2", "scale-info", "serde", "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]] @@ -10423,11 +10480,11 @@ dependencies = [ "parity-scale-codec", "parking_lot 0.12.1", "primitive-types", - "scale-bits", - "scale-decode", - "scale-encode", + "scale-bits 0.3.0", + "scale-decode 0.5.0", + "scale-encode 0.1.2", "scale-info", - "scale-value", + "scale-value 0.7.0", "serde", "serde_json", "sp-core", @@ -12426,6 +12483,7 @@ dependencies = [ "reqwest", "run_script", "scale-info", + "scale-value 0.13.0", "serde", "serde_json", "tera", @@ -12455,6 +12513,12 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2a7eb6d82a11e4d0b8e6bda8347169aff4ccd8235d039bba7c47482d977dcf7" +[[package]] +name = "yap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4524214bc4629eba08d78ceb1d6507070cc0bcbbed23af74e19e6e924a24cf" + [[package]] name = "yasna" version = "0.5.2" diff --git a/resources/weight_analyzer/src/lib.rs b/resources/weight_analyzer/src/lib.rs index 8b212ce1296c6eaf2231f897ed26d547900006f1..d4c3756d017f782f0c50285034cb832ec0f0ba05 100644 --- a/resources/weight_analyzer/src/lib.rs +++ b/resources/weight_analyzer/src/lib.rs @@ -23,6 +23,11 @@ impl Div<&MaxBlockWeight> for f64 { self / max_block_weight.0 } } +impl MaxBlockWeight { + pub fn new(value: f64) -> Self { + MaxBlockWeight(value) + } +} #[derive(Clone, Debug, Serialize)] pub struct WeightInfo { diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml index 05166cc4ee3994bc4bb46b786dee5179de184850..43d347a1de779e63e71571463602e9f76a01baeb 100644 --- a/xtask/Cargo.toml +++ b/xtask/Cargo.toml @@ -31,3 +31,4 @@ version_check = "0.9.2" version-compare = "0.0.11" tera = { version = "1", default-features = false } weight-analyzer = {path = "../resources/weight_analyzer"} +scale-value = "0.13.0" diff --git a/xtask/src/gen_doc.rs b/xtask/src/gen_doc.rs index ba26fafba546ec7c74d76243c03e18eb5a5624d2..7dc7631b0fa4eb76bb0ccaca9e428a0faf458fcb 100644 --- a/xtask/src/gen_doc.rs +++ b/xtask/src/gen_doc.rs @@ -255,8 +255,8 @@ pub(super) fn gen_doc() -> Result<()> { println!("Metadata successfully loaded!"); - let mut runtime = if let frame_metadata::RuntimeMetadata::V14(metadata_v14) = metadata.1 { - get_from_metadata_v14(metadata_v14)? + let mut runtime = if let frame_metadata::RuntimeMetadata::V14(ref metadata_v14) = metadata.1 { + get_from_metadata_v14(metadata_v14.clone())? } else { bail!("unsuported metadata version") }; @@ -264,8 +264,53 @@ pub(super) fn gen_doc() -> Result<()> { // Compute the weights from the weight files. // Require the `pallet_xxx.rs` weights, // 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 // TODO automatic, possible??? rename_key(&mut weights, &"FrameSystem".into(), "System".into()); @@ -393,9 +438,12 @@ fn get_from_metadata_v14( Ok(pallets) } -fn get_weights() -> HashMap<String, HashMap<String, WeightInfo>> { - analyze_weight(Path::new(WEIGHT_FILEPATH), &MaxBlockWeight::default()) - .expect("Weights unavailable") +fn get_weights(max_weight: u128) -> HashMap<String, HashMap<String, WeightInfo>> { + analyze_weight( + Path::new(WEIGHT_FILEPATH), + &MaxBlockWeight::new(max_weight as f64), + ) + .expect("Weights unavailable") } /// use template to render markdown file with runtime calls documentation