mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-22 09:08:06 +00:00
f344d0dd4d
* add cli command to explore metadata * fmt and clippy * Bump serde from 1.0.160 to 1.0.162 (#948) Bumps [serde](https://github.com/serde-rs/serde) from 1.0.160 to 1.0.162. - [Release notes](https://github.com/serde-rs/serde/releases) - [Commits](https://github.com/serde-rs/serde/compare/v1.0.160...1.0.162) --- updated-dependencies: - dependency-name: serde dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * extrinsics: Decode extrinsics from blocks (#929) * Update polkadot.scale Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * extrinsics: Add extrinsics client Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * extrinsics: Decode extrinsics Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * subxt: Add extrinsic error Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * blocks: Expose extrinsics Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * examples: Fetch and decode block extrinsics Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Fix clippy Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * extrinsics: Fetch pallet and variant index Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * subxt: Move extrinsics on the subxt::blocks Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * example: Adjust example Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * metadata: Collect ExtrinsicMetadata Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * subxt: Implement StaticExtrinsic for the calls Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Adjust examples Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * codegen: Add root level Call enum Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Adjust testing Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * subxt: Add new decode interface Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * subxt: Merge ExtrinsicError with BlockError Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * examples: Find first extrinsic Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Move code to extrinsic_types Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Add Extrinsic struct Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Adjust examples Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * test: Decode extinsics Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * extrinsics/test: Add fake metadata for static decoding Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * extrinsics/test: Decode from insufficient bytes Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * extrinsics/test: Check unsupported versions Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * extrinsics/test: Statically decode to root and pallet enums Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * extrinsics/tests: Remove clones Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * blocks: Fetch block body inline Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * blocks: Rename ExtrinsicIds to ExtrinsicPartTypeIds Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * extrinsics/test: Check decode as_extrinsic Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * blocks: Remove InsufficientData error Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * blocks: Return error from extrinsic_metadata Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * extrinsics: Postpone decoding of call bytes Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * metadata_type: Rename variables Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Adjust calls path for example and tests Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * examples: Remove traces Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * book: Add extrinsics documentation Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * book: Improve extrinsics docs Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> --------- Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> Co-authored-by: James Wilson <james@jsdw.me> * change doc comments * add constants exploration * add storage access interface but not done yet * add storage exploration * formatting * remove dbg * some small tweaks * fix formatting and scale value for storage * split up files, sort entries, change formatting * fmt and clippy fix * fix minor formatting issue * implement suggestions * implement other suggestion, fix bug --------- Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Alexandru Vasile <60601340+lexnv@users.noreply.github.com> Co-authored-by: James Wilson <james@jsdw.me>
97 lines
3.2 KiB
Rust
97 lines
3.2 KiB
Rust
// Copyright 2019-2023 Parity Technologies (UK) Ltd.
|
|
// This file is dual-licensed as Apache-2.0 or GPL-3.0.
|
|
// see LICENSE for license details.
|
|
|
|
use clap::Args;
|
|
use color_eyre::eyre;
|
|
|
|
use std::{fs, io::Read, path::PathBuf};
|
|
use subxt_codegen::utils::{MetadataVersion, Uri};
|
|
|
|
pub mod type_description;
|
|
pub mod type_example;
|
|
|
|
/// The source of the metadata.
|
|
#[derive(Debug, Args)]
|
|
pub struct FileOrUrl {
|
|
/// The url of the substrate node to query for metadata for codegen.
|
|
#[clap(long, value_parser)]
|
|
pub(crate) url: Option<Uri>,
|
|
/// The path to the encoded metadata file.
|
|
#[clap(long, value_parser)]
|
|
pub(crate) file: Option<PathBuf>,
|
|
/// Specify the metadata version.
|
|
///
|
|
/// - unstable:
|
|
///
|
|
/// Use the latest unstable metadata of the node.
|
|
///
|
|
/// - number
|
|
///
|
|
/// Use this specific metadata version.
|
|
///
|
|
/// Defaults to 14.
|
|
#[clap(long)]
|
|
version: Option<MetadataVersion>,
|
|
}
|
|
|
|
impl FileOrUrl {
|
|
/// Fetch the metadata bytes.
|
|
pub async fn fetch(&self) -> color_eyre::Result<Vec<u8>> {
|
|
match (&self.file, &self.url, self.version) {
|
|
// Can't provide both --file and --url
|
|
(Some(_), Some(_), _) => {
|
|
eyre::bail!("specify one of `--url` or `--file` but not both")
|
|
}
|
|
// Load from --file path
|
|
(Some(path), None, None) => {
|
|
let mut file = fs::File::open(path)?;
|
|
let mut bytes = Vec::new();
|
|
file.read_to_end(&mut bytes)?;
|
|
Ok(bytes)
|
|
}
|
|
// Cannot load the metadata from the file and specify a version to fetch.
|
|
(Some(_), None, Some(_)) => {
|
|
// Note: we could provide the ability to convert between metadata versions
|
|
// but that would be involved because we'd need to convert
|
|
// from each metadata to the latest one and from the
|
|
// latest one to each metadata version. For now, disable the conversion.
|
|
eyre::bail!("`--file` is incompatible with `--version`")
|
|
}
|
|
// Fetch from --url
|
|
(None, Some(uri), version) => Ok(subxt_codegen::utils::fetch_metadata_bytes(
|
|
uri,
|
|
version.unwrap_or_default(),
|
|
)
|
|
.await?),
|
|
// Default if neither is provided; fetch from local url
|
|
(None, None, version) => {
|
|
let uri = Uri::from_static("ws://localhost:9944");
|
|
Ok(
|
|
subxt_codegen::utils::fetch_metadata_bytes(&uri, version.unwrap_or_default())
|
|
.await?,
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
pub(crate) fn print_docs_with_indent(docs: &[String], indent: usize) -> String {
|
|
// take at most the first paragraph of documentation, such that it does not get too long.
|
|
let docs_str = docs
|
|
.iter()
|
|
.map(|e| e.trim())
|
|
.take_while(|e| !e.is_empty())
|
|
.collect::<Vec<_>>()
|
|
.join("\n");
|
|
with_indent(docs_str, indent)
|
|
}
|
|
|
|
pub(crate) fn with_indent(s: String, indent: usize) -> String {
|
|
let indent_str = " ".repeat(indent);
|
|
s.lines()
|
|
.map(|line| format!("{indent_str}{line}"))
|
|
.collect::<Vec<_>>()
|
|
.join("\n")
|
|
}
|