Skip to main content

Polymesh Chain Changelog - v7.4 to v8.0

This is the entry point for the Polymesh v7.4 → v8.0 runtime changelog. v8.0 is a major release: spec_version moves from 7_004_001 to 8_000_000 and transaction_version moves from 7 to 8. A transaction-version bump means clients must not assume any pre-v8 extrinsic encoding, call index, or event shape still holds — every integration that talks to the chain directly (not through the SDK) needs to re-verify its assumptions against this changelog before upgrading.

Who this is for

Key themes

Balances pallet replaced with the upstream standard

Polymesh's custom Balances pallet (pallets/balances) is removed. Chain v8 uses the standard Polkadot SDK pallet-balances, extended with a Memo type to preserve memo-tagged transfers. Call indices, event shapes, and the system.account storage layout all changed. See Balances & Transfers for detail.

Staking pallet replaced with the upstream standard; permissioning split into a new Validators pallet

Polymesh's custom Staking pallet (pallets/staking) is also removed. Chain v8 uses the standard upstream pallet-staking, and the Polymesh-specific permissioned-validator governance (add_permissioned_validator, commission caps, slashing-allowed switches) moves to a new standalone pallet, Validators (pallet_validators, runtime index 16), alongside Staking (index 17). See Staking & Validators for detail.

Accounts can hold Polymesh assets directly

From v7.4, accounts could already hold assets directly. This was done as a non breaking change by extending the PortfolioKind type. A PortfolioKind::AccountId variant bolted onto the existing portfolio-kind type. That still went through PortfolioId, which always carries a did: IdentityId field — so a linked identity was still required alongside the account key, not a DID-free wallet-only model. Chain v8 replaces this with a proper, first-class AssetHolder/AssetHolderKind abstraction, used consistently across the Asset, Nft, and Settlement pallets — issuance, redemption, controller transfers, and settlement legs/affirmations can now all target an account directly, not only a portfolio. Accounts still need be linked to a DID on chain to hold assets — see Native Asset Holdings (Asset/Nft/Portfolio) and Settlement & Instructions (legs, affirmations, receipts).

pallet-revive added (PolkaVM contracts, with EVM compatibility)

Chain v8 adds pallet-revive to the mainnet runtime as its only smart contract pallet. Contracts run on PolkaVM; EVM compatibility (Solidity, standard Ethereum JSON-RPC tooling via a new eth-rpc proxy) is one supported interface into it, not its entire purpose. The legacy Wasm/ink! contracts pallet (pallet-contracts) has been completely removed — it is not part of the v8 runtime, and this isn't a breaking removal in practice since no contracts were deployed on Mainnet in the first place. See Smart Contracts for detail.

CDD service providers renamed to DID registrars; child identities removed

CddServiceProviders is renamed DidRegistrars, Identity gains permissionless (self_register_did) and registrar-gated (register_did) ways to obtain a DID without a CDD claim, and child-identity calls/events/storage are removed entirely. The CDD-attesting registration flow (cdd_register_did) is not removed — it remains for identities that need a CDD claim attached. See Identity & Onboarding for the pallet-level detail, and the core-concepts Identity Onboarding doc for the conceptual model.

Subsidies get a dedicated approve/accept/revoke flow

The Relayer pallet's subsidy grant/accept handshake no longer goes through the generic Identity authorization system. approve_subsidy (renamed from set_paying_key) now writes directly to a PendingSubsidies storage, and the user calls the new accept_subsidy to accept it — no authorization ID involved. relay_tx also moves from Utility to Relayer, keeping its nonce-based replay protection but gaining a new expires_at check on top, and moving the nonce from a caller-supplied argument to server-tracked state. See Relayer & Subsidies for detail.

Confidential Assets pallet added (not on Mainnet)

A new ConfidentialAssets pallet (Polymesh Confidential Assets / "PCA") lands in v8, implementing privacy-preserving, ZK-proof-based transfers with auditor/mediator compliance controls. It is pre-release, pending a comprehensive code audit, and is not included in the Mainnet runtime — it's available on Testnet and Develop only. See Confidential Assets for the chain-level reference, and the Confidential Assets docs for the concepts and workflows.

Framework-level and Miscellaneous other changes

  • Runtime pallet composition moved from the legacy construct_runtime! macro to the newer #[frame_support::runtime] attribute syntax — functionally equivalent, but worth knowing if you generate tooling from the runtime source directly.
  • RandomnessCollectiveFlip and Bridge (already unused) pallets removed.
  • New pallets: Validators (16), PolymeshTransactionPayment (51), Beefy (52), Mmr (53), MmrLeaf (54), plus MultiBlockMigrations infrastructure.
  • CddServiceProviders pallet renamed to DidRegistrars.
  • Transaction fee handling splits across the standard TransactionPayment and the slimmed-down PolymeshTransactionPayment; Sudo moves to the upstream standard and gains remove_key; System gains authorized two-step runtime upgrades; Scheduler gains retry management. See Other Runtime Changes for detail.

Migration checklist

  1. Regenerate any hand-maintained call-index/event-index tables — do not assume v7 indices carry over, given the transaction-version bump.
  2. If you parse balances.Transfer for deposits, update to the new 3-field shape (from, to, amount) and confirm your system.account balance parsing handles the frozen/flags layout. See Balances & Transfers.
  3. If you operate a validator node, review Staking & Validators for API changes and the Validator Node Guide for the v8 operational updates (BEEFY session key, node key generation, pruning defaults) before upgrading.
  4. If your integration calls add_permissioned_validator, remove_permissioned_validator, payout_stakers_by_system, change_slashing_allowed_for, or set_commission_cap, note these now live on the Validators pallet, not Staking.
  5. If you hold or transfer Polymesh assets outside of portfolios, or build tooling against PortfolioId, review Native Asset Holdings and Settlement & Instructions.
  6. Re-check any code that special-cases RandomnessCollectiveFlip by name, and rename CddServiceProviders references to DidRegistrars (see Identity & Onboarding).
  7. If you subsidize accounts or relay signed transactions, review Relayer & Subsidies — the accept flow, event shapes, and relay_tx all changed.
  8. If you deploy or call smart contracts, review Smart Contracts — target pallet-revive.
  9. If you're evaluating Confidential Assets, connect to Testnet — it is not on Mainnet, and the Devnet it previously ran on is being retired — and review Confidential Assets before writing any code against it.
  10. Review Other Runtime Changes if you interact with transaction fee queries, Sudo, runtime upgrades, or the Scheduler directly.
  11. If you call Runtime APIs directly via state_call (not just extrinsics/storage), review Runtime APIs & RPCIdentityApi, StakingApi, AssetApi, and SettlementApi all changed. Also check that page if you call identity_isIdentityHasValidCdd, identity_validCDDClaims, asset_transferReport, nft_transferReport, staking_getCurve, or settlement_getAffirmationCount directly by JSON-RPC name — five of those are removed and one changes its parameters.

Full pallet API reference

For a mechanically generated, literal diff of every call, event, error, storage item, and constant across all pallets (not just the ones covered in the topic pages above), see the Full Pallet API Reference. It's derived directly from runtime metadata rather than source review, so it's a good cross-check alongside the narrative pages.

Runtime APIs & JSON-RPC

If you call Runtime APIs directly (state_call) or specific custom JSON-RPC methods by name, see Runtime APIs & RPCIdentityApi, StakingApi, AssetApi, and SettlementApi all changed shape in v8, and five custom JSON-RPC methods (identity_isIdentityHasValidCdd, identity_validCDDClaims, asset_transferReport, nft_transferReport, staking_getCurve) are removed.