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
- Exchanges, custodians, wallets — see Balances & Transfers
- Validator/node operators — see Staking & Validators for pallet/API changes, and the Validator Node Guide for operational steps
- Asset issuers, transfer agents, integrators building on Settlement/Portfolio — see Native Asset Holdings and Settlement & Instructions
- Anyone registering identities or managing DID registrars — see Identity & Onboarding
- Anyone subsidizing transaction fees or relaying signed calls — see Relayer & Subsidies
- Smart contract developers — see Smart Contracts
- Anyone evaluating Confidential Assets — see Confidential Assets — not available on Mainnet
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. RandomnessCollectiveFlipandBridge(already unused) pallets removed.- New pallets:
Validators(16),PolymeshTransactionPayment(51),Beefy(52),Mmr(53),MmrLeaf(54), plusMultiBlockMigrationsinfrastructure. CddServiceProviderspallet renamed toDidRegistrars.- Transaction fee handling splits across the standard
TransactionPaymentand the slimmed-downPolymeshTransactionPayment;Sudomoves to the upstream standard and gainsremove_key;Systemgains authorized two-step runtime upgrades;Schedulergains retry management. See Other Runtime Changes for detail.
Migration checklist
- Regenerate any hand-maintained call-index/event-index tables — do not assume v7 indices carry over, given the transaction-version bump.
- If you parse
balances.Transferfor deposits, update to the new 3-field shape (from,to,amount) and confirm yoursystem.accountbalance parsing handles thefrozen/flagslayout. See Balances & Transfers. - 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.
- If your integration calls
add_permissioned_validator,remove_permissioned_validator,payout_stakers_by_system,change_slashing_allowed_for, orset_commission_cap, note these now live on theValidatorspallet, notStaking. - If you hold or transfer Polymesh assets outside of portfolios, or build tooling against
PortfolioId, review Native Asset Holdings and Settlement & Instructions. - Re-check any code that special-cases
RandomnessCollectiveFlipby name, and renameCddServiceProvidersreferences toDidRegistrars(see Identity & Onboarding). - If you subsidize accounts or relay signed transactions, review Relayer & Subsidies — the accept flow, event shapes, and
relay_txall changed. - If you deploy or call smart contracts, review Smart Contracts — target
pallet-revive. - 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.
- Review Other Runtime Changes if you interact with transaction fee queries,
Sudo, runtime upgrades, or theSchedulerdirectly. - If you call Runtime APIs directly via
state_call(not just extrinsics/storage), review Runtime APIs & RPC —IdentityApi,StakingApi,AssetApi, andSettlementApiall changed. Also check that page if you callidentity_isIdentityHasValidCdd,identity_validCDDClaims,asset_transferReport,nft_transferReport,staking_getCurve, orsettlement_getAffirmationCountdirectly 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 & RPC — IdentityApi, 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.