fix(wallet): restore real blockchain WalletDashboard, remove mock Wallet page

This commit is contained in:
2025-12-11 04:04:10 +03:00
parent 832276f387
commit f1b8d9160e
784 changed files with 45015 additions and 122 deletions
@@ -0,0 +1,106 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Learn about the way Substrate and FRAME view their blockchains as state machines."><title>pezkuwi_sdk_docs::reference_docs::blockchain_state_machines - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module blockchain_state_machines</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module blockchain_<wbr>state_<wbr>machines</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#state-transition-function" title="State Transition Function">State Transition Function</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../index.html">reference_docs</a></div><h1>Module <span>blockchain_<wbr>state_<wbr>machines</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../src/pezkuwi_sdk_docs/reference_docs/blockchain_state_machines.rs.html#1-29">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Learn about the way Substrate and FRAME view their blockchains as state machines.</p>
<h2 id="state-transition-function"><a class="doc-anchor" href="#state-transition-function">§</a>State Transition Function</h2>
<p>This document briefly explains how in the context of Substrate-based blockchains, we view the
blockchain as a <strong>decentralized state transition function</strong>.</p>
<p>Recall that a blockchains main purpose is to help a permissionless set of entities to agree on
a shared data-set, and how it evolves. This is called the <strong>State</strong>, also referred to as
“onchain” data, or <em>Storage</em> in the context of FRAME. The state is where the account balance of
each user is, for example, stored, and there is a canonical version of it that everyone agrees
upon.</p>
<p>Then, recall that a typical blockchain system will alter its state through execution of blocks.
<em>The component that dictates how this state alteration can happen is called the state transition
function</em>.</p>
<pre class="mermaid" style="text-align:center;background: transparent;">
flowchart LR
B[Block] --> STF
S[State] --> STF
STF --> NS[New State]
</pre><script src="https://cdn.jsdelivr.net/npm/mermaid@9.4.3/dist/mermaid.min.js"></script>
<script>
mermaid.initialize({
startOnLoad: false,
theme: 'dark',
flowchart: { useMaxWidth: true, htmlLabels: true },
suppressErrorRendering: true
});
document.addEventListener('DOMContentLoaded', async () => {
const elements = document.querySelectorAll('.mermaid');
for (const el of elements) {
const code = el.textContent;
try {
const { svg } = await mermaid.render('mermaid-' + Math.random().toString(36).substr(2, 9), code);
el.innerHTML = svg;
} catch (e) {
// On error, show as styled code block
el.style.fontFamily = 'monospace';
el.style.whiteSpace = 'pre';
el.style.background = '#1e293b';
el.style.padding = '1rem';
el.style.borderRadius = '8px';
el.style.color = '#94a3b8';
el.style.fontSize = '0.85rem';
el.style.border = '1px solid #334155';
}
}
});
</script>
<p>In Substrate-based blockchains, the state transition function is called the <em>Runtime</em>. This is
explained further in <a href="../wasm_meta_protocol/index.html" title="mod pezkuwi_sdk_docs::reference_docs::wasm_meta_protocol"><code>crate::reference_docs::wasm_meta_protocol</code></a>.</p>
<p>With this in mind, we can paint a complete picture of a blockchain as a state machine:</p>
<pre class="mermaid" style="text-align:center;background: transparent;">
flowchart LR
%%{init: {'flowchart' : {'curve' : 'linear'}}}%%
subgraph BData[Blockchain Database]
direction LR
BN[Block N] -.-> BN1[Block N+1]
end
subgraph SData[State Database]
direction LR
SN[State N] -.-> SN1[State N+1] -.-> SN2[State N+2]
end
BN --> STFN[STF]
SN --> STFN[STF]
STFN[STF] --> SN1
BN1 --> STFN1[STF]
SN1 --> STFN1[STF]
STFN1[STF] --> SN2
</pre><script src="https://cdn.jsdelivr.net/npm/mermaid@9.4.3/dist/mermaid.min.js"></script>
<script>
mermaid.initialize({
startOnLoad: false,
theme: 'dark',
flowchart: { useMaxWidth: true, htmlLabels: true },
suppressErrorRendering: true
});
document.addEventListener('DOMContentLoaded', async () => {
const elements = document.querySelectorAll('.mermaid');
for (const el of elements) {
const code = el.textContent;
try {
const { svg } = await mermaid.render('mermaid-' + Math.random().toString(36).substr(2, 9), code);
el.innerHTML = svg;
} catch (e) {
// On error, show as styled code block
el.style.fontFamily = 'monospace';
el.style.whiteSpace = 'pre';
el.style.background = '#1e293b';
el.style.padding = '1rem';
el.style.borderRadius = '8px';
el.style.color = '#94a3b8';
el.style.fontSize = '0.85rem';
el.style.border = '1px solid #334155';
}
}
});
</script>
<p>In essence, the state of the blockchain at block N is the outcome of applying the state
transition function to the previous state, and the current block as input. This can be
mathematically represented as:</p>
<div class="example-wrap"><pre class="language-math"><code>STF = F(State_N, Block_N) -&gt; State_{N+1}</code></pre></div></div></details></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {};
@@ -0,0 +1,89 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Learn about Substrates CLI, and how it can be extended."><title>pezkuwi_sdk_docs::reference_docs::cli - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module cli</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module cli</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#substrate-cli" title="Substrate CLI">Substrate CLI</a><ul><li><a href="#checking-the-available-cli-arguments" title="Checking the available CLI arguments">Checking the available CLI arguments</a></li><li><a href="#starting-a-local-substrate-node-in-development-mode" title="Starting a Local Substrate Node in Development Mode">Starting a Local Substrate Node in Development Mode</a></li><li><a href="#generating-custom-chain-specification" title="Generating Custom Chain Specification">Generating Custom Chain Specification</a></li><li><a href="#converting-chain-specification-to-raw-format" title="Converting Chain Specification to Raw Format">Converting Chain Specification to Raw Format</a></li><li><a href="#starting-the-first-node-in-a-private-network" title="Starting the First Node in a Private Network">Starting the First Node in a Private Network</a></li><li><a href="#adding-a-second-node-to-the-network" title="Adding a Second Node to the Network">Adding a Second Node to the Network</a></li></ul></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../index.html">reference_docs</a></div><h1>Module <span>cli</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../src/pezkuwi_sdk_docs/reference_docs/cli.rs.html#1-104">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Learn about Substrates CLI, and how it can be extended.</p>
<h2 id="substrate-cli"><a class="doc-anchor" href="#substrate-cli">§</a>Substrate CLI</h2>
<p>Lets see some examples of typical CLI arguments used when setting up and running a
Substrate-based blockchain. We use the <a href="https://github.com/pezkuwichain/pezkuwi-sdk/issues/25"><code>solochain-template</code></a>
on these examples.</p>
<h5 id="checking-the-available-cli-arguments"><a class="doc-anchor" href="#checking-the-available-cli-arguments">§</a>Checking the available CLI arguments</h5><div class="example-wrap"><pre class="language-bash"><code>./target/debug/node-template --help</code></pre></div>
<ul>
<li><code>--help</code>: Displays the available CLI arguments.</li>
</ul>
<h5 id="starting-a-local-substrate-node-in-development-mode"><a class="doc-anchor" href="#starting-a-local-substrate-node-in-development-mode">§</a>Starting a Local Substrate Node in Development Mode</h5><div class="example-wrap"><pre class="language-bash"><code>./target/release/node-template \
--dev</code></pre></div>
<ul>
<li><code>--dev</code>: Runs the node in development mode, using a pre-defined development chain
specification.
This mode ensures a fresh state by deleting existing data on restart.</li>
</ul>
<h5 id="generating-custom-chain-specification"><a class="doc-anchor" href="#generating-custom-chain-specification">§</a>Generating Custom Chain Specification</h5><div class="example-wrap"><pre class="language-bash"><code>./target/debug/node-template \
build-spec \
--disable-default-bootnode \
--chain local \
&gt; customSpec.json</code></pre></div>
<ul>
<li><code>build-spec</code>: A subcommand to generate a chain specification file.</li>
<li><code>--disable-default-bootnode</code>: Disables the default bootnodes in the node template.</li>
<li><code>--chain local</code>: Indicates the chain specification is for a local development chain.</li>
<li><code>&gt; customSpec.json</code>: Redirects the output into a customSpec.json file.</li>
</ul>
<h5 id="converting-chain-specification-to-raw-format"><a class="doc-anchor" href="#converting-chain-specification-to-raw-format">§</a>Converting Chain Specification to Raw Format</h5><div class="example-wrap"><pre class="language-bash"><code>./target/debug/node-template build-spec \
--chain=customSpec.json \
--raw \
--disable-default-bootnode \
&gt; customSpecRaw.json</code></pre></div>
<ul>
<li><code>--chain=customSpec.json</code>: Uses the custom chain specification as input.</li>
<li><code>--disable-default-bootnode</code>: Disables the default bootnodes in the node template.</li>
<li><code>--raw</code>: Converts the chain specification into a raw format with encoded storage keys.</li>
<li><code>&gt; customSpecRaw.json</code>: Outputs to <code>customSpecRaw.json</code>.</li>
</ul>
<h5 id="starting-the-first-node-in-a-private-network"><a class="doc-anchor" href="#starting-the-first-node-in-a-private-network">§</a>Starting the First Node in a Private Network</h5><div class="example-wrap"><pre class="language-bash"><code>./target/debug/node-template \
--base-path /tmp/node01 \
--chain ./customSpecRaw.json \
--port 30333 \
--ws-port 9945 \
--rpc-port 9933 \
--telemetry-url &quot;wss://telemetry.pezkuwichain.io/submit/ 0&quot; \
--validator \
--rpc-methods Unsafe \
--name MyNode01</code></pre></div>
<ul>
<li><code>--base-path</code>: Sets the directory for node data.</li>
<li><code>--chain</code>: Specifies the chain specification file.</li>
<li><code>--port</code>: TCP port for peer-to-peer communication.</li>
<li><code>--ws-port</code>: WebSocket port for RPC.</li>
<li><code>--rpc-port</code>: HTTP port for JSON-RPC.</li>
<li><code>--telemetry-url</code>: Endpoint for sending telemetry data.</li>
<li><code>--validator</code>: Indicates the nodes participation in block production.</li>
<li><code>--rpc-methods Unsafe</code>: Allows potentially unsafe RPC methods.</li>
<li><code>--name</code>: Sets a human-readable name for the node.</li>
</ul>
<h5 id="adding-a-second-node-to-the-network"><a class="doc-anchor" href="#adding-a-second-node-to-the-network">§</a>Adding a Second Node to the Network</h5><div class="example-wrap"><pre class="language-bash"><code>./target/release/node-template \
--base-path /tmp/bob \
--chain local \
--bob \
--port 30334 \
--rpc-port 9946 \
--telemetry-url &quot;wss://telemetry.pezkuwichain.io/submit/ 0&quot; \
--validator \
--bootnodes /ip4/127.0.0.1/tcp/30333/p2p/12D3KooWEyoppNCUx8Yx66oV9fJnriXwCcXwDDUA2kj6vnc6iDEp</code></pre></div>
<ul>
<li><code>--base-path</code>: Sets the directory for node data.</li>
<li><code>--chain</code>: Specifies the chain specification file.</li>
<li><code>--bob</code>: Initializes the node with the session keys of the “Bob” account.</li>
<li><code>--port</code>: TCP port for peer-to-peer communication.</li>
<li><code>--rpc-port</code>: HTTP port for JSON-RPC.</li>
<li><code>--telemetry-url</code>: Endpoint for sending telemetry data.</li>
<li><code>--validator</code>: Indicates the nodes participation in block production.</li>
<li><code>--bootnodes</code>: Specifies the address of the first node for peer discovery. Nodes should find
each other using mDNS. This command needs to be used if they dont find each other.</li>
</ul>
<hr />
<blockquote>
<p>If you are interested in learning how to extend the CLI with your custom arguments, you can
check out the <a href="https://www.youtube.com/watch?v=IVifko1fqjw">Customize your Substrate chain CLI</a>
seminar.
Please note that the seminar is based on an older version of Substrate, and <a href="https://docs.rs/clap/latest/clap/">Clap</a>
is now used instead of <a href="https://docs.rs/structopt/latest/structopt/">StructOpt</a> for parsing
CLI arguments.</p>
</blockquote>
</div></details></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {};
@@ -0,0 +1,40 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Learn about how to add custom host functions to the node."><title>pezkuwi_sdk_docs::reference_docs::custom_host_functions - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module custom_host_functions</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module custom_<wbr>host_<wbr>functions</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#custom-host-functions" title="Custom Host Functions">Custom Host Functions</a><ul><li><a href="#finding-host-functions" title="Finding Host Functions">Finding Host Functions</a></li><li><a href="#adding-new-host-functions" title="Adding New Host Functions">Adding New Host Functions</a></li></ul></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../index.html">reference_docs</a></div><h1>Module <span>custom_<wbr>host_<wbr>functions</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../src/pezkuwi_sdk_docs/reference_docs/custom_host_functions.rs.html#1-27">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Learn about how to add custom host functions to the node.</p>
<h2 id="custom-host-functions"><a class="doc-anchor" href="#custom-host-functions">§</a>Custom Host Functions</h2>
<p>Host functions are functions that the wasm instance can use to communicate with the node. Learn
more about this in <a href="../wasm_meta_protocol/index.html" title="mod pezkuwi_sdk_docs::reference_docs::wasm_meta_protocol"><code>crate::reference_docs::wasm_meta_protocol</code></a>.</p>
<h3 id="finding-host-functions"><a class="doc-anchor" href="#finding-host-functions">§</a>Finding Host Functions</h3>
<p>To declare a set of functions as host functions, you need to use the <code>#[runtime_interface]</code>
([<code>sp_runtime_interface</code>]) attribute macro. The most notable set of host functions are those
that allow the runtime to access the chain state, namely [<code>sp_io::storage</code>]. Some other notable
host functions are also defined in [<code>sp_io</code>].</p>
<h3 id="adding-new-host-functions"><a class="doc-anchor" href="#adding-new-host-functions">§</a>Adding New Host Functions</h3>
<blockquote>
<p>Adding a new host function is a big commitment and should be done with care. Namely, the nodes
in the network need to support all host functions forever in order to be able to sync
historical blocks.</p>
</blockquote>
<p>Adding host functions is only possible when you are using a node-template, so that you have
access to the boilerplate of building your node.</p>
<p>A group of host functions can always be grouped to gether as a tuple:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="attr">#[cfg(not(substrate_runtime))]
</span><span class="kw">pub type </span>SubstrateHostFunctions = (
storage::HostFunctions,
default_child_storage::HostFunctions,
misc::HostFunctions,
wasm_tracing::HostFunctions,
offchain::HostFunctions,
crypto::HostFunctions,
hashing::HostFunctions,
allocator::HostFunctions,
panic_handler::HostFunctions,
logging::HostFunctions,
<span class="kw">crate</span>::trie::HostFunctions,
offchain_index::HostFunctions,
transaction_index::HostFunctions,
);</code></pre></div>
<p>The host functions are attached to the node sides [<code>sc_executor::WasmExecutor</code>]. For example in
the minimal template, the setup looks as follows:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">type </span>FullClient =
sc_service::TFullClient&lt;Block, RuntimeApi, WasmExecutor&lt;HostFunctions&gt;&gt;;</code></pre></div></div></details></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {};
@@ -0,0 +1,106 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Learn about how to create custom RPC endpoints and runtime APIs."><title>pezkuwi_sdk_docs::reference_docs::custom_runtime_api_rpc - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module custom_runtime_api_rpc</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module custom_<wbr>runtime_<wbr>api_<wbr>rpc</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#custom-rpc-dos-and-donts" title="Custom RPC dos and donts">Custom RPC dos and donts</a><ul><li><a href="#background" title="Background">Background</a></li><li><a href="#problems-with-custom-rpc" title="Problems with Custom RPC">Problems with Custom RPC</a></li><li><a href="#alternatives" title="Alternatives">Alternatives</a></li><li><a href="#create-a-new-runtime-api" title="Create a new Runtime API">Create a new Runtime API</a></li><li><a href="#create-a-new-custom-rpc-legacy" title="Create a new custom RPC (Legacy)">Create a new custom RPC (Legacy)</a></li><li><a href="#add-a-new-rpc-to-the-node-legacy" title="Add a new RPC to the node (Legacy)">Add a new RPC to the node (Legacy)</a></li><li><a href="#future" title="Future">Future</a></li></ul></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../index.html">reference_docs</a></div><h1>Module <span>custom_<wbr>runtime_<wbr>api_<wbr>rpc</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../src/pezkuwi_sdk_docs/reference_docs/custom_runtime_api_rpc.rs.html#1-77">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Learn about how to create custom RPC endpoints and runtime APIs.</p>
<h2 id="custom-rpc-dos-and-donts"><a class="doc-anchor" href="#custom-rpc-dos-and-donts">§</a>Custom RPC dos and donts</h2>
<p><strong>TLDR:</strong> Dont create new custom RPCs. Instead, rely on custom Runtime APIs, combined with
<code>state_call</code>.</p>
<h3 id="background"><a class="doc-anchor" href="#background">§</a>Background</h3>
<p>Pezkuwi-SDK offers the ability to query and subscribe storages directly. However what it does
not have is <a href="https://github.com/pezkuwichain/pezkuwi-sdk/issues/101">view functions</a>. This is an
essential feature to avoid duplicated logic between runtime and the client SDK. Custom RPC was
used as a solution. It allow the RPC node to expose new RPCs that clients can be used to query
computed properties.</p>
<h3 id="problems-with-custom-rpc"><a class="doc-anchor" href="#problems-with-custom-rpc">§</a>Problems with Custom RPC</h3>
<p>Unfortunately, custom RPC comes with many problems. To list a few:</p>
<ul>
<li>It is offchain logic executed by the RPC node and therefore the client has to trust the RPC
node.</li>
<li>To upgrade or add a new RPC logic, the RPC node has to be upgraded. This can cause significant
trouble when the RPC infrastructure is decentralized as we will need to coordinate multiple
parties to upgrade the RPC nodes.</li>
<li>A lot of boilerplate code is required to add custom RPC.</li>
<li>It prevents dApps from using a light client or an alternative client.</li>
<li>It makes ecosystem tooling integration much more complicated. For example, dApps will not
be able to use <a href="https://github.com/AcalaNetwork/chopsticks">Chopsticks</a> for testing as
Chopsticks will not have the custom RPC implementation.</li>
<li>Poorly implemented custom RPC can be a DoS vector.</li>
</ul>
<p>Hence, we should avoid custom RPC.</p>
<h3 id="alternatives"><a class="doc-anchor" href="#alternatives">§</a>Alternatives</h3>
<p>Generally, [<code>sc_rpc::state::StateBackend::call</code>] aka. <code>state_call</code> should be used instead of
custom RPC.</p>
<p>Usually, each custom RPC comes with a corresponding runtime API which implements the business
logic. So instead of invoke the custom RPC, we can use <code>state_call</code> to invoke the runtime API
directly. This is a trivial change on the dApp and no change on the runtime side. We may remove
the custom RPC from the node side if wanted.</p>
<p>There are some other cases that a simple runtime API is not enough. For example, implementation
of Ethereum RPC requires an additional offchain database to index transactions. In this
particular case, we can have the RPC implemented on another client.</p>
<p>For example, the Acala EVM+ RPC are implemented by
<a href="https://github.com/AcalaNetwork/bodhi.js/tree/master/packages/eth-rpc-adapter">eth-rpc-adapter</a>.
Alternatively, the <a href="https://github.com/pezkuwi-evm/frontier">Frontier</a> project also provided
Ethereum RPC compatibility directly in the node-side software.</p>
<h3 id="create-a-new-runtime-api"><a class="doc-anchor" href="#create-a-new-runtime-api">§</a>Create a new Runtime API</h3>
<p>For example, lets take a look at the process through which the account nonce can be queried
through an RPC. First, a new runtime-api needs to be declared:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="macro">sp_api::decl_runtime_apis!</span> {
<span class="doccomment">/// The API to query account nonce.
</span><span class="kw">pub trait </span>AccountNonceApi&lt;AccountId, Nonce&gt; <span class="kw">where
</span>AccountId: codec::Codec,
Nonce: codec::Codec,
{
<span class="doccomment">/// Get current account nonce of given `AccountId`.
</span><span class="kw">fn </span>account_nonce(account: AccountId) -&gt; Nonce;
}
}</code></pre></div>
<p>This API is implemented at the runtime level, always inside [<code>sp_api::impl_runtime_apis!</code>].</p>
<p>As noted, this is already enough to make this API usable via <code>state_call</code>.</p>
<h3 id="create-a-new-custom-rpc-legacy"><a class="doc-anchor" href="#create-a-new-custom-rpc-legacy">§</a>Create a new custom RPC (Legacy)</h3>
<p>Should you wish to implement the legacy approach of exposing this runtime-api as a custom
RPC-api, then a custom RPC server has to be defined.</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="attr">#[rpc(client, server)]
</span><span class="kw">pub trait </span>SystemApi&lt;BlockHash, AccountId, Nonce&gt; {
<span class="doccomment">/// Returns the next valid index (aka nonce) for given account.
///
/// This method takes into consideration all pending transactions
/// currently in the pool and if no transactions are found in the pool
/// it fallbacks to query the index from the runtime (aka. state nonce).
</span><span class="attr">#[method(name = <span class="string">"system_accountNextIndex"</span>, aliases = [<span class="string">"account_nextIndex"</span>]</span>)]
<span class="kw">async fn </span>nonce(<span class="kw-2">&amp;</span><span class="self">self</span>, account: AccountId) -&gt; RpcResult&lt;Nonce&gt;;
<span class="doccomment">/// Dry run an extrinsic at a given block. Return SCALE encoded ApplyExtrinsicResult.
</span><span class="attr">#[method(name = <span class="string">"system_dryRun"</span>, aliases = [<span class="string">"system_dryRunAt"</span>]</span>, with_extensions)]
<span class="kw">async fn </span>dry_run(<span class="kw-2">&amp;</span><span class="self">self</span>, extrinsic: Bytes, at: <span class="prelude-ty">Option</span>&lt;BlockHash&gt;) -&gt; RpcResult&lt;Bytes&gt;;
}</code></pre></div><h3 id="add-a-new-rpc-to-the-node-legacy"><a class="doc-anchor" href="#add-a-new-rpc-to-the-node-legacy">§</a>Add a new RPC to the node (Legacy)</h3>
<p>Finally, this custom RPC needs to be integrated into the node side. This is usually done in a
<code>rpc.rs</code> in a typical template, as follows:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="kw">pub fn </span>create_full&lt;C, P&gt;(
deps: FullDeps&lt;C, P&gt;,
) -&gt; <span class="prelude-ty">Result</span>&lt;RpcModule&lt;()&gt;, Box&lt;<span class="kw">dyn </span>std::error::Error + Send + Sync&gt;&gt;
<span class="kw">where
</span>C: Send
+ Sync
+ <span class="lifetime">'static
</span>+ sp_api::ProvideRuntimeApi&lt;OpaqueBlock&gt;
+ HeaderBackend&lt;OpaqueBlock&gt;
+ HeaderMetadata&lt;OpaqueBlock, Error = BlockChainError&gt;
+ <span class="lifetime">'static</span>,
C::Api: sp_block_builder::BlockBuilder&lt;OpaqueBlock&gt;,
C::Api: substrate_frame_rpc_system::AccountNonceApi&lt;OpaqueBlock, AccountId, Nonce&gt;,
P: TransactionPool + <span class="lifetime">'static</span>,
{
<span class="kw">use </span>pezkuwi_sdk::substrate_frame_rpc_system::{System, SystemApiServer};
<span class="kw">let </span><span class="kw-2">mut </span>module = RpcModule::new(());
<span class="kw">let </span>FullDeps { client, pool } = deps;
module.merge(System::new(client.clone(), pool.clone()).into_rpc())<span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(module)
}</code></pre></div><h3 id="future"><a class="doc-anchor" href="#future">§</a>Future</h3>
<ul>
<li><a href="https://forum.network.pezkuwichain.io/t/cross-consensus-query-language-xcq/7583">XCQ</a> will be a good
solution for most of the query needs.</li>
<li><a href="https://github.com/paritytech/json-rpc-interface-spec">New JSON-RPC Specification</a></li>
</ul>
</div></details></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {};
@@ -0,0 +1,269 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Learn about how to write safe and defensive code in your FRAME runtime. Defensive programming is a design paradigm that enables a program to continue running despite unexpected behavior, input, or events that may arise in runtime. Usually, unforeseen circumstances may cause the program to stop or, in the Rust context, `panic!`. Defensive practices allow for these circumstances to be accounted for ahead of time and for them to be handled gracefully, which is in line with the intended fault-tolerant and deterministic nature of blockchains."><title>pezkuwi_sdk_docs::reference_docs::defensive_programming - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module defensive_programming</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module defensive_<wbr>programming</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#general-overview" title="General Overview">General Overview</a><ul><li><a href="#defensive-traits" title="Defensive Traits">Defensive Traits</a></li></ul></li><li><a href="#integer-overflow" title="Integer Overflow">Integer Overflow</a></li><li><a href="#infallible-arithmetic" title="Infallible Arithmetic">Infallible Arithmetic</a><ul><li><a href="#checked-arithmetic" title="Checked Arithmetic">Checked Arithmetic</a></li><li><a href="#saturating-operations" title="Saturating Operations">Saturating Operations</a></li><li><a href="#mathematical-operations-in-substrate-development---further-context" title="Mathematical Operations in Substrate Development - Further Context">Mathematical Operations in Substrate Development - Further Context</a></li><li><a href="#edge-cases-of-panic-able-instances-in-substrate" title="Edge cases of `panic!`-able instances in Substrate">Edge cases of <code>panic!</code>-able instances in Substrate</a></li></ul></li><li><a href="#other-resources" title="Other Resources">Other Resources</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../index.html">reference_docs</a></div><h1>Module <span>defensive_<wbr>programming</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../src/pezkuwi_sdk_docs/reference_docs/defensive_programming.rs.html#16-395">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Learn about how to write safe and defensive code in your FRAME runtime.
<a href="https://en.wikipedia.org/wiki/Defensive_programming">Defensive programming</a> is a design paradigm that enables a program to continue
running despite unexpected behavior, input, or events that may arise in runtime.
Usually, unforeseen circumstances may cause the program to stop or, in the Rust context,
<code>panic!</code>. Defensive practices allow for these circumstances to be accounted for ahead of time
and for them to be handled gracefully, which is in line with the intended fault-tolerant and
deterministic nature of blockchains.</p>
<p>The Pezkuwi SDK is built to reflect these principles and to facilitate their usage accordingly.</p>
<h3 id="general-overview"><a class="doc-anchor" href="#general-overview">§</a>General Overview</h3>
<p>When developing within the context of the Substrate runtime, there is one golden rule:</p>
<p><em><strong>DO NOT PANIC</strong></em>. There are some exceptions, but generally, this is the default precedent.</p>
<blockquote>
<p>Its important to differentiate between the runtime and node. The runtime refers to the core
business logic of a Substrate-based chain, whereas the node refers to the outer client, which
deals with telemetry and gossip from other nodes. For more information, read about
<a href="../wasm_meta_protocol/index.html#node-vs-runtime" title="mod pezkuwi_sdk_docs::reference_docs::wasm_meta_protocol">Substrates node
architecture</a>. Its also important
to note that the criticality of the node is slightly lesser
than that of the runtime, which is why you may see <code>unwrap()</code> or other “non-defensive”
approaches
in a few places of the nodes code repository.</p>
</blockquote>
<p>Most of these practices fall within Rusts
colloquial usage of proper error propagation, handling, and arithmetic-based edge cases.</p>
<p>General guidelines:</p>
<ul>
<li><strong>Avoid writing functions that could explicitly panic,</strong> such as directly using <code>unwrap()</code> on
a <a href="https://doc.rust-lang.org/1.91.1/core/result/enum.Result.html" title="enum core::result::Result"><code>Result</code></a>, or accessing an out-of-bounds index on a collection. Safer methods to access
collection types, i.e., <code>get()</code> which allow defensive handling of the resulting <a href="https://doc.rust-lang.org/1.91.1/core/option/enum.Option.html" title="enum core::option::Option"><code>Option</code></a> are
recommended to be used.</li>
<li><strong>It may be acceptable to use <code>except()</code>,</strong> but only if one is completely certain (and has
performed a check beforehand) that a value wont panic upon unwrapping. <em>Even this is
discouraged</em>, however, as future changes to that function could then cause that statement to
panic. It is important to ensure all possible errors are propagated and handled effectively.</li>
<li><strong>If a function <em>can</em> panic,</strong> it usually is prefaced with <code>unchecked_</code> to indicate its
unsafety.</li>
<li><strong>If you are writing a function that could panic,</strong> <a href="https://doc.rust-lang.org/rustdoc/how-to-write-documentation.html#documenting-components">document it!</a></li>
<li><strong>Carefully handle mathematical operations.</strong> Many seemingly, simplistic operations, such as
<strong>arithmetic</strong> in the runtime, could present a number of issues <a href="#integer-overflow">(see more later in this
document)</a>. Use checked arithmetic wherever possible.</li>
</ul>
<p>These guidelines could be summarized in the following example, where <code>bad_pop</code> is prone to
panicking, and <code>good_pop</code> allows for proper error handling to take place:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code> <span class="comment">// Bad pop always requires that we return something, even if vector/array is empty.
</span><span class="kw">fn </span>bad_pop&lt;T&gt;(v: Vec&lt;T&gt;) -&gt; T {}
<span class="comment">// Good pop allows us to return None from the Option if need be.
</span><span class="kw">fn </span>good_pop&lt;T&gt;(v: Vec&lt;T&gt;) -&gt; <span class="prelude-ty">Option</span>&lt;T&gt; {}</code></pre></div><h4 id="defensive-traits"><a class="doc-anchor" href="#defensive-traits">§</a>Defensive Traits</h4>
<p>The <a href="frame::traits::Defensive"><code>Defensive</code></a> trait provides a number of functions, all of which
provide an alternative to vanilla Rust functions, e.g.:</p>
<ul>
<li><a href="frame::traits::Defensive::defensive_unwrap_or"><code>defensive_unwrap_or()</code></a> instead of
<code>unwrap_or()</code></li>
<li><a href="frame::traits::DefensiveOption::defensive_ok_or"><code>defensive_ok_or()</code></a> instead of <code>ok_or()</code></li>
</ul>
<p>Defensive methods use <a href="https://doc.rust-lang.org/reference/conditional-compilation.html#debug_assertions"><code>debug_assertions</code></a>, which panic in development, but in
production/release, they will merely log an error (i.e., <code>log::error</code>).</p>
<p>The <a href="frame::traits::Defensive"><code>Defensive</code></a> trait and its various implementations can be found
<a href="frame::traits::Defensive">here</a>.</p>
<h3 id="integer-overflow"><a class="doc-anchor" href="#integer-overflow">§</a>Integer Overflow</h3>
<p>The Rust compiler prevents static overflow from happening at compile time.
The compiler panics in <strong>debug</strong> mode in the event of an integer overflow. In
<strong>release</strong> mode, it resorts to silently <em>wrapping</em> the overflowed amount in a modular fashion
(from the <code>MAX</code> back to zero).</p>
<p>In runtime development, we dont always have control over what is being supplied
as a parameter. For example, even this simple add function could present one of two outcomes
depending on whether it is in <strong>release</strong> or <strong>debug</strong> mode:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="kw">fn </span>naive_add(x: u8, y: u8) -&gt; u8 {
x + y
}</code></pre></div>
<p>If we passed overflow-able values at runtime, this could panic (or wrap if in release).</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code>naive_add(<span class="number">250u8</span>, <span class="number">10u8</span>); <span class="comment">// In debug mode, this would panic. In release, this would return 4.</span></code></pre></div>
<p>It is the silent portion of this behavior that presents a real issue. Such behavior should be
made obvious, especially in blockchain development, where unsafe arithmetic could produce
unexpected consequences like a user balance over or underflowing.</p>
<p>Fortunately, there are ways to both represent and handle these scenarios depending on our
specific use case natively built into Rust and libraries like [<code>sp_arithmetic</code>].</p>
<h3 id="infallible-arithmetic"><a class="doc-anchor" href="#infallible-arithmetic">§</a>Infallible Arithmetic</h3>
<p>Both Rust and Substrate provide safe ways to deal with numbers and alternatives to floating
point arithmetic.</p>
<p>Known scenarios that could be fallible should be avoided: i.e., avoiding the possibility of
dividing/modulo by zero at any point should be mitigated. One should be opting for a
<code>checked_*</code> method to introduce safe arithmetic in their code in most cases.</p>
<p>A developer should use fixed-point instead of floating-point arithmetic to mitigate the
potential for inaccuracy, rounding errors, or other unexpected behavior.</p>
<ul>
<li><a href="sp_arithmetic::fixed_point">Fixed point types</a> and their associated usage can be found here.</li>
<li><a href="sp_arithmetic::per_things">PerThing</a> and its associated types can be found here.</li>
</ul>
<p>Using floating point number types (i.e. f32, f64) in the runtime should be avoided, as a single non-deterministic result could cause chaos for blockchain consensus along with the issues above. For more on the specifics of the peculiarities of floating point calculations, <a href="https://www.youtube.com/watch?v=PZRI1IfStY0">watch this video by the Computerphile</a>.</p>
<p>The following methods demonstrate different ways to handle numbers natively in Rust safely,
without fear of panic or unexpected behavior from wrapping.</p>
<h4 id="checked-arithmetic"><a class="doc-anchor" href="#checked-arithmetic">§</a>Checked Arithmetic</h4>
<p><strong>Checked operations</strong> utilize an <code>Option&lt;T&gt;</code> as a return type. This allows for
catching any unexpected behavior in the event of an overflow through simple pattern matching.</p>
<p>This is an example of a valid operation:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="attr">#[test]
</span><span class="kw">fn </span>checked_add_example() {
<span class="comment">// This is valid, as 20 is perfectly within the bounds of u32.
</span><span class="kw">let </span>add = (<span class="number">10u32</span>).checked_add(<span class="number">10</span>);
<span class="macro">assert_eq!</span>(add, <span class="prelude-val">Some</span>(<span class="number">20</span>))
}</code></pre></div>
<p>This is an example of an invalid operation. In this case, a simulated integer overflow, which
would simply result in <code>None</code>:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="attr">#[test]
</span><span class="kw">fn </span>checked_add_handle_error_example() {
<span class="comment">// This is invalid - we are adding something to the max of u32::MAX, which would overflow.
// Luckily, checked_add just marks this as None!
</span><span class="kw">let </span>add = u32::MAX.checked_add(<span class="number">10</span>);
<span class="macro">assert_eq!</span>(add, <span class="prelude-val">None</span>)
}</code></pre></div>
<p>Suppose you arent sure which operation to use for runtime math. In that case, checked
operations are the safest bet, presenting two predictable (and erroring) outcomes that can be
handled accordingly (Some and None).</p>
<p>The following conventions can be seen within the Pezkuwi SDK, where it is
handled in two ways:</p>
<ul>
<li>As an <a href="https://doc.rust-lang.org/1.91.1/core/option/enum.Option.html" title="enum core::option::Option"><code>Option</code></a>, using the <code>if let</code> / <code>if</code> or <code>match</code></li>
<li>As a <a href="https://doc.rust-lang.org/1.91.1/core/result/enum.Result.html" title="enum core::result::Result"><code>Result</code></a>, via <code>ok_or</code> (or similar conversion to <a href="https://doc.rust-lang.org/1.91.1/core/result/enum.Result.html" title="enum core::result::Result"><code>Result</code></a> from <a href="https://doc.rust-lang.org/1.91.1/core/option/enum.Option.html" title="enum core::option::Option"><code>Option</code></a>)</li>
</ul>
<h5 id="handling-via-option---more-verbose"><a class="doc-anchor" href="#handling-via-option---more-verbose">§</a>Handling via Option - More Verbose</h5>
<p>Because wrapped operations return <code>Option&lt;T&gt;</code>, you can use a more verbose/explicit form of error
handling via <code>if</code> or <code>if let</code>:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="kw">fn </span>increase_balance(account: Address, amount: u64) -&gt; <span class="prelude-ty">Result</span>&lt;(), RuntimeError&gt; {
<span class="comment">// Get a user's current balance
</span><span class="kw">let </span>balance = Runtime::get_balance(account)<span class="question-mark">?</span>;
<span class="comment">// SAFELY increase the balance by some amount
</span><span class="kw">if let </span><span class="prelude-val">Some</span>(new_balance) = balance.checked_add(amount) {
Runtime::set_balance(account, new_balance);
<span class="prelude-val">Ok</span>(())
} <span class="kw">else </span>{
<span class="prelude-val">Err</span>(RuntimeError::Overflow)
}
}</code></pre></div>
<p>Optionally, match may also be directly used in a more concise manner:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="kw">fn </span>increase_balance_match(account: Address, amount: u64) -&gt; <span class="prelude-ty">Result</span>&lt;(), RuntimeError&gt; {
<span class="comment">// Get a user's current balance
</span><span class="kw">let </span>balance = Runtime::get_balance(account)<span class="question-mark">?</span>;
<span class="comment">// SAFELY increase the balance by some amount
</span><span class="kw">let </span>new_balance = <span class="kw">match </span>balance.checked_add(amount) {
<span class="prelude-val">Some</span>(balance) =&gt; balance,
<span class="prelude-val">None </span>=&gt; {
<span class="kw">return </span><span class="prelude-val">Err</span>(RuntimeError::Overflow);
},
};
Runtime::set_balance(account, new_balance);
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
<p>This is generally a useful convention for handling checked types and most types that return
<code>Option&lt;T&gt;</code>.</p>
<h5 id="handling-via-result---less-verbose"><a class="doc-anchor" href="#handling-via-result---less-verbose">§</a>Handling via Result - Less Verbose</h5>
<p>In the Pezkuwi SDK codebase, checked operations are handled as a <code>Result</code> via <code>ok_or</code>. This is
a less verbose way of expressing the above. This usage often boils down to the developers
preference:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="kw">fn </span>increase_balance_result(account: Address, amount: u64) -&gt; <span class="prelude-ty">Result</span>&lt;(), RuntimeError&gt; {
<span class="comment">// Get a user's current balance
</span><span class="kw">let </span>balance = Runtime::get_balance(account)<span class="question-mark">?</span>;
<span class="comment">// SAFELY increase the balance by some amount - this time, by using `ok_or`
</span><span class="kw">let </span>new_balance = balance.checked_add(amount).ok_or(RuntimeError::Overflow)<span class="question-mark">?</span>;
Runtime::set_balance(account, new_balance);
<span class="prelude-val">Ok</span>(())
}</code></pre></div><h4 id="saturating-operations"><a class="doc-anchor" href="#saturating-operations">§</a>Saturating Operations</h4>
<p>Saturating a number limits it to the types upper or lower bound, even if the integer type
overflowed in runtime. For example, adding to <code>u32::MAX</code> would simply limit itself to
<code>u32::MAX</code>:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="attr">#[test]
</span><span class="kw">fn </span>saturated_add_example() {
<span class="comment">// Saturating add simply saturates
// to the numeric bound of that type if it overflows.
</span><span class="kw">let </span>add = u32::MAX.saturating_add(<span class="number">10</span>);
<span class="macro">assert_eq!</span>(add, u32::MAX)
}</code></pre></div>
<p>Saturating calculations can be used if one is very sure that something wont overflow, but wants
to avoid introducing the notion of any potential-panic or wrapping behavior.</p>
<p>There is also a series of defensive alternatives via
<a href="frame::traits::DefensiveSaturating"><code>DefensiveSaturating</code></a>, which introduces the same behavior
of the <a href="frame::traits::Defensive"><code>Defensive</code></a> trait, only with saturating, mathematical
operations:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="attr">#[test]
#[cfg_attr(debug_assertions, should_panic(expected = <span class="string">"Defensive failure has been triggered!"</span>))]
</span><span class="kw">fn </span>saturated_defensive_example() {
<span class="kw">let </span>saturated_defensive = u32::MAX.defensive_saturating_add(<span class="number">10</span>);
<span class="macro">assert_eq!</span>(saturated_defensive, u32::MAX);
}</code></pre></div><h4 id="mathematical-operations-in-substrate-development---further-context"><a class="doc-anchor" href="#mathematical-operations-in-substrate-development---further-context">§</a>Mathematical Operations in Substrate Development - Further Context</h4>
<p>As a recap, we covered the following concepts:</p>
<ol>
<li><strong>Checked</strong> operations - using <a href="https://doc.rust-lang.org/1.91.1/core/option/enum.Option.html" title="enum core::option::Option"><code>Option</code></a> or <a href="https://doc.rust-lang.org/1.91.1/core/result/enum.Result.html" title="enum core::result::Result"><code>Result</code></a></li>
<li><strong>Saturating</strong> operations - limited to the lower and upper bounds of a number type</li>
<li><strong>Wrapped</strong> operations (the default) - wrap around to above or below the bounds of a type</li>
</ol>
<h5 id="the-problem-with-default-wrapped-operations"><a class="doc-anchor" href="#the-problem-with-default-wrapped-operations">§</a>The problem with default wrapped operations</h5>
<p><strong>Wrapped operations</strong> cause the overflow to wrap around to either the maximum or minimum of
that type. Imagine this in the context of a blockchain, where there are account balances, voting
counters, nonces for transactions, and other aspects of a blockchain.</p>
<p>While it may seem trivial, choosing how to handle numbers is quite important. As a thought
exercise, here are some scenarios of which will shed more light on when to use which.</p>
<h5 id="bobs-overflowed-balance"><a class="doc-anchor" href="#bobs-overflowed-balance">§</a>Bobs Overflowed Balance</h5>
<p><strong>Bobs</strong> balance exceeds the <code>Balance</code> type on the <code>EduChain</code>. Because the pallet developer did
not handle the calculation to add to Bobs balance with any regard to this overflow, <strong>Bobs</strong>
balance is now essentially <code>0</code>, the operation <strong>wrapped</strong>.</p>
<details>
<summary><b>Solution: Saturating or Checked</b></summary>
For Bob's balance problems, using a `saturating_add` or `checked_add` could've mitigated
this issue. They simply would've reached the upper, or lower bounds, of the particular type for
an on-chain balance. In other words: Bob's balance would've stayed at the maximum of the
Balance type. </details>
<h5 id="alices-underflowed-balance"><a class="doc-anchor" href="#alices-underflowed-balance">§</a>Alices Underflowed Balance</h5>
<p>Alices balance has reached <code>0</code> after a transfer to Bob. Suddenly, she has been slashed on
EduChain, causing her balance to reach near the limit of <code>u32::MAX</code> - a very large amount - as
wrapped operations can go both ways. Alice can now successfully vote using her new, overpowered
token balance, destroying the chains integrity.</p>
<details>
<summary><b>Solution: Saturating</b></summary>
For Alice's balance problem, using `saturated_sub` could've mitigated this issue. A saturating
calculation would've simply limited her balance to the lower bound of u32, as having a negative
balance is not a concept within blockchains. In other words: Alice's balance would've stayed
at "0", even after being slashed.
<p>This is also an example that while one system may work in isolation, shared interfaces, such
as the notion of balances, are often shared across multiple pallets - meaning these small
changes can make a big difference depending on the scenario. </details></p>
<h5 id="proposal-id-overwrite"><a class="doc-anchor" href="#proposal-id-overwrite">§</a>Proposal ID Overwrite</h5>
<p>A <code>u8</code> parameter, called <code>proposals_count</code>, represents the type for counting the number of
proposals on-chain. Every time a new proposal is added to the system, this number increases.
With the proposal pallets high usage, it has reached <code>u8::MAX</code>s limit of 255, causing
<code>proposals_count</code> to go to 0. Unfortunately, this results in new proposals overwriting old ones,
effectively erasing any notion of past proposals!</p>
<details>
<summary><b>Solution: Checked</b></summary>
For the proposal IDs, proper handling via `checked` math would've been suitable,
Saturating could've been used - but it also would've 'failed' silently. Using `checked_add` to
ensure that the next proposal ID would've been valid would've been a viable way to let the user
know the state of their proposal:
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="kw">let </span>next_proposal_id = current_count.checked_add(<span class="number">1</span>).ok_or_else(|| Error::TooManyProposals)<span class="question-mark">?</span>;</code></pre></div> </details>
<p>From the above, we can clearly see the problematic nature of seemingly simple operations in the
runtime, and care should be given to ensure a defensive approach is taken.</p>
<h4 id="edge-cases-of-panic-able-instances-in-substrate"><a class="doc-anchor" href="#edge-cases-of-panic-able-instances-in-substrate">§</a>Edge cases of <code>panic!</code>-able instances in Substrate</h4>
<p>As you traverse through the codebase (particularly in <code>substrate/frame</code>, where the majority of
runtime code lives), you may notice that there (only a few!) occurrences where <code>panic!</code> is used
explicitly. This is used when the runtime should stall, rather than keep running, as that is
considered safer. Particularly when it comes to mission-critical components, such as block
authoring, consensus, or other protocol-level dependencies, going through with an action may
actually cause harm to the network, and thus stalling would be the better option.</p>
<p>Take the example of the BABE pallet ([<code>pallet_babe</code>]), which doesnt allow for a validator to
participate if it is disabled (see: [<code>frame::traits::DisabledValidators</code>]):</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="kw">if </span>T::DisabledValidators::is_disabled(authority_index) {
<span class="macro">panic!</span>(
<span class="string">"Validator with index {:?} is disabled and should not be attempting to author blocks."</span>,
authority_index,
);
}</code></pre></div>
<p>There are other examples in various pallets, mostly those crucial to the blockchains
functionality. Most of the time, you will not be writing pallets which operate at this level,
but these exceptions should be noted regardless.</p>
<h3 id="other-resources"><a class="doc-anchor" href="#other-resources">§</a>Other Resources</h3>
<ul>
<li><a href="https://www.youtube.com/playlist?list=PL-w_i5kwVqbni1Ch2j_RwTIXiB-bwnYqq">PBA Lectures on YouTube</a></li>
</ul>
</div></details></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {};
@@ -0,0 +1,186 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Advice for configuring your development environment for Substrate development."><title>pezkuwi_sdk_docs::reference_docs::development_environment_advice - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module development_environment_advice</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module development_<wbr>environment_<wbr>advice</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#development-environment-advice" title="Development Environment Advice">Development Environment Advice</a><ul><li><a href="#rust-analyzer-configuration" title="Rust Analyzer Configuration">Rust Analyzer Configuration</a></li><li><a href="#cargo-usage" title="Cargo Usage">Cargo Usage</a></li></ul></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../index.html">reference_docs</a></div><h1>Module <span>development_<wbr>environment_<wbr>advice</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../src/pezkuwi_sdk_docs/reference_docs/development_environment_advice.rs.html#1-223">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Advice for configuring your development environment for Substrate development.</p>
<h2 id="development-environment-advice"><a class="doc-anchor" href="#development-environment-advice">§</a>Development Environment Advice</h2>
<p>Large Rust projects are known for sometimes long compile times and sluggish dev tooling, and
pezkuwi-sdk is no exception.</p>
<p>This page contains some advice to improve your workflow when using common tooling.</p>
<h3 id="rust-analyzer-configuration"><a class="doc-anchor" href="#rust-analyzer-configuration">§</a>Rust Analyzer Configuration</h3>
<p><a href="https://rust-analyzer.github.io/">Rust Analyzer</a> is the defacto <a href="https://langserver.org/">LSP</a> for Rust. Its default
settings are fine for smaller projects, but not well optimised for pezkuwi-sdk.</p>
<p>Below is a suggested configuration for VSCode or any VSCode-based editor like Cursor:</p>
<div class="example-wrap"><pre class="language-json"><code>{
// Use a separate target dir for Rust Analyzer. Helpful if you want to use Rust
// Analyzer and cargo on the command line at the same time,
// at the expense of duplicating build artifacts.
&quot;rust-analyzer.cargo.targetDir&quot;: &quot;target/vscode-rust-analyzer&quot;,
// Improve stability
&quot;rust-analyzer.server.extraEnv&quot;: {
&quot;CHALK_OVERFLOW_DEPTH&quot;: &quot;100000000&quot;,
&quot;CHALK_SOLVER_MAX_SIZE&quot;: &quot;10000000&quot;
},
// Check feature-gated code
&quot;rust-analyzer.cargo.features&quot;: &quot;all&quot;,
&quot;rust-analyzer.cargo.extraEnv&quot;: {
// Skip building WASM, there is never need for it here
&quot;SKIP_WASM_BUILD&quot;: &quot;1&quot;
},
// Don&#39;t expand some problematic proc_macros
&quot;rust-analyzer.procMacro.ignored&quot;: {
&quot;async-trait&quot;: [&quot;async_trait&quot;],
&quot;napi-derive&quot;: [&quot;napi&quot;],
&quot;async-recursion&quot;: [&quot;async_recursion&quot;],
&quot;async-std&quot;: [&quot;async_std&quot;]
},
// Use nightly formatting.
// See the pezkuwi-sdk CI job that checks formatting for the current version used in
// pezkuwi-sdk.
&quot;rust-analyzer.rustfmt.extraArgs&quot;: [&quot;+nightly-2024-04-10&quot;],
}</code></pre></div>
<p>and the same in Lua for <code>neovim/nvim-lspconfig</code>:</p>
<div class="example-wrap"><pre class="language-lua"><code>[&quot;rust-analyzer&quot;] = {
rust = {
# Use a separate target dir for Rust Analyzer. Helpful if you want to use Rust
# Analyzer and cargo on the command line at the same time.
analyzerTargetDir = &quot;target/nvim-rust-analyzer&quot;,
},
server = {
# Improve stability
extraEnv = {
[&quot;CHALK_OVERFLOW_DEPTH&quot;] = &quot;100000000&quot;,
[&quot;CHALK_SOLVER_MAX_SIZE&quot;] = &quot;100000000&quot;,
},
},
cargo = {
# Check feature-gated code
features = &quot;all&quot;,
extraEnv = {
# Skip building WASM, there is never need for it here
[&quot;SKIP_WASM_BUILD&quot;] = &quot;1&quot;,
},
},
procMacro = {
# Don&#39;t expand some problematic proc_macros
ignored = {
[&quot;async-trait&quot;] = { &quot;async_trait&quot; },
[&quot;napi-derive&quot;] = { &quot;napi&quot; },
[&quot;async-recursion&quot;] = { &quot;async_recursion&quot; },
[&quot;async-std&quot;] = { &quot;async_std&quot; },
},
},
rustfmt = {
# Use nightly formatting.
# See the pezkuwi-sdk CI job that checks formatting for the current version used in
# pezkuwi-sdk.
extraArgs = { &quot;+nightly-2024-04-10&quot; },
},
},</code></pre></div>
<p>Alternatively for neovim, if you are using <a href="https://github.com/mrcjkb/rustaceanvim">Rustaceanvim</a>,
you can achieve the same configuring <code>rust-analyzer</code> via <code>rustaceanvim</code> as follows:</p>
<div class="example-wrap"><pre class="language-lua"><code>return {
{
&quot;mrcjkb/rustaceanvim&quot;,
opts = {
server = {
default_settings = {
[&quot;rust-analyzer&quot;] = {
// put the same config as for nvim-lspconfig here
},
},
},
},
},
}</code></pre></div>
<p>Similarly for Zed, you can replicate the same VSCode configuration in
<code>~/.config/zed/settings.json</code> as follows:</p>
<div class="example-wrap"><pre class="language-json"><code>&quot;lsp&quot;: {
&quot;rust-analyzer&quot;: {
&quot;initialization_options&quot;: {
// same config as for VSCode for rust, cargo, procMacros, ...
}
}
},</code></pre></div>
<p>In general, refer to your favorite editor / IDEs documentation to properly configure
<code>rust-analyzer</code> as language server.
For the full set of configuration options see <a href="https://rust-analyzer.github.io/manual.html#configuration">https://rust-analyzer.github.io/manual.html#configuration</a>.</p>
<h3 id="cargo-usage"><a class="doc-anchor" href="#cargo-usage">§</a>Cargo Usage</h3><h4 id="using---package-aka--p"><a class="doc-anchor" href="#using---package-aka--p">§</a>Using <code>--package</code> (a.k.a. <code>-p</code>)</h4>
<p>pezkuwi-sdk is a monorepo containing many crates. When you run a cargo command without
<code>-p</code>, you will almost certainly compile crates outside of the scope you are working.</p>
<p>Instead, you should identify the name of the crate you are working on by checking the <code>name</code>
field in the closest <code>Cargo.toml</code> file. Then, use <code>-p</code> with your cargo commands to only compile
that crate.</p>
<h4 id="skip_wasm_build1-environment-variable"><a class="doc-anchor" href="#skip_wasm_build1-environment-variable">§</a><code>SKIP_WASM_BUILD=1</code> environment variable</h4>
<p>When cargo touches a runtime crate, by default it will also compile the WASM binary,
approximately doubling the compilation time.</p>
<p>The WASM binary is usually not needed, especially when running <code>check</code> or <code>test</code>. To skip the
WASM build, set the <code>SKIP_WASM_BUILD</code> environment variable to <code>1</code>. For example:
<code>SKIP_WASM_BUILD=1 cargo check -p frame-support</code>.</p>
<h4 id="cargo-remote"><a class="doc-anchor" href="#cargo-remote">§</a>Cargo Remote</h4>
<p>Warning: cargo remote by default doesnt transfer hidden files to the remote machine. But hidden
files can be useful, e.g. for sqlx usage. On the other hand using <code>--transfer-hidden</code> flag will
transfer <code>.git</code> which is big.</p>
<p>If you have a powerful remote server available, you may consider using
<a href="https://github.com/sgeisler/cargo-remote">cargo-remote</a> to execute cargo commands on it,
freeing up local resources for other tasks like <code>rust-analyzer</code>.</p>
<p>When using <code>cargo-remote</code>, you can configure your editor to perform the the typical
“check-on-save” remotely as well. The configuration for VSCode (or any VSCode-based editor like
Cursor) is as follows:</p>
<div class="example-wrap"><pre class="language-json"><code>{
&quot;rust-analyzer.cargo.buildScripts.overrideCommand&quot;: [
&quot;cargo&quot;,
&quot;remote&quot;,
&quot;--build-env&quot;,
&quot;SKIP_WASM_BUILD=1&quot;,
&quot;--&quot;,
&quot;check&quot;,
&quot;--message-format=json&quot;,
&quot;--all-targets&quot;,
&quot;--all-features&quot;,
&quot;--target-dir=target/rust-analyzer&quot;
],
&quot;rust-analyzer.check.overrideCommand&quot;: [
&quot;cargo&quot;,
&quot;remote&quot;,
&quot;--build-env&quot;,
&quot;SKIP_WASM_BUILD=1&quot;,
&quot;--&quot;,
&quot;check&quot;,
&quot;--workspace&quot;,
&quot;--message-format=json&quot;,
&quot;--all-targets&quot;,
&quot;--all-features&quot;,
&quot;--target-dir=target/rust-analyzer&quot;
],
}</code></pre></div>
<p>and the same in Lua for <code>neovim/nvim-lspconfig</code>:</p>
<div class="example-wrap"><pre class="language-lua"><code>[&quot;rust-analyzer&quot;] = {
cargo = {
buildScripts = {
overrideCommand = {
&quot;cargo&quot;,
&quot;remote&quot;,
&quot;--build-env&quot;,
&quot;SKIP_WASM_BUILD=1&quot;,
&quot;--&quot;,
&quot;check&quot;,
&quot;--message-format=json&quot;,
&quot;--all-targets&quot;,
&quot;--all-features&quot;,
&quot;--target-dir=target/rust-analyzer&quot;
},
},
},
check = {
overrideCommand = {
&quot;cargo&quot;,
&quot;remote&quot;,
&quot;--build-env&quot;,
&quot;SKIP_WASM_BUILD=1&quot;,
&quot;--&quot;,
&quot;check&quot;,
&quot;--workspace&quot;,
&quot;--message-format=json&quot;,
&quot;--all-targets&quot;,
&quot;--all-features&quot;,
&quot;--target-dir=target/rust-analyzer&quot;
},
},
},</code></pre></div></div></details></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `call_data` mod in crate `pezkuwi_sdk_docs`."><title>pezkuwi_sdk_docs::reference_docs::extrinsic_encoding::call_data - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module call_data</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module call_<wbr>data</a></h2><h3><a href="#enums">Module Items</a></h3><ul class="block"><li><a href="#enums" title="Enums">Enums</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>extrinsic_<wbr>encoding</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../index.html">reference_docs</a>::<wbr><a href="../index.html">extrinsic_encoding</a></div><h1>Module <span>call_<wbr>data</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/pezkuwi_sdk_docs/reference_docs/extrinsic_encoding.rs.html#232">Source</a> </span></div><h2 id="enums" class="section-header">Enums<a href="#enums" class="anchor">§</a></h2><dl class="item-table"><dt><a class="enum" href="enum.Call.html" title="enum pezkuwi_sdk_docs::reference_docs::extrinsic_encoding::call_data::Call">Call</a></dt><dt><a class="enum" href="enum.PalletACall.html" title="enum pezkuwi_sdk_docs::reference_docs::extrinsic_encoding::call_data::PalletACall">PalletA<wbr>Call</a></dt><dt><a class="enum" href="enum.PalletBCall.html" title="enum pezkuwi_sdk_docs::reference_docs::extrinsic_encoding::call_data::PalletBCall">PalletB<wbr>Call</a></dt></dl></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {"enum":["Call","PalletACall","PalletBCall"]};
@@ -0,0 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `encode_demo_extrinsic` fn in crate `pezkuwi_sdk_docs`."><title>encode_demo_extrinsic in pezkuwi_sdk_docs::reference_docs::extrinsic_encoding::encoding_example - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">encode_demo_extrinsic</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><div id="rustdoc-modnav"><h2><a href="index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>extrinsic_<wbr>encoding::<wbr>encoding_<wbr>example</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../index.html">reference_docs</a>::<wbr><a href="../index.html">extrinsic_encoding</a>::<wbr><a href="index.html">encoding_example</a></div><h1>Function <span class="fn">encode_<wbr>demo_<wbr>extrinsic</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/pezkuwi_sdk_docs/reference_docs/extrinsic_encoding.rs.html#302-332">Source</a> </span></div><pre class="rust item-decl"><code>pub fn encode_demo_extrinsic() -&gt; <a class="struct" href="https://doc.rust-lang.org/1.91.1/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.91.1/std/primitive.u8.html">u8</a>&gt; <a href="#" class="tooltip" data-notable-ty="Vec&lt;u8&gt;"></a></code></pre><script type="text/json" id="notable-traits-data">{"Vec<u8>":"<h3>Notable traits for <code><a class=\"struct\" href=\"https://doc.rust-lang.org/1.91.1/alloc/vec/struct.Vec.html\" title=\"struct alloc::vec::Vec\">Vec</a>&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.91.1/std/primitive.u8.html\">u8</a>, A&gt;</code></h3><pre><code><div class=\"where\">impl&lt;A&gt; <a class=\"trait\" href=\"https://doc.rust-lang.org/1.91.1/std/io/trait.Write.html\" title=\"trait std::io::Write\">Write</a> for <a class=\"struct\" href=\"https://doc.rust-lang.org/1.91.1/alloc/vec/struct.Vec.html\" title=\"struct alloc::vec::Vec\">Vec</a>&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.91.1/std/primitive.u8.html\">u8</a>, A&gt;<div class=\"where\">where\n A: <a class=\"trait\" href=\"https://doc.rust-lang.org/1.91.1/core/alloc/trait.Allocator.html\" title=\"trait core::alloc::Allocator\">Allocator</a>,</div></div>"}</script></section></div></main></body></html>
@@ -0,0 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `encoding_example` mod in crate `pezkuwi_sdk_docs`."><title>pezkuwi_sdk_docs::reference_docs::extrinsic_encoding::encoding_example - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module encoding_example</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module encoding_<wbr>example</a></h2><h3><a href="#functions">Module Items</a></h3><ul class="block"><li><a href="#functions" title="Functions">Functions</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>extrinsic_<wbr>encoding</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../index.html">reference_docs</a>::<wbr><a href="../index.html">extrinsic_encoding</a></div><h1>Module <span>encoding_<wbr>example</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/pezkuwi_sdk_docs/reference_docs/extrinsic_encoding.rs.html#274">Source</a> </span></div><h2 id="functions" class="section-header">Functions<a href="#functions" class="anchor">§</a></h2><dl class="item-table"><dt><a class="fn" href="fn.encode_demo_extrinsic.html" title="fn pezkuwi_sdk_docs::reference_docs::extrinsic_encoding::encoding_example::encode_demo_extrinsic">encode_<wbr>demo_<wbr>extrinsic</a></dt></dl></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {"fn":["encode_demo_extrinsic"]};
@@ -0,0 +1,329 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Learn about how extrinsics are encoded to be transmitted to a node and stored in blocks."><title>pezkuwi_sdk_docs::reference_docs::extrinsic_encoding - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module extrinsic_encoding</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module extrinsic_<wbr>encoding</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#constructing-and-signing-extrinsics" title="Constructing and Signing Extrinsics">Constructing and Signing Extrinsics</a></li><li><a href="#encoding-an-extrinsic" title="Encoding an Extrinsic">Encoding an Extrinsic</a><ul><li><a href="#compact_encoded_length" title="compact_encoded_length">compact_encoded_length</a></li><li><a href="#version_and_maybe_signature" title="version_and_maybe_signature">version_and_maybe_signature</a></li><li><a href="#version_and_extrinsic_type" title="version_and_extrinsic_type">version_and_extrinsic_type</a></li><li><a href="#call_data" title="call_data">call_data</a></li></ul></li><li><a href="#the-signed-payload-format" title="The Signed Payload Format">The Signed Payload Format</a></li><li><a href="#the-general-transaction-format" title="The General Transaction Format">The General Transaction Format</a></li><li><a href="#example-encoding" title="Example Encoding">Example Encoding</a></li></ul><h3><a href="#modules">Module Items</a></h3><ul class="block"><li><a href="#modules" title="Modules">Modules</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../index.html">reference_docs</a></div><h1>Module <span>extrinsic_<wbr>encoding</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../src/pezkuwi_sdk_docs/reference_docs/extrinsic_encoding.rs.html#1-333">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Learn about how extrinsics are encoded to be transmitted to a node and stored in blocks.</p>
<h2 id="constructing-and-signing-extrinsics"><a class="doc-anchor" href="#constructing-and-signing-extrinsics">§</a>Constructing and Signing Extrinsics</h2>
<p>Extrinsics are payloads that are stored in blocks which are responsible for altering the state
of a blockchain via the <a href="../blockchain_state_machines/index.html" title="mod pezkuwi_sdk_docs::reference_docs::blockchain_state_machines"><em>state transition
function</em></a>.</p>
<p>Substrate is configurable enough that extrinsics can take any format. In practice, runtimes
tend to use our [<code>sp_runtime::generic::UncheckedExtrinsic</code>] type to represent extrinsics,
because its generic enough to cater for most (if not all) use cases. In Pezkuwi, this is
configured <a href="https://github.com/pezkuwichain/pezkuwi-fellows/tree/main/runtimes/blob/94b2798b69ba6779764e20a50f056e48db78ebef/relay/pezkuwi/src/lib.rs#L1478">here</a>
at the time of writing.</p>
<p>What follows is a description of how extrinsics based on this
[<code>sp_runtime::generic::UncheckedExtrinsic</code>] type are encoded into bytes. Specifically, we are
looking at how extrinsics with a format version of 5 are encoded. This version is itself a part
of the payload, and if it changes, it indicates that something about the encoding may have
changed.</p>
<h2 id="encoding-an-extrinsic"><a class="doc-anchor" href="#encoding-an-extrinsic">§</a>Encoding an Extrinsic</h2>
<p>At a high level, all extrinsics compatible with [<code>sp_runtime::generic::UncheckedExtrinsic</code>]
are formed from concatenating some details together, as in the following pseudo-code:</p>
<div class="example-wrap"><pre class="language-text"><code>extrinsic_bytes = concat(
compact_encoded_length,
version_and_extrinsic_type,
maybe_extension_data,
call_data
)</code></pre></div>
<p>For clarity, the actual implementation in Substrate looks like this:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="kw">impl</span>&lt;Address, Call, Signature, Extension&gt; Encode
<span class="kw">for </span>UncheckedExtrinsic&lt;Address, Call, Signature, Extension&gt;
<span class="kw">where
</span>Preamble&lt;Address, Signature, Extension&gt;: Encode,
Call: Encode,
Extension: Encode,
{
<span class="kw">fn </span>encode(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; Vec&lt;u8&gt; {
<span class="kw">let </span>tmp = <span class="self">self</span>.encode_without_prefix();
<span class="kw">let </span>compact_len = codec::Compact::&lt;u32&gt;(tmp.len() <span class="kw">as </span>u32);
<span class="comment">// Allocate the output buffer with the correct length
</span><span class="kw">let </span><span class="kw-2">mut </span>output = Vec::with_capacity(compact_len.size_hint() + tmp.len());
compact_len.encode_to(<span class="kw-2">&amp;mut </span>output);
output.extend(tmp);
output
}
}</code></pre></div>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="kw">impl</span>&lt;Address, Call, Signature, Extra&gt; Encode
<span class="kw">for </span>UncheckedExtrinsicV4&lt;Address, Call, Signature, Extra&gt;
<span class="kw">where
</span>Address: Encode,
Signature: Encode,
Call: Encode,
Extra: Encode,
{
<span class="kw">fn </span>encode(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; Vec&lt;u8&gt; {
<span class="kw">let </span><span class="kw-2">mut </span>tmp = Vec::with_capacity(core::mem::size_of::&lt;<span class="self">Self</span>&gt;());
<span class="comment">// 1 byte version id.
</span><span class="kw">match </span><span class="self">self</span>.signature.as_ref() {
<span class="prelude-val">Some</span>(s) =&gt; {
tmp.push(<span class="number">4u8 </span>| <span class="number">0b1000_0000</span>);
s.encode_to(<span class="kw-2">&amp;mut </span>tmp);
},
<span class="prelude-val">None </span>=&gt; {
tmp.push(<span class="number">4u8 </span>&amp; <span class="number">0b0111_1111</span>);
},
}
<span class="self">self</span>.function.encode_to(<span class="kw-2">&amp;mut </span>tmp);
<span class="kw">let </span>compact_len = codec::Compact::&lt;u32&gt;(tmp.len() <span class="kw">as </span>u32);
<span class="comment">// Allocate the output buffer with the correct length
</span><span class="kw">let </span><span class="kw-2">mut </span>output = Vec::with_capacity(compact_len.size_hint() + tmp.len());
compact_len.encode_to(<span class="kw-2">&amp;mut </span>output);
output.extend(tmp);
output
}
}</code></pre></div>
<p>Lets look at how each of these details is constructed:</p>
<h3 id="compact_encoded_length"><a class="doc-anchor" href="#compact_encoded_length">§</a>compact_encoded_length</h3>
<p>This is a [SCALE compact encoded][frame::deps::codec::Compact] integer which is equal to the
length, in bytes, of the rest of the extrinsic details.</p>
<p>To obtain this value, we must encode and concatenate together the rest of the extrinsic details
first, and then obtain the byte length of these. We can then compact encode that length, and
prepend it to the rest of the details.</p>
<h3 id="version_and_maybe_signature"><a class="doc-anchor" href="#version_and_maybe_signature">§</a>version_and_maybe_signature</h3>
<p>If the extrinsic is <em>unsigned</em>, then <code>version_and_maybe_signature</code> will be just one byte
denoting the <em>transaction protocol version</em>, which is 4 (or <code>0b0000_0100</code>).</p>
<p>If the extrinsic is <em>signed</em> (all extrinsics submitted from users must be signed), then
<code>version_and_maybe_signature</code> is obtained by concatenating some details together, ie:</p>
<div class="example-wrap"><pre class="language-text"><code>version_and_maybe_signature = concat(
version_and_signed,
from_address,
signature,
transaction_extensions_extra,
)</code></pre></div>
<p>Each of the details to be concatenated together is explained below:</p>
<h3 id="version_and_extrinsic_type"><a class="doc-anchor" href="#version_and_extrinsic_type">§</a>version_and_extrinsic_type</h3>
<p>This byte has 2 components:</p>
<ul>
<li>the 2 most significant bits represent the extrinsic type:
<ul>
<li>bare - <code>0b00</code></li>
<li>signed - <code>0b10</code></li>
<li>general - <code>0b01</code></li>
</ul>
</li>
<li>the 6 least significant bits represent the extrinsic format version (currently 5)</li>
</ul>
<h4 id="bare-extrinsics"><a class="doc-anchor" href="#bare-extrinsics">§</a>Bare extrinsics</h4>
<p>If the extrinsic is <em>bare</em>, then <code>version_and_extrinsic_type</code> will be just the <em>transaction
protocol version</em>, which is 5 (or <code>0b0000_0101</code>). Bare extrinsics do not carry any other
extension data, so <code>maybe_extension_data</code> would not be included in the payload and the
<code>version_and_extrinsic_type</code> would always be followed by the encoded call bytes.</p>
<h4 id="signed-extrinsics"><a class="doc-anchor" href="#signed-extrinsics">§</a>Signed extrinsics</h4>
<p>If the extrinsic is <em>signed</em> (all extrinsics submitted from users used to be signed up until
version 4), then <code>version_and_extrinsic_type</code> is obtained by having a MSB of <code>1</code> on the
<em>transaction protocol version</em> byte (which translates to <code>0b1000_0101</code>).</p>
<p>Additionally, <em>signed</em> extrinsics also carry with them address and signature information encoded
as follows:</p>
<h5 id="from_address"><a class="doc-anchor" href="#from_address">§</a>from_address</h5>
<p>This is the [SCALE encoded][frame::deps::codec] address of the sender of the extrinsic. The
address is the first generic parameter of [<code>sp_runtime::generic::UncheckedExtrinsic</code>], and so
can vary from chain to chain.</p>
<p>The address type used on the Pezkuwi relay chain is [<code>sp_runtime::MultiAddress&lt;AccountId32&gt;</code>],
where <code>AccountId32</code> is defined [here][<code>sp_core::crypto::AccountId32</code>]. When constructing a
signed extrinsic to be submitted to a Pezkuwi node, youll always use the
[<code>sp_runtime::MultiAddress::Id</code>] variant to wrap your <code>AccountId32</code>.</p>
<h5 id="signature"><a class="doc-anchor" href="#signature">§</a>signature</h5>
<p>This is the [SCALE encoded][frame::deps::codec] signature. The signature type is configured via
the third generic parameter of [<code>sp_runtime::generic::UncheckedExtrinsic</code>], which determines the
shape of the signature and signing algorithm that should be used.</p>
<p>The signature is obtained by signing the <em>signed payload</em> bytes (see below on how this is
constructed) using the private key associated with the address and correct algorithm.</p>
<p>The signature type used on the Pezkuwi relay chain is [<code>sp_runtime::MultiSignature</code>]; the
variants there are the types of signature that can be provided.</p>
<h4 id="general-extrinsics"><a class="doc-anchor" href="#general-extrinsics">§</a>General extrinsics</h4>
<p>If the extrinsic is <em>general</em> (it doesnt carry a signature in the payload, only extension
data), then <code>version_and_extrinsic_type</code> is obtained by logical OR between the general
transaction type bits and the <em>transaction protocol version</em> byte (which translates to
<code>0b0100_0101</code>).</p>
<h4 id="transaction_extensions_extra"><a class="doc-anchor" href="#transaction_extensions_extra">§</a>transaction_extensions_extra</h4>
<p>This is the concatenation of the [SCALE encoded][frame::deps::codec] bytes representing first a
single byte describing the extension version (this is bumped whenever a change occurs in the
transaction extension pipeline) followed by the bytes of each of the [<em>transaction
extensions</em>][sp_runtime::traits::TransactionExtension], and are configured by the fourth generic
parameter of [<code>sp_runtime::generic::UncheckedExtrinsic</code>]. Learn more about transaction
extensions <a href="../transaction_extensions/index.html" title="mod pezkuwi_sdk_docs::reference_docs::transaction_extensions">here</a>.</p>
<p>When it comes to constructing an extrinsic, each transaction extension has two things that we
are interested in here:</p>
<ul>
<li>The actual SCALE encoding of the transaction extension type itself; this is what will form our
<code>transaction_extensions_extra</code> bytes.</li>
<li>An <code>Implicit</code> type. This is SCALE encoded into the <code>transaction_extensions_implicit</code> data (see
below).</li>
</ul>
<p>Either (or both) of these can encode to zero bytes.</p>
<p>Each chain configures the set of transaction extensions that it uses in its runtime
configuration. At the time of writing, Pezkuwi configures them
<a href="https://github.com/pezkuwichain/pezkuwi-fellows/tree/main/runtimes/blob/1dc04eb954eadf8aadb5d83990b89662dbb5a074/relay/pezkuwi/src/lib.rs#L1432C25-L1432C25">here</a>.
Some of the common transaction extensions are defined
[here][frame::deps::frame_system#transaction-extensions].</p>
<p>Information about exactly which transaction extensions are present on a chain and in what order
is also a part of the metadata for the chain. For V15 metadata, it can be [found
here][frame::deps::frame_support::__private::metadata::v15::ExtrinsicMetadata].</p>
<h3 id="call_data"><a class="doc-anchor" href="#call_data">§</a>call_data</h3>
<p>This is the main payload of the extrinsic, which is used to determine how the chains state is
altered. This is defined by the second generic parameter of
[<code>sp_runtime::generic::UncheckedExtrinsic</code>].</p>
<p>A call can be anything that implements [<code>Encode</code>][frame::deps::codec::Encode]. In FRAME-based
runtimes, a call is represented as an enum of enums, where the outer enum represents the FRAME
pallet being called, and the inner enum represents the call being made within that pallet, and
any arguments to it. Read more about the call enum
<a href="../frame_runtime_types/index.html" title="mod pezkuwi_sdk_docs::reference_docs::frame_runtime_types">here</a>.</p>
<p>FRAME <code>Call</code> enums are automatically generated, and end up looking something like this:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="kw">pub mod </span>call_data {
<span class="kw">use </span>codec::{Decode, Encode};
<span class="kw">use </span>sp_runtime::{traits::Dispatchable, DispatchResultWithInfo};
<span class="comment">// The outer enum composes calls within
// different pallets together. We have two
// pallets, "PalletA" and "PalletB".
</span><span class="attr">#[derive(Encode, Decode, Clone)]
</span><span class="kw">pub enum </span>Call {
<span class="attr">#[codec(index = <span class="number">0</span>)]
</span>PalletA(PalletACall),
<span class="attr">#[codec(index = <span class="number">7</span>)]
</span>PalletB(PalletBCall),
}
<span class="comment">// An inner enum represents the calls within
// a specific pallet. "PalletA" has one call,
// "Foo".
</span><span class="attr">#[derive(Encode, Decode, Clone)]
</span><span class="kw">pub enum </span>PalletACall {
<span class="attr">#[codec(index = <span class="number">0</span>)]
</span>Foo(String),
}
<span class="attr">#[derive(Encode, Decode, Clone)]
</span><span class="kw">pub enum </span>PalletBCall {
<span class="attr">#[codec(index = <span class="number">0</span>)]
</span>Bar(String),
}
<span class="kw">impl </span>Dispatchable <span class="kw">for </span>Call {
<span class="kw">type </span>RuntimeOrigin = ();
<span class="kw">type </span>Config = ();
<span class="kw">type </span>Info = ();
<span class="kw">type </span>PostInfo = ();
<span class="kw">fn </span>dispatch(<span class="self">self</span>, _origin: <span class="self">Self</span>::RuntimeOrigin) -&gt; DispatchResultWithInfo&lt;<span class="self">Self</span>::PostInfo&gt; {
<span class="prelude-val">Ok</span>(())
}
}
}</code></pre></div>
<p>In pseudo-code, this <code>Call</code> enum encodes equivalently to:</p>
<div class="example-wrap"><pre class="language-text"><code>call_data = concat(
pallet_index,
call_index,
call_args
)</code></pre></div>
<ul>
<li><code>pallet_index</code> is a single byte denoting the index of the pallet that we are calling into, and
is what the tag of the outermost enum will encode to.</li>
<li><code>call_index</code> is a single byte denoting the index of the call that we are making the pallet,
and is what the tag of the inner enum will encode to.</li>
<li><code>call_args</code> are the SCALE encoded bytes for each of the arguments that the call expects, and
are typically provided as values to the inner enum.</li>
</ul>
<p>Information about the pallets that exist for a chain (including their indexes), the calls
available in each pallet (including their indexes), and the arguments required for each call can
be found in the metadata for the chain. For V15 metadata, this information [is
here][frame::deps::frame_support::__private::metadata::v15::PalletMetadata].</p>
<h2 id="the-signed-payload-format"><a class="doc-anchor" href="#the-signed-payload-format">§</a>The Signed Payload Format</h2>
<p>All <em>signed</em> extrinsics submitted to a node from the outside world (also known as
<em>transactions</em>) need to be <em>signed</em>. The data that needs to be signed for some extrinsic is
called the <em>signed payload</em>, and its shape is described by the following pseudo-code:</p>
<div class="example-wrap"><pre class="language-text"><code>signed_payload = blake2_256(
concat(
call_data,
transaction_extensions_extra,
transaction_extensions_implicit,
)
)</code></pre></div>
<p>The bytes representing <code>call_data</code> and <code>transaction_extensions_extra</code> can be obtained as
descibed above. <code>transaction_extensions_implicit</code> is constructed by SCALE encoding the
[“implicit” data][sp_runtime::traits::TransactionExtension::Implicit] for each transaction
extension that the chain is using, in order.</p>
<p>Once weve concatenated those together, we hash the result using a Blake2 256bit hasher.</p>
<p>The [<code>sp_runtime::generic::SignedPayload</code>] type takes care of assembling the correct payload for
us, given <code>call_data</code> and a tuple of transaction extensions.</p>
<h2 id="the-general-transaction-format"><a class="doc-anchor" href="#the-general-transaction-format">§</a>The General Transaction Format</h2>
<p>A General transaction does not have a signature method hardcoded in the check logic of the
extrinsic, such as a traditionally signed transaction. Instead, general transactions should have
one or more extensions in the transaction extension pipeline that auhtorize origins in some way,
one of which could be the traditional signature check that happens for all signed transactions
in the <a href="sp_runtime::traits::Checkable">Checkable</a> implementation of
<a href="sp_runtime::generic::UncheckedExtrinsic">UncheckedExtrinsic</a>. Therefore, it is up to each
extension to define the format of the payload it will try to check and authorize the right
origin type. For an example, look into the <a href="pallet_example_authorization_tx_extension::extensions">authorization example pallet
extensions</a></p>
<h2 id="example-encoding"><a class="doc-anchor" href="#example-encoding">§</a>Example Encoding</h2>
<p>Using [<code>sp_runtime::generic::UncheckedExtrinsic</code>], we can construct and encode an extrinsic as
follows:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="kw">pub mod </span>encoding_example {
<span class="kw">use </span><span class="kw">super</span>::call_data::{Call, PalletACall};
<span class="kw">use </span><span class="kw">crate</span>::reference_docs::transaction_extensions::transaction_extensions_example;
<span class="kw">use </span>codec::Encode;
<span class="kw">use </span>sp_core::crypto::AccountId32;
<span class="kw">use </span>sp_keyring::sr25519::Keyring;
<span class="kw">use </span>sp_runtime::{
generic::{SignedPayload, UncheckedExtrinsic},
MultiAddress, MultiSignature,
};
<span class="comment">// Define some transaction extensions to use. We'll use a couple of examples
// from the transaction extensions reference doc.
</span><span class="kw">type </span>TransactionExtensions = (
transaction_extensions_example::AddToPayload,
transaction_extensions_example::AddToSignaturePayload,
);
<span class="comment">// We'll use `UncheckedExtrinsic` to encode our extrinsic for us. We set
// the address and signature type to those used on Pezkuwi, use our custom
// `Call` type, and use our custom set of `TransactionExtensions`.
</span><span class="kw">type </span>Extrinsic = UncheckedExtrinsic&lt;
MultiAddress&lt;AccountId32, ()&gt;,
Call,
MultiSignature,
TransactionExtensions,
&gt;;
<span class="kw">pub fn </span>encode_demo_extrinsic() -&gt; Vec&lt;u8&gt; {
<span class="comment">// The "from" address will be our Alice dev account.
</span><span class="kw">let </span>from_address = MultiAddress::&lt;AccountId32, ()&gt;::Id(Keyring::Alice.to_account_id());
<span class="comment">// We provide some values for our expected transaction extensions.
</span><span class="kw">let </span>transaction_extensions = (
transaction_extensions_example::AddToPayload(<span class="number">1</span>),
transaction_extensions_example::AddToSignaturePayload,
);
<span class="comment">// Construct our call data:
</span><span class="kw">let </span>call_data = Call::PalletA(PalletACall::Foo(<span class="string">"Hello"</span>.to_string()));
<span class="comment">// The signed payload. This takes care of encoding the call_data,
// transaction_extensions_extra and transaction_extensions_implicit, and hashing
// the result if it's &gt; 256 bytes:
</span><span class="kw">let </span>signed_payload = SignedPayload::new(call_data.clone(), transaction_extensions.clone());
<span class="comment">// Sign the signed payload with our Alice dev account's private key,
// and wrap the signature into the expected type:
</span><span class="kw">let </span>signature = {
<span class="kw">let </span>sig = Keyring::Alice.sign(<span class="kw-2">&amp;</span>signed_payload.encode());
MultiSignature::Sr25519(sig)
};
<span class="comment">// Now, we can build and encode our extrinsic:
</span><span class="kw">let </span>ext = Extrinsic::new_signed(call_data, from_address, signature, transaction_extensions);
<span class="kw">let </span>encoded_ext = ext.encode();
encoded_ext
}
}</code></pre></div></div></details><h2 id="modules" class="section-header">Modules<a href="#modules" class="anchor">§</a></h2><dl class="item-table"><dt><a class="mod" href="call_data/index.html" title="mod pezkuwi_sdk_docs::reference_docs::extrinsic_encoding::call_data">call_<wbr>data</a></dt><dt><a class="mod" href="encoding_example/index.html" title="mod pezkuwi_sdk_docs::reference_docs::extrinsic_encoding::encoding_example">encoding_<wbr>example</a></dt></dl></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {"mod":["call_data","encoding_example"]};
@@ -0,0 +1,15 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Learn about how to make a pallet/runtime that is fee-less and instead uses another mechanism to control usage and sybil attacks."><title>pezkuwi_sdk_docs::reference_docs::fee_less_runtime - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module fee_less_runtime</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module fee_<wbr>less_<wbr>runtime</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#fee-less-runtime" title="Fee-Less Runtime">Fee-Less Runtime</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../index.html">reference_docs</a></div><h1>Module <span>fee_<wbr>less_<wbr>runtime</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../src/pezkuwi_sdk_docs/reference_docs/fee_less_runtime.rs.html#1-13">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Learn about how to make a pallet/runtime that is fee-less and instead uses another mechanism to
control usage and sybil attacks.</p>
<h2 id="fee-less-runtime"><a class="doc-anchor" href="#fee-less-runtime">§</a>Fee-Less Runtime</h2>
<p>🚧 Work In Progress 🚧</p>
<p>Notes:</p>
<ul>
<li>An extension of <a href="../runtime_vs_smart_contract/index.html" title="mod pezkuwi_sdk_docs::reference_docs::runtime_vs_smart_contract"><code>runtime_vs_smart_contract</code></a>, showcasing the tools needed to build a safe
runtime that is fee-less.</li>
<li>Would need to use unsigned origins, custom validate_unsigned, check the existence of some NFT
and some kind of rate limiting (eg. any account gets 5 free tx per day).</li>
<li>The rule of thumb is that as long as the unsigned validate does one storage read, similar to
nonce, it is fine.</li>
<li>This could possibly be a good guide/template, rather than a reference doc.</li>
</ul>
</div></details></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {};
@@ -0,0 +1,151 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Learn about benchmarking and weight."><title>pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module frame_benchmarking_weight</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module frame_<wbr>benchmarking_<wbr>weight</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#frame-benchmarking-and-weights" title="FRAME Benchmarking and Weights.">FRAME Benchmarking and Weights.</a><ul><li><a href="#metering" title="Metering">Metering</a></li><li><a href="#trusted-code" title="Trusted Code">Trusted Code</a></li><li><a href="#benchmarking" title="Benchmarking">Benchmarking</a></li><li><a href="#weight" title="Weight">Weight</a></li><li><a href="#how-to-write-benchmarks-worst-case" title="How To Write Benchmarks: Worst Case">How To Write Benchmarks: Worst Case</a></li><li><a href="#gluing-pallet-benchmarking-with-runtime" title="Gluing Pallet Benchmarking with Runtime">Gluing Pallet Benchmarking with Runtime</a></li><li><a href="#manual-refund" title="Manual Refund">Manual Refund</a></li><li><a href="#running-benchmarks" title="Running Benchmarks">Running Benchmarks</a></li><li><a href="#automatic-refund-of-proof_size" title="Automatic Refund of `proof_size`.">Automatic Refund of <code>proof_size</code>.</a></li><li><a href="#summary" title="Summary">Summary</a></li><li><a href="#future-polkavm" title="Future: PolkaVM">Future: PolkaVM</a></li></ul></li></ul><h3><a href="#modules">Module Items</a></h3><ul class="block"><li><a href="#modules" title="Modules">Modules</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../index.html">reference_docs</a></div><h1>Module <span>frame_<wbr>benchmarking_<wbr>weight</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../src/pezkuwi_sdk_docs/reference_docs/frame_benchmarking_weight.rs.html#1-212">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Learn about benchmarking and weight.</p>
<h2 id="frame-benchmarking-and-weights"><a class="doc-anchor" href="#frame-benchmarking-and-weights">§</a>FRAME Benchmarking and Weights.</h2>
<p>This reference doc explores the concept of weights within Pezkuwi-SDK runtimes, and more
specifically how FRAME-based runtimes handle it.</p>
<h3 id="metering"><a class="doc-anchor" href="#metering">§</a>Metering</h3>
<p>The existence of “weight” as a concept in Pezkuwi-SDK is a direct consequence of the usage of
WASM as a virtual machine. Unlike a metered virtual machine like EVM, where every instruction
can have a (fairly) deterministic “cost” (also known as “gas price”) associated with it, WASM is
a stack machine with more complex instruction set, and more unpredictable execution times. This
means that unlike EVM, it is not possible to implement a “metering” system in WASM. A metering
system is one in which instructions are executed one by one, and the cost/gas is stored in an
accumulator. The execution may then halt once a gas limit is reached.</p>
<p>In Pezkuwi-SDK, the WASM runtime is not assumed to be metered.</p>
<h3 id="trusted-code"><a class="doc-anchor" href="#trusted-code">§</a>Trusted Code</h3>
<p>Another important difference is that EVM is mostly used to express smart contracts, which are
foreign and untrusted codes from the perspective of the blockchain executing them. In such
cases, metering is crucial, in order to ensure a malicious code cannot consume more gas than
expected.</p>
<p>This assumption does not hold about the runtime of Pezkuwi-SDK-based blockchains. The runtime
is trusted code, and it is assumed to be written by the same team/developers who are running the
blockchain itself. Therefore, this assumption of “untrusted foreign code” does not hold.</p>
<p>This is why the runtime can opt for a more performant, more flexible virtual machine like WASM,
and get away without having metering.</p>
<h3 id="benchmarking"><a class="doc-anchor" href="#benchmarking">§</a>Benchmarking</h3>
<p>With the matter of untrusted code execution out of the way, the need for strict metering goes
out of the way. Yet, it would still be very beneficial for block producers to be able to know an
upper bound on how much resources a operation is going to consume before actually executing that
operation. This is why FRAME has a toolkit for benchmarking pallets: So that this upper bound
can be empirically determined.</p>
<blockquote>
<p>Note: Benchmarking is a static analysis: It is all about knowing the upper bound of how much
resources an operation takes statically, without actually executing it. In the context of
FRAME extrinsics, this static-ness is expressed by the keyword “pre-dispatch”.</p>
</blockquote>
<p>To understand why this upper bound is needed, consider the following: A block producer knows
they have 20ms left to finish producing their block, and wishes to include more transactions in
the block. Yet, in a metered environment, it would not know which transaction is likely to fit
the 20ms. In a benchmarked environment, it can examine the transactions for their upper bound,
and include the ones that are known to fit based on the worst case.</p>
<p>The benchmarking code can be written as a part of FRAME pallet, using the macros provided in
[<code>frame_benchmarking</code>]. See any of the existing pallets in <code>pezkuwi-sdk</code>, or the pallets in our
<a href="../../pezkuwi_sdk/templates/index.html" title="mod pezkuwi_sdk_docs::pezkuwi_sdk::templates"><code>crate::pezkuwi_sdk::templates</code></a> for examples.</p>
<h3 id="weight"><a class="doc-anchor" href="#weight">§</a>Weight</h3>
<p>Finally, [<code>sp_weights::Weight</code>] is the output of the benchmarking process. It is a
two-dimensional data structure that demonstrates the resources consumed by a given block of
code (for example, a transaction). The two dimensions are:</p>
<ul>
<li>reference time: The time consumed in pico-seconds, on a reference hardware.</li>
<li>proof size: The amount of storage proof necessary to re-execute the block of code. This is
mainly needed for teyrchain &lt;&gt; relay-chain verification.</li>
</ul>
<h3 id="how-to-write-benchmarks-worst-case"><a class="doc-anchor" href="#how-to-write-benchmarks-worst-case">§</a>How To Write Benchmarks: Worst Case</h3>
<p>The most important detail about writing benchmarking code is that it must be written such that
it captures the worst case execution of any block of code.</p>
<p>Consider:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="attr">#[pallet::weight(<span class="number">10_000</span>)]
</span><span class="kw">pub fn </span>simple_transfer(
origin: OriginFor&lt;T&gt;,
destination: T::AccountId,
amount: u32,
) -&gt; DispatchResult {
<span class="kw">let </span>destination_exists = <span class="macro">todo!</span>();
<span class="kw">if </span>destination_exists {
<span class="comment">// simpler code path
</span>} <span class="kw">else </span>{
<span class="comment">// more complex code path
</span>}
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
<p>If this block of code is to be benchmarked, then the benchmarking code must be written such that
it captures the worst case.</p>
<h3 id="gluing-pallet-benchmarking-with-runtime"><a class="doc-anchor" href="#gluing-pallet-benchmarking-with-runtime">§</a>Gluing Pallet Benchmarking with Runtime</h3>
<p>FRAME pallets are mandated to provide their own benchmarking code. Runtimes contain the
boilerplate needed to run these benchmarking (see <a href="#running-benchmarks">Running Benchmarks
below</a>). The outcome of running these benchmarks are meant to be fed back
into the pallet via a conventional <code>trait WeightInfo</code> on <code>Config</code>:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="kw">pub trait </span>WeightInfo {
<span class="kw">fn </span>simple_transfer() -&gt; Weight;
}</code></pre></div>
<p>Then, individual functions of this trait are the final values that we assigned to the
[<code>frame::pallet_macros::weight</code>] attribute:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="attr">#[pallet::weight(T::WeightInfo::simple_transfer())]
</span><span class="kw">pub fn </span>simple_transfer_2(
origin: OriginFor&lt;T&gt;,
destination: T::AccountId,
amount: u32,
) -&gt; DispatchResult {
<span class="kw">let </span>destination_exists = <span class="macro">todo!</span>();
<span class="kw">if </span>destination_exists {
<span class="comment">// simpler code path
</span>} <span class="kw">else </span>{
<span class="comment">// more complex code path
</span>}
<span class="prelude-val">Ok</span>(())
}</code></pre></div><h3 id="manual-refund"><a class="doc-anchor" href="#manual-refund">§</a>Manual Refund</h3>
<p>Back to the assumption of writing benchmarks for worst case: Sometimes, the pre-dispatch weight
significantly differ from the post-dispatch actual weight consumed. This can be expressed with
the following FRAME syntax:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="attr">#[pallet::weight(T::WeightInfo::simple_transfer())]
</span><span class="kw">pub fn </span>simple_transfer_3(
origin: OriginFor&lt;T&gt;,
destination: T::AccountId,
amount: u32,
) -&gt; DispatchResultWithPostInfo {
<span class="comment">// ^^ Notice the new return type
</span><span class="kw">let </span>destination_exists = <span class="macro">todo!</span>();
<span class="kw">if </span>destination_exists {
<span class="comment">// simpler code path
// Note that need for .into(), to convert `()` to `PostDispatchInfo`
// See: https://docs.pezkuwichain.io/sdk/master/frame_support/dispatch/struct.PostDispatchInfo.html#impl-From%3C()%3E-for-PostDispatchInfo
</span><span class="prelude-val">Ok</span>(().into())
} <span class="kw">else </span>{
<span class="comment">// more complex code path
</span><span class="kw">let </span>actual_weight =
<span class="macro">todo!</span>(<span class="string">"this can likely come from another benchmark that is NOT the worst case"</span>);
<span class="kw">let </span>pays_fee = <span class="macro">todo!</span>(<span class="string">"You can set this to `Pays::Yes` or `Pays::No` to change if this transaction should pay fees"</span>);
<span class="prelude-val">Ok</span>(frame::deps::frame_support::dispatch::PostDispatchInfo {
actual_weight: <span class="prelude-val">Some</span>(actual_weight),
pays_fee,
})
}
}</code></pre></div><h3 id="running-benchmarks"><a class="doc-anchor" href="#running-benchmarks">§</a>Running Benchmarks</h3>
<p>Two ways exist to run the benchmarks of a runtime.</p>
<ol>
<li>The old school way: Most Pezkuwi-SDK based nodes (such as the ones integrated in
<a href="../../pezkuwi_sdk/templates/index.html" title="mod pezkuwi_sdk_docs::pezkuwi_sdk::templates"><code>templates</code></a>) have a <code>benchmark</code> subcommand integrated into themselves.</li>
<li>The more <a href="../omni_node/index.html" title="mod pezkuwi_sdk_docs::reference_docs::omni_node"><code>crate::reference_docs::omni_node</code></a> compatible way of running the benchmarks would
be using <a href="https://crates.io/crates/frame-omni-bencher"><code>frame-omni-bencher</code></a> CLI, which only relies on a runtime.</li>
</ol>
<p>Note that by convention, the runtime and pallets always have their benchmarking code feature
gated as behind <code>runtime-benchmarks</code>. So, the runtime should be compiled with <code>--features runtime-benchmarks</code>.</p>
<h3 id="automatic-refund-of-proof_size"><a class="doc-anchor" href="#automatic-refund-of-proof_size">§</a>Automatic Refund of <code>proof_size</code>.</h3>
<p>A new feature in FRAME allows the runtime to be configured for “automatic refund” of the proof
size weight. This is very useful for maximizing the throughput of teyrchains. Please see:
<a href="../../guides/enable_pov_reclaim/index.html" title="mod pezkuwi_sdk_docs::guides::enable_pov_reclaim"><code>crate::guides::enable_pov_reclaim</code></a>.</p>
<h3 id="summary"><a class="doc-anchor" href="#summary">§</a>Summary</h3>
<p>Pezkuwi-SDK runtimes use a more performant VM, namely WASM, which does not have metering. In
return they have to be benchmarked to provide an upper bound on the resources they consume. This
upper bound is represented as [<code>sp_weights::Weight</code>].</p>
<h3 id="future-polkavm"><a class="doc-anchor" href="#future-polkavm">§</a>Future: PolkaVM</h3>
<p>With the transition of Pezkuwi relay chain to <a href="https://graypaper.com">JAM</a>, a set of new features are being
introduced, one of which being a new virtual machine named <a href="https://github.com/koute/polkavm">PolkaVM</a> that is as flexible as
WASM, but also capable of metering. This might alter the future of benchmarking in FRAME and
Pezkuwi-SDK, rendering them not needed anymore once PolkaVM is fully integrated into
Pezkuwi-sdk. For a basic explanation of JAM and PolkaVM, see <a href="https://blog.kianenigma.com/posts/tech/demystifying-jam/#pvm">here</a>.</p>
</div></details><h2 id="modules" class="section-header">Modules<a href="#modules" class="anchor">§</a></h2><dl class="item-table"><dt><a class="mod" href="pallet/index.html" title="mod pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet">pallet</a></dt><dd>The <code>pallet</code> module in each FRAME pallet hosts the most important items needed
to construct this pallet.</dd></dl></section></div></main></body></html>
@@ -0,0 +1,5 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Warning: Doc-Only"><title>simple_transfer in pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::dispatchables - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">simple_transfer</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">simple_<wbr>transfer</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#warning-doc-only" title="Warning: Doc-Only">Warning: Doc-Only</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>benchmarking_<wbr>weight::<wbr>pallet::<wbr>dispatchables</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../../index.html">reference_docs</a>::<wbr><a href="../../index.html">frame_benchmarking_weight</a>::<wbr><a href="../index.html">pallet</a>::<wbr><a href="index.html">dispatchables</a></div><h1>Function <span class="fn">simple_<wbr>transfer</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../../src/pezkuwi_sdk_docs/reference_docs/frame_benchmarking_weight.rs.html#133">Source</a> </span></div><pre class="rust item-decl"><code>pub fn simple_transfer&lt;T: <a class="trait" href="../trait.Config.html" title="trait pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::Config">Config</a>&gt;(destination: T::AccountId, amount: <a class="primitive" href="https://doc.rust-lang.org/1.91.1/std/primitive.u32.html">u32</a>)</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><h2 id="warning-doc-only"><a class="doc-anchor" href="#warning-doc-only">§</a>Warning: Doc-Only</h2>
<p>This function is an automatically generated, and is doc-only, uncallable
stub. See the real version in
<a href="../struct.Pallet.html#method.simple_transfer" title="associated function pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::Pallet::simple_transfer"><code>Pallet::simple_transfer</code></a>.</p>
</div></details></section></div></main></body></html>
@@ -0,0 +1,5 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Warning: Doc-Only"><title>simple_transfer_2 in pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::dispatchables - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">simple_transfer_2</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">simple_<wbr>transfer_<wbr>2</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#warning-doc-only" title="Warning: Doc-Only">Warning: Doc-Only</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>benchmarking_<wbr>weight::<wbr>pallet::<wbr>dispatchables</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../../index.html">reference_docs</a>::<wbr><a href="../../index.html">frame_benchmarking_weight</a>::<wbr><a href="../index.html">pallet</a>::<wbr><a href="index.html">dispatchables</a></div><h1>Function <span class="fn">simple_<wbr>transfer_<wbr>2</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../../src/pezkuwi_sdk_docs/reference_docs/frame_benchmarking_weight.rs.html#133">Source</a> </span></div><pre class="rust item-decl"><code>pub fn simple_transfer_2&lt;T: <a class="trait" href="../trait.Config.html" title="trait pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::Config">Config</a>&gt;(destination: T::AccountId, amount: <a class="primitive" href="https://doc.rust-lang.org/1.91.1/std/primitive.u32.html">u32</a>)</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><h2 id="warning-doc-only"><a class="doc-anchor" href="#warning-doc-only">§</a>Warning: Doc-Only</h2>
<p>This function is an automatically generated, and is doc-only, uncallable
stub. See the real version in
<a href="../struct.Pallet.html#method.simple_transfer_2" title="associated function pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::Pallet::simple_transfer_2"><code>Pallet::simple_transfer_2</code></a>.</p>
</div></details></section></div></main></body></html>
@@ -0,0 +1,5 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Warning: Doc-Only"><title>simple_transfer_3 in pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::dispatchables - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">simple_transfer_3</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">simple_<wbr>transfer_<wbr>3</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#warning-doc-only" title="Warning: Doc-Only">Warning: Doc-Only</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>benchmarking_<wbr>weight::<wbr>pallet::<wbr>dispatchables</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../../index.html">reference_docs</a>::<wbr><a href="../../index.html">frame_benchmarking_weight</a>::<wbr><a href="../index.html">pallet</a>::<wbr><a href="index.html">dispatchables</a></div><h1>Function <span class="fn">simple_<wbr>transfer_<wbr>3</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../../src/pezkuwi_sdk_docs/reference_docs/frame_benchmarking_weight.rs.html#133">Source</a> </span></div><pre class="rust item-decl"><code>pub fn simple_transfer_3&lt;T: <a class="trait" href="../trait.Config.html" title="trait pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::Config">Config</a>&gt;(destination: T::AccountId, amount: <a class="primitive" href="https://doc.rust-lang.org/1.91.1/std/primitive.u32.html">u32</a>)</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><h2 id="warning-doc-only"><a class="doc-anchor" href="#warning-doc-only">§</a>Warning: Doc-Only</h2>
<p>This function is an automatically generated, and is doc-only, uncallable
stub. See the real version in
<a href="../struct.Pallet.html#method.simple_transfer_3" title="associated function pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::Pallet::simple_transfer_3"><code>Pallet::simple_transfer_3</code></a>.</p>
</div></details></section></div></main></body></html>
@@ -0,0 +1,6 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Auto-generated docs-only module listing all defined dispatchables for this pallet."><title>pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::dispatchables - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module dispatchables</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module dispatchables</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#warning-doc-only" title="Warning: Doc-Only">Warning: Doc-Only</a></li></ul><h3><a href="#functions">Module Items</a></h3><ul class="block"><li><a href="#functions" title="Functions">Functions</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>benchmarking_<wbr>weight::<wbr>pallet</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../../index.html">reference_docs</a>::<wbr><a href="../../index.html">frame_benchmarking_weight</a>::<wbr><a href="../index.html">pallet</a></div><h1>Module <span>dispatchables</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../../src/pezkuwi_sdk_docs/reference_docs/frame_benchmarking_weight.rs.html#133">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Auto-generated docs-only module listing all defined dispatchables for this pallet.</p>
<h2 id="warning-doc-only"><a class="doc-anchor" href="#warning-doc-only">§</a>Warning: Doc-Only</h2>
<p>Members of this module cannot be used directly and are only provided for documentation
purposes. To see the real version of each dispatchable, look for them in <a href="../struct.Pallet.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::Pallet"><code>Pallet</code></a> or
<a href="../enum.Call.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::Call"><code>Call</code></a>.</p>
</div></details><h2 id="functions" class="section-header">Functions<a href="#functions" class="anchor">§</a></h2><dl class="item-table"><dt><a class="fn" href="fn.simple_transfer.html" title="fn pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::dispatchables::simple_transfer">simple_<wbr>transfer</a></dt><dd>Warning: Doc-Only</dd><dt><a class="fn" href="fn.simple_transfer_2.html" title="fn pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::dispatchables::simple_transfer_2">simple_<wbr>transfer_<wbr>2</a></dt><dd>Warning: Doc-Only</dd><dt><a class="fn" href="fn.simple_transfer_3.html" title="fn pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::dispatchables::simple_transfer_3">simple_<wbr>transfer_<wbr>3</a></dt><dd>Warning: Doc-Only</dd></dl></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {"fn":["simple_transfer","simple_transfer_2","simple_transfer_3"]};
File diff suppressed because one or more lines are too long
@@ -0,0 +1,19 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="The `pallet` module in each FRAME pallet hosts the most important items needed to construct this pallet."><title>pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module pallet</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module pallet</a></h2><h3><a href="#modules">Module Items</a></h3><ul class="block"><li><a href="#modules" title="Modules">Modules</a></li><li><a href="#structs" title="Structs">Structs</a></li><li><a href="#enums" title="Enums">Enums</a></li><li><a href="#traits" title="Traits">Traits</a></li><li><a href="#types" title="Type Aliases">Type Aliases</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>benchmarking_<wbr>weight</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../index.html">reference_docs</a>::<wbr><a href="../index.html">frame_benchmarking_weight</a></div><h1>Module <span>pallet</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_benchmarking_weight.rs.html#135">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>The <code>pallet</code> module in each FRAME pallet hosts the most important items needed
to construct this pallet.</p>
<p>The main components of this pallet are:</p>
<ul>
<li>[<code>Pallet</code>], which implements all of the dispatchable extrinsics of the pallet, among
other public functions.
<ul>
<li>The subset of the functions that are dispatchable can be identified either in the
[<code>dispatchables</code>] module or in the [<code>Call</code>] enum.</li>
</ul>
</li>
<li>[<code>storage_types</code>], which contains the list of all types that are representing a
storage item. Otherwise, all storage items are listed among <a href="#types"><em>Type Definitions</em></a>.</li>
<li>[<code>Config</code>], which contains the configuration trait of this pallet.</li>
<li>[<code>Event</code>] and [<code>Error</code>], which are listed among the <a href="#enums"><em>Enums</em></a>.</li>
</ul>
</div></details><h2 id="modules" class="section-header">Modules<a href="#modules" class="anchor">§</a></h2><dl class="item-table"><dt><a class="mod" href="dispatchables/index.html" title="mod pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::dispatchables">dispatchables</a></dt><dd>Auto-generated docs-only module listing all defined dispatchables for this pallet.</dd><dt><a class="mod" href="storage_types/index.html" title="mod pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::storage_types">storage_<wbr>types</a></dt><dd>Auto-generated docs-only module listing all (public and private) defined storage types
for this pallet.</dd></dl><h2 id="structs" class="section-header">Structs<a href="#structs" class="anchor">§</a></h2><dl class="item-table"><dt><a class="struct" href="struct.Pallet.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::Pallet">Pallet</a></dt><dd>The <code>Pallet</code> struct, the main type that implements traits and standalone
functions within the pallet.</dd></dl><h2 id="enums" class="section-header">Enums<a href="#enums" class="anchor">§</a></h2><dl class="item-table"><dt><a class="enum" href="enum.Call.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::Call">Call</a></dt><dd>Contains a variant per dispatchable extrinsic that this pallet has.</dd></dl><h2 id="traits" class="section-header">Traits<a href="#traits" class="anchor">§</a></h2><dl class="item-table"><dt><a class="trait" href="trait.Config.html" title="trait pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::Config">Config</a></dt><dd>Configuration trait of this pallet.</dd><dt><a class="trait" href="trait.WeightInfo.html" title="trait pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::WeightInfo">Weight<wbr>Info</a></dt></dl><h2 id="types" class="section-header">Type Aliases<a href="#types" class="anchor">§</a></h2><dl class="item-table"><dt><a class="type" href="type.Module.html" title="type pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::Module">Module</a><wbr><span class="stab deprecated" title="">Deprecated</span></dt><dd>Type alias to <code>Pallet</code>, to be used by <code>construct_runtime</code>.</dd></dl></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {"enum":["Call"],"mod":["dispatchables","storage_types"],"struct":["Pallet"],"trait":["Config","WeightInfo"],"type":["Module"]};
@@ -0,0 +1,8 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Auto-generated docs-only module listing all (public and private) defined storage types for this pallet."><title>pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::storage_types - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module storage_types</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module storage_<wbr>types</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#warning-doc-only" title="Warning: Doc-Only">Warning: Doc-Only</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>benchmarking_<wbr>weight::<wbr>pallet</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../../index.html">reference_docs</a>::<wbr><a href="../../index.html">frame_benchmarking_weight</a>::<wbr><a href="../index.html">pallet</a></div><h1>Module <span>storage_<wbr>types</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../../src/pezkuwi_sdk_docs/reference_docs/frame_benchmarking_weight.rs.html#133">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Auto-generated docs-only module listing all (public and private) defined storage types
for this pallet.</p>
<h2 id="warning-doc-only"><a class="doc-anchor" href="#warning-doc-only">§</a>Warning: Doc-Only</h2>
<p>Members of this module cannot be used directly and are only provided for documentation
purposes.</p>
<p>To see the actual storage type, find a struct with the same name at the root of the
pallet, in the list of <a href="../index.html#types"><em>Type Definitions</em></a>.</p>
</div></details></section></div></main></body></html>
File diff suppressed because one or more lines are too long
@@ -0,0 +1,8 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Configuration trait of this pallet."><title>Config in pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc trait"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Config</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Config</a></h2><h3><a href="#required-associated-types">Required Associated Types</a></h3><ul class="block"><li><a href="#associatedtype.WeightInfo" title="WeightInfo">WeightInfo</a></li></ul><h3><a href="#dyn-compatibility">Dyn Compatibility</a></h3><h3><a href="#implementors">Implementors</a></h3></section><div id="rustdoc-modnav"><h2><a href="index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>benchmarking_<wbr>weight::<wbr>pallet</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../index.html">reference_docs</a>::<wbr><a href="../index.html">frame_benchmarking_weight</a>::<wbr><a href="index.html">pallet</a></div><h1>Trait <span class="trait">Config</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_benchmarking_weight.rs.html#144-146">Source</a> </span></div><pre class="rust item-decl"><code>pub trait Config: Config {
type <a href="#associatedtype.WeightInfo" class="associatedtype">WeightInfo</a>: <a class="trait" href="trait.WeightInfo.html" title="trait pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::WeightInfo">WeightInfo</a>;
}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Configuration trait of this pallet.</p>
<p>The main purpose of this trait is to act as an interface between this pallet and the runtime in
which it is embedded in. A type, function, or constant in this trait is essentially left to be
configured by the runtime that includes this pallet.</p>
<p>Consequently, a runtime that wants to include this pallet must implement this trait.</p>
</div></details><h2 id="required-associated-types" class="section-header">Required Associated Types<a href="#required-associated-types" class="anchor">§</a></h2><div class="methods"><section id="associatedtype.WeightInfo" class="method"><a class="src rightside" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_benchmarking_weight.rs.html#145">Source</a><h4 class="code-header">type <a href="#associatedtype.WeightInfo" class="associatedtype">WeightInfo</a>: <a class="trait" href="trait.WeightInfo.html" title="trait pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::WeightInfo">WeightInfo</a></h4></section></div><h2 id="dyn-compatibility" class="section-header">Dyn Compatibility<a href="#dyn-compatibility" class="anchor">§</a></h2><div class="dyn-compatibility-info"><p>This trait is <b>not</b> <a href="https://doc.rust-lang.org/1.91.1/reference/items/traits.html#dyn-compatibility">dyn compatible</a>.</p><p><i>In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.</i></p></div><h2 id="implementors" class="section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"></div><script src="../../../../trait.impl/pezkuwi_sdk_docs/reference_docs/frame_benchmarking_weight/pallet/trait.Config.js" async></script></section></div></main></body></html>
@@ -0,0 +1,4 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `WeightInfo` trait in crate `pezkuwi_sdk_docs`."><title>WeightInfo in pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc trait"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">WeightInfo</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Weight<wbr>Info</a></h2><h3><a href="#required-methods">Required Methods</a></h3><ul class="block"><li><a href="#tymethod.simple_transfer" title="simple_transfer">simple_transfer</a></li></ul><h3><a href="#dyn-compatibility">Dyn Compatibility</a></h3><h3><a href="#implementors">Implementors</a></h3></section><div id="rustdoc-modnav"><h2><a href="index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>benchmarking_<wbr>weight::<wbr>pallet</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../index.html">reference_docs</a>::<wbr><a href="../index.html">frame_benchmarking_weight</a>::<wbr><a href="index.html">pallet</a></div><h1>Trait <span class="trait">Weight<wbr>Info</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_benchmarking_weight.rs.html#139-141">Source</a> </span></div><pre class="rust item-decl"><code>pub trait WeightInfo {
// Required method
fn <a href="#tymethod.simple_transfer" class="fn">simple_transfer</a>() -&gt; Weight;
}</code></pre><h2 id="required-methods" class="section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><section id="tymethod.simple_transfer" class="method"><a class="src rightside" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_benchmarking_weight.rs.html#140">Source</a><h4 class="code-header">fn <a href="#tymethod.simple_transfer" class="fn">simple_transfer</a>() -&gt; Weight</h4></section></div><h2 id="dyn-compatibility" class="section-header">Dyn Compatibility<a href="#dyn-compatibility" class="anchor">§</a></h2><div class="dyn-compatibility-info"><p>This trait is <b>not</b> <a href="https://doc.rust-lang.org/1.91.1/reference/items/traits.html#dyn-compatibility">dyn compatible</a>.</p><p><i>In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.</i></p></div><h2 id="implementors" class="section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"></div><script src="../../../../trait.impl/pezkuwi_sdk_docs/reference_docs/frame_benchmarking_weight/pallet/trait.WeightInfo.js" async></script></section></div></main></body></html>
@@ -0,0 +1,3 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Type alias to `Pallet`, to be used by `construct_runtime`."><title>Module in pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc type"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module</a></h2><h3><a href="#aliased-type">Aliased Type</a></h3></section><div id="rustdoc-modnav"><h2><a href="index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>benchmarking_<wbr>weight::<wbr>pallet</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../index.html">reference_docs</a>::<wbr><a href="../index.html">frame_benchmarking_weight</a>::<wbr><a href="index.html">pallet</a></div><h1>Type Alias <span class="type">Module</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_benchmarking_weight.rs.html#148">Source</a> </span></div><pre class="rust item-decl"><code>pub type Module&lt;T&gt; = <a class="struct" href="struct.Pallet.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::Pallet">Pallet</a>&lt;T&gt;;</code></pre><span class="item-info"><div class="stab deprecated"><span class="emoji">👎</span><span>Deprecated: use <code>Pallet</code> instead</span></div></span><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Type alias to <code>Pallet</code>, to be used by <code>construct_runtime</code>.</p>
<p>Generated by <code>pallet</code> attribute macro.</p>
</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>pub struct Module&lt;T&gt;(<span class="comment">/* private fields */</span>);</code></pre><script src="../../../../type.impl/pezkuwi_sdk_docs/reference_docs/frame_benchmarking_weight/pallet/struct.Pallet.js" data-self-path="pezkuwi_sdk_docs::reference_docs::frame_benchmarking_weight::pallet::Module" async></script></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {"mod":["pallet"]};
@@ -0,0 +1,117 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Learn about how to do logging in FRAME-based runtimes."><title>pezkuwi_sdk_docs::reference_docs::frame_logging - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module frame_logging</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module frame_<wbr>logging</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#frame-logging" title="FRAME Logging">FRAME Logging</a><ul><li><a href="#using-println" title="Using `println!`">Using <code>println!</code></a></li><li><a href="#using-log" title="Using `log`">Using <code>log</code></a></li><li><a href="#enabling-logs-in-production" title="Enabling Logs in Production">Enabling Logs in Production</a></li><li><a href="#log-target-prefixing" title="Log Target Prefixing">Log Target Prefixing</a></li><li><a href="#low-level-primitives" title="Low Level Primitives">Low Level Primitives</a></li><li><a href="#using-logging-in-production" title="Using Logging in Production">Using Logging in Production</a></li></ul></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../index.html">reference_docs</a></div><h1>Module <span>frame_<wbr>logging</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../src/pezkuwi_sdk_docs/reference_docs/frame_logging.rs.html#1-155">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Learn about how to do logging in FRAME-based runtimes.</p>
<h2 id="frame-logging"><a class="doc-anchor" href="#frame-logging">§</a>FRAME Logging</h2>
<p>This reference docs briefly explores how to do logging and printing runtimes, mainly
FRAME-based.</p>
<blockquote>
<p>Please make sure to read <a href="#using-logging-in-production">the section below</a> on using logging in
production.</p>
</blockquote>
<h3 id="using-println"><a class="doc-anchor" href="#using-println">§</a>Using <code>println!</code></h3>
<p>To recap, as with standard Rust, you can use <code>println!</code> <em>in your tests</em>, but it will only print
out if executed with <code>--nocapture</code>, or if the test panics.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">fn </span>it_print() {
<span class="macro">println!</span>(<span class="string">"Hello, world!"</span>);
}</code></pre></div>
<p>within the pallet, if you want to use the standard <code>println!</code>, it needs to be wrapped in
[<code>sp_std::if_std</code>]. Of course, this means that this print code is only available to you in the
<code>std</code> compiler flag, and never present in a wasm build.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="comment">// somewhere in your pallet. This is not a real pallet code.
</span><span class="kw">mod </span>pallet {
<span class="kw">struct </span>Pallet;
<span class="kw">impl </span>Pallet {
<span class="kw">fn </span>print() {
<span class="macro">sp_std::if_std!</span> {
<span class="macro">println!</span>(<span class="string">"Hello, world!"</span>);
}
}
}
}</code></pre></div><h3 id="using-log"><a class="doc-anchor" href="#using-log">§</a>Using <code>log</code></h3>
<p>First, ensure you are familiar with the <a href="https://docs.rs/log/0.4.22/log/index.html" title="mod log"><code>log</code></a> crate. In short, each log statement has:</p>
<ol>
<li><code>log-level</code>, signifying how important it is.</li>
<li><code>log-target</code>, signifying to which component it belongs.</li>
</ol>
<p>Add log statements to your pallet as such:</p>
<p>You can add the log crate to the <code>Cargo.toml</code> of the pallet.</p>
<div class="example-wrap"><pre class="language-text"><code>#[dependencies]
log = { version = &quot;x.y.z&quot;, default-features = false }
#[features]
std = [
// snip -- other pallets
&quot;log/std&quot;
]</code></pre></div>
<p>More conveniently, the <code>frame</code> umbrella crate re-exports the log crate as <a href="https://docs.rs/log/0.4.22/log/index.html" title="mod log"><code>frame::log</code></a>.</p>
<p>Then, the pallet can use this crate to emit log statements. In this statement, we use the info
level, and the target is <code>pallet-example</code>.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">mod </span>pallet {
<span class="kw">struct </span>Pallet;
<span class="kw">impl </span>Pallet {
<span class="kw">fn </span>logs() {
<span class="macro">frame::log::info!</span>(target: <span class="string">"pallet-example"</span>, <span class="string">"Hello, world!"</span>);
}
}
}</code></pre></div>
<p>This will in itself just emit the log messages, <strong>but unless if captured by a logger, they will
not go anywhere</strong>. [<code>sp_api</code>] provides a handy function to enable the runtime logging:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="comment">// in your test
</span><span class="kw">fn </span>it_also_prints() {
sp_api::init_runtime_logger();
<span class="comment">// call into your pallet, and now it will print `log` statements.
</span>}</code></pre></div>
<p>Alternatively, you can use [<code>sp_tracing::try_init_simple</code>].</p>
<p><code>info</code>, <code>error</code> and <code>warn</code> logs are printed by default, but if you want lower level logs to also
be printed, you must to add the following compiler flag:</p>
<div class="example-wrap"><pre class="language-text"><code>RUST_LOG=pallet-example=trace cargo test</code></pre></div><h3 id="enabling-logs-in-production"><a class="doc-anchor" href="#enabling-logs-in-production">§</a>Enabling Logs in Production</h3>
<p>All logs from the runtime are emitted by default, but there is a feature flag in [<code>sp_api</code>],
called <code>disable-logging</code>, that can be used to disable all logs in the runtime. This is useful
for production chains to reduce the size and overhead of the wasm runtime.</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="kw">pub fn </span>init_runtime_logger() {
<span class="attr">#[cfg(not(feature = <span class="string">"disable-logging"</span>))]
</span>sp_runtime::runtime_logger::RuntimeLogger::init();
}</code></pre></div>
<p>Similar to the above, the proper <code>RUST_LOG</code> must also be passed to your compiler flag when
compiling the runtime.</p>
<h3 id="log-target-prefixing"><a class="doc-anchor" href="#log-target-prefixing">§</a>Log Target Prefixing</h3>
<p>Many <a href="../../pezkuwi_sdk/frame_runtime/index.html" title="mod pezkuwi_sdk_docs::pezkuwi_sdk::frame_runtime"><code>crate::pezkuwi_sdk::frame_runtime</code></a> pallets emit logs with log target <code>runtime::&lt;name of pallet&gt;</code>, for example <code>runtime::system</code>. This then allows one to run a node with a wasm blob
compiled with <code>LOG_TARGET=runtime=debug</code>, which enables the log target of all pallets whos log
target starts with <code>runtime</code>.</p>
<h3 id="low-level-primitives"><a class="doc-anchor" href="#low-level-primitives">§</a>Low Level Primitives</h3>
<p>Under the hood, logging is another instance of host functions under the hood (as defined in
<a href="../wasm_meta_protocol/index.html" title="mod pezkuwi_sdk_docs::reference_docs::wasm_meta_protocol"><code>crate::reference_docs::wasm_meta_protocol</code></a>). The runtime uses a set of host functions under
[<code>sp_io::logging</code>] and [<code>sp_io::misc</code>] to emit all logs and prints. You typically do not need to
use these APIs directly.</p>
<h3 id="using-logging-in-production"><a class="doc-anchor" href="#using-logging-in-production">§</a>Using Logging in Production</h3>
<p>Note that within FRAME, reading storage values <strong>only for the purpose of logging</strong> is dangerous,
and can lead to consensus issues. This is because with the introduction of
<a href="../../guides/enable_pov_reclaim/index.html" title="mod pezkuwi_sdk_docs::guides::enable_pov_reclaim"><code>crate::guides::enable_pov_reclaim</code></a>, the node side code will track the storage changes, and
tries to update the onchain record of the <code>proof_size</code> weight used (stored in
[<code>frame_system::BlockWeight</code>]) after the block is executed.</p>
<p>If one node has a different log level enabled than the rest of the network, and the extra logs
impose additional storage reads, then the amount of <code>proof_size</code> weight reclaimed into
[<code>frame_system::BlockWeight</code>] will be different, causing a state root mismatch, which is
typically a fatal error emitted from [<code>frame_executive</code>].</p>
<p>This also can also happen in a teyrchain context, and cause discrepancies between the relay
chain and the teyrchain, when execution the Teyrchain Validation Function (PVF) on the relay
chain.</p>
<p><strong>In summary, you should only used storage values in logging (especially for levels lower than
<code>info</code> which is typically enabled by all parties) that are already read from storage, and will
be part of the storage proof of execution in any case</strong>.</p>
<p>A typical faulty code would look like this:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="doccomment">/// This function will have a different storage footprint depending on the log level
</span><span class="kw">fn </span>faulty_logging() {
<span class="macro">log::debug!</span>(
<span class="string">"what I am about to print is only read when `RUST_LOG=debug` {:?}"</span>,
StorageValue::&lt;T&gt;::get()
);
}</code></pre></div>
<p>Please read <a href="https://github.com/pezkuwichain/pezkuwi-sdk/issues/155">this issue</a> for one
instance of the consensus issues caused by this mistake.</p>
</div></details></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {};
@@ -0,0 +1,100 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Learn about the offchain workers, how they function, and how to use them, as provided by the `frame` APIs."><title>pezkuwi_sdk_docs::reference_docs::frame_offchain_workers - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module frame_offchain_workers</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module frame_<wbr>offchain_<wbr>workers</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#offchain-workers" title="Offchain Workers">Offchain Workers</a><ul><li><a href="#context" title="Context">Context</a></li><li><a href="#nondeterministic-execution" title="Nondeterministic Execution">Nondeterministic Execution</a></li><li><a href="#frames-api" title="FRAMEs API">FRAMEs API</a></li><li><a href="#think-twice-why-use-substrates-offchain-workers" title="Think Twice: Why Use Substrates Offchain Workers?">Think Twice: Why Use Substrates Offchain Workers?</a></li><li><a href="#further-references" title="Further References">Further References</a></li></ul></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../index.html">reference_docs</a></div><h1>Module <span>frame_<wbr>offchain_<wbr>workers</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../src/pezkuwi_sdk_docs/reference_docs/frame_offchain_workers.rs.html#1-114">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Learn about the offchain workers, how they function, and how to use them, as provided by the
[<code>frame</code>] APIs.</p>
<h2 id="offchain-workers"><a class="doc-anchor" href="#offchain-workers">§</a>Offchain Workers</h2>
<p>This reference document explains how offchain workers work in Substrate and FRAME. The main
focus is upon FRAMEs implementation of this functionality. Nonetheless, offchain workers are a
Substrate-provided feature and can be used with possible alternatives to [<code>frame</code>] as well.</p>
<p>Offchain workers are a commonly misunderstood topic, therefore we explain them bottom-up,
starting at the fundamentals and then describing the developer interface.</p>
<h3 id="context"><a class="doc-anchor" href="#context">§</a>Context</h3>
<p>Recall from <a href="../wasm_meta_protocol/index.html" title="mod pezkuwi_sdk_docs::reference_docs::wasm_meta_protocol"><code>crate::reference_docs::wasm_meta_protocol</code></a> that the node and the runtime
communicate with one another via host functions and runtime APIs. Many of these interactions
contribute to the actual state transition of the blockchain. For example [<code>sp_api::Core</code>] is the
main runtime API that is called to execute new blocks.</p>
<p>Offchain workers are in principle not different in any way: It is a runtime API exposed by the
wasm blob ([<code>sp_offchain::OffchainWorkerApi</code>]), and the node software calls into it when it
deems fit. But, crucially, this API call is different in that:</p>
<ol>
<li>It can have no impact on the state ie. it is <em>OFF (the) CHAIN</em>. If any state is altered
during the execution of this API call, it is discarded.</li>
<li>It has access to an extended set of host functions that allow the wasm blob to do more. For
example, call into HTTP requests.</li>
</ol>
<blockquote>
<p>The main way through which an offchain worker can interact with the state is by submitting an
extrinsic to the chain. This is the ONLY way to alter the state from an offchain worker.
[<code>pallet_example_offchain_worker</code>] provides an example of this.</p>
</blockquote>
<p>Given the “Off Chain” nature of this API, it is important to remember that calling this API is
entirely optional. Some nodes might call into it, some might not, and it would have no impact on
the execution of your blockchain because no state is altered no matter the execution of the
offchain worker API.</p>
<p>Substrates CLI allows some degree of configuration about this, allowing node operators to
specify when they want to run the offchain worker API. See
[<code>sc_cli::RunCmd::offchain_worker_params</code>].</p>
<h3 id="nondeterministic-execution"><a class="doc-anchor" href="#nondeterministic-execution">§</a>Nondeterministic Execution</h3>
<p>Needless to say, given the above description, the code in your offchain worker API can be
nondeterministic, as it is not part of the blockchains STF, so it can be executed at unknown
times, by unknown nodes, and has no impact on the state. This is why an HTTP
([<code>sp_runtime::offchain::http</code>]) API is readily provided to the offchain worker APIs. Because
there is no need for determinism in this context.</p>
<blockquote>
<p>A common mistake here is for novice developers to see this HTTP API, and imagine that
<code>pezkuwi-sdk</code> somehow magically solved the determinism in blockchains, and now a blockchain
can make HTTP calls and it will all work. This is absolutely NOT the case. An HTTP call made
by the offchain worker is non-deterministic by design. Blockchains cant and always wont be
able to perform non-deterministic operations such as making HTTP calls to a foreign server.</p>
</blockquote>
<h3 id="frames-api"><a class="doc-anchor" href="#frames-api">§</a>FRAMEs API</h3>
<p>[<code>frame</code>] provides a simple API through which pallets can define offchain worker functions. This
is part of [<code>frame::traits::Hooks</code>], which is implemented as a part of
[<code>frame::pallet_macros::hooks</code>].</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#[frame::pallet]
</span><span class="kw">pub mod </span>pallet {
<span class="kw">use </span>frame::prelude::<span class="kw-2">*</span>;
<span class="attr">#[pallet::config]
</span><span class="kw">pub trait </span>Config: frame_system::Config {}
<span class="attr">#[pallet::pallet]
</span><span class="kw">pub struct </span>Pallet&lt;T&gt;(<span class="kw">_</span>);
<span class="attr">#[pallet::hooks]
</span><span class="kw">impl</span>&lt;T: Config&gt; Hooks&lt;BlockNumberFor&lt;T&gt;&gt; <span class="kw">for </span>Pallet&lt;T&gt; {
<span class="kw">fn </span>offchain_worker(block_number: BlockNumberFor&lt;T&gt;) {
<span class="comment">// ...
</span>}
}
}</code></pre></div>
<p>Additionally, [<code>sp_runtime::offchain</code>] provides a set of utilities that can be used to moderate
the execution of offchain workers.</p>
<h3 id="think-twice-why-use-substrates-offchain-workers"><a class="doc-anchor" href="#think-twice-why-use-substrates-offchain-workers">§</a>Think Twice: Why Use Substrates Offchain Workers?</h3>
<p>Consider the fact that in principle, an offchain worker code written using the above API is no
different than an equivalent written with an <em>actual offchain interaction library</em>, such as
<a href="https://pezkuwi.js.org/docs/">Pezkuwi-JS</a>, or any of the other ones listed <a href="https://github.com/substrate-developer-hub/awesome-substrate?tab=readme-ov-file#client-libraries">here</a>.</p>
<p>They can both read from the state, and have no means of updating the state, other than the route
of submitting an extrinsic to the chain. Therefore, it is worth thinking twice before embedding
a logic as a part of Substrates offchain worker API. Does it have to be there? Can it not be a
simple, actual offchain application that lives outside of the chains WASM blob?</p>
<p>Some of the reasons why you might want to do the opposite, and actually embed an offchain worker
API into the WASM blob are:</p>
<ul>
<li>Accessing the state is easier within the <code>offchain_worker</code> function, as it is already a part
of the runtime, and [<code>frame::pallet_macros::storage</code>] provides all the tools needed to read
the state. Other client libraries might provide varying degrees of capability here.</li>
<li>It will be updated in synchrony with the runtime. A Substrates offchain application is part
of the same WASM blob, and is therefore guaranteed to be up to date.</li>
</ul>
<p>For example, imagine you have modified a storage item to have a new type. This will possibly
require a <a href="../frame_runtime_upgrades_and_migrations/index.html" title="mod pezkuwi_sdk_docs::reference_docs::frame_runtime_upgrades_and_migrations"><code>crate::reference_docs::frame_runtime_upgrades_and_migrations</code></a>, and any offchain
code, such as a Pezkuwi-JS application, will have to be updated to reflect this change. Whereas
the WASM offchain worker code is guaranteed to already be updated, or else the runtime code will
not even compile.</p>
<h3 id="further-references"><a class="doc-anchor" href="#further-references">§</a>Further References</h3>
<ul>
<li><a href="https://forum.network.pezkuwichain.io/t/offchain-workers-design-assumptions-vulnerabilities/2548">https://forum.network.pezkuwichain.io/t/offchain-workers-design-assumptions-vulnerabilities/2548</a></li>
<li><a href="https://exchange.pezkuwichain.app/questions/11058/how-can-i-create-ocw-that-wont-activates-every-block-but-will-activates-only-w/11060#11060">https://exchange.pezkuwichain.app/questions/11058/how-can-i-create-ocw-that-wont-activates-every-block-but-will-activates-only-w/11060#11060</a></li>
<li><a href="https://github.com/pezkuwichain/pezkuwi-sdk/tree/master/substrate/frame/examples/offchain-worker">Offchain worker example</a></li>
</ul>
</div></details></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {};
@@ -0,0 +1,171 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Learn about Origins, a topic in FRAME that enables complex account abstractions to be built."><title>pezkuwi_sdk_docs::reference_docs::frame_origin - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module frame_origin</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module frame_<wbr>origin</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#frame-origin" title="FRAME Origin">FRAME Origin</a><ul><li><a href="#context" title="Context">Context</a></li><li><a href="#adding-custom-pallet-origin-to-the-runtime" title="Adding Custom Pallet Origin to the Runtime">Adding Custom Pallet Origin to the Runtime</a></li><li><a href="#asserting-on-a-custom-internal-origin" title="Asserting on a Custom Internal Origin">Asserting on a Custom Internal Origin</a></li><li><a href="#asserting-on-a-custom-external-origin" title="Asserting on a Custom External Origin">Asserting on a Custom External Origin</a></li><li><a href="#obtaining-abstract-origins" title="Obtaining Abstract Origins">Obtaining Abstract Origins</a></li><li><a href="#further-references" title="Further References">Further References</a></li></ul></li></ul><h3><a href="#modules">Module Items</a></h3><ul class="block"><li><a href="#modules" title="Modules">Modules</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../index.html">reference_docs</a></div><h1>Module <span>frame_<wbr>origin</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#1-270">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Learn about <em>Origins</em>, a topic in FRAME that enables complex account abstractions to be built.</p>
<h2 id="frame-origin"><a class="doc-anchor" href="#frame-origin">§</a>FRAME Origin</h2>
<p>Lets start by clarifying a common wrong assumption about Origin:</p>
<p><strong>ORIGIN IS NOT AN ACCOUNT ID</strong>.</p>
<p>FRAMEs origin abstractions allow you to convey meanings far beyond just an account-id being the
caller of an extrinsic. Nonetheless, an account-id having signed an extrinsic is one of the
meanings that an origin can convey. This is the commonly used [<code>frame_system::ensure_signed</code>],
where the return value happens to be an account-id.</p>
<p>Instead, lets establish the following as the correct definition of an origin:</p>
<blockquote>
<p>The origin type represents the privilege level of the caller of an extrinsic.</p>
</blockquote>
<p>That is, an extrinsic, through checking the origin, can <em>express what privilege level it wishes
to impose on the caller of the extrinsic</em>. One of those checks can be as simple as “<em>any account
that has signed a statement can pass</em>”.</p>
<p>But the origin system can also express more abstract and complicated privilege levels. For
example:</p>
<ul>
<li>If the majority of token holders agreed upon this. This is more or less what the
[<code>pallet_democracy</code>] does under the hood (<a href="https://github.com/pezkuwichain/pezkuwi-sdk/blob/edd95b3749754d2ed0c5738588e872c87be91624/substrate/frame/democracy/src/lib.rs#L1603-L1633">reference</a>).</li>
<li>If a specific ratio of an instance of [<code>pallet_collective</code>]/DAO agrees upon this.</li>
<li>If another consensus system, for example a bridged network or a teyrchain, agrees upon this.</li>
<li>If the majority of validator/authority set agrees upon this<sup id="fnref1"><a href="#fn1">1</a></sup>.</li>
<li>If caller holds a particular NFT.</li>
</ul>
<p>and many more.</p>
<h3 id="context"><a class="doc-anchor" href="#context">§</a>Context</h3>
<p>First, lets look at where the <code>origin</code> type is encountered in a typical pallet. The <code>origin: OriginFor&lt;T&gt;</code> has to be the first argument of any given callable extrinsic in FRAME:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="attr">#[pallet::call]
</span><span class="kw">impl</span>&lt;T: Config&gt; Pallet&lt;T&gt; {
<span class="kw">pub fn </span>do_something(_origin: OriginFor&lt;T&gt;) -&gt; DispatchResult {
<span class="comment">// ^^^^^^^^^^^^^^^^^^^^^
</span><span class="macro">todo!</span>();
}
}</code></pre></div>
<p>Typically, the code of an extrinsic starts with an origin check, such as
[<code>frame_system::ensure_signed</code>].</p>
<p>Note that <a href="frame_system::pallet_prelude::OriginFor"><code>OriginFor</code></a> is merely a shorthand for
[<code>frame_system::Config::RuntimeOrigin</code>]. Given the name prefix <code>Runtime</code>, we can learn that
<code>RuntimeOrigin</code> is similar to <code>RuntimeCall</code> and others, a runtime composite enum that is
amalgamated at the runtime level. Read <a href="../frame_runtime_types/index.html" title="mod pezkuwi_sdk_docs::reference_docs::frame_runtime_types"><code>crate::reference_docs::frame_runtime_types</code></a> to
familiarize yourself with these types.</p>
<p>To understand this better, we will next create a pallet with a custom origin, which will add a
new variant to <code>RuntimeOrigin</code>.</p>
<h3 id="adding-custom-pallet-origin-to-the-runtime"><a class="doc-anchor" href="#adding-custom-pallet-origin-to-the-runtime">§</a>Adding Custom Pallet Origin to the Runtime</h3>
<p>For example, given a pallet that defines the following custom origin:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="attr">#[pallet::origin]
#[derive(
PartialEq,
Eq,
Clone,
RuntimeDebug,
Encode,
Decode,
DecodeWithMemTracking,
TypeInfo,
MaxEncodedLen,
)]
</span><span class="kw">pub enum </span>Origin {
<span class="doccomment">/// If all holders of a particular NFT have agreed upon this.
</span>AllNftHolders,
<span class="doccomment">/// If all validators have agreed upon this.
</span>ValidatorSet,
}</code></pre></div>
<p>And a runtime with the following pallets:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="macro">construct_runtime!</span>(
<span class="kw">pub struct </span>Runtime {
System: frame_system,
PalletWithCustomOrigin: pallet_with_custom_origin,
}
);</code></pre></div>
<p>The type <a href="runtime_for_origin/struct.RuntimeOrigin.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_origin::RuntimeOrigin"><code>crate::reference_docs::frame_origin::runtime_for_origin::RuntimeOrigin</code></a> is expanded.
This <code>RuntimeOrigin</code> contains a variant for the [<code>frame_system::RawOrigin</code>] and the custom
origin of the pallet.</p>
<blockquote>
<p>Notice how the [<code>frame_system::ensure_signed</code>] is nothing more than a <code>match</code> statement. If
you want to know where the actual origin of an extrinsic is set (and the signature
verification happens, if any), see
[<code>sp_runtime::generic::CheckedExtrinsic#trait-implementations</code>], specifically
[<code>sp_runtime::traits::Applyable</code>]s implementation.</p>
</blockquote>
<h3 id="asserting-on-a-custom-internal-origin"><a class="doc-anchor" href="#asserting-on-a-custom-internal-origin">§</a>Asserting on a Custom Internal Origin</h3>
<p>In order to assert on a custom origin that is defined within your pallet, we need a way to first
convert the <code>&lt;T as frame_system::Config&gt;::RuntimeOrigin</code> into the local <code>enum Origin</code> of the
current pallet. This is a common process that is explained in
<a href="../frame_runtime_types/index.html#%20adding-further-constraints-to-runtime-composite-enums" title="mod pezkuwi_sdk_docs::reference_docs::frame_runtime_types"><code>crate::reference_docs::frame_runtime_types</code></a>.</p>
<p>We use the same process here to express that <code>RuntimeOrigin</code> has a number of additional bounds,
as follows.</p>
<ol>
<li>Defining a custom <code>RuntimeOrigin</code> with further bounds in the pallet.</li>
</ol>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="attr">#[pallet::config]
</span><span class="kw">pub trait </span>Config: frame_system::Config {
<span class="kw">type </span>RuntimeOrigin: From&lt;&lt;<span class="self">Self </span><span class="kw">as </span>frame_system::Config&gt;::RuntimeOrigin&gt;
+ Into&lt;<span class="prelude-ty">Result</span>&lt;Origin, &lt;<span class="self">Self </span><span class="kw">as </span>Config&gt;::RuntimeOrigin&gt;&gt;;
}</code></pre></div>
<ol start="2">
<li>Using it in the pallet.</li>
</ol>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="attr">#[pallet::call]
</span><span class="kw">impl</span>&lt;T: Config&gt; Pallet&lt;T&gt; {
<span class="kw">pub fn </span>only_validators(origin: OriginFor&lt;T&gt;) -&gt; DispatchResult {
<span class="comment">// first, we convert from `&lt;T as frame_system::Config&gt;::RuntimeOrigin` to `&lt;T as
// Config&gt;::RuntimeOrigin`
</span><span class="kw">let </span>local_runtime_origin = &lt;&lt;T <span class="kw">as </span>Config&gt;::RuntimeOrigin <span class="kw">as </span>From&lt;
&lt;T <span class="kw">as </span>frame_system::Config&gt;::RuntimeOrigin,
&gt;&gt;::from(origin);
<span class="comment">// then we convert to `origin`, if possible
</span><span class="kw">let </span>local_origin =
local_runtime_origin.into().map_err(|<span class="kw">_</span>| <span class="string">"invalid origin type provided"</span>)<span class="question-mark">?</span>;
<span class="macro">ensure!</span>(<span class="macro">matches!</span>(local_origin, Origin::ValidatorSet), <span class="string">"Not authorized"</span>);
<span class="macro">todo!</span>();
}
}</code></pre></div><h3 id="asserting-on-a-custom-external-origin"><a class="doc-anchor" href="#asserting-on-a-custom-external-origin">§</a>Asserting on a Custom External Origin</h3>
<p>Very often, a pallet wants to have a parameterized origin that is <strong>NOT</strong> defined within the
pallet. In other words, a pallet wants to delegate an origin check to something that is
specified later at the runtime level. Like many other parameterizations in FRAME, this implies
adding a new associated type to <code>trait Config</code>.</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="attr">#[pallet::config]
</span><span class="kw">pub trait </span>Config: frame_system::Config {
<span class="kw">type </span>ExternalOrigin: EnsureOrigin&lt;<span class="self">Self</span>::RuntimeOrigin&gt;;
}</code></pre></div>
<p>Then, within the pallet, we can simply use this “unknown” origin check type:</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="attr">#[pallet::call]
</span><span class="kw">impl</span>&lt;T: Config&gt; Pallet&lt;T&gt; {
<span class="kw">pub fn </span>externally_checked_ext(origin: OriginFor&lt;T&gt;) -&gt; DispatchResult {
T::ExternalOrigin::ensure_origin(origin)<span class="question-mark">?</span>;
<span class="macro">todo!</span>();
}
}</code></pre></div>
<p>Finally, at the runtime, any implementation of [<code>frame::traits::EnsureOrigin</code>] can be passed.</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code><span class="kw">impl </span>pallet_with_external_origin::Config <span class="kw">for </span>Runtime {
<span class="kw">type </span>ExternalOrigin = EnsureSigned&lt;&lt;<span class="self">Self </span><span class="kw">as </span>frame_system::Config&gt;::AccountId&gt;;
}</code></pre></div>
<p>Indeed, some of these implementations of [<code>frame::traits::EnsureOrigin</code>] are similar to the ones
that we know about: [<code>frame::runtime::prelude::EnsureSigned</code>],
[<code>frame::runtime::prelude::EnsureSignedBy</code>], [<code>frame::runtime::prelude::EnsureRoot</code>],
[<code>frame::runtime::prelude::EnsureNone</code>], etc. But, there are also many more that are not known
to us, and are defined in other pallets.</p>
<p>For example, [<code>pallet_collective</code>] defines [<code>pallet_collective::EnsureMember</code>] and
[<code>pallet_collective::EnsureProportionMoreThan</code>] and many more, which is exactly what we alluded
to earlier in this document.</p>
<p>Make sure to check the full list of <a href="frame::traits::EnsureOrigin#implementors">implementors of
<code>EnsureOrigin</code></a> for more inspiration.</p>
<h3 id="obtaining-abstract-origins"><a class="doc-anchor" href="#obtaining-abstract-origins">§</a>Obtaining Abstract Origins</h3>
<p>So far we have learned that FRAME pallets can assert on custom and abstract origin types,
whether they are defined within the pallet or not. But how can we obtain these abstract origins?</p>
<blockquote>
<p>All extrinsics that come from the outer world can generally only be obtained as either
<code>signed</code> or <code>none</code> origin.</p>
</blockquote>
<p>Generally, these abstract origins are only obtained within the runtime, when a call is
dispatched within the runtime.</p>
<h3 id="further-references"><a class="doc-anchor" href="#further-references">§</a>Further References</h3>
<ul>
<li><a href="https://youtu.be/j7b8Upipmeg?si=83_XUgYuJxMwWX4g&amp;t=195">Gavin Woods speech about FRAME features at Protocol Berg 2023.</a></li>
<li><a href="https://exchange.pezkuwichain.app/questions/10992/how-do-you-find-the-public-key-for-the-medium-spender-track-origin">A related StackExchange question.</a></li>
</ul>
<div class="footnotes"><hr><ol><li id="fn1"><p>Inherents are essentially unsigned extrinsics that need an [<code>frame_system::ensure_none</code>]
origin check, and through the virtue of being an inherent, are agreed upon by all validators.&nbsp;<a href="#fnref1"></a></p></li></ol></div></div></details><h2 id="modules" class="section-header">Modules<a href="#modules" class="anchor">§</a></h2><dl class="item-table"><dt><a class="mod" href="pallet_for_origin/index.html" title="mod pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_for_origin">pallet_<wbr>for_<wbr>origin</a></dt><dd>The <code>pallet</code> module in each FRAME pallet hosts the most important items needed
to construct this pallet.</dd><dt><a class="mod" href="pallet_with_custom_origin/index.html" title="mod pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin">pallet_<wbr>with_<wbr>custom_<wbr>origin</a></dt><dd>The <code>pallet</code> module in each FRAME pallet hosts the most important items needed
to construct this pallet.</dd><dt><a class="mod" href="pallet_with_external_origin/index.html" title="mod pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin">pallet_<wbr>with_<wbr>external_<wbr>origin</a></dt><dd>The <code>pallet</code> module in each FRAME pallet hosts the most important items needed
to construct this pallet.</dd><dt><a class="mod" href="runtime_for_external_origin/index.html" title="mod pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin">runtime_<wbr>for_<wbr>external_<wbr>origin</a></dt><dt><a class="mod" href="runtime_for_origin/index.html" title="mod pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_origin">runtime_<wbr>for_<wbr>origin</a></dt></dl></section></div></main></body></html>
@@ -0,0 +1,5 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Warning: Doc-Only"><title>do_something in pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_for_origin::dispatchables - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">do_something</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">do_<wbr>something</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#warning-doc-only" title="Warning: Doc-Only">Warning: Doc-Only</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin::<wbr>pallet_<wbr>for_<wbr>origin::<wbr>dispatchables</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../../index.html">reference_docs</a>::<wbr><a href="../../index.html">frame_origin</a>::<wbr><a href="../index.html">pallet_for_origin</a>::<wbr><a href="index.html">dispatchables</a></div><h1>Function <span class="fn">do_<wbr>something</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#133">Source</a> </span></div><pre class="rust item-decl"><code>pub fn do_something&lt;T: <a class="trait" href="../trait.Config.html" title="trait pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_for_origin::Config">Config</a>&gt;()</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><h2 id="warning-doc-only"><a class="doc-anchor" href="#warning-doc-only">§</a>Warning: Doc-Only</h2>
<p>This function is an automatically generated, and is doc-only, uncallable
stub. See the real version in
<a href="../struct.Pallet.html#method.do_something" title="associated function pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_for_origin::Pallet::do_something"><code>Pallet::do_something</code></a>.</p>
</div></details></section></div></main></body></html>
@@ -0,0 +1,6 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Auto-generated docs-only module listing all defined dispatchables for this pallet."><title>pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_for_origin::dispatchables - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module dispatchables</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module dispatchables</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#warning-doc-only" title="Warning: Doc-Only">Warning: Doc-Only</a></li></ul><h3><a href="#functions">Module Items</a></h3><ul class="block"><li><a href="#functions" title="Functions">Functions</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin::<wbr>pallet_<wbr>for_<wbr>origin</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../../index.html">reference_docs</a>::<wbr><a href="../../index.html">frame_origin</a>::<wbr><a href="../index.html">pallet_for_origin</a></div><h1>Module <span>dispatchables</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#133">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Auto-generated docs-only module listing all defined dispatchables for this pallet.</p>
<h2 id="warning-doc-only"><a class="doc-anchor" href="#warning-doc-only">§</a>Warning: Doc-Only</h2>
<p>Members of this module cannot be used directly and are only provided for documentation
purposes. To see the real version of each dispatchable, look for them in <a href="../struct.Pallet.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_for_origin::Pallet"><code>Pallet</code></a> or
<a href="../enum.Call.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_for_origin::Call"><code>Call</code></a>.</p>
</div></details><h2 id="functions" class="section-header">Functions<a href="#functions" class="anchor">§</a></h2><dl class="item-table"><dt><a class="fn" href="fn.do_something.html" title="fn pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_for_origin::dispatchables::do_something">do_<wbr>something</a></dt><dd>Warning: Doc-Only</dd></dl></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {"fn":["do_something"]};
File diff suppressed because one or more lines are too long
@@ -0,0 +1,19 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="The `pallet` module in each FRAME pallet hosts the most important items needed to construct this pallet."><title>pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_for_origin - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module pallet_for_origin</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module pallet_<wbr>for_<wbr>origin</a></h2><h3><a href="#modules">Module Items</a></h3><ul class="block"><li><a href="#modules" title="Modules">Modules</a></li><li><a href="#structs" title="Structs">Structs</a></li><li><a href="#enums" title="Enums">Enums</a></li><li><a href="#traits" title="Traits">Traits</a></li><li><a href="#types" title="Type Aliases">Type Aliases</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../index.html">reference_docs</a>::<wbr><a href="../index.html">frame_origin</a></div><h1>Module <span>pallet_<wbr>for_<wbr>origin</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#134">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>The <code>pallet</code> module in each FRAME pallet hosts the most important items needed
to construct this pallet.</p>
<p>The main components of this pallet are:</p>
<ul>
<li>[<code>Pallet</code>], which implements all of the dispatchable extrinsics of the pallet, among
other public functions.
<ul>
<li>The subset of the functions that are dispatchable can be identified either in the
[<code>dispatchables</code>] module or in the [<code>Call</code>] enum.</li>
</ul>
</li>
<li>[<code>storage_types</code>], which contains the list of all types that are representing a
storage item. Otherwise, all storage items are listed among <a href="#types"><em>Type Definitions</em></a>.</li>
<li>[<code>Config</code>], which contains the configuration trait of this pallet.</li>
<li>[<code>Event</code>] and [<code>Error</code>], which are listed among the <a href="#enums"><em>Enums</em></a>.</li>
</ul>
</div></details><h2 id="modules" class="section-header">Modules<a href="#modules" class="anchor">§</a></h2><dl class="item-table"><dt><a class="mod" href="dispatchables/index.html" title="mod pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_for_origin::dispatchables">dispatchables</a></dt><dd>Auto-generated docs-only module listing all defined dispatchables for this pallet.</dd><dt><a class="mod" href="storage_types/index.html" title="mod pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_for_origin::storage_types">storage_<wbr>types</a></dt><dd>Auto-generated docs-only module listing all (public and private) defined storage types
for this pallet.</dd></dl><h2 id="structs" class="section-header">Structs<a href="#structs" class="anchor">§</a></h2><dl class="item-table"><dt><a class="struct" href="struct.Pallet.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_for_origin::Pallet">Pallet</a></dt><dd>The <code>Pallet</code> struct, the main type that implements traits and standalone
functions within the pallet.</dd></dl><h2 id="enums" class="section-header">Enums<a href="#enums" class="anchor">§</a></h2><dl class="item-table"><dt><a class="enum" href="enum.Call.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_for_origin::Call">Call</a></dt><dd>Contains a variant per dispatchable extrinsic that this pallet has.</dd></dl><h2 id="traits" class="section-header">Traits<a href="#traits" class="anchor">§</a></h2><dl class="item-table"><dt><a class="trait" href="trait.Config.html" title="trait pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_for_origin::Config">Config</a></dt><dd>Configuration trait of this pallet.</dd></dl><h2 id="types" class="section-header">Type Aliases<a href="#types" class="anchor">§</a></h2><dl class="item-table"><dt><a class="type" href="type.Module.html" title="type pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_for_origin::Module">Module</a><wbr><span class="stab deprecated" title="">Deprecated</span></dt><dd>Type alias to <code>Pallet</code>, to be used by <code>construct_runtime</code>.</dd></dl></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {"enum":["Call"],"mod":["dispatchables","storage_types"],"struct":["Pallet"],"trait":["Config"],"type":["Module"]};
@@ -0,0 +1,8 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Auto-generated docs-only module listing all (public and private) defined storage types for this pallet."><title>pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_for_origin::storage_types - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module storage_types</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module storage_<wbr>types</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#warning-doc-only" title="Warning: Doc-Only">Warning: Doc-Only</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin::<wbr>pallet_<wbr>for_<wbr>origin</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../../index.html">reference_docs</a>::<wbr><a href="../../index.html">frame_origin</a>::<wbr><a href="../index.html">pallet_for_origin</a></div><h1>Module <span>storage_<wbr>types</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#133">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Auto-generated docs-only module listing all (public and private) defined storage types
for this pallet.</p>
<h2 id="warning-doc-only"><a class="doc-anchor" href="#warning-doc-only">§</a>Warning: Doc-Only</h2>
<p>Members of this module cannot be used directly and are only provided for documentation
purposes.</p>
<p>To see the actual storage type, find a struct with the same name at the root of the
pallet, in the list of <a href="../index.html#types"><em>Type Definitions</em></a>.</p>
</div></details></section></div></main></body></html>
File diff suppressed because one or more lines are too long
@@ -0,0 +1,6 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Configuration trait of this pallet."><title>Config in pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_for_origin - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc trait"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Config</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Config</a></h2><h3><a href="#dyn-compatibility">Dyn Compatibility</a></h3><h3><a href="#implementors">Implementors</a></h3></section><div id="rustdoc-modnav"><h2><a href="index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin::<wbr>pallet_<wbr>for_<wbr>origin</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../index.html">reference_docs</a>::<wbr><a href="../index.html">frame_origin</a>::<wbr><a href="index.html">pallet_for_origin</a></div><h1>Trait <span class="trait">Config</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#138">Source</a> </span></div><pre class="rust item-decl"><code>pub trait Config: Config { }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Configuration trait of this pallet.</p>
<p>The main purpose of this trait is to act as an interface between this pallet and the runtime in
which it is embedded in. A type, function, or constant in this trait is essentially left to be
configured by the runtime that includes this pallet.</p>
<p>Consequently, a runtime that wants to include this pallet must implement this trait.</p>
</div></details><h2 id="dyn-compatibility" class="section-header">Dyn Compatibility<a href="#dyn-compatibility" class="anchor">§</a></h2><div class="dyn-compatibility-info"><p>This trait is <b>not</b> <a href="https://doc.rust-lang.org/1.91.1/reference/items/traits.html#dyn-compatibility">dyn compatible</a>.</p><p><i>In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.</i></p></div><h2 id="implementors" class="section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"></div><script src="../../../../trait.impl/pezkuwi_sdk_docs/reference_docs/frame_origin/pallet_for_origin/trait.Config.js" async></script></section></div></main></body></html>
@@ -0,0 +1,3 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Type alias to `Pallet`, to be used by `construct_runtime`."><title>Module in pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_for_origin - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc type"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module</a></h2><h3><a href="#aliased-type">Aliased Type</a></h3></section><div id="rustdoc-modnav"><h2><a href="index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin::<wbr>pallet_<wbr>for_<wbr>origin</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../index.html">reference_docs</a>::<wbr><a href="../index.html">frame_origin</a>::<wbr><a href="index.html">pallet_for_origin</a></div><h1>Type Alias <span class="type">Module</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#140">Source</a> </span></div><pre class="rust item-decl"><code>pub type Module&lt;T&gt; = <a class="struct" href="struct.Pallet.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_for_origin::Pallet">Pallet</a>&lt;T&gt;;</code></pre><span class="item-info"><div class="stab deprecated"><span class="emoji">👎</span><span>Deprecated: use <code>Pallet</code> instead</span></div></span><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Type alias to <code>Pallet</code>, to be used by <code>construct_runtime</code>.</p>
<p>Generated by <code>pallet</code> attribute macro.</p>
</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>pub struct Module&lt;T&gt;(<span class="comment">/* private fields */</span>);</code></pre><script src="../../../../type.impl/pezkuwi_sdk_docs/reference_docs/frame_origin/pallet_for_origin/struct.Pallet.js" data-self-path="pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_for_origin::Module" async></script></section></div></main></body></html>
@@ -0,0 +1,5 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Warning: Doc-Only"><title>only_validators in pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::dispatchables - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">only_validators</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">only_<wbr>validators</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#warning-doc-only" title="Warning: Doc-Only">Warning: Doc-Only</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin::<wbr>pallet_<wbr>with_<wbr>custom_<wbr>origin::<wbr>dispatchables</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../../index.html">reference_docs</a>::<wbr><a href="../../index.html">frame_origin</a>::<wbr><a href="../index.html">pallet_with_custom_origin</a>::<wbr><a href="index.html">dispatchables</a></div><h1>Function <span class="fn">only_<wbr>validators</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#153">Source</a> </span></div><pre class="rust item-decl"><code>pub fn only_validators&lt;T: <a class="trait" href="../trait.Config.html" title="trait pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::Config">Config</a>&gt;()</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><h2 id="warning-doc-only"><a class="doc-anchor" href="#warning-doc-only">§</a>Warning: Doc-Only</h2>
<p>This function is an automatically generated, and is doc-only, uncallable
stub. See the real version in
<a href="../struct.Pallet.html#method.only_validators" title="associated function pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::Pallet::only_validators"><code>Pallet::only_validators</code></a>.</p>
</div></details></section></div></main></body></html>
@@ -0,0 +1,6 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Auto-generated docs-only module listing all defined dispatchables for this pallet."><title>pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::dispatchables - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module dispatchables</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module dispatchables</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#warning-doc-only" title="Warning: Doc-Only">Warning: Doc-Only</a></li></ul><h3><a href="#functions">Module Items</a></h3><ul class="block"><li><a href="#functions" title="Functions">Functions</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin::<wbr>pallet_<wbr>with_<wbr>custom_<wbr>origin</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../../index.html">reference_docs</a>::<wbr><a href="../../index.html">frame_origin</a>::<wbr><a href="../index.html">pallet_with_custom_origin</a></div><h1>Module <span>dispatchables</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#153">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Auto-generated docs-only module listing all defined dispatchables for this pallet.</p>
<h2 id="warning-doc-only"><a class="doc-anchor" href="#warning-doc-only">§</a>Warning: Doc-Only</h2>
<p>Members of this module cannot be used directly and are only provided for documentation
purposes. To see the real version of each dispatchable, look for them in <a href="../struct.Pallet.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::Pallet"><code>Pallet</code></a> or
<a href="../enum.Call.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::Call"><code>Call</code></a>.</p>
</div></details><h2 id="functions" class="section-header">Functions<a href="#functions" class="anchor">§</a></h2><dl class="item-table"><dt><a class="fn" href="fn.only_validators.html" title="fn pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::dispatchables::only_validators">only_<wbr>validators</a></dt><dd>Warning: Doc-Only</dd></dl></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {"fn":["only_validators"]};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,19 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="The `pallet` module in each FRAME pallet hosts the most important items needed to construct this pallet."><title>pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module pallet_with_custom_origin</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module pallet_<wbr>with_<wbr>custom_<wbr>origin</a></h2><h3><a href="#modules">Module Items</a></h3><ul class="block"><li><a href="#modules" title="Modules">Modules</a></li><li><a href="#structs" title="Structs">Structs</a></li><li><a href="#enums" title="Enums">Enums</a></li><li><a href="#traits" title="Traits">Traits</a></li><li><a href="#types" title="Type Aliases">Type Aliases</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../index.html">reference_docs</a>::<wbr><a href="../index.html">frame_origin</a></div><h1>Module <span>pallet_<wbr>with_<wbr>custom_<wbr>origin</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#154">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>The <code>pallet</code> module in each FRAME pallet hosts the most important items needed
to construct this pallet.</p>
<p>The main components of this pallet are:</p>
<ul>
<li>[<code>Pallet</code>], which implements all of the dispatchable extrinsics of the pallet, among
other public functions.
<ul>
<li>The subset of the functions that are dispatchable can be identified either in the
[<code>dispatchables</code>] module or in the [<code>Call</code>] enum.</li>
</ul>
</li>
<li>[<code>storage_types</code>], which contains the list of all types that are representing a
storage item. Otherwise, all storage items are listed among <a href="#types"><em>Type Definitions</em></a>.</li>
<li>[<code>Config</code>], which contains the configuration trait of this pallet.</li>
<li>[<code>Event</code>] and [<code>Error</code>], which are listed among the <a href="#enums"><em>Enums</em></a>.</li>
</ul>
</div></details><h2 id="modules" class="section-header">Modules<a href="#modules" class="anchor">§</a></h2><dl class="item-table"><dt><a class="mod" href="dispatchables/index.html" title="mod pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::dispatchables">dispatchables</a></dt><dd>Auto-generated docs-only module listing all defined dispatchables for this pallet.</dd><dt><a class="mod" href="storage_types/index.html" title="mod pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::storage_types">storage_<wbr>types</a></dt><dd>Auto-generated docs-only module listing all (public and private) defined storage types
for this pallet.</dd></dl><h2 id="structs" class="section-header">Structs<a href="#structs" class="anchor">§</a></h2><dl class="item-table"><dt><a class="struct" href="struct.Pallet.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::Pallet">Pallet</a></dt><dd>The <code>Pallet</code> struct, the main type that implements traits and standalone
functions within the pallet.</dd></dl><h2 id="enums" class="section-header">Enums<a href="#enums" class="anchor">§</a></h2><dl class="item-table"><dt><a class="enum" href="enum.Call.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::Call">Call</a></dt><dd>Contains a variant per dispatchable extrinsic that this pallet has.</dd><dt><a class="enum" href="enum.Origin.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::Origin">Origin</a></dt><dd>A dummy custom origin.</dd></dl><h2 id="traits" class="section-header">Traits<a href="#traits" class="anchor">§</a></h2><dl class="item-table"><dt><a class="trait" href="trait.Config.html" title="trait pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::Config">Config</a></dt><dd>Configuration trait of this pallet.</dd></dl><h2 id="types" class="section-header">Type Aliases<a href="#types" class="anchor">§</a></h2><dl class="item-table"><dt><a class="type" href="type.Module.html" title="type pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::Module">Module</a><wbr><span class="stab deprecated" title="">Deprecated</span></dt><dd>Type alias to <code>Pallet</code>, to be used by <code>construct_runtime</code>.</dd></dl></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {"enum":["Call","Origin"],"mod":["dispatchables","storage_types"],"struct":["Pallet"],"trait":["Config"],"type":["Module"]};
@@ -0,0 +1,8 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Auto-generated docs-only module listing all (public and private) defined storage types for this pallet."><title>pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::storage_types - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module storage_types</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module storage_<wbr>types</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#warning-doc-only" title="Warning: Doc-Only">Warning: Doc-Only</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin::<wbr>pallet_<wbr>with_<wbr>custom_<wbr>origin</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../../index.html">reference_docs</a>::<wbr><a href="../../index.html">frame_origin</a>::<wbr><a href="../index.html">pallet_with_custom_origin</a></div><h1>Module <span>storage_<wbr>types</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#153">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Auto-generated docs-only module listing all (public and private) defined storage types
for this pallet.</p>
<h2 id="warning-doc-only"><a class="doc-anchor" href="#warning-doc-only">§</a>Warning: Doc-Only</h2>
<p>Members of this module cannot be used directly and are only provided for documentation
purposes.</p>
<p>To see the actual storage type, find a struct with the same name at the root of the
pallet, in the list of <a href="../index.html#types"><em>Type Definitions</em></a>.</p>
</div></details></section></div></main></body></html>
File diff suppressed because one or more lines are too long
@@ -0,0 +1,8 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Configuration trait of this pallet."><title>Config in pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc trait"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Config</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Config</a></h2><h3><a href="#required-associated-types">Required Associated Types</a></h3><ul class="block"><li><a href="#associatedtype.RuntimeOrigin" title="RuntimeOrigin">RuntimeOrigin</a></li></ul><h3><a href="#dyn-compatibility">Dyn Compatibility</a></h3><h3><a href="#implementors">Implementors</a></h3></section><div id="rustdoc-modnav"><h2><a href="index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin::<wbr>pallet_<wbr>with_<wbr>custom_<wbr>origin</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../index.html">reference_docs</a>::<wbr><a href="../index.html">frame_origin</a>::<wbr><a href="index.html">pallet_with_custom_origin</a></div><h1>Trait <span class="trait">Config</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#159-162">Source</a> </span></div><pre class="rust item-decl"><code>pub trait Config: Config {
type <a href="#associatedtype.RuntimeOrigin" class="associatedtype">RuntimeOrigin</a>: <a class="trait" href="https://doc.rust-lang.org/1.91.1/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;&lt;Self as Config&gt;::RuntimeOrigin&gt; + <a class="trait" href="https://doc.rust-lang.org/1.91.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="enum" href="https://doc.rust-lang.org/1.91.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="enum" href="enum.Origin.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::Origin">Origin</a>, &lt;Self as <a class="trait" href="trait.Config.html" title="trait pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::Config">Config</a>&gt;::<a class="associatedtype" href="trait.Config.html#associatedtype.RuntimeOrigin" title="type pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::Config::RuntimeOrigin">RuntimeOrigin</a>&gt;&gt;;
}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Configuration trait of this pallet.</p>
<p>The main purpose of this trait is to act as an interface between this pallet and the runtime in
which it is embedded in. A type, function, or constant in this trait is essentially left to be
configured by the runtime that includes this pallet.</p>
<p>Consequently, a runtime that wants to include this pallet must implement this trait.</p>
</div></details><h2 id="required-associated-types" class="section-header">Required Associated Types<a href="#required-associated-types" class="anchor">§</a></h2><div class="methods"><section id="associatedtype.RuntimeOrigin" class="method"><a class="src rightside" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#160-161">Source</a><h4 class="code-header">type <a href="#associatedtype.RuntimeOrigin" class="associatedtype">RuntimeOrigin</a>: <a class="trait" href="https://doc.rust-lang.org/1.91.1/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;&lt;Self as Config&gt;::RuntimeOrigin&gt; + <a class="trait" href="https://doc.rust-lang.org/1.91.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="enum" href="https://doc.rust-lang.org/1.91.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="enum" href="enum.Origin.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::Origin">Origin</a>, &lt;Self as <a class="trait" href="trait.Config.html" title="trait pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::Config">Config</a>&gt;::<a class="associatedtype" href="trait.Config.html#associatedtype.RuntimeOrigin" title="type pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::Config::RuntimeOrigin">RuntimeOrigin</a>&gt;&gt;</h4></section></div><h2 id="dyn-compatibility" class="section-header">Dyn Compatibility<a href="#dyn-compatibility" class="anchor">§</a></h2><div class="dyn-compatibility-info"><p>This trait is <b>not</b> <a href="https://doc.rust-lang.org/1.91.1/reference/items/traits.html#dyn-compatibility">dyn compatible</a>.</p><p><i>In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.</i></p></div><h2 id="implementors" class="section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"><details class="toggle implementors-toggle"><summary><section id="impl-Config-for-Runtime" class="impl"><a class="src rightside" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#223-225">Source</a><a href="#impl-Config-for-Runtime" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.Config.html" title="trait pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::Config">Config</a> for <a class="struct" href="../runtime_for_origin/struct.Runtime.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_origin::Runtime">Runtime</a></h3></section></summary><div class="impl-items"><section id="associatedtype.RuntimeOrigin-1" class="associatedtype trait-impl"><a class="src rightside" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#224">Source</a><a href="#associatedtype.RuntimeOrigin-1" class="anchor">§</a><h4 class="code-header">type <a href="#associatedtype.RuntimeOrigin" class="associatedtype">RuntimeOrigin</a> = <a class="struct" href="../runtime_for_origin/struct.RuntimeOrigin.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_origin::RuntimeOrigin">RuntimeOrigin</a></h4></section></div></details></div><script src="../../../../trait.impl/pezkuwi_sdk_docs/reference_docs/frame_origin/pallet_with_custom_origin/trait.Config.js" async></script></section></div></main></body></html>
@@ -0,0 +1,3 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Type alias to `Pallet`, to be used by `construct_runtime`."><title>Module in pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc type"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module</a></h2><h3><a href="#aliased-type">Aliased Type</a></h3></section><div id="rustdoc-modnav"><h2><a href="index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin::<wbr>pallet_<wbr>with_<wbr>custom_<wbr>origin</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../index.html">reference_docs</a>::<wbr><a href="../index.html">frame_origin</a>::<wbr><a href="index.html">pallet_with_custom_origin</a></div><h1>Type Alias <span class="type">Module</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#164">Source</a> </span></div><pre class="rust item-decl"><code>pub type Module&lt;T&gt; = <a class="struct" href="struct.Pallet.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::Pallet">Pallet</a>&lt;T&gt;;</code></pre><span class="item-info"><div class="stab deprecated"><span class="emoji">👎</span><span>Deprecated: use <code>Pallet</code> instead</span></div></span><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Type alias to <code>Pallet</code>, to be used by <code>construct_runtime</code>.</p>
<p>Generated by <code>pallet</code> attribute macro.</p>
</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>pub struct Module&lt;T&gt;(<span class="comment">/* private fields */</span>);</code></pre><script src="../../../../type.impl/pezkuwi_sdk_docs/reference_docs/frame_origin/pallet_with_custom_origin/struct.Pallet.js" data-self-path="pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_custom_origin::Module" async></script></section></div></main></body></html>
@@ -0,0 +1,5 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Warning: Doc-Only"><title>externally_checked_ext in pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin::dispatchables - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">externally_checked_ext</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">externally_<wbr>checked_<wbr>ext</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#warning-doc-only" title="Warning: Doc-Only">Warning: Doc-Only</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin::<wbr>pallet_<wbr>with_<wbr>external_<wbr>origin::<wbr>dispatchables</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../../index.html">reference_docs</a>::<wbr><a href="../../index.html">frame_origin</a>::<wbr><a href="../index.html">pallet_with_external_origin</a>::<wbr><a href="index.html">dispatchables</a></div><h1>Function <span class="fn">externally_<wbr>checked_<wbr>ext</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#228">Source</a> </span></div><pre class="rust item-decl"><code>pub fn externally_checked_ext&lt;T: <a class="trait" href="../trait.Config.html" title="trait pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin::Config">Config</a>&gt;()</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><h2 id="warning-doc-only"><a class="doc-anchor" href="#warning-doc-only">§</a>Warning: Doc-Only</h2>
<p>This function is an automatically generated, and is doc-only, uncallable
stub. See the real version in
<a href="../struct.Pallet.html#method.externally_checked_ext" title="associated function pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin::Pallet::externally_checked_ext"><code>Pallet::externally_checked_ext</code></a>.</p>
</div></details></section></div></main></body></html>
@@ -0,0 +1,6 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Auto-generated docs-only module listing all defined dispatchables for this pallet."><title>pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin::dispatchables - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module dispatchables</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module dispatchables</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#warning-doc-only" title="Warning: Doc-Only">Warning: Doc-Only</a></li></ul><h3><a href="#functions">Module Items</a></h3><ul class="block"><li><a href="#functions" title="Functions">Functions</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin::<wbr>pallet_<wbr>with_<wbr>external_<wbr>origin</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../../index.html">reference_docs</a>::<wbr><a href="../../index.html">frame_origin</a>::<wbr><a href="../index.html">pallet_with_external_origin</a></div><h1>Module <span>dispatchables</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#228">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Auto-generated docs-only module listing all defined dispatchables for this pallet.</p>
<h2 id="warning-doc-only"><a class="doc-anchor" href="#warning-doc-only">§</a>Warning: Doc-Only</h2>
<p>Members of this module cannot be used directly and are only provided for documentation
purposes. To see the real version of each dispatchable, look for them in <a href="../struct.Pallet.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin::Pallet"><code>Pallet</code></a> or
<a href="../enum.Call.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin::Call"><code>Call</code></a>.</p>
</div></details><h2 id="functions" class="section-header">Functions<a href="#functions" class="anchor">§</a></h2><dl class="item-table"><dt><a class="fn" href="fn.externally_checked_ext.html" title="fn pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin::dispatchables::externally_checked_ext">externally_<wbr>checked_<wbr>ext</a></dt><dd>Warning: Doc-Only</dd></dl></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {"fn":["externally_checked_ext"]};
File diff suppressed because one or more lines are too long
@@ -0,0 +1,19 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="The `pallet` module in each FRAME pallet hosts the most important items needed to construct this pallet."><title>pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module pallet_with_external_origin</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module pallet_<wbr>with_<wbr>external_<wbr>origin</a></h2><h3><a href="#modules">Module Items</a></h3><ul class="block"><li><a href="#modules" title="Modules">Modules</a></li><li><a href="#structs" title="Structs">Structs</a></li><li><a href="#enums" title="Enums">Enums</a></li><li><a href="#traits" title="Traits">Traits</a></li><li><a href="#types" title="Type Aliases">Type Aliases</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../index.html">reference_docs</a>::<wbr><a href="../index.html">frame_origin</a></div><h1>Module <span>pallet_<wbr>with_<wbr>external_<wbr>origin</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#229">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>The <code>pallet</code> module in each FRAME pallet hosts the most important items needed
to construct this pallet.</p>
<p>The main components of this pallet are:</p>
<ul>
<li>[<code>Pallet</code>], which implements all of the dispatchable extrinsics of the pallet, among
other public functions.
<ul>
<li>The subset of the functions that are dispatchable can be identified either in the
[<code>dispatchables</code>] module or in the [<code>Call</code>] enum.</li>
</ul>
</li>
<li>[<code>storage_types</code>], which contains the list of all types that are representing a
storage item. Otherwise, all storage items are listed among <a href="#types"><em>Type Definitions</em></a>.</li>
<li>[<code>Config</code>], which contains the configuration trait of this pallet.</li>
<li>[<code>Event</code>] and [<code>Error</code>], which are listed among the <a href="#enums"><em>Enums</em></a>.</li>
</ul>
</div></details><h2 id="modules" class="section-header">Modules<a href="#modules" class="anchor">§</a></h2><dl class="item-table"><dt><a class="mod" href="dispatchables/index.html" title="mod pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin::dispatchables">dispatchables</a></dt><dd>Auto-generated docs-only module listing all defined dispatchables for this pallet.</dd><dt><a class="mod" href="storage_types/index.html" title="mod pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin::storage_types">storage_<wbr>types</a></dt><dd>Auto-generated docs-only module listing all (public and private) defined storage types
for this pallet.</dd></dl><h2 id="structs" class="section-header">Structs<a href="#structs" class="anchor">§</a></h2><dl class="item-table"><dt><a class="struct" href="struct.Pallet.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin::Pallet">Pallet</a></dt><dd>The <code>Pallet</code> struct, the main type that implements traits and standalone
functions within the pallet.</dd></dl><h2 id="enums" class="section-header">Enums<a href="#enums" class="anchor">§</a></h2><dl class="item-table"><dt><a class="enum" href="enum.Call.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin::Call">Call</a></dt><dd>Contains a variant per dispatchable extrinsic that this pallet has.</dd></dl><h2 id="traits" class="section-header">Traits<a href="#traits" class="anchor">§</a></h2><dl class="item-table"><dt><a class="trait" href="trait.Config.html" title="trait pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin::Config">Config</a></dt><dd>Configuration trait of this pallet.</dd></dl><h2 id="types" class="section-header">Type Aliases<a href="#types" class="anchor">§</a></h2><dl class="item-table"><dt><a class="type" href="type.Module.html" title="type pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin::Module">Module</a><wbr><span class="stab deprecated" title="">Deprecated</span></dt><dd>Type alias to <code>Pallet</code>, to be used by <code>construct_runtime</code>.</dd></dl></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {"enum":["Call"],"mod":["dispatchables","storage_types"],"struct":["Pallet"],"trait":["Config"],"type":["Module"]};
@@ -0,0 +1,8 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Auto-generated docs-only module listing all (public and private) defined storage types for this pallet."><title>pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin::storage_types - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module storage_types</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module storage_<wbr>types</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#warning-doc-only" title="Warning: Doc-Only">Warning: Doc-Only</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin::<wbr>pallet_<wbr>with_<wbr>external_<wbr>origin</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../../index.html">reference_docs</a>::<wbr><a href="../../index.html">frame_origin</a>::<wbr><a href="../index.html">pallet_with_external_origin</a></div><h1>Module <span>storage_<wbr>types</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#228">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Auto-generated docs-only module listing all (public and private) defined storage types
for this pallet.</p>
<h2 id="warning-doc-only"><a class="doc-anchor" href="#warning-doc-only">§</a>Warning: Doc-Only</h2>
<p>Members of this module cannot be used directly and are only provided for documentation
purposes.</p>
<p>To see the actual storage type, find a struct with the same name at the root of the
pallet, in the list of <a href="../index.html#types"><em>Type Definitions</em></a>.</p>
</div></details></section></div></main></body></html>
@@ -0,0 +1,8 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Configuration trait of this pallet."><title>Config in pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc trait"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Config</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Config</a></h2><h3><a href="#required-associated-types">Required Associated Types</a></h3><ul class="block"><li><a href="#associatedtype.ExternalOrigin" title="ExternalOrigin">ExternalOrigin</a></li></ul><h3><a href="#dyn-compatibility">Dyn Compatibility</a></h3><h3><a href="#implementors">Implementors</a></h3></section><div id="rustdoc-modnav"><h2><a href="index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin::<wbr>pallet_<wbr>with_<wbr>external_<wbr>origin</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../index.html">reference_docs</a>::<wbr><a href="../index.html">frame_origin</a>::<wbr><a href="index.html">pallet_with_external_origin</a></div><h1>Trait <span class="trait">Config</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#233-235">Source</a> </span></div><pre class="rust item-decl"><code>pub trait Config: Config {
type <a href="#associatedtype.ExternalOrigin" class="associatedtype">ExternalOrigin</a>: EnsureOrigin&lt;Self::RuntimeOrigin&gt;;
}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Configuration trait of this pallet.</p>
<p>The main purpose of this trait is to act as an interface between this pallet and the runtime in
which it is embedded in. A type, function, or constant in this trait is essentially left to be
configured by the runtime that includes this pallet.</p>
<p>Consequently, a runtime that wants to include this pallet must implement this trait.</p>
</div></details><h2 id="required-associated-types" class="section-header">Required Associated Types<a href="#required-associated-types" class="anchor">§</a></h2><div class="methods"><section id="associatedtype.ExternalOrigin" class="method"><a class="src rightside" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#234">Source</a><h4 class="code-header">type <a href="#associatedtype.ExternalOrigin" class="associatedtype">ExternalOrigin</a>: EnsureOrigin&lt;Self::RuntimeOrigin&gt;</h4></section></div><h2 id="dyn-compatibility" class="section-header">Dyn Compatibility<a href="#dyn-compatibility" class="anchor">§</a></h2><div class="dyn-compatibility-info"><p>This trait is <b>not</b> <a href="https://doc.rust-lang.org/1.91.1/reference/items/traits.html#dyn-compatibility">dyn compatible</a>.</p><p><i>In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.</i></p></div><h2 id="implementors" class="section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"><details class="toggle implementors-toggle"><summary><section id="impl-Config-for-Runtime" class="impl"><a class="src rightside" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#267-269">Source</a><a href="#impl-Config-for-Runtime" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.Config.html" title="trait pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin::Config">Config</a> for <a class="struct" href="../runtime_for_external_origin/struct.Runtime.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::Runtime">Runtime</a></h3></section></summary><div class="impl-items"><section id="associatedtype.ExternalOrigin-1" class="associatedtype trait-impl"><a class="src rightside" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#268">Source</a><a href="#associatedtype.ExternalOrigin-1" class="anchor">§</a><h4 class="code-header">type <a href="#associatedtype.ExternalOrigin" class="associatedtype">ExternalOrigin</a> = EnsureSigned&lt;&lt;<a class="struct" href="../runtime_for_external_origin/struct.Runtime.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::Runtime">Runtime</a> as Config&gt;::AccountId&gt;</h4></section></div></details></div><script src="../../../../trait.impl/pezkuwi_sdk_docs/reference_docs/frame_origin/pallet_with_external_origin/trait.Config.js" async></script></section></div></main></body></html>
@@ -0,0 +1,3 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Type alias to `Pallet`, to be used by `construct_runtime`."><title>Module in pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc type"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module</a></h2><h3><a href="#aliased-type">Aliased Type</a></h3></section><div id="rustdoc-modnav"><h2><a href="index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin::<wbr>pallet_<wbr>with_<wbr>external_<wbr>origin</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../index.html">reference_docs</a>::<wbr><a href="../index.html">frame_origin</a>::<wbr><a href="index.html">pallet_with_external_origin</a></div><h1>Type Alias <span class="type">Module</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#237">Source</a> </span></div><pre class="rust item-decl"><code>pub type Module&lt;T&gt; = <a class="struct" href="struct.Pallet.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin::Pallet">Pallet</a>&lt;T&gt;;</code></pre><span class="item-info"><div class="stab deprecated"><span class="emoji">👎</span><span>Deprecated: use <code>Pallet</code> instead</span></div></span><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Type alias to <code>Pallet</code>, to be used by <code>construct_runtime</code>.</p>
<p>Generated by <code>pallet</code> attribute macro.</p>
</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>pub struct Module&lt;T&gt;(<span class="comment">/* private fields */</span>);</code></pre><script src="../../../../type.impl/pezkuwi_sdk_docs/reference_docs/frame_origin/pallet_with_external_origin/struct.Pallet.js" data-self-path="pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin::Module" async></script></section></div></main></body></html>
@@ -0,0 +1,3 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `runtime_for_external_origin` mod in crate `pezkuwi_sdk_docs`."><title>pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../static.files/storage-e2aeef58.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module runtime_for_external_origin</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module runtime_<wbr>for_<wbr>external_<wbr>origin</a></h2><h3><a href="#structs">Module Items</a></h3><ul class="block"><li><a href="#structs" title="Structs">Structs</a></li><li><a href="#enums" title="Enums">Enums</a></li><li><a href="#types" title="Type Aliases">Type Aliases</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../index.html">reference_docs</a>::<wbr><a href="../index.html">frame_origin</a></div><h1>Module <span>runtime_<wbr>for_<wbr>external_<wbr>origin</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#250">Source</a> </span></div><h2 id="structs" class="section-header">Structs<a href="#structs" class="anchor">§</a></h2><dl class="item-table"><dt><a class="struct" href="struct.PalletInfo.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::PalletInfo">Pallet<wbr>Info</a></dt><dd>Provides an implementation of <code>PalletInfo</code> to provide information
about the pallet setup in the runtime.</dd><dt><a class="struct" href="struct.Runtime.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::Runtime">Runtime</a></dt><dt><a class="struct" href="struct.RuntimeGenesisConfig.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::RuntimeGenesisConfig">Runtime<wbr>Genesis<wbr>Config</a></dt><dt><a class="struct" href="struct.RuntimeOrigin.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::RuntimeOrigin">Runtime<wbr>Origin</a></dt><dd>The runtime origin type representing the origin of a call.</dd></dl><h2 id="enums" class="section-header">Enums<a href="#enums" class="anchor">§</a></h2><dl class="item-table"><dt><a class="enum" href="enum.OriginCaller.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::OriginCaller">Origin<wbr>Caller</a></dt><dt><a class="enum" href="enum.RuntimeCall.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::RuntimeCall">Runtime<wbr>Call</a></dt><dd>The aggregated runtime call type.</dd><dt><a class="enum" href="enum.RuntimeError.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::RuntimeError">Runtime<wbr>Error</a></dt><dt><a class="enum" href="enum.RuntimeEvent.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::RuntimeEvent">Runtime<wbr>Event</a></dt><dt><a class="enum" href="enum.RuntimeFreezeReason.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::RuntimeFreezeReason">Runtime<wbr>Freeze<wbr>Reason</a></dt><dd>A reason for placing a freeze on funds.</dd><dt><a class="enum" href="enum.RuntimeHoldReason.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::RuntimeHoldReason">Runtime<wbr>Hold<wbr>Reason</a></dt><dd>A reason for placing a hold on funds.</dd><dt><a class="enum" href="enum.RuntimeLockId.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::RuntimeLockId">Runtime<wbr>Lock<wbr>Id</a></dt><dd>An identifier for each lock placed on funds.</dd><dt><a class="enum" href="enum.RuntimeSlashReason.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::RuntimeSlashReason">Runtime<wbr>Slash<wbr>Reason</a></dt><dd>A reason for slashing funds.</dd><dt><a class="enum" href="enum.RuntimeTask.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::RuntimeTask">Runtime<wbr>Task</a></dt><dd>An aggregation of all <code>Task</code> enums across all pallets included in the current runtime.</dd><dt><a class="enum" href="enum.RuntimeViewFunction.html" title="enum pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::RuntimeViewFunction">Runtime<wbr>View<wbr>Function</a></dt><dd>Runtime query type.</dd></dl><h2 id="types" class="section-header">Type Aliases<a href="#types" class="anchor">§</a></h2><dl class="item-table"><dt><a class="type" href="type.AllPalletsWithSystem.html" title="type pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::AllPalletsWithSystem">AllPallets<wbr>With<wbr>System</a></dt><dd>All pallets included in the runtime as a nested tuple of types.</dd><dt><a class="type" href="type.AllPalletsWithoutSystem.html" title="type pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::AllPalletsWithoutSystem">AllPallets<wbr>Without<wbr>System</a></dt><dd>All pallets included in the runtime as a nested tuple of types.
Excludes the System pallet.</dd><dt><a class="type" href="type.PalletWithExternalOrigin.html" title="type pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::PalletWithExternalOrigin">Pallet<wbr>With<wbr>External<wbr>Origin</a></dt><dt><a class="type" href="type.System.html" title="type pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::System">System</a></dt><dt><a class="type" href="type.SystemConfig.html" title="type pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::SystemConfig">System<wbr>Config</a></dt></dl></section></div></main></body></html>
@@ -0,0 +1 @@
window.SIDEBAR_ITEMS = {"enum":["OriginCaller","RuntimeCall","RuntimeError","RuntimeEvent","RuntimeFreezeReason","RuntimeHoldReason","RuntimeLockId","RuntimeSlashReason","RuntimeTask","RuntimeViewFunction"],"struct":["PalletInfo","Runtime","RuntimeGenesisConfig","RuntimeOrigin"],"type":["AllPalletsWithSystem","AllPalletsWithoutSystem","PalletWithExternalOrigin","System","SystemConfig"]};
@@ -0,0 +1,2 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="All pallets included in the runtime as a nested tuple of types."><title>AllPalletsWithSystem in pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc type"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">AllPalletsWithSystem</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><div id="rustdoc-modnav"><h2><a href="index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin::<wbr>runtime_<wbr>for_<wbr>external_<wbr>origin</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../index.html">reference_docs</a>::<wbr><a href="../index.html">frame_origin</a>::<wbr><a href="index.html">runtime_for_external_origin</a></div><h1>Type Alias <span class="type">AllPallets<wbr>With<wbr>System</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#254-259">Source</a> </span></div><pre class="rust item-decl"><code>pub type AllPalletsWithSystem = (<a class="type" href="type.System.html" title="type pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::System">System</a>, <a class="type" href="type.PalletWithExternalOrigin.html" title="type pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::PalletWithExternalOrigin">PalletWithExternalOrigin</a>);</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>All pallets included in the runtime as a nested tuple of types.</p>
</div></details></section></div></main></body></html>
@@ -0,0 +1,3 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="All pallets included in the runtime as a nested tuple of types. Excludes the System pallet."><title>AllPalletsWithoutSystem in pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc type"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">AllPalletsWithoutSystem</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><div id="rustdoc-modnav"><h2><a href="index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin::<wbr>runtime_<wbr>for_<wbr>external_<wbr>origin</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../index.html">reference_docs</a>::<wbr><a href="../index.html">frame_origin</a>::<wbr><a href="index.html">runtime_for_external_origin</a></div><h1>Type Alias <span class="type">AllPallets<wbr>Without<wbr>System</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#254-259">Source</a> </span></div><pre class="rust item-decl"><code>pub type AllPalletsWithoutSystem = (<a class="type" href="type.PalletWithExternalOrigin.html" title="type pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::PalletWithExternalOrigin">PalletWithExternalOrigin</a>,);</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>All pallets included in the runtime as a nested tuple of types.
Excludes the System pallet.</p>
</div></details></section></div></main></body></html>
@@ -0,0 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `PalletWithExternalOrigin` type in crate `pezkuwi_sdk_docs`."><title>PalletWithExternalOrigin in pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="pezkuwi_sdk_docs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.91.1 (ed61e7d7e 2025-11-07)" data-channel="1.91.1" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-c3e638e9.js" data-settings-js="settings-c38705f0.js" ><script src="../../../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../../static.files/main-6dc2a7f3.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-263c88ec.css"></noscript><link rel="icon" href="https://pezkuwichain.io/favicon.ico"></head><body class="rustdoc type"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">PalletWithExternalOrigin</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../pezkuwi_sdk_docs/index.html">pezkuwi_<wbr>sdk_<wbr>docs</a><span class="version">0.0.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Pallet<wbr>With<wbr>External<wbr>Origin</a></h2><h3><a href="#aliased-type">Aliased Type</a></h3></section><div id="rustdoc-modnav"><h2><a href="index.html">In pezkuwi_<wbr>sdk_<wbr>docs::<wbr>reference_<wbr>docs::<wbr>frame_<wbr>origin::<wbr>runtime_<wbr>for_<wbr>external_<wbr>origin</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">pezkuwi_sdk_docs</a>::<wbr><a href="../../index.html">reference_docs</a>::<wbr><a href="../index.html">frame_origin</a>::<wbr><a href="index.html">runtime_for_external_origin</a></div><h1>Type Alias <span class="type">Pallet<wbr>With<wbr>External<wbr>Origin</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/pezkuwi_sdk_docs/reference_docs/frame_origin.rs.html#254-259">Source</a> </span></div><pre class="rust item-decl"><code>pub type PalletWithExternalOrigin = <a class="struct" href="../pallet_with_external_origin/struct.Pallet.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_origin::pallet_with_external_origin::Pallet">Pallet</a>&lt;<a class="struct" href="struct.Runtime.html" title="struct pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::Runtime">Runtime</a>&gt;;</code></pre><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>pub struct PalletWithExternalOrigin(<span class="comment">/* private fields */</span>);</code></pre><script src="../../../../type.impl/pezkuwi_sdk_docs/reference_docs/frame_origin/pallet_with_external_origin/struct.Pallet.js" data-self-path="pezkuwi_sdk_docs::reference_docs::frame_origin::runtime_for_external_origin::PalletWithExternalOrigin" async></script></section></div></main></body></html>

Some files were not shown because too many files have changed in this diff Show More