From faa4c8f1827870fca18c8eccd85c0418cd62da5b Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Fri, 20 Oct 2023 16:59:28 +0100 Subject: [PATCH 01/23] check env types --- Cargo.lock | 13 +-- crates/build/Cargo.toml | 2 +- crates/extrinsics/src/call.rs | 11 ++- crates/extrinsics/src/instantiate.rs | 11 ++- crates/extrinsics/src/lib.rs | 12 +++ .../src/runtime_api/contracts_runtime.scale | Bin 32393 -> 0 bytes .../extrinsics/src/runtime_api/metadata.scale | Bin 0 -> 63966 bytes crates/extrinsics/src/runtime_api/mod.rs | 2 +- crates/extrinsics/src/upload.rs | 16 +++- crates/transcode/Cargo.toml | 1 + crates/transcode/src/env_check.rs | 89 ++++++++++++++++++ crates/transcode/src/lib.rs | 40 ++++++++ 12 files changed, 184 insertions(+), 13 deletions(-) delete mode 100644 crates/extrinsics/src/runtime_api/contracts_runtime.scale create mode 100644 crates/extrinsics/src/runtime_api/metadata.scale create mode 100644 crates/transcode/src/env_check.rs diff --git a/Cargo.lock b/Cargo.lock index 30e098b01..9dbd74e89 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1089,6 +1089,7 @@ dependencies = [ "sp-core", "sp-keyring", "strsim", + "subxt", "thiserror", "tracing", ] @@ -5790,9 +5791,9 @@ checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" [[package]] name = "wasm-opt" -version = "0.114.1" +version = "0.114.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d005a95f934878a1fb446a816d51c3601a0120ff929005ba3bab3c749cfd1c7" +checksum = "effbef3bd1dde18acb401f73e740a6f3d4a1bc651e9773bddc512fe4d8d68f67" dependencies = [ "anyhow", "libc", @@ -5806,9 +5807,9 @@ dependencies = [ [[package]] name = "wasm-opt-cxx-sys" -version = "0.114.1" +version = "0.114.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d04e240598162810fad3b2e96fa0dec6dba1eb65a03f3bd99a9248ab8b56caa" +checksum = "c09e24eb283919ace2ed5733bda4842a59ce4c8de110ef5c6d98859513d17047" dependencies = [ "anyhow", "cxx", @@ -5818,9 +5819,9 @@ dependencies = [ [[package]] name = "wasm-opt-sys" -version = "0.114.1" +version = "0.114.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2efd2aaca519d64098c4faefc8b7433a97ed511caf4c9e516384eb6aef1ff4f9" +checksum = "36f2f817bed2e8d65eb779fa37317e74de15585751f903c9118342d1970703a4" dependencies = [ "anyhow", "cc", diff --git a/crates/build/Cargo.toml b/crates/build/Cargo.toml index d7b16dab0..fb7cf7f1c 100644 --- a/crates/build/Cargo.toml +++ b/crates/build/Cargo.toml @@ -35,7 +35,7 @@ serde_json = "1.0.107" tempfile = "3.8.0" term_size = "0.3.2" url = { version = "2.4.1", features = ["serde"] } -wasm-opt = "=0.114.1" +wasm-opt = "=0.114.2" which = "4.4.2" zip = { version = "0.6.6", default-features = false } strum = { version = "0.25", features = ["derive"] } diff --git a/crates/extrinsics/src/call.rs b/crates/extrinsics/src/call.rs index 16596fd35..2ef684722 100644 --- a/crates/extrinsics/src/call.rs +++ b/crates/extrinsics/src/call.rs @@ -31,7 +31,10 @@ use super::{ Missing, TokenMetadata, }; -use crate::extrinsic_opts::ExtrinsicOpts; +use crate::{ + check_env_types, + extrinsic_opts::ExtrinsicOpts, +}; use anyhow::{ anyhow, @@ -234,6 +237,7 @@ impl CallExec { /// Returns the dry run simulation result of type [`ContractExecResult`], which /// includes information about the simulated call, or an error in case of failure. pub async fn call_dry_run(&self) -> Result> { + check_env_types(self.client(), self.transcoder())?; let storage_deposit_limit = self .opts .storage_deposit_limit() @@ -265,7 +269,10 @@ impl CallExec { ) -> Result { // use user specified values where provided, otherwise estimate let gas_limit = match gas_limit { - Some(gas_limit) => gas_limit, + Some(gas_limit) => { + check_env_types(self.client(), self.transcoder())?; + gas_limit + } None => self.estimate_gas().await?, }; tracing::debug!("calling contract {:?}", self.contract); diff --git a/crates/extrinsics/src/instantiate.rs b/crates/extrinsics/src/instantiate.rs index 94ba2b50c..7d445b624 100644 --- a/crates/extrinsics/src/instantiate.rs +++ b/crates/extrinsics/src/instantiate.rs @@ -31,7 +31,10 @@ use super::{ StorageDeposit, TokenMetadata, }; -use crate::extrinsic_opts::ExtrinsicOpts; +use crate::{ + check_env_types, + extrinsic_opts::ExtrinsicOpts, +}; use anyhow::{ anyhow, Context, @@ -341,6 +344,7 @@ impl InstantiateExec { ) -> Result< ContractInstantiateResult<::AccountId, Balance, ()>, > { + check_env_types(self.client(), self.transcoder())?; let storage_deposit_limit = self.args.storage_deposit_limit; let call_request = InstantiateRequest { origin: account_id(&self.signer), @@ -434,7 +438,10 @@ impl InstantiateExec { ) -> Result { // use user specified values where provided, otherwise estimate let gas_limit = match gas_limit { - Some(gas_limit) => gas_limit, + Some(gas_limit) => { + check_env_types(self.client(), self.transcoder())?; + gas_limit + } None => self.estimate_gas().await?, }; match self.args.code.clone() { diff --git a/crates/extrinsics/src/lib.rs b/crates/extrinsics/src/lib.rs index 544c3a215..857d1f264 100644 --- a/crates/extrinsics/src/lib.rs +++ b/crates/extrinsics/src/lib.rs @@ -29,6 +29,7 @@ mod upload; mod integration_tests; use colored::Colorize; +use contract_transcode::compare_node_env_with_contract; use subxt::utils::AccountId32; use anyhow::{ @@ -370,6 +371,17 @@ pub async fn fetch_contract_info( } } +fn check_env_types( + client: &OnlineClient, + transcoder: &ContractMessageTranscoder, +) -> Result<()> +where + T: Config, +{ + compare_node_env_with_contract(client.metadata().types(), transcoder) + .map_err(|e| anyhow!("Verification of types match failed: {:?}", e)) +} + #[derive(serde::Serialize)] pub struct ContractInfo { trie_id: String, diff --git a/crates/extrinsics/src/runtime_api/contracts_runtime.scale b/crates/extrinsics/src/runtime_api/contracts_runtime.scale deleted file mode 100644 index e8d10021116471a2ad497c13a682a570a6db7fbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32393 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%0ASW!Alni&!^MFS}VbOf%4Z3USVTBgwcrZ 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 BRW1Mk diff --git a/crates/extrinsics/src/runtime_api/metadata.scale b/crates/extrinsics/src/runtime_api/metadata.scale new file mode 100644 index 0000000000000000000000000000000000000000..4f7b4bfaae19f0ff55e83ffd345c2126e917739e GIT binary patch literal 63966 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 BRuTXJ literal 0 HcmV?d00001 diff --git a/crates/extrinsics/src/runtime_api/mod.rs b/crates/extrinsics/src/runtime_api/mod.rs index 5c94b7317..870403ebf 100644 --- a/crates/extrinsics/src/runtime_api/mod.rs +++ b/crates/extrinsics/src/runtime_api/mod.rs @@ -17,7 +17,7 @@ #![allow(clippy::too_many_arguments)] #[subxt::subxt( - runtime_metadata_path = "src/runtime_api/contracts_runtime.scale", + runtime_metadata_path = "src/runtime_api/metadata.scale", substitute_type( path = "sp_weights::weight_v2::Weight", with = "::subxt::utils::Static<::sp_weights::Weight>" diff --git a/crates/extrinsics/src/upload.rs b/crates/extrinsics/src/upload.rs index a332895f4..87919159f 100644 --- a/crates/extrinsics/src/upload.rs +++ b/crates/extrinsics/src/upload.rs @@ -33,8 +33,12 @@ use super::{ TokenMetadata, WasmCode, }; -use crate::extrinsic_opts::ExtrinsicOpts; +use crate::{ + check_env_types, + extrinsic_opts::ExtrinsicOpts, +}; use anyhow::Result; +use contract_transcode::ContractMessageTranscoder; use core::marker::PhantomData; use pallet_contracts_primitives::CodeUploadResult; use scale::Encode; @@ -99,6 +103,7 @@ impl UploadCommandBuilder { /// execution. pub async fn done(self) -> Result { let artifacts = self.opts.extrinsic_opts.contract_artifacts()?; + let transcoder = artifacts.contract_transcoder()?; let signer = self.opts.extrinsic_opts.signer()?; let artifacts_path = artifacts.artifact_path().to_path_buf(); @@ -123,6 +128,7 @@ impl UploadCommandBuilder { code, signer, token_metadata, + transcoder, }) } } @@ -134,6 +140,7 @@ pub struct UploadExec { code: WasmCode, signer: Keypair, token_metadata: TokenMetadata, + transcoder: ContractMessageTranscoder, } impl UploadExec { @@ -144,6 +151,7 @@ impl UploadExec { /// then sends the request using the provided URL. This operation does not modify /// the state of the blockchain. pub async fn upload_code_rpc(&self) -> Result> { + check_env_types(self.client(), self.transcoder())?; let storage_deposit_limit = self .opts .storage_deposit_limit() @@ -166,6 +174,7 @@ impl UploadExec { /// The function handles the necessary interactions with the blockchain's runtime /// API to ensure the successful upload of the code. pub async fn upload_code(&self) -> Result { + check_env_types(self.client(), self.transcoder())?; let storage_deposit_limit = self .opts .compact_storage_deposit_limit(&self.token_metadata)?; @@ -211,6 +220,11 @@ impl UploadExec { pub fn token_metadata(&self) -> &TokenMetadata { &self.token_metadata } + + /// Returns the contract message transcoder. + pub fn transcoder(&self) -> &ContractMessageTranscoder { + &self.transcoder + } } /// A struct that encodes RPC parameters required for a call to upload a new code. diff --git a/crates/transcode/Cargo.toml b/crates/transcode/Cargo.toml index 84ba7e82a..ffd1c16ed 100644 --- a/crates/transcode/Cargo.toml +++ b/crates/transcode/Cargo.toml @@ -37,6 +37,7 @@ serde = { version = "1.0.189", default-features = false, features = ["derive"] } serde_json = "1.0.107" thiserror = "1.0.49" strsim = "0.10.0" +subxt = "0.32.1" [dev-dependencies] assert_matches = "1.5.0" diff --git a/crates/transcode/src/env_check.rs b/crates/transcode/src/env_check.rs new file mode 100644 index 000000000..af7b25bb5 --- /dev/null +++ b/crates/transcode/src/env_check.rs @@ -0,0 +1,89 @@ +use scale_info::{ + form::PortableForm, + Field, + PortableRegistry, + TypeDef, +}; + +use anyhow::{ + Context, + Result, +}; + +use crate::ContractMessageTranscoder; + +#[derive(Debug, Clone)] +pub enum EnvCheckError { + CheckFailed(String), + RegistryError(String), +} + +impl From for EnvCheckError { + fn from(value: anyhow::Error) -> Self { + Self::RegistryError(value.to_string()) + } +} + +fn get_node_env_fields(registry: &PortableRegistry) -> Result>> { + let env_type = registry + .types + .iter() + .find(|t| t.ty.path.segments == ["pallet_contracts", "Environment"]) + .context("The node does not contain `Environment` type. Are you using correct `pallet-contracts` version?")?; + + if let TypeDef::Composite(composite) = &env_type.ty.type_def { + Ok(composite.fields.clone()) + } else { + anyhow::bail!("`Environment` type definition is in the wrong format"); + } +} + +pub fn resolve_type_definition( + registry: &PortableRegistry, + id: u32, +) -> Result> { + let tt = registry + .resolve(id) + .context("Type is not present in registry")?; + if tt.type_params.is_empty() { + if let TypeDef::Composite(comp) = &tt.type_def { + println!("Resolve type definition: {:#?}", tt); + let tt_id = comp + .fields + .get(0) + .context("Incorrect format of a field")? + .ty + .id; + return resolve_type_definition(registry, tt_id) + } + Ok(tt.type_def.clone()) + } else { + let param_id = tt + .type_params + .get(0) + .context("type param is not present")? + .ty + .context("concrete type is not present")? + .id; + resolve_type_definition(registry, param_id) + } +} + +pub fn compare_node_env_with_contract( + registry: &PortableRegistry, + transcoder: &ContractMessageTranscoder, +) -> Result<(), EnvCheckError> { + let env_fields = get_node_env_fields(registry)?; + for field in env_fields { + let field_name = field.name.context("Field does not have a name")?; + if &field_name == "hasher" { + continue + } + let field_def = resolve_type_definition(registry, field.ty.id)?; + let checked = transcoder.compare_type(&field_name, field_def, registry)?; + if !checked { + return Err(EnvCheckError::CheckFailed(field_name)) + } + } + Ok(()) +} diff --git a/crates/transcode/src/lib.rs b/crates/transcode/src/lib.rs index 8fb318113..cdff820f0 100644 --- a/crates/transcode/src/lib.rs +++ b/crates/transcode/src/lib.rs @@ -101,13 +101,17 @@ mod account_id; mod decode; mod encode; +mod env_check; pub mod env_types; mod scon; mod transcoder; mod util; +use crate::env_check::resolve_type_definition; + pub use self::{ account_id::AccountId32, + env_check::compare_node_env_with_contract, scon::{ Hex, Map, @@ -141,6 +145,8 @@ use scale_info::{ PortableForm, }, Field, + PortableRegistry, + TypeDef, }; use std::{ cmp::Ordering, @@ -273,6 +279,40 @@ impl ContractMessageTranscoder { fn messages(&self) -> impl Iterator> { self.metadata.spec().messages().iter() } + /// Compares the contract's environment type with a provided type definition. + pub fn compare_type( + &self, + type_name: &str, + type_def: TypeDef, + node_registry: &PortableRegistry, + ) -> Result { + let contract_registry = self.metadata.registry(); + let tt_id = match type_name { + "account_id" => self.metadata.spec().environment().account_id().ty().id, + "balance" => self.metadata.spec().environment().balance().ty().id, + "hash" => self.metadata.spec().environment().hash().ty().id, + "timestamp" => self.metadata.spec().environment().timestamp().ty().id, + "block_number" => self.metadata.spec().environment().block_number().ty().id, + _ => anyhow::bail!("Trying to resolve unknown environment type"), + }; + let tt_def = resolve_type_definition(contract_registry, tt_id)?; + if let TypeDef::Array(node_arr) = &type_def { + let node_arr_type = + resolve_type_definition(node_registry, node_arr.type_param.id)?; + if let TypeDef::Array(contract_arr) = &tt_def { + if node_arr.len != contract_arr.len { + anyhow::bail!("Mismatch in array lengths"); + } + let contract_arr_type = resolve_type_definition( + contract_registry, + contract_arr.type_param.id, + )?; + return Ok(contract_arr_type == node_arr_type) + } + } + println!("Node {:?}\nContract: {:?}", type_def, tt_def); + Ok(type_def == tt_def) + } fn find_message_spec(&self, name: &str) -> Option<&MessageSpec> { self.messages().find(|msg| msg.label() == &name.to_string()) From cdcd357b6254bf872ceb0d4697fe8caf33fb7a3a Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Fri, 20 Oct 2023 17:03:49 +0100 Subject: [PATCH 02/23] add changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d9f35a222..bc977c754 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Added +- Compare `Environment` types against the node - [#1377](https://github.com/paritytech/cargo-contract/pull/1377) - Adds workflow for publishing docker images for the verifiable builds - [#1267](https://github.com/paritytech/cargo-contract/pull/1267) - Detect `INK_STATIC_BUFFER_SIZE` env var - [#1310](https://github.com/paritytech/cargo-contract/pull/1310) - Add `verify` command - [#1306](https://github.com/paritytech/cargo-contract/pull/1306) From b86ac58e6c953ac6433a0c1cb707a3c7319496e5 Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Fri, 20 Oct 2023 17:24:42 +0100 Subject: [PATCH 03/23] resolve merge conflict --- Cargo.lock | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6bee88010..d473cdebd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5791,15 +5791,9 @@ checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" [[package]] name = "wasm-opt" -<<<<<<< HEAD -version = "0.114.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "effbef3bd1dde18acb401f73e740a6f3d4a1bc651e9773bddc512fe4d8d68f67" -======= version = "0.116.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc942673e7684671f0c5708fc18993569d184265fd5223bb51fc8e5b9b6cfd52" ->>>>>>> master dependencies = [ "anyhow", "libc", From 6d01848fa79dbca61bf53e8f49d31c8db8ad8840 Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Tue, 24 Oct 2023 11:27:11 +0100 Subject: [PATCH 04/23] refactor API --- crates/extrinsics/src/call.rs | 7 +-- crates/extrinsics/src/instantiate.rs | 7 +-- crates/extrinsics/src/lib.rs | 4 +- crates/extrinsics/src/upload.rs | 3 +- crates/transcode/src/env_check.rs | 82 +++++++++++++++++++++++++--- crates/transcode/src/lib.rs | 42 ++------------ 6 files changed, 84 insertions(+), 61 deletions(-) diff --git a/crates/extrinsics/src/call.rs b/crates/extrinsics/src/call.rs index 2ef684722..a670ec1dc 100644 --- a/crates/extrinsics/src/call.rs +++ b/crates/extrinsics/src/call.rs @@ -189,6 +189,7 @@ impl CallCommandBuilder { let rpc = RpcClient::from_url(&url).await?; let client = OnlineClient::from_rpc_client(rpc.clone()).await?; let rpc = LegacyRpcMethods::new(rpc); + check_env_types(&client, &transcoder)?; let token_metadata = TokenMetadata::query(&rpc).await?; @@ -237,7 +238,6 @@ impl CallExec { /// Returns the dry run simulation result of type [`ContractExecResult`], which /// includes information about the simulated call, or an error in case of failure. pub async fn call_dry_run(&self) -> Result> { - check_env_types(self.client(), self.transcoder())?; let storage_deposit_limit = self .opts .storage_deposit_limit() @@ -269,10 +269,7 @@ impl CallExec { ) -> Result { // use user specified values where provided, otherwise estimate let gas_limit = match gas_limit { - Some(gas_limit) => { - check_env_types(self.client(), self.transcoder())?; - gas_limit - } + Some(gas_limit) => gas_limit, None => self.estimate_gas().await?, }; tracing::debug!("calling contract {:?}", self.contract); diff --git a/crates/extrinsics/src/instantiate.rs b/crates/extrinsics/src/instantiate.rs index 7d445b624..05e1d48c2 100644 --- a/crates/extrinsics/src/instantiate.rs +++ b/crates/extrinsics/src/instantiate.rs @@ -183,6 +183,7 @@ impl InstantiateCommandBuilder { let rpc_cli = RpcClient::from_url(&url).await?; let client = OnlineClient::from_rpc_client(rpc_cli.clone()).await?; + check_env_types(&client, &transcoder)?; let rpc = LegacyRpcMethods::new(rpc_cli); let token_metadata = TokenMetadata::query(&rpc).await?; @@ -344,7 +345,6 @@ impl InstantiateExec { ) -> Result< ContractInstantiateResult<::AccountId, Balance, ()>, > { - check_env_types(self.client(), self.transcoder())?; let storage_deposit_limit = self.args.storage_deposit_limit; let call_request = InstantiateRequest { origin: account_id(&self.signer), @@ -438,10 +438,7 @@ impl InstantiateExec { ) -> Result { // use user specified values where provided, otherwise estimate let gas_limit = match gas_limit { - Some(gas_limit) => { - check_env_types(self.client(), self.transcoder())?; - gas_limit - } + Some(gas_limit) => gas_limit, None => self.estimate_gas().await?, }; match self.args.code.clone() { diff --git a/crates/extrinsics/src/lib.rs b/crates/extrinsics/src/lib.rs index 857d1f264..828d5221c 100644 --- a/crates/extrinsics/src/lib.rs +++ b/crates/extrinsics/src/lib.rs @@ -378,8 +378,8 @@ fn check_env_types( where T: Config, { - compare_node_env_with_contract(client.metadata().types(), transcoder) - .map_err(|e| anyhow!("Verification of types match failed: {:?}", e)) + compare_node_env_with_contract(client.metadata().types(), transcoder.metadata()) + .map_err(|e| e.into()) } #[derive(serde::Serialize)] diff --git a/crates/extrinsics/src/upload.rs b/crates/extrinsics/src/upload.rs index 87919159f..ca7d7442b 100644 --- a/crates/extrinsics/src/upload.rs +++ b/crates/extrinsics/src/upload.rs @@ -117,6 +117,7 @@ impl UploadCommandBuilder { let url = self.opts.extrinsic_opts.url(); let rpc_cli = RpcClient::from_url(&url).await?; let client = OnlineClient::from_rpc_client(rpc_cli.clone()).await?; + check_env_types(&client, &transcoder)?; let rpc = LegacyRpcMethods::new(rpc_cli); let token_metadata = TokenMetadata::query(&rpc).await?; @@ -151,7 +152,6 @@ impl UploadExec { /// then sends the request using the provided URL. This operation does not modify /// the state of the blockchain. pub async fn upload_code_rpc(&self) -> Result> { - check_env_types(self.client(), self.transcoder())?; let storage_deposit_limit = self .opts .storage_deposit_limit() @@ -174,7 +174,6 @@ impl UploadExec { /// The function handles the necessary interactions with the blockchain's runtime /// API to ensure the successful upload of the code. pub async fn upload_code(&self) -> Result { - check_env_types(self.client(), self.transcoder())?; let storage_deposit_limit = self .opts .compact_storage_deposit_limit(&self.token_metadata)?; diff --git a/crates/transcode/src/env_check.rs b/crates/transcode/src/env_check.rs index af7b25bb5..1e94910d2 100644 --- a/crates/transcode/src/env_check.rs +++ b/crates/transcode/src/env_check.rs @@ -1,3 +1,4 @@ +use ink_metadata::InkProject; use scale_info::{ form::PortableForm, Field, @@ -10,14 +11,33 @@ use anyhow::{ Result, }; -use crate::ContractMessageTranscoder; - #[derive(Debug, Clone)] pub enum EnvCheckError { CheckFailed(String), RegistryError(String), } +impl std::fmt::Display for EnvCheckError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::CheckFailed(e) => { + f.write_fmt(format_args!( + "Type check failed with following error: {}", + e + )) + } + Self::RegistryError(e) => { + f.write_fmt(format_args!( + "Error occurred while parsing type registry: {}", + e + )) + } + } + } +} + +impl std::error::Error for EnvCheckError {} + impl From for EnvCheckError { fn from(value: anyhow::Error) -> Self { Self::RegistryError(value.to_string()) @@ -38,7 +58,7 @@ fn get_node_env_fields(registry: &PortableRegistry) -> Result Result> { @@ -47,7 +67,6 @@ pub fn resolve_type_definition( .context("Type is not present in registry")?; if tt.type_params.is_empty() { if let TypeDef::Composite(comp) = &tt.type_def { - println!("Resolve type definition: {:#?}", tt); let tt_id = comp .fields .get(0) @@ -69,21 +88,66 @@ pub fn resolve_type_definition( } } +/// Compares the environment type of the targeted chain against the current contract. +/// +/// It is achieved by iterating over the type specifications of `Environment` trait +/// in the node's metadata anf comparing finding the corresponding type +/// in the contract's `Environment` trait. pub fn compare_node_env_with_contract( - registry: &PortableRegistry, - transcoder: &ContractMessageTranscoder, + node_registry: &PortableRegistry, + contract_metadata: &InkProject, ) -> Result<(), EnvCheckError> { - let env_fields = get_node_env_fields(registry)?; + let env_fields = get_node_env_fields(node_registry)?; for field in env_fields { let field_name = field.name.context("Field does not have a name")?; if &field_name == "hasher" { continue } - let field_def = resolve_type_definition(registry, field.ty.id)?; - let checked = transcoder.compare_type(&field_name, field_def, registry)?; + let field_def = resolve_type_definition(node_registry, field.ty.id)?; + let checked = + compare_type(&field_name, field_def, contract_metadata, node_registry)?; if !checked { return Err(EnvCheckError::CheckFailed(field_name)) } } Ok(()) } + +/// Compares the contract's environment type with a provided type definition. +fn compare_type( + type_name: &str, + type_def: TypeDef, + contract_metadata: &InkProject, + node_registry: &PortableRegistry, +) -> Result { + let contract_registry = contract_metadata.registry(); + let tt_id = match type_name { + "account_id" => contract_metadata.spec().environment().account_id().ty().id, + "balance" => contract_metadata.spec().environment().balance().ty().id, + "hash" => contract_metadata.spec().environment().hash().ty().id, + "timestamp" => contract_metadata.spec().environment().timestamp().ty().id, + "block_number" => { + contract_metadata + .spec() + .environment() + .block_number() + .ty() + .id + } + _ => anyhow::bail!("Trying to resolve unknown environment type"), + }; + let tt_def = resolve_type_definition(contract_registry, tt_id)?; + if let TypeDef::Array(node_arr) = &type_def { + let node_arr_type = + resolve_type_definition(node_registry, node_arr.type_param.id)?; + if let TypeDef::Array(contract_arr) = &tt_def { + if node_arr.len != contract_arr.len { + anyhow::bail!("Mismatch in array lengths"); + } + let contract_arr_type = + resolve_type_definition(contract_registry, contract_arr.type_param.id)?; + return Ok(contract_arr_type == node_arr_type) + } + } + Ok(type_def == tt_def) +} diff --git a/crates/transcode/src/lib.rs b/crates/transcode/src/lib.rs index cdff820f0..9d2b838a0 100644 --- a/crates/transcode/src/lib.rs +++ b/crates/transcode/src/lib.rs @@ -107,8 +107,6 @@ mod scon; mod transcoder; mod util; -use crate::env_check::resolve_type_definition; - pub use self::{ account_id::AccountId32, env_check::compare_node_env_with_contract, @@ -145,8 +143,6 @@ use scale_info::{ PortableForm, }, Field, - PortableRegistry, - TypeDef, }; use std::{ cmp::Ordering, @@ -272,6 +268,10 @@ impl ContractMessageTranscoder { .decode(self.metadata.registry(), type_id, input) } + pub fn metadata(&self) -> &InkProject { + &self.metadata + } + fn constructors(&self) -> impl Iterator> { self.metadata.spec().constructors().iter() } @@ -279,40 +279,6 @@ impl ContractMessageTranscoder { fn messages(&self) -> impl Iterator> { self.metadata.spec().messages().iter() } - /// Compares the contract's environment type with a provided type definition. - pub fn compare_type( - &self, - type_name: &str, - type_def: TypeDef, - node_registry: &PortableRegistry, - ) -> Result { - let contract_registry = self.metadata.registry(); - let tt_id = match type_name { - "account_id" => self.metadata.spec().environment().account_id().ty().id, - "balance" => self.metadata.spec().environment().balance().ty().id, - "hash" => self.metadata.spec().environment().hash().ty().id, - "timestamp" => self.metadata.spec().environment().timestamp().ty().id, - "block_number" => self.metadata.spec().environment().block_number().ty().id, - _ => anyhow::bail!("Trying to resolve unknown environment type"), - }; - let tt_def = resolve_type_definition(contract_registry, tt_id)?; - if let TypeDef::Array(node_arr) = &type_def { - let node_arr_type = - resolve_type_definition(node_registry, node_arr.type_param.id)?; - if let TypeDef::Array(contract_arr) = &tt_def { - if node_arr.len != contract_arr.len { - anyhow::bail!("Mismatch in array lengths"); - } - let contract_arr_type = resolve_type_definition( - contract_registry, - contract_arr.type_param.id, - )?; - return Ok(contract_arr_type == node_arr_type) - } - } - println!("Node {:?}\nContract: {:?}", type_def, tt_def); - Ok(type_def == tt_def) - } fn find_message_spec(&self, name: &str) -> Option<&MessageSpec> { self.messages().find(|msg| msg.label() == &name.to_string()) From 1701e0c48aea266c8c477a173fe6f20d922ef4a1 Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Tue, 24 Oct 2023 13:26:18 +0100 Subject: [PATCH 05/23] attempt to add tests --- .../src/runtime_api/invalid_metadata.json | 14713 ++++++++++++++++ crates/transcode/src/env_check.rs | 64 + 2 files changed, 14777 insertions(+) create mode 100644 crates/extrinsics/src/runtime_api/invalid_metadata.json diff --git a/crates/extrinsics/src/runtime_api/invalid_metadata.json b/crates/extrinsics/src/runtime_api/invalid_metadata.json new file mode 100644 index 000000000..8531d48d8 --- /dev/null +++ b/crates/extrinsics/src/runtime_api/invalid_metadata.json @@ -0,0 +1,14713 @@ +[ + 1635018093, + { + "V15": { + "types": { + "types": [ + { + "id": 0, + "type": { + "path": [ + "sp_core", + "crypto", + "AccountId32" + ], + "def": { + "composite": { + "fields": [ + { + "type": 1, + "typeName": "[u8; 32]" + } + ] + } + } + } + }, + { + "id": 1, + "type": { + "def": { + "array": { + "len": 32, + "type": 2 + } + } + } + }, + { + "id": 2, + "type": { + "def": { + "primitive": "u8" + } + } + }, + { + "id": 3, + "type": { + "path": [ + "frame_system", + "AccountInfo" + ], + "params": [ + { + "name": "Nonce", + "type": 4 + }, + { + "name": "AccountData", + "type": 5 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "nonce", + "type": 4, + "typeName": "Nonce" + }, + { + "name": "consumers", + "type": 4, + "typeName": "RefCount" + }, + { + "name": "providers", + "type": 4, + "typeName": "RefCount" + }, + { + "name": "sufficients", + "type": 4, + "typeName": "RefCount" + }, + { + "name": "data", + "type": 5, + "typeName": "AccountData" + } + ] + } + } + } + }, + { + "id": 4, + "type": { + "def": { + "primitive": "u32" + } + } + }, + { + "id": 5, + "type": { + "path": [ + "pallet_balances", + "types", + "AccountData" + ], + "params": [ + { + "name": "Balance", + "type": 6 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "free", + "type": 6, + "typeName": "Balance" + }, + { + "name": "reserved", + "type": 6, + "typeName": "Balance" + }, + { + "name": "frozen", + "type": 6, + "typeName": "Balance" + }, + { + "name": "flags", + "type": 7, + "typeName": "ExtraFlags" + } + ] + } + } + } + }, + { + "id": 6, + "type": { + "def": { + "primitive": "u128" + } + } + }, + { + "id": 7, + "type": { + "path": [ + "pallet_balances", + "types", + "ExtraFlags" + ], + "def": { + "composite": { + "fields": [ + { + "type": 6, + "typeName": "u128" + } + ] + } + } + } + }, + { + "id": 8, + "type": { + "path": [ + "frame_support", + "dispatch", + "PerDispatchClass" + ], + "params": [ + { + "name": "T", + "type": 9 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "normal", + "type": 9, + "typeName": "T" + }, + { + "name": "operational", + "type": 9, + "typeName": "T" + }, + { + "name": "mandatory", + "type": 9, + "typeName": "T" + } + ] + } + } + } + }, + { + "id": 9, + "type": { + "path": [ + "sp_weights", + "weight_v2", + "Weight" + ], + "def": { + "composite": { + "fields": [ + { + "name": "ref_time", + "type": 10, + "typeName": "u64" + }, + { + "name": "proof_size", + "type": 10, + "typeName": "u64" + } + ] + } + } + } + }, + { + "id": 10, + "type": { + "def": { + "compact": { + "type": 11 + } + } + } + }, + { + "id": 11, + "type": { + "def": { + "primitive": "u64" + } + } + }, + { + "id": 12, + "type": { + "path": [ + "primitive_types", + "H256" + ], + "def": { + "composite": { + "fields": [ + { + "type": 1, + "typeName": "[u8; 32]" + } + ] + } + } + } + }, + { + "id": 13, + "type": { + "def": { + "sequence": { + "type": 2 + } + } + } + }, + { + "id": 14, + "type": { + "path": [ + "sp_runtime", + "generic", + "digest", + "Digest" + ], + "def": { + "composite": { + "fields": [ + { + "name": "logs", + "type": 15, + "typeName": "Vec" + } + ] + } + } + } + }, + { + "id": 15, + "type": { + "def": { + "sequence": { + "type": 16 + } + } + } + }, + { + "id": 16, + "type": { + "path": [ + "sp_runtime", + "generic", + "digest", + "DigestItem" + ], + "def": { + "variant": { + "variants": [ + { + "name": "PreRuntime", + "fields": [ + { + "type": 17, + "typeName": "ConsensusEngineId" + }, + { + "type": 13, + "typeName": "Vec" + } + ], + "index": 6 + }, + { + "name": "Consensus", + "fields": [ + { + "type": 17, + "typeName": "ConsensusEngineId" + }, + { + "type": 13, + "typeName": "Vec" + } + ], + "index": 4 + }, + { + "name": "Seal", + "fields": [ + { + "type": 17, + "typeName": "ConsensusEngineId" + }, + { + "type": 13, + "typeName": "Vec" + } + ], + "index": 5 + }, + { + "name": "Other", + "fields": [ + { + "type": 13, + "typeName": "Vec" + } + ], + "index": 0 + }, + { + "name": "RuntimeEnvironmentUpdated", + "index": 8 + } + ] + } + } + } + }, + { + "id": 17, + "type": { + "def": { + "array": { + "len": 4, + "type": 2 + } + } + } + }, + { + "id": 18, + "type": { + "def": { + "sequence": { + "type": 19 + } + } + } + }, + { + "id": 19, + "type": { + "path": [ + "frame_system", + "EventRecord" + ], + "params": [ + { + "name": "E", + "type": 20 + }, + { + "name": "T", + "type": 12 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "phase", + "type": 43, + "typeName": "Phase" + }, + { + "name": "event", + "type": 20, + "typeName": "E" + }, + { + "name": "topics", + "type": 44, + "typeName": "Vec" + } + ] + } + } + } + }, + { + "id": 20, + "type": { + "path": [ + "contracts_node_runtime", + "RuntimeEvent" + ], + "def": { + "variant": { + "variants": [ + { + "name": "System", + "fields": [ + { + "type": 21, + "typeName": "frame_system::Event" + } + ], + "index": 0 + }, + { + "name": "Utility", + "fields": [ + { + "type": 30, + "typeName": "pallet_utility::Event" + } + ], + "index": 2 + }, + { + "name": "Balances", + "fields": [ + { + "type": 33, + "typeName": "pallet_balances::Event" + } + ], + "index": 4 + }, + { + "name": "TransactionPayment", + "fields": [ + { + "type": 35, + "typeName": "pallet_transaction_payment::Event" + } + ], + "index": 6 + }, + { + "name": "Sudo", + "fields": [ + { + "type": 36, + "typeName": "pallet_sudo::Event" + } + ], + "index": 7 + }, + { + "name": "Contracts", + "fields": [ + { + "type": 38, + "typeName": "pallet_contracts::Event" + } + ], + "index": 8 + }, + { + "name": "Assets", + "fields": [ + { + "type": 41, + "typeName": "pallet_assets::Event" + } + ], + "index": 9 + } + ] + } + } + } + }, + { + "id": 21, + "type": { + "path": [ + "frame_system", + "pallet", + "Event" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "ExtrinsicSuccess", + "fields": [ + { + "name": "dispatch_info", + "type": 22, + "typeName": "DispatchInfo" + } + ], + "index": 0, + "docs": [ + "An extrinsic completed successfully." + ] + }, + { + "name": "ExtrinsicFailed", + "fields": [ + { + "name": "dispatch_error", + "type": 25, + "typeName": "DispatchError" + }, + { + "name": "dispatch_info", + "type": 22, + "typeName": "DispatchInfo" + } + ], + "index": 1, + "docs": [ + "An extrinsic failed." + ] + }, + { + "name": "CodeUpdated", + "index": 2, + "docs": [ + "`:code` was updated." + ] + }, + { + "name": "NewAccount", + "fields": [ + { + "name": "account", + "type": 0, + "typeName": "T::AccountId" + } + ], + "index": 3, + "docs": [ + "A new account was created." + ] + }, + { + "name": "KilledAccount", + "fields": [ + { + "name": "account", + "type": 0, + "typeName": "T::AccountId" + } + ], + "index": 4, + "docs": [ + "An account was reaped." + ] + }, + { + "name": "Remarked", + "fields": [ + { + "name": "sender", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "hash", + "type": 12, + "typeName": "T::Hash" + } + ], + "index": 5, + "docs": [ + "On on-chain remark happened." + ] + } + ] + } + }, + "docs": [ + "Event for the System pallet." + ] + } + }, + { + "id": 22, + "type": { + "path": [ + "frame_support", + "dispatch", + "DispatchInfo" + ], + "def": { + "composite": { + "fields": [ + { + "name": "weight", + "type": 9, + "typeName": "Weight" + }, + { + "name": "class", + "type": 23, + "typeName": "DispatchClass" + }, + { + "name": "pays_fee", + "type": 24, + "typeName": "Pays" + } + ] + } + } + } + }, + { + "id": 23, + "type": { + "path": [ + "frame_support", + "dispatch", + "DispatchClass" + ], + "def": { + "variant": { + "variants": [ + { + "name": "Normal", + "index": 0 + }, + { + "name": "Operational", + "index": 1 + }, + { + "name": "Mandatory", + "index": 2 + } + ] + } + } + } + }, + { + "id": 24, + "type": { + "path": [ + "frame_support", + "dispatch", + "Pays" + ], + "def": { + "variant": { + "variants": [ + { + "name": "Yes", + "index": 0 + }, + { + "name": "No", + "index": 1 + } + ] + } + } + } + }, + { + "id": 25, + "type": { + "path": [ + "sp_runtime", + "DispatchError" + ], + "def": { + "variant": { + "variants": [ + { + "name": "Other", + "index": 0 + }, + { + "name": "CannotLookup", + "index": 1 + }, + { + "name": "BadOrigin", + "index": 2 + }, + { + "name": "Module", + "fields": [ + { + "type": 26, + "typeName": "ModuleError" + } + ], + "index": 3 + }, + { + "name": "ConsumerRemaining", + "index": 4 + }, + { + "name": "NoProviders", + "index": 5 + }, + { + "name": "TooManyConsumers", + "index": 6 + }, + { + "name": "Token", + "fields": [ + { + "type": 27, + "typeName": "TokenError" + } + ], + "index": 7 + }, + { + "name": "Arithmetic", + "fields": [ + { + "type": 28, + "typeName": "ArithmeticError" + } + ], + "index": 8 + }, + { + "name": "Transactional", + "fields": [ + { + "type": 29, + "typeName": "TransactionalError" + } + ], + "index": 9 + }, + { + "name": "Exhausted", + "index": 10 + }, + { + "name": "Corruption", + "index": 11 + }, + { + "name": "Unavailable", + "index": 12 + }, + { + "name": "RootNotAllowed", + "index": 13 + } + ] + } + } + } + }, + { + "id": 26, + "type": { + "path": [ + "sp_runtime", + "ModuleError" + ], + "def": { + "composite": { + "fields": [ + { + "name": "index", + "type": 2, + "typeName": "u8" + }, + { + "name": "error", + "type": 17, + "typeName": "[u8; MAX_MODULE_ERROR_ENCODED_SIZE]" + } + ] + } + } + } + }, + { + "id": 27, + "type": { + "path": [ + "sp_runtime", + "TokenError" + ], + "def": { + "variant": { + "variants": [ + { + "name": "FundsUnavailable", + "index": 0 + }, + { + "name": "OnlyProvider", + "index": 1 + }, + { + "name": "BelowMinimum", + "index": 2 + }, + { + "name": "CannotCreate", + "index": 3 + }, + { + "name": "UnknownAsset", + "index": 4 + }, + { + "name": "Frozen", + "index": 5 + }, + { + "name": "Unsupported", + "index": 6 + }, + { + "name": "CannotCreateHold", + "index": 7 + }, + { + "name": "NotExpendable", + "index": 8 + }, + { + "name": "Blocked", + "index": 9 + } + ] + } + } + } + }, + { + "id": 28, + "type": { + "path": [ + "sp_arithmetic", + "ArithmeticError" + ], + "def": { + "variant": { + "variants": [ + { + "name": "Underflow", + "index": 0 + }, + { + "name": "Overflow", + "index": 1 + }, + { + "name": "DivisionByZero", + "index": 2 + } + ] + } + } + } + }, + { + "id": 29, + "type": { + "path": [ + "sp_runtime", + "TransactionalError" + ], + "def": { + "variant": { + "variants": [ + { + "name": "LimitReached", + "index": 0 + }, + { + "name": "NoLayer", + "index": 1 + } + ] + } + } + } + }, + { + "id": 30, + "type": { + "path": [ + "pallet_utility", + "pallet", + "Event" + ], + "def": { + "variant": { + "variants": [ + { + "name": "BatchInterrupted", + "fields": [ + { + "name": "index", + "type": 4, + "typeName": "u32" + }, + { + "name": "error", + "type": 25, + "typeName": "DispatchError" + } + ], + "index": 0, + "docs": [ + "Batch of dispatches did not complete fully. Index of first failing dispatch given, as", + "well as the error." + ] + }, + { + "name": "BatchCompleted", + "index": 1, + "docs": [ + "Batch of dispatches completed fully with no error." + ] + }, + { + "name": "BatchCompletedWithErrors", + "index": 2, + "docs": [ + "Batch of dispatches completed but has errors." + ] + }, + { + "name": "ItemCompleted", + "index": 3, + "docs": [ + "A single item within a Batch of dispatches has completed with no error." + ] + }, + { + "name": "ItemFailed", + "fields": [ + { + "name": "error", + "type": 25, + "typeName": "DispatchError" + } + ], + "index": 4, + "docs": [ + "A single item within a Batch of dispatches has completed with error." + ] + }, + { + "name": "DispatchedAs", + "fields": [ + { + "name": "result", + "type": 31, + "typeName": "DispatchResult" + } + ], + "index": 5, + "docs": [ + "A call was dispatched." + ] + } + ] + } + }, + "docs": [ + "The `Event` enum of this pallet" + ] + } + }, + { + "id": 31, + "type": { + "path": [ + "Result" + ], + "params": [ + { + "name": "T", + "type": 32 + }, + { + "name": "E", + "type": 25 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "Ok", + "fields": [ + { + "type": 32 + } + ], + "index": 0 + }, + { + "name": "Err", + "fields": [ + { + "type": 25 + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 32, + "type": { + "def": { + "tuple": [] + } + } + }, + { + "id": 33, + "type": { + "path": [ + "pallet_balances", + "pallet", + "Event" + ], + "params": [ + { + "name": "T", + "type": null + }, + { + "name": "I", + "type": null + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "Endowed", + "fields": [ + { + "name": "account", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "free_balance", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 0, + "docs": [ + "An account was created with some free balance." + ] + }, + { + "name": "DustLost", + "fields": [ + { + "name": "account", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 1, + "docs": [ + "An account was removed whose balance was non-zero but below ExistentialDeposit,", + "resulting in an outright loss." + ] + }, + { + "name": "Transfer", + "fields": [ + { + "name": "from", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "to", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 2, + "docs": [ + "Transfer succeeded." + ] + }, + { + "name": "BalanceSet", + "fields": [ + { + "name": "who", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "free", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 3, + "docs": [ + "A balance was set by root." + ] + }, + { + "name": "Reserved", + "fields": [ + { + "name": "who", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 4, + "docs": [ + "Some balance was reserved (moved from free to reserved)." + ] + }, + { + "name": "Unreserved", + "fields": [ + { + "name": "who", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 5, + "docs": [ + "Some balance was unreserved (moved from reserved to free)." + ] + }, + { + "name": "ReserveRepatriated", + "fields": [ + { + "name": "from", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "to", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + }, + { + "name": "destination_status", + "type": 34, + "typeName": "Status" + } + ], + "index": 6, + "docs": [ + "Some balance was moved from the reserve of the first account to the second account.", + "Final argument indicates the destination balance type." + ] + }, + { + "name": "Deposit", + "fields": [ + { + "name": "who", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 7, + "docs": [ + "Some amount was deposited (e.g. for transaction fees)." + ] + }, + { + "name": "Withdraw", + "fields": [ + { + "name": "who", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 8, + "docs": [ + "Some amount was withdrawn from the account (e.g. for transaction fees)." + ] + }, + { + "name": "Slashed", + "fields": [ + { + "name": "who", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 9, + "docs": [ + "Some amount was removed from the account (e.g. for misbehavior)." + ] + }, + { + "name": "Minted", + "fields": [ + { + "name": "who", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 10, + "docs": [ + "Some amount was minted into an account." + ] + }, + { + "name": "Burned", + "fields": [ + { + "name": "who", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 11, + "docs": [ + "Some amount was burned from an account." + ] + }, + { + "name": "Suspended", + "fields": [ + { + "name": "who", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 12, + "docs": [ + "Some amount was suspended from an account (it can be restored later)." + ] + }, + { + "name": "Restored", + "fields": [ + { + "name": "who", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 13, + "docs": [ + "Some amount was restored into an account." + ] + }, + { + "name": "Upgraded", + "fields": [ + { + "name": "who", + "type": 0, + "typeName": "T::AccountId" + } + ], + "index": 14, + "docs": [ + "An account was upgraded." + ] + }, + { + "name": "Issued", + "fields": [ + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 15, + "docs": [ + "Total issuance was increased by `amount`, creating a credit to be balanced." + ] + }, + { + "name": "Rescinded", + "fields": [ + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 16, + "docs": [ + "Total issuance was decreased by `amount`, creating a debt to be balanced." + ] + }, + { + "name": "Locked", + "fields": [ + { + "name": "who", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 17, + "docs": [ + "Some balance was locked." + ] + }, + { + "name": "Unlocked", + "fields": [ + { + "name": "who", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 18, + "docs": [ + "Some balance was unlocked." + ] + }, + { + "name": "Frozen", + "fields": [ + { + "name": "who", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 19, + "docs": [ + "Some balance was frozen." + ] + }, + { + "name": "Thawed", + "fields": [ + { + "name": "who", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 20, + "docs": [ + "Some balance was thawed." + ] + } + ] + } + }, + "docs": [ + "The `Event` enum of this pallet" + ] + } + }, + { + "id": 34, + "type": { + "path": [ + "frame_support", + "traits", + "tokens", + "misc", + "BalanceStatus" + ], + "def": { + "variant": { + "variants": [ + { + "name": "Free", + "index": 0 + }, + { + "name": "Reserved", + "index": 1 + } + ] + } + } + } + }, + { + "id": 35, + "type": { + "path": [ + "pallet_transaction_payment", + "pallet", + "Event" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "TransactionFeePaid", + "fields": [ + { + "name": "who", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "actual_fee", + "type": 6, + "typeName": "BalanceOf" + }, + { + "name": "tip", + "type": 6, + "typeName": "BalanceOf" + } + ], + "index": 0, + "docs": [ + "A transaction fee `actual_fee`, of which `tip` was added to the minimum inclusion fee,", + "has been paid by `who`." + ] + } + ] + } + }, + "docs": [ + "The `Event` enum of this pallet" + ] + } + }, + { + "id": 36, + "type": { + "path": [ + "pallet_sudo", + "pallet", + "Event" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "Sudid", + "fields": [ + { + "name": "sudo_result", + "type": 31, + "typeName": "DispatchResult", + "docs": [ + "The result of the call made by the sudo user." + ] + } + ], + "index": 0, + "docs": [ + "A sudo call just took place." + ] + }, + { + "name": "KeyChanged", + "fields": [ + { + "name": "old_sudoer", + "type": 37, + "typeName": "Option", + "docs": [ + "The old sudo key if one was previously set." + ] + } + ], + "index": 1, + "docs": [ + "The sudo key has been updated." + ] + }, + { + "name": "SudoAsDone", + "fields": [ + { + "name": "sudo_result", + "type": 31, + "typeName": "DispatchResult", + "docs": [ + "The result of the call made by the sudo user." + ] + } + ], + "index": 2, + "docs": [ + "A [sudo_as](Pallet::sudo_as) call just took place." + ] + } + ] + } + }, + "docs": [ + "The `Event` enum of this pallet" + ] + } + }, + { + "id": 37, + "type": { + "path": [ + "Option" + ], + "params": [ + { + "name": "T", + "type": 0 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "None", + "index": 0 + }, + { + "name": "Some", + "fields": [ + { + "type": 0 + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 38, + "type": { + "path": [ + "pallet_contracts", + "pallet", + "Event" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "Instantiated", + "fields": [ + { + "name": "deployer", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "contract", + "type": 0, + "typeName": "T::AccountId" + } + ], + "index": 0, + "docs": [ + "Contract deployed by address at the specified address." + ] + }, + { + "name": "Terminated", + "fields": [ + { + "name": "contract", + "type": 0, + "typeName": "T::AccountId", + "docs": [ + "The contract that was terminated." + ] + }, + { + "name": "beneficiary", + "type": 0, + "typeName": "T::AccountId", + "docs": [ + "The account that received the contracts remaining balance" + ] + } + ], + "index": 1, + "docs": [ + "Contract has been removed.", + "", + "# Note", + "", + "The only way for a contract to be removed and emitting this event is by calling", + "`seal_terminate`." + ] + }, + { + "name": "CodeStored", + "fields": [ + { + "name": "code_hash", + "type": 12, + "typeName": "T::Hash" + }, + { + "name": "deposit_held", + "type": 6, + "typeName": "BalanceOf" + }, + { + "name": "uploader", + "type": 0, + "typeName": "T::AccountId" + } + ], + "index": 2, + "docs": [ + "Code with the specified hash has been stored." + ] + }, + { + "name": "ContractEmitted", + "fields": [ + { + "name": "contract", + "type": 0, + "typeName": "T::AccountId", + "docs": [ + "The contract that emitted the event." + ] + }, + { + "name": "data", + "type": 13, + "typeName": "Vec", + "docs": [ + "Data supplied by the contract. Metadata generated during contract compilation", + "is needed to decode it." + ] + } + ], + "index": 3, + "docs": [ + "A custom event emitted by the contract." + ] + }, + { + "name": "CodeRemoved", + "fields": [ + { + "name": "code_hash", + "type": 12, + "typeName": "T::Hash" + }, + { + "name": "deposit_released", + "type": 6, + "typeName": "BalanceOf" + }, + { + "name": "remover", + "type": 0, + "typeName": "T::AccountId" + } + ], + "index": 4, + "docs": [ + "A code with the specified hash was removed." + ] + }, + { + "name": "ContractCodeUpdated", + "fields": [ + { + "name": "contract", + "type": 0, + "typeName": "T::AccountId", + "docs": [ + "The contract that has been updated." + ] + }, + { + "name": "new_code_hash", + "type": 12, + "typeName": "T::Hash", + "docs": [ + "New code hash that was set for the contract." + ] + }, + { + "name": "old_code_hash", + "type": 12, + "typeName": "T::Hash", + "docs": [ + "Previous code hash of the contract." + ] + } + ], + "index": 5, + "docs": [ + "A contract's code was updated." + ] + }, + { + "name": "Called", + "fields": [ + { + "name": "caller", + "type": 39, + "typeName": "Origin", + "docs": [ + "The caller of the `contract`." + ] + }, + { + "name": "contract", + "type": 0, + "typeName": "T::AccountId", + "docs": [ + "The contract that was called." + ] + } + ], + "index": 6, + "docs": [ + "A contract was called either by a plain account or another contract.", + "", + "# Note", + "", + "Please keep in mind that like all events this is only emitted for successful", + "calls. This is because on failure all storage changes including events are", + "rolled back." + ] + }, + { + "name": "DelegateCalled", + "fields": [ + { + "name": "contract", + "type": 0, + "typeName": "T::AccountId", + "docs": [ + "The contract that performed the delegate call and hence in whose context", + "the `code_hash` is executed." + ] + }, + { + "name": "code_hash", + "type": 12, + "typeName": "CodeHash", + "docs": [ + "The code hash that was delegate called." + ] + } + ], + "index": 7, + "docs": [ + "A contract delegate called a code hash.", + "", + "# Note", + "", + "Please keep in mind that like all events this is only emitted for successful", + "calls. This is because on failure all storage changes including events are", + "rolled back." + ] + }, + { + "name": "StorageDepositTransferredAndHeld", + "fields": [ + { + "name": "from", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "to", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "BalanceOf" + } + ], + "index": 8, + "docs": [ + "Some funds have been transferred and held as storage deposit." + ] + }, + { + "name": "StorageDepositTransferredAndReleased", + "fields": [ + { + "name": "from", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "to", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "BalanceOf" + } + ], + "index": 9, + "docs": [ + "Some storage deposit funds have been transferred and released." + ] + } + ] + } + }, + "docs": [ + "The `Event` enum of this pallet" + ] + } + }, + { + "id": 39, + "type": { + "path": [ + "pallet_contracts", + "Origin" + ], + "params": [ + { + "name": "T", + "type": 40 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "Root", + "index": 0 + }, + { + "name": "Signed", + "fields": [ + { + "type": 0, + "typeName": "T::AccountId" + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 40, + "type": { + "path": [ + "contracts_node_runtime", + "Runtime" + ], + "def": { + "composite": {} + } + } + }, + { + "id": 41, + "type": { + "path": [ + "pallet_assets", + "pallet", + "Event" + ], + "params": [ + { + "name": "T", + "type": null + }, + { + "name": "I", + "type": null + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "Created", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + }, + { + "name": "creator", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "owner", + "type": 0, + "typeName": "T::AccountId" + } + ], + "index": 0, + "docs": [ + "Some asset class was created." + ] + }, + { + "name": "Issued", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + }, + { + "name": "owner", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 1, + "docs": [ + "Some assets were issued." + ] + }, + { + "name": "Transferred", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + }, + { + "name": "from", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "to", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 2, + "docs": [ + "Some assets were transferred." + ] + }, + { + "name": "Burned", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + }, + { + "name": "owner", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "balance", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 3, + "docs": [ + "Some assets were destroyed." + ] + }, + { + "name": "TeamChanged", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + }, + { + "name": "issuer", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "admin", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "freezer", + "type": 0, + "typeName": "T::AccountId" + } + ], + "index": 4, + "docs": [ + "The management team changed." + ] + }, + { + "name": "OwnerChanged", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + }, + { + "name": "owner", + "type": 0, + "typeName": "T::AccountId" + } + ], + "index": 5, + "docs": [ + "The owner changed." + ] + }, + { + "name": "Frozen", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + }, + { + "name": "who", + "type": 0, + "typeName": "T::AccountId" + } + ], + "index": 6, + "docs": [ + "Some account `who` was frozen." + ] + }, + { + "name": "Thawed", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + }, + { + "name": "who", + "type": 0, + "typeName": "T::AccountId" + } + ], + "index": 7, + "docs": [ + "Some account `who` was thawed." + ] + }, + { + "name": "AssetFrozen", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + } + ], + "index": 8, + "docs": [ + "Some asset `asset_id` was frozen." + ] + }, + { + "name": "AssetThawed", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + } + ], + "index": 9, + "docs": [ + "Some asset `asset_id` was thawed." + ] + }, + { + "name": "AccountsDestroyed", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + }, + { + "name": "accounts_destroyed", + "type": 4, + "typeName": "u32" + }, + { + "name": "accounts_remaining", + "type": 4, + "typeName": "u32" + } + ], + "index": 10, + "docs": [ + "Accounts were destroyed for given asset." + ] + }, + { + "name": "ApprovalsDestroyed", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + }, + { + "name": "approvals_destroyed", + "type": 4, + "typeName": "u32" + }, + { + "name": "approvals_remaining", + "type": 4, + "typeName": "u32" + } + ], + "index": 11, + "docs": [ + "Approvals were destroyed for given asset." + ] + }, + { + "name": "DestructionStarted", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + } + ], + "index": 12, + "docs": [ + "An asset class is in the process of being destroyed." + ] + }, + { + "name": "Destroyed", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + } + ], + "index": 13, + "docs": [ + "An asset class was destroyed." + ] + }, + { + "name": "ForceCreated", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + }, + { + "name": "owner", + "type": 0, + "typeName": "T::AccountId" + } + ], + "index": 14, + "docs": [ + "Some asset class was force-created." + ] + }, + { + "name": "MetadataSet", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + }, + { + "name": "name", + "type": 13, + "typeName": "Vec" + }, + { + "name": "symbol", + "type": 13, + "typeName": "Vec" + }, + { + "name": "decimals", + "type": 2, + "typeName": "u8" + }, + { + "name": "is_frozen", + "type": 42, + "typeName": "bool" + } + ], + "index": 15, + "docs": [ + "New metadata has been set for an asset." + ] + }, + { + "name": "MetadataCleared", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + } + ], + "index": 16, + "docs": [ + "Metadata has been cleared for an asset." + ] + }, + { + "name": "ApprovedTransfer", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + }, + { + "name": "source", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "delegate", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 17, + "docs": [ + "(Additional) funds have been approved for transfer to a destination account." + ] + }, + { + "name": "ApprovalCancelled", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + }, + { + "name": "owner", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "delegate", + "type": 0, + "typeName": "T::AccountId" + } + ], + "index": 18, + "docs": [ + "An approval for account `delegate` was cancelled by `owner`." + ] + }, + { + "name": "TransferredApproved", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + }, + { + "name": "owner", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "delegate", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "destination", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 19, + "docs": [ + "An `amount` was transferred in its entirety from `owner` to `destination` by", + "the approved `delegate`." + ] + }, + { + "name": "AssetStatusChanged", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + } + ], + "index": 20, + "docs": [ + "An asset has had its attributes changed by the `Force` origin." + ] + }, + { + "name": "AssetMinBalanceChanged", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + }, + { + "name": "new_min_balance", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 21, + "docs": [ + "The min_balance of an asset has been updated by the asset owner." + ] + }, + { + "name": "Touched", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + }, + { + "name": "who", + "type": 0, + "typeName": "T::AccountId" + }, + { + "name": "depositor", + "type": 0, + "typeName": "T::AccountId" + } + ], + "index": 22, + "docs": [ + "Some account `who` was created with a deposit from `depositor`." + ] + }, + { + "name": "Blocked", + "fields": [ + { + "name": "asset_id", + "type": 4, + "typeName": "T::AssetId" + }, + { + "name": "who", + "type": 0, + "typeName": "T::AccountId" + } + ], + "index": 23, + "docs": [ + "Some account `who` was blocked." + ] + } + ] + } + }, + "docs": [ + "The `Event` enum of this pallet" + ] + } + }, + { + "id": 42, + "type": { + "def": { + "primitive": "bool" + } + } + }, + { + "id": 43, + "type": { + "path": [ + "frame_system", + "Phase" + ], + "def": { + "variant": { + "variants": [ + { + "name": "ApplyExtrinsic", + "fields": [ + { + "type": 4, + "typeName": "u32" + } + ], + "index": 0 + }, + { + "name": "Finalization", + "index": 1 + }, + { + "name": "Initialization", + "index": 2 + } + ] + } + } + } + }, + { + "id": 44, + "type": { + "def": { + "sequence": { + "type": 12 + } + } + } + }, + { + "id": 45, + "type": { + "def": { + "sequence": { + "type": 46 + } + } + } + }, + { + "id": 46, + "type": { + "def": { + "tuple": [ + 4, + 4 + ] + } + } + }, + { + "id": 47, + "type": { + "path": [ + "frame_system", + "LastRuntimeUpgradeInfo" + ], + "def": { + "composite": { + "fields": [ + { + "name": "spec_version", + "type": 48, + "typeName": "codec::Compact" + }, + { + "name": "spec_name", + "type": 49, + "typeName": "sp_runtime::RuntimeString" + } + ] + } + } + } + }, + { + "id": 48, + "type": { + "def": { + "compact": { + "type": 4 + } + } + } + }, + { + "id": 49, + "type": { + "def": { + "primitive": "str" + } + } + }, + { + "id": 50, + "type": { + "path": [ + "frame_system", + "pallet", + "Call" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "remark", + "fields": [ + { + "name": "remark", + "type": 13, + "typeName": "Vec" + } + ], + "index": 0, + "docs": [ + "See [`Pallet::remark`]." + ] + }, + { + "name": "set_heap_pages", + "fields": [ + { + "name": "pages", + "type": 11, + "typeName": "u64" + } + ], + "index": 1, + "docs": [ + "See [`Pallet::set_heap_pages`]." + ] + }, + { + "name": "set_code", + "fields": [ + { + "name": "code", + "type": 13, + "typeName": "Vec" + } + ], + "index": 2, + "docs": [ + "See [`Pallet::set_code`]." + ] + }, + { + "name": "set_code_without_checks", + "fields": [ + { + "name": "code", + "type": 13, + "typeName": "Vec" + } + ], + "index": 3, + "docs": [ + "See [`Pallet::set_code_without_checks`]." + ] + }, + { + "name": "set_storage", + "fields": [ + { + "name": "items", + "type": 51, + "typeName": "Vec" + } + ], + "index": 4, + "docs": [ + "See [`Pallet::set_storage`]." + ] + }, + { + "name": "kill_storage", + "fields": [ + { + "name": "keys", + "type": 53, + "typeName": "Vec" + } + ], + "index": 5, + "docs": [ + "See [`Pallet::kill_storage`]." + ] + }, + { + "name": "kill_prefix", + "fields": [ + { + "name": "prefix", + "type": 13, + "typeName": "Key" + }, + { + "name": "subkeys", + "type": 4, + "typeName": "u32" + } + ], + "index": 6, + "docs": [ + "See [`Pallet::kill_prefix`]." + ] + }, + { + "name": "remark_with_event", + "fields": [ + { + "name": "remark", + "type": 13, + "typeName": "Vec" + } + ], + "index": 7, + "docs": [ + "See [`Pallet::remark_with_event`]." + ] + } + ] + } + }, + "docs": [ + "Contains a variant per dispatchable extrinsic that this pallet has." + ] + } + }, + { + "id": 51, + "type": { + "def": { + "sequence": { + "type": 52 + } + } + } + }, + { + "id": 52, + "type": { + "def": { + "tuple": [ + 13, + 13 + ] + } + } + }, + { + "id": 53, + "type": { + "def": { + "sequence": { + "type": 13 + } + } + } + }, + { + "id": 54, + "type": { + "path": [ + "frame_system", + "limits", + "BlockWeights" + ], + "def": { + "composite": { + "fields": [ + { + "name": "base_block", + "type": 9, + "typeName": "Weight" + }, + { + "name": "max_block", + "type": 9, + "typeName": "Weight" + }, + { + "name": "per_class", + "type": 55, + "typeName": "PerDispatchClass" + } + ] + } + } + } + }, + { + "id": 55, + "type": { + "path": [ + "frame_support", + "dispatch", + "PerDispatchClass" + ], + "params": [ + { + "name": "T", + "type": 56 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "normal", + "type": 56, + "typeName": "T" + }, + { + "name": "operational", + "type": 56, + "typeName": "T" + }, + { + "name": "mandatory", + "type": 56, + "typeName": "T" + } + ] + } + } + } + }, + { + "id": 56, + "type": { + "path": [ + "frame_system", + "limits", + "WeightsPerClass" + ], + "def": { + "composite": { + "fields": [ + { + "name": "base_extrinsic", + "type": 9, + "typeName": "Weight" + }, + { + "name": "max_extrinsic", + "type": 57, + "typeName": "Option" + }, + { + "name": "max_total", + "type": 57, + "typeName": "Option" + }, + { + "name": "reserved", + "type": 57, + "typeName": "Option" + } + ] + } + } + } + }, + { + "id": 57, + "type": { + "path": [ + "Option" + ], + "params": [ + { + "name": "T", + "type": 9 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "None", + "index": 0 + }, + { + "name": "Some", + "fields": [ + { + "type": 9 + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 58, + "type": { + "path": [ + "frame_system", + "limits", + "BlockLength" + ], + "def": { + "composite": { + "fields": [ + { + "name": "max", + "type": 59, + "typeName": "PerDispatchClass" + } + ] + } + } + } + }, + { + "id": 59, + "type": { + "path": [ + "frame_support", + "dispatch", + "PerDispatchClass" + ], + "params": [ + { + "name": "T", + "type": 4 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "normal", + "type": 4, + "typeName": "T" + }, + { + "name": "operational", + "type": 4, + "typeName": "T" + }, + { + "name": "mandatory", + "type": 4, + "typeName": "T" + } + ] + } + } + } + }, + { + "id": 60, + "type": { + "path": [ + "sp_weights", + "RuntimeDbWeight" + ], + "def": { + "composite": { + "fields": [ + { + "name": "read", + "type": 11, + "typeName": "u64" + }, + { + "name": "write", + "type": 11, + "typeName": "u64" + } + ] + } + } + } + }, + { + "id": 61, + "type": { + "path": [ + "sp_version", + "RuntimeVersion" + ], + "def": { + "composite": { + "fields": [ + { + "name": "spec_name", + "type": 49, + "typeName": "RuntimeString" + }, + { + "name": "impl_name", + "type": 49, + "typeName": "RuntimeString" + }, + { + "name": "authoring_version", + "type": 4, + "typeName": "u32" + }, + { + "name": "spec_version", + "type": 4, + "typeName": "u32" + }, + { + "name": "impl_version", + "type": 4, + "typeName": "u32" + }, + { + "name": "apis", + "type": 62, + "typeName": "ApisVec" + }, + { + "name": "transaction_version", + "type": 4, + "typeName": "u32" + }, + { + "name": "state_version", + "type": 2, + "typeName": "u8" + } + ] + } + } + } + }, + { + "id": 62, + "type": { + "path": [ + "Cow" + ], + "params": [ + { + "name": "T", + "type": 63 + } + ], + "def": { + "composite": { + "fields": [ + { + "type": 63 + } + ] + } + } + } + }, + { + "id": 63, + "type": { + "def": { + "sequence": { + "type": 64 + } + } + } + }, + { + "id": 64, + "type": { + "def": { + "tuple": [ + 65, + 4 + ] + } + } + }, + { + "id": 65, + "type": { + "def": { + "array": { + "len": 8, + "type": 2 + } + } + } + }, + { + "id": 66, + "type": { + "def": { + "primitive": "u16" + } + } + }, + { + "id": 67, + "type": { + "path": [ + "frame_system", + "pallet", + "Error" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "InvalidSpecName", + "index": 0, + "docs": [ + "The name of specification does not match between the current runtime", + "and the new runtime." + ] + }, + { + "name": "SpecVersionNeedsToIncrease", + "index": 1, + "docs": [ + "The specification version is not allowed to decrease between the current runtime", + "and the new runtime." + ] + }, + { + "name": "FailedToExtractRuntimeVersion", + "index": 2, + "docs": [ + "Failed to extract the runtime version from the new runtime.", + "", + "Either calling `Core_version` or decoding `RuntimeVersion` failed." + ] + }, + { + "name": "NonDefaultComposite", + "index": 3, + "docs": [ + "Suicide called when the account has non-default composite data." + ] + }, + { + "name": "NonZeroRefCount", + "index": 4, + "docs": [ + "There is a non-zero reference count preventing the account from being purged." + ] + }, + { + "name": "CallFiltered", + "index": 5, + "docs": [ + "The origin filter prevent the call to be dispatched." + ] + } + ] + } + }, + "docs": [ + "Error for the System pallet" + ] + } + }, + { + "id": 68, + "type": { + "path": [ + "bounded_collections", + "bounded_vec", + "BoundedVec" + ], + "params": [ + { + "name": "T", + "type": 12 + }, + { + "name": "S", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "type": 44, + "typeName": "Vec" + } + ] + } + } + } + }, + { + "id": 69, + "type": { + "path": [ + "pallet_utility", + "pallet", + "Call" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "batch", + "fields": [ + { + "name": "calls", + "type": 70, + "typeName": "Vec<::RuntimeCall>" + } + ], + "index": 0, + "docs": [ + "See [`Pallet::batch`]." + ] + }, + { + "name": "as_derivative", + "fields": [ + { + "name": "index", + "type": 66, + "typeName": "u16" + }, + { + "name": "call", + "type": 71, + "typeName": "Box<::RuntimeCall>" + } + ], + "index": 1, + "docs": [ + "See [`Pallet::as_derivative`]." + ] + }, + { + "name": "batch_all", + "fields": [ + { + "name": "calls", + "type": 70, + "typeName": "Vec<::RuntimeCall>" + } + ], + "index": 2, + "docs": [ + "See [`Pallet::batch_all`]." + ] + }, + { + "name": "dispatch_as", + "fields": [ + { + "name": "as_origin", + "type": 84, + "typeName": "Box" + }, + { + "name": "call", + "type": 71, + "typeName": "Box<::RuntimeCall>" + } + ], + "index": 3, + "docs": [ + "See [`Pallet::dispatch_as`]." + ] + }, + { + "name": "force_batch", + "fields": [ + { + "name": "calls", + "type": 70, + "typeName": "Vec<::RuntimeCall>" + } + ], + "index": 4, + "docs": [ + "See [`Pallet::force_batch`]." + ] + }, + { + "name": "with_weight", + "fields": [ + { + "name": "call", + "type": 71, + "typeName": "Box<::RuntimeCall>" + }, + { + "name": "weight", + "type": 9, + "typeName": "Weight" + } + ], + "index": 5, + "docs": [ + "See [`Pallet::with_weight`]." + ] + } + ] + } + }, + "docs": [ + "Contains a variant per dispatchable extrinsic that this pallet has." + ] + } + }, + { + "id": 70, + "type": { + "def": { + "sequence": { + "type": 71 + } + } + } + }, + { + "id": 71, + "type": { + "path": [ + "contracts_node_runtime", + "RuntimeCall" + ], + "def": { + "variant": { + "variants": [ + { + "name": "System", + "fields": [ + { + "type": 50, + "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor" + } + ], + "index": 0 + }, + { + "name": "Utility", + "fields": [ + { + "type": 69, + "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor" + } + ], + "index": 2 + }, + { + "name": "Timestamp", + "fields": [ + { + "type": 72, + "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor" + } + ], + "index": 3 + }, + { + "name": "Balances", + "fields": [ + { + "type": 73, + "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor" + } + ], + "index": 4 + }, + { + "name": "Sudo", + "fields": [ + { + "type": 79, + "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor" + } + ], + "index": 7 + }, + { + "name": "Contracts", + "fields": [ + { + "type": 80, + "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor" + } + ], + "index": 8 + }, + { + "name": "Assets", + "fields": [ + { + "type": 83, + "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor" + } + ], + "index": 9 + } + ] + } + } + } + }, + { + "id": 72, + "type": { + "path": [ + "pallet_timestamp", + "pallet", + "Call" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "set", + "fields": [ + { + "name": "now", + "type": 10, + "typeName": "T::Moment" + } + ], + "index": 0, + "docs": [ + "See [`Pallet::set`]." + ] + } + ] + } + }, + "docs": [ + "Contains a variant per dispatchable extrinsic that this pallet has." + ] + } + }, + { + "id": 73, + "type": { + "path": [ + "pallet_balances", + "pallet", + "Call" + ], + "params": [ + { + "name": "T", + "type": null + }, + { + "name": "I", + "type": null + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "transfer_allow_death", + "fields": [ + { + "name": "dest", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "value", + "type": 77, + "typeName": "T::Balance" + } + ], + "index": 0, + "docs": [ + "See [`Pallet::transfer_allow_death`]." + ] + }, + { + "name": "force_transfer", + "fields": [ + { + "name": "source", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "dest", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "value", + "type": 77, + "typeName": "T::Balance" + } + ], + "index": 2, + "docs": [ + "See [`Pallet::force_transfer`]." + ] + }, + { + "name": "transfer_keep_alive", + "fields": [ + { + "name": "dest", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "value", + "type": 77, + "typeName": "T::Balance" + } + ], + "index": 3, + "docs": [ + "See [`Pallet::transfer_keep_alive`]." + ] + }, + { + "name": "transfer_all", + "fields": [ + { + "name": "dest", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "keep_alive", + "type": 42, + "typeName": "bool" + } + ], + "index": 4, + "docs": [ + "See [`Pallet::transfer_all`]." + ] + }, + { + "name": "force_unreserve", + "fields": [ + { + "name": "who", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "amount", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 5, + "docs": [ + "See [`Pallet::force_unreserve`]." + ] + }, + { + "name": "upgrade_accounts", + "fields": [ + { + "name": "who", + "type": 78, + "typeName": "Vec" + } + ], + "index": 6, + "docs": [ + "See [`Pallet::upgrade_accounts`]." + ] + }, + { + "name": "force_set_balance", + "fields": [ + { + "name": "who", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "new_free", + "type": 77, + "typeName": "T::Balance" + } + ], + "index": 8, + "docs": [ + "See [`Pallet::force_set_balance`]." + ] + } + ] + } + }, + "docs": [ + "Contains a variant per dispatchable extrinsic that this pallet has." + ] + } + }, + { + "id": 74, + "type": { + "path": [ + "sp_runtime", + "multiaddress", + "MultiAddress" + ], + "params": [ + { + "name": "AccountId", + "type": 0 + }, + { + "name": "AccountIndex", + "type": 32 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "Id", + "fields": [ + { + "type": 0, + "typeName": "AccountId" + } + ], + "index": 0 + }, + { + "name": "Index", + "fields": [ + { + "type": 75, + "typeName": "AccountIndex" + } + ], + "index": 1 + }, + { + "name": "Raw", + "fields": [ + { + "type": 13, + "typeName": "Vec" + } + ], + "index": 2 + }, + { + "name": "Address32", + "fields": [ + { + "type": 1, + "typeName": "[u8; 32]" + } + ], + "index": 3 + }, + { + "name": "Address20", + "fields": [ + { + "type": 76, + "typeName": "[u8; 20]" + } + ], + "index": 4 + } + ] + } + } + } + }, + { + "id": 75, + "type": { + "def": { + "compact": { + "type": 32 + } + } + } + }, + { + "id": 76, + "type": { + "def": { + "array": { + "len": 20, + "type": 2 + } + } + } + }, + { + "id": 77, + "type": { + "def": { + "compact": { + "type": 6 + } + } + } + }, + { + "id": 78, + "type": { + "def": { + "sequence": { + "type": 0 + } + } + } + }, + { + "id": 79, + "type": { + "path": [ + "pallet_sudo", + "pallet", + "Call" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "sudo", + "fields": [ + { + "name": "call", + "type": 71, + "typeName": "Box<::RuntimeCall>" + } + ], + "index": 0, + "docs": [ + "See [`Pallet::sudo`]." + ] + }, + { + "name": "sudo_unchecked_weight", + "fields": [ + { + "name": "call", + "type": 71, + "typeName": "Box<::RuntimeCall>" + }, + { + "name": "weight", + "type": 9, + "typeName": "Weight" + } + ], + "index": 1, + "docs": [ + "See [`Pallet::sudo_unchecked_weight`]." + ] + }, + { + "name": "set_key", + "fields": [ + { + "name": "new", + "type": 74, + "typeName": "AccountIdLookupOf" + } + ], + "index": 2, + "docs": [ + "See [`Pallet::set_key`]." + ] + }, + { + "name": "sudo_as", + "fields": [ + { + "name": "who", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "call", + "type": 71, + "typeName": "Box<::RuntimeCall>" + } + ], + "index": 3, + "docs": [ + "See [`Pallet::sudo_as`]." + ] + } + ] + } + }, + "docs": [ + "Contains a variant per dispatchable extrinsic that this pallet has." + ] + } + }, + { + "id": 80, + "type": { + "path": [ + "pallet_contracts", + "pallet", + "Call" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "call_old_weight", + "fields": [ + { + "name": "dest", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "value", + "type": 77, + "typeName": "BalanceOf" + }, + { + "name": "gas_limit", + "type": 10, + "typeName": "OldWeight" + }, + { + "name": "storage_deposit_limit", + "type": 81, + "typeName": "Option< as codec::HasCompact>::Type>" + }, + { + "name": "data", + "type": 13, + "typeName": "Vec" + } + ], + "index": 0, + "docs": [ + "See [`Pallet::call_old_weight`]." + ] + }, + { + "name": "instantiate_with_code_old_weight", + "fields": [ + { + "name": "value", + "type": 77, + "typeName": "BalanceOf" + }, + { + "name": "gas_limit", + "type": 10, + "typeName": "OldWeight" + }, + { + "name": "storage_deposit_limit", + "type": 81, + "typeName": "Option< as codec::HasCompact>::Type>" + }, + { + "name": "code", + "type": 13, + "typeName": "Vec" + }, + { + "name": "data", + "type": 13, + "typeName": "Vec" + }, + { + "name": "salt", + "type": 13, + "typeName": "Vec" + } + ], + "index": 1, + "docs": [ + "See [`Pallet::instantiate_with_code_old_weight`]." + ] + }, + { + "name": "instantiate_old_weight", + "fields": [ + { + "name": "value", + "type": 77, + "typeName": "BalanceOf" + }, + { + "name": "gas_limit", + "type": 10, + "typeName": "OldWeight" + }, + { + "name": "storage_deposit_limit", + "type": 81, + "typeName": "Option< as codec::HasCompact>::Type>" + }, + { + "name": "code_hash", + "type": 12, + "typeName": "CodeHash" + }, + { + "name": "data", + "type": 13, + "typeName": "Vec" + }, + { + "name": "salt", + "type": 13, + "typeName": "Vec" + } + ], + "index": 2, + "docs": [ + "See [`Pallet::instantiate_old_weight`]." + ] + }, + { + "name": "upload_code", + "fields": [ + { + "name": "code", + "type": 13, + "typeName": "Vec" + }, + { + "name": "storage_deposit_limit", + "type": 81, + "typeName": "Option< as codec::HasCompact>::Type>" + }, + { + "name": "determinism", + "type": 82, + "typeName": "Determinism" + } + ], + "index": 3, + "docs": [ + "See [`Pallet::upload_code`]." + ] + }, + { + "name": "remove_code", + "fields": [ + { + "name": "code_hash", + "type": 12, + "typeName": "CodeHash" + } + ], + "index": 4, + "docs": [ + "See [`Pallet::remove_code`]." + ] + }, + { + "name": "set_code", + "fields": [ + { + "name": "dest", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "code_hash", + "type": 12, + "typeName": "CodeHash" + } + ], + "index": 5, + "docs": [ + "See [`Pallet::set_code`]." + ] + }, + { + "name": "call", + "fields": [ + { + "name": "dest", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "value", + "type": 77, + "typeName": "BalanceOf" + }, + { + "name": "gas_limit", + "type": 9, + "typeName": "Weight" + }, + { + "name": "storage_deposit_limit", + "type": 81, + "typeName": "Option< as codec::HasCompact>::Type>" + }, + { + "name": "data", + "type": 13, + "typeName": "Vec" + } + ], + "index": 6, + "docs": [ + "See [`Pallet::call`]." + ] + }, + { + "name": "instantiate_with_code", + "fields": [ + { + "name": "value", + "type": 77, + "typeName": "BalanceOf" + }, + { + "name": "gas_limit", + "type": 9, + "typeName": "Weight" + }, + { + "name": "storage_deposit_limit", + "type": 81, + "typeName": "Option< as codec::HasCompact>::Type>" + }, + { + "name": "code", + "type": 13, + "typeName": "Vec" + }, + { + "name": "data", + "type": 13, + "typeName": "Vec" + }, + { + "name": "salt", + "type": 13, + "typeName": "Vec" + } + ], + "index": 7, + "docs": [ + "See [`Pallet::instantiate_with_code`]." + ] + }, + { + "name": "instantiate", + "fields": [ + { + "name": "value", + "type": 77, + "typeName": "BalanceOf" + }, + { + "name": "gas_limit", + "type": 9, + "typeName": "Weight" + }, + { + "name": "storage_deposit_limit", + "type": 81, + "typeName": "Option< as codec::HasCompact>::Type>" + }, + { + "name": "code_hash", + "type": 12, + "typeName": "CodeHash" + }, + { + "name": "data", + "type": 13, + "typeName": "Vec" + }, + { + "name": "salt", + "type": 13, + "typeName": "Vec" + } + ], + "index": 8, + "docs": [ + "See [`Pallet::instantiate`]." + ] + }, + { + "name": "migrate", + "fields": [ + { + "name": "weight_limit", + "type": 9, + "typeName": "Weight" + } + ], + "index": 9, + "docs": [ + "See [`Pallet::migrate`]." + ] + } + ] + } + }, + "docs": [ + "Contains a variant per dispatchable extrinsic that this pallet has." + ] + } + }, + { + "id": 81, + "type": { + "path": [ + "Option" + ], + "params": [ + { + "name": "T", + "type": 77 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "None", + "index": 0 + }, + { + "name": "Some", + "fields": [ + { + "type": 77 + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 82, + "type": { + "path": [ + "pallet_contracts", + "wasm", + "Determinism" + ], + "def": { + "variant": { + "variants": [ + { + "name": "Enforced", + "index": 0 + }, + { + "name": "Relaxed", + "index": 1 + } + ] + } + } + } + }, + { + "id": 83, + "type": { + "path": [ + "pallet_assets", + "pallet", + "Call" + ], + "params": [ + { + "name": "T", + "type": null + }, + { + "name": "I", + "type": null + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "create", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "admin", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "min_balance", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 0, + "docs": [ + "See [`Pallet::create`]." + ] + }, + { + "name": "force_create", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "owner", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "is_sufficient", + "type": 42, + "typeName": "bool" + }, + { + "name": "min_balance", + "type": 77, + "typeName": "T::Balance" + } + ], + "index": 1, + "docs": [ + "See [`Pallet::force_create`]." + ] + }, + { + "name": "start_destroy", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + } + ], + "index": 2, + "docs": [ + "See [`Pallet::start_destroy`]." + ] + }, + { + "name": "destroy_accounts", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + } + ], + "index": 3, + "docs": [ + "See [`Pallet::destroy_accounts`]." + ] + }, + { + "name": "destroy_approvals", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + } + ], + "index": 4, + "docs": [ + "See [`Pallet::destroy_approvals`]." + ] + }, + { + "name": "finish_destroy", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + } + ], + "index": 5, + "docs": [ + "See [`Pallet::finish_destroy`]." + ] + }, + { + "name": "mint", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "beneficiary", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "amount", + "type": 77, + "typeName": "T::Balance" + } + ], + "index": 6, + "docs": [ + "See [`Pallet::mint`]." + ] + }, + { + "name": "burn", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "who", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "amount", + "type": 77, + "typeName": "T::Balance" + } + ], + "index": 7, + "docs": [ + "See [`Pallet::burn`]." + ] + }, + { + "name": "transfer", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "target", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "amount", + "type": 77, + "typeName": "T::Balance" + } + ], + "index": 8, + "docs": [ + "See [`Pallet::transfer`]." + ] + }, + { + "name": "transfer_keep_alive", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "target", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "amount", + "type": 77, + "typeName": "T::Balance" + } + ], + "index": 9, + "docs": [ + "See [`Pallet::transfer_keep_alive`]." + ] + }, + { + "name": "force_transfer", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "source", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "dest", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "amount", + "type": 77, + "typeName": "T::Balance" + } + ], + "index": 10, + "docs": [ + "See [`Pallet::force_transfer`]." + ] + }, + { + "name": "freeze", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "who", + "type": 74, + "typeName": "AccountIdLookupOf" + } + ], + "index": 11, + "docs": [ + "See [`Pallet::freeze`]." + ] + }, + { + "name": "thaw", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "who", + "type": 74, + "typeName": "AccountIdLookupOf" + } + ], + "index": 12, + "docs": [ + "See [`Pallet::thaw`]." + ] + }, + { + "name": "freeze_asset", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + } + ], + "index": 13, + "docs": [ + "See [`Pallet::freeze_asset`]." + ] + }, + { + "name": "thaw_asset", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + } + ], + "index": 14, + "docs": [ + "See [`Pallet::thaw_asset`]." + ] + }, + { + "name": "transfer_ownership", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "owner", + "type": 74, + "typeName": "AccountIdLookupOf" + } + ], + "index": 15, + "docs": [ + "See [`Pallet::transfer_ownership`]." + ] + }, + { + "name": "set_team", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "issuer", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "admin", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "freezer", + "type": 74, + "typeName": "AccountIdLookupOf" + } + ], + "index": 16, + "docs": [ + "See [`Pallet::set_team`]." + ] + }, + { + "name": "set_metadata", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "name", + "type": 13, + "typeName": "Vec" + }, + { + "name": "symbol", + "type": 13, + "typeName": "Vec" + }, + { + "name": "decimals", + "type": 2, + "typeName": "u8" + } + ], + "index": 17, + "docs": [ + "See [`Pallet::set_metadata`]." + ] + }, + { + "name": "clear_metadata", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + } + ], + "index": 18, + "docs": [ + "See [`Pallet::clear_metadata`]." + ] + }, + { + "name": "force_set_metadata", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "name", + "type": 13, + "typeName": "Vec" + }, + { + "name": "symbol", + "type": 13, + "typeName": "Vec" + }, + { + "name": "decimals", + "type": 2, + "typeName": "u8" + }, + { + "name": "is_frozen", + "type": 42, + "typeName": "bool" + } + ], + "index": 19, + "docs": [ + "See [`Pallet::force_set_metadata`]." + ] + }, + { + "name": "force_clear_metadata", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + } + ], + "index": 20, + "docs": [ + "See [`Pallet::force_clear_metadata`]." + ] + }, + { + "name": "force_asset_status", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "owner", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "issuer", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "admin", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "freezer", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "min_balance", + "type": 77, + "typeName": "T::Balance" + }, + { + "name": "is_sufficient", + "type": 42, + "typeName": "bool" + }, + { + "name": "is_frozen", + "type": 42, + "typeName": "bool" + } + ], + "index": 21, + "docs": [ + "See [`Pallet::force_asset_status`]." + ] + }, + { + "name": "approve_transfer", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "delegate", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "amount", + "type": 77, + "typeName": "T::Balance" + } + ], + "index": 22, + "docs": [ + "See [`Pallet::approve_transfer`]." + ] + }, + { + "name": "cancel_approval", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "delegate", + "type": 74, + "typeName": "AccountIdLookupOf" + } + ], + "index": 23, + "docs": [ + "See [`Pallet::cancel_approval`]." + ] + }, + { + "name": "force_cancel_approval", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "owner", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "delegate", + "type": 74, + "typeName": "AccountIdLookupOf" + } + ], + "index": 24, + "docs": [ + "See [`Pallet::force_cancel_approval`]." + ] + }, + { + "name": "transfer_approved", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "owner", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "destination", + "type": 74, + "typeName": "AccountIdLookupOf" + }, + { + "name": "amount", + "type": 77, + "typeName": "T::Balance" + } + ], + "index": 25, + "docs": [ + "See [`Pallet::transfer_approved`]." + ] + }, + { + "name": "touch", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + } + ], + "index": 26, + "docs": [ + "See [`Pallet::touch`]." + ] + }, + { + "name": "refund", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "allow_burn", + "type": 42, + "typeName": "bool" + } + ], + "index": 27, + "docs": [ + "See [`Pallet::refund`]." + ] + }, + { + "name": "set_min_balance", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "min_balance", + "type": 6, + "typeName": "T::Balance" + } + ], + "index": 28, + "docs": [ + "See [`Pallet::set_min_balance`]." + ] + }, + { + "name": "touch_other", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "who", + "type": 74, + "typeName": "AccountIdLookupOf" + } + ], + "index": 29, + "docs": [ + "See [`Pallet::touch_other`]." + ] + }, + { + "name": "refund_other", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "who", + "type": 74, + "typeName": "AccountIdLookupOf" + } + ], + "index": 30, + "docs": [ + "See [`Pallet::refund_other`]." + ] + }, + { + "name": "block", + "fields": [ + { + "name": "id", + "type": 48, + "typeName": "T::AssetIdParameter" + }, + { + "name": "who", + "type": 74, + "typeName": "AccountIdLookupOf" + } + ], + "index": 31, + "docs": [ + "See [`Pallet::block`]." + ] + } + ] + } + }, + "docs": [ + "Contains a variant per dispatchable extrinsic that this pallet has." + ] + } + }, + { + "id": 84, + "type": { + "path": [ + "contracts_node_runtime", + "OriginCaller" + ], + "def": { + "variant": { + "variants": [ + { + "name": "system", + "fields": [ + { + "type": 85, + "typeName": "frame_system::Origin" + } + ], + "index": 0 + }, + { + "name": "Void", + "fields": [ + { + "type": 86, + "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::\n__private::Void" + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 85, + "type": { + "path": [ + "frame_support", + "dispatch", + "RawOrigin" + ], + "params": [ + { + "name": "AccountId", + "type": 0 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "Root", + "index": 0 + }, + { + "name": "Signed", + "fields": [ + { + "type": 0, + "typeName": "AccountId" + } + ], + "index": 1 + }, + { + "name": "None", + "index": 2 + } + ] + } + } + } + }, + { + "id": 86, + "type": { + "path": [ + "sp_core", + "Void" + ], + "def": { + "variant": {} + } + } + }, + { + "id": 87, + "type": { + "path": [ + "pallet_utility", + "pallet", + "Error" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "TooManyCalls", + "index": 0, + "docs": [ + "Too many calls batched." + ] + } + ] + } + }, + "docs": [ + "The `Error` enum of this pallet." + ] + } + }, + { + "id": 88, + "type": { + "path": [ + "bounded_collections", + "weak_bounded_vec", + "WeakBoundedVec" + ], + "params": [ + { + "name": "T", + "type": 89 + }, + { + "name": "S", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "type": 91, + "typeName": "Vec" + } + ] + } + } + } + }, + { + "id": 89, + "type": { + "path": [ + "pallet_balances", + "types", + "BalanceLock" + ], + "params": [ + { + "name": "Balance", + "type": 6 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "id", + "type": 65, + "typeName": "LockIdentifier" + }, + { + "name": "amount", + "type": 6, + "typeName": "Balance" + }, + { + "name": "reasons", + "type": 90, + "typeName": "Reasons" + } + ] + } + } + } + }, + { + "id": 90, + "type": { + "path": [ + "pallet_balances", + "types", + "Reasons" + ], + "def": { + "variant": { + "variants": [ + { + "name": "Fee", + "index": 0 + }, + { + "name": "Misc", + "index": 1 + }, + { + "name": "All", + "index": 2 + } + ] + } + } + } + }, + { + "id": 91, + "type": { + "def": { + "sequence": { + "type": 89 + } + } + } + }, + { + "id": 92, + "type": { + "path": [ + "bounded_collections", + "bounded_vec", + "BoundedVec" + ], + "params": [ + { + "name": "T", + "type": 93 + }, + { + "name": "S", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "type": 94, + "typeName": "Vec" + } + ] + } + } + } + }, + { + "id": 93, + "type": { + "path": [ + "pallet_balances", + "types", + "ReserveData" + ], + "params": [ + { + "name": "ReserveIdentifier", + "type": 65 + }, + { + "name": "Balance", + "type": 6 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "id", + "type": 65, + "typeName": "ReserveIdentifier" + }, + { + "name": "amount", + "type": 6, + "typeName": "Balance" + } + ] + } + } + } + }, + { + "id": 94, + "type": { + "def": { + "sequence": { + "type": 93 + } + } + } + }, + { + "id": 95, + "type": { + "path": [ + "bounded_collections", + "bounded_vec", + "BoundedVec" + ], + "params": [ + { + "name": "T", + "type": 96 + }, + { + "name": "S", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "type": 99, + "typeName": "Vec" + } + ] + } + } + } + }, + { + "id": 96, + "type": { + "path": [ + "pallet_balances", + "types", + "IdAmount" + ], + "params": [ + { + "name": "Id", + "type": 97 + }, + { + "name": "Balance", + "type": 6 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "id", + "type": 97, + "typeName": "Id" + }, + { + "name": "amount", + "type": 6, + "typeName": "Balance" + } + ] + } + } + } + }, + { + "id": 97, + "type": { + "path": [ + "contracts_node_runtime", + "RuntimeHoldReason" + ], + "def": { + "variant": { + "variants": [ + { + "name": "Contracts", + "fields": [ + { + "type": 98, + "typeName": "pallet_contracts::HoldReason" + } + ], + "index": 8 + } + ] + } + } + } + }, + { + "id": 98, + "type": { + "path": [ + "pallet_contracts", + "pallet", + "HoldReason" + ], + "def": { + "variant": { + "variants": [ + { + "name": "CodeUploadDepositReserve", + "index": 0 + }, + { + "name": "StorageDepositReserve", + "index": 1 + } + ] + } + } + } + }, + { + "id": 99, + "type": { + "def": { + "sequence": { + "type": 96 + } + } + } + }, + { + "id": 100, + "type": { + "path": [ + "bounded_collections", + "bounded_vec", + "BoundedVec" + ], + "params": [ + { + "name": "T", + "type": 101 + }, + { + "name": "S", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "type": 102, + "typeName": "Vec" + } + ] + } + } + } + }, + { + "id": 101, + "type": { + "path": [ + "pallet_balances", + "types", + "IdAmount" + ], + "params": [ + { + "name": "Id", + "type": 32 + }, + { + "name": "Balance", + "type": 6 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "id", + "type": 32, + "typeName": "Id" + }, + { + "name": "amount", + "type": 6, + "typeName": "Balance" + } + ] + } + } + } + }, + { + "id": 102, + "type": { + "def": { + "sequence": { + "type": 101 + } + } + } + }, + { + "id": 103, + "type": { + "path": [ + "pallet_balances", + "pallet", + "Error" + ], + "params": [ + { + "name": "T", + "type": null + }, + { + "name": "I", + "type": null + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "VestingBalance", + "index": 0, + "docs": [ + "Vesting balance too high to send value." + ] + }, + { + "name": "LiquidityRestrictions", + "index": 1, + "docs": [ + "Account liquidity restrictions prevent withdrawal." + ] + }, + { + "name": "InsufficientBalance", + "index": 2, + "docs": [ + "Balance too low to send value." + ] + }, + { + "name": "ExistentialDeposit", + "index": 3, + "docs": [ + "Value too low to create account due to existential deposit." + ] + }, + { + "name": "Expendability", + "index": 4, + "docs": [ + "Transfer/payment would kill account." + ] + }, + { + "name": "ExistingVestingSchedule", + "index": 5, + "docs": [ + "A vesting schedule already exists for this account." + ] + }, + { + "name": "DeadAccount", + "index": 6, + "docs": [ + "Beneficiary account must pre-exist." + ] + }, + { + "name": "TooManyReserves", + "index": 7, + "docs": [ + "Number of named reserves exceed `MaxReserves`." + ] + }, + { + "name": "TooManyHolds", + "index": 8, + "docs": [ + "Number of holds exceed `MaxHolds`." + ] + }, + { + "name": "TooManyFreezes", + "index": 9, + "docs": [ + "Number of freezes exceed `MaxFreezes`." + ] + } + ] + } + }, + "docs": [ + "The `Error` enum of this pallet." + ] + } + }, + { + "id": 104, + "type": { + "path": [ + "sp_arithmetic", + "fixed_point", + "FixedU128" + ], + "def": { + "composite": { + "fields": [ + { + "type": 6, + "typeName": "u128" + } + ] + } + } + } + }, + { + "id": 105, + "type": { + "path": [ + "pallet_transaction_payment", + "Releases" + ], + "def": { + "variant": { + "variants": [ + { + "name": "V1Ancient", + "index": 0 + }, + { + "name": "V2", + "index": 1 + } + ] + } + } + } + }, + { + "id": 106, + "type": { + "path": [ + "pallet_sudo", + "pallet", + "Error" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "RequireSudo", + "index": 0, + "docs": [ + "Sender must be the Sudo account" + ] + } + ] + } + }, + "docs": [ + "Error for the Sudo pallet" + ] + } + }, + { + "id": 107, + "type": { + "path": [ + "bounded_collections", + "bounded_vec", + "BoundedVec" + ], + "params": [ + { + "name": "T", + "type": 2 + }, + { + "name": "S", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "type": 13, + "typeName": "Vec" + } + ] + } + } + } + }, + { + "id": 108, + "type": { + "path": [ + "pallet_contracts", + "wasm", + "CodeInfo" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "owner", + "type": 0, + "typeName": "AccountIdOf" + }, + { + "name": "deposit", + "type": 77, + "typeName": "BalanceOf" + }, + { + "name": "refcount", + "type": 10, + "typeName": "u64" + }, + { + "name": "determinism", + "type": 82, + "typeName": "Determinism" + }, + { + "name": "code_len", + "type": 4, + "typeName": "u32" + } + ] + } + } + } + }, + { + "id": 109, + "type": { + "path": [ + "pallet_contracts", + "storage", + "ContractInfo" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "trie_id", + "type": 110, + "typeName": "TrieId" + }, + { + "name": "code_hash", + "type": 12, + "typeName": "CodeHash" + }, + { + "name": "storage_bytes", + "type": 4, + "typeName": "u32" + }, + { + "name": "storage_items", + "type": 4, + "typeName": "u32" + }, + { + "name": "storage_byte_deposit", + "type": 6, + "typeName": "BalanceOf" + }, + { + "name": "storage_item_deposit", + "type": 6, + "typeName": "BalanceOf" + }, + { + "name": "storage_base_deposit", + "type": 6, + "typeName": "BalanceOf" + }, + { + "name": "delegate_dependencies", + "type": 111, + "typeName": "BoundedBTreeMap, BalanceOf, T::\nMaxDelegateDependencies>" + } + ] + } + } + } + }, + { + "id": 110, + "type": { + "path": [ + "bounded_collections", + "bounded_vec", + "BoundedVec" + ], + "params": [ + { + "name": "T", + "type": 2 + }, + { + "name": "S", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "type": 13, + "typeName": "Vec" + } + ] + } + } + } + }, + { + "id": 111, + "type": { + "path": [ + "bounded_collections", + "bounded_btree_map", + "BoundedBTreeMap" + ], + "params": [ + { + "name": "K", + "type": 12 + }, + { + "name": "V", + "type": 6 + }, + { + "name": "S", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "type": 112, + "typeName": "BTreeMap" + } + ] + } + } + } + }, + { + "id": 112, + "type": { + "path": [ + "BTreeMap" + ], + "params": [ + { + "name": "K", + "type": 12 + }, + { + "name": "V", + "type": 6 + } + ], + "def": { + "composite": { + "fields": [ + { + "type": 113 + } + ] + } + } + } + }, + { + "id": 113, + "type": { + "def": { + "sequence": { + "type": 114 + } + } + } + }, + { + "id": 114, + "type": { + "def": { + "tuple": [ + 12, + 6 + ] + } + } + }, + { + "id": 115, + "type": { + "path": [ + "pallet_contracts", + "storage", + "DeletionQueueManager" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "insert_counter", + "type": 4, + "typeName": "u32" + }, + { + "name": "delete_counter", + "type": 4, + "typeName": "u32" + } + ] + } + } + } + }, + { + "id": 116, + "type": { + "path": [ + "bounded_collections", + "bounded_vec", + "BoundedVec" + ], + "params": [ + { + "name": "T", + "type": 2 + }, + { + "name": "S", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "type": 13, + "typeName": "Vec" + } + ] + } + } + } + }, + { + "id": 117, + "type": { + "path": [ + "pallet_contracts", + "schedule", + "Schedule" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "limits", + "type": 118, + "typeName": "Limits" + }, + { + "name": "instruction_weights", + "type": 119, + "typeName": "InstructionWeights" + }, + { + "name": "host_fn_weights", + "type": 120, + "typeName": "HostFnWeights" + } + ] + } + } + } + }, + { + "id": 118, + "type": { + "path": [ + "pallet_contracts", + "schedule", + "Limits" + ], + "def": { + "composite": { + "fields": [ + { + "name": "event_topics", + "type": 4, + "typeName": "u32" + }, + { + "name": "globals", + "type": 4, + "typeName": "u32" + }, + { + "name": "locals", + "type": 4, + "typeName": "u32" + }, + { + "name": "parameters", + "type": 4, + "typeName": "u32" + }, + { + "name": "memory_pages", + "type": 4, + "typeName": "u32" + }, + { + "name": "table_size", + "type": 4, + "typeName": "u32" + }, + { + "name": "br_table_size", + "type": 4, + "typeName": "u32" + }, + { + "name": "subject_len", + "type": 4, + "typeName": "u32" + }, + { + "name": "payload_len", + "type": 4, + "typeName": "u32" + }, + { + "name": "runtime_memory", + "type": 4, + "typeName": "u32" + } + ] + } + } + } + }, + { + "id": 119, + "type": { + "path": [ + "pallet_contracts", + "schedule", + "InstructionWeights" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "base", + "type": 4, + "typeName": "u32" + } + ] + } + } + } + }, + { + "id": 120, + "type": { + "path": [ + "pallet_contracts", + "schedule", + "HostFnWeights" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "caller", + "type": 9, + "typeName": "Weight" + }, + { + "name": "is_contract", + "type": 9, + "typeName": "Weight" + }, + { + "name": "code_hash", + "type": 9, + "typeName": "Weight" + }, + { + "name": "own_code_hash", + "type": 9, + "typeName": "Weight" + }, + { + "name": "caller_is_origin", + "type": 9, + "typeName": "Weight" + }, + { + "name": "caller_is_root", + "type": 9, + "typeName": "Weight" + }, + { + "name": "address", + "type": 9, + "typeName": "Weight" + }, + { + "name": "gas_left", + "type": 9, + "typeName": "Weight" + }, + { + "name": "balance", + "type": 9, + "typeName": "Weight" + }, + { + "name": "value_transferred", + "type": 9, + "typeName": "Weight" + }, + { + "name": "minimum_balance", + "type": 9, + "typeName": "Weight" + }, + { + "name": "block_number", + "type": 9, + "typeName": "Weight" + }, + { + "name": "now", + "type": 9, + "typeName": "Weight" + }, + { + "name": "weight_to_fee", + "type": 9, + "typeName": "Weight" + }, + { + "name": "input", + "type": 9, + "typeName": "Weight" + }, + { + "name": "input_per_byte", + "type": 9, + "typeName": "Weight" + }, + { + "name": "r#return", + "type": 9, + "typeName": "Weight" + }, + { + "name": "return_per_byte", + "type": 9, + "typeName": "Weight" + }, + { + "name": "terminate", + "type": 9, + "typeName": "Weight" + }, + { + "name": "random", + "type": 9, + "typeName": "Weight" + }, + { + "name": "deposit_event", + "type": 9, + "typeName": "Weight" + }, + { + "name": "deposit_event_per_topic", + "type": 9, + "typeName": "Weight" + }, + { + "name": "deposit_event_per_byte", + "type": 9, + "typeName": "Weight" + }, + { + "name": "debug_message", + "type": 9, + "typeName": "Weight" + }, + { + "name": "debug_message_per_byte", + "type": 9, + "typeName": "Weight" + }, + { + "name": "set_storage", + "type": 9, + "typeName": "Weight" + }, + { + "name": "set_storage_per_new_byte", + "type": 9, + "typeName": "Weight" + }, + { + "name": "set_storage_per_old_byte", + "type": 9, + "typeName": "Weight" + }, + { + "name": "set_code_hash", + "type": 9, + "typeName": "Weight" + }, + { + "name": "clear_storage", + "type": 9, + "typeName": "Weight" + }, + { + "name": "clear_storage_per_byte", + "type": 9, + "typeName": "Weight" + }, + { + "name": "contains_storage", + "type": 9, + "typeName": "Weight" + }, + { + "name": "contains_storage_per_byte", + "type": 9, + "typeName": "Weight" + }, + { + "name": "get_storage", + "type": 9, + "typeName": "Weight" + }, + { + "name": "get_storage_per_byte", + "type": 9, + "typeName": "Weight" + }, + { + "name": "take_storage", + "type": 9, + "typeName": "Weight" + }, + { + "name": "take_storage_per_byte", + "type": 9, + "typeName": "Weight" + }, + { + "name": "transfer", + "type": 9, + "typeName": "Weight" + }, + { + "name": "call", + "type": 9, + "typeName": "Weight" + }, + { + "name": "delegate_call", + "type": 9, + "typeName": "Weight" + }, + { + "name": "call_transfer_surcharge", + "type": 9, + "typeName": "Weight" + }, + { + "name": "call_per_cloned_byte", + "type": 9, + "typeName": "Weight" + }, + { + "name": "instantiate", + "type": 9, + "typeName": "Weight" + }, + { + "name": "instantiate_transfer_surcharge", + "type": 9, + "typeName": "Weight" + }, + { + "name": "instantiate_per_input_byte", + "type": 9, + "typeName": "Weight" + }, + { + "name": "instantiate_per_salt_byte", + "type": 9, + "typeName": "Weight" + }, + { + "name": "hash_sha2_256", + "type": 9, + "typeName": "Weight" + }, + { + "name": "hash_sha2_256_per_byte", + "type": 9, + "typeName": "Weight" + }, + { + "name": "hash_keccak_256", + "type": 9, + "typeName": "Weight" + }, + { + "name": "hash_keccak_256_per_byte", + "type": 9, + "typeName": "Weight" + }, + { + "name": "hash_blake2_256", + "type": 9, + "typeName": "Weight" + }, + { + "name": "hash_blake2_256_per_byte", + "type": 9, + "typeName": "Weight" + }, + { + "name": "hash_blake2_128", + "type": 9, + "typeName": "Weight" + }, + { + "name": "hash_blake2_128_per_byte", + "type": 9, + "typeName": "Weight" + }, + { + "name": "ecdsa_recover", + "type": 9, + "typeName": "Weight" + }, + { + "name": "ecdsa_to_eth_address", + "type": 9, + "typeName": "Weight" + }, + { + "name": "sr25519_verify", + "type": 9, + "typeName": "Weight" + }, + { + "name": "sr25519_verify_per_byte", + "type": 9, + "typeName": "Weight" + }, + { + "name": "reentrance_count", + "type": 9, + "typeName": "Weight" + }, + { + "name": "account_reentrance_count", + "type": 9, + "typeName": "Weight" + }, + { + "name": "instantiation_nonce", + "type": 9, + "typeName": "Weight" + }, + { + "name": "add_delegate_dependency", + "type": 9, + "typeName": "Weight" + }, + { + "name": "remove_delegate_dependency", + "type": 9, + "typeName": "Weight" + } + ] + } + } + } + }, + { + "id": 121, + "type": { + "path": [ + "sp_arithmetic", + "per_things", + "Perbill" + ], + "def": { + "composite": { + "fields": [ + { + "type": 4, + "typeName": "u32" + } + ] + } + } + } + }, + { + "id": 122, + "type": { + "path": [ + "pallet_contracts", + "Environment" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "account_id", + "type": 123, + "typeName": "EnvironmentType>" + }, + { + "name": "balance", + "type": 124, + "typeName": "EnvironmentType>" + }, + { + "name": "hash", + "type": 125, + "typeName": "EnvironmentType<::Hash>" + }, + { + "name": "hasher", + "type": 126, + "typeName": "EnvironmentType<::Hashing>" + }, + { + "name": "timestamp", + "type": 128, + "typeName": "EnvironmentType>" + }, + { + "name": "block_number", + "type": 129, + "typeName": "EnvironmentType>" + } + ] + } + } + } + }, + { + "id": 123, + "type": { + "path": [ + "pallet_contracts", + "EnvironmentType" + ], + "params": [ + { + "name": "T", + "type": 0 + } + ], + "def": { + "composite": {} + } + } + }, + { + "id": 124, + "type": { + "path": [ + "pallet_contracts", + "EnvironmentType" + ], + "params": [ + { + "name": "T", + "type": 6 + } + ], + "def": { + "composite": {} + } + } + }, + { + "id": 125, + "type": { + "path": [ + "pallet_contracts", + "EnvironmentType" + ], + "params": [ + { + "name": "T", + "type": 12 + } + ], + "def": { + "composite": {} + } + } + }, + { + "id": 126, + "type": { + "path": [ + "pallet_contracts", + "EnvironmentType" + ], + "params": [ + { + "name": "T", + "type": 127 + } + ], + "def": { + "composite": {} + } + } + }, + { + "id": 127, + "type": { + "path": [ + "sp_runtime", + "traits", + "BlakeTwo256" + ], + "def": { + "composite": {} + } + } + }, + { + "id": 128, + "type": { + "path": [ + "pallet_contracts", + "EnvironmentType" + ], + "params": [ + { + "name": "T", + "type": 11 + } + ], + "def": { + "composite": {} + } + } + }, + { + "id": 129, + "type": { + "path": [ + "pallet_contracts", + "EnvironmentType" + ], + "params": [ + { + "name": "T", + "type": 4 + } + ], + "def": { + "composite": {} + } + } + }, + { + "id": 130, + "type": { + "path": [ + "pallet_contracts", + "pallet", + "Error" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "InvalidSchedule", + "index": 0, + "docs": [ + "Invalid schedule supplied, e.g. with zero weight of a basic operation." + ] + }, + { + "name": "InvalidCallFlags", + "index": 1, + "docs": [ + "Invalid combination of flags supplied to `seal_call` or `seal_delegate_call`." + ] + }, + { + "name": "OutOfGas", + "index": 2, + "docs": [ + "The executed contract exhausted its gas limit." + ] + }, + { + "name": "OutputBufferTooSmall", + "index": 3, + "docs": [ + "The output buffer supplied to a contract API call was too small." + ] + }, + { + "name": "TransferFailed", + "index": 4, + "docs": [ + "Performing the requested transfer failed. Probably because there isn't enough", + "free balance in the sender's account." + ] + }, + { + "name": "MaxCallDepthReached", + "index": 5, + "docs": [ + "Performing a call was denied because the calling depth reached the limit", + "of what is specified in the schedule." + ] + }, + { + "name": "ContractNotFound", + "index": 6, + "docs": [ + "No contract was found at the specified address." + ] + }, + { + "name": "CodeTooLarge", + "index": 7, + "docs": [ + "The code supplied to `instantiate_with_code` exceeds the limit specified in the", + "current schedule." + ] + }, + { + "name": "CodeNotFound", + "index": 8, + "docs": [ + "No code could be found at the supplied code hash." + ] + }, + { + "name": "CodeInfoNotFound", + "index": 9, + "docs": [ + "No code info could be found at the supplied code hash." + ] + }, + { + "name": "OutOfBounds", + "index": 10, + "docs": [ + "A buffer outside of sandbox memory was passed to a contract API function." + ] + }, + { + "name": "DecodingFailed", + "index": 11, + "docs": [ + "Input passed to a contract API function failed to decode as expected type." + ] + }, + { + "name": "ContractTrapped", + "index": 12, + "docs": [ + "Contract trapped during execution." + ] + }, + { + "name": "ValueTooLarge", + "index": 13, + "docs": [ + "The size defined in `T::MaxValueSize` was exceeded." + ] + }, + { + "name": "TerminatedWhileReentrant", + "index": 14, + "docs": [ + "Termination of a contract is not allowed while the contract is already", + "on the call stack. Can be triggered by `seal_terminate`." + ] + }, + { + "name": "InputForwarded", + "index": 15, + "docs": [ + "`seal_call` forwarded this contracts input. It therefore is no longer available." + ] + }, + { + "name": "RandomSubjectTooLong", + "index": 16, + "docs": [ + "The subject passed to `seal_random` exceeds the limit." + ] + }, + { + "name": "TooManyTopics", + "index": 17, + "docs": [ + "The amount of topics passed to `seal_deposit_events` exceeds the limit." + ] + }, + { + "name": "NoChainExtension", + "index": 18, + "docs": [ + "The chain does not provide a chain extension. Calling the chain extension results", + "in this error. Note that this usually shouldn't happen as deploying such contracts", + "is rejected." + ] + }, + { + "name": "DuplicateContract", + "index": 19, + "docs": [ + "A contract with the same AccountId already exists." + ] + }, + { + "name": "TerminatedInConstructor", + "index": 20, + "docs": [ + "A contract self destructed in its constructor.", + "", + "This can be triggered by a call to `seal_terminate`." + ] + }, + { + "name": "ReentranceDenied", + "index": 21, + "docs": [ + "A call tried to invoke a contract that is flagged as non-reentrant.", + "The only other cause is that a call from a contract into the runtime tried to call back", + "into `pallet-contracts`. This would make the whole pallet reentrant with regard to", + "contract code execution which is not supported." + ] + }, + { + "name": "StorageDepositNotEnoughFunds", + "index": 22, + "docs": [ + "Origin doesn't have enough balance to pay the required storage deposits." + ] + }, + { + "name": "StorageDepositLimitExhausted", + "index": 23, + "docs": [ + "More storage was created than allowed by the storage deposit limit." + ] + }, + { + "name": "CodeInUse", + "index": 24, + "docs": [ + "Code removal was denied because the code is still in use by at least one contract." + ] + }, + { + "name": "ContractReverted", + "index": 25, + "docs": [ + "The contract ran to completion but decided to revert its storage changes.", + "Please note that this error is only returned from extrinsics. When called directly", + "or via RPC an `Ok` will be returned. In this case the caller needs to inspect the flags", + "to determine whether a reversion has taken place." + ] + }, + { + "name": "CodeRejected", + "index": 26, + "docs": [ + "The contract's code was found to be invalid during validation.", + "", + "The most likely cause of this is that an API was used which is not supported by the", + "node. This happens if an older node is used with a new version of ink!. Try updating", + "your node to the newest available version.", + "", + "A more detailed error can be found on the node console if debug messages are enabled", + "by supplying `-lruntime::contracts=debug`." + ] + }, + { + "name": "Indeterministic", + "index": 27, + "docs": [ + "An indetermistic code was used in a context where this is not permitted." + ] + }, + { + "name": "MigrationInProgress", + "index": 28, + "docs": [ + "A pending migration needs to complete before the extrinsic can be called." + ] + }, + { + "name": "NoMigrationPerformed", + "index": 29, + "docs": [ + "Migrate dispatch call was attempted but no migration was performed." + ] + }, + { + "name": "MaxDelegateDependenciesReached", + "index": 30, + "docs": [ + "The contract has reached its maximum number of delegate dependencies." + ] + }, + { + "name": "DelegateDependencyNotFound", + "index": 31, + "docs": [ + "The dependency was not found in the contract's delegate dependencies." + ] + }, + { + "name": "DelegateDependencyAlreadyExists", + "index": 32, + "docs": [ + "The contract already depends on the given delegate dependency." + ] + }, + { + "name": "CannotAddSelfAsDelegateDependency", + "index": 33, + "docs": [ + "Can not add a delegate dependency to the code hash of the contract itself." + ] + } + ] + } + }, + "docs": [ + "The `Error` enum of this pallet." + ] + } + }, + { + "id": 131, + "type": { + "path": [ + "pallet_assets", + "types", + "AssetDetails" + ], + "params": [ + { + "name": "Balance", + "type": 6 + }, + { + "name": "AccountId", + "type": 0 + }, + { + "name": "DepositBalance", + "type": 6 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "owner", + "type": 0, + "typeName": "AccountId" + }, + { + "name": "issuer", + "type": 0, + "typeName": "AccountId" + }, + { + "name": "admin", + "type": 0, + "typeName": "AccountId" + }, + { + "name": "freezer", + "type": 0, + "typeName": "AccountId" + }, + { + "name": "supply", + "type": 6, + "typeName": "Balance" + }, + { + "name": "deposit", + "type": 6, + "typeName": "DepositBalance" + }, + { + "name": "min_balance", + "type": 6, + "typeName": "Balance" + }, + { + "name": "is_sufficient", + "type": 42, + "typeName": "bool" + }, + { + "name": "accounts", + "type": 4, + "typeName": "u32" + }, + { + "name": "sufficients", + "type": 4, + "typeName": "u32" + }, + { + "name": "approvals", + "type": 4, + "typeName": "u32" + }, + { + "name": "status", + "type": 132, + "typeName": "AssetStatus" + } + ] + } + } + } + }, + { + "id": 132, + "type": { + "path": [ + "pallet_assets", + "types", + "AssetStatus" + ], + "def": { + "variant": { + "variants": [ + { + "name": "Live", + "index": 0 + }, + { + "name": "Frozen", + "index": 1 + }, + { + "name": "Destroying", + "index": 2 + } + ] + } + } + } + }, + { + "id": 133, + "type": { + "def": { + "tuple": [ + 4, + 0 + ] + } + } + }, + { + "id": 134, + "type": { + "path": [ + "pallet_assets", + "types", + "AssetAccount" + ], + "params": [ + { + "name": "Balance", + "type": 6 + }, + { + "name": "DepositBalance", + "type": 6 + }, + { + "name": "Extra", + "type": 32 + }, + { + "name": "AccountId", + "type": 0 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "balance", + "type": 6, + "typeName": "Balance" + }, + { + "name": "status", + "type": 135, + "typeName": "AccountStatus" + }, + { + "name": "reason", + "type": 136, + "typeName": "ExistenceReason" + }, + { + "name": "extra", + "type": 32, + "typeName": "Extra" + } + ] + } + } + } + }, + { + "id": 135, + "type": { + "path": [ + "pallet_assets", + "types", + "AccountStatus" + ], + "def": { + "variant": { + "variants": [ + { + "name": "Liquid", + "index": 0 + }, + { + "name": "Frozen", + "index": 1 + }, + { + "name": "Blocked", + "index": 2 + } + ] + } + } + } + }, + { + "id": 136, + "type": { + "path": [ + "pallet_assets", + "types", + "ExistenceReason" + ], + "params": [ + { + "name": "Balance", + "type": 6 + }, + { + "name": "AccountId", + "type": 0 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "Consumer", + "index": 0 + }, + { + "name": "Sufficient", + "index": 1 + }, + { + "name": "DepositHeld", + "fields": [ + { + "type": 6, + "typeName": "Balance" + } + ], + "index": 2 + }, + { + "name": "DepositRefunded", + "index": 3 + }, + { + "name": "DepositFrom", + "fields": [ + { + "type": 0, + "typeName": "AccountId" + }, + { + "type": 6, + "typeName": "Balance" + } + ], + "index": 4 + } + ] + } + } + } + }, + { + "id": 137, + "type": { + "def": { + "tuple": [ + 4, + 0, + 0 + ] + } + } + }, + { + "id": 138, + "type": { + "path": [ + "pallet_assets", + "types", + "Approval" + ], + "params": [ + { + "name": "Balance", + "type": 6 + }, + { + "name": "DepositBalance", + "type": 6 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "amount", + "type": 6, + "typeName": "Balance" + }, + { + "name": "deposit", + "type": 6, + "typeName": "DepositBalance" + } + ] + } + } + } + }, + { + "id": 139, + "type": { + "path": [ + "pallet_assets", + "types", + "AssetMetadata" + ], + "params": [ + { + "name": "DepositBalance", + "type": 6 + }, + { + "name": "BoundedString", + "type": 140 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "deposit", + "type": 6, + "typeName": "DepositBalance" + }, + { + "name": "name", + "type": 140, + "typeName": "BoundedString" + }, + { + "name": "symbol", + "type": 140, + "typeName": "BoundedString" + }, + { + "name": "decimals", + "type": 2, + "typeName": "u8" + }, + { + "name": "is_frozen", + "type": 42, + "typeName": "bool" + } + ] + } + } + } + }, + { + "id": 140, + "type": { + "path": [ + "bounded_collections", + "bounded_vec", + "BoundedVec" + ], + "params": [ + { + "name": "T", + "type": 2 + }, + { + "name": "S", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "type": 13, + "typeName": "Vec" + } + ] + } + } + } + }, + { + "id": 141, + "type": { + "path": [ + "pallet_assets", + "pallet", + "Error" + ], + "params": [ + { + "name": "T", + "type": null + }, + { + "name": "I", + "type": null + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "BalanceLow", + "index": 0, + "docs": [ + "Account balance must be greater than or equal to the transfer amount." + ] + }, + { + "name": "NoAccount", + "index": 1, + "docs": [ + "The account to alter does not exist." + ] + }, + { + "name": "NoPermission", + "index": 2, + "docs": [ + "The signing account has no permission to do the operation." + ] + }, + { + "name": "Unknown", + "index": 3, + "docs": [ + "The given asset ID is unknown." + ] + }, + { + "name": "Frozen", + "index": 4, + "docs": [ + "The origin account is frozen." + ] + }, + { + "name": "InUse", + "index": 5, + "docs": [ + "The asset ID is already taken." + ] + }, + { + "name": "BadWitness", + "index": 6, + "docs": [ + "Invalid witness data given." + ] + }, + { + "name": "MinBalanceZero", + "index": 7, + "docs": [ + "Minimum balance should be non-zero." + ] + }, + { + "name": "UnavailableConsumer", + "index": 8, + "docs": [ + "Unable to increment the consumer reference counters on the account. Either no provider", + "reference exists to allow a non-zero balance of a non-self-sufficient asset, or one", + "fewer then the maximum number of consumers has been reached." + ] + }, + { + "name": "BadMetadata", + "index": 9, + "docs": [ + "Invalid metadata given." + ] + }, + { + "name": "Unapproved", + "index": 10, + "docs": [ + "No approval exists that would allow the transfer." + ] + }, + { + "name": "WouldDie", + "index": 11, + "docs": [ + "The source account would not survive the transfer and it needs to stay alive." + ] + }, + { + "name": "AlreadyExists", + "index": 12, + "docs": [ + "The asset-account already exists." + ] + }, + { + "name": "NoDeposit", + "index": 13, + "docs": [ + "The asset-account doesn't have an associated deposit." + ] + }, + { + "name": "WouldBurn", + "index": 14, + "docs": [ + "The operation would result in funds being burned." + ] + }, + { + "name": "LiveAsset", + "index": 15, + "docs": [ + "The asset is a live asset and is actively being used. Usually emit for operations such", + "as `start_destroy` which require the asset to be in a destroying state." + ] + }, + { + "name": "AssetNotLive", + "index": 16, + "docs": [ + "The asset is not live, and likely being destroyed." + ] + }, + { + "name": "IncorrectStatus", + "index": 17, + "docs": [ + "The asset status is not the expected status." + ] + }, + { + "name": "NotFrozen", + "index": 18, + "docs": [ + "The asset should be frozen before the given operation." + ] + }, + { + "name": "CallbackFailed", + "index": 19, + "docs": [ + "Callback action resulted in error" + ] + } + ] + } + }, + "docs": [ + "The `Error` enum of this pallet." + ] + } + }, + { + "id": 142, + "type": { + "path": [ + "sp_runtime", + "MultiSignature" + ], + "def": { + "variant": { + "variants": [ + { + "name": "Ed25519", + "fields": [ + { + "type": 143, + "typeName": "ed25519::Signature" + } + ], + "index": 0 + }, + { + "name": "Sr25519", + "fields": [ + { + "type": 145, + "typeName": "sr25519::Signature" + } + ], + "index": 1 + }, + { + "name": "Ecdsa", + "fields": [ + { + "type": 146, + "typeName": "ecdsa::Signature" + } + ], + "index": 2 + } + ] + } + } + } + }, + { + "id": 143, + "type": { + "path": [ + "sp_core", + "ed25519", + "Signature" + ], + "def": { + "composite": { + "fields": [ + { + "type": 144, + "typeName": "[u8; 64]" + } + ] + } + } + } + }, + { + "id": 144, + "type": { + "def": { + "array": { + "len": 64, + "type": 2 + } + } + } + }, + { + "id": 145, + "type": { + "path": [ + "sp_core", + "sr25519", + "Signature" + ], + "def": { + "composite": { + "fields": [ + { + "type": 144, + "typeName": "[u8; 64]" + } + ] + } + } + } + }, + { + "id": 146, + "type": { + "path": [ + "sp_core", + "ecdsa", + "Signature" + ], + "def": { + "composite": { + "fields": [ + { + "type": 147, + "typeName": "[u8; 65]" + } + ] + } + } + } + }, + { + "id": 147, + "type": { + "def": { + "array": { + "len": 65, + "type": 2 + } + } + } + }, + { + "id": 148, + "type": { + "def": { + "tuple": [ + 149, + 150, + 151, + 152, + 153, + 155, + 156, + 157 + ] + } + } + }, + { + "id": 149, + "type": { + "path": [ + "frame_system", + "extensions", + "check_non_zero_sender", + "CheckNonZeroSender" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "composite": {} + } + } + }, + { + "id": 150, + "type": { + "path": [ + "frame_system", + "extensions", + "check_spec_version", + "CheckSpecVersion" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "composite": {} + } + } + }, + { + "id": 151, + "type": { + "path": [ + "frame_system", + "extensions", + "check_tx_version", + "CheckTxVersion" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "composite": {} + } + } + }, + { + "id": 152, + "type": { + "path": [ + "frame_system", + "extensions", + "check_genesis", + "CheckGenesis" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "composite": {} + } + } + }, + { + "id": 153, + "type": { + "path": [ + "frame_system", + "extensions", + "check_mortality", + "CheckMortality" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "type": 154, + "typeName": "Era" + } + ] + } + } + } + }, + { + "id": 154, + "type": { + "path": [ + "sp_runtime", + "generic", + "era", + "Era" + ], + "def": { + "variant": { + "variants": [ + { + "name": "Immortal", + "index": 0 + }, + { + "name": "Mortal1", + "fields": [ + { + "type": 2 + } + ], + "index": 1 + }, + { + "name": "Mortal2", + "fields": [ + { + "type": 2 + } + ], + "index": 2 + }, + { + "name": "Mortal3", + "fields": [ + { + "type": 2 + } + ], + "index": 3 + }, + { + "name": "Mortal4", + "fields": [ + { + "type": 2 + } + ], + "index": 4 + }, + { + "name": "Mortal5", + "fields": [ + { + "type": 2 + } + ], + "index": 5 + }, + { + "name": "Mortal6", + "fields": [ + { + "type": 2 + } + ], + "index": 6 + }, + { + "name": "Mortal7", + "fields": [ + { + "type": 2 + } + ], + "index": 7 + }, + { + "name": "Mortal8", + "fields": [ + { + "type": 2 + } + ], + "index": 8 + }, + { + "name": "Mortal9", + "fields": [ + { + "type": 2 + } + ], + "index": 9 + }, + { + "name": "Mortal10", + "fields": [ + { + "type": 2 + } + ], + "index": 10 + }, + { + "name": "Mortal11", + "fields": [ + { + "type": 2 + } + ], + "index": 11 + }, + { + "name": "Mortal12", + "fields": [ + { + "type": 2 + } + ], + "index": 12 + }, + { + "name": "Mortal13", + "fields": [ + { + "type": 2 + } + ], + "index": 13 + }, + { + "name": "Mortal14", + "fields": [ + { + "type": 2 + } + ], + "index": 14 + }, + { + "name": "Mortal15", + "fields": [ + { + "type": 2 + } + ], + "index": 15 + }, + { + "name": "Mortal16", + "fields": [ + { + "type": 2 + } + ], + "index": 16 + }, + { + "name": "Mortal17", + "fields": [ + { + "type": 2 + } + ], + "index": 17 + }, + { + "name": "Mortal18", + "fields": [ + { + "type": 2 + } + ], + "index": 18 + }, + { + "name": "Mortal19", + "fields": [ + { + "type": 2 + } + ], + "index": 19 + }, + { + "name": "Mortal20", + "fields": [ + { + "type": 2 + } + ], + "index": 20 + }, + { + "name": "Mortal21", + "fields": [ + { + "type": 2 + } + ], + "index": 21 + }, + { + "name": "Mortal22", + "fields": [ + { + "type": 2 + } + ], + "index": 22 + }, + { + "name": "Mortal23", + "fields": [ + { + "type": 2 + } + ], + "index": 23 + }, + { + "name": "Mortal24", + "fields": [ + { + "type": 2 + } + ], + "index": 24 + }, + { + "name": "Mortal25", + "fields": [ + { + "type": 2 + } + ], + "index": 25 + }, + { + "name": "Mortal26", + "fields": [ + { + "type": 2 + } + ], + "index": 26 + }, + { + "name": "Mortal27", + "fields": [ + { + "type": 2 + } + ], + "index": 27 + }, + { + "name": "Mortal28", + "fields": [ + { + "type": 2 + } + ], + "index": 28 + }, + { + "name": "Mortal29", + "fields": [ + { + "type": 2 + } + ], + "index": 29 + }, + { + "name": "Mortal30", + "fields": [ + { + "type": 2 + } + ], + "index": 30 + }, + { + "name": "Mortal31", + "fields": [ + { + "type": 2 + } + ], + "index": 31 + }, + { + "name": "Mortal32", + "fields": [ + { + "type": 2 + } + ], + "index": 32 + }, + { + "name": "Mortal33", + "fields": [ + { + "type": 2 + } + ], + "index": 33 + }, + { + "name": "Mortal34", + "fields": [ + { + "type": 2 + } + ], + "index": 34 + }, + { + "name": "Mortal35", + "fields": [ + { + "type": 2 + } + ], + "index": 35 + }, + { + "name": "Mortal36", + "fields": [ + { + "type": 2 + } + ], + "index": 36 + }, + { + "name": "Mortal37", + "fields": [ + { + "type": 2 + } + ], + "index": 37 + }, + { + "name": "Mortal38", + "fields": [ + { + "type": 2 + } + ], + "index": 38 + }, + { + "name": "Mortal39", + "fields": [ + { + "type": 2 + } + ], + "index": 39 + }, + { + "name": "Mortal40", + "fields": [ + { + "type": 2 + } + ], + "index": 40 + }, + { + "name": "Mortal41", + "fields": [ + { + "type": 2 + } + ], + "index": 41 + }, + { + "name": "Mortal42", + "fields": [ + { + "type": 2 + } + ], + "index": 42 + }, + { + "name": "Mortal43", + "fields": [ + { + "type": 2 + } + ], + "index": 43 + }, + { + "name": "Mortal44", + "fields": [ + { + "type": 2 + } + ], + "index": 44 + }, + { + "name": "Mortal45", + "fields": [ + { + "type": 2 + } + ], + "index": 45 + }, + { + "name": "Mortal46", + "fields": [ + { + "type": 2 + } + ], + "index": 46 + }, + { + "name": "Mortal47", + "fields": [ + { + "type": 2 + } + ], + "index": 47 + }, + { + "name": "Mortal48", + "fields": [ + { + "type": 2 + } + ], + "index": 48 + }, + { + "name": "Mortal49", + "fields": [ + { + "type": 2 + } + ], + "index": 49 + }, + { + "name": "Mortal50", + "fields": [ + { + "type": 2 + } + ], + "index": 50 + }, + { + "name": "Mortal51", + "fields": [ + { + "type": 2 + } + ], + "index": 51 + }, + { + "name": "Mortal52", + "fields": [ + { + "type": 2 + } + ], + "index": 52 + }, + { + "name": "Mortal53", + "fields": [ + { + "type": 2 + } + ], + "index": 53 + }, + { + "name": "Mortal54", + "fields": [ + { + "type": 2 + } + ], + "index": 54 + }, + { + "name": "Mortal55", + "fields": [ + { + "type": 2 + } + ], + "index": 55 + }, + { + "name": "Mortal56", + "fields": [ + { + "type": 2 + } + ], + "index": 56 + }, + { + "name": "Mortal57", + "fields": [ + { + "type": 2 + } + ], + "index": 57 + }, + { + "name": "Mortal58", + "fields": [ + { + "type": 2 + } + ], + "index": 58 + }, + { + "name": "Mortal59", + "fields": [ + { + "type": 2 + } + ], + "index": 59 + }, + { + "name": "Mortal60", + "fields": [ + { + "type": 2 + } + ], + "index": 60 + }, + { + "name": "Mortal61", + "fields": [ + { + "type": 2 + } + ], + "index": 61 + }, + { + "name": "Mortal62", + "fields": [ + { + "type": 2 + } + ], + "index": 62 + }, + { + "name": "Mortal63", + "fields": [ + { + "type": 2 + } + ], + "index": 63 + }, + { + "name": "Mortal64", + "fields": [ + { + "type": 2 + } + ], + "index": 64 + }, + { + "name": "Mortal65", + "fields": [ + { + "type": 2 + } + ], + "index": 65 + }, + { + "name": "Mortal66", + "fields": [ + { + "type": 2 + } + ], + "index": 66 + }, + { + "name": "Mortal67", + "fields": [ + { + "type": 2 + } + ], + "index": 67 + }, + { + "name": "Mortal68", + "fields": [ + { + "type": 2 + } + ], + "index": 68 + }, + { + "name": "Mortal69", + "fields": [ + { + "type": 2 + } + ], + "index": 69 + }, + { + "name": "Mortal70", + "fields": [ + { + "type": 2 + } + ], + "index": 70 + }, + { + "name": "Mortal71", + "fields": [ + { + "type": 2 + } + ], + "index": 71 + }, + { + "name": "Mortal72", + "fields": [ + { + "type": 2 + } + ], + "index": 72 + }, + { + "name": "Mortal73", + "fields": [ + { + "type": 2 + } + ], + "index": 73 + }, + { + "name": "Mortal74", + "fields": [ + { + "type": 2 + } + ], + "index": 74 + }, + { + "name": "Mortal75", + "fields": [ + { + "type": 2 + } + ], + "index": 75 + }, + { + "name": "Mortal76", + "fields": [ + { + "type": 2 + } + ], + "index": 76 + }, + { + "name": "Mortal77", + "fields": [ + { + "type": 2 + } + ], + "index": 77 + }, + { + "name": "Mortal78", + "fields": [ + { + "type": 2 + } + ], + "index": 78 + }, + { + "name": "Mortal79", + "fields": [ + { + "type": 2 + } + ], + "index": 79 + }, + { + "name": "Mortal80", + "fields": [ + { + "type": 2 + } + ], + "index": 80 + }, + { + "name": "Mortal81", + "fields": [ + { + "type": 2 + } + ], + "index": 81 + }, + { + "name": "Mortal82", + "fields": [ + { + "type": 2 + } + ], + "index": 82 + }, + { + "name": "Mortal83", + "fields": [ + { + "type": 2 + } + ], + "index": 83 + }, + { + "name": "Mortal84", + "fields": [ + { + "type": 2 + } + ], + "index": 84 + }, + { + "name": "Mortal85", + "fields": [ + { + "type": 2 + } + ], + "index": 85 + }, + { + "name": "Mortal86", + "fields": [ + { + "type": 2 + } + ], + "index": 86 + }, + { + "name": "Mortal87", + "fields": [ + { + "type": 2 + } + ], + "index": 87 + }, + { + "name": "Mortal88", + "fields": [ + { + "type": 2 + } + ], + "index": 88 + }, + { + "name": "Mortal89", + "fields": [ + { + "type": 2 + } + ], + "index": 89 + }, + { + "name": "Mortal90", + "fields": [ + { + "type": 2 + } + ], + "index": 90 + }, + { + "name": "Mortal91", + "fields": [ + { + "type": 2 + } + ], + "index": 91 + }, + { + "name": "Mortal92", + "fields": [ + { + "type": 2 + } + ], + "index": 92 + }, + { + "name": "Mortal93", + "fields": [ + { + "type": 2 + } + ], + "index": 93 + }, + { + "name": "Mortal94", + "fields": [ + { + "type": 2 + } + ], + "index": 94 + }, + { + "name": "Mortal95", + "fields": [ + { + "type": 2 + } + ], + "index": 95 + }, + { + "name": "Mortal96", + "fields": [ + { + "type": 2 + } + ], + "index": 96 + }, + { + "name": "Mortal97", + "fields": [ + { + "type": 2 + } + ], + "index": 97 + }, + { + "name": "Mortal98", + "fields": [ + { + "type": 2 + } + ], + "index": 98 + }, + { + "name": "Mortal99", + "fields": [ + { + "type": 2 + } + ], + "index": 99 + }, + { + "name": "Mortal100", + "fields": [ + { + "type": 2 + } + ], + "index": 100 + }, + { + "name": "Mortal101", + "fields": [ + { + "type": 2 + } + ], + "index": 101 + }, + { + "name": "Mortal102", + "fields": [ + { + "type": 2 + } + ], + "index": 102 + }, + { + "name": "Mortal103", + "fields": [ + { + "type": 2 + } + ], + "index": 103 + }, + { + "name": "Mortal104", + "fields": [ + { + "type": 2 + } + ], + "index": 104 + }, + { + "name": "Mortal105", + "fields": [ + { + "type": 2 + } + ], + "index": 105 + }, + { + "name": "Mortal106", + "fields": [ + { + "type": 2 + } + ], + "index": 106 + }, + { + "name": "Mortal107", + "fields": [ + { + "type": 2 + } + ], + "index": 107 + }, + { + "name": "Mortal108", + "fields": [ + { + "type": 2 + } + ], + "index": 108 + }, + { + "name": "Mortal109", + "fields": [ + { + "type": 2 + } + ], + "index": 109 + }, + { + "name": "Mortal110", + "fields": [ + { + "type": 2 + } + ], + "index": 110 + }, + { + "name": "Mortal111", + "fields": [ + { + "type": 2 + } + ], + "index": 111 + }, + { + "name": "Mortal112", + "fields": [ + { + "type": 2 + } + ], + "index": 112 + }, + { + "name": "Mortal113", + "fields": [ + { + "type": 2 + } + ], + "index": 113 + }, + { + "name": "Mortal114", + "fields": [ + { + "type": 2 + } + ], + "index": 114 + }, + { + "name": "Mortal115", + "fields": [ + { + "type": 2 + } + ], + "index": 115 + }, + { + "name": "Mortal116", + "fields": [ + { + "type": 2 + } + ], + "index": 116 + }, + { + "name": "Mortal117", + "fields": [ + { + "type": 2 + } + ], + "index": 117 + }, + { + "name": "Mortal118", + "fields": [ + { + "type": 2 + } + ], + "index": 118 + }, + { + "name": "Mortal119", + "fields": [ + { + "type": 2 + } + ], + "index": 119 + }, + { + "name": "Mortal120", + "fields": [ + { + "type": 2 + } + ], + "index": 120 + }, + { + "name": "Mortal121", + "fields": [ + { + "type": 2 + } + ], + "index": 121 + }, + { + "name": "Mortal122", + "fields": [ + { + "type": 2 + } + ], + "index": 122 + }, + { + "name": "Mortal123", + "fields": [ + { + "type": 2 + } + ], + "index": 123 + }, + { + "name": "Mortal124", + "fields": [ + { + "type": 2 + } + ], + "index": 124 + }, + { + "name": "Mortal125", + "fields": [ + { + "type": 2 + } + ], + "index": 125 + }, + { + "name": "Mortal126", + "fields": [ + { + "type": 2 + } + ], + "index": 126 + }, + { + "name": "Mortal127", + "fields": [ + { + "type": 2 + } + ], + "index": 127 + }, + { + "name": "Mortal128", + "fields": [ + { + "type": 2 + } + ], + "index": 128 + }, + { + "name": "Mortal129", + "fields": [ + { + "type": 2 + } + ], + "index": 129 + }, + { + "name": "Mortal130", + "fields": [ + { + "type": 2 + } + ], + "index": 130 + }, + { + "name": "Mortal131", + "fields": [ + { + "type": 2 + } + ], + "index": 131 + }, + { + "name": "Mortal132", + "fields": [ + { + "type": 2 + } + ], + "index": 132 + }, + { + "name": "Mortal133", + "fields": [ + { + "type": 2 + } + ], + "index": 133 + }, + { + "name": "Mortal134", + "fields": [ + { + "type": 2 + } + ], + "index": 134 + }, + { + "name": "Mortal135", + "fields": [ + { + "type": 2 + } + ], + "index": 135 + }, + { + "name": "Mortal136", + "fields": [ + { + "type": 2 + } + ], + "index": 136 + }, + { + "name": "Mortal137", + "fields": [ + { + "type": 2 + } + ], + "index": 137 + }, + { + "name": "Mortal138", + "fields": [ + { + "type": 2 + } + ], + "index": 138 + }, + { + "name": "Mortal139", + "fields": [ + { + "type": 2 + } + ], + "index": 139 + }, + { + "name": "Mortal140", + "fields": [ + { + "type": 2 + } + ], + "index": 140 + }, + { + "name": "Mortal141", + "fields": [ + { + "type": 2 + } + ], + "index": 141 + }, + { + "name": "Mortal142", + "fields": [ + { + "type": 2 + } + ], + "index": 142 + }, + { + "name": "Mortal143", + "fields": [ + { + "type": 2 + } + ], + "index": 143 + }, + { + "name": "Mortal144", + "fields": [ + { + "type": 2 + } + ], + "index": 144 + }, + { + "name": "Mortal145", + "fields": [ + { + "type": 2 + } + ], + "index": 145 + }, + { + "name": "Mortal146", + "fields": [ + { + "type": 2 + } + ], + "index": 146 + }, + { + "name": "Mortal147", + "fields": [ + { + "type": 2 + } + ], + "index": 147 + }, + { + "name": "Mortal148", + "fields": [ + { + "type": 2 + } + ], + "index": 148 + }, + { + "name": "Mortal149", + "fields": [ + { + "type": 2 + } + ], + "index": 149 + }, + { + "name": "Mortal150", + "fields": [ + { + "type": 2 + } + ], + "index": 150 + }, + { + "name": "Mortal151", + "fields": [ + { + "type": 2 + } + ], + "index": 151 + }, + { + "name": "Mortal152", + "fields": [ + { + "type": 2 + } + ], + "index": 152 + }, + { + "name": "Mortal153", + "fields": [ + { + "type": 2 + } + ], + "index": 153 + }, + { + "name": "Mortal154", + "fields": [ + { + "type": 2 + } + ], + "index": 154 + }, + { + "name": "Mortal155", + "fields": [ + { + "type": 2 + } + ], + "index": 155 + }, + { + "name": "Mortal156", + "fields": [ + { + "type": 2 + } + ], + "index": 156 + }, + { + "name": "Mortal157", + "fields": [ + { + "type": 2 + } + ], + "index": 157 + }, + { + "name": "Mortal158", + "fields": [ + { + "type": 2 + } + ], + "index": 158 + }, + { + "name": "Mortal159", + "fields": [ + { + "type": 2 + } + ], + "index": 159 + }, + { + "name": "Mortal160", + "fields": [ + { + "type": 2 + } + ], + "index": 160 + }, + { + "name": "Mortal161", + "fields": [ + { + "type": 2 + } + ], + "index": 161 + }, + { + "name": "Mortal162", + "fields": [ + { + "type": 2 + } + ], + "index": 162 + }, + { + "name": "Mortal163", + "fields": [ + { + "type": 2 + } + ], + "index": 163 + }, + { + "name": "Mortal164", + "fields": [ + { + "type": 2 + } + ], + "index": 164 + }, + { + "name": "Mortal165", + "fields": [ + { + "type": 2 + } + ], + "index": 165 + }, + { + "name": "Mortal166", + "fields": [ + { + "type": 2 + } + ], + "index": 166 + }, + { + "name": "Mortal167", + "fields": [ + { + "type": 2 + } + ], + "index": 167 + }, + { + "name": "Mortal168", + "fields": [ + { + "type": 2 + } + ], + "index": 168 + }, + { + "name": "Mortal169", + "fields": [ + { + "type": 2 + } + ], + "index": 169 + }, + { + "name": "Mortal170", + "fields": [ + { + "type": 2 + } + ], + "index": 170 + }, + { + "name": "Mortal171", + "fields": [ + { + "type": 2 + } + ], + "index": 171 + }, + { + "name": "Mortal172", + "fields": [ + { + "type": 2 + } + ], + "index": 172 + }, + { + "name": "Mortal173", + "fields": [ + { + "type": 2 + } + ], + "index": 173 + }, + { + "name": "Mortal174", + "fields": [ + { + "type": 2 + } + ], + "index": 174 + }, + { + "name": "Mortal175", + "fields": [ + { + "type": 2 + } + ], + "index": 175 + }, + { + "name": "Mortal176", + "fields": [ + { + "type": 2 + } + ], + "index": 176 + }, + { + "name": "Mortal177", + "fields": [ + { + "type": 2 + } + ], + "index": 177 + }, + { + "name": "Mortal178", + "fields": [ + { + "type": 2 + } + ], + "index": 178 + }, + { + "name": "Mortal179", + "fields": [ + { + "type": 2 + } + ], + "index": 179 + }, + { + "name": "Mortal180", + "fields": [ + { + "type": 2 + } + ], + "index": 180 + }, + { + "name": "Mortal181", + "fields": [ + { + "type": 2 + } + ], + "index": 181 + }, + { + "name": "Mortal182", + "fields": [ + { + "type": 2 + } + ], + "index": 182 + }, + { + "name": "Mortal183", + "fields": [ + { + "type": 2 + } + ], + "index": 183 + }, + { + "name": "Mortal184", + "fields": [ + { + "type": 2 + } + ], + "index": 184 + }, + { + "name": "Mortal185", + "fields": [ + { + "type": 2 + } + ], + "index": 185 + }, + { + "name": "Mortal186", + "fields": [ + { + "type": 2 + } + ], + "index": 186 + }, + { + "name": "Mortal187", + "fields": [ + { + "type": 2 + } + ], + "index": 187 + }, + { + "name": "Mortal188", + "fields": [ + { + "type": 2 + } + ], + "index": 188 + }, + { + "name": "Mortal189", + "fields": [ + { + "type": 2 + } + ], + "index": 189 + }, + { + "name": "Mortal190", + "fields": [ + { + "type": 2 + } + ], + "index": 190 + }, + { + "name": "Mortal191", + "fields": [ + { + "type": 2 + } + ], + "index": 191 + }, + { + "name": "Mortal192", + "fields": [ + { + "type": 2 + } + ], + "index": 192 + }, + { + "name": "Mortal193", + "fields": [ + { + "type": 2 + } + ], + "index": 193 + }, + { + "name": "Mortal194", + "fields": [ + { + "type": 2 + } + ], + "index": 194 + }, + { + "name": "Mortal195", + "fields": [ + { + "type": 2 + } + ], + "index": 195 + }, + { + "name": "Mortal196", + "fields": [ + { + "type": 2 + } + ], + "index": 196 + }, + { + "name": "Mortal197", + "fields": [ + { + "type": 2 + } + ], + "index": 197 + }, + { + "name": "Mortal198", + "fields": [ + { + "type": 2 + } + ], + "index": 198 + }, + { + "name": "Mortal199", + "fields": [ + { + "type": 2 + } + ], + "index": 199 + }, + { + "name": "Mortal200", + "fields": [ + { + "type": 2 + } + ], + "index": 200 + }, + { + "name": "Mortal201", + "fields": [ + { + "type": 2 + } + ], + "index": 201 + }, + { + "name": "Mortal202", + "fields": [ + { + "type": 2 + } + ], + "index": 202 + }, + { + "name": "Mortal203", + "fields": [ + { + "type": 2 + } + ], + "index": 203 + }, + { + "name": "Mortal204", + "fields": [ + { + "type": 2 + } + ], + "index": 204 + }, + { + "name": "Mortal205", + "fields": [ + { + "type": 2 + } + ], + "index": 205 + }, + { + "name": "Mortal206", + "fields": [ + { + "type": 2 + } + ], + "index": 206 + }, + { + "name": "Mortal207", + "fields": [ + { + "type": 2 + } + ], + "index": 207 + }, + { + "name": "Mortal208", + "fields": [ + { + "type": 2 + } + ], + "index": 208 + }, + { + "name": "Mortal209", + "fields": [ + { + "type": 2 + } + ], + "index": 209 + }, + { + "name": "Mortal210", + "fields": [ + { + "type": 2 + } + ], + "index": 210 + }, + { + "name": "Mortal211", + "fields": [ + { + "type": 2 + } + ], + "index": 211 + }, + { + "name": "Mortal212", + "fields": [ + { + "type": 2 + } + ], + "index": 212 + }, + { + "name": "Mortal213", + "fields": [ + { + "type": 2 + } + ], + "index": 213 + }, + { + "name": "Mortal214", + "fields": [ + { + "type": 2 + } + ], + "index": 214 + }, + { + "name": "Mortal215", + "fields": [ + { + "type": 2 + } + ], + "index": 215 + }, + { + "name": "Mortal216", + "fields": [ + { + "type": 2 + } + ], + "index": 216 + }, + { + "name": "Mortal217", + "fields": [ + { + "type": 2 + } + ], + "index": 217 + }, + { + "name": "Mortal218", + "fields": [ + { + "type": 2 + } + ], + "index": 218 + }, + { + "name": "Mortal219", + "fields": [ + { + "type": 2 + } + ], + "index": 219 + }, + { + "name": "Mortal220", + "fields": [ + { + "type": 2 + } + ], + "index": 220 + }, + { + "name": "Mortal221", + "fields": [ + { + "type": 2 + } + ], + "index": 221 + }, + { + "name": "Mortal222", + "fields": [ + { + "type": 2 + } + ], + "index": 222 + }, + { + "name": "Mortal223", + "fields": [ + { + "type": 2 + } + ], + "index": 223 + }, + { + "name": "Mortal224", + "fields": [ + { + "type": 2 + } + ], + "index": 224 + }, + { + "name": "Mortal225", + "fields": [ + { + "type": 2 + } + ], + "index": 225 + }, + { + "name": "Mortal226", + "fields": [ + { + "type": 2 + } + ], + "index": 226 + }, + { + "name": "Mortal227", + "fields": [ + { + "type": 2 + } + ], + "index": 227 + }, + { + "name": "Mortal228", + "fields": [ + { + "type": 2 + } + ], + "index": 228 + }, + { + "name": "Mortal229", + "fields": [ + { + "type": 2 + } + ], + "index": 229 + }, + { + "name": "Mortal230", + "fields": [ + { + "type": 2 + } + ], + "index": 230 + }, + { + "name": "Mortal231", + "fields": [ + { + "type": 2 + } + ], + "index": 231 + }, + { + "name": "Mortal232", + "fields": [ + { + "type": 2 + } + ], + "index": 232 + }, + { + "name": "Mortal233", + "fields": [ + { + "type": 2 + } + ], + "index": 233 + }, + { + "name": "Mortal234", + "fields": [ + { + "type": 2 + } + ], + "index": 234 + }, + { + "name": "Mortal235", + "fields": [ + { + "type": 2 + } + ], + "index": 235 + }, + { + "name": "Mortal236", + "fields": [ + { + "type": 2 + } + ], + "index": 236 + }, + { + "name": "Mortal237", + "fields": [ + { + "type": 2 + } + ], + "index": 237 + }, + { + "name": "Mortal238", + "fields": [ + { + "type": 2 + } + ], + "index": 238 + }, + { + "name": "Mortal239", + "fields": [ + { + "type": 2 + } + ], + "index": 239 + }, + { + "name": "Mortal240", + "fields": [ + { + "type": 2 + } + ], + "index": 240 + }, + { + "name": "Mortal241", + "fields": [ + { + "type": 2 + } + ], + "index": 241 + }, + { + "name": "Mortal242", + "fields": [ + { + "type": 2 + } + ], + "index": 242 + }, + { + "name": "Mortal243", + "fields": [ + { + "type": 2 + } + ], + "index": 243 + }, + { + "name": "Mortal244", + "fields": [ + { + "type": 2 + } + ], + "index": 244 + }, + { + "name": "Mortal245", + "fields": [ + { + "type": 2 + } + ], + "index": 245 + }, + { + "name": "Mortal246", + "fields": [ + { + "type": 2 + } + ], + "index": 246 + }, + { + "name": "Mortal247", + "fields": [ + { + "type": 2 + } + ], + "index": 247 + }, + { + "name": "Mortal248", + "fields": [ + { + "type": 2 + } + ], + "index": 248 + }, + { + "name": "Mortal249", + "fields": [ + { + "type": 2 + } + ], + "index": 249 + }, + { + "name": "Mortal250", + "fields": [ + { + "type": 2 + } + ], + "index": 250 + }, + { + "name": "Mortal251", + "fields": [ + { + "type": 2 + } + ], + "index": 251 + }, + { + "name": "Mortal252", + "fields": [ + { + "type": 2 + } + ], + "index": 252 + }, + { + "name": "Mortal253", + "fields": [ + { + "type": 2 + } + ], + "index": 253 + }, + { + "name": "Mortal254", + "fields": [ + { + "type": 2 + } + ], + "index": 254 + }, + { + "name": "Mortal255", + "fields": [ + { + "type": 2 + } + ], + "index": 255 + } + ] + } + } + } + }, + { + "id": 155, + "type": { + "path": [ + "frame_system", + "extensions", + "check_nonce", + "CheckNonce" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "type": 48, + "typeName": "T::Nonce" + } + ] + } + } + } + }, + { + "id": 156, + "type": { + "path": [ + "frame_system", + "extensions", + "check_weight", + "CheckWeight" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "composite": {} + } + } + }, + { + "id": 157, + "type": { + "path": [ + "pallet_transaction_payment", + "ChargeTransactionPayment" + ], + "params": [ + { + "name": "T", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "type": 77, + "typeName": "BalanceOf" + } + ] + } + } + } + }, + { + "id": 158, + "type": { + "path": [ + "sp_runtime", + "generic", + "block", + "Block" + ], + "params": [ + { + "name": "Header", + "type": 159 + }, + { + "name": "Extrinsic", + "type": 160 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "header", + "type": 159, + "typeName": "Header" + }, + { + "name": "extrinsics", + "type": 161, + "typeName": "Vec" + } + ] + } + } + } + }, + { + "id": 159, + "type": { + "path": [ + "sp_runtime", + "generic", + "header", + "Header" + ], + "params": [ + { + "name": "Number", + "type": 4 + }, + { + "name": "Hash", + "type": null + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "parent_hash", + "type": 12, + "typeName": "Hash::Output" + }, + { + "name": "number", + "type": 48, + "typeName": "Number" + }, + { + "name": "state_root", + "type": 12, + "typeName": "Hash::Output" + }, + { + "name": "extrinsics_root", + "type": 12, + "typeName": "Hash::Output" + }, + { + "name": "digest", + "type": 14, + "typeName": "Digest" + } + ] + } + } + } + }, + { + "id": 160, + "type": { + "path": [ + "sp_runtime", + "generic", + "unchecked_extrinsic", + "UncheckedExtrinsic" + ], + "params": [ + { + "name": "Address", + "type": 74 + }, + { + "name": "Call", + "type": 71 + }, + { + "name": "Signature", + "type": 142 + }, + { + "name": "Extra", + "type": 148 + } + ], + "def": { + "composite": { + "fields": [ + { + "type": 13 + } + ] + } + } + } + }, + { + "id": 161, + "type": { + "def": { + "sequence": { + "type": 160 + } + } + } + }, + { + "id": 162, + "type": { + "path": [ + "sp_core", + "OpaqueMetadata" + ], + "def": { + "composite": { + "fields": [ + { + "type": 13, + "typeName": "Vec" + } + ] + } + } + } + }, + { + "id": 163, + "type": { + "path": [ + "Option" + ], + "params": [ + { + "name": "T", + "type": 162 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "None", + "index": 0 + }, + { + "name": "Some", + "fields": [ + { + "type": 162 + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 164, + "type": { + "def": { + "sequence": { + "type": 4 + } + } + } + }, + { + "id": 165, + "type": { + "path": [ + "Result" + ], + "params": [ + { + "name": "T", + "type": 31 + }, + { + "name": "E", + "type": 166 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "Ok", + "fields": [ + { + "type": 31 + } + ], + "index": 0 + }, + { + "name": "Err", + "fields": [ + { + "type": 166 + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 166, + "type": { + "path": [ + "sp_runtime", + "transaction_validity", + "TransactionValidityError" + ], + "def": { + "variant": { + "variants": [ + { + "name": "Invalid", + "fields": [ + { + "type": 167, + "typeName": "InvalidTransaction" + } + ], + "index": 0 + }, + { + "name": "Unknown", + "fields": [ + { + "type": 168, + "typeName": "UnknownTransaction" + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 167, + "type": { + "path": [ + "sp_runtime", + "transaction_validity", + "InvalidTransaction" + ], + "def": { + "variant": { + "variants": [ + { + "name": "Call", + "index": 0 + }, + { + "name": "Payment", + "index": 1 + }, + { + "name": "Future", + "index": 2 + }, + { + "name": "Stale", + "index": 3 + }, + { + "name": "BadProof", + "index": 4 + }, + { + "name": "AncientBirthBlock", + "index": 5 + }, + { + "name": "ExhaustsResources", + "index": 6 + }, + { + "name": "Custom", + "fields": [ + { + "type": 2, + "typeName": "u8" + } + ], + "index": 7 + }, + { + "name": "BadMandatory", + "index": 8 + }, + { + "name": "MandatoryValidation", + "index": 9 + }, + { + "name": "BadSigner", + "index": 10 + } + ] + } + } + } + }, + { + "id": 168, + "type": { + "path": [ + "sp_runtime", + "transaction_validity", + "UnknownTransaction" + ], + "def": { + "variant": { + "variants": [ + { + "name": "CannotLookup", + "index": 0 + }, + { + "name": "NoUnsignedValidator", + "index": 1 + }, + { + "name": "Custom", + "fields": [ + { + "type": 2, + "typeName": "u8" + } + ], + "index": 2 + } + ] + } + } + } + }, + { + "id": 169, + "type": { + "path": [ + "sp_inherents", + "InherentData" + ], + "def": { + "composite": { + "fields": [ + { + "name": "data", + "type": 170, + "typeName": "BTreeMap>" + } + ] + } + } + } + }, + { + "id": 170, + "type": { + "path": [ + "BTreeMap" + ], + "params": [ + { + "name": "K", + "type": 65 + }, + { + "name": "V", + "type": 13 + } + ], + "def": { + "composite": { + "fields": [ + { + "type": 171 + } + ] + } + } + } + }, + { + "id": 171, + "type": { + "def": { + "sequence": { + "type": 172 + } + } + } + }, + { + "id": 172, + "type": { + "def": { + "tuple": [ + 65, + 13 + ] + } + } + }, + { + "id": 173, + "type": { + "path": [ + "sp_inherents", + "CheckInherentsResult" + ], + "def": { + "composite": { + "fields": [ + { + "name": "okay", + "type": 42, + "typeName": "bool" + }, + { + "name": "fatal_error", + "type": 42, + "typeName": "bool" + }, + { + "name": "errors", + "type": 169, + "typeName": "InherentData" + } + ] + } + } + } + }, + { + "id": 174, + "type": { + "path": [ + "sp_runtime", + "transaction_validity", + "TransactionSource" + ], + "def": { + "variant": { + "variants": [ + { + "name": "InBlock", + "index": 0 + }, + { + "name": "Local", + "index": 1 + }, + { + "name": "External", + "index": 2 + } + ] + } + } + } + }, + { + "id": 175, + "type": { + "path": [ + "Result" + ], + "params": [ + { + "name": "T", + "type": 176 + }, + { + "name": "E", + "type": 166 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "Ok", + "fields": [ + { + "type": 176 + } + ], + "index": 0 + }, + { + "name": "Err", + "fields": [ + { + "type": 166 + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 176, + "type": { + "path": [ + "sp_runtime", + "transaction_validity", + "ValidTransaction" + ], + "def": { + "composite": { + "fields": [ + { + "name": "priority", + "type": 11, + "typeName": "TransactionPriority" + }, + { + "name": "requires", + "type": 53, + "typeName": "Vec" + }, + { + "name": "provides", + "type": 53, + "typeName": "Vec" + }, + { + "name": "longevity", + "type": 11, + "typeName": "TransactionLongevity" + }, + { + "name": "propagate", + "type": 42, + "typeName": "bool" + } + ] + } + } + } + }, + { + "id": 177, + "type": { + "path": [ + "Option" + ], + "params": [ + { + "name": "T", + "type": 13 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "None", + "index": 0 + }, + { + "name": "Some", + "fields": [ + { + "type": 13 + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 178, + "type": { + "path": [ + "Option" + ], + "params": [ + { + "name": "T", + "type": 179 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "None", + "index": 0 + }, + { + "name": "Some", + "fields": [ + { + "type": 179 + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 179, + "type": { + "def": { + "sequence": { + "type": 180 + } + } + } + }, + { + "id": 180, + "type": { + "def": { + "tuple": [ + 13, + 181 + ] + } + } + }, + { + "id": 181, + "type": { + "path": [ + "sp_core", + "crypto", + "KeyTypeId" + ], + "def": { + "composite": { + "fields": [ + { + "type": 17, + "typeName": "[u8; 4]" + } + ] + } + } + } + }, + { + "id": 182, + "type": { + "path": [ + "pallet_transaction_payment", + "types", + "RuntimeDispatchInfo" + ], + "params": [ + { + "name": "Balance", + "type": 6 + }, + { + "name": "Weight", + "type": 9 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "weight", + "type": 9, + "typeName": "Weight" + }, + { + "name": "class", + "type": 23, + "typeName": "DispatchClass" + }, + { + "name": "partial_fee", + "type": 6, + "typeName": "Balance" + } + ] + } + } + } + }, + { + "id": 183, + "type": { + "path": [ + "pallet_transaction_payment", + "types", + "FeeDetails" + ], + "params": [ + { + "name": "Balance", + "type": 6 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "inclusion_fee", + "type": 184, + "typeName": "Option>" + }, + { + "name": "tip", + "type": 6, + "typeName": "Balance" + } + ] + } + } + } + }, + { + "id": 184, + "type": { + "path": [ + "Option" + ], + "params": [ + { + "name": "T", + "type": 185 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "None", + "index": 0 + }, + { + "name": "Some", + "fields": [ + { + "type": 185 + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 185, + "type": { + "path": [ + "pallet_transaction_payment", + "types", + "InclusionFee" + ], + "params": [ + { + "name": "Balance", + "type": 6 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "base_fee", + "type": 6, + "typeName": "Balance" + }, + { + "name": "len_fee", + "type": 6, + "typeName": "Balance" + }, + { + "name": "adjusted_weight_fee", + "type": 6, + "typeName": "Balance" + } + ] + } + } + } + }, + { + "id": 186, + "type": { + "path": [ + "Option" + ], + "params": [ + { + "name": "T", + "type": 6 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "None", + "index": 0 + }, + { + "name": "Some", + "fields": [ + { + "type": 6 + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 187, + "type": { + "path": [ + "pallet_contracts_primitives", + "ContractResult" + ], + "params": [ + { + "name": "R", + "type": 188 + }, + { + "name": "Balance", + "type": 6 + }, + { + "name": "EventRecord", + "type": 19 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "gas_consumed", + "type": 9, + "typeName": "Weight" + }, + { + "name": "gas_required", + "type": 9, + "typeName": "Weight" + }, + { + "name": "storage_deposit", + "type": 191, + "typeName": "StorageDeposit" + }, + { + "name": "debug_message", + "type": 13, + "typeName": "Vec" + }, + { + "name": "result", + "type": 188, + "typeName": "R" + }, + { + "name": "events", + "type": 192, + "typeName": "Option>" + } + ] + } + } + } + }, + { + "id": 188, + "type": { + "path": [ + "Result" + ], + "params": [ + { + "name": "T", + "type": 189 + }, + { + "name": "E", + "type": 25 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "Ok", + "fields": [ + { + "type": 189 + } + ], + "index": 0 + }, + { + "name": "Err", + "fields": [ + { + "type": 25 + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 189, + "type": { + "path": [ + "pallet_contracts_primitives", + "ExecReturnValue" + ], + "def": { + "composite": { + "fields": [ + { + "name": "flags", + "type": 190, + "typeName": "ReturnFlags" + }, + { + "name": "data", + "type": 13, + "typeName": "Vec" + } + ] + } + } + } + }, + { + "id": 190, + "type": { + "path": [ + "pallet_contracts_primitives", + "ReturnFlags" + ], + "def": { + "composite": { + "fields": [ + { + "name": "bits", + "type": 4, + "typeName": "u32" + } + ] + } + } + } + }, + { + "id": 191, + "type": { + "path": [ + "pallet_contracts_primitives", + "StorageDeposit" + ], + "params": [ + { + "name": "Balance", + "type": 6 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "Refund", + "fields": [ + { + "type": 6, + "typeName": "Balance" + } + ], + "index": 0 + }, + { + "name": "Charge", + "fields": [ + { + "type": 6, + "typeName": "Balance" + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 192, + "type": { + "path": [ + "Option" + ], + "params": [ + { + "name": "T", + "type": 193 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "None", + "index": 0 + }, + { + "name": "Some", + "fields": [ + { + "type": 193 + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 193, + "type": { + "def": { + "sequence": { + "type": 19 + } + } + } + }, + { + "id": 194, + "type": { + "path": [ + "pallet_contracts_primitives", + "Code" + ], + "params": [ + { + "name": "Hash", + "type": 12 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "Upload", + "fields": [ + { + "type": 13, + "typeName": "Vec" + } + ], + "index": 0 + }, + { + "name": "Existing", + "fields": [ + { + "type": 12, + "typeName": "Hash" + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 195, + "type": { + "path": [ + "pallet_contracts_primitives", + "ContractResult" + ], + "params": [ + { + "name": "R", + "type": 196 + }, + { + "name": "Balance", + "type": 6 + }, + { + "name": "EventRecord", + "type": 19 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "gas_consumed", + "type": 9, + "typeName": "Weight" + }, + { + "name": "gas_required", + "type": 9, + "typeName": "Weight" + }, + { + "name": "storage_deposit", + "type": 191, + "typeName": "StorageDeposit" + }, + { + "name": "debug_message", + "type": 13, + "typeName": "Vec" + }, + { + "name": "result", + "type": 196, + "typeName": "R" + }, + { + "name": "events", + "type": 192, + "typeName": "Option>" + } + ] + } + } + } + }, + { + "id": 196, + "type": { + "path": [ + "Result" + ], + "params": [ + { + "name": "T", + "type": 197 + }, + { + "name": "E", + "type": 25 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "Ok", + "fields": [ + { + "type": 197 + } + ], + "index": 0 + }, + { + "name": "Err", + "fields": [ + { + "type": 25 + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 197, + "type": { + "path": [ + "pallet_contracts_primitives", + "InstantiateReturnValue" + ], + "params": [ + { + "name": "AccountId", + "type": 0 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "result", + "type": 189, + "typeName": "ExecReturnValue" + }, + { + "name": "account_id", + "type": 0, + "typeName": "AccountId" + } + ] + } + } + } + }, + { + "id": 198, + "type": { + "path": [ + "Result" + ], + "params": [ + { + "name": "T", + "type": 199 + }, + { + "name": "E", + "type": 25 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "Ok", + "fields": [ + { + "type": 199 + } + ], + "index": 0 + }, + { + "name": "Err", + "fields": [ + { + "type": 25 + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 199, + "type": { + "path": [ + "pallet_contracts_primitives", + "CodeUploadReturnValue" + ], + "params": [ + { + "name": "CodeHash", + "type": 12 + }, + { + "name": "Balance", + "type": 6 + } + ], + "def": { + "composite": { + "fields": [ + { + "name": "code_hash", + "type": 12, + "typeName": "CodeHash" + }, + { + "name": "deposit", + "type": 6, + "typeName": "Balance" + } + ] + } + } + } + }, + { + "id": 200, + "type": { + "path": [ + "Result" + ], + "params": [ + { + "name": "T", + "type": 177 + }, + { + "name": "E", + "type": 201 + } + ], + "def": { + "variant": { + "variants": [ + { + "name": "Ok", + "fields": [ + { + "type": 177 + } + ], + "index": 0 + }, + { + "name": "Err", + "fields": [ + { + "type": 201 + } + ], + "index": 1 + } + ] + } + } + } + }, + { + "id": 201, + "type": { + "path": [ + "pallet_contracts_primitives", + "ContractAccessError" + ], + "def": { + "variant": { + "variants": [ + { + "name": "DoesntExist", + "index": 0 + }, + { + "name": "KeyDecodingFailed", + "index": 1 + }, + { + "name": "MigrationInProgress", + "index": 2 + } + ] + } + } + } + }, + { + "id": 202, + "type": { + "path": [ + "contracts_node_runtime", + "RuntimeError" + ], + "def": { + "variant": { + "variants": [ + { + "name": "System", + "fields": [ + { + "type": 67, + "typeName": "frame_system::Error" + } + ], + "index": 0 + }, + { + "name": "Utility", + "fields": [ + { + "type": 87, + "typeName": "pallet_utility::Error" + } + ], + "index": 2 + }, + { + "name": "Balances", + "fields": [ + { + "type": 103, + "typeName": "pallet_balances::Error" + } + ], + "index": 4 + }, + { + "name": "Sudo", + "fields": [ + { + "type": 106, + "typeName": "pallet_sudo::Error" + } + ], + "index": 7 + }, + { + "name": "Contracts", + "fields": [ + { + "type": 130, + "typeName": "pallet_contracts::Error" + } + ], + "index": 8 + }, + { + "name": "Assets", + "fields": [ + { + "type": 141, + "typeName": "pallet_assets::Error" + } + ], + "index": 9 + } + ] + } + } + } + } + ] + }, + "pallets": [ + { + "name": "System", + "storage": { + "prefix": "System", + "entries": [ + { + "name": "Account", + "modifier": "Default", + "ty": { + "Map": { + "hashers": [ + "Blake2_128Concat" + ], + "key": 0, + "value": 3 + } + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 128 + ], + "docs": [ + " The full account information for a particular account ID." + ] + }, + { + "name": "ExtrinsicCount", + "modifier": "Optional", + "ty": { + "Plain": 4 + }, + "default": [ + 0 + ], + "docs": [ + " Total extrinsics count for the current block." + ] + }, + { + "name": "BlockWeight", + "modifier": "Default", + "ty": { + "Plain": 8 + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "docs": [ + " The current weight for the block." + ] + }, + { + "name": "AllExtrinsicsLen", + "modifier": "Optional", + "ty": { + "Plain": 4 + }, + "default": [ + 0 + ], + "docs": [ + " Total length (in bytes) for all extrinsics put together, for the current block." + ] + }, + { + "name": "BlockHash", + "modifier": "Default", + "ty": { + "Map": { + "hashers": [ + "Twox64Concat" + ], + "key": 4, + "value": 12 + } + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "docs": [ + " Map of block numbers to block hashes." + ] + }, + { + "name": "ExtrinsicData", + "modifier": "Default", + "ty": { + "Map": { + "hashers": [ + "Twox64Concat" + ], + "key": 4, + "value": 13 + } + }, + "default": [ + 0 + ], + "docs": [ + " Extrinsics data for the current block (maps an extrinsic's index to its data)." + ] + }, + { + "name": "Number", + "modifier": "Default", + "ty": { + "Plain": 4 + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "docs": [ + " The current block number being processed. Set by `execute_block`." + ] + }, + { + "name": "ParentHash", + "modifier": "Default", + "ty": { + "Plain": 12 + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "docs": [ + " Hash of the previous block." + ] + }, + { + "name": "Digest", + "modifier": "Default", + "ty": { + "Plain": 14 + }, + "default": [ + 0 + ], + "docs": [ + " Digest of the current block, also part of the block header." + ] + }, + { + "name": "Events", + "modifier": "Default", + "ty": { + "Plain": 18 + }, + "default": [ + 0 + ], + "docs": [ + " Events deposited for the current block.", + "", + " NOTE: The item is unbound and should therefore never be read on chain.", + " It could otherwise inflate the PoV size of a block.", + "", + " Events have a large in-memory size. Box the events to not go out-of-memory", + " just in case someone still reads them from within the runtime." + ] + }, + { + "name": "EventCount", + "modifier": "Default", + "ty": { + "Plain": 4 + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "docs": [ + " The number of events in the `Events` list." + ] + }, + { + "name": "EventTopics", + "modifier": "Default", + "ty": { + "Map": { + "hashers": [ + "Blake2_128Concat" + ], + "key": 12, + "value": 45 + } + }, + "default": [ + 0 + ], + "docs": [ + " Mapping between a topic (represented by T::Hash) and a vector of indexes", + " of events in the `>` list.", + "", + " All topic vectors have deterministic storage locations depending on the topic. This", + " allows light-clients to leverage the changes trie storage tracking mechanism and", + " in case of changes fetch the list of events of interest.", + "", + " The value has the type `(BlockNumberFor, EventIndex)` because if we used only just", + " the `EventIndex` then in case if the topic has the same contents on the next block", + " no notification will be triggered thus the event might be lost." + ] + }, + { + "name": "LastRuntimeUpgrade", + "modifier": "Optional", + "ty": { + "Plain": 47 + }, + "default": [ + 0 + ], + "docs": [ + " Stores the `spec_version` and `spec_name` of when the last runtime upgrade happened." + ] + }, + { + "name": "UpgradedToU32RefCount", + "modifier": "Default", + "ty": { + "Plain": 42 + }, + "default": [ + 0 + ], + "docs": [ + " True if we have upgraded so that `type RefCount` is `u32`. False (default) if not." + ] + }, + { + "name": "UpgradedToTripleRefCount", + "modifier": "Default", + "ty": { + "Plain": 42 + }, + "default": [ + 0 + ], + "docs": [ + " True if we have upgraded so that AccountInfo contains three types of `RefCount`. False", + " (default) if not." + ] + }, + { + "name": "ExecutionPhase", + "modifier": "Optional", + "ty": { + "Plain": 43 + }, + "default": [ + 0 + ], + "docs": [ + " The execution phase of the block." + ] + } + ] + }, + "calls": { + "ty": 50 + }, + "event": { + "ty": 21 + }, + "constants": [ + { + "name": "BlockWeights", + "ty": 54, + "value": [ + 2, + 91, + 31, + 93, + 0, + 11, + 0, + 32, + 74, + 169, + 209, + 1, + 19, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 194, + 160, + 169, + 29, + 0, + 1, + 11, + 208, + 95, + 159, + 166, + 46, + 1, + 19, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 166, + 1, + 11, + 0, + 152, + 247, + 62, + 93, + 1, + 19, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 191, + 1, + 0, + 0, + 194, + 160, + 169, + 29, + 0, + 1, + 11, + 208, + 231, + 241, + 16, + 163, + 1, + 19, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 230, + 1, + 11, + 0, + 32, + 74, + 169, + 209, + 1, + 19, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 1, + 7, + 0, + 136, + 82, + 106, + 116, + 19, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64, + 194, + 160, + 169, + 29, + 0, + 0, + 0, + 0 + ], + "docs": [ + " Block & extrinsics weights: base values and limits." + ] + }, + { + "name": "BlockLength", + "ty": 58, + "value": [ + 0, + 0, + 60, + 0, + 0, + 0, + 80, + 0, + 0, + 0, + 80, + 0 + ], + "docs": [ + " The maximum length of a block (in bytes)." + ] + }, + { + "name": "BlockHashCount", + "ty": 4, + "value": [ + 96, + 9, + 0, + 0 + ], + "docs": [ + " Maximum number of block number to block hash mappings to keep (oldest pruned first)." + ] + }, + { + "name": "DbWeight", + "ty": 60, + "value": [ + 64, + 120, + 125, + 1, + 0, + 0, + 0, + 0, + 0, + 225, + 245, + 5, + 0, + 0, + 0, + 0 + ], + "docs": [ + " The weight of runtime database operations the runtime can invoke." + ] + }, + { + "name": "Version", + "ty": 61, + "value": [ + 96, + 115, + 117, + 98, + 115, + 116, + 114, + 97, + 116, + 101, + 45, + 99, + 111, + 110, + 116, + 114, + 97, + 99, + 116, + 115, + 45, + 110, + 111, + 100, + 101, + 96, + 115, + 117, + 98, + 115, + 116, + 114, + 97, + 116, + 101, + 45, + 99, + 111, + 110, + 116, + 114, + 97, + 99, + 116, + 115, + 45, + 110, + 111, + 100, + 101, + 1, + 0, + 0, + 0, + 100, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 40, + 223, + 106, + 203, + 104, + 153, + 7, + 96, + 155, + 4, + 0, + 0, + 0, + 55, + 227, + 151, + 252, + 124, + 145, + 245, + 228, + 2, + 0, + 0, + 0, + 64, + 254, + 58, + 212, + 1, + 248, + 149, + 154, + 6, + 0, + 0, + 0, + 210, + 188, + 152, + 151, + 238, + 208, + 143, + 21, + 3, + 0, + 0, + 0, + 247, + 139, + 39, + 139, + 229, + 63, + 69, + 76, + 2, + 0, + 0, + 0, + 171, + 60, + 5, + 114, + 41, + 31, + 235, + 139, + 1, + 0, + 0, + 0, + 188, + 157, + 137, + 144, + 79, + 91, + 146, + 63, + 1, + 0, + 0, + 0, + 55, + 200, + 187, + 19, + 80, + 169, + 162, + 168, + 4, + 0, + 0, + 0, + 243, + 255, + 20, + 213, + 171, + 82, + 112, + 89, + 3, + 0, + 0, + 0, + 104, + 182, + 107, + 161, + 34, + 201, + 63, + 167, + 2, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "docs": [ + " Get the chain's current version." + ] + }, + { + "name": "SS58Prefix", + "ty": 66, + "value": [ + 42, + 0 + ], + "docs": [ + " The designated SS58 prefix of this chain.", + "", + " This replaces the \"ss58Format\" property declared in the chain spec. Reason is", + " that the runtime should know about the prefix in order to make use of it as", + " an identifier of the chain." + ] + } + ], + "error": { + "ty": 67 + }, + "index": 0, + "docs": [] + }, + { + "name": "RandomnessCollectiveFlip", + "storage": { + "prefix": "RandomnessCollectiveFlip", + "entries": [ + { + "name": "RandomMaterial", + "modifier": "Default", + "ty": { + "Plain": 68 + }, + "default": [ + 0 + ], + "docs": [ + " Series of block headers from the last 81 blocks that acts as random seed material. This", + " is arranged as a ring buffer with `block_number % 81` being the index into the `Vec` of", + " the oldest hash." + ] + } + ] + }, + "calls": null, + "event": null, + "constants": [], + "error": null, + "index": 1, + "docs": [] + }, + { + "name": "Utility", + "storage": null, + "calls": { + "ty": 69 + }, + "event": { + "ty": 30 + }, + "constants": [ + { + "name": "batched_calls_limit", + "ty": 4, + "value": [ + 170, + 42, + 0, + 0 + ], + "docs": [ + " The limit on the number of batched calls." + ] + } + ], + "error": { + "ty": 87 + }, + "index": 2, + "docs": [] + }, + { + "name": "Timestamp", + "storage": { + "prefix": "Timestamp", + "entries": [ + { + "name": "Now", + "modifier": "Default", + "ty": { + "Plain": 11 + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "docs": [ + " The current time for the current block." + ] + }, + { + "name": "DidUpdate", + "modifier": "Default", + "ty": { + "Plain": 42 + }, + "default": [ + 0 + ], + "docs": [ + " Whether the timestamp has been updated in this block.", + "", + " This value is updated to `true` upon successful submission of a timestamp by a node.", + " It is then checked at the end of each block execution in the `on_finalize` hook." + ] + } + ] + }, + "calls": { + "ty": 72 + }, + "event": null, + "constants": [ + { + "name": "MinimumPeriod", + "ty": 11, + "value": [ + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "docs": [ + " The minimum period between blocks.", + "", + " Be aware that this is different to the *expected* period that the block production", + " apparatus provides. Your chosen consensus system will generally work with this to", + " determine a sensible block time. For example, in the Aura pallet it will be double this", + " period on default settings." + ] + } + ], + "error": null, + "index": 3, + "docs": [] + }, + { + "name": "Balances", + "storage": { + "prefix": "Balances", + "entries": [ + { + "name": "TotalIssuance", + "modifier": "Default", + "ty": { + "Plain": 6 + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "docs": [ + " The total units issued in the system." + ] + }, + { + "name": "InactiveIssuance", + "modifier": "Default", + "ty": { + "Plain": 6 + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "docs": [ + " The total units of outstanding deactivated balance in the system." + ] + }, + { + "name": "Account", + "modifier": "Default", + "ty": { + "Map": { + "hashers": [ + "Blake2_128Concat" + ], + "key": 0, + "value": 5 + } + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 128 + ], + "docs": [ + " The Balances pallet example of storing the balance of an account.", + "", + " # Example", + "", + " ```nocompile", + " impl pallet_balances::Config for Runtime {", + " type AccountStore = StorageMapShim, frame_system::Provider, AccountId, Self::AccountData>", + " }", + " ```", + "", + " You can also store the balance of an account in the `System` pallet.", + "", + " # Example", + "", + " ```nocompile", + " impl pallet_balances::Config for Runtime {", + " type AccountStore = System", + " }", + " ```", + "", + " But this comes with tradeoffs, storing account balances in the system pallet stores", + " `frame_system` data alongside the account data contrary to storing account balances in the", + " `Balances` pallet, which uses a `StorageMap` to store balances data only.", + " NOTE: This is only used in the case that this pallet is used to store balances." + ] + }, + { + "name": "Locks", + "modifier": "Default", + "ty": { + "Map": { + "hashers": [ + "Blake2_128Concat" + ], + "key": 0, + "value": 88 + } + }, + "default": [ + 0 + ], + "docs": [ + " Any liquidity locks on some account balances.", + " NOTE: Should only be accessed when setting, changing and freeing a lock." + ] + }, + { + "name": "Reserves", + "modifier": "Default", + "ty": { + "Map": { + "hashers": [ + "Blake2_128Concat" + ], + "key": 0, + "value": 92 + } + }, + "default": [ + 0 + ], + "docs": [ + " Named reserves on some account balances." + ] + }, + { + "name": "Holds", + "modifier": "Default", + "ty": { + "Map": { + "hashers": [ + "Blake2_128Concat" + ], + "key": 0, + "value": 95 + } + }, + "default": [ + 0 + ], + "docs": [ + " Holds on account balances." + ] + }, + { + "name": "Freezes", + "modifier": "Default", + "ty": { + "Map": { + "hashers": [ + "Blake2_128Concat" + ], + "key": 0, + "value": 100 + } + }, + "default": [ + 0 + ], + "docs": [ + " Freeze locks on account balances." + ] + } + ] + }, + "calls": { + "ty": 73 + }, + "event": { + "ty": 33 + }, + "constants": [ + { + "name": "ExistentialDeposit", + "ty": 6, + "value": [ + 0, + 202, + 154, + 59, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "docs": [ + " The minimum amount required to keep an account open. MUST BE GREATER THAN ZERO!", + "", + " If you *really* need it to be zero, you can enable the feature `insecure_zero_ed` for", + " this pallet. However, you do so at your own risk: this will open up a major DoS vector.", + " In case you have multiple sources of provider references, you may also get unexpected", + " behaviour if you set this to zero.", + "", + " Bottom line: Do yourself a favour and make it at least one!" + ] + }, + { + "name": "MaxLocks", + "ty": 4, + "value": [ + 50, + 0, + 0, + 0 + ], + "docs": [ + " The maximum number of locks that should exist on an account.", + " Not strictly enforced, but used for weight estimation." + ] + }, + { + "name": "MaxReserves", + "ty": 4, + "value": [ + 50, + 0, + 0, + 0 + ], + "docs": [ + " The maximum number of named reserves that can exist on an account." + ] + }, + { + "name": "MaxHolds", + "ty": 4, + "value": [ + 2, + 0, + 0, + 0 + ], + "docs": [ + " The maximum number of holds that can exist on an account at any time." + ] + }, + { + "name": "MaxFreezes", + "ty": 4, + "value": [ + 0, + 0, + 0, + 0 + ], + "docs": [ + " The maximum number of individual freeze locks that can exist on an account at any time." + ] + } + ], + "error": { + "ty": 103 + }, + "index": 4, + "docs": [] + }, + { + "name": "Authorship", + "storage": { + "prefix": "Authorship", + "entries": [ + { + "name": "Author", + "modifier": "Optional", + "ty": { + "Plain": 0 + }, + "default": [ + 0 + ], + "docs": [ + " Author of current block." + ] + } + ] + }, + "calls": null, + "event": null, + "constants": [], + "error": null, + "index": 5, + "docs": [] + }, + { + "name": "TransactionPayment", + "storage": { + "prefix": "TransactionPayment", + "entries": [ + { + "name": "NextFeeMultiplier", + "modifier": "Default", + "ty": { + "Plain": 104 + }, + "default": [ + 0, + 0, + 100, + 167, + 179, + 182, + 224, + 13, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "docs": [] + }, + { + "name": "StorageVersion", + "modifier": "Default", + "ty": { + "Plain": 105 + }, + "default": [ + 0 + ], + "docs": [] + } + ] + }, + "calls": null, + "event": { + "ty": 35 + }, + "constants": [ + { + "name": "OperationalFeeMultiplier", + "ty": 2, + "value": [ + 5 + ], + "docs": [ + " A fee mulitplier for `Operational` extrinsics to compute \"virtual tip\" to boost their", + " `priority`", + "", + " This value is multipled by the `final_fee` to obtain a \"virtual tip\" that is later", + " added to a tip component in regular `priority` calculations.", + " It means that a `Normal` transaction can front-run a similarly-sized `Operational`", + " extrinsic (with no tip), by including a tip value greater than the virtual tip.", + "", + " ```rust,ignore", + " // For `Normal`", + " let priority = priority_calc(tip);", + "", + " // For `Operational`", + " let virtual_tip = (inclusion_fee + tip) * OperationalFeeMultiplier;", + " let priority = priority_calc(tip + virtual_tip);", + " ```", + "", + " Note that since we use `final_fee` the multiplier applies also to the regular `tip`", + " sent with the transaction. So, not only does the transaction get a priority bump based", + " on the `inclusion_fee`, but we also amplify the impact of tips applied to `Operational`", + " transactions." + ] + } + ], + "error": null, + "index": 6, + "docs": [] + }, + { + "name": "Sudo", + "storage": { + "prefix": "Sudo", + "entries": [ + { + "name": "Key", + "modifier": "Optional", + "ty": { + "Plain": 0 + }, + "default": [ + 0 + ], + "docs": [ + " The `AccountId` of the sudo key." + ] + } + ] + }, + "calls": { + "ty": 79 + }, + "event": { + "ty": 36 + }, + "constants": [], + "error": { + "ty": 106 + }, + "index": 7, + "docs": [] + }, + { + "name": "Contracts", + "storage": { + "prefix": "Contracts", + "entries": [ + { + "name": "PristineCode", + "modifier": "Optional", + "ty": { + "Map": { + "hashers": [ + "Identity" + ], + "key": 12, + "value": 107 + } + }, + "default": [ + 0 + ], + "docs": [ + " A mapping from a contract's code hash to its code." + ] + }, + { + "name": "CodeInfoOf", + "modifier": "Optional", + "ty": { + "Map": { + "hashers": [ + "Identity" + ], + "key": 12, + "value": 108 + } + }, + "default": [ + 0 + ], + "docs": [ + " A mapping from a contract's code hash to its code info." + ] + }, + { + "name": "Nonce", + "modifier": "Default", + "ty": { + "Plain": 11 + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "docs": [ + " This is a **monotonic** counter incremented on contract instantiation.", + "", + " This is used in order to generate unique trie ids for contracts.", + " The trie id of a new contract is calculated from hash(account_id, nonce).", + " The nonce is required because otherwise the following sequence would lead to", + " a possible collision of storage:", + "", + " 1. Create a new contract.", + " 2. Terminate the contract.", + " 3. Immediately recreate the contract with the same account_id.", + "", + " This is bad because the contents of a trie are deleted lazily and there might be", + " storage of the old instantiation still in it when the new contract is created. Please", + " note that we can't replace the counter by the block number because the sequence above", + " can happen in the same block. We also can't keep the account counter in memory only", + " because storage is the only way to communicate across different extrinsics in the", + " same block.", + "", + " # Note", + "", + " Do not use it to determine the number of contracts. It won't be decremented if", + " a contract is destroyed." + ] + }, + { + "name": "ContractInfoOf", + "modifier": "Optional", + "ty": { + "Map": { + "hashers": [ + "Twox64Concat" + ], + "key": 0, + "value": 109 + } + }, + "default": [ + 0 + ], + "docs": [ + " The code associated with a given account.", + "", + " TWOX-NOTE: SAFE since `AccountId` is a secure hash." + ] + }, + { + "name": "DeletionQueue", + "modifier": "Optional", + "ty": { + "Map": { + "hashers": [ + "Twox64Concat" + ], + "key": 4, + "value": 110 + } + }, + "default": [ + 0 + ], + "docs": [ + " Evicted contracts that await child trie deletion.", + "", + " Child trie deletion is a heavy operation depending on the amount of storage items", + " stored in said trie. Therefore this operation is performed lazily in `on_idle`." + ] + }, + { + "name": "DeletionQueueCounter", + "modifier": "Default", + "ty": { + "Plain": 115 + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "docs": [ + " A pair of monotonic counters used to track the latest contract marked for deletion", + " and the latest deleted contract in queue." + ] + }, + { + "name": "MigrationInProgress", + "modifier": "Optional", + "ty": { + "Plain": 116 + }, + "default": [ + 0 + ], + "docs": [ + " A migration can span across multiple blocks. This storage defines a cursor to track the", + " progress of the migration, enabling us to resume from the last completed position." + ] + } + ] + }, + "calls": { + "ty": 80 + }, + "event": { + "ty": 38 + }, + "constants": [ + { + "name": "Schedule", + "ty": 117, + "value": [ + 4, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 4, + 0, + 0, + 128, + 0, + 0, + 0, + 16, + 0, + 0, + 0, + 0, + 16, + 0, + 0, + 0, + 1, + 0, + 0, + 32, + 0, + 0, + 0, + 0, + 64, + 0, + 0, + 0, + 0, + 0, + 64, + 39, + 19, + 0, + 0, + 182, + 181, + 20, + 0, + 24, + 242, + 34, + 221, + 6, + 241, + 41, + 186, + 248, + 21, + 7, + 1, + 42, + 118, + 43, + 26, + 0, + 24, + 54, + 44, + 11, + 0, + 12, + 210, + 23, + 10, + 0, + 12, + 74, + 251, + 20, + 0, + 24, + 90, + 173, + 22, + 0, + 24, + 182, + 22, + 101, + 0, + 24, + 162, + 51, + 21, + 0, + 24, + 202, + 148, + 20, + 0, + 24, + 146, + 48, + 20, + 0, + 24, + 18, + 159, + 20, + 0, + 24, + 30, + 76, + 88, + 0, + 56, + 122, + 65, + 17, + 0, + 24, + 113, + 16, + 0, + 0, + 180, + 29, + 6, + 0, + 3, + 36, + 112, + 147, + 77, + 73, + 82, + 178, + 146, + 125, + 0, + 40, + 82, + 120, + 232, + 0, + 40, + 254, + 54, + 174, + 30, + 49, + 39, + 109, + 11, + 0, + 98, + 185, + 14, + 0, + 28, + 57, + 17, + 0, + 166, + 135, + 129, + 31, + 149, + 4, + 141, + 8, + 0, + 185, + 8, + 4, + 246, + 226, + 38, + 72, + 73, + 48, + 138, + 48, + 116, + 31, + 133, + 4, + 16, + 4, + 30, + 129, + 72, + 7, + 133, + 4, + 77, + 1, + 4, + 210, + 53, + 82, + 7, + 165, + 4, + 201, + 15, + 4, + 134, + 66, + 114, + 31, + 165, + 4, + 13, + 10, + 4, + 238, + 76, + 249, + 38, + 97, + 39, + 38, + 31, + 200, + 118, + 133, + 42, + 238, + 125, + 80, + 101, + 53, + 41, + 14, + 78, + 210, + 144, + 173, + 81, + 93, + 17, + 0, + 110, + 125, + 141, + 247, + 173, + 42, + 2, + 101, + 205, + 29, + 213, + 39, + 173, + 30, + 0, + 49, + 32, + 0, + 114, + 115, + 24, + 0, + 32, + 185, + 17, + 0, + 238, + 248, + 48, + 0, + 32, + 73, + 53, + 0, + 38, + 83, + 29, + 0, + 32, + 153, + 19, + 0, + 202, + 215, + 30, + 0, + 32, + 145, + 19, + 0, + 22, + 234, + 249, + 10, + 53, + 1, + 110, + 94, + 217, + 2, + 168, + 18, + 192, + 97, + 13, + 193, + 1, + 45, + 96, + 4, + 190, + 6, + 11, + 0, + 12, + 198, + 106, + 19, + 0, + 160, + 42, + 84, + 9, + 0, + 12, + 18, + 9, + 102, + 31, + 185, + 40, + 14, + 51, + 53, + 31, + 33, + 40 + ], + "docs": [ + " Cost schedule and limits." + ] + }, + { + "name": "DepositPerByte", + "ty": 6, + "value": [ + 64, + 75, + 76, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "docs": [ + " The amount of balance a caller has to pay for each byte of storage.", + "", + " # Note", + "", + " Changing this value for an existing chain might need a storage migration." + ] + }, + { + "name": "DefaultDepositLimit", + "ty": 6, + "value": [ + 0, + 0, + 160, + 143, + 230, + 97, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "docs": [ + " Fallback value to limit the storage deposit if it's not being set by the caller." + ] + }, + { + "name": "DepositPerItem", + "ty": 6, + "value": [ + 0, + 232, + 118, + 72, + 23, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "docs": [ + " The amount of balance a caller has to pay for each storage item.", + "", + " # Note", + "", + " Changing this value for an existing chain might need a storage migration." + ] + }, + { + "name": "CodeHashLockupDepositPercent", + "ty": 121, + "value": [ + 0, + 0, + 0, + 0 + ], + "docs": [ + " The percentage of the storage deposit that should be held for using a code hash.", + " Instantiating a contract, or calling [`chain_extension::Ext::add_delegate_dependency`]", + " protects the code from being removed. In order to prevent abuse these actions are", + " protected with a percentage of the code deposit." + ] + }, + { + "name": "MaxCodeLen", + "ty": 4, + "value": [ + 0, + 0, + 4, + 0 + ], + "docs": [ + " The maximum length of a contract code in bytes.", + "", + " The value should be chosen carefully taking into the account the overall memory limit", + " your runtime has, as well as the [maximum allowed callstack", + " depth](#associatedtype.CallStack). Look into the `integrity_test()` for some insights." + ] + }, + { + "name": "MaxStorageKeyLen", + "ty": 4, + "value": [ + 128, + 0, + 0, + 0 + ], + "docs": [ + " The maximum allowable length in bytes for storage keys." + ] + }, + { + "name": "MaxDelegateDependencies", + "ty": 4, + "value": [ + 32, + 0, + 0, + 0 + ], + "docs": [ + " The maximum number of delegate_dependencies that a contract can lock with", + " [`chain_extension::Ext::add_delegate_dependency`]." + ] + }, + { + "name": "UnsafeUnstableInterface", + "ty": 42, + "value": [ + 1 + ], + "docs": [ + " Make contract callable functions marked as `#[unstable]` available.", + "", + " Contracts that use `#[unstable]` functions won't be able to be uploaded unless", + " this is set to `true`. This is only meant for testnets and dev nodes in order to", + " experiment with new features.", + "", + " # Warning", + "", + " Do **not** set to `true` on productions chains." + ] + }, + { + "name": "MaxDebugBufferLen", + "ty": 4, + "value": [ + 0, + 0, + 32, + 0 + ], + "docs": [ + " The maximum length of the debug buffer in bytes." + ] + }, + { + "name": "Environment", + "ty": 122, + "value": [], + "docs": [ + " Type that bundles together all the runtime configurable interface types.", + "", + " This is not a real config. We just mention the type here as constant so that", + " its type appears in the metadata. Only valid value is `()`." + ] + } + ], + "error": { + "ty": 130 + }, + "index": 8, + "docs": [] + }, + { + "name": "Assets", + "storage": { + "prefix": "Assets", + "entries": [ + { + "name": "Asset", + "modifier": "Optional", + "ty": { + "Map": { + "hashers": [ + "Blake2_128Concat" + ], + "key": 4, + "value": 131 + } + }, + "default": [ + 0 + ], + "docs": [ + " Details of an asset." + ] + }, + { + "name": "Account", + "modifier": "Optional", + "ty": { + "Map": { + "hashers": [ + "Blake2_128Concat", + "Blake2_128Concat" + ], + "key": 133, + "value": 134 + } + }, + "default": [ + 0 + ], + "docs": [ + " The holdings of a specific account for a specific asset." + ] + }, + { + "name": "Approvals", + "modifier": "Optional", + "ty": { + "Map": { + "hashers": [ + "Blake2_128Concat", + "Blake2_128Concat", + "Blake2_128Concat" + ], + "key": 137, + "value": 138 + } + }, + "default": [ + 0 + ], + "docs": [ + " Approved balance transfers. First balance is the amount approved for transfer. Second", + " is the amount of `T::Currency` reserved for storing this.", + " First key is the asset ID, second key is the owner and third key is the delegate." + ] + }, + { + "name": "Metadata", + "modifier": "Default", + "ty": { + "Map": { + "hashers": [ + "Blake2_128Concat" + ], + "key": 4, + "value": 139 + } + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "docs": [ + " Metadata of an asset." + ] + } + ] + }, + "calls": { + "ty": 83 + }, + "event": { + "ty": 41 + }, + "constants": [ + { + "name": "RemoveItemsLimit", + "ty": 4, + "value": [ + 232, + 3, + 0, + 0 + ], + "docs": [ + " Max number of items to destroy per `destroy_accounts` and `destroy_approvals` call.", + "", + " Must be configured to result in a weight that makes each call fit in a block." + ] + }, + { + "name": "AssetDeposit", + "ty": 6, + "value": [ + 0, + 0, + 193, + 111, + 242, + 134, + 35, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "docs": [ + " The basic amount of funds that must be reserved for an asset." + ] + }, + { + "name": "AssetAccountDeposit", + "ty": 6, + "value": [ + 0, + 64, + 122, + 16, + 243, + 90, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "docs": [ + " The amount of funds that must be reserved for a non-provider asset account to be", + " maintained." + ] + }, + { + "name": "MetadataDepositBase", + "ty": 6, + "value": [ + 0, + 128, + 198, + 164, + 126, + 141, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "docs": [ + " The basic amount of funds that must be reserved when adding metadata to your asset." + ] + }, + { + "name": "MetadataDepositPerByte", + "ty": 6, + "value": [ + 0, + 64, + 122, + 16, + 243, + 90, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "docs": [ + " The additional funds that must be reserved for the number of bytes you store in your", + " metadata." + ] + }, + { + "name": "ApprovalDeposit", + "ty": 6, + "value": [ + 0, + 64, + 122, + 16, + 243, + 90, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "docs": [ + " The amount of funds that must be reserved when creating a new approval." + ] + }, + { + "name": "StringLimit", + "ty": 4, + "value": [ + 50, + 0, + 0, + 0 + ], + "docs": [ + " The maximum length of a name or symbol stored on-chain." + ] + } + ], + "error": { + "ty": 141 + }, + "index": 9, + "docs": [] + } + ], + "extrinsic": { + "version": 4, + "address_ty": 74, + "call_ty": 71, + "signature_ty": 142, + "extra_ty": 148, + "signed_extensions": [ + { + "identifier": "CheckNonZeroSender", + "ty": 149, + "additional_signed": 32 + }, + { + "identifier": "CheckSpecVersion", + "ty": 150, + "additional_signed": 4 + }, + { + "identifier": "CheckTxVersion", + "ty": 151, + "additional_signed": 4 + }, + { + "identifier": "CheckGenesis", + "ty": 152, + "additional_signed": 12 + }, + { + "identifier": "CheckMortality", + "ty": 153, + "additional_signed": 12 + }, + { + "identifier": "CheckNonce", + "ty": 155, + "additional_signed": 32 + }, + { + "identifier": "CheckWeight", + "ty": 156, + "additional_signed": 32 + }, + { + "identifier": "ChargeTransactionPayment", + "ty": 157, + "additional_signed": 32 + } + ] + }, + "ty": 40, + "apis": [ + { + "name": "Core", + "methods": [ + { + "name": "version", + "inputs": [], + "output": 61, + "docs": [ + " Returns the version of the runtime." + ] + }, + { + "name": "execute_block", + "inputs": [ + { + "name": "block", + "ty": 158 + } + ], + "output": 32, + "docs": [ + " Execute the given block." + ] + }, + { + "name": "initialize_block", + "inputs": [ + { + "name": "header", + "ty": 159 + } + ], + "output": 32, + "docs": [ + " Initialize a block with the given header." + ] + } + ], + "docs": [ + " The `Core` runtime api that every Substrate runtime needs to implement." + ] + }, + { + "name": "Metadata", + "methods": [ + { + "name": "metadata", + "inputs": [], + "output": 162, + "docs": [ + " Returns the metadata of a runtime." + ] + }, + { + "name": "metadata_at_version", + "inputs": [ + { + "name": "version", + "ty": 4 + } + ], + "output": 163, + "docs": [ + " Returns the metadata at a given version.", + "", + " If the given `version` isn't supported, this will return `None`.", + " Use [`Self::metadata_versions`] to find out about supported metadata version of the runtime." + ] + }, + { + "name": "metadata_versions", + "inputs": [], + "output": 164, + "docs": [ + " Returns the supported metadata versions.", + "", + " This can be used to call `metadata_at_version`." + ] + } + ], + "docs": [ + " The `Metadata` api trait that returns metadata for the runtime." + ] + }, + { + "name": "BlockBuilder", + "methods": [ + { + "name": "apply_extrinsic", + "inputs": [ + { + "name": "extrinsic", + "ty": 160 + } + ], + "output": 165, + "docs": [ + " Apply the given extrinsic.", + "", + " Returns an inclusion outcome which specifies if this extrinsic is included in", + " this block or not." + ] + }, + { + "name": "finalize_block", + "inputs": [], + "output": 159, + "docs": [ + " Finish the current block." + ] + }, + { + "name": "inherent_extrinsics", + "inputs": [ + { + "name": "inherent", + "ty": 169 + } + ], + "output": 161, + "docs": [ + " Generate inherent extrinsics. The inherent data will vary from chain to chain." + ] + }, + { + "name": "check_inherents", + "inputs": [ + { + "name": "block", + "ty": 158 + }, + { + "name": "data", + "ty": 169 + } + ], + "output": 173, + "docs": [ + " Check that the inherents are valid. The inherent data will vary from chain to chain." + ] + } + ], + "docs": [ + " The `BlockBuilder` api trait that provides the required functionality for building a block." + ] + }, + { + "name": "TaggedTransactionQueue", + "methods": [ + { + "name": "validate_transaction", + "inputs": [ + { + "name": "source", + "ty": 174 + }, + { + "name": "tx", + "ty": 160 + }, + { + "name": "block_hash", + "ty": 12 + } + ], + "output": 175, + "docs": [ + " Validate the transaction.", + "", + " This method is invoked by the transaction pool to learn details about given transaction.", + " The implementation should make sure to verify the correctness of the transaction", + " against current state. The given `block_hash` corresponds to the hash of the block", + " that is used as current state.", + "", + " Note that this call may be performed by the pool multiple times and transactions", + " might be verified in any possible order." + ] + } + ], + "docs": [ + " The `TaggedTransactionQueue` api trait for interfering with the transaction queue." + ] + }, + { + "name": "OffchainWorkerApi", + "methods": [ + { + "name": "offchain_worker", + "inputs": [ + { + "name": "header", + "ty": 159 + } + ], + "output": 32, + "docs": [ + " Starts the off-chain task for given block header." + ] + } + ], + "docs": [ + " The offchain worker api." + ] + }, + { + "name": "SessionKeys", + "methods": [ + { + "name": "generate_session_keys", + "inputs": [ + { + "name": "seed", + "ty": 177 + } + ], + "output": 13, + "docs": [ + " Generate a set of session keys with optionally using the given seed.", + " The keys should be stored within the keystore exposed via runtime", + " externalities.", + "", + " The seed needs to be a valid `utf8` string.", + "", + " Returns the concatenated SCALE encoded public keys." + ] + }, + { + "name": "decode_session_keys", + "inputs": [ + { + "name": "encoded", + "ty": 13 + } + ], + "output": 178, + "docs": [ + " Decode the given public session keys.", + "", + " Returns the list of public raw public keys + key type." + ] + } + ], + "docs": [ + " Session keys runtime api." + ] + }, + { + "name": "AccountNonceApi", + "methods": [ + { + "name": "account_nonce", + "inputs": [ + { + "name": "account", + "ty": 0 + } + ], + "output": 4, + "docs": [ + " Get current account nonce of given `AccountId`." + ] + } + ], + "docs": [ + " The API to query account nonce." + ] + }, + { + "name": "TransactionPaymentApi", + "methods": [ + { + "name": "query_info", + "inputs": [ + { + "name": "uxt", + "ty": 160 + }, + { + "name": "len", + "ty": 4 + } + ], + "output": 182, + "docs": [] + }, + { + "name": "query_fee_details", + "inputs": [ + { + "name": "uxt", + "ty": 160 + }, + { + "name": "len", + "ty": 4 + } + ], + "output": 183, + "docs": [] + }, + { + "name": "query_weight_to_fee", + "inputs": [ + { + "name": "weight", + "ty": 9 + } + ], + "output": 6, + "docs": [] + }, + { + "name": "query_length_to_fee", + "inputs": [ + { + "name": "length", + "ty": 4 + } + ], + "output": 6, + "docs": [] + } + ], + "docs": [] + }, + { + "name": "TransactionPaymentCallApi", + "methods": [ + { + "name": "query_call_info", + "inputs": [ + { + "name": "call", + "ty": 71 + }, + { + "name": "len", + "ty": 4 + } + ], + "output": 182, + "docs": [ + " Query information of a dispatch class, weight, and fee of a given encoded `Call`." + ] + }, + { + "name": "query_call_fee_details", + "inputs": [ + { + "name": "call", + "ty": 71 + }, + { + "name": "len", + "ty": 4 + } + ], + "output": 183, + "docs": [ + " Query fee details of a given encoded `Call`." + ] + }, + { + "name": "query_weight_to_fee", + "inputs": [ + { + "name": "weight", + "ty": 9 + } + ], + "output": 6, + "docs": [ + " Query the output of the current `WeightToFee` given some input." + ] + }, + { + "name": "query_length_to_fee", + "inputs": [ + { + "name": "length", + "ty": 4 + } + ], + "output": 6, + "docs": [ + " Query the output of the current `LengthToFee` given some input." + ] + } + ], + "docs": [] + }, + { + "name": "ContractsApi", + "methods": [ + { + "name": "call", + "inputs": [ + { + "name": "origin", + "ty": 0 + }, + { + "name": "dest", + "ty": 0 + }, + { + "name": "value", + "ty": 6 + }, + { + "name": "gas_limit", + "ty": 57 + }, + { + "name": "storage_deposit_limit", + "ty": 186 + }, + { + "name": "input_data", + "ty": 13 + } + ], + "output": 187, + "docs": [ + " Perform a call from a specified account to a given contract.", + "", + " See [`crate::Pallet::bare_call`]." + ] + }, + { + "name": "instantiate", + "inputs": [ + { + "name": "origin", + "ty": 0 + }, + { + "name": "value", + "ty": 6 + }, + { + "name": "gas_limit", + "ty": 57 + }, + { + "name": "storage_deposit_limit", + "ty": 186 + }, + { + "name": "code", + "ty": 194 + }, + { + "name": "data", + "ty": 13 + }, + { + "name": "salt", + "ty": 13 + } + ], + "output": 195, + "docs": [ + " Instantiate a new contract.", + "", + " See `[crate::Pallet::bare_instantiate]`." + ] + }, + { + "name": "upload_code", + "inputs": [ + { + "name": "origin", + "ty": 0 + }, + { + "name": "code", + "ty": 13 + }, + { + "name": "storage_deposit_limit", + "ty": 186 + }, + { + "name": "determinism", + "ty": 82 + } + ], + "output": 198, + "docs": [ + " Upload new code without instantiating a contract from it.", + "", + " See [`crate::Pallet::bare_upload_code`]." + ] + }, + { + "name": "get_storage", + "inputs": [ + { + "name": "address", + "ty": 0 + }, + { + "name": "key", + "ty": 13 + } + ], + "output": 200, + "docs": [ + " Query a given storage key in a given contract.", + "", + " Returns `Ok(Some(Vec))` if the storage value exists under the given key in the", + " specified account and `Ok(None)` if it doesn't. If the account specified by the address", + " doesn't exist, or doesn't have a contract then `Err` is returned." + ] + } + ], + "docs": [ + " The API used to dry-run contract interactions." + ] + } + ], + "outer_enums": { + "call_enum_ty": 71, + "event_enum_ty": 20, + "error_enum_ty": 202 + }, + "custom": { + "map": {} + } + } + } +] \ No newline at end of file diff --git a/crates/transcode/src/env_check.rs b/crates/transcode/src/env_check.rs index 1e94910d2..cdd4e910e 100644 --- a/crates/transcode/src/env_check.rs +++ b/crates/transcode/src/env_check.rs @@ -67,6 +67,10 @@ pub(crate) fn resolve_type_definition( .context("Type is not present in registry")?; if tt.type_params.is_empty() { if let TypeDef::Composite(comp) = &tt.type_def { + if comp.fields.len() > 1 || comp.fields.is_empty() { + anyhow::bail!("Composite field has incorrect composite type format") + } + let tt_id = comp .fields .get(0) @@ -151,3 +155,63 @@ fn compare_type( } Ok(type_def == tt_def) } + +#[cfg(test)] +mod tests { + use std::marker::PhantomData; + + use scale::{ + Decode, + Encode, + }; + use scale_info::{TypeInfo, IntoPortable as _, Registry, PortableRegistry}; + + #[derive(Encode, Decode, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub struct AccountId([u8; 32]); + + #[derive(Encode, Decode, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub struct Balance(u128); + + #[derive(Encode, Decode, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub struct Hash([u8; 32]); + + #[derive(Encode, Decode, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub struct Hasher; + + #[derive(Encode, Decode, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub struct Timestamp(u64); + + #[derive(Encode, Decode, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub struct BlockNumber(u32); + + #[derive(Encode, Decode, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub struct EnvironmentType(PhantomData); + + #[derive(Encode, Decode, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub struct Environment { + account_id: EnvironmentType, + balance: EnvironmentType, + hash: EnvironmentType, + hasher: EnvironmentType, + timestamp: EnvironmentType, + block_number: EnvironmentType, + } + + #[test] + fn resolve_works() { + let mut registry = Registry::new(); + let env = Environment::type_info().into_portable(&mut registry); + + let portable: PortableRegistry = registry.into(); + + println!("{:#?}", portable) + } +} From 77954dd67817675ca3ee1da10c21ec03028e3ce1 Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Tue, 24 Oct 2023 14:13:20 +0100 Subject: [PATCH 06/23] test type resolution --- Cargo.lock | 60 +++++++++++++++---------------- crates/transcode/src/env_check.rs | 35 ++++++++++++++---- 2 files changed, 59 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d473cdebd..c7ae4439d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -351,7 +351,7 @@ checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -891,7 +891,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -1298,7 +1298,7 @@ checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -1338,7 +1338,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -1355,7 +1355,7 @@ checksum = "2fa16a70dd58129e4dfffdff535fb1bce66673f7bbeec4a5a1765a504e1ccd84" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -1403,7 +1403,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -1425,7 +1425,7 @@ checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core 0.20.3", "quote", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -1812,7 +1812,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -2287,7 +2287,7 @@ dependencies = [ "quote", "serde", "serde_json", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -2346,7 +2346,7 @@ dependencies = [ "itertools 0.11.0", "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -2361,7 +2361,7 @@ dependencies = [ "parity-scale-codec", "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", "synstructure", ] @@ -2719,7 +2719,7 @@ checksum = "bc28438cad73dcc90ff3466fc329a9252b1b8ba668eb0d5668ba97088cf4eef0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -3185,7 +3185,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -3498,7 +3498,7 @@ checksum = "7f7473c2cfcf90008193dd0e3e16599455cb601a9fce322b5bb55de799664925" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -4110,7 +4110,7 @@ checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -4143,7 +4143,7 @@ checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -4585,7 +4585,7 @@ checksum = "f12dae7cf6c1e825d13ffd4ce16bd9309db7c539929d0302b4443ed451a9f4e5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -4714,7 +4714,7 @@ dependencies = [ "proc-macro-crate 1.3.1", "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -4918,7 +4918,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -5000,7 +5000,7 @@ dependencies = [ "quote", "scale-info", "subxt-metadata", - "syn 2.0.29", + "syn 2.0.38", "thiserror", "tokio", ] @@ -5031,7 +5031,7 @@ dependencies = [ "darling 0.20.3", "proc-macro-error", "subxt-codegen", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -5082,9 +5082,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.29" +version = "2.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a" +checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" dependencies = [ "proc-macro2", "quote", @@ -5099,7 +5099,7 @@ checksum = "285ba80e733fac80aa4270fbcdf83772a79b80aa35c97075320abfee4a915b06" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", "unicode-xid", ] @@ -5190,7 +5190,7 @@ checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -5299,7 +5299,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -5439,7 +5439,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] @@ -5756,7 +5756,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", "wasm-bindgen-shared", ] @@ -5778,7 +5778,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -6260,7 +6260,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.38", ] [[package]] diff --git a/crates/transcode/src/env_check.rs b/crates/transcode/src/env_check.rs index cdd4e910e..7c04946bc 100644 --- a/crates/transcode/src/env_check.rs +++ b/crates/transcode/src/env_check.rs @@ -158,13 +158,21 @@ fn compare_type( #[cfg(test)] mod tests { - use std::marker::PhantomData; - use scale::{ Decode, Encode, }; - use scale_info::{TypeInfo, IntoPortable as _, Registry, PortableRegistry}; + use scale_info::{ + form::PortableForm, + MetaType, + PortableRegistry, + Registry, + TypeDef, + TypeInfo, + }; + use std::marker::PhantomData; + + use crate::env_check::resolve_type_definition; #[derive(Encode, Decode, TypeInfo)] #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] @@ -189,7 +197,6 @@ mod tests { #[derive(Encode, Decode, TypeInfo)] #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] pub struct BlockNumber(u32); - #[derive(Encode, Decode, TypeInfo)] #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] pub struct EnvironmentType(PhantomData); @@ -208,10 +215,26 @@ mod tests { #[test] fn resolve_works() { let mut registry = Registry::new(); - let env = Environment::type_info().into_portable(&mut registry); + registry.register_type(&MetaType::new::()); + let u64_typedef = + TypeDef::::Primitive(scale_info::TypeDefPrimitive::U64); let portable: PortableRegistry = registry.into(); + let resolved_type = resolve_type_definition(&portable, 12); + assert!(resolved_type.is_ok()); + let resolved_type = resolved_type.unwrap(); - println!("{:#?}", portable) + println!("{}", serde_json::to_string_pretty(&portable).unwrap()); + assert_eq!(u64_typedef, resolved_type); + } + + #[test] + #[should_panic(expected = "Type is not present in registry")] + fn resolve_unknown_type_fails() { + let mut registry = Registry::new(); + registry.register_type(&MetaType::new::()); + + let portable: PortableRegistry = registry.into(); + let _ = resolve_type_definition(&portable, 18).unwrap(); } } From 677645f327bda4ffc12221b7662a984b2a4b9708 Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Tue, 24 Oct 2023 14:18:47 +0100 Subject: [PATCH 07/23] check for invalid composite types --- crates/transcode/src/env_check.rs | 34 ++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/crates/transcode/src/env_check.rs b/crates/transcode/src/env_check.rs index 7c04946bc..cb61c1f01 100644 --- a/crates/transcode/src/env_check.rs +++ b/crates/transcode/src/env_check.rs @@ -197,6 +197,18 @@ mod tests { #[derive(Encode, Decode, TypeInfo)] #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] pub struct BlockNumber(u32); + + #[derive(Encode, Decode, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub struct SomeStruct { + one: u32, + two: u64, + } + + #[derive(Encode, Decode, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub struct CompositeBlockNumber(SomeStruct); + #[derive(Encode, Decode, TypeInfo)] #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] pub struct EnvironmentType(PhantomData); @@ -212,6 +224,17 @@ mod tests { block_number: EnvironmentType, } + #[derive(Encode, Decode, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub struct InvalidEnvironment { + account_id: EnvironmentType, + balance: EnvironmentType, + hash: EnvironmentType, + hasher: EnvironmentType, + timestamp: EnvironmentType, + block_number: EnvironmentType, + } + #[test] fn resolve_works() { let mut registry = Registry::new(); @@ -224,7 +247,6 @@ mod tests { assert!(resolved_type.is_ok()); let resolved_type = resolved_type.unwrap(); - println!("{}", serde_json::to_string_pretty(&portable).unwrap()); assert_eq!(u64_typedef, resolved_type); } @@ -237,4 +259,14 @@ mod tests { let portable: PortableRegistry = registry.into(); let _ = resolve_type_definition(&portable, 18).unwrap(); } + + #[test] + #[should_panic(expected = "Composite field has incorrect composite type format")] + fn composite_type_fails_to_resolve() { + let mut registry = Registry::new(); + registry.register_type(&MetaType::new::()); + + let portable: PortableRegistry = registry.into(); + let _ = resolve_type_definition(&portable, 15).unwrap(); + } } From 55dfa51d50dc1b3497a89a94b976ab959163a70b Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Tue, 24 Oct 2023 15:13:02 +0100 Subject: [PATCH 08/23] test the env match between contract and node --- crates/transcode/src/env_check.rs | 127 +++++++++++++++++++++++++++++- 1 file changed, 124 insertions(+), 3 deletions(-) diff --git a/crates/transcode/src/env_check.rs b/crates/transcode/src/env_check.rs index cb61c1f01..6bb1f468e 100644 --- a/crates/transcode/src/env_check.rs +++ b/crates/transcode/src/env_check.rs @@ -45,10 +45,15 @@ impl From for EnvCheckError { } fn get_node_env_fields(registry: &PortableRegistry) -> Result>> { + let segments: Vec<&str> = if cfg!(test) { + vec!["contract_transcode", "env_check", "tests", "Environment"] + } else { + vec!["pallet_contracts", "Environment"] + }; let env_type = registry .types .iter() - .find(|t| t.ty.path.segments == ["pallet_contracts", "Environment"]) + .find(|t| t.ty.path.segments == segments) .context("The node does not contain `Environment` type. Are you using correct `pallet-contracts` version?")?; if let TypeDef::Composite(composite) = &env_type.ty.type_def { @@ -158,12 +163,30 @@ fn compare_type( #[cfg(test)] mod tests { + use ink_metadata::{ + layout::{ + Layout, + LayoutKey, + LeafLayout, + }, + ConstructorSpec, + ContractSpec, + EnvironmentSpec, + InkProject, + MessageParamSpec, + MessageSpec, + ReturnTypeSpec, + TypeSpec, + }; use scale::{ Decode, Encode, }; use scale_info::{ - form::PortableForm, + form::{ + MetaForm, + PortableForm, + }, MetaType, PortableRegistry, Registry, @@ -172,7 +195,10 @@ mod tests { }; use std::marker::PhantomData; - use crate::env_check::resolve_type_definition; + use crate::{ + compare_node_env_with_contract, + env_check::resolve_type_definition, + }; #[derive(Encode, Decode, TypeInfo)] #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] @@ -269,4 +295,99 @@ mod tests { let portable: PortableRegistry = registry.into(); let _ = resolve_type_definition(&portable, 15).unwrap(); } + + fn generate_contract_ink_project() -> InkProject { + // let _ = generate_metadata(); + let leaf = LeafLayout::from_key::(LayoutKey::new(0_u8)); + let layout = Layout::Leaf(leaf); + #[cfg_attr(feature = "std", derive(scale_info::TypeInfo))] + pub enum NoChainExtension {} + + type ChainExtension = NoChainExtension; + const MAX_EVENT_TOPICS: usize = 4; + const BUFFER_SIZE: usize = 1 << 14; + + // given + let contract: ContractSpec = ContractSpec::new() + .constructors(vec![ConstructorSpec::from_label("new") + .selector([94u8, 189u8, 136u8, 214u8]) + .payable(true) + .args(vec![MessageParamSpec::new("init_value") + .of_type(TypeSpec::with_name_segs::( + vec!["i32"].into_iter().map(AsRef::as_ref), + )) + .done()]) + .returns(ReturnTypeSpec::new(None)) + .docs(Vec::new()) + .done()]) + .messages(vec![MessageSpec::from_label("get") + .selector([37u8, 68u8, 74u8, 254u8]) + .mutates(false) + .payable(false) + .args(Vec::new()) + .returns(ReturnTypeSpec::new(TypeSpec::with_name_segs::( + vec!["i32"].into_iter().map(AsRef::as_ref), + ))) + .done()]) + .events(Vec::new()) + .environment( + EnvironmentSpec::new() + .account_id(TypeSpec::with_name_segs::( + ::core::iter::Iterator::map( + ::core::iter::IntoIterator::into_iter(["AccountId"]), + ::core::convert::AsRef::as_ref, + ), + )) + .balance(TypeSpec::with_name_segs::( + ::core::iter::Iterator::map( + ::core::iter::IntoIterator::into_iter(["Balance"]), + ::core::convert::AsRef::as_ref, + ), + )) + .hash(TypeSpec::with_name_segs::( + ::core::iter::Iterator::map( + ::core::iter::IntoIterator::into_iter(["Hash"]), + ::core::convert::AsRef::as_ref, + ), + )) + .timestamp(TypeSpec::with_name_segs::( + ::core::iter::Iterator::map( + ::core::iter::IntoIterator::into_iter(["Timestamp"]), + ::core::convert::AsRef::as_ref, + ), + )) + .block_number(TypeSpec::with_name_segs::( + ::core::iter::Iterator::map( + ::core::iter::IntoIterator::into_iter(["BlockNumber"]), + ::core::convert::AsRef::as_ref, + ), + )) + .chain_extension(TypeSpec::with_name_segs::( + ::core::iter::Iterator::map( + ::core::iter::IntoIterator::into_iter(["ChainExtension"]), + ::core::convert::AsRef::as_ref, + ), + )) + .max_event_topics(MAX_EVENT_TOPICS) + .static_buffer_size(BUFFER_SIZE) + .done(), + ) + .done(); + + InkProject::new(layout, contract) + } + + #[test] + fn contract_and_node_match() { + let mut registry = Registry::new(); + registry.register_type(&MetaType::new::()); + + let portable: PortableRegistry = registry.into(); + + let ink_project = generate_contract_ink_project(); + // println!("{}", serde_json::to_string_pretty(&portable).unwrap()); + + let valid = compare_node_env_with_contract(&portable, &ink_project); + assert!(valid.is_ok(), "{}", valid.err().unwrap()) + } } From c92b839a2c3df0f17f467d3e80cf85ae659fdb65 Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Tue, 24 Oct 2023 15:13:23 +0100 Subject: [PATCH 09/23] remove comment --- crates/transcode/src/env_check.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/transcode/src/env_check.rs b/crates/transcode/src/env_check.rs index 6bb1f468e..f34bdf072 100644 --- a/crates/transcode/src/env_check.rs +++ b/crates/transcode/src/env_check.rs @@ -385,7 +385,6 @@ mod tests { let portable: PortableRegistry = registry.into(); let ink_project = generate_contract_ink_project(); - // println!("{}", serde_json::to_string_pretty(&portable).unwrap()); let valid = compare_node_env_with_contract(&portable, &ink_project); assert!(valid.is_ok(), "{}", valid.err().unwrap()) From 9df081145e7c0cdbce11336faed3d9a333abacdc Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Tue, 24 Oct 2023 15:20:35 +0100 Subject: [PATCH 10/23] test mismatch --- crates/transcode/src/env_check.rs | 56 ++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 13 deletions(-) diff --git a/crates/transcode/src/env_check.rs b/crates/transcode/src/env_check.rs index f34bdf072..a5b69c0c3 100644 --- a/crates/transcode/src/env_check.rs +++ b/crates/transcode/src/env_check.rs @@ -11,7 +11,7 @@ use anyhow::{ Result, }; -#[derive(Debug, Clone)] +#[derive(Debug, Clone, PartialEq)] pub enum EnvCheckError { CheckFailed(String), RegistryError(String), @@ -183,10 +183,7 @@ mod tests { Encode, }; use scale_info::{ - form::{ - MetaForm, - PortableForm, - }, + form::PortableForm, MetaType, PortableRegistry, Registry, @@ -197,7 +194,10 @@ mod tests { use crate::{ compare_node_env_with_contract, - env_check::resolve_type_definition, + env_check::{ + resolve_type_definition, + EnvCheckError, + }, }; #[derive(Encode, Decode, TypeInfo)] @@ -296,7 +296,14 @@ mod tests { let _ = resolve_type_definition(&portable, 15).unwrap(); } - fn generate_contract_ink_project() -> InkProject { + fn generate_contract_ink_project() -> InkProject + where + A: TypeInfo + 'static, + BA: TypeInfo + 'static, + BN: TypeInfo + 'static, + H: TypeInfo + 'static, + T: TypeInfo + 'static, + { // let _ = generate_metadata(); let leaf = LeafLayout::from_key::(LayoutKey::new(0_u8)); let layout = Layout::Leaf(leaf); @@ -332,31 +339,31 @@ mod tests { .events(Vec::new()) .environment( EnvironmentSpec::new() - .account_id(TypeSpec::with_name_segs::( + .account_id(TypeSpec::with_name_segs::( ::core::iter::Iterator::map( ::core::iter::IntoIterator::into_iter(["AccountId"]), ::core::convert::AsRef::as_ref, ), )) - .balance(TypeSpec::with_name_segs::( + .balance(TypeSpec::with_name_segs::( ::core::iter::Iterator::map( ::core::iter::IntoIterator::into_iter(["Balance"]), ::core::convert::AsRef::as_ref, ), )) - .hash(TypeSpec::with_name_segs::( + .hash(TypeSpec::with_name_segs::( ::core::iter::Iterator::map( ::core::iter::IntoIterator::into_iter(["Hash"]), ::core::convert::AsRef::as_ref, ), )) - .timestamp(TypeSpec::with_name_segs::( + .timestamp(TypeSpec::with_name_segs::( ::core::iter::Iterator::map( ::core::iter::IntoIterator::into_iter(["Timestamp"]), ::core::convert::AsRef::as_ref, ), )) - .block_number(TypeSpec::with_name_segs::( + .block_number(TypeSpec::with_name_segs::( ::core::iter::Iterator::map( ::core::iter::IntoIterator::into_iter(["BlockNumber"]), ::core::convert::AsRef::as_ref, @@ -384,9 +391,32 @@ mod tests { let portable: PortableRegistry = registry.into(); - let ink_project = generate_contract_ink_project(); + let ink_project = generate_contract_ink_project::< + AccountId, + Balance, + BlockNumber, + Hash, + Timestamp, + >(); let valid = compare_node_env_with_contract(&portable, &ink_project); assert!(valid.is_ok(), "{}", valid.err().unwrap()) } + + #[test] + fn contract_and_node_mismatch() { + let mut registry = Registry::new(); + registry.register_type(&MetaType::new::()); + + let portable: PortableRegistry = registry.into(); + + let ink_project = + generate_contract_ink_project::(); + + let result = compare_node_env_with_contract(&portable, &ink_project); + assert_eq!( + result.err(), + Some(EnvCheckError::CheckFailed("timestamp".to_string())) + ) + } } From c28d72ebd7ebb24cb6e37100c5cb88cf23e3226a Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Tue, 24 Oct 2023 15:21:28 +0100 Subject: [PATCH 11/23] remove json file --- .../src/runtime_api/invalid_metadata.json | 14713 ---------------- 1 file changed, 14713 deletions(-) delete mode 100644 crates/extrinsics/src/runtime_api/invalid_metadata.json diff --git a/crates/extrinsics/src/runtime_api/invalid_metadata.json b/crates/extrinsics/src/runtime_api/invalid_metadata.json deleted file mode 100644 index 8531d48d8..000000000 --- a/crates/extrinsics/src/runtime_api/invalid_metadata.json +++ /dev/null @@ -1,14713 +0,0 @@ -[ - 1635018093, - { - "V15": { - "types": { - "types": [ - { - "id": 0, - "type": { - "path": [ - "sp_core", - "crypto", - "AccountId32" - ], - "def": { - "composite": { - "fields": [ - { - "type": 1, - "typeName": "[u8; 32]" - } - ] - } - } - } - }, - { - "id": 1, - "type": { - "def": { - "array": { - "len": 32, - "type": 2 - } - } - } - }, - { - "id": 2, - "type": { - "def": { - "primitive": "u8" - } - } - }, - { - "id": 3, - "type": { - "path": [ - "frame_system", - "AccountInfo" - ], - "params": [ - { - "name": "Nonce", - "type": 4 - }, - { - "name": "AccountData", - "type": 5 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "nonce", - "type": 4, - "typeName": "Nonce" - }, - { - "name": "consumers", - "type": 4, - "typeName": "RefCount" - }, - { - "name": "providers", - "type": 4, - "typeName": "RefCount" - }, - { - "name": "sufficients", - "type": 4, - "typeName": "RefCount" - }, - { - "name": "data", - "type": 5, - "typeName": "AccountData" - } - ] - } - } - } - }, - { - "id": 4, - "type": { - "def": { - "primitive": "u32" - } - } - }, - { - "id": 5, - "type": { - "path": [ - "pallet_balances", - "types", - "AccountData" - ], - "params": [ - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "free", - "type": 6, - "typeName": "Balance" - }, - { - "name": "reserved", - "type": 6, - "typeName": "Balance" - }, - { - "name": "frozen", - "type": 6, - "typeName": "Balance" - }, - { - "name": "flags", - "type": 7, - "typeName": "ExtraFlags" - } - ] - } - } - } - }, - { - "id": 6, - "type": { - "def": { - "primitive": "u128" - } - } - }, - { - "id": 7, - "type": { - "path": [ - "pallet_balances", - "types", - "ExtraFlags" - ], - "def": { - "composite": { - "fields": [ - { - "type": 6, - "typeName": "u128" - } - ] - } - } - } - }, - { - "id": 8, - "type": { - "path": [ - "frame_support", - "dispatch", - "PerDispatchClass" - ], - "params": [ - { - "name": "T", - "type": 9 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "normal", - "type": 9, - "typeName": "T" - }, - { - "name": "operational", - "type": 9, - "typeName": "T" - }, - { - "name": "mandatory", - "type": 9, - "typeName": "T" - } - ] - } - } - } - }, - { - "id": 9, - "type": { - "path": [ - "sp_weights", - "weight_v2", - "Weight" - ], - "def": { - "composite": { - "fields": [ - { - "name": "ref_time", - "type": 10, - "typeName": "u64" - }, - { - "name": "proof_size", - "type": 10, - "typeName": "u64" - } - ] - } - } - } - }, - { - "id": 10, - "type": { - "def": { - "compact": { - "type": 11 - } - } - } - }, - { - "id": 11, - "type": { - "def": { - "primitive": "u64" - } - } - }, - { - "id": 12, - "type": { - "path": [ - "primitive_types", - "H256" - ], - "def": { - "composite": { - "fields": [ - { - "type": 1, - "typeName": "[u8; 32]" - } - ] - } - } - } - }, - { - "id": 13, - "type": { - "def": { - "sequence": { - "type": 2 - } - } - } - }, - { - "id": 14, - "type": { - "path": [ - "sp_runtime", - "generic", - "digest", - "Digest" - ], - "def": { - "composite": { - "fields": [ - { - "name": "logs", - "type": 15, - "typeName": "Vec" - } - ] - } - } - } - }, - { - "id": 15, - "type": { - "def": { - "sequence": { - "type": 16 - } - } - } - }, - { - "id": 16, - "type": { - "path": [ - "sp_runtime", - "generic", - "digest", - "DigestItem" - ], - "def": { - "variant": { - "variants": [ - { - "name": "PreRuntime", - "fields": [ - { - "type": 17, - "typeName": "ConsensusEngineId" - }, - { - "type": 13, - "typeName": "Vec" - } - ], - "index": 6 - }, - { - "name": "Consensus", - "fields": [ - { - "type": 17, - "typeName": "ConsensusEngineId" - }, - { - "type": 13, - "typeName": "Vec" - } - ], - "index": 4 - }, - { - "name": "Seal", - "fields": [ - { - "type": 17, - "typeName": "ConsensusEngineId" - }, - { - "type": 13, - "typeName": "Vec" - } - ], - "index": 5 - }, - { - "name": "Other", - "fields": [ - { - "type": 13, - "typeName": "Vec" - } - ], - "index": 0 - }, - { - "name": "RuntimeEnvironmentUpdated", - "index": 8 - } - ] - } - } - } - }, - { - "id": 17, - "type": { - "def": { - "array": { - "len": 4, - "type": 2 - } - } - } - }, - { - "id": 18, - "type": { - "def": { - "sequence": { - "type": 19 - } - } - } - }, - { - "id": 19, - "type": { - "path": [ - "frame_system", - "EventRecord" - ], - "params": [ - { - "name": "E", - "type": 20 - }, - { - "name": "T", - "type": 12 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "phase", - "type": 43, - "typeName": "Phase" - }, - { - "name": "event", - "type": 20, - "typeName": "E" - }, - { - "name": "topics", - "type": 44, - "typeName": "Vec" - } - ] - } - } - } - }, - { - "id": 20, - "type": { - "path": [ - "contracts_node_runtime", - "RuntimeEvent" - ], - "def": { - "variant": { - "variants": [ - { - "name": "System", - "fields": [ - { - "type": 21, - "typeName": "frame_system::Event" - } - ], - "index": 0 - }, - { - "name": "Utility", - "fields": [ - { - "type": 30, - "typeName": "pallet_utility::Event" - } - ], - "index": 2 - }, - { - "name": "Balances", - "fields": [ - { - "type": 33, - "typeName": "pallet_balances::Event" - } - ], - "index": 4 - }, - { - "name": "TransactionPayment", - "fields": [ - { - "type": 35, - "typeName": "pallet_transaction_payment::Event" - } - ], - "index": 6 - }, - { - "name": "Sudo", - "fields": [ - { - "type": 36, - "typeName": "pallet_sudo::Event" - } - ], - "index": 7 - }, - { - "name": "Contracts", - "fields": [ - { - "type": 38, - "typeName": "pallet_contracts::Event" - } - ], - "index": 8 - }, - { - "name": "Assets", - "fields": [ - { - "type": 41, - "typeName": "pallet_assets::Event" - } - ], - "index": 9 - } - ] - } - } - } - }, - { - "id": 21, - "type": { - "path": [ - "frame_system", - "pallet", - "Event" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "ExtrinsicSuccess", - "fields": [ - { - "name": "dispatch_info", - "type": 22, - "typeName": "DispatchInfo" - } - ], - "index": 0, - "docs": [ - "An extrinsic completed successfully." - ] - }, - { - "name": "ExtrinsicFailed", - "fields": [ - { - "name": "dispatch_error", - "type": 25, - "typeName": "DispatchError" - }, - { - "name": "dispatch_info", - "type": 22, - "typeName": "DispatchInfo" - } - ], - "index": 1, - "docs": [ - "An extrinsic failed." - ] - }, - { - "name": "CodeUpdated", - "index": 2, - "docs": [ - "`:code` was updated." - ] - }, - { - "name": "NewAccount", - "fields": [ - { - "name": "account", - "type": 0, - "typeName": "T::AccountId" - } - ], - "index": 3, - "docs": [ - "A new account was created." - ] - }, - { - "name": "KilledAccount", - "fields": [ - { - "name": "account", - "type": 0, - "typeName": "T::AccountId" - } - ], - "index": 4, - "docs": [ - "An account was reaped." - ] - }, - { - "name": "Remarked", - "fields": [ - { - "name": "sender", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "hash", - "type": 12, - "typeName": "T::Hash" - } - ], - "index": 5, - "docs": [ - "On on-chain remark happened." - ] - } - ] - } - }, - "docs": [ - "Event for the System pallet." - ] - } - }, - { - "id": 22, - "type": { - "path": [ - "frame_support", - "dispatch", - "DispatchInfo" - ], - "def": { - "composite": { - "fields": [ - { - "name": "weight", - "type": 9, - "typeName": "Weight" - }, - { - "name": "class", - "type": 23, - "typeName": "DispatchClass" - }, - { - "name": "pays_fee", - "type": 24, - "typeName": "Pays" - } - ] - } - } - } - }, - { - "id": 23, - "type": { - "path": [ - "frame_support", - "dispatch", - "DispatchClass" - ], - "def": { - "variant": { - "variants": [ - { - "name": "Normal", - "index": 0 - }, - { - "name": "Operational", - "index": 1 - }, - { - "name": "Mandatory", - "index": 2 - } - ] - } - } - } - }, - { - "id": 24, - "type": { - "path": [ - "frame_support", - "dispatch", - "Pays" - ], - "def": { - "variant": { - "variants": [ - { - "name": "Yes", - "index": 0 - }, - { - "name": "No", - "index": 1 - } - ] - } - } - } - }, - { - "id": 25, - "type": { - "path": [ - "sp_runtime", - "DispatchError" - ], - "def": { - "variant": { - "variants": [ - { - "name": "Other", - "index": 0 - }, - { - "name": "CannotLookup", - "index": 1 - }, - { - "name": "BadOrigin", - "index": 2 - }, - { - "name": "Module", - "fields": [ - { - "type": 26, - "typeName": "ModuleError" - } - ], - "index": 3 - }, - { - "name": "ConsumerRemaining", - "index": 4 - }, - { - "name": "NoProviders", - "index": 5 - }, - { - "name": "TooManyConsumers", - "index": 6 - }, - { - "name": "Token", - "fields": [ - { - "type": 27, - "typeName": "TokenError" - } - ], - "index": 7 - }, - { - "name": "Arithmetic", - "fields": [ - { - "type": 28, - "typeName": "ArithmeticError" - } - ], - "index": 8 - }, - { - "name": "Transactional", - "fields": [ - { - "type": 29, - "typeName": "TransactionalError" - } - ], - "index": 9 - }, - { - "name": "Exhausted", - "index": 10 - }, - { - "name": "Corruption", - "index": 11 - }, - { - "name": "Unavailable", - "index": 12 - }, - { - "name": "RootNotAllowed", - "index": 13 - } - ] - } - } - } - }, - { - "id": 26, - "type": { - "path": [ - "sp_runtime", - "ModuleError" - ], - "def": { - "composite": { - "fields": [ - { - "name": "index", - "type": 2, - "typeName": "u8" - }, - { - "name": "error", - "type": 17, - "typeName": "[u8; MAX_MODULE_ERROR_ENCODED_SIZE]" - } - ] - } - } - } - }, - { - "id": 27, - "type": { - "path": [ - "sp_runtime", - "TokenError" - ], - "def": { - "variant": { - "variants": [ - { - "name": "FundsUnavailable", - "index": 0 - }, - { - "name": "OnlyProvider", - "index": 1 - }, - { - "name": "BelowMinimum", - "index": 2 - }, - { - "name": "CannotCreate", - "index": 3 - }, - { - "name": "UnknownAsset", - "index": 4 - }, - { - "name": "Frozen", - "index": 5 - }, - { - "name": "Unsupported", - "index": 6 - }, - { - "name": "CannotCreateHold", - "index": 7 - }, - { - "name": "NotExpendable", - "index": 8 - }, - { - "name": "Blocked", - "index": 9 - } - ] - } - } - } - }, - { - "id": 28, - "type": { - "path": [ - "sp_arithmetic", - "ArithmeticError" - ], - "def": { - "variant": { - "variants": [ - { - "name": "Underflow", - "index": 0 - }, - { - "name": "Overflow", - "index": 1 - }, - { - "name": "DivisionByZero", - "index": 2 - } - ] - } - } - } - }, - { - "id": 29, - "type": { - "path": [ - "sp_runtime", - "TransactionalError" - ], - "def": { - "variant": { - "variants": [ - { - "name": "LimitReached", - "index": 0 - }, - { - "name": "NoLayer", - "index": 1 - } - ] - } - } - } - }, - { - "id": 30, - "type": { - "path": [ - "pallet_utility", - "pallet", - "Event" - ], - "def": { - "variant": { - "variants": [ - { - "name": "BatchInterrupted", - "fields": [ - { - "name": "index", - "type": 4, - "typeName": "u32" - }, - { - "name": "error", - "type": 25, - "typeName": "DispatchError" - } - ], - "index": 0, - "docs": [ - "Batch of dispatches did not complete fully. Index of first failing dispatch given, as", - "well as the error." - ] - }, - { - "name": "BatchCompleted", - "index": 1, - "docs": [ - "Batch of dispatches completed fully with no error." - ] - }, - { - "name": "BatchCompletedWithErrors", - "index": 2, - "docs": [ - "Batch of dispatches completed but has errors." - ] - }, - { - "name": "ItemCompleted", - "index": 3, - "docs": [ - "A single item within a Batch of dispatches has completed with no error." - ] - }, - { - "name": "ItemFailed", - "fields": [ - { - "name": "error", - "type": 25, - "typeName": "DispatchError" - } - ], - "index": 4, - "docs": [ - "A single item within a Batch of dispatches has completed with error." - ] - }, - { - "name": "DispatchedAs", - "fields": [ - { - "name": "result", - "type": 31, - "typeName": "DispatchResult" - } - ], - "index": 5, - "docs": [ - "A call was dispatched." - ] - } - ] - } - }, - "docs": [ - "The `Event` enum of this pallet" - ] - } - }, - { - "id": 31, - "type": { - "path": [ - "Result" - ], - "params": [ - { - "name": "T", - "type": 32 - }, - { - "name": "E", - "type": 25 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Ok", - "fields": [ - { - "type": 32 - } - ], - "index": 0 - }, - { - "name": "Err", - "fields": [ - { - "type": 25 - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 32, - "type": { - "def": { - "tuple": [] - } - } - }, - { - "id": 33, - "type": { - "path": [ - "pallet_balances", - "pallet", - "Event" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Endowed", - "fields": [ - { - "name": "account", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "free_balance", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 0, - "docs": [ - "An account was created with some free balance." - ] - }, - { - "name": "DustLost", - "fields": [ - { - "name": "account", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 1, - "docs": [ - "An account was removed whose balance was non-zero but below ExistentialDeposit,", - "resulting in an outright loss." - ] - }, - { - "name": "Transfer", - "fields": [ - { - "name": "from", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "to", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 2, - "docs": [ - "Transfer succeeded." - ] - }, - { - "name": "BalanceSet", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "free", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 3, - "docs": [ - "A balance was set by root." - ] - }, - { - "name": "Reserved", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 4, - "docs": [ - "Some balance was reserved (moved from free to reserved)." - ] - }, - { - "name": "Unreserved", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 5, - "docs": [ - "Some balance was unreserved (moved from reserved to free)." - ] - }, - { - "name": "ReserveRepatriated", - "fields": [ - { - "name": "from", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "to", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - }, - { - "name": "destination_status", - "type": 34, - "typeName": "Status" - } - ], - "index": 6, - "docs": [ - "Some balance was moved from the reserve of the first account to the second account.", - "Final argument indicates the destination balance type." - ] - }, - { - "name": "Deposit", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 7, - "docs": [ - "Some amount was deposited (e.g. for transaction fees)." - ] - }, - { - "name": "Withdraw", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 8, - "docs": [ - "Some amount was withdrawn from the account (e.g. for transaction fees)." - ] - }, - { - "name": "Slashed", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 9, - "docs": [ - "Some amount was removed from the account (e.g. for misbehavior)." - ] - }, - { - "name": "Minted", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 10, - "docs": [ - "Some amount was minted into an account." - ] - }, - { - "name": "Burned", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 11, - "docs": [ - "Some amount was burned from an account." - ] - }, - { - "name": "Suspended", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 12, - "docs": [ - "Some amount was suspended from an account (it can be restored later)." - ] - }, - { - "name": "Restored", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 13, - "docs": [ - "Some amount was restored into an account." - ] - }, - { - "name": "Upgraded", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId" - } - ], - "index": 14, - "docs": [ - "An account was upgraded." - ] - }, - { - "name": "Issued", - "fields": [ - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 15, - "docs": [ - "Total issuance was increased by `amount`, creating a credit to be balanced." - ] - }, - { - "name": "Rescinded", - "fields": [ - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 16, - "docs": [ - "Total issuance was decreased by `amount`, creating a debt to be balanced." - ] - }, - { - "name": "Locked", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 17, - "docs": [ - "Some balance was locked." - ] - }, - { - "name": "Unlocked", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 18, - "docs": [ - "Some balance was unlocked." - ] - }, - { - "name": "Frozen", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 19, - "docs": [ - "Some balance was frozen." - ] - }, - { - "name": "Thawed", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 20, - "docs": [ - "Some balance was thawed." - ] - } - ] - } - }, - "docs": [ - "The `Event` enum of this pallet" - ] - } - }, - { - "id": 34, - "type": { - "path": [ - "frame_support", - "traits", - "tokens", - "misc", - "BalanceStatus" - ], - "def": { - "variant": { - "variants": [ - { - "name": "Free", - "index": 0 - }, - { - "name": "Reserved", - "index": 1 - } - ] - } - } - } - }, - { - "id": 35, - "type": { - "path": [ - "pallet_transaction_payment", - "pallet", - "Event" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "TransactionFeePaid", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "actual_fee", - "type": 6, - "typeName": "BalanceOf" - }, - { - "name": "tip", - "type": 6, - "typeName": "BalanceOf" - } - ], - "index": 0, - "docs": [ - "A transaction fee `actual_fee`, of which `tip` was added to the minimum inclusion fee,", - "has been paid by `who`." - ] - } - ] - } - }, - "docs": [ - "The `Event` enum of this pallet" - ] - } - }, - { - "id": 36, - "type": { - "path": [ - "pallet_sudo", - "pallet", - "Event" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Sudid", - "fields": [ - { - "name": "sudo_result", - "type": 31, - "typeName": "DispatchResult", - "docs": [ - "The result of the call made by the sudo user." - ] - } - ], - "index": 0, - "docs": [ - "A sudo call just took place." - ] - }, - { - "name": "KeyChanged", - "fields": [ - { - "name": "old_sudoer", - "type": 37, - "typeName": "Option", - "docs": [ - "The old sudo key if one was previously set." - ] - } - ], - "index": 1, - "docs": [ - "The sudo key has been updated." - ] - }, - { - "name": "SudoAsDone", - "fields": [ - { - "name": "sudo_result", - "type": 31, - "typeName": "DispatchResult", - "docs": [ - "The result of the call made by the sudo user." - ] - } - ], - "index": 2, - "docs": [ - "A [sudo_as](Pallet::sudo_as) call just took place." - ] - } - ] - } - }, - "docs": [ - "The `Event` enum of this pallet" - ] - } - }, - { - "id": 37, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 0 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "index": 0 - }, - { - "name": "Some", - "fields": [ - { - "type": 0 - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 38, - "type": { - "path": [ - "pallet_contracts", - "pallet", - "Event" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Instantiated", - "fields": [ - { - "name": "deployer", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "contract", - "type": 0, - "typeName": "T::AccountId" - } - ], - "index": 0, - "docs": [ - "Contract deployed by address at the specified address." - ] - }, - { - "name": "Terminated", - "fields": [ - { - "name": "contract", - "type": 0, - "typeName": "T::AccountId", - "docs": [ - "The contract that was terminated." - ] - }, - { - "name": "beneficiary", - "type": 0, - "typeName": "T::AccountId", - "docs": [ - "The account that received the contracts remaining balance" - ] - } - ], - "index": 1, - "docs": [ - "Contract has been removed.", - "", - "# Note", - "", - "The only way for a contract to be removed and emitting this event is by calling", - "`seal_terminate`." - ] - }, - { - "name": "CodeStored", - "fields": [ - { - "name": "code_hash", - "type": 12, - "typeName": "T::Hash" - }, - { - "name": "deposit_held", - "type": 6, - "typeName": "BalanceOf" - }, - { - "name": "uploader", - "type": 0, - "typeName": "T::AccountId" - } - ], - "index": 2, - "docs": [ - "Code with the specified hash has been stored." - ] - }, - { - "name": "ContractEmitted", - "fields": [ - { - "name": "contract", - "type": 0, - "typeName": "T::AccountId", - "docs": [ - "The contract that emitted the event." - ] - }, - { - "name": "data", - "type": 13, - "typeName": "Vec", - "docs": [ - "Data supplied by the contract. Metadata generated during contract compilation", - "is needed to decode it." - ] - } - ], - "index": 3, - "docs": [ - "A custom event emitted by the contract." - ] - }, - { - "name": "CodeRemoved", - "fields": [ - { - "name": "code_hash", - "type": 12, - "typeName": "T::Hash" - }, - { - "name": "deposit_released", - "type": 6, - "typeName": "BalanceOf" - }, - { - "name": "remover", - "type": 0, - "typeName": "T::AccountId" - } - ], - "index": 4, - "docs": [ - "A code with the specified hash was removed." - ] - }, - { - "name": "ContractCodeUpdated", - "fields": [ - { - "name": "contract", - "type": 0, - "typeName": "T::AccountId", - "docs": [ - "The contract that has been updated." - ] - }, - { - "name": "new_code_hash", - "type": 12, - "typeName": "T::Hash", - "docs": [ - "New code hash that was set for the contract." - ] - }, - { - "name": "old_code_hash", - "type": 12, - "typeName": "T::Hash", - "docs": [ - "Previous code hash of the contract." - ] - } - ], - "index": 5, - "docs": [ - "A contract's code was updated." - ] - }, - { - "name": "Called", - "fields": [ - { - "name": "caller", - "type": 39, - "typeName": "Origin", - "docs": [ - "The caller of the `contract`." - ] - }, - { - "name": "contract", - "type": 0, - "typeName": "T::AccountId", - "docs": [ - "The contract that was called." - ] - } - ], - "index": 6, - "docs": [ - "A contract was called either by a plain account or another contract.", - "", - "# Note", - "", - "Please keep in mind that like all events this is only emitted for successful", - "calls. This is because on failure all storage changes including events are", - "rolled back." - ] - }, - { - "name": "DelegateCalled", - "fields": [ - { - "name": "contract", - "type": 0, - "typeName": "T::AccountId", - "docs": [ - "The contract that performed the delegate call and hence in whose context", - "the `code_hash` is executed." - ] - }, - { - "name": "code_hash", - "type": 12, - "typeName": "CodeHash", - "docs": [ - "The code hash that was delegate called." - ] - } - ], - "index": 7, - "docs": [ - "A contract delegate called a code hash.", - "", - "# Note", - "", - "Please keep in mind that like all events this is only emitted for successful", - "calls. This is because on failure all storage changes including events are", - "rolled back." - ] - }, - { - "name": "StorageDepositTransferredAndHeld", - "fields": [ - { - "name": "from", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "to", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf" - } - ], - "index": 8, - "docs": [ - "Some funds have been transferred and held as storage deposit." - ] - }, - { - "name": "StorageDepositTransferredAndReleased", - "fields": [ - { - "name": "from", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "to", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf" - } - ], - "index": 9, - "docs": [ - "Some storage deposit funds have been transferred and released." - ] - } - ] - } - }, - "docs": [ - "The `Event` enum of this pallet" - ] - } - }, - { - "id": 39, - "type": { - "path": [ - "pallet_contracts", - "Origin" - ], - "params": [ - { - "name": "T", - "type": 40 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Root", - "index": 0 - }, - { - "name": "Signed", - "fields": [ - { - "type": 0, - "typeName": "T::AccountId" - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 40, - "type": { - "path": [ - "contracts_node_runtime", - "Runtime" - ], - "def": { - "composite": {} - } - } - }, - { - "id": 41, - "type": { - "path": [ - "pallet_assets", - "pallet", - "Event" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Created", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - }, - { - "name": "creator", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "owner", - "type": 0, - "typeName": "T::AccountId" - } - ], - "index": 0, - "docs": [ - "Some asset class was created." - ] - }, - { - "name": "Issued", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - }, - { - "name": "owner", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 1, - "docs": [ - "Some assets were issued." - ] - }, - { - "name": "Transferred", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - }, - { - "name": "from", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "to", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 2, - "docs": [ - "Some assets were transferred." - ] - }, - { - "name": "Burned", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - }, - { - "name": "owner", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "balance", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 3, - "docs": [ - "Some assets were destroyed." - ] - }, - { - "name": "TeamChanged", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - }, - { - "name": "issuer", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "admin", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "freezer", - "type": 0, - "typeName": "T::AccountId" - } - ], - "index": 4, - "docs": [ - "The management team changed." - ] - }, - { - "name": "OwnerChanged", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - }, - { - "name": "owner", - "type": 0, - "typeName": "T::AccountId" - } - ], - "index": 5, - "docs": [ - "The owner changed." - ] - }, - { - "name": "Frozen", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - }, - { - "name": "who", - "type": 0, - "typeName": "T::AccountId" - } - ], - "index": 6, - "docs": [ - "Some account `who` was frozen." - ] - }, - { - "name": "Thawed", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - }, - { - "name": "who", - "type": 0, - "typeName": "T::AccountId" - } - ], - "index": 7, - "docs": [ - "Some account `who` was thawed." - ] - }, - { - "name": "AssetFrozen", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - } - ], - "index": 8, - "docs": [ - "Some asset `asset_id` was frozen." - ] - }, - { - "name": "AssetThawed", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - } - ], - "index": 9, - "docs": [ - "Some asset `asset_id` was thawed." - ] - }, - { - "name": "AccountsDestroyed", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - }, - { - "name": "accounts_destroyed", - "type": 4, - "typeName": "u32" - }, - { - "name": "accounts_remaining", - "type": 4, - "typeName": "u32" - } - ], - "index": 10, - "docs": [ - "Accounts were destroyed for given asset." - ] - }, - { - "name": "ApprovalsDestroyed", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - }, - { - "name": "approvals_destroyed", - "type": 4, - "typeName": "u32" - }, - { - "name": "approvals_remaining", - "type": 4, - "typeName": "u32" - } - ], - "index": 11, - "docs": [ - "Approvals were destroyed for given asset." - ] - }, - { - "name": "DestructionStarted", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - } - ], - "index": 12, - "docs": [ - "An asset class is in the process of being destroyed." - ] - }, - { - "name": "Destroyed", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - } - ], - "index": 13, - "docs": [ - "An asset class was destroyed." - ] - }, - { - "name": "ForceCreated", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - }, - { - "name": "owner", - "type": 0, - "typeName": "T::AccountId" - } - ], - "index": 14, - "docs": [ - "Some asset class was force-created." - ] - }, - { - "name": "MetadataSet", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - }, - { - "name": "name", - "type": 13, - "typeName": "Vec" - }, - { - "name": "symbol", - "type": 13, - "typeName": "Vec" - }, - { - "name": "decimals", - "type": 2, - "typeName": "u8" - }, - { - "name": "is_frozen", - "type": 42, - "typeName": "bool" - } - ], - "index": 15, - "docs": [ - "New metadata has been set for an asset." - ] - }, - { - "name": "MetadataCleared", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - } - ], - "index": 16, - "docs": [ - "Metadata has been cleared for an asset." - ] - }, - { - "name": "ApprovedTransfer", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - }, - { - "name": "source", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "delegate", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 17, - "docs": [ - "(Additional) funds have been approved for transfer to a destination account." - ] - }, - { - "name": "ApprovalCancelled", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - }, - { - "name": "owner", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "delegate", - "type": 0, - "typeName": "T::AccountId" - } - ], - "index": 18, - "docs": [ - "An approval for account `delegate` was cancelled by `owner`." - ] - }, - { - "name": "TransferredApproved", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - }, - { - "name": "owner", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "delegate", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "destination", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 19, - "docs": [ - "An `amount` was transferred in its entirety from `owner` to `destination` by", - "the approved `delegate`." - ] - }, - { - "name": "AssetStatusChanged", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - } - ], - "index": 20, - "docs": [ - "An asset has had its attributes changed by the `Force` origin." - ] - }, - { - "name": "AssetMinBalanceChanged", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - }, - { - "name": "new_min_balance", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 21, - "docs": [ - "The min_balance of an asset has been updated by the asset owner." - ] - }, - { - "name": "Touched", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - }, - { - "name": "who", - "type": 0, - "typeName": "T::AccountId" - }, - { - "name": "depositor", - "type": 0, - "typeName": "T::AccountId" - } - ], - "index": 22, - "docs": [ - "Some account `who` was created with a deposit from `depositor`." - ] - }, - { - "name": "Blocked", - "fields": [ - { - "name": "asset_id", - "type": 4, - "typeName": "T::AssetId" - }, - { - "name": "who", - "type": 0, - "typeName": "T::AccountId" - } - ], - "index": 23, - "docs": [ - "Some account `who` was blocked." - ] - } - ] - } - }, - "docs": [ - "The `Event` enum of this pallet" - ] - } - }, - { - "id": 42, - "type": { - "def": { - "primitive": "bool" - } - } - }, - { - "id": 43, - "type": { - "path": [ - "frame_system", - "Phase" - ], - "def": { - "variant": { - "variants": [ - { - "name": "ApplyExtrinsic", - "fields": [ - { - "type": 4, - "typeName": "u32" - } - ], - "index": 0 - }, - { - "name": "Finalization", - "index": 1 - }, - { - "name": "Initialization", - "index": 2 - } - ] - } - } - } - }, - { - "id": 44, - "type": { - "def": { - "sequence": { - "type": 12 - } - } - } - }, - { - "id": 45, - "type": { - "def": { - "sequence": { - "type": 46 - } - } - } - }, - { - "id": 46, - "type": { - "def": { - "tuple": [ - 4, - 4 - ] - } - } - }, - { - "id": 47, - "type": { - "path": [ - "frame_system", - "LastRuntimeUpgradeInfo" - ], - "def": { - "composite": { - "fields": [ - { - "name": "spec_version", - "type": 48, - "typeName": "codec::Compact" - }, - { - "name": "spec_name", - "type": 49, - "typeName": "sp_runtime::RuntimeString" - } - ] - } - } - } - }, - { - "id": 48, - "type": { - "def": { - "compact": { - "type": 4 - } - } - } - }, - { - "id": 49, - "type": { - "def": { - "primitive": "str" - } - } - }, - { - "id": 50, - "type": { - "path": [ - "frame_system", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "remark", - "fields": [ - { - "name": "remark", - "type": 13, - "typeName": "Vec" - } - ], - "index": 0, - "docs": [ - "See [`Pallet::remark`]." - ] - }, - { - "name": "set_heap_pages", - "fields": [ - { - "name": "pages", - "type": 11, - "typeName": "u64" - } - ], - "index": 1, - "docs": [ - "See [`Pallet::set_heap_pages`]." - ] - }, - { - "name": "set_code", - "fields": [ - { - "name": "code", - "type": 13, - "typeName": "Vec" - } - ], - "index": 2, - "docs": [ - "See [`Pallet::set_code`]." - ] - }, - { - "name": "set_code_without_checks", - "fields": [ - { - "name": "code", - "type": 13, - "typeName": "Vec" - } - ], - "index": 3, - "docs": [ - "See [`Pallet::set_code_without_checks`]." - ] - }, - { - "name": "set_storage", - "fields": [ - { - "name": "items", - "type": 51, - "typeName": "Vec" - } - ], - "index": 4, - "docs": [ - "See [`Pallet::set_storage`]." - ] - }, - { - "name": "kill_storage", - "fields": [ - { - "name": "keys", - "type": 53, - "typeName": "Vec" - } - ], - "index": 5, - "docs": [ - "See [`Pallet::kill_storage`]." - ] - }, - { - "name": "kill_prefix", - "fields": [ - { - "name": "prefix", - "type": 13, - "typeName": "Key" - }, - { - "name": "subkeys", - "type": 4, - "typeName": "u32" - } - ], - "index": 6, - "docs": [ - "See [`Pallet::kill_prefix`]." - ] - }, - { - "name": "remark_with_event", - "fields": [ - { - "name": "remark", - "type": 13, - "typeName": "Vec" - } - ], - "index": 7, - "docs": [ - "See [`Pallet::remark_with_event`]." - ] - } - ] - } - }, - "docs": [ - "Contains a variant per dispatchable extrinsic that this pallet has." - ] - } - }, - { - "id": 51, - "type": { - "def": { - "sequence": { - "type": 52 - } - } - } - }, - { - "id": 52, - "type": { - "def": { - "tuple": [ - 13, - 13 - ] - } - } - }, - { - "id": 53, - "type": { - "def": { - "sequence": { - "type": 13 - } - } - } - }, - { - "id": 54, - "type": { - "path": [ - "frame_system", - "limits", - "BlockWeights" - ], - "def": { - "composite": { - "fields": [ - { - "name": "base_block", - "type": 9, - "typeName": "Weight" - }, - { - "name": "max_block", - "type": 9, - "typeName": "Weight" - }, - { - "name": "per_class", - "type": 55, - "typeName": "PerDispatchClass" - } - ] - } - } - } - }, - { - "id": 55, - "type": { - "path": [ - "frame_support", - "dispatch", - "PerDispatchClass" - ], - "params": [ - { - "name": "T", - "type": 56 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "normal", - "type": 56, - "typeName": "T" - }, - { - "name": "operational", - "type": 56, - "typeName": "T" - }, - { - "name": "mandatory", - "type": 56, - "typeName": "T" - } - ] - } - } - } - }, - { - "id": 56, - "type": { - "path": [ - "frame_system", - "limits", - "WeightsPerClass" - ], - "def": { - "composite": { - "fields": [ - { - "name": "base_extrinsic", - "type": 9, - "typeName": "Weight" - }, - { - "name": "max_extrinsic", - "type": 57, - "typeName": "Option" - }, - { - "name": "max_total", - "type": 57, - "typeName": "Option" - }, - { - "name": "reserved", - "type": 57, - "typeName": "Option" - } - ] - } - } - } - }, - { - "id": 57, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 9 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "index": 0 - }, - { - "name": "Some", - "fields": [ - { - "type": 9 - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 58, - "type": { - "path": [ - "frame_system", - "limits", - "BlockLength" - ], - "def": { - "composite": { - "fields": [ - { - "name": "max", - "type": 59, - "typeName": "PerDispatchClass" - } - ] - } - } - } - }, - { - "id": 59, - "type": { - "path": [ - "frame_support", - "dispatch", - "PerDispatchClass" - ], - "params": [ - { - "name": "T", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "normal", - "type": 4, - "typeName": "T" - }, - { - "name": "operational", - "type": 4, - "typeName": "T" - }, - { - "name": "mandatory", - "type": 4, - "typeName": "T" - } - ] - } - } - } - }, - { - "id": 60, - "type": { - "path": [ - "sp_weights", - "RuntimeDbWeight" - ], - "def": { - "composite": { - "fields": [ - { - "name": "read", - "type": 11, - "typeName": "u64" - }, - { - "name": "write", - "type": 11, - "typeName": "u64" - } - ] - } - } - } - }, - { - "id": 61, - "type": { - "path": [ - "sp_version", - "RuntimeVersion" - ], - "def": { - "composite": { - "fields": [ - { - "name": "spec_name", - "type": 49, - "typeName": "RuntimeString" - }, - { - "name": "impl_name", - "type": 49, - "typeName": "RuntimeString" - }, - { - "name": "authoring_version", - "type": 4, - "typeName": "u32" - }, - { - "name": "spec_version", - "type": 4, - "typeName": "u32" - }, - { - "name": "impl_version", - "type": 4, - "typeName": "u32" - }, - { - "name": "apis", - "type": 62, - "typeName": "ApisVec" - }, - { - "name": "transaction_version", - "type": 4, - "typeName": "u32" - }, - { - "name": "state_version", - "type": 2, - "typeName": "u8" - } - ] - } - } - } - }, - { - "id": 62, - "type": { - "path": [ - "Cow" - ], - "params": [ - { - "name": "T", - "type": 63 - } - ], - "def": { - "composite": { - "fields": [ - { - "type": 63 - } - ] - } - } - } - }, - { - "id": 63, - "type": { - "def": { - "sequence": { - "type": 64 - } - } - } - }, - { - "id": 64, - "type": { - "def": { - "tuple": [ - 65, - 4 - ] - } - } - }, - { - "id": 65, - "type": { - "def": { - "array": { - "len": 8, - "type": 2 - } - } - } - }, - { - "id": 66, - "type": { - "def": { - "primitive": "u16" - } - } - }, - { - "id": 67, - "type": { - "path": [ - "frame_system", - "pallet", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "InvalidSpecName", - "index": 0, - "docs": [ - "The name of specification does not match between the current runtime", - "and the new runtime." - ] - }, - { - "name": "SpecVersionNeedsToIncrease", - "index": 1, - "docs": [ - "The specification version is not allowed to decrease between the current runtime", - "and the new runtime." - ] - }, - { - "name": "FailedToExtractRuntimeVersion", - "index": 2, - "docs": [ - "Failed to extract the runtime version from the new runtime.", - "", - "Either calling `Core_version` or decoding `RuntimeVersion` failed." - ] - }, - { - "name": "NonDefaultComposite", - "index": 3, - "docs": [ - "Suicide called when the account has non-default composite data." - ] - }, - { - "name": "NonZeroRefCount", - "index": 4, - "docs": [ - "There is a non-zero reference count preventing the account from being purged." - ] - }, - { - "name": "CallFiltered", - "index": 5, - "docs": [ - "The origin filter prevent the call to be dispatched." - ] - } - ] - } - }, - "docs": [ - "Error for the System pallet" - ] - } - }, - { - "id": 68, - "type": { - "path": [ - "bounded_collections", - "bounded_vec", - "BoundedVec" - ], - "params": [ - { - "name": "T", - "type": 12 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "type": 44, - "typeName": "Vec" - } - ] - } - } - } - }, - { - "id": 69, - "type": { - "path": [ - "pallet_utility", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "batch", - "fields": [ - { - "name": "calls", - "type": 70, - "typeName": "Vec<::RuntimeCall>" - } - ], - "index": 0, - "docs": [ - "See [`Pallet::batch`]." - ] - }, - { - "name": "as_derivative", - "fields": [ - { - "name": "index", - "type": 66, - "typeName": "u16" - }, - { - "name": "call", - "type": 71, - "typeName": "Box<::RuntimeCall>" - } - ], - "index": 1, - "docs": [ - "See [`Pallet::as_derivative`]." - ] - }, - { - "name": "batch_all", - "fields": [ - { - "name": "calls", - "type": 70, - "typeName": "Vec<::RuntimeCall>" - } - ], - "index": 2, - "docs": [ - "See [`Pallet::batch_all`]." - ] - }, - { - "name": "dispatch_as", - "fields": [ - { - "name": "as_origin", - "type": 84, - "typeName": "Box" - }, - { - "name": "call", - "type": 71, - "typeName": "Box<::RuntimeCall>" - } - ], - "index": 3, - "docs": [ - "See [`Pallet::dispatch_as`]." - ] - }, - { - "name": "force_batch", - "fields": [ - { - "name": "calls", - "type": 70, - "typeName": "Vec<::RuntimeCall>" - } - ], - "index": 4, - "docs": [ - "See [`Pallet::force_batch`]." - ] - }, - { - "name": "with_weight", - "fields": [ - { - "name": "call", - "type": 71, - "typeName": "Box<::RuntimeCall>" - }, - { - "name": "weight", - "type": 9, - "typeName": "Weight" - } - ], - "index": 5, - "docs": [ - "See [`Pallet::with_weight`]." - ] - } - ] - } - }, - "docs": [ - "Contains a variant per dispatchable extrinsic that this pallet has." - ] - } - }, - { - "id": 70, - "type": { - "def": { - "sequence": { - "type": 71 - } - } - } - }, - { - "id": 71, - "type": { - "path": [ - "contracts_node_runtime", - "RuntimeCall" - ], - "def": { - "variant": { - "variants": [ - { - "name": "System", - "fields": [ - { - "type": 50, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor" - } - ], - "index": 0 - }, - { - "name": "Utility", - "fields": [ - { - "type": 69, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor" - } - ], - "index": 2 - }, - { - "name": "Timestamp", - "fields": [ - { - "type": 72, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor" - } - ], - "index": 3 - }, - { - "name": "Balances", - "fields": [ - { - "type": 73, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor" - } - ], - "index": 4 - }, - { - "name": "Sudo", - "fields": [ - { - "type": 79, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor" - } - ], - "index": 7 - }, - { - "name": "Contracts", - "fields": [ - { - "type": 80, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor" - } - ], - "index": 8 - }, - { - "name": "Assets", - "fields": [ - { - "type": 83, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor" - } - ], - "index": 9 - } - ] - } - } - } - }, - { - "id": 72, - "type": { - "path": [ - "pallet_timestamp", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "set", - "fields": [ - { - "name": "now", - "type": 10, - "typeName": "T::Moment" - } - ], - "index": 0, - "docs": [ - "See [`Pallet::set`]." - ] - } - ] - } - }, - "docs": [ - "Contains a variant per dispatchable extrinsic that this pallet has." - ] - } - }, - { - "id": 73, - "type": { - "path": [ - "pallet_balances", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "transfer_allow_death", - "fields": [ - { - "name": "dest", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "value", - "type": 77, - "typeName": "T::Balance" - } - ], - "index": 0, - "docs": [ - "See [`Pallet::transfer_allow_death`]." - ] - }, - { - "name": "force_transfer", - "fields": [ - { - "name": "source", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "dest", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "value", - "type": 77, - "typeName": "T::Balance" - } - ], - "index": 2, - "docs": [ - "See [`Pallet::force_transfer`]." - ] - }, - { - "name": "transfer_keep_alive", - "fields": [ - { - "name": "dest", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "value", - "type": 77, - "typeName": "T::Balance" - } - ], - "index": 3, - "docs": [ - "See [`Pallet::transfer_keep_alive`]." - ] - }, - { - "name": "transfer_all", - "fields": [ - { - "name": "dest", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "keep_alive", - "type": 42, - "typeName": "bool" - } - ], - "index": 4, - "docs": [ - "See [`Pallet::transfer_all`]." - ] - }, - { - "name": "force_unreserve", - "fields": [ - { - "name": "who", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 5, - "docs": [ - "See [`Pallet::force_unreserve`]." - ] - }, - { - "name": "upgrade_accounts", - "fields": [ - { - "name": "who", - "type": 78, - "typeName": "Vec" - } - ], - "index": 6, - "docs": [ - "See [`Pallet::upgrade_accounts`]." - ] - }, - { - "name": "force_set_balance", - "fields": [ - { - "name": "who", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "new_free", - "type": 77, - "typeName": "T::Balance" - } - ], - "index": 8, - "docs": [ - "See [`Pallet::force_set_balance`]." - ] - } - ] - } - }, - "docs": [ - "Contains a variant per dispatchable extrinsic that this pallet has." - ] - } - }, - { - "id": 74, - "type": { - "path": [ - "sp_runtime", - "multiaddress", - "MultiAddress" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - }, - { - "name": "AccountIndex", - "type": 32 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Id", - "fields": [ - { - "type": 0, - "typeName": "AccountId" - } - ], - "index": 0 - }, - { - "name": "Index", - "fields": [ - { - "type": 75, - "typeName": "AccountIndex" - } - ], - "index": 1 - }, - { - "name": "Raw", - "fields": [ - { - "type": 13, - "typeName": "Vec" - } - ], - "index": 2 - }, - { - "name": "Address32", - "fields": [ - { - "type": 1, - "typeName": "[u8; 32]" - } - ], - "index": 3 - }, - { - "name": "Address20", - "fields": [ - { - "type": 76, - "typeName": "[u8; 20]" - } - ], - "index": 4 - } - ] - } - } - } - }, - { - "id": 75, - "type": { - "def": { - "compact": { - "type": 32 - } - } - } - }, - { - "id": 76, - "type": { - "def": { - "array": { - "len": 20, - "type": 2 - } - } - } - }, - { - "id": 77, - "type": { - "def": { - "compact": { - "type": 6 - } - } - } - }, - { - "id": 78, - "type": { - "def": { - "sequence": { - "type": 0 - } - } - } - }, - { - "id": 79, - "type": { - "path": [ - "pallet_sudo", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "sudo", - "fields": [ - { - "name": "call", - "type": 71, - "typeName": "Box<::RuntimeCall>" - } - ], - "index": 0, - "docs": [ - "See [`Pallet::sudo`]." - ] - }, - { - "name": "sudo_unchecked_weight", - "fields": [ - { - "name": "call", - "type": 71, - "typeName": "Box<::RuntimeCall>" - }, - { - "name": "weight", - "type": 9, - "typeName": "Weight" - } - ], - "index": 1, - "docs": [ - "See [`Pallet::sudo_unchecked_weight`]." - ] - }, - { - "name": "set_key", - "fields": [ - { - "name": "new", - "type": 74, - "typeName": "AccountIdLookupOf" - } - ], - "index": 2, - "docs": [ - "See [`Pallet::set_key`]." - ] - }, - { - "name": "sudo_as", - "fields": [ - { - "name": "who", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "call", - "type": 71, - "typeName": "Box<::RuntimeCall>" - } - ], - "index": 3, - "docs": [ - "See [`Pallet::sudo_as`]." - ] - } - ] - } - }, - "docs": [ - "Contains a variant per dispatchable extrinsic that this pallet has." - ] - } - }, - { - "id": 80, - "type": { - "path": [ - "pallet_contracts", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "call_old_weight", - "fields": [ - { - "name": "dest", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "value", - "type": 77, - "typeName": "BalanceOf" - }, - { - "name": "gas_limit", - "type": 10, - "typeName": "OldWeight" - }, - { - "name": "storage_deposit_limit", - "type": 81, - "typeName": "Option< as codec::HasCompact>::Type>" - }, - { - "name": "data", - "type": 13, - "typeName": "Vec" - } - ], - "index": 0, - "docs": [ - "See [`Pallet::call_old_weight`]." - ] - }, - { - "name": "instantiate_with_code_old_weight", - "fields": [ - { - "name": "value", - "type": 77, - "typeName": "BalanceOf" - }, - { - "name": "gas_limit", - "type": 10, - "typeName": "OldWeight" - }, - { - "name": "storage_deposit_limit", - "type": 81, - "typeName": "Option< as codec::HasCompact>::Type>" - }, - { - "name": "code", - "type": 13, - "typeName": "Vec" - }, - { - "name": "data", - "type": 13, - "typeName": "Vec" - }, - { - "name": "salt", - "type": 13, - "typeName": "Vec" - } - ], - "index": 1, - "docs": [ - "See [`Pallet::instantiate_with_code_old_weight`]." - ] - }, - { - "name": "instantiate_old_weight", - "fields": [ - { - "name": "value", - "type": 77, - "typeName": "BalanceOf" - }, - { - "name": "gas_limit", - "type": 10, - "typeName": "OldWeight" - }, - { - "name": "storage_deposit_limit", - "type": 81, - "typeName": "Option< as codec::HasCompact>::Type>" - }, - { - "name": "code_hash", - "type": 12, - "typeName": "CodeHash" - }, - { - "name": "data", - "type": 13, - "typeName": "Vec" - }, - { - "name": "salt", - "type": 13, - "typeName": "Vec" - } - ], - "index": 2, - "docs": [ - "See [`Pallet::instantiate_old_weight`]." - ] - }, - { - "name": "upload_code", - "fields": [ - { - "name": "code", - "type": 13, - "typeName": "Vec" - }, - { - "name": "storage_deposit_limit", - "type": 81, - "typeName": "Option< as codec::HasCompact>::Type>" - }, - { - "name": "determinism", - "type": 82, - "typeName": "Determinism" - } - ], - "index": 3, - "docs": [ - "See [`Pallet::upload_code`]." - ] - }, - { - "name": "remove_code", - "fields": [ - { - "name": "code_hash", - "type": 12, - "typeName": "CodeHash" - } - ], - "index": 4, - "docs": [ - "See [`Pallet::remove_code`]." - ] - }, - { - "name": "set_code", - "fields": [ - { - "name": "dest", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "code_hash", - "type": 12, - "typeName": "CodeHash" - } - ], - "index": 5, - "docs": [ - "See [`Pallet::set_code`]." - ] - }, - { - "name": "call", - "fields": [ - { - "name": "dest", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "value", - "type": 77, - "typeName": "BalanceOf" - }, - { - "name": "gas_limit", - "type": 9, - "typeName": "Weight" - }, - { - "name": "storage_deposit_limit", - "type": 81, - "typeName": "Option< as codec::HasCompact>::Type>" - }, - { - "name": "data", - "type": 13, - "typeName": "Vec" - } - ], - "index": 6, - "docs": [ - "See [`Pallet::call`]." - ] - }, - { - "name": "instantiate_with_code", - "fields": [ - { - "name": "value", - "type": 77, - "typeName": "BalanceOf" - }, - { - "name": "gas_limit", - "type": 9, - "typeName": "Weight" - }, - { - "name": "storage_deposit_limit", - "type": 81, - "typeName": "Option< as codec::HasCompact>::Type>" - }, - { - "name": "code", - "type": 13, - "typeName": "Vec" - }, - { - "name": "data", - "type": 13, - "typeName": "Vec" - }, - { - "name": "salt", - "type": 13, - "typeName": "Vec" - } - ], - "index": 7, - "docs": [ - "See [`Pallet::instantiate_with_code`]." - ] - }, - { - "name": "instantiate", - "fields": [ - { - "name": "value", - "type": 77, - "typeName": "BalanceOf" - }, - { - "name": "gas_limit", - "type": 9, - "typeName": "Weight" - }, - { - "name": "storage_deposit_limit", - "type": 81, - "typeName": "Option< as codec::HasCompact>::Type>" - }, - { - "name": "code_hash", - "type": 12, - "typeName": "CodeHash" - }, - { - "name": "data", - "type": 13, - "typeName": "Vec" - }, - { - "name": "salt", - "type": 13, - "typeName": "Vec" - } - ], - "index": 8, - "docs": [ - "See [`Pallet::instantiate`]." - ] - }, - { - "name": "migrate", - "fields": [ - { - "name": "weight_limit", - "type": 9, - "typeName": "Weight" - } - ], - "index": 9, - "docs": [ - "See [`Pallet::migrate`]." - ] - } - ] - } - }, - "docs": [ - "Contains a variant per dispatchable extrinsic that this pallet has." - ] - } - }, - { - "id": 81, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 77 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "index": 0 - }, - { - "name": "Some", - "fields": [ - { - "type": 77 - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 82, - "type": { - "path": [ - "pallet_contracts", - "wasm", - "Determinism" - ], - "def": { - "variant": { - "variants": [ - { - "name": "Enforced", - "index": 0 - }, - { - "name": "Relaxed", - "index": 1 - } - ] - } - } - } - }, - { - "id": 83, - "type": { - "path": [ - "pallet_assets", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "create", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "admin", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "min_balance", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 0, - "docs": [ - "See [`Pallet::create`]." - ] - }, - { - "name": "force_create", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "owner", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "is_sufficient", - "type": 42, - "typeName": "bool" - }, - { - "name": "min_balance", - "type": 77, - "typeName": "T::Balance" - } - ], - "index": 1, - "docs": [ - "See [`Pallet::force_create`]." - ] - }, - { - "name": "start_destroy", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - } - ], - "index": 2, - "docs": [ - "See [`Pallet::start_destroy`]." - ] - }, - { - "name": "destroy_accounts", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - } - ], - "index": 3, - "docs": [ - "See [`Pallet::destroy_accounts`]." - ] - }, - { - "name": "destroy_approvals", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - } - ], - "index": 4, - "docs": [ - "See [`Pallet::destroy_approvals`]." - ] - }, - { - "name": "finish_destroy", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - } - ], - "index": 5, - "docs": [ - "See [`Pallet::finish_destroy`]." - ] - }, - { - "name": "mint", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "beneficiary", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "amount", - "type": 77, - "typeName": "T::Balance" - } - ], - "index": 6, - "docs": [ - "See [`Pallet::mint`]." - ] - }, - { - "name": "burn", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "who", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "amount", - "type": 77, - "typeName": "T::Balance" - } - ], - "index": 7, - "docs": [ - "See [`Pallet::burn`]." - ] - }, - { - "name": "transfer", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "target", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "amount", - "type": 77, - "typeName": "T::Balance" - } - ], - "index": 8, - "docs": [ - "See [`Pallet::transfer`]." - ] - }, - { - "name": "transfer_keep_alive", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "target", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "amount", - "type": 77, - "typeName": "T::Balance" - } - ], - "index": 9, - "docs": [ - "See [`Pallet::transfer_keep_alive`]." - ] - }, - { - "name": "force_transfer", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "source", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "dest", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "amount", - "type": 77, - "typeName": "T::Balance" - } - ], - "index": 10, - "docs": [ - "See [`Pallet::force_transfer`]." - ] - }, - { - "name": "freeze", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "who", - "type": 74, - "typeName": "AccountIdLookupOf" - } - ], - "index": 11, - "docs": [ - "See [`Pallet::freeze`]." - ] - }, - { - "name": "thaw", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "who", - "type": 74, - "typeName": "AccountIdLookupOf" - } - ], - "index": 12, - "docs": [ - "See [`Pallet::thaw`]." - ] - }, - { - "name": "freeze_asset", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - } - ], - "index": 13, - "docs": [ - "See [`Pallet::freeze_asset`]." - ] - }, - { - "name": "thaw_asset", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - } - ], - "index": 14, - "docs": [ - "See [`Pallet::thaw_asset`]." - ] - }, - { - "name": "transfer_ownership", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "owner", - "type": 74, - "typeName": "AccountIdLookupOf" - } - ], - "index": 15, - "docs": [ - "See [`Pallet::transfer_ownership`]." - ] - }, - { - "name": "set_team", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "issuer", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "admin", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "freezer", - "type": 74, - "typeName": "AccountIdLookupOf" - } - ], - "index": 16, - "docs": [ - "See [`Pallet::set_team`]." - ] - }, - { - "name": "set_metadata", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "name", - "type": 13, - "typeName": "Vec" - }, - { - "name": "symbol", - "type": 13, - "typeName": "Vec" - }, - { - "name": "decimals", - "type": 2, - "typeName": "u8" - } - ], - "index": 17, - "docs": [ - "See [`Pallet::set_metadata`]." - ] - }, - { - "name": "clear_metadata", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - } - ], - "index": 18, - "docs": [ - "See [`Pallet::clear_metadata`]." - ] - }, - { - "name": "force_set_metadata", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "name", - "type": 13, - "typeName": "Vec" - }, - { - "name": "symbol", - "type": 13, - "typeName": "Vec" - }, - { - "name": "decimals", - "type": 2, - "typeName": "u8" - }, - { - "name": "is_frozen", - "type": 42, - "typeName": "bool" - } - ], - "index": 19, - "docs": [ - "See [`Pallet::force_set_metadata`]." - ] - }, - { - "name": "force_clear_metadata", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - } - ], - "index": 20, - "docs": [ - "See [`Pallet::force_clear_metadata`]." - ] - }, - { - "name": "force_asset_status", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "owner", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "issuer", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "admin", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "freezer", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "min_balance", - "type": 77, - "typeName": "T::Balance" - }, - { - "name": "is_sufficient", - "type": 42, - "typeName": "bool" - }, - { - "name": "is_frozen", - "type": 42, - "typeName": "bool" - } - ], - "index": 21, - "docs": [ - "See [`Pallet::force_asset_status`]." - ] - }, - { - "name": "approve_transfer", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "delegate", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "amount", - "type": 77, - "typeName": "T::Balance" - } - ], - "index": 22, - "docs": [ - "See [`Pallet::approve_transfer`]." - ] - }, - { - "name": "cancel_approval", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "delegate", - "type": 74, - "typeName": "AccountIdLookupOf" - } - ], - "index": 23, - "docs": [ - "See [`Pallet::cancel_approval`]." - ] - }, - { - "name": "force_cancel_approval", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "owner", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "delegate", - "type": 74, - "typeName": "AccountIdLookupOf" - } - ], - "index": 24, - "docs": [ - "See [`Pallet::force_cancel_approval`]." - ] - }, - { - "name": "transfer_approved", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "owner", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "destination", - "type": 74, - "typeName": "AccountIdLookupOf" - }, - { - "name": "amount", - "type": 77, - "typeName": "T::Balance" - } - ], - "index": 25, - "docs": [ - "See [`Pallet::transfer_approved`]." - ] - }, - { - "name": "touch", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - } - ], - "index": 26, - "docs": [ - "See [`Pallet::touch`]." - ] - }, - { - "name": "refund", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "allow_burn", - "type": 42, - "typeName": "bool" - } - ], - "index": 27, - "docs": [ - "See [`Pallet::refund`]." - ] - }, - { - "name": "set_min_balance", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "min_balance", - "type": 6, - "typeName": "T::Balance" - } - ], - "index": 28, - "docs": [ - "See [`Pallet::set_min_balance`]." - ] - }, - { - "name": "touch_other", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "who", - "type": 74, - "typeName": "AccountIdLookupOf" - } - ], - "index": 29, - "docs": [ - "See [`Pallet::touch_other`]." - ] - }, - { - "name": "refund_other", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "who", - "type": 74, - "typeName": "AccountIdLookupOf" - } - ], - "index": 30, - "docs": [ - "See [`Pallet::refund_other`]." - ] - }, - { - "name": "block", - "fields": [ - { - "name": "id", - "type": 48, - "typeName": "T::AssetIdParameter" - }, - { - "name": "who", - "type": 74, - "typeName": "AccountIdLookupOf" - } - ], - "index": 31, - "docs": [ - "See [`Pallet::block`]." - ] - } - ] - } - }, - "docs": [ - "Contains a variant per dispatchable extrinsic that this pallet has." - ] - } - }, - { - "id": 84, - "type": { - "path": [ - "contracts_node_runtime", - "OriginCaller" - ], - "def": { - "variant": { - "variants": [ - { - "name": "system", - "fields": [ - { - "type": 85, - "typeName": "frame_system::Origin" - } - ], - "index": 0 - }, - { - "name": "Void", - "fields": [ - { - "type": 86, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::\n__private::Void" - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 85, - "type": { - "path": [ - "frame_support", - "dispatch", - "RawOrigin" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Root", - "index": 0 - }, - { - "name": "Signed", - "fields": [ - { - "type": 0, - "typeName": "AccountId" - } - ], - "index": 1 - }, - { - "name": "None", - "index": 2 - } - ] - } - } - } - }, - { - "id": 86, - "type": { - "path": [ - "sp_core", - "Void" - ], - "def": { - "variant": {} - } - } - }, - { - "id": 87, - "type": { - "path": [ - "pallet_utility", - "pallet", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "TooManyCalls", - "index": 0, - "docs": [ - "Too many calls batched." - ] - } - ] - } - }, - "docs": [ - "The `Error` enum of this pallet." - ] - } - }, - { - "id": 88, - "type": { - "path": [ - "bounded_collections", - "weak_bounded_vec", - "WeakBoundedVec" - ], - "params": [ - { - "name": "T", - "type": 89 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "type": 91, - "typeName": "Vec" - } - ] - } - } - } - }, - { - "id": 89, - "type": { - "path": [ - "pallet_balances", - "types", - "BalanceLock" - ], - "params": [ - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "id", - "type": 65, - "typeName": "LockIdentifier" - }, - { - "name": "amount", - "type": 6, - "typeName": "Balance" - }, - { - "name": "reasons", - "type": 90, - "typeName": "Reasons" - } - ] - } - } - } - }, - { - "id": 90, - "type": { - "path": [ - "pallet_balances", - "types", - "Reasons" - ], - "def": { - "variant": { - "variants": [ - { - "name": "Fee", - "index": 0 - }, - { - "name": "Misc", - "index": 1 - }, - { - "name": "All", - "index": 2 - } - ] - } - } - } - }, - { - "id": 91, - "type": { - "def": { - "sequence": { - "type": 89 - } - } - } - }, - { - "id": 92, - "type": { - "path": [ - "bounded_collections", - "bounded_vec", - "BoundedVec" - ], - "params": [ - { - "name": "T", - "type": 93 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "type": 94, - "typeName": "Vec" - } - ] - } - } - } - }, - { - "id": 93, - "type": { - "path": [ - "pallet_balances", - "types", - "ReserveData" - ], - "params": [ - { - "name": "ReserveIdentifier", - "type": 65 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "id", - "type": 65, - "typeName": "ReserveIdentifier" - }, - { - "name": "amount", - "type": 6, - "typeName": "Balance" - } - ] - } - } - } - }, - { - "id": 94, - "type": { - "def": { - "sequence": { - "type": 93 - } - } - } - }, - { - "id": 95, - "type": { - "path": [ - "bounded_collections", - "bounded_vec", - "BoundedVec" - ], - "params": [ - { - "name": "T", - "type": 96 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "type": 99, - "typeName": "Vec" - } - ] - } - } - } - }, - { - "id": 96, - "type": { - "path": [ - "pallet_balances", - "types", - "IdAmount" - ], - "params": [ - { - "name": "Id", - "type": 97 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "id", - "type": 97, - "typeName": "Id" - }, - { - "name": "amount", - "type": 6, - "typeName": "Balance" - } - ] - } - } - } - }, - { - "id": 97, - "type": { - "path": [ - "contracts_node_runtime", - "RuntimeHoldReason" - ], - "def": { - "variant": { - "variants": [ - { - "name": "Contracts", - "fields": [ - { - "type": 98, - "typeName": "pallet_contracts::HoldReason" - } - ], - "index": 8 - } - ] - } - } - } - }, - { - "id": 98, - "type": { - "path": [ - "pallet_contracts", - "pallet", - "HoldReason" - ], - "def": { - "variant": { - "variants": [ - { - "name": "CodeUploadDepositReserve", - "index": 0 - }, - { - "name": "StorageDepositReserve", - "index": 1 - } - ] - } - } - } - }, - { - "id": 99, - "type": { - "def": { - "sequence": { - "type": 96 - } - } - } - }, - { - "id": 100, - "type": { - "path": [ - "bounded_collections", - "bounded_vec", - "BoundedVec" - ], - "params": [ - { - "name": "T", - "type": 101 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "type": 102, - "typeName": "Vec" - } - ] - } - } - } - }, - { - "id": 101, - "type": { - "path": [ - "pallet_balances", - "types", - "IdAmount" - ], - "params": [ - { - "name": "Id", - "type": 32 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "id", - "type": 32, - "typeName": "Id" - }, - { - "name": "amount", - "type": 6, - "typeName": "Balance" - } - ] - } - } - } - }, - { - "id": 102, - "type": { - "def": { - "sequence": { - "type": 101 - } - } - } - }, - { - "id": 103, - "type": { - "path": [ - "pallet_balances", - "pallet", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "VestingBalance", - "index": 0, - "docs": [ - "Vesting balance too high to send value." - ] - }, - { - "name": "LiquidityRestrictions", - "index": 1, - "docs": [ - "Account liquidity restrictions prevent withdrawal." - ] - }, - { - "name": "InsufficientBalance", - "index": 2, - "docs": [ - "Balance too low to send value." - ] - }, - { - "name": "ExistentialDeposit", - "index": 3, - "docs": [ - "Value too low to create account due to existential deposit." - ] - }, - { - "name": "Expendability", - "index": 4, - "docs": [ - "Transfer/payment would kill account." - ] - }, - { - "name": "ExistingVestingSchedule", - "index": 5, - "docs": [ - "A vesting schedule already exists for this account." - ] - }, - { - "name": "DeadAccount", - "index": 6, - "docs": [ - "Beneficiary account must pre-exist." - ] - }, - { - "name": "TooManyReserves", - "index": 7, - "docs": [ - "Number of named reserves exceed `MaxReserves`." - ] - }, - { - "name": "TooManyHolds", - "index": 8, - "docs": [ - "Number of holds exceed `MaxHolds`." - ] - }, - { - "name": "TooManyFreezes", - "index": 9, - "docs": [ - "Number of freezes exceed `MaxFreezes`." - ] - } - ] - } - }, - "docs": [ - "The `Error` enum of this pallet." - ] - } - }, - { - "id": 104, - "type": { - "path": [ - "sp_arithmetic", - "fixed_point", - "FixedU128" - ], - "def": { - "composite": { - "fields": [ - { - "type": 6, - "typeName": "u128" - } - ] - } - } - } - }, - { - "id": 105, - "type": { - "path": [ - "pallet_transaction_payment", - "Releases" - ], - "def": { - "variant": { - "variants": [ - { - "name": "V1Ancient", - "index": 0 - }, - { - "name": "V2", - "index": 1 - } - ] - } - } - } - }, - { - "id": 106, - "type": { - "path": [ - "pallet_sudo", - "pallet", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "RequireSudo", - "index": 0, - "docs": [ - "Sender must be the Sudo account" - ] - } - ] - } - }, - "docs": [ - "Error for the Sudo pallet" - ] - } - }, - { - "id": 107, - "type": { - "path": [ - "bounded_collections", - "bounded_vec", - "BoundedVec" - ], - "params": [ - { - "name": "T", - "type": 2 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "type": 13, - "typeName": "Vec" - } - ] - } - } - } - }, - { - "id": 108, - "type": { - "path": [ - "pallet_contracts", - "wasm", - "CodeInfo" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "owner", - "type": 0, - "typeName": "AccountIdOf" - }, - { - "name": "deposit", - "type": 77, - "typeName": "BalanceOf" - }, - { - "name": "refcount", - "type": 10, - "typeName": "u64" - }, - { - "name": "determinism", - "type": 82, - "typeName": "Determinism" - }, - { - "name": "code_len", - "type": 4, - "typeName": "u32" - } - ] - } - } - } - }, - { - "id": 109, - "type": { - "path": [ - "pallet_contracts", - "storage", - "ContractInfo" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "trie_id", - "type": 110, - "typeName": "TrieId" - }, - { - "name": "code_hash", - "type": 12, - "typeName": "CodeHash" - }, - { - "name": "storage_bytes", - "type": 4, - "typeName": "u32" - }, - { - "name": "storage_items", - "type": 4, - "typeName": "u32" - }, - { - "name": "storage_byte_deposit", - "type": 6, - "typeName": "BalanceOf" - }, - { - "name": "storage_item_deposit", - "type": 6, - "typeName": "BalanceOf" - }, - { - "name": "storage_base_deposit", - "type": 6, - "typeName": "BalanceOf" - }, - { - "name": "delegate_dependencies", - "type": 111, - "typeName": "BoundedBTreeMap, BalanceOf, T::\nMaxDelegateDependencies>" - } - ] - } - } - } - }, - { - "id": 110, - "type": { - "path": [ - "bounded_collections", - "bounded_vec", - "BoundedVec" - ], - "params": [ - { - "name": "T", - "type": 2 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "type": 13, - "typeName": "Vec" - } - ] - } - } - } - }, - { - "id": 111, - "type": { - "path": [ - "bounded_collections", - "bounded_btree_map", - "BoundedBTreeMap" - ], - "params": [ - { - "name": "K", - "type": 12 - }, - { - "name": "V", - "type": 6 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "type": 112, - "typeName": "BTreeMap" - } - ] - } - } - } - }, - { - "id": 112, - "type": { - "path": [ - "BTreeMap" - ], - "params": [ - { - "name": "K", - "type": 12 - }, - { - "name": "V", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "type": 113 - } - ] - } - } - } - }, - { - "id": 113, - "type": { - "def": { - "sequence": { - "type": 114 - } - } - } - }, - { - "id": 114, - "type": { - "def": { - "tuple": [ - 12, - 6 - ] - } - } - }, - { - "id": 115, - "type": { - "path": [ - "pallet_contracts", - "storage", - "DeletionQueueManager" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "insert_counter", - "type": 4, - "typeName": "u32" - }, - { - "name": "delete_counter", - "type": 4, - "typeName": "u32" - } - ] - } - } - } - }, - { - "id": 116, - "type": { - "path": [ - "bounded_collections", - "bounded_vec", - "BoundedVec" - ], - "params": [ - { - "name": "T", - "type": 2 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "type": 13, - "typeName": "Vec" - } - ] - } - } - } - }, - { - "id": 117, - "type": { - "path": [ - "pallet_contracts", - "schedule", - "Schedule" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "limits", - "type": 118, - "typeName": "Limits" - }, - { - "name": "instruction_weights", - "type": 119, - "typeName": "InstructionWeights" - }, - { - "name": "host_fn_weights", - "type": 120, - "typeName": "HostFnWeights" - } - ] - } - } - } - }, - { - "id": 118, - "type": { - "path": [ - "pallet_contracts", - "schedule", - "Limits" - ], - "def": { - "composite": { - "fields": [ - { - "name": "event_topics", - "type": 4, - "typeName": "u32" - }, - { - "name": "globals", - "type": 4, - "typeName": "u32" - }, - { - "name": "locals", - "type": 4, - "typeName": "u32" - }, - { - "name": "parameters", - "type": 4, - "typeName": "u32" - }, - { - "name": "memory_pages", - "type": 4, - "typeName": "u32" - }, - { - "name": "table_size", - "type": 4, - "typeName": "u32" - }, - { - "name": "br_table_size", - "type": 4, - "typeName": "u32" - }, - { - "name": "subject_len", - "type": 4, - "typeName": "u32" - }, - { - "name": "payload_len", - "type": 4, - "typeName": "u32" - }, - { - "name": "runtime_memory", - "type": 4, - "typeName": "u32" - } - ] - } - } - } - }, - { - "id": 119, - "type": { - "path": [ - "pallet_contracts", - "schedule", - "InstructionWeights" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "base", - "type": 4, - "typeName": "u32" - } - ] - } - } - } - }, - { - "id": 120, - "type": { - "path": [ - "pallet_contracts", - "schedule", - "HostFnWeights" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "caller", - "type": 9, - "typeName": "Weight" - }, - { - "name": "is_contract", - "type": 9, - "typeName": "Weight" - }, - { - "name": "code_hash", - "type": 9, - "typeName": "Weight" - }, - { - "name": "own_code_hash", - "type": 9, - "typeName": "Weight" - }, - { - "name": "caller_is_origin", - "type": 9, - "typeName": "Weight" - }, - { - "name": "caller_is_root", - "type": 9, - "typeName": "Weight" - }, - { - "name": "address", - "type": 9, - "typeName": "Weight" - }, - { - "name": "gas_left", - "type": 9, - "typeName": "Weight" - }, - { - "name": "balance", - "type": 9, - "typeName": "Weight" - }, - { - "name": "value_transferred", - "type": 9, - "typeName": "Weight" - }, - { - "name": "minimum_balance", - "type": 9, - "typeName": "Weight" - }, - { - "name": "block_number", - "type": 9, - "typeName": "Weight" - }, - { - "name": "now", - "type": 9, - "typeName": "Weight" - }, - { - "name": "weight_to_fee", - "type": 9, - "typeName": "Weight" - }, - { - "name": "input", - "type": 9, - "typeName": "Weight" - }, - { - "name": "input_per_byte", - "type": 9, - "typeName": "Weight" - }, - { - "name": "r#return", - "type": 9, - "typeName": "Weight" - }, - { - "name": "return_per_byte", - "type": 9, - "typeName": "Weight" - }, - { - "name": "terminate", - "type": 9, - "typeName": "Weight" - }, - { - "name": "random", - "type": 9, - "typeName": "Weight" - }, - { - "name": "deposit_event", - "type": 9, - "typeName": "Weight" - }, - { - "name": "deposit_event_per_topic", - "type": 9, - "typeName": "Weight" - }, - { - "name": "deposit_event_per_byte", - "type": 9, - "typeName": "Weight" - }, - { - "name": "debug_message", - "type": 9, - "typeName": "Weight" - }, - { - "name": "debug_message_per_byte", - "type": 9, - "typeName": "Weight" - }, - { - "name": "set_storage", - "type": 9, - "typeName": "Weight" - }, - { - "name": "set_storage_per_new_byte", - "type": 9, - "typeName": "Weight" - }, - { - "name": "set_storage_per_old_byte", - "type": 9, - "typeName": "Weight" - }, - { - "name": "set_code_hash", - "type": 9, - "typeName": "Weight" - }, - { - "name": "clear_storage", - "type": 9, - "typeName": "Weight" - }, - { - "name": "clear_storage_per_byte", - "type": 9, - "typeName": "Weight" - }, - { - "name": "contains_storage", - "type": 9, - "typeName": "Weight" - }, - { - "name": "contains_storage_per_byte", - "type": 9, - "typeName": "Weight" - }, - { - "name": "get_storage", - "type": 9, - "typeName": "Weight" - }, - { - "name": "get_storage_per_byte", - "type": 9, - "typeName": "Weight" - }, - { - "name": "take_storage", - "type": 9, - "typeName": "Weight" - }, - { - "name": "take_storage_per_byte", - "type": 9, - "typeName": "Weight" - }, - { - "name": "transfer", - "type": 9, - "typeName": "Weight" - }, - { - "name": "call", - "type": 9, - "typeName": "Weight" - }, - { - "name": "delegate_call", - "type": 9, - "typeName": "Weight" - }, - { - "name": "call_transfer_surcharge", - "type": 9, - "typeName": "Weight" - }, - { - "name": "call_per_cloned_byte", - "type": 9, - "typeName": "Weight" - }, - { - "name": "instantiate", - "type": 9, - "typeName": "Weight" - }, - { - "name": "instantiate_transfer_surcharge", - "type": 9, - "typeName": "Weight" - }, - { - "name": "instantiate_per_input_byte", - "type": 9, - "typeName": "Weight" - }, - { - "name": "instantiate_per_salt_byte", - "type": 9, - "typeName": "Weight" - }, - { - "name": "hash_sha2_256", - "type": 9, - "typeName": "Weight" - }, - { - "name": "hash_sha2_256_per_byte", - "type": 9, - "typeName": "Weight" - }, - { - "name": "hash_keccak_256", - "type": 9, - "typeName": "Weight" - }, - { - "name": "hash_keccak_256_per_byte", - "type": 9, - "typeName": "Weight" - }, - { - "name": "hash_blake2_256", - "type": 9, - "typeName": "Weight" - }, - { - "name": "hash_blake2_256_per_byte", - "type": 9, - "typeName": "Weight" - }, - { - "name": "hash_blake2_128", - "type": 9, - "typeName": "Weight" - }, - { - "name": "hash_blake2_128_per_byte", - "type": 9, - "typeName": "Weight" - }, - { - "name": "ecdsa_recover", - "type": 9, - "typeName": "Weight" - }, - { - "name": "ecdsa_to_eth_address", - "type": 9, - "typeName": "Weight" - }, - { - "name": "sr25519_verify", - "type": 9, - "typeName": "Weight" - }, - { - "name": "sr25519_verify_per_byte", - "type": 9, - "typeName": "Weight" - }, - { - "name": "reentrance_count", - "type": 9, - "typeName": "Weight" - }, - { - "name": "account_reentrance_count", - "type": 9, - "typeName": "Weight" - }, - { - "name": "instantiation_nonce", - "type": 9, - "typeName": "Weight" - }, - { - "name": "add_delegate_dependency", - "type": 9, - "typeName": "Weight" - }, - { - "name": "remove_delegate_dependency", - "type": 9, - "typeName": "Weight" - } - ] - } - } - } - }, - { - "id": 121, - "type": { - "path": [ - "sp_arithmetic", - "per_things", - "Perbill" - ], - "def": { - "composite": { - "fields": [ - { - "type": 4, - "typeName": "u32" - } - ] - } - } - } - }, - { - "id": 122, - "type": { - "path": [ - "pallet_contracts", - "Environment" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "account_id", - "type": 123, - "typeName": "EnvironmentType>" - }, - { - "name": "balance", - "type": 124, - "typeName": "EnvironmentType>" - }, - { - "name": "hash", - "type": 125, - "typeName": "EnvironmentType<::Hash>" - }, - { - "name": "hasher", - "type": 126, - "typeName": "EnvironmentType<::Hashing>" - }, - { - "name": "timestamp", - "type": 128, - "typeName": "EnvironmentType>" - }, - { - "name": "block_number", - "type": 129, - "typeName": "EnvironmentType>" - } - ] - } - } - } - }, - { - "id": 123, - "type": { - "path": [ - "pallet_contracts", - "EnvironmentType" - ], - "params": [ - { - "name": "T", - "type": 0 - } - ], - "def": { - "composite": {} - } - } - }, - { - "id": 124, - "type": { - "path": [ - "pallet_contracts", - "EnvironmentType" - ], - "params": [ - { - "name": "T", - "type": 6 - } - ], - "def": { - "composite": {} - } - } - }, - { - "id": 125, - "type": { - "path": [ - "pallet_contracts", - "EnvironmentType" - ], - "params": [ - { - "name": "T", - "type": 12 - } - ], - "def": { - "composite": {} - } - } - }, - { - "id": 126, - "type": { - "path": [ - "pallet_contracts", - "EnvironmentType" - ], - "params": [ - { - "name": "T", - "type": 127 - } - ], - "def": { - "composite": {} - } - } - }, - { - "id": 127, - "type": { - "path": [ - "sp_runtime", - "traits", - "BlakeTwo256" - ], - "def": { - "composite": {} - } - } - }, - { - "id": 128, - "type": { - "path": [ - "pallet_contracts", - "EnvironmentType" - ], - "params": [ - { - "name": "T", - "type": 11 - } - ], - "def": { - "composite": {} - } - } - }, - { - "id": 129, - "type": { - "path": [ - "pallet_contracts", - "EnvironmentType" - ], - "params": [ - { - "name": "T", - "type": 4 - } - ], - "def": { - "composite": {} - } - } - }, - { - "id": 130, - "type": { - "path": [ - "pallet_contracts", - "pallet", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "InvalidSchedule", - "index": 0, - "docs": [ - "Invalid schedule supplied, e.g. with zero weight of a basic operation." - ] - }, - { - "name": "InvalidCallFlags", - "index": 1, - "docs": [ - "Invalid combination of flags supplied to `seal_call` or `seal_delegate_call`." - ] - }, - { - "name": "OutOfGas", - "index": 2, - "docs": [ - "The executed contract exhausted its gas limit." - ] - }, - { - "name": "OutputBufferTooSmall", - "index": 3, - "docs": [ - "The output buffer supplied to a contract API call was too small." - ] - }, - { - "name": "TransferFailed", - "index": 4, - "docs": [ - "Performing the requested transfer failed. Probably because there isn't enough", - "free balance in the sender's account." - ] - }, - { - "name": "MaxCallDepthReached", - "index": 5, - "docs": [ - "Performing a call was denied because the calling depth reached the limit", - "of what is specified in the schedule." - ] - }, - { - "name": "ContractNotFound", - "index": 6, - "docs": [ - "No contract was found at the specified address." - ] - }, - { - "name": "CodeTooLarge", - "index": 7, - "docs": [ - "The code supplied to `instantiate_with_code` exceeds the limit specified in the", - "current schedule." - ] - }, - { - "name": "CodeNotFound", - "index": 8, - "docs": [ - "No code could be found at the supplied code hash." - ] - }, - { - "name": "CodeInfoNotFound", - "index": 9, - "docs": [ - "No code info could be found at the supplied code hash." - ] - }, - { - "name": "OutOfBounds", - "index": 10, - "docs": [ - "A buffer outside of sandbox memory was passed to a contract API function." - ] - }, - { - "name": "DecodingFailed", - "index": 11, - "docs": [ - "Input passed to a contract API function failed to decode as expected type." - ] - }, - { - "name": "ContractTrapped", - "index": 12, - "docs": [ - "Contract trapped during execution." - ] - }, - { - "name": "ValueTooLarge", - "index": 13, - "docs": [ - "The size defined in `T::MaxValueSize` was exceeded." - ] - }, - { - "name": "TerminatedWhileReentrant", - "index": 14, - "docs": [ - "Termination of a contract is not allowed while the contract is already", - "on the call stack. Can be triggered by `seal_terminate`." - ] - }, - { - "name": "InputForwarded", - "index": 15, - "docs": [ - "`seal_call` forwarded this contracts input. It therefore is no longer available." - ] - }, - { - "name": "RandomSubjectTooLong", - "index": 16, - "docs": [ - "The subject passed to `seal_random` exceeds the limit." - ] - }, - { - "name": "TooManyTopics", - "index": 17, - "docs": [ - "The amount of topics passed to `seal_deposit_events` exceeds the limit." - ] - }, - { - "name": "NoChainExtension", - "index": 18, - "docs": [ - "The chain does not provide a chain extension. Calling the chain extension results", - "in this error. Note that this usually shouldn't happen as deploying such contracts", - "is rejected." - ] - }, - { - "name": "DuplicateContract", - "index": 19, - "docs": [ - "A contract with the same AccountId already exists." - ] - }, - { - "name": "TerminatedInConstructor", - "index": 20, - "docs": [ - "A contract self destructed in its constructor.", - "", - "This can be triggered by a call to `seal_terminate`." - ] - }, - { - "name": "ReentranceDenied", - "index": 21, - "docs": [ - "A call tried to invoke a contract that is flagged as non-reentrant.", - "The only other cause is that a call from a contract into the runtime tried to call back", - "into `pallet-contracts`. This would make the whole pallet reentrant with regard to", - "contract code execution which is not supported." - ] - }, - { - "name": "StorageDepositNotEnoughFunds", - "index": 22, - "docs": [ - "Origin doesn't have enough balance to pay the required storage deposits." - ] - }, - { - "name": "StorageDepositLimitExhausted", - "index": 23, - "docs": [ - "More storage was created than allowed by the storage deposit limit." - ] - }, - { - "name": "CodeInUse", - "index": 24, - "docs": [ - "Code removal was denied because the code is still in use by at least one contract." - ] - }, - { - "name": "ContractReverted", - "index": 25, - "docs": [ - "The contract ran to completion but decided to revert its storage changes.", - "Please note that this error is only returned from extrinsics. When called directly", - "or via RPC an `Ok` will be returned. In this case the caller needs to inspect the flags", - "to determine whether a reversion has taken place." - ] - }, - { - "name": "CodeRejected", - "index": 26, - "docs": [ - "The contract's code was found to be invalid during validation.", - "", - "The most likely cause of this is that an API was used which is not supported by the", - "node. This happens if an older node is used with a new version of ink!. Try updating", - "your node to the newest available version.", - "", - "A more detailed error can be found on the node console if debug messages are enabled", - "by supplying `-lruntime::contracts=debug`." - ] - }, - { - "name": "Indeterministic", - "index": 27, - "docs": [ - "An indetermistic code was used in a context where this is not permitted." - ] - }, - { - "name": "MigrationInProgress", - "index": 28, - "docs": [ - "A pending migration needs to complete before the extrinsic can be called." - ] - }, - { - "name": "NoMigrationPerformed", - "index": 29, - "docs": [ - "Migrate dispatch call was attempted but no migration was performed." - ] - }, - { - "name": "MaxDelegateDependenciesReached", - "index": 30, - "docs": [ - "The contract has reached its maximum number of delegate dependencies." - ] - }, - { - "name": "DelegateDependencyNotFound", - "index": 31, - "docs": [ - "The dependency was not found in the contract's delegate dependencies." - ] - }, - { - "name": "DelegateDependencyAlreadyExists", - "index": 32, - "docs": [ - "The contract already depends on the given delegate dependency." - ] - }, - { - "name": "CannotAddSelfAsDelegateDependency", - "index": 33, - "docs": [ - "Can not add a delegate dependency to the code hash of the contract itself." - ] - } - ] - } - }, - "docs": [ - "The `Error` enum of this pallet." - ] - } - }, - { - "id": 131, - "type": { - "path": [ - "pallet_assets", - "types", - "AssetDetails" - ], - "params": [ - { - "name": "Balance", - "type": 6 - }, - { - "name": "AccountId", - "type": 0 - }, - { - "name": "DepositBalance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "owner", - "type": 0, - "typeName": "AccountId" - }, - { - "name": "issuer", - "type": 0, - "typeName": "AccountId" - }, - { - "name": "admin", - "type": 0, - "typeName": "AccountId" - }, - { - "name": "freezer", - "type": 0, - "typeName": "AccountId" - }, - { - "name": "supply", - "type": 6, - "typeName": "Balance" - }, - { - "name": "deposit", - "type": 6, - "typeName": "DepositBalance" - }, - { - "name": "min_balance", - "type": 6, - "typeName": "Balance" - }, - { - "name": "is_sufficient", - "type": 42, - "typeName": "bool" - }, - { - "name": "accounts", - "type": 4, - "typeName": "u32" - }, - { - "name": "sufficients", - "type": 4, - "typeName": "u32" - }, - { - "name": "approvals", - "type": 4, - "typeName": "u32" - }, - { - "name": "status", - "type": 132, - "typeName": "AssetStatus" - } - ] - } - } - } - }, - { - "id": 132, - "type": { - "path": [ - "pallet_assets", - "types", - "AssetStatus" - ], - "def": { - "variant": { - "variants": [ - { - "name": "Live", - "index": 0 - }, - { - "name": "Frozen", - "index": 1 - }, - { - "name": "Destroying", - "index": 2 - } - ] - } - } - } - }, - { - "id": 133, - "type": { - "def": { - "tuple": [ - 4, - 0 - ] - } - } - }, - { - "id": 134, - "type": { - "path": [ - "pallet_assets", - "types", - "AssetAccount" - ], - "params": [ - { - "name": "Balance", - "type": 6 - }, - { - "name": "DepositBalance", - "type": 6 - }, - { - "name": "Extra", - "type": 32 - }, - { - "name": "AccountId", - "type": 0 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "balance", - "type": 6, - "typeName": "Balance" - }, - { - "name": "status", - "type": 135, - "typeName": "AccountStatus" - }, - { - "name": "reason", - "type": 136, - "typeName": "ExistenceReason" - }, - { - "name": "extra", - "type": 32, - "typeName": "Extra" - } - ] - } - } - } - }, - { - "id": 135, - "type": { - "path": [ - "pallet_assets", - "types", - "AccountStatus" - ], - "def": { - "variant": { - "variants": [ - { - "name": "Liquid", - "index": 0 - }, - { - "name": "Frozen", - "index": 1 - }, - { - "name": "Blocked", - "index": 2 - } - ] - } - } - } - }, - { - "id": 136, - "type": { - "path": [ - "pallet_assets", - "types", - "ExistenceReason" - ], - "params": [ - { - "name": "Balance", - "type": 6 - }, - { - "name": "AccountId", - "type": 0 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Consumer", - "index": 0 - }, - { - "name": "Sufficient", - "index": 1 - }, - { - "name": "DepositHeld", - "fields": [ - { - "type": 6, - "typeName": "Balance" - } - ], - "index": 2 - }, - { - "name": "DepositRefunded", - "index": 3 - }, - { - "name": "DepositFrom", - "fields": [ - { - "type": 0, - "typeName": "AccountId" - }, - { - "type": 6, - "typeName": "Balance" - } - ], - "index": 4 - } - ] - } - } - } - }, - { - "id": 137, - "type": { - "def": { - "tuple": [ - 4, - 0, - 0 - ] - } - } - }, - { - "id": 138, - "type": { - "path": [ - "pallet_assets", - "types", - "Approval" - ], - "params": [ - { - "name": "Balance", - "type": 6 - }, - { - "name": "DepositBalance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "amount", - "type": 6, - "typeName": "Balance" - }, - { - "name": "deposit", - "type": 6, - "typeName": "DepositBalance" - } - ] - } - } - } - }, - { - "id": 139, - "type": { - "path": [ - "pallet_assets", - "types", - "AssetMetadata" - ], - "params": [ - { - "name": "DepositBalance", - "type": 6 - }, - { - "name": "BoundedString", - "type": 140 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "deposit", - "type": 6, - "typeName": "DepositBalance" - }, - { - "name": "name", - "type": 140, - "typeName": "BoundedString" - }, - { - "name": "symbol", - "type": 140, - "typeName": "BoundedString" - }, - { - "name": "decimals", - "type": 2, - "typeName": "u8" - }, - { - "name": "is_frozen", - "type": 42, - "typeName": "bool" - } - ] - } - } - } - }, - { - "id": 140, - "type": { - "path": [ - "bounded_collections", - "bounded_vec", - "BoundedVec" - ], - "params": [ - { - "name": "T", - "type": 2 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "type": 13, - "typeName": "Vec" - } - ] - } - } - } - }, - { - "id": 141, - "type": { - "path": [ - "pallet_assets", - "pallet", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "BalanceLow", - "index": 0, - "docs": [ - "Account balance must be greater than or equal to the transfer amount." - ] - }, - { - "name": "NoAccount", - "index": 1, - "docs": [ - "The account to alter does not exist." - ] - }, - { - "name": "NoPermission", - "index": 2, - "docs": [ - "The signing account has no permission to do the operation." - ] - }, - { - "name": "Unknown", - "index": 3, - "docs": [ - "The given asset ID is unknown." - ] - }, - { - "name": "Frozen", - "index": 4, - "docs": [ - "The origin account is frozen." - ] - }, - { - "name": "InUse", - "index": 5, - "docs": [ - "The asset ID is already taken." - ] - }, - { - "name": "BadWitness", - "index": 6, - "docs": [ - "Invalid witness data given." - ] - }, - { - "name": "MinBalanceZero", - "index": 7, - "docs": [ - "Minimum balance should be non-zero." - ] - }, - { - "name": "UnavailableConsumer", - "index": 8, - "docs": [ - "Unable to increment the consumer reference counters on the account. Either no provider", - "reference exists to allow a non-zero balance of a non-self-sufficient asset, or one", - "fewer then the maximum number of consumers has been reached." - ] - }, - { - "name": "BadMetadata", - "index": 9, - "docs": [ - "Invalid metadata given." - ] - }, - { - "name": "Unapproved", - "index": 10, - "docs": [ - "No approval exists that would allow the transfer." - ] - }, - { - "name": "WouldDie", - "index": 11, - "docs": [ - "The source account would not survive the transfer and it needs to stay alive." - ] - }, - { - "name": "AlreadyExists", - "index": 12, - "docs": [ - "The asset-account already exists." - ] - }, - { - "name": "NoDeposit", - "index": 13, - "docs": [ - "The asset-account doesn't have an associated deposit." - ] - }, - { - "name": "WouldBurn", - "index": 14, - "docs": [ - "The operation would result in funds being burned." - ] - }, - { - "name": "LiveAsset", - "index": 15, - "docs": [ - "The asset is a live asset and is actively being used. Usually emit for operations such", - "as `start_destroy` which require the asset to be in a destroying state." - ] - }, - { - "name": "AssetNotLive", - "index": 16, - "docs": [ - "The asset is not live, and likely being destroyed." - ] - }, - { - "name": "IncorrectStatus", - "index": 17, - "docs": [ - "The asset status is not the expected status." - ] - }, - { - "name": "NotFrozen", - "index": 18, - "docs": [ - "The asset should be frozen before the given operation." - ] - }, - { - "name": "CallbackFailed", - "index": 19, - "docs": [ - "Callback action resulted in error" - ] - } - ] - } - }, - "docs": [ - "The `Error` enum of this pallet." - ] - } - }, - { - "id": 142, - "type": { - "path": [ - "sp_runtime", - "MultiSignature" - ], - "def": { - "variant": { - "variants": [ - { - "name": "Ed25519", - "fields": [ - { - "type": 143, - "typeName": "ed25519::Signature" - } - ], - "index": 0 - }, - { - "name": "Sr25519", - "fields": [ - { - "type": 145, - "typeName": "sr25519::Signature" - } - ], - "index": 1 - }, - { - "name": "Ecdsa", - "fields": [ - { - "type": 146, - "typeName": "ecdsa::Signature" - } - ], - "index": 2 - } - ] - } - } - } - }, - { - "id": 143, - "type": { - "path": [ - "sp_core", - "ed25519", - "Signature" - ], - "def": { - "composite": { - "fields": [ - { - "type": 144, - "typeName": "[u8; 64]" - } - ] - } - } - } - }, - { - "id": 144, - "type": { - "def": { - "array": { - "len": 64, - "type": 2 - } - } - } - }, - { - "id": 145, - "type": { - "path": [ - "sp_core", - "sr25519", - "Signature" - ], - "def": { - "composite": { - "fields": [ - { - "type": 144, - "typeName": "[u8; 64]" - } - ] - } - } - } - }, - { - "id": 146, - "type": { - "path": [ - "sp_core", - "ecdsa", - "Signature" - ], - "def": { - "composite": { - "fields": [ - { - "type": 147, - "typeName": "[u8; 65]" - } - ] - } - } - } - }, - { - "id": 147, - "type": { - "def": { - "array": { - "len": 65, - "type": 2 - } - } - } - }, - { - "id": 148, - "type": { - "def": { - "tuple": [ - 149, - 150, - 151, - 152, - 153, - 155, - 156, - 157 - ] - } - } - }, - { - "id": 149, - "type": { - "path": [ - "frame_system", - "extensions", - "check_non_zero_sender", - "CheckNonZeroSender" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": {} - } - } - }, - { - "id": 150, - "type": { - "path": [ - "frame_system", - "extensions", - "check_spec_version", - "CheckSpecVersion" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": {} - } - } - }, - { - "id": 151, - "type": { - "path": [ - "frame_system", - "extensions", - "check_tx_version", - "CheckTxVersion" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": {} - } - } - }, - { - "id": 152, - "type": { - "path": [ - "frame_system", - "extensions", - "check_genesis", - "CheckGenesis" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": {} - } - } - }, - { - "id": 153, - "type": { - "path": [ - "frame_system", - "extensions", - "check_mortality", - "CheckMortality" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "type": 154, - "typeName": "Era" - } - ] - } - } - } - }, - { - "id": 154, - "type": { - "path": [ - "sp_runtime", - "generic", - "era", - "Era" - ], - "def": { - "variant": { - "variants": [ - { - "name": "Immortal", - "index": 0 - }, - { - "name": "Mortal1", - "fields": [ - { - "type": 2 - } - ], - "index": 1 - }, - { - "name": "Mortal2", - "fields": [ - { - "type": 2 - } - ], - "index": 2 - }, - { - "name": "Mortal3", - "fields": [ - { - "type": 2 - } - ], - "index": 3 - }, - { - "name": "Mortal4", - "fields": [ - { - "type": 2 - } - ], - "index": 4 - }, - { - "name": "Mortal5", - "fields": [ - { - "type": 2 - } - ], - "index": 5 - }, - { - "name": "Mortal6", - "fields": [ - { - "type": 2 - } - ], - "index": 6 - }, - { - "name": "Mortal7", - "fields": [ - { - "type": 2 - } - ], - "index": 7 - }, - { - "name": "Mortal8", - "fields": [ - { - "type": 2 - } - ], - "index": 8 - }, - { - "name": "Mortal9", - "fields": [ - { - "type": 2 - } - ], - "index": 9 - }, - { - "name": "Mortal10", - "fields": [ - { - "type": 2 - } - ], - "index": 10 - }, - { - "name": "Mortal11", - "fields": [ - { - "type": 2 - } - ], - "index": 11 - }, - { - "name": "Mortal12", - "fields": [ - { - "type": 2 - } - ], - "index": 12 - }, - { - "name": "Mortal13", - "fields": [ - { - "type": 2 - } - ], - "index": 13 - }, - { - "name": "Mortal14", - "fields": [ - { - "type": 2 - } - ], - "index": 14 - }, - { - "name": "Mortal15", - "fields": [ - { - "type": 2 - } - ], - "index": 15 - }, - { - "name": "Mortal16", - "fields": [ - { - "type": 2 - } - ], - "index": 16 - }, - { - "name": "Mortal17", - "fields": [ - { - "type": 2 - } - ], - "index": 17 - }, - { - "name": "Mortal18", - "fields": [ - { - "type": 2 - } - ], - "index": 18 - }, - { - "name": "Mortal19", - "fields": [ - { - "type": 2 - } - ], - "index": 19 - }, - { - "name": "Mortal20", - "fields": [ - { - "type": 2 - } - ], - "index": 20 - }, - { - "name": "Mortal21", - "fields": [ - { - "type": 2 - } - ], - "index": 21 - }, - { - "name": "Mortal22", - "fields": [ - { - "type": 2 - } - ], - "index": 22 - }, - { - "name": "Mortal23", - "fields": [ - { - "type": 2 - } - ], - "index": 23 - }, - { - "name": "Mortal24", - "fields": [ - { - "type": 2 - } - ], - "index": 24 - }, - { - "name": "Mortal25", - "fields": [ - { - "type": 2 - } - ], - "index": 25 - }, - { - "name": "Mortal26", - "fields": [ - { - "type": 2 - } - ], - "index": 26 - }, - { - "name": "Mortal27", - "fields": [ - { - "type": 2 - } - ], - "index": 27 - }, - { - "name": "Mortal28", - "fields": [ - { - "type": 2 - } - ], - "index": 28 - }, - { - "name": "Mortal29", - "fields": [ - { - "type": 2 - } - ], - "index": 29 - }, - { - "name": "Mortal30", - "fields": [ - { - "type": 2 - } - ], - "index": 30 - }, - { - "name": "Mortal31", - "fields": [ - { - "type": 2 - } - ], - "index": 31 - }, - { - "name": "Mortal32", - "fields": [ - { - "type": 2 - } - ], - "index": 32 - }, - { - "name": "Mortal33", - "fields": [ - { - "type": 2 - } - ], - "index": 33 - }, - { - "name": "Mortal34", - "fields": [ - { - "type": 2 - } - ], - "index": 34 - }, - { - "name": "Mortal35", - "fields": [ - { - "type": 2 - } - ], - "index": 35 - }, - { - "name": "Mortal36", - "fields": [ - { - "type": 2 - } - ], - "index": 36 - }, - { - "name": "Mortal37", - "fields": [ - { - "type": 2 - } - ], - "index": 37 - }, - { - "name": "Mortal38", - "fields": [ - { - "type": 2 - } - ], - "index": 38 - }, - { - "name": "Mortal39", - "fields": [ - { - "type": 2 - } - ], - "index": 39 - }, - { - "name": "Mortal40", - "fields": [ - { - "type": 2 - } - ], - "index": 40 - }, - { - "name": "Mortal41", - "fields": [ - { - "type": 2 - } - ], - "index": 41 - }, - { - "name": "Mortal42", - "fields": [ - { - "type": 2 - } - ], - "index": 42 - }, - { - "name": "Mortal43", - "fields": [ - { - "type": 2 - } - ], - "index": 43 - }, - { - "name": "Mortal44", - "fields": [ - { - "type": 2 - } - ], - "index": 44 - }, - { - "name": "Mortal45", - "fields": [ - { - "type": 2 - } - ], - "index": 45 - }, - { - "name": "Mortal46", - "fields": [ - { - "type": 2 - } - ], - "index": 46 - }, - { - "name": "Mortal47", - "fields": [ - { - "type": 2 - } - ], - "index": 47 - }, - { - "name": "Mortal48", - "fields": [ - { - "type": 2 - } - ], - "index": 48 - }, - { - "name": "Mortal49", - "fields": [ - { - "type": 2 - } - ], - "index": 49 - }, - { - "name": "Mortal50", - "fields": [ - { - "type": 2 - } - ], - "index": 50 - }, - { - "name": "Mortal51", - "fields": [ - { - "type": 2 - } - ], - "index": 51 - }, - { - "name": "Mortal52", - "fields": [ - { - "type": 2 - } - ], - "index": 52 - }, - { - "name": "Mortal53", - "fields": [ - { - "type": 2 - } - ], - "index": 53 - }, - { - "name": "Mortal54", - "fields": [ - { - "type": 2 - } - ], - "index": 54 - }, - { - "name": "Mortal55", - "fields": [ - { - "type": 2 - } - ], - "index": 55 - }, - { - "name": "Mortal56", - "fields": [ - { - "type": 2 - } - ], - "index": 56 - }, - { - "name": "Mortal57", - "fields": [ - { - "type": 2 - } - ], - "index": 57 - }, - { - "name": "Mortal58", - "fields": [ - { - "type": 2 - } - ], - "index": 58 - }, - { - "name": "Mortal59", - "fields": [ - { - "type": 2 - } - ], - "index": 59 - }, - { - "name": "Mortal60", - "fields": [ - { - "type": 2 - } - ], - "index": 60 - }, - { - "name": "Mortal61", - "fields": [ - { - "type": 2 - } - ], - "index": 61 - }, - { - "name": "Mortal62", - "fields": [ - { - "type": 2 - } - ], - "index": 62 - }, - { - "name": "Mortal63", - "fields": [ - { - "type": 2 - } - ], - "index": 63 - }, - { - "name": "Mortal64", - "fields": [ - { - "type": 2 - } - ], - "index": 64 - }, - { - "name": "Mortal65", - "fields": [ - { - "type": 2 - } - ], - "index": 65 - }, - { - "name": "Mortal66", - "fields": [ - { - "type": 2 - } - ], - "index": 66 - }, - { - "name": "Mortal67", - "fields": [ - { - "type": 2 - } - ], - "index": 67 - }, - { - "name": "Mortal68", - "fields": [ - { - "type": 2 - } - ], - "index": 68 - }, - { - "name": "Mortal69", - "fields": [ - { - "type": 2 - } - ], - "index": 69 - }, - { - "name": "Mortal70", - "fields": [ - { - "type": 2 - } - ], - "index": 70 - }, - { - "name": "Mortal71", - "fields": [ - { - "type": 2 - } - ], - "index": 71 - }, - { - "name": "Mortal72", - "fields": [ - { - "type": 2 - } - ], - "index": 72 - }, - { - "name": "Mortal73", - "fields": [ - { - "type": 2 - } - ], - "index": 73 - }, - { - "name": "Mortal74", - "fields": [ - { - "type": 2 - } - ], - "index": 74 - }, - { - "name": "Mortal75", - "fields": [ - { - "type": 2 - } - ], - "index": 75 - }, - { - "name": "Mortal76", - "fields": [ - { - "type": 2 - } - ], - "index": 76 - }, - { - "name": "Mortal77", - "fields": [ - { - "type": 2 - } - ], - "index": 77 - }, - { - "name": "Mortal78", - "fields": [ - { - "type": 2 - } - ], - "index": 78 - }, - { - "name": "Mortal79", - "fields": [ - { - "type": 2 - } - ], - "index": 79 - }, - { - "name": "Mortal80", - "fields": [ - { - "type": 2 - } - ], - "index": 80 - }, - { - "name": "Mortal81", - "fields": [ - { - "type": 2 - } - ], - "index": 81 - }, - { - "name": "Mortal82", - "fields": [ - { - "type": 2 - } - ], - "index": 82 - }, - { - "name": "Mortal83", - "fields": [ - { - "type": 2 - } - ], - "index": 83 - }, - { - "name": "Mortal84", - "fields": [ - { - "type": 2 - } - ], - "index": 84 - }, - { - "name": "Mortal85", - "fields": [ - { - "type": 2 - } - ], - "index": 85 - }, - { - "name": "Mortal86", - "fields": [ - { - "type": 2 - } - ], - "index": 86 - }, - { - "name": "Mortal87", - "fields": [ - { - "type": 2 - } - ], - "index": 87 - }, - { - "name": "Mortal88", - "fields": [ - { - "type": 2 - } - ], - "index": 88 - }, - { - "name": "Mortal89", - "fields": [ - { - "type": 2 - } - ], - "index": 89 - }, - { - "name": "Mortal90", - "fields": [ - { - "type": 2 - } - ], - "index": 90 - }, - { - "name": "Mortal91", - "fields": [ - { - "type": 2 - } - ], - "index": 91 - }, - { - "name": "Mortal92", - "fields": [ - { - "type": 2 - } - ], - "index": 92 - }, - { - "name": "Mortal93", - "fields": [ - { - "type": 2 - } - ], - "index": 93 - }, - { - "name": "Mortal94", - "fields": [ - { - "type": 2 - } - ], - "index": 94 - }, - { - "name": "Mortal95", - "fields": [ - { - "type": 2 - } - ], - "index": 95 - }, - { - "name": "Mortal96", - "fields": [ - { - "type": 2 - } - ], - "index": 96 - }, - { - "name": "Mortal97", - "fields": [ - { - "type": 2 - } - ], - "index": 97 - }, - { - "name": "Mortal98", - "fields": [ - { - "type": 2 - } - ], - "index": 98 - }, - { - "name": "Mortal99", - "fields": [ - { - "type": 2 - } - ], - "index": 99 - }, - { - "name": "Mortal100", - "fields": [ - { - "type": 2 - } - ], - "index": 100 - }, - { - "name": "Mortal101", - "fields": [ - { - "type": 2 - } - ], - "index": 101 - }, - { - "name": "Mortal102", - "fields": [ - { - "type": 2 - } - ], - "index": 102 - }, - { - "name": "Mortal103", - "fields": [ - { - "type": 2 - } - ], - "index": 103 - }, - { - "name": "Mortal104", - "fields": [ - { - "type": 2 - } - ], - "index": 104 - }, - { - "name": "Mortal105", - "fields": [ - { - "type": 2 - } - ], - "index": 105 - }, - { - "name": "Mortal106", - "fields": [ - { - "type": 2 - } - ], - "index": 106 - }, - { - "name": "Mortal107", - "fields": [ - { - "type": 2 - } - ], - "index": 107 - }, - { - "name": "Mortal108", - "fields": [ - { - "type": 2 - } - ], - "index": 108 - }, - { - "name": "Mortal109", - "fields": [ - { - "type": 2 - } - ], - "index": 109 - }, - { - "name": "Mortal110", - "fields": [ - { - "type": 2 - } - ], - "index": 110 - }, - { - "name": "Mortal111", - "fields": [ - { - "type": 2 - } - ], - "index": 111 - }, - { - "name": "Mortal112", - "fields": [ - { - "type": 2 - } - ], - "index": 112 - }, - { - "name": "Mortal113", - "fields": [ - { - "type": 2 - } - ], - "index": 113 - }, - { - "name": "Mortal114", - "fields": [ - { - "type": 2 - } - ], - "index": 114 - }, - { - "name": "Mortal115", - "fields": [ - { - "type": 2 - } - ], - "index": 115 - }, - { - "name": "Mortal116", - "fields": [ - { - "type": 2 - } - ], - "index": 116 - }, - { - "name": "Mortal117", - "fields": [ - { - "type": 2 - } - ], - "index": 117 - }, - { - "name": "Mortal118", - "fields": [ - { - "type": 2 - } - ], - "index": 118 - }, - { - "name": "Mortal119", - "fields": [ - { - "type": 2 - } - ], - "index": 119 - }, - { - "name": "Mortal120", - "fields": [ - { - "type": 2 - } - ], - "index": 120 - }, - { - "name": "Mortal121", - "fields": [ - { - "type": 2 - } - ], - "index": 121 - }, - { - "name": "Mortal122", - "fields": [ - { - "type": 2 - } - ], - "index": 122 - }, - { - "name": "Mortal123", - "fields": [ - { - "type": 2 - } - ], - "index": 123 - }, - { - "name": "Mortal124", - "fields": [ - { - "type": 2 - } - ], - "index": 124 - }, - { - "name": "Mortal125", - "fields": [ - { - "type": 2 - } - ], - "index": 125 - }, - { - "name": "Mortal126", - "fields": [ - { - "type": 2 - } - ], - "index": 126 - }, - { - "name": "Mortal127", - "fields": [ - { - "type": 2 - } - ], - "index": 127 - }, - { - "name": "Mortal128", - "fields": [ - { - "type": 2 - } - ], - "index": 128 - }, - { - "name": "Mortal129", - "fields": [ - { - "type": 2 - } - ], - "index": 129 - }, - { - "name": "Mortal130", - "fields": [ - { - "type": 2 - } - ], - "index": 130 - }, - { - "name": "Mortal131", - "fields": [ - { - "type": 2 - } - ], - "index": 131 - }, - { - "name": "Mortal132", - "fields": [ - { - "type": 2 - } - ], - "index": 132 - }, - { - "name": "Mortal133", - "fields": [ - { - "type": 2 - } - ], - "index": 133 - }, - { - "name": "Mortal134", - "fields": [ - { - "type": 2 - } - ], - "index": 134 - }, - { - "name": "Mortal135", - "fields": [ - { - "type": 2 - } - ], - "index": 135 - }, - { - "name": "Mortal136", - "fields": [ - { - "type": 2 - } - ], - "index": 136 - }, - { - "name": "Mortal137", - "fields": [ - { - "type": 2 - } - ], - "index": 137 - }, - { - "name": "Mortal138", - "fields": [ - { - "type": 2 - } - ], - "index": 138 - }, - { - "name": "Mortal139", - "fields": [ - { - "type": 2 - } - ], - "index": 139 - }, - { - "name": "Mortal140", - "fields": [ - { - "type": 2 - } - ], - "index": 140 - }, - { - "name": "Mortal141", - "fields": [ - { - "type": 2 - } - ], - "index": 141 - }, - { - "name": "Mortal142", - "fields": [ - { - "type": 2 - } - ], - "index": 142 - }, - { - "name": "Mortal143", - "fields": [ - { - "type": 2 - } - ], - "index": 143 - }, - { - "name": "Mortal144", - "fields": [ - { - "type": 2 - } - ], - "index": 144 - }, - { - "name": "Mortal145", - "fields": [ - { - "type": 2 - } - ], - "index": 145 - }, - { - "name": "Mortal146", - "fields": [ - { - "type": 2 - } - ], - "index": 146 - }, - { - "name": "Mortal147", - "fields": [ - { - "type": 2 - } - ], - "index": 147 - }, - { - "name": "Mortal148", - "fields": [ - { - "type": 2 - } - ], - "index": 148 - }, - { - "name": "Mortal149", - "fields": [ - { - "type": 2 - } - ], - "index": 149 - }, - { - "name": "Mortal150", - "fields": [ - { - "type": 2 - } - ], - "index": 150 - }, - { - "name": "Mortal151", - "fields": [ - { - "type": 2 - } - ], - "index": 151 - }, - { - "name": "Mortal152", - "fields": [ - { - "type": 2 - } - ], - "index": 152 - }, - { - "name": "Mortal153", - "fields": [ - { - "type": 2 - } - ], - "index": 153 - }, - { - "name": "Mortal154", - "fields": [ - { - "type": 2 - } - ], - "index": 154 - }, - { - "name": "Mortal155", - "fields": [ - { - "type": 2 - } - ], - "index": 155 - }, - { - "name": "Mortal156", - "fields": [ - { - "type": 2 - } - ], - "index": 156 - }, - { - "name": "Mortal157", - "fields": [ - { - "type": 2 - } - ], - "index": 157 - }, - { - "name": "Mortal158", - "fields": [ - { - "type": 2 - } - ], - "index": 158 - }, - { - "name": "Mortal159", - "fields": [ - { - "type": 2 - } - ], - "index": 159 - }, - { - "name": "Mortal160", - "fields": [ - { - "type": 2 - } - ], - "index": 160 - }, - { - "name": "Mortal161", - "fields": [ - { - "type": 2 - } - ], - "index": 161 - }, - { - "name": "Mortal162", - "fields": [ - { - "type": 2 - } - ], - "index": 162 - }, - { - "name": "Mortal163", - "fields": [ - { - "type": 2 - } - ], - "index": 163 - }, - { - "name": "Mortal164", - "fields": [ - { - "type": 2 - } - ], - "index": 164 - }, - { - "name": "Mortal165", - "fields": [ - { - "type": 2 - } - ], - "index": 165 - }, - { - "name": "Mortal166", - "fields": [ - { - "type": 2 - } - ], - "index": 166 - }, - { - "name": "Mortal167", - "fields": [ - { - "type": 2 - } - ], - "index": 167 - }, - { - "name": "Mortal168", - "fields": [ - { - "type": 2 - } - ], - "index": 168 - }, - { - "name": "Mortal169", - "fields": [ - { - "type": 2 - } - ], - "index": 169 - }, - { - "name": "Mortal170", - "fields": [ - { - "type": 2 - } - ], - "index": 170 - }, - { - "name": "Mortal171", - "fields": [ - { - "type": 2 - } - ], - "index": 171 - }, - { - "name": "Mortal172", - "fields": [ - { - "type": 2 - } - ], - "index": 172 - }, - { - "name": "Mortal173", - "fields": [ - { - "type": 2 - } - ], - "index": 173 - }, - { - "name": "Mortal174", - "fields": [ - { - "type": 2 - } - ], - "index": 174 - }, - { - "name": "Mortal175", - "fields": [ - { - "type": 2 - } - ], - "index": 175 - }, - { - "name": "Mortal176", - "fields": [ - { - "type": 2 - } - ], - "index": 176 - }, - { - "name": "Mortal177", - "fields": [ - { - "type": 2 - } - ], - "index": 177 - }, - { - "name": "Mortal178", - "fields": [ - { - "type": 2 - } - ], - "index": 178 - }, - { - "name": "Mortal179", - "fields": [ - { - "type": 2 - } - ], - "index": 179 - }, - { - "name": "Mortal180", - "fields": [ - { - "type": 2 - } - ], - "index": 180 - }, - { - "name": "Mortal181", - "fields": [ - { - "type": 2 - } - ], - "index": 181 - }, - { - "name": "Mortal182", - "fields": [ - { - "type": 2 - } - ], - "index": 182 - }, - { - "name": "Mortal183", - "fields": [ - { - "type": 2 - } - ], - "index": 183 - }, - { - "name": "Mortal184", - "fields": [ - { - "type": 2 - } - ], - "index": 184 - }, - { - "name": "Mortal185", - "fields": [ - { - "type": 2 - } - ], - "index": 185 - }, - { - "name": "Mortal186", - "fields": [ - { - "type": 2 - } - ], - "index": 186 - }, - { - "name": "Mortal187", - "fields": [ - { - "type": 2 - } - ], - "index": 187 - }, - { - "name": "Mortal188", - "fields": [ - { - "type": 2 - } - ], - "index": 188 - }, - { - "name": "Mortal189", - "fields": [ - { - "type": 2 - } - ], - "index": 189 - }, - { - "name": "Mortal190", - "fields": [ - { - "type": 2 - } - ], - "index": 190 - }, - { - "name": "Mortal191", - "fields": [ - { - "type": 2 - } - ], - "index": 191 - }, - { - "name": "Mortal192", - "fields": [ - { - "type": 2 - } - ], - "index": 192 - }, - { - "name": "Mortal193", - "fields": [ - { - "type": 2 - } - ], - "index": 193 - }, - { - "name": "Mortal194", - "fields": [ - { - "type": 2 - } - ], - "index": 194 - }, - { - "name": "Mortal195", - "fields": [ - { - "type": 2 - } - ], - "index": 195 - }, - { - "name": "Mortal196", - "fields": [ - { - "type": 2 - } - ], - "index": 196 - }, - { - "name": "Mortal197", - "fields": [ - { - "type": 2 - } - ], - "index": 197 - }, - { - "name": "Mortal198", - "fields": [ - { - "type": 2 - } - ], - "index": 198 - }, - { - "name": "Mortal199", - "fields": [ - { - "type": 2 - } - ], - "index": 199 - }, - { - "name": "Mortal200", - "fields": [ - { - "type": 2 - } - ], - "index": 200 - }, - { - "name": "Mortal201", - "fields": [ - { - "type": 2 - } - ], - "index": 201 - }, - { - "name": "Mortal202", - "fields": [ - { - "type": 2 - } - ], - "index": 202 - }, - { - "name": "Mortal203", - "fields": [ - { - "type": 2 - } - ], - "index": 203 - }, - { - "name": "Mortal204", - "fields": [ - { - "type": 2 - } - ], - "index": 204 - }, - { - "name": "Mortal205", - "fields": [ - { - "type": 2 - } - ], - "index": 205 - }, - { - "name": "Mortal206", - "fields": [ - { - "type": 2 - } - ], - "index": 206 - }, - { - "name": "Mortal207", - "fields": [ - { - "type": 2 - } - ], - "index": 207 - }, - { - "name": "Mortal208", - "fields": [ - { - "type": 2 - } - ], - "index": 208 - }, - { - "name": "Mortal209", - "fields": [ - { - "type": 2 - } - ], - "index": 209 - }, - { - "name": "Mortal210", - "fields": [ - { - "type": 2 - } - ], - "index": 210 - }, - { - "name": "Mortal211", - "fields": [ - { - "type": 2 - } - ], - "index": 211 - }, - { - "name": "Mortal212", - "fields": [ - { - "type": 2 - } - ], - "index": 212 - }, - { - "name": "Mortal213", - "fields": [ - { - "type": 2 - } - ], - "index": 213 - }, - { - "name": "Mortal214", - "fields": [ - { - "type": 2 - } - ], - "index": 214 - }, - { - "name": "Mortal215", - "fields": [ - { - "type": 2 - } - ], - "index": 215 - }, - { - "name": "Mortal216", - "fields": [ - { - "type": 2 - } - ], - "index": 216 - }, - { - "name": "Mortal217", - "fields": [ - { - "type": 2 - } - ], - "index": 217 - }, - { - "name": "Mortal218", - "fields": [ - { - "type": 2 - } - ], - "index": 218 - }, - { - "name": "Mortal219", - "fields": [ - { - "type": 2 - } - ], - "index": 219 - }, - { - "name": "Mortal220", - "fields": [ - { - "type": 2 - } - ], - "index": 220 - }, - { - "name": "Mortal221", - "fields": [ - { - "type": 2 - } - ], - "index": 221 - }, - { - "name": "Mortal222", - "fields": [ - { - "type": 2 - } - ], - "index": 222 - }, - { - "name": "Mortal223", - "fields": [ - { - "type": 2 - } - ], - "index": 223 - }, - { - "name": "Mortal224", - "fields": [ - { - "type": 2 - } - ], - "index": 224 - }, - { - "name": "Mortal225", - "fields": [ - { - "type": 2 - } - ], - "index": 225 - }, - { - "name": "Mortal226", - "fields": [ - { - "type": 2 - } - ], - "index": 226 - }, - { - "name": "Mortal227", - "fields": [ - { - "type": 2 - } - ], - "index": 227 - }, - { - "name": "Mortal228", - "fields": [ - { - "type": 2 - } - ], - "index": 228 - }, - { - "name": "Mortal229", - "fields": [ - { - "type": 2 - } - ], - "index": 229 - }, - { - "name": "Mortal230", - "fields": [ - { - "type": 2 - } - ], - "index": 230 - }, - { - "name": "Mortal231", - "fields": [ - { - "type": 2 - } - ], - "index": 231 - }, - { - "name": "Mortal232", - "fields": [ - { - "type": 2 - } - ], - "index": 232 - }, - { - "name": "Mortal233", - "fields": [ - { - "type": 2 - } - ], - "index": 233 - }, - { - "name": "Mortal234", - "fields": [ - { - "type": 2 - } - ], - "index": 234 - }, - { - "name": "Mortal235", - "fields": [ - { - "type": 2 - } - ], - "index": 235 - }, - { - "name": "Mortal236", - "fields": [ - { - "type": 2 - } - ], - "index": 236 - }, - { - "name": "Mortal237", - "fields": [ - { - "type": 2 - } - ], - "index": 237 - }, - { - "name": "Mortal238", - "fields": [ - { - "type": 2 - } - ], - "index": 238 - }, - { - "name": "Mortal239", - "fields": [ - { - "type": 2 - } - ], - "index": 239 - }, - { - "name": "Mortal240", - "fields": [ - { - "type": 2 - } - ], - "index": 240 - }, - { - "name": "Mortal241", - "fields": [ - { - "type": 2 - } - ], - "index": 241 - }, - { - "name": "Mortal242", - "fields": [ - { - "type": 2 - } - ], - "index": 242 - }, - { - "name": "Mortal243", - "fields": [ - { - "type": 2 - } - ], - "index": 243 - }, - { - "name": "Mortal244", - "fields": [ - { - "type": 2 - } - ], - "index": 244 - }, - { - "name": "Mortal245", - "fields": [ - { - "type": 2 - } - ], - "index": 245 - }, - { - "name": "Mortal246", - "fields": [ - { - "type": 2 - } - ], - "index": 246 - }, - { - "name": "Mortal247", - "fields": [ - { - "type": 2 - } - ], - "index": 247 - }, - { - "name": "Mortal248", - "fields": [ - { - "type": 2 - } - ], - "index": 248 - }, - { - "name": "Mortal249", - "fields": [ - { - "type": 2 - } - ], - "index": 249 - }, - { - "name": "Mortal250", - "fields": [ - { - "type": 2 - } - ], - "index": 250 - }, - { - "name": "Mortal251", - "fields": [ - { - "type": 2 - } - ], - "index": 251 - }, - { - "name": "Mortal252", - "fields": [ - { - "type": 2 - } - ], - "index": 252 - }, - { - "name": "Mortal253", - "fields": [ - { - "type": 2 - } - ], - "index": 253 - }, - { - "name": "Mortal254", - "fields": [ - { - "type": 2 - } - ], - "index": 254 - }, - { - "name": "Mortal255", - "fields": [ - { - "type": 2 - } - ], - "index": 255 - } - ] - } - } - } - }, - { - "id": 155, - "type": { - "path": [ - "frame_system", - "extensions", - "check_nonce", - "CheckNonce" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "type": 48, - "typeName": "T::Nonce" - } - ] - } - } - } - }, - { - "id": 156, - "type": { - "path": [ - "frame_system", - "extensions", - "check_weight", - "CheckWeight" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": {} - } - } - }, - { - "id": 157, - "type": { - "path": [ - "pallet_transaction_payment", - "ChargeTransactionPayment" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "type": 77, - "typeName": "BalanceOf" - } - ] - } - } - } - }, - { - "id": 158, - "type": { - "path": [ - "sp_runtime", - "generic", - "block", - "Block" - ], - "params": [ - { - "name": "Header", - "type": 159 - }, - { - "name": "Extrinsic", - "type": 160 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "header", - "type": 159, - "typeName": "Header" - }, - { - "name": "extrinsics", - "type": 161, - "typeName": "Vec" - } - ] - } - } - } - }, - { - "id": 159, - "type": { - "path": [ - "sp_runtime", - "generic", - "header", - "Header" - ], - "params": [ - { - "name": "Number", - "type": 4 - }, - { - "name": "Hash", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "parent_hash", - "type": 12, - "typeName": "Hash::Output" - }, - { - "name": "number", - "type": 48, - "typeName": "Number" - }, - { - "name": "state_root", - "type": 12, - "typeName": "Hash::Output" - }, - { - "name": "extrinsics_root", - "type": 12, - "typeName": "Hash::Output" - }, - { - "name": "digest", - "type": 14, - "typeName": "Digest" - } - ] - } - } - } - }, - { - "id": 160, - "type": { - "path": [ - "sp_runtime", - "generic", - "unchecked_extrinsic", - "UncheckedExtrinsic" - ], - "params": [ - { - "name": "Address", - "type": 74 - }, - { - "name": "Call", - "type": 71 - }, - { - "name": "Signature", - "type": 142 - }, - { - "name": "Extra", - "type": 148 - } - ], - "def": { - "composite": { - "fields": [ - { - "type": 13 - } - ] - } - } - } - }, - { - "id": 161, - "type": { - "def": { - "sequence": { - "type": 160 - } - } - } - }, - { - "id": 162, - "type": { - "path": [ - "sp_core", - "OpaqueMetadata" - ], - "def": { - "composite": { - "fields": [ - { - "type": 13, - "typeName": "Vec" - } - ] - } - } - } - }, - { - "id": 163, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 162 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "index": 0 - }, - { - "name": "Some", - "fields": [ - { - "type": 162 - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 164, - "type": { - "def": { - "sequence": { - "type": 4 - } - } - } - }, - { - "id": 165, - "type": { - "path": [ - "Result" - ], - "params": [ - { - "name": "T", - "type": 31 - }, - { - "name": "E", - "type": 166 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Ok", - "fields": [ - { - "type": 31 - } - ], - "index": 0 - }, - { - "name": "Err", - "fields": [ - { - "type": 166 - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 166, - "type": { - "path": [ - "sp_runtime", - "transaction_validity", - "TransactionValidityError" - ], - "def": { - "variant": { - "variants": [ - { - "name": "Invalid", - "fields": [ - { - "type": 167, - "typeName": "InvalidTransaction" - } - ], - "index": 0 - }, - { - "name": "Unknown", - "fields": [ - { - "type": 168, - "typeName": "UnknownTransaction" - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 167, - "type": { - "path": [ - "sp_runtime", - "transaction_validity", - "InvalidTransaction" - ], - "def": { - "variant": { - "variants": [ - { - "name": "Call", - "index": 0 - }, - { - "name": "Payment", - "index": 1 - }, - { - "name": "Future", - "index": 2 - }, - { - "name": "Stale", - "index": 3 - }, - { - "name": "BadProof", - "index": 4 - }, - { - "name": "AncientBirthBlock", - "index": 5 - }, - { - "name": "ExhaustsResources", - "index": 6 - }, - { - "name": "Custom", - "fields": [ - { - "type": 2, - "typeName": "u8" - } - ], - "index": 7 - }, - { - "name": "BadMandatory", - "index": 8 - }, - { - "name": "MandatoryValidation", - "index": 9 - }, - { - "name": "BadSigner", - "index": 10 - } - ] - } - } - } - }, - { - "id": 168, - "type": { - "path": [ - "sp_runtime", - "transaction_validity", - "UnknownTransaction" - ], - "def": { - "variant": { - "variants": [ - { - "name": "CannotLookup", - "index": 0 - }, - { - "name": "NoUnsignedValidator", - "index": 1 - }, - { - "name": "Custom", - "fields": [ - { - "type": 2, - "typeName": "u8" - } - ], - "index": 2 - } - ] - } - } - } - }, - { - "id": 169, - "type": { - "path": [ - "sp_inherents", - "InherentData" - ], - "def": { - "composite": { - "fields": [ - { - "name": "data", - "type": 170, - "typeName": "BTreeMap>" - } - ] - } - } - } - }, - { - "id": 170, - "type": { - "path": [ - "BTreeMap" - ], - "params": [ - { - "name": "K", - "type": 65 - }, - { - "name": "V", - "type": 13 - } - ], - "def": { - "composite": { - "fields": [ - { - "type": 171 - } - ] - } - } - } - }, - { - "id": 171, - "type": { - "def": { - "sequence": { - "type": 172 - } - } - } - }, - { - "id": 172, - "type": { - "def": { - "tuple": [ - 65, - 13 - ] - } - } - }, - { - "id": 173, - "type": { - "path": [ - "sp_inherents", - "CheckInherentsResult" - ], - "def": { - "composite": { - "fields": [ - { - "name": "okay", - "type": 42, - "typeName": "bool" - }, - { - "name": "fatal_error", - "type": 42, - "typeName": "bool" - }, - { - "name": "errors", - "type": 169, - "typeName": "InherentData" - } - ] - } - } - } - }, - { - "id": 174, - "type": { - "path": [ - "sp_runtime", - "transaction_validity", - "TransactionSource" - ], - "def": { - "variant": { - "variants": [ - { - "name": "InBlock", - "index": 0 - }, - { - "name": "Local", - "index": 1 - }, - { - "name": "External", - "index": 2 - } - ] - } - } - } - }, - { - "id": 175, - "type": { - "path": [ - "Result" - ], - "params": [ - { - "name": "T", - "type": 176 - }, - { - "name": "E", - "type": 166 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Ok", - "fields": [ - { - "type": 176 - } - ], - "index": 0 - }, - { - "name": "Err", - "fields": [ - { - "type": 166 - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 176, - "type": { - "path": [ - "sp_runtime", - "transaction_validity", - "ValidTransaction" - ], - "def": { - "composite": { - "fields": [ - { - "name": "priority", - "type": 11, - "typeName": "TransactionPriority" - }, - { - "name": "requires", - "type": 53, - "typeName": "Vec" - }, - { - "name": "provides", - "type": 53, - "typeName": "Vec" - }, - { - "name": "longevity", - "type": 11, - "typeName": "TransactionLongevity" - }, - { - "name": "propagate", - "type": 42, - "typeName": "bool" - } - ] - } - } - } - }, - { - "id": 177, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 13 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "index": 0 - }, - { - "name": "Some", - "fields": [ - { - "type": 13 - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 178, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 179 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "index": 0 - }, - { - "name": "Some", - "fields": [ - { - "type": 179 - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 179, - "type": { - "def": { - "sequence": { - "type": 180 - } - } - } - }, - { - "id": 180, - "type": { - "def": { - "tuple": [ - 13, - 181 - ] - } - } - }, - { - "id": 181, - "type": { - "path": [ - "sp_core", - "crypto", - "KeyTypeId" - ], - "def": { - "composite": { - "fields": [ - { - "type": 17, - "typeName": "[u8; 4]" - } - ] - } - } - } - }, - { - "id": 182, - "type": { - "path": [ - "pallet_transaction_payment", - "types", - "RuntimeDispatchInfo" - ], - "params": [ - { - "name": "Balance", - "type": 6 - }, - { - "name": "Weight", - "type": 9 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "weight", - "type": 9, - "typeName": "Weight" - }, - { - "name": "class", - "type": 23, - "typeName": "DispatchClass" - }, - { - "name": "partial_fee", - "type": 6, - "typeName": "Balance" - } - ] - } - } - } - }, - { - "id": 183, - "type": { - "path": [ - "pallet_transaction_payment", - "types", - "FeeDetails" - ], - "params": [ - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "inclusion_fee", - "type": 184, - "typeName": "Option>" - }, - { - "name": "tip", - "type": 6, - "typeName": "Balance" - } - ] - } - } - } - }, - { - "id": 184, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 185 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "index": 0 - }, - { - "name": "Some", - "fields": [ - { - "type": 185 - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 185, - "type": { - "path": [ - "pallet_transaction_payment", - "types", - "InclusionFee" - ], - "params": [ - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "base_fee", - "type": 6, - "typeName": "Balance" - }, - { - "name": "len_fee", - "type": 6, - "typeName": "Balance" - }, - { - "name": "adjusted_weight_fee", - "type": 6, - "typeName": "Balance" - } - ] - } - } - } - }, - { - "id": 186, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 6 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "index": 0 - }, - { - "name": "Some", - "fields": [ - { - "type": 6 - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 187, - "type": { - "path": [ - "pallet_contracts_primitives", - "ContractResult" - ], - "params": [ - { - "name": "R", - "type": 188 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "EventRecord", - "type": 19 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "gas_consumed", - "type": 9, - "typeName": "Weight" - }, - { - "name": "gas_required", - "type": 9, - "typeName": "Weight" - }, - { - "name": "storage_deposit", - "type": 191, - "typeName": "StorageDeposit" - }, - { - "name": "debug_message", - "type": 13, - "typeName": "Vec" - }, - { - "name": "result", - "type": 188, - "typeName": "R" - }, - { - "name": "events", - "type": 192, - "typeName": "Option>" - } - ] - } - } - } - }, - { - "id": 188, - "type": { - "path": [ - "Result" - ], - "params": [ - { - "name": "T", - "type": 189 - }, - { - "name": "E", - "type": 25 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Ok", - "fields": [ - { - "type": 189 - } - ], - "index": 0 - }, - { - "name": "Err", - "fields": [ - { - "type": 25 - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 189, - "type": { - "path": [ - "pallet_contracts_primitives", - "ExecReturnValue" - ], - "def": { - "composite": { - "fields": [ - { - "name": "flags", - "type": 190, - "typeName": "ReturnFlags" - }, - { - "name": "data", - "type": 13, - "typeName": "Vec" - } - ] - } - } - } - }, - { - "id": 190, - "type": { - "path": [ - "pallet_contracts_primitives", - "ReturnFlags" - ], - "def": { - "composite": { - "fields": [ - { - "name": "bits", - "type": 4, - "typeName": "u32" - } - ] - } - } - } - }, - { - "id": 191, - "type": { - "path": [ - "pallet_contracts_primitives", - "StorageDeposit" - ], - "params": [ - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Refund", - "fields": [ - { - "type": 6, - "typeName": "Balance" - } - ], - "index": 0 - }, - { - "name": "Charge", - "fields": [ - { - "type": 6, - "typeName": "Balance" - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 192, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 193 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "index": 0 - }, - { - "name": "Some", - "fields": [ - { - "type": 193 - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 193, - "type": { - "def": { - "sequence": { - "type": 19 - } - } - } - }, - { - "id": 194, - "type": { - "path": [ - "pallet_contracts_primitives", - "Code" - ], - "params": [ - { - "name": "Hash", - "type": 12 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Upload", - "fields": [ - { - "type": 13, - "typeName": "Vec" - } - ], - "index": 0 - }, - { - "name": "Existing", - "fields": [ - { - "type": 12, - "typeName": "Hash" - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 195, - "type": { - "path": [ - "pallet_contracts_primitives", - "ContractResult" - ], - "params": [ - { - "name": "R", - "type": 196 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "EventRecord", - "type": 19 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "gas_consumed", - "type": 9, - "typeName": "Weight" - }, - { - "name": "gas_required", - "type": 9, - "typeName": "Weight" - }, - { - "name": "storage_deposit", - "type": 191, - "typeName": "StorageDeposit" - }, - { - "name": "debug_message", - "type": 13, - "typeName": "Vec" - }, - { - "name": "result", - "type": 196, - "typeName": "R" - }, - { - "name": "events", - "type": 192, - "typeName": "Option>" - } - ] - } - } - } - }, - { - "id": 196, - "type": { - "path": [ - "Result" - ], - "params": [ - { - "name": "T", - "type": 197 - }, - { - "name": "E", - "type": 25 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Ok", - "fields": [ - { - "type": 197 - } - ], - "index": 0 - }, - { - "name": "Err", - "fields": [ - { - "type": 25 - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 197, - "type": { - "path": [ - "pallet_contracts_primitives", - "InstantiateReturnValue" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "result", - "type": 189, - "typeName": "ExecReturnValue" - }, - { - "name": "account_id", - "type": 0, - "typeName": "AccountId" - } - ] - } - } - } - }, - { - "id": 198, - "type": { - "path": [ - "Result" - ], - "params": [ - { - "name": "T", - "type": 199 - }, - { - "name": "E", - "type": 25 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Ok", - "fields": [ - { - "type": 199 - } - ], - "index": 0 - }, - { - "name": "Err", - "fields": [ - { - "type": 25 - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 199, - "type": { - "path": [ - "pallet_contracts_primitives", - "CodeUploadReturnValue" - ], - "params": [ - { - "name": "CodeHash", - "type": 12 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "code_hash", - "type": 12, - "typeName": "CodeHash" - }, - { - "name": "deposit", - "type": 6, - "typeName": "Balance" - } - ] - } - } - } - }, - { - "id": 200, - "type": { - "path": [ - "Result" - ], - "params": [ - { - "name": "T", - "type": 177 - }, - { - "name": "E", - "type": 201 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Ok", - "fields": [ - { - "type": 177 - } - ], - "index": 0 - }, - { - "name": "Err", - "fields": [ - { - "type": 201 - } - ], - "index": 1 - } - ] - } - } - } - }, - { - "id": 201, - "type": { - "path": [ - "pallet_contracts_primitives", - "ContractAccessError" - ], - "def": { - "variant": { - "variants": [ - { - "name": "DoesntExist", - "index": 0 - }, - { - "name": "KeyDecodingFailed", - "index": 1 - }, - { - "name": "MigrationInProgress", - "index": 2 - } - ] - } - } - } - }, - { - "id": 202, - "type": { - "path": [ - "contracts_node_runtime", - "RuntimeError" - ], - "def": { - "variant": { - "variants": [ - { - "name": "System", - "fields": [ - { - "type": 67, - "typeName": "frame_system::Error" - } - ], - "index": 0 - }, - { - "name": "Utility", - "fields": [ - { - "type": 87, - "typeName": "pallet_utility::Error" - } - ], - "index": 2 - }, - { - "name": "Balances", - "fields": [ - { - "type": 103, - "typeName": "pallet_balances::Error" - } - ], - "index": 4 - }, - { - "name": "Sudo", - "fields": [ - { - "type": 106, - "typeName": "pallet_sudo::Error" - } - ], - "index": 7 - }, - { - "name": "Contracts", - "fields": [ - { - "type": 130, - "typeName": "pallet_contracts::Error" - } - ], - "index": 8 - }, - { - "name": "Assets", - "fields": [ - { - "type": 141, - "typeName": "pallet_assets::Error" - } - ], - "index": 9 - } - ] - } - } - } - } - ] - }, - "pallets": [ - { - "name": "System", - "storage": { - "prefix": "System", - "entries": [ - { - "name": "Account", - "modifier": "Default", - "ty": { - "Map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 0, - "value": 3 - } - }, - "default": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 128 - ], - "docs": [ - " The full account information for a particular account ID." - ] - }, - { - "name": "ExtrinsicCount", - "modifier": "Optional", - "ty": { - "Plain": 4 - }, - "default": [ - 0 - ], - "docs": [ - " Total extrinsics count for the current block." - ] - }, - { - "name": "BlockWeight", - "modifier": "Default", - "ty": { - "Plain": 8 - }, - "default": [ - 0, - 0, - 0, - 0, - 0, - 0 - ], - "docs": [ - " The current weight for the block." - ] - }, - { - "name": "AllExtrinsicsLen", - "modifier": "Optional", - "ty": { - "Plain": 4 - }, - "default": [ - 0 - ], - "docs": [ - " Total length (in bytes) for all extrinsics put together, for the current block." - ] - }, - { - "name": "BlockHash", - "modifier": "Default", - "ty": { - "Map": { - "hashers": [ - "Twox64Concat" - ], - "key": 4, - "value": 12 - } - }, - "default": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "docs": [ - " Map of block numbers to block hashes." - ] - }, - { - "name": "ExtrinsicData", - "modifier": "Default", - "ty": { - "Map": { - "hashers": [ - "Twox64Concat" - ], - "key": 4, - "value": 13 - } - }, - "default": [ - 0 - ], - "docs": [ - " Extrinsics data for the current block (maps an extrinsic's index to its data)." - ] - }, - { - "name": "Number", - "modifier": "Default", - "ty": { - "Plain": 4 - }, - "default": [ - 0, - 0, - 0, - 0 - ], - "docs": [ - " The current block number being processed. Set by `execute_block`." - ] - }, - { - "name": "ParentHash", - "modifier": "Default", - "ty": { - "Plain": 12 - }, - "default": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "docs": [ - " Hash of the previous block." - ] - }, - { - "name": "Digest", - "modifier": "Default", - "ty": { - "Plain": 14 - }, - "default": [ - 0 - ], - "docs": [ - " Digest of the current block, also part of the block header." - ] - }, - { - "name": "Events", - "modifier": "Default", - "ty": { - "Plain": 18 - }, - "default": [ - 0 - ], - "docs": [ - " Events deposited for the current block.", - "", - " NOTE: The item is unbound and should therefore never be read on chain.", - " It could otherwise inflate the PoV size of a block.", - "", - " Events have a large in-memory size. Box the events to not go out-of-memory", - " just in case someone still reads them from within the runtime." - ] - }, - { - "name": "EventCount", - "modifier": "Default", - "ty": { - "Plain": 4 - }, - "default": [ - 0, - 0, - 0, - 0 - ], - "docs": [ - " The number of events in the `Events` list." - ] - }, - { - "name": "EventTopics", - "modifier": "Default", - "ty": { - "Map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 12, - "value": 45 - } - }, - "default": [ - 0 - ], - "docs": [ - " Mapping between a topic (represented by T::Hash) and a vector of indexes", - " of events in the `>` list.", - "", - " All topic vectors have deterministic storage locations depending on the topic. This", - " allows light-clients to leverage the changes trie storage tracking mechanism and", - " in case of changes fetch the list of events of interest.", - "", - " The value has the type `(BlockNumberFor, EventIndex)` because if we used only just", - " the `EventIndex` then in case if the topic has the same contents on the next block", - " no notification will be triggered thus the event might be lost." - ] - }, - { - "name": "LastRuntimeUpgrade", - "modifier": "Optional", - "ty": { - "Plain": 47 - }, - "default": [ - 0 - ], - "docs": [ - " Stores the `spec_version` and `spec_name` of when the last runtime upgrade happened." - ] - }, - { - "name": "UpgradedToU32RefCount", - "modifier": "Default", - "ty": { - "Plain": 42 - }, - "default": [ - 0 - ], - "docs": [ - " True if we have upgraded so that `type RefCount` is `u32`. False (default) if not." - ] - }, - { - "name": "UpgradedToTripleRefCount", - "modifier": "Default", - "ty": { - "Plain": 42 - }, - "default": [ - 0 - ], - "docs": [ - " True if we have upgraded so that AccountInfo contains three types of `RefCount`. False", - " (default) if not." - ] - }, - { - "name": "ExecutionPhase", - "modifier": "Optional", - "ty": { - "Plain": 43 - }, - "default": [ - 0 - ], - "docs": [ - " The execution phase of the block." - ] - } - ] - }, - "calls": { - "ty": 50 - }, - "event": { - "ty": 21 - }, - "constants": [ - { - "name": "BlockWeights", - "ty": 54, - "value": [ - 2, - 91, - 31, - 93, - 0, - 11, - 0, - 32, - 74, - 169, - 209, - 1, - 19, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 194, - 160, - 169, - 29, - 0, - 1, - 11, - 208, - 95, - 159, - 166, - 46, - 1, - 19, - 102, - 102, - 102, - 102, - 102, - 102, - 102, - 166, - 1, - 11, - 0, - 152, - 247, - 62, - 93, - 1, - 19, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 191, - 1, - 0, - 0, - 194, - 160, - 169, - 29, - 0, - 1, - 11, - 208, - 231, - 241, - 16, - 163, - 1, - 19, - 102, - 102, - 102, - 102, - 102, - 102, - 102, - 230, - 1, - 11, - 0, - 32, - 74, - 169, - 209, - 1, - 19, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 1, - 7, - 0, - 136, - 82, - 106, - 116, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 64, - 194, - 160, - 169, - 29, - 0, - 0, - 0, - 0 - ], - "docs": [ - " Block & extrinsics weights: base values and limits." - ] - }, - { - "name": "BlockLength", - "ty": 58, - "value": [ - 0, - 0, - 60, - 0, - 0, - 0, - 80, - 0, - 0, - 0, - 80, - 0 - ], - "docs": [ - " The maximum length of a block (in bytes)." - ] - }, - { - "name": "BlockHashCount", - "ty": 4, - "value": [ - 96, - 9, - 0, - 0 - ], - "docs": [ - " Maximum number of block number to block hash mappings to keep (oldest pruned first)." - ] - }, - { - "name": "DbWeight", - "ty": 60, - "value": [ - 64, - 120, - 125, - 1, - 0, - 0, - 0, - 0, - 0, - 225, - 245, - 5, - 0, - 0, - 0, - 0 - ], - "docs": [ - " The weight of runtime database operations the runtime can invoke." - ] - }, - { - "name": "Version", - "ty": 61, - "value": [ - 96, - 115, - 117, - 98, - 115, - 116, - 114, - 97, - 116, - 101, - 45, - 99, - 111, - 110, - 116, - 114, - 97, - 99, - 116, - 115, - 45, - 110, - 111, - 100, - 101, - 96, - 115, - 117, - 98, - 115, - 116, - 114, - 97, - 116, - 101, - 45, - 99, - 111, - 110, - 116, - 114, - 97, - 99, - 116, - 115, - 45, - 110, - 111, - 100, - 101, - 1, - 0, - 0, - 0, - 100, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 40, - 223, - 106, - 203, - 104, - 153, - 7, - 96, - 155, - 4, - 0, - 0, - 0, - 55, - 227, - 151, - 252, - 124, - 145, - 245, - 228, - 2, - 0, - 0, - 0, - 64, - 254, - 58, - 212, - 1, - 248, - 149, - 154, - 6, - 0, - 0, - 0, - 210, - 188, - 152, - 151, - 238, - 208, - 143, - 21, - 3, - 0, - 0, - 0, - 247, - 139, - 39, - 139, - 229, - 63, - 69, - 76, - 2, - 0, - 0, - 0, - 171, - 60, - 5, - 114, - 41, - 31, - 235, - 139, - 1, - 0, - 0, - 0, - 188, - 157, - 137, - 144, - 79, - 91, - 146, - 63, - 1, - 0, - 0, - 0, - 55, - 200, - 187, - 19, - 80, - 169, - 162, - 168, - 4, - 0, - 0, - 0, - 243, - 255, - 20, - 213, - 171, - 82, - 112, - 89, - 3, - 0, - 0, - 0, - 104, - 182, - 107, - 161, - 34, - 201, - 63, - 167, - 2, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1 - ], - "docs": [ - " Get the chain's current version." - ] - }, - { - "name": "SS58Prefix", - "ty": 66, - "value": [ - 42, - 0 - ], - "docs": [ - " The designated SS58 prefix of this chain.", - "", - " This replaces the \"ss58Format\" property declared in the chain spec. Reason is", - " that the runtime should know about the prefix in order to make use of it as", - " an identifier of the chain." - ] - } - ], - "error": { - "ty": 67 - }, - "index": 0, - "docs": [] - }, - { - "name": "RandomnessCollectiveFlip", - "storage": { - "prefix": "RandomnessCollectiveFlip", - "entries": [ - { - "name": "RandomMaterial", - "modifier": "Default", - "ty": { - "Plain": 68 - }, - "default": [ - 0 - ], - "docs": [ - " Series of block headers from the last 81 blocks that acts as random seed material. This", - " is arranged as a ring buffer with `block_number % 81` being the index into the `Vec` of", - " the oldest hash." - ] - } - ] - }, - "calls": null, - "event": null, - "constants": [], - "error": null, - "index": 1, - "docs": [] - }, - { - "name": "Utility", - "storage": null, - "calls": { - "ty": 69 - }, - "event": { - "ty": 30 - }, - "constants": [ - { - "name": "batched_calls_limit", - "ty": 4, - "value": [ - 170, - 42, - 0, - 0 - ], - "docs": [ - " The limit on the number of batched calls." - ] - } - ], - "error": { - "ty": 87 - }, - "index": 2, - "docs": [] - }, - { - "name": "Timestamp", - "storage": { - "prefix": "Timestamp", - "entries": [ - { - "name": "Now", - "modifier": "Default", - "ty": { - "Plain": 11 - }, - "default": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "docs": [ - " The current time for the current block." - ] - }, - { - "name": "DidUpdate", - "modifier": "Default", - "ty": { - "Plain": 42 - }, - "default": [ - 0 - ], - "docs": [ - " Whether the timestamp has been updated in this block.", - "", - " This value is updated to `true` upon successful submission of a timestamp by a node.", - " It is then checked at the end of each block execution in the `on_finalize` hook." - ] - } - ] - }, - "calls": { - "ty": 72 - }, - "event": null, - "constants": [ - { - "name": "MinimumPeriod", - "ty": 11, - "value": [ - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "docs": [ - " The minimum period between blocks.", - "", - " Be aware that this is different to the *expected* period that the block production", - " apparatus provides. Your chosen consensus system will generally work with this to", - " determine a sensible block time. For example, in the Aura pallet it will be double this", - " period on default settings." - ] - } - ], - "error": null, - "index": 3, - "docs": [] - }, - { - "name": "Balances", - "storage": { - "prefix": "Balances", - "entries": [ - { - "name": "TotalIssuance", - "modifier": "Default", - "ty": { - "Plain": 6 - }, - "default": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "docs": [ - " The total units issued in the system." - ] - }, - { - "name": "InactiveIssuance", - "modifier": "Default", - "ty": { - "Plain": 6 - }, - "default": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "docs": [ - " The total units of outstanding deactivated balance in the system." - ] - }, - { - "name": "Account", - "modifier": "Default", - "ty": { - "Map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 0, - "value": 5 - } - }, - "default": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 128 - ], - "docs": [ - " The Balances pallet example of storing the balance of an account.", - "", - " # Example", - "", - " ```nocompile", - " impl pallet_balances::Config for Runtime {", - " type AccountStore = StorageMapShim, frame_system::Provider, AccountId, Self::AccountData>", - " }", - " ```", - "", - " You can also store the balance of an account in the `System` pallet.", - "", - " # Example", - "", - " ```nocompile", - " impl pallet_balances::Config for Runtime {", - " type AccountStore = System", - " }", - " ```", - "", - " But this comes with tradeoffs, storing account balances in the system pallet stores", - " `frame_system` data alongside the account data contrary to storing account balances in the", - " `Balances` pallet, which uses a `StorageMap` to store balances data only.", - " NOTE: This is only used in the case that this pallet is used to store balances." - ] - }, - { - "name": "Locks", - "modifier": "Default", - "ty": { - "Map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 0, - "value": 88 - } - }, - "default": [ - 0 - ], - "docs": [ - " Any liquidity locks on some account balances.", - " NOTE: Should only be accessed when setting, changing and freeing a lock." - ] - }, - { - "name": "Reserves", - "modifier": "Default", - "ty": { - "Map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 0, - "value": 92 - } - }, - "default": [ - 0 - ], - "docs": [ - " Named reserves on some account balances." - ] - }, - { - "name": "Holds", - "modifier": "Default", - "ty": { - "Map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 0, - "value": 95 - } - }, - "default": [ - 0 - ], - "docs": [ - " Holds on account balances." - ] - }, - { - "name": "Freezes", - "modifier": "Default", - "ty": { - "Map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 0, - "value": 100 - } - }, - "default": [ - 0 - ], - "docs": [ - " Freeze locks on account balances." - ] - } - ] - }, - "calls": { - "ty": 73 - }, - "event": { - "ty": 33 - }, - "constants": [ - { - "name": "ExistentialDeposit", - "ty": 6, - "value": [ - 0, - 202, - 154, - 59, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "docs": [ - " The minimum amount required to keep an account open. MUST BE GREATER THAN ZERO!", - "", - " If you *really* need it to be zero, you can enable the feature `insecure_zero_ed` for", - " this pallet. However, you do so at your own risk: this will open up a major DoS vector.", - " In case you have multiple sources of provider references, you may also get unexpected", - " behaviour if you set this to zero.", - "", - " Bottom line: Do yourself a favour and make it at least one!" - ] - }, - { - "name": "MaxLocks", - "ty": 4, - "value": [ - 50, - 0, - 0, - 0 - ], - "docs": [ - " The maximum number of locks that should exist on an account.", - " Not strictly enforced, but used for weight estimation." - ] - }, - { - "name": "MaxReserves", - "ty": 4, - "value": [ - 50, - 0, - 0, - 0 - ], - "docs": [ - " The maximum number of named reserves that can exist on an account." - ] - }, - { - "name": "MaxHolds", - "ty": 4, - "value": [ - 2, - 0, - 0, - 0 - ], - "docs": [ - " The maximum number of holds that can exist on an account at any time." - ] - }, - { - "name": "MaxFreezes", - "ty": 4, - "value": [ - 0, - 0, - 0, - 0 - ], - "docs": [ - " The maximum number of individual freeze locks that can exist on an account at any time." - ] - } - ], - "error": { - "ty": 103 - }, - "index": 4, - "docs": [] - }, - { - "name": "Authorship", - "storage": { - "prefix": "Authorship", - "entries": [ - { - "name": "Author", - "modifier": "Optional", - "ty": { - "Plain": 0 - }, - "default": [ - 0 - ], - "docs": [ - " Author of current block." - ] - } - ] - }, - "calls": null, - "event": null, - "constants": [], - "error": null, - "index": 5, - "docs": [] - }, - { - "name": "TransactionPayment", - "storage": { - "prefix": "TransactionPayment", - "entries": [ - { - "name": "NextFeeMultiplier", - "modifier": "Default", - "ty": { - "Plain": 104 - }, - "default": [ - 0, - 0, - 100, - 167, - 179, - 182, - 224, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "docs": [] - }, - { - "name": "StorageVersion", - "modifier": "Default", - "ty": { - "Plain": 105 - }, - "default": [ - 0 - ], - "docs": [] - } - ] - }, - "calls": null, - "event": { - "ty": 35 - }, - "constants": [ - { - "name": "OperationalFeeMultiplier", - "ty": 2, - "value": [ - 5 - ], - "docs": [ - " A fee mulitplier for `Operational` extrinsics to compute \"virtual tip\" to boost their", - " `priority`", - "", - " This value is multipled by the `final_fee` to obtain a \"virtual tip\" that is later", - " added to a tip component in regular `priority` calculations.", - " It means that a `Normal` transaction can front-run a similarly-sized `Operational`", - " extrinsic (with no tip), by including a tip value greater than the virtual tip.", - "", - " ```rust,ignore", - " // For `Normal`", - " let priority = priority_calc(tip);", - "", - " // For `Operational`", - " let virtual_tip = (inclusion_fee + tip) * OperationalFeeMultiplier;", - " let priority = priority_calc(tip + virtual_tip);", - " ```", - "", - " Note that since we use `final_fee` the multiplier applies also to the regular `tip`", - " sent with the transaction. So, not only does the transaction get a priority bump based", - " on the `inclusion_fee`, but we also amplify the impact of tips applied to `Operational`", - " transactions." - ] - } - ], - "error": null, - "index": 6, - "docs": [] - }, - { - "name": "Sudo", - "storage": { - "prefix": "Sudo", - "entries": [ - { - "name": "Key", - "modifier": "Optional", - "ty": { - "Plain": 0 - }, - "default": [ - 0 - ], - "docs": [ - " The `AccountId` of the sudo key." - ] - } - ] - }, - "calls": { - "ty": 79 - }, - "event": { - "ty": 36 - }, - "constants": [], - "error": { - "ty": 106 - }, - "index": 7, - "docs": [] - }, - { - "name": "Contracts", - "storage": { - "prefix": "Contracts", - "entries": [ - { - "name": "PristineCode", - "modifier": "Optional", - "ty": { - "Map": { - "hashers": [ - "Identity" - ], - "key": 12, - "value": 107 - } - }, - "default": [ - 0 - ], - "docs": [ - " A mapping from a contract's code hash to its code." - ] - }, - { - "name": "CodeInfoOf", - "modifier": "Optional", - "ty": { - "Map": { - "hashers": [ - "Identity" - ], - "key": 12, - "value": 108 - } - }, - "default": [ - 0 - ], - "docs": [ - " A mapping from a contract's code hash to its code info." - ] - }, - { - "name": "Nonce", - "modifier": "Default", - "ty": { - "Plain": 11 - }, - "default": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "docs": [ - " This is a **monotonic** counter incremented on contract instantiation.", - "", - " This is used in order to generate unique trie ids for contracts.", - " The trie id of a new contract is calculated from hash(account_id, nonce).", - " The nonce is required because otherwise the following sequence would lead to", - " a possible collision of storage:", - "", - " 1. Create a new contract.", - " 2. Terminate the contract.", - " 3. Immediately recreate the contract with the same account_id.", - "", - " This is bad because the contents of a trie are deleted lazily and there might be", - " storage of the old instantiation still in it when the new contract is created. Please", - " note that we can't replace the counter by the block number because the sequence above", - " can happen in the same block. We also can't keep the account counter in memory only", - " because storage is the only way to communicate across different extrinsics in the", - " same block.", - "", - " # Note", - "", - " Do not use it to determine the number of contracts. It won't be decremented if", - " a contract is destroyed." - ] - }, - { - "name": "ContractInfoOf", - "modifier": "Optional", - "ty": { - "Map": { - "hashers": [ - "Twox64Concat" - ], - "key": 0, - "value": 109 - } - }, - "default": [ - 0 - ], - "docs": [ - " The code associated with a given account.", - "", - " TWOX-NOTE: SAFE since `AccountId` is a secure hash." - ] - }, - { - "name": "DeletionQueue", - "modifier": "Optional", - "ty": { - "Map": { - "hashers": [ - "Twox64Concat" - ], - "key": 4, - "value": 110 - } - }, - "default": [ - 0 - ], - "docs": [ - " Evicted contracts that await child trie deletion.", - "", - " Child trie deletion is a heavy operation depending on the amount of storage items", - " stored in said trie. Therefore this operation is performed lazily in `on_idle`." - ] - }, - { - "name": "DeletionQueueCounter", - "modifier": "Default", - "ty": { - "Plain": 115 - }, - "default": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "docs": [ - " A pair of monotonic counters used to track the latest contract marked for deletion", - " and the latest deleted contract in queue." - ] - }, - { - "name": "MigrationInProgress", - "modifier": "Optional", - "ty": { - "Plain": 116 - }, - "default": [ - 0 - ], - "docs": [ - " A migration can span across multiple blocks. This storage defines a cursor to track the", - " progress of the migration, enabling us to resume from the last completed position." - ] - } - ] - }, - "calls": { - "ty": 80 - }, - "event": { - "ty": 38 - }, - "constants": [ - { - "name": "Schedule", - "ty": 117, - "value": [ - 4, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 4, - 0, - 0, - 128, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 1, - 0, - 0, - 32, - 0, - 0, - 0, - 0, - 64, - 0, - 0, - 0, - 0, - 0, - 64, - 39, - 19, - 0, - 0, - 182, - 181, - 20, - 0, - 24, - 242, - 34, - 221, - 6, - 241, - 41, - 186, - 248, - 21, - 7, - 1, - 42, - 118, - 43, - 26, - 0, - 24, - 54, - 44, - 11, - 0, - 12, - 210, - 23, - 10, - 0, - 12, - 74, - 251, - 20, - 0, - 24, - 90, - 173, - 22, - 0, - 24, - 182, - 22, - 101, - 0, - 24, - 162, - 51, - 21, - 0, - 24, - 202, - 148, - 20, - 0, - 24, - 146, - 48, - 20, - 0, - 24, - 18, - 159, - 20, - 0, - 24, - 30, - 76, - 88, - 0, - 56, - 122, - 65, - 17, - 0, - 24, - 113, - 16, - 0, - 0, - 180, - 29, - 6, - 0, - 3, - 36, - 112, - 147, - 77, - 73, - 82, - 178, - 146, - 125, - 0, - 40, - 82, - 120, - 232, - 0, - 40, - 254, - 54, - 174, - 30, - 49, - 39, - 109, - 11, - 0, - 98, - 185, - 14, - 0, - 28, - 57, - 17, - 0, - 166, - 135, - 129, - 31, - 149, - 4, - 141, - 8, - 0, - 185, - 8, - 4, - 246, - 226, - 38, - 72, - 73, - 48, - 138, - 48, - 116, - 31, - 133, - 4, - 16, - 4, - 30, - 129, - 72, - 7, - 133, - 4, - 77, - 1, - 4, - 210, - 53, - 82, - 7, - 165, - 4, - 201, - 15, - 4, - 134, - 66, - 114, - 31, - 165, - 4, - 13, - 10, - 4, - 238, - 76, - 249, - 38, - 97, - 39, - 38, - 31, - 200, - 118, - 133, - 42, - 238, - 125, - 80, - 101, - 53, - 41, - 14, - 78, - 210, - 144, - 173, - 81, - 93, - 17, - 0, - 110, - 125, - 141, - 247, - 173, - 42, - 2, - 101, - 205, - 29, - 213, - 39, - 173, - 30, - 0, - 49, - 32, - 0, - 114, - 115, - 24, - 0, - 32, - 185, - 17, - 0, - 238, - 248, - 48, - 0, - 32, - 73, - 53, - 0, - 38, - 83, - 29, - 0, - 32, - 153, - 19, - 0, - 202, - 215, - 30, - 0, - 32, - 145, - 19, - 0, - 22, - 234, - 249, - 10, - 53, - 1, - 110, - 94, - 217, - 2, - 168, - 18, - 192, - 97, - 13, - 193, - 1, - 45, - 96, - 4, - 190, - 6, - 11, - 0, - 12, - 198, - 106, - 19, - 0, - 160, - 42, - 84, - 9, - 0, - 12, - 18, - 9, - 102, - 31, - 185, - 40, - 14, - 51, - 53, - 31, - 33, - 40 - ], - "docs": [ - " Cost schedule and limits." - ] - }, - { - "name": "DepositPerByte", - "ty": 6, - "value": [ - 64, - 75, - 76, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "docs": [ - " The amount of balance a caller has to pay for each byte of storage.", - "", - " # Note", - "", - " Changing this value for an existing chain might need a storage migration." - ] - }, - { - "name": "DefaultDepositLimit", - "ty": 6, - "value": [ - 0, - 0, - 160, - 143, - 230, - 97, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "docs": [ - " Fallback value to limit the storage deposit if it's not being set by the caller." - ] - }, - { - "name": "DepositPerItem", - "ty": 6, - "value": [ - 0, - 232, - 118, - 72, - 23, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "docs": [ - " The amount of balance a caller has to pay for each storage item.", - "", - " # Note", - "", - " Changing this value for an existing chain might need a storage migration." - ] - }, - { - "name": "CodeHashLockupDepositPercent", - "ty": 121, - "value": [ - 0, - 0, - 0, - 0 - ], - "docs": [ - " The percentage of the storage deposit that should be held for using a code hash.", - " Instantiating a contract, or calling [`chain_extension::Ext::add_delegate_dependency`]", - " protects the code from being removed. In order to prevent abuse these actions are", - " protected with a percentage of the code deposit." - ] - }, - { - "name": "MaxCodeLen", - "ty": 4, - "value": [ - 0, - 0, - 4, - 0 - ], - "docs": [ - " The maximum length of a contract code in bytes.", - "", - " The value should be chosen carefully taking into the account the overall memory limit", - " your runtime has, as well as the [maximum allowed callstack", - " depth](#associatedtype.CallStack). Look into the `integrity_test()` for some insights." - ] - }, - { - "name": "MaxStorageKeyLen", - "ty": 4, - "value": [ - 128, - 0, - 0, - 0 - ], - "docs": [ - " The maximum allowable length in bytes for storage keys." - ] - }, - { - "name": "MaxDelegateDependencies", - "ty": 4, - "value": [ - 32, - 0, - 0, - 0 - ], - "docs": [ - " The maximum number of delegate_dependencies that a contract can lock with", - " [`chain_extension::Ext::add_delegate_dependency`]." - ] - }, - { - "name": "UnsafeUnstableInterface", - "ty": 42, - "value": [ - 1 - ], - "docs": [ - " Make contract callable functions marked as `#[unstable]` available.", - "", - " Contracts that use `#[unstable]` functions won't be able to be uploaded unless", - " this is set to `true`. This is only meant for testnets and dev nodes in order to", - " experiment with new features.", - "", - " # Warning", - "", - " Do **not** set to `true` on productions chains." - ] - }, - { - "name": "MaxDebugBufferLen", - "ty": 4, - "value": [ - 0, - 0, - 32, - 0 - ], - "docs": [ - " The maximum length of the debug buffer in bytes." - ] - }, - { - "name": "Environment", - "ty": 122, - "value": [], - "docs": [ - " Type that bundles together all the runtime configurable interface types.", - "", - " This is not a real config. We just mention the type here as constant so that", - " its type appears in the metadata. Only valid value is `()`." - ] - } - ], - "error": { - "ty": 130 - }, - "index": 8, - "docs": [] - }, - { - "name": "Assets", - "storage": { - "prefix": "Assets", - "entries": [ - { - "name": "Asset", - "modifier": "Optional", - "ty": { - "Map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 4, - "value": 131 - } - }, - "default": [ - 0 - ], - "docs": [ - " Details of an asset." - ] - }, - { - "name": "Account", - "modifier": "Optional", - "ty": { - "Map": { - "hashers": [ - "Blake2_128Concat", - "Blake2_128Concat" - ], - "key": 133, - "value": 134 - } - }, - "default": [ - 0 - ], - "docs": [ - " The holdings of a specific account for a specific asset." - ] - }, - { - "name": "Approvals", - "modifier": "Optional", - "ty": { - "Map": { - "hashers": [ - "Blake2_128Concat", - "Blake2_128Concat", - "Blake2_128Concat" - ], - "key": 137, - "value": 138 - } - }, - "default": [ - 0 - ], - "docs": [ - " Approved balance transfers. First balance is the amount approved for transfer. Second", - " is the amount of `T::Currency` reserved for storing this.", - " First key is the asset ID, second key is the owner and third key is the delegate." - ] - }, - { - "name": "Metadata", - "modifier": "Default", - "ty": { - "Map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 4, - "value": 139 - } - }, - "default": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "docs": [ - " Metadata of an asset." - ] - } - ] - }, - "calls": { - "ty": 83 - }, - "event": { - "ty": 41 - }, - "constants": [ - { - "name": "RemoveItemsLimit", - "ty": 4, - "value": [ - 232, - 3, - 0, - 0 - ], - "docs": [ - " Max number of items to destroy per `destroy_accounts` and `destroy_approvals` call.", - "", - " Must be configured to result in a weight that makes each call fit in a block." - ] - }, - { - "name": "AssetDeposit", - "ty": 6, - "value": [ - 0, - 0, - 193, - 111, - 242, - 134, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "docs": [ - " The basic amount of funds that must be reserved for an asset." - ] - }, - { - "name": "AssetAccountDeposit", - "ty": 6, - "value": [ - 0, - 64, - 122, - 16, - 243, - 90, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "docs": [ - " The amount of funds that must be reserved for a non-provider asset account to be", - " maintained." - ] - }, - { - "name": "MetadataDepositBase", - "ty": 6, - "value": [ - 0, - 128, - 198, - 164, - 126, - 141, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "docs": [ - " The basic amount of funds that must be reserved when adding metadata to your asset." - ] - }, - { - "name": "MetadataDepositPerByte", - "ty": 6, - "value": [ - 0, - 64, - 122, - 16, - 243, - 90, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "docs": [ - " The additional funds that must be reserved for the number of bytes you store in your", - " metadata." - ] - }, - { - "name": "ApprovalDeposit", - "ty": 6, - "value": [ - 0, - 64, - 122, - 16, - 243, - 90, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "docs": [ - " The amount of funds that must be reserved when creating a new approval." - ] - }, - { - "name": "StringLimit", - "ty": 4, - "value": [ - 50, - 0, - 0, - 0 - ], - "docs": [ - " The maximum length of a name or symbol stored on-chain." - ] - } - ], - "error": { - "ty": 141 - }, - "index": 9, - "docs": [] - } - ], - "extrinsic": { - "version": 4, - "address_ty": 74, - "call_ty": 71, - "signature_ty": 142, - "extra_ty": 148, - "signed_extensions": [ - { - "identifier": "CheckNonZeroSender", - "ty": 149, - "additional_signed": 32 - }, - { - "identifier": "CheckSpecVersion", - "ty": 150, - "additional_signed": 4 - }, - { - "identifier": "CheckTxVersion", - "ty": 151, - "additional_signed": 4 - }, - { - "identifier": "CheckGenesis", - "ty": 152, - "additional_signed": 12 - }, - { - "identifier": "CheckMortality", - "ty": 153, - "additional_signed": 12 - }, - { - "identifier": "CheckNonce", - "ty": 155, - "additional_signed": 32 - }, - { - "identifier": "CheckWeight", - "ty": 156, - "additional_signed": 32 - }, - { - "identifier": "ChargeTransactionPayment", - "ty": 157, - "additional_signed": 32 - } - ] - }, - "ty": 40, - "apis": [ - { - "name": "Core", - "methods": [ - { - "name": "version", - "inputs": [], - "output": 61, - "docs": [ - " Returns the version of the runtime." - ] - }, - { - "name": "execute_block", - "inputs": [ - { - "name": "block", - "ty": 158 - } - ], - "output": 32, - "docs": [ - " Execute the given block." - ] - }, - { - "name": "initialize_block", - "inputs": [ - { - "name": "header", - "ty": 159 - } - ], - "output": 32, - "docs": [ - " Initialize a block with the given header." - ] - } - ], - "docs": [ - " The `Core` runtime api that every Substrate runtime needs to implement." - ] - }, - { - "name": "Metadata", - "methods": [ - { - "name": "metadata", - "inputs": [], - "output": 162, - "docs": [ - " Returns the metadata of a runtime." - ] - }, - { - "name": "metadata_at_version", - "inputs": [ - { - "name": "version", - "ty": 4 - } - ], - "output": 163, - "docs": [ - " Returns the metadata at a given version.", - "", - " If the given `version` isn't supported, this will return `None`.", - " Use [`Self::metadata_versions`] to find out about supported metadata version of the runtime." - ] - }, - { - "name": "metadata_versions", - "inputs": [], - "output": 164, - "docs": [ - " Returns the supported metadata versions.", - "", - " This can be used to call `metadata_at_version`." - ] - } - ], - "docs": [ - " The `Metadata` api trait that returns metadata for the runtime." - ] - }, - { - "name": "BlockBuilder", - "methods": [ - { - "name": "apply_extrinsic", - "inputs": [ - { - "name": "extrinsic", - "ty": 160 - } - ], - "output": 165, - "docs": [ - " Apply the given extrinsic.", - "", - " Returns an inclusion outcome which specifies if this extrinsic is included in", - " this block or not." - ] - }, - { - "name": "finalize_block", - "inputs": [], - "output": 159, - "docs": [ - " Finish the current block." - ] - }, - { - "name": "inherent_extrinsics", - "inputs": [ - { - "name": "inherent", - "ty": 169 - } - ], - "output": 161, - "docs": [ - " Generate inherent extrinsics. The inherent data will vary from chain to chain." - ] - }, - { - "name": "check_inherents", - "inputs": [ - { - "name": "block", - "ty": 158 - }, - { - "name": "data", - "ty": 169 - } - ], - "output": 173, - "docs": [ - " Check that the inherents are valid. The inherent data will vary from chain to chain." - ] - } - ], - "docs": [ - " The `BlockBuilder` api trait that provides the required functionality for building a block." - ] - }, - { - "name": "TaggedTransactionQueue", - "methods": [ - { - "name": "validate_transaction", - "inputs": [ - { - "name": "source", - "ty": 174 - }, - { - "name": "tx", - "ty": 160 - }, - { - "name": "block_hash", - "ty": 12 - } - ], - "output": 175, - "docs": [ - " Validate the transaction.", - "", - " This method is invoked by the transaction pool to learn details about given transaction.", - " The implementation should make sure to verify the correctness of the transaction", - " against current state. The given `block_hash` corresponds to the hash of the block", - " that is used as current state.", - "", - " Note that this call may be performed by the pool multiple times and transactions", - " might be verified in any possible order." - ] - } - ], - "docs": [ - " The `TaggedTransactionQueue` api trait for interfering with the transaction queue." - ] - }, - { - "name": "OffchainWorkerApi", - "methods": [ - { - "name": "offchain_worker", - "inputs": [ - { - "name": "header", - "ty": 159 - } - ], - "output": 32, - "docs": [ - " Starts the off-chain task for given block header." - ] - } - ], - "docs": [ - " The offchain worker api." - ] - }, - { - "name": "SessionKeys", - "methods": [ - { - "name": "generate_session_keys", - "inputs": [ - { - "name": "seed", - "ty": 177 - } - ], - "output": 13, - "docs": [ - " Generate a set of session keys with optionally using the given seed.", - " The keys should be stored within the keystore exposed via runtime", - " externalities.", - "", - " The seed needs to be a valid `utf8` string.", - "", - " Returns the concatenated SCALE encoded public keys." - ] - }, - { - "name": "decode_session_keys", - "inputs": [ - { - "name": "encoded", - "ty": 13 - } - ], - "output": 178, - "docs": [ - " Decode the given public session keys.", - "", - " Returns the list of public raw public keys + key type." - ] - } - ], - "docs": [ - " Session keys runtime api." - ] - }, - { - "name": "AccountNonceApi", - "methods": [ - { - "name": "account_nonce", - "inputs": [ - { - "name": "account", - "ty": 0 - } - ], - "output": 4, - "docs": [ - " Get current account nonce of given `AccountId`." - ] - } - ], - "docs": [ - " The API to query account nonce." - ] - }, - { - "name": "TransactionPaymentApi", - "methods": [ - { - "name": "query_info", - "inputs": [ - { - "name": "uxt", - "ty": 160 - }, - { - "name": "len", - "ty": 4 - } - ], - "output": 182, - "docs": [] - }, - { - "name": "query_fee_details", - "inputs": [ - { - "name": "uxt", - "ty": 160 - }, - { - "name": "len", - "ty": 4 - } - ], - "output": 183, - "docs": [] - }, - { - "name": "query_weight_to_fee", - "inputs": [ - { - "name": "weight", - "ty": 9 - } - ], - "output": 6, - "docs": [] - }, - { - "name": "query_length_to_fee", - "inputs": [ - { - "name": "length", - "ty": 4 - } - ], - "output": 6, - "docs": [] - } - ], - "docs": [] - }, - { - "name": "TransactionPaymentCallApi", - "methods": [ - { - "name": "query_call_info", - "inputs": [ - { - "name": "call", - "ty": 71 - }, - { - "name": "len", - "ty": 4 - } - ], - "output": 182, - "docs": [ - " Query information of a dispatch class, weight, and fee of a given encoded `Call`." - ] - }, - { - "name": "query_call_fee_details", - "inputs": [ - { - "name": "call", - "ty": 71 - }, - { - "name": "len", - "ty": 4 - } - ], - "output": 183, - "docs": [ - " Query fee details of a given encoded `Call`." - ] - }, - { - "name": "query_weight_to_fee", - "inputs": [ - { - "name": "weight", - "ty": 9 - } - ], - "output": 6, - "docs": [ - " Query the output of the current `WeightToFee` given some input." - ] - }, - { - "name": "query_length_to_fee", - "inputs": [ - { - "name": "length", - "ty": 4 - } - ], - "output": 6, - "docs": [ - " Query the output of the current `LengthToFee` given some input." - ] - } - ], - "docs": [] - }, - { - "name": "ContractsApi", - "methods": [ - { - "name": "call", - "inputs": [ - { - "name": "origin", - "ty": 0 - }, - { - "name": "dest", - "ty": 0 - }, - { - "name": "value", - "ty": 6 - }, - { - "name": "gas_limit", - "ty": 57 - }, - { - "name": "storage_deposit_limit", - "ty": 186 - }, - { - "name": "input_data", - "ty": 13 - } - ], - "output": 187, - "docs": [ - " Perform a call from a specified account to a given contract.", - "", - " See [`crate::Pallet::bare_call`]." - ] - }, - { - "name": "instantiate", - "inputs": [ - { - "name": "origin", - "ty": 0 - }, - { - "name": "value", - "ty": 6 - }, - { - "name": "gas_limit", - "ty": 57 - }, - { - "name": "storage_deposit_limit", - "ty": 186 - }, - { - "name": "code", - "ty": 194 - }, - { - "name": "data", - "ty": 13 - }, - { - "name": "salt", - "ty": 13 - } - ], - "output": 195, - "docs": [ - " Instantiate a new contract.", - "", - " See `[crate::Pallet::bare_instantiate]`." - ] - }, - { - "name": "upload_code", - "inputs": [ - { - "name": "origin", - "ty": 0 - }, - { - "name": "code", - "ty": 13 - }, - { - "name": "storage_deposit_limit", - "ty": 186 - }, - { - "name": "determinism", - "ty": 82 - } - ], - "output": 198, - "docs": [ - " Upload new code without instantiating a contract from it.", - "", - " See [`crate::Pallet::bare_upload_code`]." - ] - }, - { - "name": "get_storage", - "inputs": [ - { - "name": "address", - "ty": 0 - }, - { - "name": "key", - "ty": 13 - } - ], - "output": 200, - "docs": [ - " Query a given storage key in a given contract.", - "", - " Returns `Ok(Some(Vec))` if the storage value exists under the given key in the", - " specified account and `Ok(None)` if it doesn't. If the account specified by the address", - " doesn't exist, or doesn't have a contract then `Err` is returned." - ] - } - ], - "docs": [ - " The API used to dry-run contract interactions." - ] - } - ], - "outer_enums": { - "call_enum_ty": 71, - "event_enum_ty": 20, - "error_enum_ty": 202 - }, - "custom": { - "map": {} - } - } - } -] \ No newline at end of file From 9ebfa62c7d0ddc6e252461cddee21f00fe7d5845 Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Wed, 25 Oct 2023 12:09:23 +0100 Subject: [PATCH 12/23] move module to extrinsics --- Cargo.lock | 2 +- crates/extrinsics/Cargo.toml | 1 + .../src/env_check.rs | 38 +++++++------------ crates/extrinsics/src/lib.rs | 3 +- crates/transcode/Cargo.toml | 1 - crates/transcode/src/lib.rs | 2 - 6 files changed, 18 insertions(+), 29 deletions(-) rename crates/{transcode => extrinsics}/src/env_check.rs (90%) diff --git a/Cargo.lock b/Cargo.lock index c7ae4439d..026d84843 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1030,6 +1030,7 @@ dependencies = [ "contract-transcode", "futures", "hex", + "ink_metadata", "pallet-contracts-primitives", "parity-scale-codec", "predicates", @@ -1089,7 +1090,6 @@ dependencies = [ "sp-core", "sp-keyring", "strsim", - "subxt", "thiserror", "tracing", ] diff --git a/crates/extrinsics/Cargo.toml b/crates/extrinsics/Cargo.toml index 5a757931f..6991de6fe 100644 --- a/crates/extrinsics/Cargo.toml +++ b/crates/extrinsics/Cargo.toml @@ -38,6 +38,7 @@ scale-info = "2.10.0" subxt = "0.32.1" subxt-signer = { version = "0.32.1", features = ["subxt", "sr25519"] } hex = "0.4.3" +ink_metadata = "5.0.0-alpha" [dev-dependencies] assert_cmd = "2.0.12" diff --git a/crates/transcode/src/env_check.rs b/crates/extrinsics/src/env_check.rs similarity index 90% rename from crates/transcode/src/env_check.rs rename to crates/extrinsics/src/env_check.rs index a5b69c0c3..628924dcb 100644 --- a/crates/transcode/src/env_check.rs +++ b/crates/extrinsics/src/env_check.rs @@ -46,7 +46,7 @@ impl From for EnvCheckError { fn get_node_env_fields(registry: &PortableRegistry) -> Result>> { let segments: Vec<&str> = if cfg!(test) { - vec!["contract_transcode", "env_check", "tests", "Environment"] + vec!["contract_extrinsics", "env_check", "tests", "Environment"] } else { vec!["pallet_contracts", "Environment"] }; @@ -200,47 +200,37 @@ mod tests { }, }; - #[derive(Encode, Decode, TypeInfo)] - #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + #[derive(Encode, Decode, TypeInfo, serde::Serialize, serde::Deserialize)] pub struct AccountId([u8; 32]); - #[derive(Encode, Decode, TypeInfo)] - #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + #[derive(Encode, Decode, TypeInfo, serde::Serialize, serde::Deserialize)] pub struct Balance(u128); - #[derive(Encode, Decode, TypeInfo)] - #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + #[derive(Encode, Decode, TypeInfo, serde::Serialize, serde::Deserialize)] pub struct Hash([u8; 32]); - #[derive(Encode, Decode, TypeInfo)] - #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + #[derive(Encode, Decode, TypeInfo, serde::Serialize, serde::Deserialize)] pub struct Hasher; - #[derive(Encode, Decode, TypeInfo)] - #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + #[derive(Encode, Decode, TypeInfo, serde::Serialize, serde::Deserialize)] pub struct Timestamp(u64); - #[derive(Encode, Decode, TypeInfo)] - #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + #[derive(Encode, Decode, TypeInfo, serde::Serialize, serde::Deserialize)] pub struct BlockNumber(u32); - #[derive(Encode, Decode, TypeInfo)] - #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + #[derive(Encode, Decode, TypeInfo, serde::Serialize, serde::Deserialize)] pub struct SomeStruct { one: u32, two: u64, } - #[derive(Encode, Decode, TypeInfo)] - #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + #[derive(Encode, Decode, TypeInfo, serde::Serialize, serde::Deserialize)] pub struct CompositeBlockNumber(SomeStruct); - #[derive(Encode, Decode, TypeInfo)] - #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + #[derive(Encode, Decode, TypeInfo, serde::Serialize, serde::Deserialize)] pub struct EnvironmentType(PhantomData); - #[derive(Encode, Decode, TypeInfo)] - #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + #[derive(Encode, Decode, TypeInfo, serde::Serialize, serde::Deserialize)] pub struct Environment { account_id: EnvironmentType, balance: EnvironmentType, @@ -250,8 +240,7 @@ mod tests { block_number: EnvironmentType, } - #[derive(Encode, Decode, TypeInfo)] - #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + #[derive(Encode, Decode, TypeInfo, serde::Serialize, serde::Deserialize)] pub struct InvalidEnvironment { account_id: EnvironmentType, balance: EnvironmentType, @@ -307,7 +296,8 @@ mod tests { // let _ = generate_metadata(); let leaf = LeafLayout::from_key::(LayoutKey::new(0_u8)); let layout = Layout::Leaf(leaf); - #[cfg_attr(feature = "std", derive(scale_info::TypeInfo))] + + #[derive(scale_info::TypeInfo)] pub enum NoChainExtension {} type ChainExtension = NoChainExtension; diff --git a/crates/extrinsics/src/lib.rs b/crates/extrinsics/src/lib.rs index 828d5221c..d25593af3 100644 --- a/crates/extrinsics/src/lib.rs +++ b/crates/extrinsics/src/lib.rs @@ -16,6 +16,7 @@ mod balance; mod call; +mod env_check; mod error; mod events; mod extrinsic_opts; @@ -29,7 +30,7 @@ mod upload; mod integration_tests; use colored::Colorize; -use contract_transcode::compare_node_env_with_contract; +use env_check::compare_node_env_with_contract; use subxt::utils::AccountId32; use anyhow::{ diff --git a/crates/transcode/Cargo.toml b/crates/transcode/Cargo.toml index 068b7e92b..8c81bd60e 100644 --- a/crates/transcode/Cargo.toml +++ b/crates/transcode/Cargo.toml @@ -37,7 +37,6 @@ serde = { version = "1.0.189", default-features = false, features = ["derive"] } serde_json = "1.0.107" thiserror = "1.0.50" strsim = "0.10.0" -subxt = "0.32.1" [dev-dependencies] assert_matches = "1.5.0" diff --git a/crates/transcode/src/lib.rs b/crates/transcode/src/lib.rs index 9d2b838a0..1eb68b7d2 100644 --- a/crates/transcode/src/lib.rs +++ b/crates/transcode/src/lib.rs @@ -101,7 +101,6 @@ mod account_id; mod decode; mod encode; -mod env_check; pub mod env_types; mod scon; mod transcoder; @@ -109,7 +108,6 @@ mod util; pub use self::{ account_id::AccountId32, - env_check::compare_node_env_with_contract, scon::{ Hex, Map, From 4a96f578bcf659f2d731156ed45e12c353cf00b6 Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Wed, 25 Oct 2023 15:13:35 +0100 Subject: [PATCH 13/23] update the metadata to only refer to contracts --- .../extrinsics/src/runtime_api/metadata.scale | Bin 63966 -> 32393 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/crates/extrinsics/src/runtime_api/metadata.scale b/crates/extrinsics/src/runtime_api/metadata.scale index 4f7b4bfaae19f0ff55e83ffd345c2126e917739e..e8d10021116471a2ad497c13a682a570a6db7fbc 100644 GIT binary patch delta 9952 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 literal 63966 zcmdVD51d>_ktUc~da_G)8Opc~<(U?KhBmZ3tv4;Z1&wHXx}|QR9$Hdc-LeI?wyV18 zwYpGsRZ*`>QhV(^`Ocm-JLbmB!i|}Q8#8Oqm>t-IUEuI8?82UzGqZ4KIJkv7xP@Jq zHM_vU4D6U&X6C+#$jtX%{b@;Hesd>`R4-q?%*e>d$cV^@$c?aFdhzaUDmNT8SIUi6 zSSYtPo9)KfOu5|X)Z6owTW(g$Q=azk>P)`gzvbqW^r*J^N~tXVr?%tc?D$%%v=OdE zn^8O5aNpL~8rh*Eje0rMd0RMJYM1no8qz~`dXd*sLFtilqaJlO!d8^m{;_cF0CkVz zW~*_gTIntxi#ls-)p9kgx6}3W6?8D9liewm2bkN{P;RPOs@1~w%4(@rLg&#?d$Sov z$-3U~etD-0DzEcvtuQQTTc)(%3Zt-fCafe23u~>$Jz+grG_+PLor;F_=-jz>t8|ba zlqvv<%hm7zC{k5DRnYm)o|`9?@^cdgxt(US(Q5mZYSb*X%j?sNVQbd>K2R$~k>@Sz z5tY-0dZV>bs*PxGS?RGxGi;UG)kfWxjBJ$ZKvJW%$u-nSZWMEWHmsgnZ$~5Y@5-5* z3wLq}W|>C4w$iR{grhpwdCi2vPKbM-UTR-?WF0zclwbcGdKY_nK- zSbg|;2%}z53tcO3?hNW53$c(ZS#M4+f+EI25kt-OQWSnb4=vKaz(Gj$7PU90bfMj7 zR?E?cbb*Gv41_LbPhc&AZp-axrQWE7c5=ooZ1lC#!-XYY@19!L%_IZZw~yhNGS$(f z8b02x)~fAIPo2}tW)*g%$kbLD<(st^dFlauZ`WGwY1C7PmRqHI1TaC}i=|D%m8Txo zPns_=0{eEQDX)7PxeW8wsWd$Gh_0E>B0TrhyPU~DaN?;)^?6g-A*$z#tSZbzQP{>{ z9@lMC9jg>2J#}{|wVX@w(1Lt0#E8Vg#ym|EFR9j}YI&(s2J?zMJz;slN)^2JgdVs2 zU>=WHG>^>G{m_2pmm3>RaKEtPN7BGrr&ikxrd+!ROVwIf$?8ehY}jgnl=OsccaEOb z1^U(AVyfRYZZ;S@08+BFobeWm`^qRN`e#d#-w_fIMvsJN&CcWL;gak@N{=t^+vheU ztbp|yzaF0T&3kU4+zM%t1QTzpg2h)Z*ofzy0FcQR&_ELnVDH%|wN4Wr3g8RadAj@8 zd90%KaXk#E4&j&D?lq6r{YHIvdA(GvgIiJq{(7m|1T(7yUXy3hUu(2{tax8mjW07C zoEXI4yCxHSU3l||wyaqXm5J})9nTN%14^Uq&1hvU42wFCg@L{2?m@k{sWqSG3P*VN zz?vO98gCs+tC7QY-@sB;#X${9hdP^kQ;2?5_DBQYs!BG&~3u%XEPOKb0I(vL!Ze{M+ zv7^UU=8haVIy*PJvNZqZImmCdWV^|c>(S|hoq8ooLWW5>TCZ(dRAN%b_lE%SFz~$5 z*}%M*NjtzRP;FD=$Lpu-jk9%Tf0&5EL6(m&2N-fBQVa%onVOc_mJbg#Y87?4ng9ys z&SBwH7%y2hyua2cV>v1?$!2x}qC&|{PS3>X+{kfSvTFbkZne_}r;MbbD3~CjE{0~Cw^Psf5k^xB{VHB@$KbIg$O^!17lNpv z7}7M1qtvqOaNZ!qd*0PQXLo`R$GWi*VVf>MYv|P4_iE6f$nM9u02{}N8NUpjgtsue z>(Z8S?=m)uBJUeTKdg5)Xr%4+YGk&Jd%c3Rk%fqN9->}FXR}97d+I!hRONtuPk~-R zr6}-}dZ0(^ND(VqQQo}L%foZ^3bCK;z};6vP6aMP^?KYs9`DfP~k?VmG3r%zPJy`QT z5!)&;FMsY_6-*f_N2xX&HXBj3J$6oJiB=8~7&i0{Yy#?UQkqe+CbC}fbyLxp(huWtHK z&)Ou(h_X7My}rPC-Zz$Lnv#tIF|73Zqk>@?zRY90;WXl1!RYb2t$8UuZug$+>9ONl zO7&@*_t7sQV^?sX=245~0IlXRH2)mmuz9AHJ0CcX+y|d&?=d=zOCZt%mERGu1|GS5Sbg!@GCi zW!ZNbUE#f_d(a!)2qqQ;0PbQ292E9?4;prRTm7liZEoel zg4aVsX>)7=Hlb=ef)x##WRwTrC{OGc6SCPbbT)qwdlkeow;_{U_Hb_9Xb)(i+fJ1d z&e;6pCH0eoVYpbTR&srbUXQ{e)+yCU|1aoq1I*DivhC?yyV~q7RM|H{>P>lLp zS^BPRl+(;V)cPrOAq-9YXV|SB4z8Z#gNUhLaXwg8h zDP9=MkL1P-a>yFji;dh6taeqbCY%FQ8Y|!r{p4%!Bg?WGR*1c&6V)~$2($z3ouk^^In{J{bB3`c^feRB;`8QU8UHToc%>Ab99`rCl70J3!LI(OxS)FSPOl(1p)(1E6@XJ9S^;_D3Q$K_GkG*O zZ6?`SQF~{4bbP)J5sV~t-h%x~*sL{J1MiZxq4|l?x?6Bo-dAAs0ezQocp_gjErNhS zIFVn%G!ychVY#|i1x=e5!RT_>0%4nu2Q=?JKr?4wq9rs(CQWRB=G#Dzt-=sU$5o}) zW*2ncx9D>#{qWbVupB~T$J$CX9I;uEZCiF<(S>z4E=Mp%wh2_>l|D=9ol9{rhaUKv|4CY;Kgh)!U@NU8(%SiU8@o< z@eZA%b3B|F0G_0URF4Dkq-CwFhcz6Yb#W!we`^h_NtjjAlM3?zwJqu+p(CCo>LFey zA|C`(79n#q3X*!#UKfB``| zmMO5Xb$7^C^<$#?4nqF4MSd%+vG~$60mDK8J^1&$4*-s>W`IcD(%gc@KFyi2^ydc8 zz{9;W;KVe1U@&^* zJGW3RU*R4q!DYi_s8<@R<`aALA`^#y zIt-g+0Ri_S7KC+CtDXjnf|ZI%ku*|}E&gMsVhNLQ9-k}i(gY1zO-$X@unapmF(S54 zc3RRRt=rNm;F>p9v`X?rg_euytJDg|TMfc4*k1W`FgXhvK81C4fH1nn0?*#SjL!~K zMuGzkz_~%o4XeLmnvzY9nBRIxqCN&MMkM+e=Vwi-j5#wzSfsIs=fZLat2;`-?Pjd2DFl<&{Vf*;qqZx>~^BN-jYs1W|8BC*)24vwofYQ4OoA>fXwZ>n z>Xk#-34SJ9T6*)ydOu=SV~q|jfTlB$>`3Bdc~&|D)zj2M6vLXe6lZv1@W@s$9y1K{ z1%Pvh_dLVd)jw?bTf=R6_JxJ!_hftJDPcn-g*^r-jE2Jh=|4f!)^2pkgB>nrm z&@k&uT~ROc9!}6&%#$HzmBZc4--&FkTC^0lhX#?Y&e!2Y8Y^2kL60^!RvWcs5#TOY z;oTS+&xesJ99?)hJgM`mjYdtq*n1DD2JqexMGTUYNCbpgl2T!-W;6#=7ODe~d?Az! z#9-cgkF6T3oMrha-Q={;Mp&_1#1`x_YIK03ZuY00SlaWZuc`WKZ;u|Gsle(CeX>;B z)gw>{nM35IvD+Pl)XfspfH~)~N$&G}S!PIoA!09ns5(XU?hx==?do%`QPXd_zTMPq6 zTE4IiUjD}{QnCP*HkrrvOyZORfQFV%7Y{VDDpzLgrLd88&)sXkR zTkb^r>m>jJC`xS{km3X!M~b3tIqOA{89)*GA$eK_C%Ci2)w(eqUvRITA{`xDe1E5a zYjFa{8+u%U7@1v#@q#kiw6&=SE99vUhL;;1^1vCqwe;Jg^@tJjdnL@5dOsboeH)e~ zCMQ}VY_~E~=h`a<)-P!=!|Vsr%e;FB^t)=#TP|o@eG)#_N_`;h`D;CUbCXyYwN2;J z34dhqHG&%#pD96*e4C1UhX>q_kRy>Fjs zbBTOhPbu{&_><;J=51WHcu7+J{$4jU_&mK>}f+k5*vo{?q0%a#$82g*_Nus zlffib6wHyOCY*!eYYwL%{&&pyxMQMH-=%BgdotX!NeRB`G}J_=8L!g&G1b9mciYca z=oB12CMzK9@@e$n-O4uavHq=eeThcLs8OR?Vj$!x6@5-mkViL8E$%4QI^k^!f^~0u z<|DK*ej1*$aU*%0LquQFzG>q&I4iZ&pC{`R4E&6PjkPM=5)1NULgxSgG`*;^N(~xn zysR6P#J6Z_RwjwZxx$8^ep7q7_fQ(3p0Ci9ca=T>(+VU?a6tbId)r$<+DV7$Vs zdnESUMG(fh-a>%2!Xnhy^aG1s(H&E!O_Z~%F1+f$HpmCJZ)nIj;?R(9^n`{;NgNu& z&*~d}hu95?0*{&GQ957q#7HM-r0&JH^rSf~li?6YpbBj|Z13~Zy3$m7->GjU51B@K z4w**ykm+UuB9odXQt)yq9NXP%|Ldr5fC$9T^7;8{vyJoB^q0Xw3K zdv|2RCT3R!MHGRPhlQhJIn&TtIKYPHN&SewHC%VnaM3%23FF8)#c(ImOjeIn5fQK= z%((mAY^ekGM9kQ-bgQbR_`ECRrVJRiFkfm`qv!ST4E_NhQF?);BkTs)A-bELz%gGt zw51~6tLMGkfyP;~U;Pwrj6a3#3IES%oGHRq6*RXgx=yQi+wU6U@x zsv-7Cf@Xj2Q_fL-C(cN)v$e* zZHy4t${pAeq&a>>WDBHzMbZa((uBrcdjv*hyaf(kuvFQJ?bde{``Q+5x<)`dbk z0pQq2sNKBx5XdxM+Z`i7^zde<1$Tg8oJ5g>)f&!3!wM+yS+s7XX*mB;v2BYRqHz$G z;Ubju`IVpnQPc2!Doo^Rom*Ii8!S!=A#(r?yo91LTXrTakM5WESZL%FJnk)Fg{VYa z*R^_p!+I=96^2%cz#&2qjL~&k-%I=d)G~ApAN%N9_0(-nRHH#-7xGS|cVTV;JMTn^ z%sj2?87!eQp>=)Vp&?)Gd5wa!gU@%OgZ+(jTXq27h;#?3cG1xY_qc-QE(PukT$EA* zo@)h7j@fyEQ$$vephwY-ZigyE@WO~K@?<0ic5Gu8J)UjdvQMHf>Y6PlP^B($9(ts^ zL_5?hNt-6h6Z^?UBflr;2*FNiyd@e&KQD~DbsZRaW~Wv=^`PU3F~dWM2$P|R&*%^8 zD6Fl)g$0o!&Fac}6@E%}1jy0BVi;ldz@MZAo1Bem+_x`XW#2wKAy+_oLGvUa(!bD> zr({u%`KEV}eAav#zjCoRFI370vK_bBPu>QqTJsX6Q zSVt_@4cfVHQQ$U{pg9MO_Y*G%#T4Q-!of!M2)O29_yS zn#KSpg(=&&i0Kp~@Zj!#7HBfvwu^MHfJ5YP8ajDc|fmd}%WEE()T%oiiVDsMSW2lPEAW10S4>D1W*2+3Y706&*_roBgd zyXxrzeGe1G!6ZlAIXpXXp=96&ks@L98Mi>tlYmSsU|jnNf5jyT0~ojI+a zHny=TBk1s!L#mfCr5`Fq#+nW-Y#H%iq<4^xo3K5rZXVV(8X)sLjG@-0T5PP;eqzK0 z?RL4pks%Q{i6QljQRkylt(~mlJ)Ne~3ylz1IFYOq&-UN&*pu$lNpHg5iS9u{24P{T zrP_ah82Xs_Tl47!T-&A1r_Cj4OQR+IdD5T?HN5#Q{%-BF5hn`br=?%CX z7a?4p^IP`Lt`38HpMa-Rob}G?MLG#omsYB~b*3aNfQ?RET5aq7=4}C7rrQRa`Vvh| zlhO=l(S%ww7}49h)uQf?(cr8rvtD{z!RK|WK0RNf$;mZ@Petn&Gv4hz8g%MYG=@me zdV5Q1N(Oxmo>ilVcFkN5lcwINSBmrAve&Ie@&3JC-n}JIFX+vAi*4Cs0Yr2v+`?kg zztgPO+vlDw&LY&w{~ zZAlwfc00;QgG6-X>HD)coa?48Y7WhE9+`VWD3DMow_4orUro!k0-1b>hDNEu3pev3 zua<5m{tS&AvbbDfHXN;2n_CW9ybA}e>lecIe39!F|hm z+7E0Y-@O(|$tSpIn&`K6rri?GpTT|i>h7scc81O;*~!**zZI3dqpVfz^pz zo^fU=Q3+dep9@3svR*S#s(JLdY)B^E@0J+25OrJ_u0pqp))xpsH|sd2K^B6?w%FS) z1XENc07!(?*et?kC=a`*j%(dcCuWwK z*2R$A7xH&BkVr+nN$Z)P`}q8dl@%oZhQm*|Zyz;F>iKb~=lv6ykKjB<;PK)kAb9rW z`oyWm70{++6Tv~vn{?LZt>#x z<((%_t|B`Q_RYf>l=?enO`i=*r&ki*S(A67Anl(c%>BT%eUD}kx1XN&lqGVQjWO*n>aDS<44Fd}QRH{0tM^{DXa!5Etq;eS9 zjez6a418{Y{tciz6KeI={y5meIjv)czL^+$XAmG`$eu;{2PyMLcGf(^L)F_|f_`0q zuPinR;G?%*Ka{9V8bU{_`!0D1_nRTSJu!s)2MxiWugq{3%Ph`3^@BYCKM3m>1w{8w zntE{HvY$0hNR&BOrW4s)N1UsOr{1P@)5K}J<1VDEj;q6K_HBKvZ{|pBG*MG$;m=7) zJt$AhtQ=dJnE+udFQwxA?F-=c?S$X^wR*=TS6S&rZx?=dAdEe||98~!>HhmwmYWe`Wy0X#;6 z<%Q~7J5|K#Z2~`tauE+sOxZK$TpW2eOa=0KcQu^rC>iA`YhtMuEX*U3vb_Mqf&wF* z`N<$qn$t7{hkCP~;t1xu93GPVM2wZr-?h>Ssi81VnF=wF4=#fVo2r?U`y;~Sk!6$P z;a5$@egABugTxCI-(edJ?q)cEM1#2{;6`8pLPzv4Q@VA6DYkS#Tl+TlGKe9dgxiI+zIZ z#K;|cX6k&`3f6k|j+<$leScpciR2y&wheM_h2%JgWrA=j_QwF#-S3(M5qrd>Vmxk>>N>5sEm5Oov8a6}^ zQ*GCwI7nrUJ;p~(?ATUko|NzhhwZhnZlWaANBe*_Y+MA!EjxD*`g$0wAw<~cQ{art z_(>bb;DaO>`8fy6%IYRUKW$`&E9FozTe_I6YrPYCl0~^%^zDUfab%FeT~AxfR;8wP zh(L(WqEBkQQyXDv|1y@#;ZhT+y(%FbASkuY7_xu!4L&?IV?IuEuE6S?HR}0nqA7^D zPrU%-^U3~g%vuR=wGAj&HUMT9*g5ZwaK*nv7la}|4N1+7=#69k9f0rC+VgE$)>em~ z(r2*D_^-@owZeahcNs6J&u>93i-Z9RSh>9uc7Qa>pwVKw#-$!O9}IEY!-N{P?37Q^ z1R(4tU97&)f4p0WbiGUN%Y7h?xw>Wg3?3XIC4BCypy>q;q(iU}ooJG$HU$gGA!hV- zIN)RNv&G_36LD(GDdhcbudKPM-_&~g5Q+}g6SdS=w*ty`tw!}YhkhU~jV{Nr$QnLX zYpf#ofPF3?W;gLT+O%hhuEzKVTo_uL5@KpU8*P(IIbWY-izZfEE4`)2Zn^pvgnA^n zg+^k`O%lSAWs}Ac50*pf%`~dMzSUR{^`eod0&Z=zVr?7W+^UU<6n^>hpV}N~@kz5D zgHhB9po!v`XC(?Jz<$}`gHs45UQCmp0vuM+R)gcz6YnPDca-@&@n+a~B_@h|_R0#^ zQq?f4WClxAn`NoZ83qy9lXy9W^Ek?PYF#!Huf|#HUqQ-#NE3;2@_|k~PMA~qc7yV? zCSD9x>&;FQHY{8etWazyvG7Dyzx7I_6@W!3Q8pzd{i=_M9}cwhMEwHfwMt_nQ8Hn8 zwFKTKUfi8}!9DQuNK`q|TcrzTw7%Lo1wxG?FsJmVi5LCgPX;+BJ}i<|%5GeQC327L z>b0j1M6~WY6Vwjx&4?#kPjoOLCkdvD#ETQD7yUqq_^#ehrMBiU*hY zb}>=h@3ZlC=`&cqbkF1_9dO#Rr+#b~;f5IMuAUary z)=M|9;P$!%G$&Fo`k`@(Yn%?tWmtjI9~Zk`4gP$!hDq%1TRx9pUGQ^={Rz-hpW{`( z&nLoiB`P7Qav9EdNfx#!FTk=w#FF)L*2$=K^WMFCUPm#!)iqo%=q{?dJN>3#uhS5q z$R!tCScH+p=S8FH0j7ac z8n++9#M@mtDIAlBFj3r(wSK0%o`iL#4aCqlB*^m+KElTZ`Z#R;MC&hI^5;MaS{QNR zK{}(G-Hk{<5X89VP#?avQi>#YR-5nVh zw`FBA>jR(A-XC%S^42z^yz8_HnvaEen+JK!=W9dALgjNPwMaLd=LdE%+*#jn1j{cajmwnITQ?IJv_RS&I#W2^OF! z6Y6I}elGR-~{ckj#NU-(E>>s z>T=u(MRQFuTxx2H$=%+$Hsd^p4SRCK4ny7p?ySx3V2zOo^+)RtJlmF1GYwf(_Mfy07v+N3%_r5Thgbb_$Ud zDay2Tj_WSro#c~~sm6(3aoOeNzjGbeogOn1MO(cnd!4o~(Vg%vM~z*HIB*#TvIg;D zu=Gk6X|Ys)17F*9f_%f2w%SKFJ<9h0)7>f9WB@AVwd+o#kCa?MF*dfdr4}+hAeG^a zPO>|&3VDO((VYd3@6H z){(9RH>+Sq)Jt-6+&Hufa1)o4h5TiR)OS11HQZYKLnKJ>M zNKD;m1$=7)@C*LMNbcbNA6%2``w^0L)hfhohtw@LdMZtDI^IMbu=YbFyyuy%6&Z1 z8f8BKVDeVh1f~B&Z}x*gAwdbzPam2D5{dJ>eb(6wiovv9D`h0~rcFUzo4*PyM?Qcd znmJ0feg;?J&}7(!!MH?sw3Q=U3gL}Xu2@;V9h~G@EsaEu5q4XMqN2%5FK1I5kh{3$plO$mG4HK##yDRnjqra#A<^+D`xk$S0jgBBkMre~op zq%fBa-R)jYTq$6_^>3y#48OBr+3b@?0hG61qwd~hQoP)hS7=5D^&5t|LT0Mj7l z?P)>&0NLA7fHi;-M!~$j<^Z!qvu>9;FMfiO$xw`FXpD)DvLQi)fFT%H;8F4+A~3wH zU>?ft+U7}(>_%s*CI8ss0m^GxJbD_t4hEMPXzNCo7lVgVSs9*A*Pa-aPb%jVN zXdfVA$x<#XyW{c$=e-ILTtf|Pz>JRhKOKS(nrj@)ZKN2EtkJqpQZG>eW|wj_^;--k zwdd`cZk0D{P?#yUFir^yyBtPHuW2r%DN-tsr3v}8?5MG=RO_d2KnoCPIBh6c@ROU! zrz@XgSils00yY@$efIl6-43<|X@~>|nCECNW&RCE6y%s)oPh!DMZ_EcB^xjyO|bzJ zdp=qT>txWcJPD#^jfi)I;_jN^O#5)txyZWFt^9Q{fO=&o7QDS$R=*5JFoSflwwMY* z;lP8#DOQfKKhPr)13G4U0-}iJzziXm-ax|V*e`6E^L3~Vr?AsSYM8}CGJDW=CBa@K z=Fs&sOnqiK(e()|KM)2TS4L9f( zWL~YfJ2-}ch6wP{Ee_s;a|4d@tgiBMTu+!JYwX9g+lm%KYks42jxQq<8$1beRz1Xz z_>?hNpEdTNSzEdZ_I!|)k?Tz-?gNpW3DH6wEH%VT32Uo=C-?StG9zLldqG6X_fm`0 z?fTL)F(f8t$#dS@$7b*VWJ|z>R0vDh`f*8ET55Z_UY=>&!_&{3a;hy~H4Gu4r* zLYR{Rqu2tu=;0##5w6N~#pH<-+xQH{dd%{gi*m7-&WMwFH16q^{mdA#bU}@~Gx@k4 z3{&>Dfn=dX@WJNf8ib`xTr1!bmn<#FLQT2H0pqlj7I05<3I>&ONl$(lpJBn7g3 zO742s;{QnLtJHP<+mqQbn9Ikr(}fLP7@DK>fckulPgu3`&Lo*ckQvg>jGizJn?cc~ z*yMqDLqBfpljV0*@;q^v(@yys}&jBxu8$pH3a+CH%z zv;4pnsed?M5$lhww!_Ekr*VW`hbiN9LH8tj8ZqwsbRk<<4rmPEyQeUdyc z>){X9AnOttnbfGgA`nTi#GmLw0CORRk(q)qAlR;4cqQI#F>Isc40dt9yKGrtR9CR! z)9zr#LP1mv$&?MDG9Dr!OU2Ng=*?_3R98v@R$r2zInt0XNyNg@@fqx9jBWcpG%LEu zAQo7$TSAGX)Mdd$TBOR!rJPJsyDgbpq7t0bVls?bUFChrQJ||%E6J(jSe$6AfeSoI zeys>Y4@P)E`{970UgSMZO}OP^upl-jkdL{QL$bzF5D(@SMPXK87l5&LGnT>ghuHj?fNe2RSU)ZE}YRq;KsEPyqp_{UHW-JMe zWa$W$&gvk`hgNie3XM?*A{{_JW-%l0J(Gf$CXFB-<5@DQV)tD&POh$r?t~!VNFE;kgQ*j3Z5DMjs00 zVc)*E3Q}4u$>F)D=1|3)mnW-eH8e*D^PZZ|=xIKRPrimUaBC)K!(oO^A0vq_JT;Rs ziO^m%aZ=$4`Ol^yKV;Em{H5u7t1su{>O%}jy7FPy&0chKn7WzaZf?g<&p)1dQ|4r* zlnFB%nYU&-8Ff69M=&^SpDPl$Gzu9{EV$7!j*H5t=`??Z&J|bWH0#g-Dm@};oyD)1 zkI@kkG`Oil(iE9kY?AS5Zf6N4cZfa3v~qHAE7Q_S`W zTP1$4;dwg0A&p^zhNYc79w-8Wt9e9fJv?UY<1PHS%|1@>qh}xY^5b^<_!@q^%s#%B zA1}9$ll+*qkFVp$9m+RgAafr&zQR2VTvxhh0W9a91+uH$vw-#@_bjlz*gXqydG{>P zUG1I)yqCCVf$tjoOqm4%-;jG2_^x%&0^dvBv%vQ<_bl)g+_S)UoqHDee#t!xe823T z1-@bTEb#5L&$kGCFL%!Z-}UZU;Pc(Hz;}at7WiJ_o&~;Fx@UoJ#61gqH@atm?^W(u z;Cr=wo)Gv(-Lt^A%RLKxH@Rnl?^oQjz&GZe1-{+xS>OxYv%vSO?pfd)ch3Uf9{apk z;Jev93w*b@XMu0RJqvt$-Lt^=8uu*lz1BSoe3R~3;Cr2W7WnqLXMyka_W3me-;{e6 z_-=L20^e=!S>XFM_bl*DyJvxK#ytys``xp^cfdUhe6#LZ;G470uNC+Xx@Up!4enXs zJLH}PzIpd7@cp`b7Wm%io&~-I_bl)ocFzLe5%(QYAo&~t;756Og72UJIS8~q+->Q2S_{wU;@@E0C5*G-BVO$^}uEhlc32Jja0_h`hfk66>xIiHN?YKZ7{rho&K>E(O zKp=gWD==Hme-{@Bq`wmv2&9k31p?{2;{t*7cjE$q^dH0p0_l6=0)h0sae+Yk-^T?4 z>F>D$v-vz07YL;9iwgwO-;WCf(tj8i2&9k41p?_4ae+Yk2XTQw`iF6WK>B1{AdtS_ z6_{=4AH@X%=^w=f0_g|h0)g~{ae+YkkK+P?^nZv81kw-11p?`Z;{t*7pTq?M=|6P^ zW<&Z&Tp*BsG%gTGKNc4Vr2k`FAdr4ME)YnciVFnNe-;-Ar2jlF5J*1}7YL-EbOmN> z`WJD5K>9D^0)g~Xae+Yk>9{~3{a0~;K>9z$1p?{Qae+YknYch8{o}YmApM_h!Oi2s z`Jagk1k%sO1p?`x#03KBzm5w8($B>O0_o@D0)g~@i3C%qKp_2UTp*DCA8~;|`hU6tvqya` zE)Yn+9v29t|5scfkpA1aKp_1_Tp*BsGcFKF|6N=lkpBC)Kp_2ATp*Bs+ZC8S>QCbW zf%HGb1p?`Fae+Ykowz_C{f}{hK>DBJ0)h0qae+Yky|_Ri{eD~^kpADU!0b^!hzkVL zAI1d&>7T^~0_mT}1p?`h;sSy6$8mu``k&(hf%Grp0)h1TxIiHNi7POB)c+F~2&Dfd zE)Yn68W#wpe;F4Dq<<9`2&8|FoFap5A7f(sfGwyTjgkiZ~p>H9JxbgId&M*98?9nIl>QoOk@qfH&9$v9@bksi!wq@yU~jM9`K7~;OZ z-I;bwBiVvPQ0RRA5RUmN>K##~bc-DaU5@Kg(p^fQWs|Vhf??V1$rUA7{N7p=(xQs!3{b;49^F0anZYUo@}{@9gppi z`gIv|Tn*zRZjXSO>p@r{GeGa#GA?@%E~PBN^WGhTP)$8dxa~{=sc+9DQyIT4)04{h zZD%0JPpYg15RE&T( zz7`!veX4K(SvwlYV}+zXok?}MLf(Z6oQ-kg0X*4Zd_yRMd0@22&Bi;_2&$3Y8;9{% zC=B|72=0rN+_?DF$n8HEBCaPq4lh8oTQS|y40J<@S$!gt#T}W5JR~2jI_`v>H@_%@ z5iH=6-243*{Z1S9kCPFpJMS_$Avb`KAL#G>nRJGL?HU;cCV+z!1yB zfov6L)9uYMqytazb5p7`4uaU#7PlZT@ZCOfrR5Suw%H@yffYvB`~D2~v6$$CT<$|E zR(b@-!nk)DCu|nu>N6>BGtt9rz{9X&Kbxxc`Cgv%d7ujQ=%36NG7A5JIwroHQD2Tv zZ;%yzv)OKp;ErYrGejm4TA+IPuFmA^eL5rhY9_Zuk{I#oS~w)45okM)z@!fjDe$AH~!{Z7Y65UQt(eVkN8TIvx0B98H%8Zj)GF4hu zPw*{(w9Qcm-3N|a9L4@hj%u)F1m`uCryd6+l2|S+bTMTKtyg0PVrsp1TY_4z1=7>hdhOO&Ix!z7Ku8d6DiJ5?AF`%?oY6hx ztrHRJ*v4kW6ODF|>r!y;Ov1Ud2hN>a!?{d!BE*pZGs{W4NJ-J-@zes|IHk?7to())l-P6U^o<~DmeN0ySo}8%S>L!doC}sm0uN9{jC7tGni1M2xC zao_1)?A)e4djRzUf(uGV4O+DMcY4^+sMcNvIZVMyUeG`1z2|)LW?JhY@W(oxQ9N%8 zm&Q}11%CM@#Bo8cDR*imJQ(lI`PpF7sj~+VegN4#j|&Yy?k_hWkjGIN6vcjDwyFqVt_AsWdZt!$07MI6UHYGaNreG`3 zM5LSv^e`x8n^RC=xh~S`5WIUH^X19NzU(Y&D`#HHcJgaSUB-+#%85 z>>?|}$K9S5()H3A3PZ(0J4N5^Hu3KiFCO@~#GR=?q(quy@?bpG@DVt_yRl{}|I{bx zn*0DcW-r3!#T2V3fs6z#MZaN$93@DJ1yGY{%lH8Xql`3O(a2gY6oW;L8gXcnfxvuO zO(S`|$quhp=979s2yCgO5ppC3hEri|F5Hq5;}O&2 z5NQ*0W&)WQP6_^-)1X24JyY(DQ|s;BcQI z=ze0YVl_R;d1uCi%qWcS+^!;~LE<72A9yyDxJ3>mCHgt6xoeqP{-8(&6znH-g^#!^ z3ZZu$M-&SVEef8Hz=*+J9qdUKy4K{g528i7Z$Y(-I0e5mIR@J6;0x3=PcQ}Ct>g0$ zNdYk4Lkoz#HIl^fCN7JsKxg>`xW;kqlhOdZ(Wk|v!(@@kNQx*+E;6uCt`FmMUZY@M zL;DEJQ=VjALWw~+umYbn^n04_ax&(@rTfn-YkLk*M4}L+B2=FT}@>JOG zio{lmom*~3EcZb$vd|wz5{MEMz+Kb|5EB&R4wqY1gbLelwL+iSlNZsakr>FL!E*t= zL|8#=I1>iuWz8?zW-TO#dO^YV9+n|x;kW=B7V!K53|cnkIDouKuc$>ryRb9;j9xB` zGx5p39)0B}I&;_cCl%ZvfBpSm(AWI6`SY(Hd;dQz*R08(KhRgINB`os zldjsogwSJa{)Zpt|Dmh-r>L23P+zVdI`)?KHD+_3=Fe!$d)8-o{8z<$Wdx!p+KTqE zUmKOQ{-jlrQY`}sMHGqYZ+45tlBbel#iJvj; z810JqWc*n+OMdONfN629BRrH@C$ky4XxtyAsAG_B6SPYkTeXD?-~)el zRdD`;>FIO#iM065A8#jo*lphkQvlXdJxK{Wr!G6&X5q`c!6WMfAqsl z5qUo0ZjX&E&QY+N;*JNtAaI~+kzGQK{@b_w>-BeEUi=3h9$x$Jf9I$7zT?N=A`NEx zul9XOKmV@Zy$rv<_=!h<=ljq87AuN>@td#y&2RtO+yd44qp9t!UDyAo-=u~<@!q#R za`dj>{x$mj+GqaxHH+{6eJm8E{`{|pzWhhWns3^M-|HVc{k~Ux_SgQ9zNLEFd%%AK zH~H@Ahdcl2Ck;UxK6}!!huHOT)57!8LS6#A)X41SH}uN>LL;?j!Ahxpu*>UV&X- z1q>CBVHq?wC{*b{18D;|h~r?b+SCKzc$4zYVGu+MHc+ju)}G3hz?bn16rguQ&n&8O zMAZgQ0kh!AJ@T4xg^|K?hqVX{G9Z3L$;^Q`Zd&$XvMfWHH#n`A zxidST|3^1rsR^w}dM3LIx=iinGY&G30)0|v)W~ubvH9)NMpMT>v$-RUvk1lXsdxJ0 zJ;q$eQYxjW8z9h*%vLMMn^@Pl=mM)D{}oCBff0)q;d0yYzP(D480RCfL*hDus*&v^rC;*Y# za;sBF9ILw`IiTkuE#f{4ut`WYD5j)8$jI>~O8Zbo@@E=9Bu+$*;JrkWh)l#`4-hmF z!ry3}mV7RpIicME$Y;VW8#CH#vNezkyLi6W2Qxkr% zSgbcFzXei#e8~5!m`c;EP2da*66{gPe92tkm>g*NfBU+Ok3TGU8c~oXWB*o`kfEMH z4O?2TZcI_;g?;->9cOQY86*+bv~S;{2?0%1uo5PgSgH*&W4L3F+j72tU!I1cuGK{F zV0aiTsqcgfT4NwtGd(Fx*vTr2iLhvf{emH=JqSH~162$*^vC_Yt%3(&BCvqA@qAW(w_a$O^;5GYi_RIUaVjq5WbK!$mRil<3%%)87$ZY=b14u@K)XA!`iS zk0m2p!64A~xC@P2BD8oLGoh1+y~KX$7l|5#3ZT;2$#Cs(kE8|$GqF)b_#i8XoZiL^ z&m;x1tkSX;lLM!x?SPKXPe*LZEI~NPe%znI?N#v&G9>P@+DJwVhXV^*aH9oiiL;tP zzvQ@5s>sGFQR)o88Y5Y(eu|bHiS(3DgMUMhq||oD@}-CY;nDVdq;J&vfuTM(-+;IN$?v{C z$*X+K5;4~ev$vTXcJ{=QCYaTQn9q=uUl07l$CsA<{d4{sj?K+1&mHrZ56v9$-#mBh z=nZ63m|ydenaIBh_9ARSH*x$j36E%QHRNomV_bojv?LN@dS63g00fWvMW~$69b2IU zK!%kfu_)|Yyn_jy1i;!^GMGq9h}{Qg04Z@sB*g4Pn2S#DlP`FyBDf)LfP^Xm zGzL>;ixhOK3Gxz{fC`H44Ac)`m}|r32ZUS?_W>*(0!6+9)V0zX`j|+NmAOj_iW3Q6fO_2)d{VYa=8>J}#dh)vUIsmggN$E=&_x+4hzHz5h9u%LTfv>`OTQPZc66rG zUT?JMhGm`j?G>b)#-_ZAFHf}HTOr*D(x|Xq9a@I2lJ>yVeaf=4M_@67QwK+6BMT$E zEYd2+h+kH`4Q!|bVm@Nbdp0lFk!#q3>@G%+efwe3g!k4O0$M7tBQ48wBAWY5~f)L zcAA4-j+{i4wzwio@Z|i#+fZYb?i|31>FR<6acnJ~8zJUEW*>Xu5mLvIlNo!uof#HWU>vWvcf$aJjv`ot zprY3{cas?&cWNb&TLk-cnDR$iK7ff6uepvOI60eHeyjGW>`q800$plQhxtD0TjNwd}r1f_t^*Z%uzIgu`3u zh|D!r=Qi`H2rxMD+TnF9-k{N%XPn^&$sCpaOp~+Es*Jktj|~6DeY#?M#?A zNT1XvECEO^BspT{314oiF@Pd$qI7g%RU|YYPbSW<8e?Qw6=8uh%}@i0D$Mes7g=G5^*c8=FCINtEb(zZ3 zwPKq8_HsCJ$2tZ_d4QQ(amM;7u<4orqVs8N?3;nURqIETem^Xq@!_9Ced7d<;h1S)y_fu(ZrW&I;u`g8`KFry0Mr{$113U}+F&7Ka_Fpq zyu46O>K~l%Xsriod)$&0Se-pgG;5F{R8ja(V=AgJ1!4Q4z0o!p1rVi|nNs*IO{wH_ zv^9t;S^ffG7>R_kgo_DL9*BHbuvgmRC;HBbXZ8ptJ}ji!U4zZ7ahAl@h;pm*I^hI0 zNIgo#^Z-CXdM?rW%cxu>lcm)%A=~d$>;4{O5{CGOai-x8YW~fzpxKPlOtyAR!B72L zkn?i`axi6$fe3-bC(;PPWvj(YjSqZ`{EFM%0tM5Kox)YXYR6~4#yVv|4BU{gPNo)0 z>PMP-t#nTn9g?Jk+IV44ez0GW)`Ma3x&j;!7Sa=r3MNe}*){CZ4rSkTAk%E|NN}dT z$hQQdUC@`|Mp(=cJdh{Zm~0JNgy_J?X#iqhF{hx(k-1rd9rjEJE=MwqNw|!SiN0k- zi7?>bX&8re$l^Iwv1&j}>Nfp3DLV6Tur%j&78@86eaC9hS<1A_`}79Ly3EsFZh=M; z)+@JBS#5DV36>g$`GMH8x>b`9OH31M$4LFL!HK$zPl7FeVbj9qdbU9*T%}2kmuYnk zw!PFu(7^>#{Na4fIleizvK?0o!fq@URAM`nPsk=Q;{CN`(|B3C$+Q0QokvgXmJ|G? znS*oKvT4mE`6h5hmNL>w_&_C?pp28mEN-W3=fKal=bu8y`DbuO3h5aH>4pX@lkj=A z1mY?qhdKz9h?fbMxeey#KyNuM^pcNYm@}L4$qK%rWS+FP&E67c9e48z2ZRWM1w8`} zP*7Atrd#TiOyAZ8fpw{d74)b#{00vrCDtq^d|HI9v|6c!#UOpr9v?=LWchjRW3%Bu zS%^q8u(nkBu-&m=V1m~{tk)CIJS!~AGv8>k_uP}ISlj_4%ZpBMkq@YITLKdTvYM-V91P}o>k|XRG zFlgw7oN(4M7}pQ(2%&sxG+lHm-2i)_gk-|)X(jO4h0Q`+A+8MnW9&eBM(amm9)oe4 zZi)S}zI{8%=6w8wALsFtT`TA>t(1>{)HMC2reBTY%a46@NEQC<6<@#Xhr9mS^VeRk zZ#wfUzoZJU8M{*DzWA~$RPNXR3*Nu^gD+KukG&L0t$+WPYgOS--ifl`9>-rV`91vg z@`V#>@}8NiRpG7Zli=blrefAyMw{PI1o-nde&KJ_9s z{JN{vAN<|>uYZ^K_N;m;>;30{_o_ql<9~0wef@)8-h27|hc15*N8a8S_a3|a3GcHn z_I_i3>-s0WtFG|Azwnb+m0ta->z_IE;7#AZZ!z4v>qSSt_{axuKY6vP-}m;v_~1>M z@bf#r{OS+BT<7te;zqZ=J%>sE$vkPyRT7y@^6sy)zcNe{XaT$jF$8WhtJ$BRb4wZY!jFGBvFox}4Ly(5CoDzBejj4&~gv{hEJ|MxYQyz07X*rZY zV~M>sh#4nDh6C2<#H&-pefpB@B*rnA3{#+Z+1@CVF>xld!8yVU7G}jWz~p=5#OP#N zf9$vZv}6YW84>#}JP9~Cn4Dk}k;=gnk*96f_>z(lqe=oEF?Tr!BYTF~-(<{mjRuo3 z@HP)lgifD3bLeGppK6Gut4qe4g@yd9enCiUl7xB)LKvA;I?Z?>We6VM*0SPQL_x~@ z5T+4abQg;i7C?)vq_qWm+B$NfG8G``f~<;Qdf1)#d=M%~?3-*~ie$>k4hgeVd{>d@ zeg!+RZ6W-+FR&s{p1 z26rRKu(TH9Z@v(Ao^-V}cs@Mo=@D?*!{mYxQwDI$qqaBqQ1){c8z}ALEAQ%CYW#XXgJ21DX@`KXdrKFmKVvL;Wb0R+wu*#5v( zU`+{2$OVgG5I8o|D=to>gCOj+5R#p}v518k=p7m7fv*cQl*m2G5AnZ{_%r#dGO%DQ z`zG#=Hg%FHsajxAUSop7eFWt+vp2G1`cNN9rb6wfw>DI zZS~4?g#AQi42-UrI>0_o<;^0Av0=-8P5U10PP7_u*NEvBY{#`iV?df?9C&i`WO=gh z_~v$O}z!I+SCPIVT z3WQju1Ggg+QymBE1`ELdq0KMYc{U*Ihf^U2d;X6f|2uETWSKu6=4=^+d?}-4n+~KT zB2&BWX*&3@P?p$uh^D0!@2M=&$YCH>4zWOnW7I(w zOxfi=a4v9j3M1j-=7NXM<|{&g*z<$|lxo4)5-bDtQ)X4rDPotH5$_225@+0$ep^z~ zTN48&nKzk0@6GH`xOZbGQc&EU@%!YgJ)Su~&5`+u475mK+m%t4lF@Q4lO(p38Sl#a z8fL~5`A{}8=aXqo-kLdIJTM?>Nhfpuu~CF#w!+-7an@8n@*eRe)K1u*DYxpp5e|ci zR1k|N`Ajx5=W%i;zRoNy8}pJZ+-aPvQ%E;XekAn8bLmaa!_9Bry~V7EeNcQvKroWU zS(2dycD{=QIQXw|)+sfsV7riI=pcO4#|3v_T4cPl72HiX7MOr5Xnw*=^+ko4dNPUIoL=^IwtYaTtCVDz3AGGFG6D<aup=4yRGUJIFnhd{gwCaoW)tPZ5| zfl1~d77cvX38?fr_<~I@5|1eI&@u^s_4X5)2Qw7?Mm&QTfqfA}#D+cMxblU#PBCSj zAqOeejG2=W;Rs7J*{AI%QPwVdj%a@(^U(}B<1@1Y#GrHn+tubH3KlKd^y*$*OwZn1 z4K?g1-O5a94@H>WRT!5$7_yoSI1ik}Nyb|xk`VSUtmy<2dcgB}IX>-VQ?|Fr;F8YA zVxegMxq_sqc`B1_pSwRZ%1ub-q)%o>*8Mw3dM3t0qfdMnsE`H$LIB0C!_$>Xf^JK6 z2l`2jBzvMp=l!#nHP&h9d}Qvu*KXocG& zR-|m8Z2WwU2AEqHyfEe>F$vZRY|_S~AL<0I0^ptur-}y;d5@Zl;KWRlmT357(y_dR ztKKVwfuS=GAT1@;Hl2DMaYsqKhL}l^R}mNoBv4EsndOb4jj`k`*6blI5_CM3(c|v? zO9oHZL_*LY7Z`|la`eY)X8^0LFrEJNkR&*wBT?9ZPe>AOuS(2{F~!dwU0dS?bSK=8 z!`4i*>P^Avk&9NyB{^&*x58)OT#BGfp<>h%c>>m)=rmKWV4kr_MD0d`%QecLGe zIg^mttU{!Leh$&>jWB&=m+gTq66tg43UrLf%Tr9iXEGDR*Csdyo$>JTyQxa*h;iF& zG)340w-f^&QI3E`Ed@ISi~K=spCa7|m?uOTwUa8a*auY~{@YMFafzbg-c!V>I42N< z2Kafa5AhH=dcp1Fpa{e?vbI|6wAUt!kiuv-aKmY8_l4q72Ib;D26VD?U}j+shY@5| z!!ZLqwxMzoD8T~G+EAEA&akOD@!3r7QRug9jEe_szE2`4P+v>+Zi5a@)mG_jvRC+b zpmSFF12B9uU4m^Zy3j;U8Jz_CeK{l=nlRb}-Hw1Xc*Euqq2r$d-;WoqRWi65Ek?6+ zO?&edY_{haxpaji7A_8uumPk#3znDT1!Yow0fzi2*F~x;r2NTs&b9B)=!KMlDDMiJ@9)H^^bevk8I<_O%Gy?zKGT5!;?*)&?LlG!jr#(lYT4 zfh8i#8?2xZn*bgm&kApreu~s57TOiPt8Z-L`3Ck7#K3?#?SDhQUI*Vk>!J?Beq z6$1p_HVW=c3PRkM$VnD&g5)ajCy@5XUjj5jBaELbW=^xiuoXZ`h*S<-Z{mh+L!U52 zY-h++WTr^Fw4quH00$RYSsXX*jxK?mM=7}zQZ??v2?C4W@o^nf7xof(Zb9aNtzQDS zWGN8imA$A09|18xVo$JiL(87JAQekmhVEf5hQc|KEHzs>{@jQrW}w&%?Ojp~1)pNs z5_Yeq<1gcTg|!Pm17vOC_-4^?u%UXNaQxY-PLAQ^8KXxNDpGe*sC@ BRuTXJ From f946ab787845e3090e9e8d03205c5e931fef2170 Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Wed, 25 Oct 2023 15:57:47 +0100 Subject: [PATCH 14/23] adjust segment search --- crates/extrinsics/src/env_check.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/crates/extrinsics/src/env_check.rs b/crates/extrinsics/src/env_check.rs index 628924dcb..4b6b16c92 100644 --- a/crates/extrinsics/src/env_check.rs +++ b/crates/extrinsics/src/env_check.rs @@ -45,15 +45,10 @@ impl From for EnvCheckError { } fn get_node_env_fields(registry: &PortableRegistry) -> Result>> { - let segments: Vec<&str> = if cfg!(test) { - vec!["contract_extrinsics", "env_check", "tests", "Environment"] - } else { - vec!["pallet_contracts", "Environment"] - }; let env_type = registry .types .iter() - .find(|t| t.ty.path.segments == segments) + .find(|t| t.ty.path.segments.contains(&"Environment".to_string())) .context("The node does not contain `Environment` type. Are you using correct `pallet-contracts` version?")?; if let TypeDef::Composite(composite) = &env_type.ty.type_def { From 8be90f0a125567e7b3f780f07f221f9976a8469b Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Wed, 25 Oct 2023 16:05:47 +0100 Subject: [PATCH 15/23] use anyhow error --- crates/extrinsics/src/env_check.rs | 46 ++++-------------------------- crates/extrinsics/src/lib.rs | 1 - 2 files changed, 5 insertions(+), 42 deletions(-) diff --git a/crates/extrinsics/src/env_check.rs b/crates/extrinsics/src/env_check.rs index 4b6b16c92..0f854c7da 100644 --- a/crates/extrinsics/src/env_check.rs +++ b/crates/extrinsics/src/env_check.rs @@ -11,39 +11,6 @@ use anyhow::{ Result, }; -#[derive(Debug, Clone, PartialEq)] -pub enum EnvCheckError { - CheckFailed(String), - RegistryError(String), -} - -impl std::fmt::Display for EnvCheckError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - Self::CheckFailed(e) => { - f.write_fmt(format_args!( - "Type check failed with following error: {}", - e - )) - } - Self::RegistryError(e) => { - f.write_fmt(format_args!( - "Error occurred while parsing type registry: {}", - e - )) - } - } - } -} - -impl std::error::Error for EnvCheckError {} - -impl From for EnvCheckError { - fn from(value: anyhow::Error) -> Self { - Self::RegistryError(value.to_string()) - } -} - fn get_node_env_fields(registry: &PortableRegistry) -> Result>> { let env_type = registry .types @@ -100,7 +67,7 @@ pub(crate) fn resolve_type_definition( pub fn compare_node_env_with_contract( node_registry: &PortableRegistry, contract_metadata: &InkProject, -) -> Result<(), EnvCheckError> { +) -> Result<()> { let env_fields = get_node_env_fields(node_registry)?; for field in env_fields { let field_name = field.name.context("Field does not have a name")?; @@ -111,7 +78,7 @@ pub fn compare_node_env_with_contract( let checked = compare_type(&field_name, field_def, contract_metadata, node_registry)?; if !checked { - return Err(EnvCheckError::CheckFailed(field_name)) + anyhow::bail!("Failed to validate the field: {}", field_name); } } Ok(()) @@ -189,10 +156,7 @@ mod tests { use crate::{ compare_node_env_with_contract, - env_check::{ - resolve_type_definition, - EnvCheckError, - }, + env_check::resolve_type_definition, }; #[derive(Encode, Decode, TypeInfo, serde::Serialize, serde::Deserialize)] @@ -400,8 +364,8 @@ mod tests { let result = compare_node_env_with_contract(&portable, &ink_project); assert_eq!( - result.err(), - Some(EnvCheckError::CheckFailed("timestamp".to_string())) + result.err().unwrap().to_string(), + "Failed to validate the field: timestamp" ) } } diff --git a/crates/extrinsics/src/lib.rs b/crates/extrinsics/src/lib.rs index d25593af3..a777df673 100644 --- a/crates/extrinsics/src/lib.rs +++ b/crates/extrinsics/src/lib.rs @@ -380,7 +380,6 @@ where T: Config, { compare_node_env_with_contract(client.metadata().types(), transcoder.metadata()) - .map_err(|e| e.into()) } #[derive(serde::Serialize)] From 018d4799f9f937c1bdd4a271e0cd6126c5991716 Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Wed, 25 Oct 2023 17:07:18 +0100 Subject: [PATCH 16/23] adjust segment comparison --- crates/extrinsics/src/env_check.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/crates/extrinsics/src/env_check.rs b/crates/extrinsics/src/env_check.rs index 0f854c7da..6add5d699 100644 --- a/crates/extrinsics/src/env_check.rs +++ b/crates/extrinsics/src/env_check.rs @@ -15,7 +15,10 @@ fn get_node_env_fields(registry: &PortableRegistry) -> Result(PhantomData); #[derive(Encode, Decode, TypeInfo, serde::Serialize, serde::Deserialize)] + #[scale_info(replace_segment("tests", "pallet_contracts"))] pub struct Environment { account_id: EnvironmentType, balance: EnvironmentType, @@ -200,6 +204,8 @@ mod tests { } #[derive(Encode, Decode, TypeInfo, serde::Serialize, serde::Deserialize)] + #[scale_info(replace_segment("tests", "pallet_contracts"))] + #[scale_info(replace_segment("InvalidEnvironment", "Environment"))] pub struct InvalidEnvironment { account_id: EnvironmentType, balance: EnvironmentType, From d90fd916fb23aa529507febfa040779384ffc1ec Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Wed, 25 Oct 2023 17:27:06 +0100 Subject: [PATCH 17/23] print warning if Env is not present in node metadata --- crates/extrinsics/src/env_check.rs | 32 ++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/crates/extrinsics/src/env_check.rs b/crates/extrinsics/src/env_check.rs index 6add5d699..9d36caf1b 100644 --- a/crates/extrinsics/src/env_check.rs +++ b/crates/extrinsics/src/env_check.rs @@ -11,18 +11,24 @@ use anyhow::{ Result, }; -fn get_node_env_fields(registry: &PortableRegistry) -> Result>> { - let env_type = registry - .types - .iter() - .find(|t| { - let len = t.ty.path.segments.len(); - t.ty.path.segments[len-2..] == ["pallet_contracts", "Environment"]} - ) - .context("The node does not contain `Environment` type. Are you using correct `pallet-contracts` version?")?; +fn get_node_env_fields( + registry: &PortableRegistry, +) -> Result>>> { + let env_type_option = registry.types.iter().find(|t| { + let len = t.ty.path.segments.len(); + t.ty.path.segments[len - 2..] == ["pallet_contracts", "Environment"] + }); + + // if we can't find the type, then we use the old contract version. + if env_type_option.is_none() { + tracing::warn!("The node does not contain `Environment` type. Are you using correct `pallet-contracts` version?"); + return Ok(None) + } + + let env_type = env_type_option.unwrap(); if let TypeDef::Composite(composite) = &env_type.ty.type_def { - Ok(composite.fields.clone()) + Ok(Some(composite.fields.clone())) } else { anyhow::bail!("`Environment` type definition is in the wrong format"); } @@ -71,7 +77,11 @@ pub fn compare_node_env_with_contract( node_registry: &PortableRegistry, contract_metadata: &InkProject, ) -> Result<()> { - let env_fields = get_node_env_fields(node_registry)?; + let env_fields_option = get_node_env_fields(node_registry)?; + if env_fields_option.is_none() { + return Ok(()) + } + let env_fields = env_fields_option.unwrap(); for field in env_fields { let field_name = field.name.context("Field does not have a name")?; if &field_name == "hasher" { From a5f67b212be0bebd325b0ec90a769c08b80f63d3 Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Wed, 25 Oct 2023 17:40:34 +0100 Subject: [PATCH 18/23] prettify code a bit --- crates/extrinsics/src/env_check.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/crates/extrinsics/src/env_check.rs b/crates/extrinsics/src/env_check.rs index 9d36caf1b..866f7bd5b 100644 --- a/crates/extrinsics/src/env_check.rs +++ b/crates/extrinsics/src/env_check.rs @@ -19,13 +19,13 @@ fn get_node_env_fields( t.ty.path.segments[len - 2..] == ["pallet_contracts", "Environment"] }); - // if we can't find the type, then we use the old contract version. - if env_type_option.is_none() { + let env_type = if let Some(tt) = env_type_option { + tt + } else { + // if we can't find the type, then we use the old contract version. tracing::warn!("The node does not contain `Environment` type. Are you using correct `pallet-contracts` version?"); return Ok(None) - } - - let env_type = env_type_option.unwrap(); + }; if let TypeDef::Composite(composite) = &env_type.ty.type_def { Ok(Some(composite.fields.clone())) @@ -78,10 +78,11 @@ pub fn compare_node_env_with_contract( contract_metadata: &InkProject, ) -> Result<()> { let env_fields_option = get_node_env_fields(node_registry)?; - if env_fields_option.is_none() { + let env_fields = if let Some(f) = env_fields_option { + f + } else { return Ok(()) - } - let env_fields = env_fields_option.unwrap(); + }; for field in env_fields { let field_name = field.name.context("Field does not have a name")?; if &field_name == "hasher" { From 9365cbb17f8deb2f4088c62d5b8f527ba0bf0cd3 Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Wed, 25 Oct 2023 17:52:14 +0100 Subject: [PATCH 19/23] use let-else and proper warning --- crates/extrinsics/src/env_check.rs | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/crates/extrinsics/src/env_check.rs b/crates/extrinsics/src/env_check.rs index 866f7bd5b..2a875dd7d 100644 --- a/crates/extrinsics/src/env_check.rs +++ b/crates/extrinsics/src/env_check.rs @@ -14,16 +14,12 @@ use anyhow::{ fn get_node_env_fields( registry: &PortableRegistry, ) -> Result>>> { - let env_type_option = registry.types.iter().find(|t| { + let Some(env_type) = registry.types.iter().find(|t| { let len = t.ty.path.segments.len(); t.ty.path.segments[len - 2..] == ["pallet_contracts", "Environment"] - }); - - let env_type = if let Some(tt) = env_type_option { - tt - } else { + }) else { // if we can't find the type, then we use the old contract version. - tracing::warn!("The node does not contain `Environment` type. Are you using correct `pallet-contracts` version?"); + contract_build::verbose_eprintln!(true, "The node does not contain `Environment` type. Are you using correct `pallet-contracts` version?"); return Ok(None) }; @@ -77,10 +73,7 @@ pub fn compare_node_env_with_contract( node_registry: &PortableRegistry, contract_metadata: &InkProject, ) -> Result<()> { - let env_fields_option = get_node_env_fields(node_registry)?; - let env_fields = if let Some(f) = env_fields_option { - f - } else { + let Some(env_fields) = get_node_env_fields(node_registry)? else { return Ok(()) }; for field in env_fields { From d63d6cc707715ae881a784c2bea23e9f2c6dedc7 Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Wed, 25 Oct 2023 17:54:26 +0100 Subject: [PATCH 20/23] add proper verbosity flag --- crates/extrinsics/src/env_check.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/extrinsics/src/env_check.rs b/crates/extrinsics/src/env_check.rs index 2a875dd7d..0ba209072 100644 --- a/crates/extrinsics/src/env_check.rs +++ b/crates/extrinsics/src/env_check.rs @@ -1,3 +1,4 @@ +use contract_build::Verbosity; use ink_metadata::InkProject; use scale_info::{ form::PortableForm, @@ -19,7 +20,7 @@ fn get_node_env_fields( t.ty.path.segments[len - 2..] == ["pallet_contracts", "Environment"] }) else { // if we can't find the type, then we use the old contract version. - contract_build::verbose_eprintln!(true, "The node does not contain `Environment` type. Are you using correct `pallet-contracts` version?"); + contract_build::verbose_eprintln!(Verbosity::Verbose, "The node does not contain `Environment` type. Are you using correct `pallet-contracts` version?"); return Ok(None) }; From 2e18d602d0dd0216fbeb662d5369c68b259bb913 Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Wed, 25 Oct 2023 17:58:48 +0100 Subject: [PATCH 21/23] elborate warning msg --- crates/extrinsics/src/env_check.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/extrinsics/src/env_check.rs b/crates/extrinsics/src/env_check.rs index 0ba209072..7e998b2cd 100644 --- a/crates/extrinsics/src/env_check.rs +++ b/crates/extrinsics/src/env_check.rs @@ -20,7 +20,9 @@ fn get_node_env_fields( t.ty.path.segments[len - 2..] == ["pallet_contracts", "Environment"] }) else { // if we can't find the type, then we use the old contract version. - contract_build::verbose_eprintln!(Verbosity::Verbose, "The node does not contain `Environment` type. Are you using correct `pallet-contracts` version?"); + contract_build::verbose_eprintln!(Verbosity::Verbose, + "The targeted version of `pallet-contracts` does not contain the `Environment` type. \ + Therefore the check for compatible types cannot be performed, and your types may not match those of the target node"); return Ok(None) }; From 899fc3346980a4261892081bc5396a43c0795ef1 Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Wed, 25 Oct 2023 18:02:48 +0100 Subject: [PATCH 22/23] vanila eprintln --- crates/extrinsics/src/env_check.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/extrinsics/src/env_check.rs b/crates/extrinsics/src/env_check.rs index 7e998b2cd..518d3bdee 100644 --- a/crates/extrinsics/src/env_check.rs +++ b/crates/extrinsics/src/env_check.rs @@ -1,4 +1,3 @@ -use contract_build::Verbosity; use ink_metadata::InkProject; use scale_info::{ form::PortableForm, @@ -20,9 +19,10 @@ fn get_node_env_fields( t.ty.path.segments[len - 2..] == ["pallet_contracts", "Environment"] }) else { // if we can't find the type, then we use the old contract version. - contract_build::verbose_eprintln!(Verbosity::Verbose, - "The targeted version of `pallet-contracts` does not contain the `Environment` type. \ - Therefore the check for compatible types cannot be performed, and your types may not match those of the target node"); + eprintln!( + "The targeted version of `pallet-contracts` does not contain the `Environment` type. \ + Therefore the check for compatible types cannot be performed, and your types may not match those of the target node" + ); return Ok(None) }; From 5073b8163fb66663e762f7c0fb73a4be05d6d4db Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Wed, 25 Oct 2023 20:53:47 +0100 Subject: [PATCH 23/23] saturating sub for slice bound --- crates/extrinsics/src/env_check.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/extrinsics/src/env_check.rs b/crates/extrinsics/src/env_check.rs index 518d3bdee..f84ce4645 100644 --- a/crates/extrinsics/src/env_check.rs +++ b/crates/extrinsics/src/env_check.rs @@ -16,7 +16,8 @@ fn get_node_env_fields( ) -> Result>>> { let Some(env_type) = registry.types.iter().find(|t| { let len = t.ty.path.segments.len(); - t.ty.path.segments[len - 2..] == ["pallet_contracts", "Environment"] + let bound = len.saturating_sub(2); + t.ty.path.segments[bound..] == ["pallet_contracts", "Environment"] }) else { // if we can't find the type, then we use the old contract version. eprintln!(