Runtime upgrade testing

Test, Diff and
Ship your PortaldotRuntime

Test, Diff and Ship your PortaldotRuntime

Same workflows before and after an upgrade, every difference classified, one command to reproduce.

Diagnose the endpoint
DNS to runtime, layer by
layer, on mainnet and V3.
Live surfaces

Every check, running
against live Portaldot nodes

Live surfacesLive surfaces
Live surfaces
Browser dashboard
Also available: Browser dashboard: the same engine in WebAssembly, nothing to install
Features

The runtime upgrade stack

Portal Canary checks a Portaldot runtime upgrade end to end, before it ever reaches the chain.

box
Speaks the chain you actually run

Mainnet serves metadata V13, which modern subxt cannot decode. Canary speaks raw JSON-RPC
and SCALE, and decodes V13 and V14 alike.

Code analysis
App magnified
Catch hazards before setCode

Canary diffs every pallet's calls, events, storage,
constants and errors, then flags the changes that
would halt block production on a running chain.

Mainnet
Dev node
V3
Check
Checking...
0 out of 3 checks have passed
Check
Waiting to dispatch workflows...
Check
Waiting for the setCode upgrade...
Check
Waiting to read pinned state...
Catch regressions before users do

Run the same workflows before and after an upgrade.
Freshly funded accounts, state read at pinned blocks,
every expectation evaluated on both sides.

Portaldot5
Portal Canary surface
Submit an extrinsic...
App 1App 2App 3App 4App 5
Upgrades with a liveness check

An upgrade only counts once the new runtime
has produced three more blocks. A spec bump
alone is not proof that an upgrade worked.

Portal Canary
Review a candidate runtime against its baseline.
Compare spec 1003
Apply upgrade
Endpoint doctor
Portaldot
Spec version
1004
Metadata
V13
WASM sha256
b34a069
Run date
16.10.2026
·
07:43:35
Runtime 1004 applied by setCode
Blocks kept coming under the new runtime
spec_version is greater than the baseline (1003)
Scroll to explore a recorded run
Attestation made easy

canary attest writes a finding hash to the dev chain with system.remark, and canary verify checks it later, so a result can be confirmed without trusting whoever reported it.

Added
Removed
Changed
Measure the blast radius

See how many calls, events, storage items, constants and errors moved between two runtimes, pallet by pallet.

localhost/dashboard
No install. Sorted!

The compare engine is compiled to WebAssembly, about 300 KB. Your browser opens a WebSocket to each node and diffs them locally, with no server involved.

Supply. Conserved!

Sum every account's free and reserved balance at one finalized block and compare it with total issuance. Mainnet: delta +0 planck.

GitHub Action.Run Canary as a gate on every runtime PR
Exit codes.Maps
“REGRESSION exit 1” so CI fails loudly.
Contract workflows.Deploys WASM contracts
against pallet-contracts v3.
Reproducible.canary reproduce returns the identical finding hash
Reports.JSON and HTML reports
for every recorded run.
Never cries wolf.Fee drift is normalised within 1 ppm and still reported.
Get started

Know what your
Portaldotupgrade breaks

Canary runs your workflows on a baseline and a candidate runtime, classifies every difference and gives you one command to reproduce it. You write the upgrade. Canary checks it.

Checks

Choose a check
that fits your upgrade

Every check is free and Apache-2.0.

Doctor

For one endpoint,
checked layer by layer.

5
/ layers
Doctor checks:
Layer by layer, from DNS to runtime APIs
… runtime APIs mapped
Repeatable --ws and --eth flags
Substrate and EVM JSON-RPC
Metadata version and sha256
Genesis and best-block fingerprint
EVM, contracts, finality capabilities
Pre-V14 metadata warning
JSON output with --json
Exit 2 if any endpoint is unhealthy
Compare

For two runtimes,
diffed pallet by pallet.

…
/ changes
Compare checks:
Calls, events, storage, constants and errors
… changes, mainnet vs V3
Spec and transaction versions
Runtime API changes
Pallet index moves
BABE slot and epoch hazards
Unbumped spec_version warning
Built-in V13 decoder
Runs in the browser as WASM
Exit 1 on any hazard
Test

For workflows,
run on both sides.

4
/ verdicts
Test checks:
REGRESSION, DIFFERENCE, INCONCLUSIVE, PASS
5 workflows in the corpus
Per-run namespaced accounts
State pinned to block hashes
Rule-based severity
canary reproduce, stable hash
Upgrade

Real setCode upgrades on a dev chain.

Upgrade checks:
sudo.setCode with candidate WASM
3 blocks liveness check
Candidates built from source
Halted-chain detection
Pinned 2021 toolchain
Attestation via system.remark
One-command demo scripts
F.A.Q

Questions & answers

More questions? Read the
README
or

Want something simpler?

Try it in the browser instead. ↓

No install

Diff two live runtimes in your browser with the

Browser dashboard

Pick a baseline and a candidate endpoint and see every pallet change and upgrade hazard, computed by the same Rust engine as the CLI. Nothing to install.

  • Same engine as the CLI
  • Doctor for any endpoint
  • Recorded runs and reports
  • Mainnet · V3 · Dev
Portal Canary dashboard