Skip to content

[Add] - runtime upgrade tutorial #760

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Jul 8, 2025
Merged
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<div id="termynal" data-termynal>
<span data-ty="input"><span class="file-path"></span>ls -la target/release/wbuild/parachain-template-runtime/</span>
<br />
<span data-ty>parachain_template_runtime.wasm</span>
<span data-ty>parachain_template_runtime.compact.wasm</span>
<span data-ty>parachain_template_runtime.compact.compressed.wasm</span>
</div>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
687 changes: 328 additions & 359 deletions llms.txt

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion tutorials/polkadot-sdk/parachains/zero-to-hero/.pages
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ nav:
- 'Set Up a Template': set-up-a-template.md
- 'Build a Custom Pallet': build-custom-pallet.md
- 'Pallet Unit Testing': pallet-unit-testing.md
- 'Pallet Benchmarking': pallet-benchmarking.md
- 'Add Pallets to the Runtime': add-pallets-to-runtime.md
- 'Pallet Benchmarking': pallet-benchmarking.md
- 'Runtime Upgrade': runtime-upgrade.md
- 'Deploy to Paseo TestNet': deploy-to-testnet.md
- 'Obtain Coretime': obtain-coretime.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,20 +51,23 @@ Configure the pallets by implementing their `Config` trait and update the runtim

```rust title="mod.rs" hl_lines="7-25"
...
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/runtime/src/configs/mod.rs:315'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/runtime/src/configs/mod.rs:315:336'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/runtime/src/configs/mod.rs:338:338'
```

3. Locate the `#[frame_support::runtime]` macro in the `runtime/src/lib.rs` file and add the pallets:

```rust hl_lines="5-9" title="lib.rs"
```rust hl_lines="8-12" title="lib.rs"
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/runtime/src/lib.rs:253:255'
...
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/runtime/src/lib.rs:314:319'
...
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/runtime/src/lib.rs:265:266'

--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/runtime/src/lib.rs:313:318'
```

## Recompile the Runtime

After adding and configuring your pallets in the runtime, the next step is to ensure everything is set up correctly. To do this, recompile the runtime using the following command:
After adding and configuring your pallets in the runtime, the next step is to ensure everything is set up correctly. To do this, recompile the runtime with the following command (make sure you're in the project's root directory):

```bash
cargo build --release
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,8 @@ You now have the bare minimum of package dependencies that your pallet requires
```rust title="lib.rs"
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:20:23'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:36:46'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:56:56'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:217:217'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:55:55'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:216:216'
```

3. Verify that it compiles by running the following command:
Expand All @@ -117,8 +117,8 @@ In this step, you will configure two essential components that are critical for
Add the following `Config` trait definition to your pallet:

```rust title="lib.rs"
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:44:52'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:56:56'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:44:51'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:55:55'
```

### Add Events
Expand All @@ -144,7 +144,7 @@ Below are the events defined for this pallet:
Define the events in the pallet as follows:

```rust title="lib.rs"
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:58:84'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:57:84'
```

### Add Storage Items
Expand All @@ -170,7 +170,7 @@ To add custom errors, use the `#[pallet::error]` macro to define the `Error` enu
Add the following errors to the pallet:

```rust title="lib.rs"
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:94:104'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:93:104'
```

### Implement Calls
Expand All @@ -180,19 +180,19 @@ The `#[pallet::call]` macro defines the dispatchable functions (or calls) the pa
The structure of the dispatchable calls in this pallet is as follows:

```rust title="lib.rs"
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:106:115'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:105:114'
#[pallet::weight(0)]
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:117:117'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:132:132'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:116:116'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:131:131'

--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:134:141'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:133:140'
#[pallet::weight(0)]
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:143:143'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:176:176'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:142:142'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:175:175'

--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:178:185'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:177:184'
#[pallet::weight(0)]
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:187:187'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:186:186'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:215:215'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:216:216'
```
Expand All @@ -211,9 +211,9 @@ Expand the following items to view the implementations of each dispatchable call
- Emits a `CounterValueSet` event on success

```rust title="lib.rs"
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:108:115'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:107:114'
#[pallet::weight(0)]
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:117:132'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:116:131'
```

???- code "increment(origin: OriginFor<T>, amount_to_increment: u32) -> DispatchResult"
Expand All @@ -230,9 +230,9 @@ Expand the following items to view the implementations of each dispatchable call
- Emits a `CounterIncremented` event on success

```rust title="lib.rs"
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:134:141'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:133:140'
#[pallet::weight(0)]
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:143:176'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:142:175'
```

???- code "decrement(origin: OriginFor<T>, amount_to_decrement: u32) -> DispatchResult"
Expand All @@ -249,9 +249,9 @@ Expand the following items to view the implementations of each dispatchable call
- Emits a `CounterDecremented` event on success

```rust title="lib.rs"
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:178:185'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:177:184'
#[pallet::weight(0)]
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:187:215'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:186:214'
```

## Verify Compilation
Expand All @@ -274,14 +274,14 @@ Expand the following item to review this implementation and the complete pallet

```rust title="lib.rs"
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:20:23'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:36:52'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:56:115'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:36:51'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:55:114'
#[pallet::weight(0)]
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:117:141'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:116:140'
#[pallet::weight(0)]
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:143:185'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:142:184'
#[pallet::weight(0)]
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:187'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:186'
```

## Where to Go Next
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ Follow these steps to prepare your environment for pallet benchmarking:
1. Install the [`frame-omni-bencher`](https://crates.io/crates/frame-omni-bencher){target=\_blank} command-line tool:

```bash
cargo install frame-omni-bencher
cargo install frame-omni-bencher@0.10.0
```

2. Update your pallet's `Cargo.toml` file in the `pallets/custom-pallet` directory by adding the `runtime-benchmarks` feature flag:
Expand Down Expand Up @@ -142,13 +142,13 @@ First, add the necessary module imports to your pallet. These imports make the w

Next, update your pallet's `Config` trait to include weight information. Define the `WeightInfo` type:

```rust hl_lines="10-11" title="lib.rs"
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:45:57'
```rust hl_lines="9-10" title="lib.rs"
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:45:55'
```

Now you can assign weights to your extrinsics. Here's how to add weight calculations to the `set_counter_value` function:

```rust hl_lines="2" title="lib.rs"
```rust hl_lines="1" title="lib.rs"
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:115:132'
```

Expand All @@ -172,12 +172,12 @@ Your pallet is now complete with full testing and benchmarking support, ready fo

<div class="grid cards" markdown>

- <span class="badge tutorial">Tutorial</span> __Deploy on Paseo TestNet__
- <span class="badge tutorial">Tutorial</span> __Runtime Upgrade__

---

Deploy your Polkadot SDK blockchain on Paseo! Follow this step-by-step guide for a seamless journey to a successful TestNet deployment.
Learn how to safely perform runtime upgrades for your Polkadot SDK-based blockchain, including step-by-step instructions for preparing, submitting, and verifying upgrades.

[:octicons-arrow-right-24: Get Started](/tutorials/polkadot-sdk/parachains/zero-to-hero/deploy-to-testnet/)
[:octicons-arrow-right-24: Get Started](/tutorials/polkadot-sdk/parachains/zero-to-hero/runtime-upgrade/)

</div>
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ Explanation of the additions:

Expand the following item to see the complete `mock.rs` implementation for the mock runtime.

???-code "mock.rs"
??? code "mock.rs"

```rust title="mock.rs"
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/mock.rs:20:62'
Expand All @@ -82,16 +82,16 @@ Unit testing a pallet involves creating a comprehensive test suite that validate

Expand the following item to see the pallet calls to be tested.

???-code "Custom pallet calls"
??? code "Custom pallet calls"

```rust
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:106:115'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:105:114'
#[pallet::weight(0)]
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:117:141'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:116:140'
#[pallet::weight(0)]
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:143:185'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:142:184'
#[pallet::weight(0)]
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:187:216'
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/lib.rs:186:216'
```

The following sub-sections outline various scenarios in which the `custom-pallet` can be tested. Feel free to add these snippets to your `tests.rs` while you read the examples.
Expand Down Expand Up @@ -140,7 +140,7 @@ Test that pallet operations modify the internal state correctly and maintain exp

Expand the following item to see the complete `tests.rs` implementation for the custom pallet.

???-code "tests.rs"
??? code "tests.rs"

```rust title="tests.rs"
--8<-- 'code/tutorials/polkadot-sdk/parachains/zero-to-hero/pallets/custom-pallet/src/tests.rs:20'
Expand Down
Loading