Skip to content

v31.0.0-beta.1

Pre-release
Pre-release

Choose a tag to compare

@polymesh-bot polymesh-bot released this 10 Aug 13:27
71b6355

31.0.0-beta.1 (2026-08-10)

Bug Fixes

  • 🐛 correct protocol fee mapping against v8 runtime (69ec025)
  • 🐛 correct transaction tags against chain v8 metadata (e77224d)
  • 🐛 declare the transactions procedures actually submit (672fcfd)
  • 🐛 only require the DID Registrar role to issue a CDD claim (78abd14)
  • 🐛 protocol fees no longer silently reported as zero (e30e51d)
  • 🐛 report transfer failures instead of throwing (50fb337)
  • 🐛 staking.getPayee returns null for an Account with no payee (4a8effc)

Features

  • 🎸 align TransferError with the chain's transfer errors (52f1364)
  • 🎸 Drop v7 support (4292be3)
  • 🎸 rebuild transaction groups from the chain's permission model (b6cb8e5)
  • 🎸 remove CDD transfer errors that cannot occur on v8 (10114e3)

BREAKING CHANGES

  • 🧨 - Removed the TransferStatus enum and its sole
    producer u8ToTransferStatus. TransferError — the enum actually
    populated, by Settlements.canTransfer — keeps its role, and its members'
    doc comments no longer refer to TransferStatus equivalents.
  • Removed TransferError.InvalidReceiverPortfolio. Its sole producer was
    the granularCanTransferResultToTransferBreakdown cascade deleted with v7
    support, and it cannot be re-mapped: the portfolio pallet has a single
    PortfolioDoesNotExist variant, already mapped to InvalidSenderPortfolio.
  • Added TransferError.InvalidReceiverIdentity for a receiving Identity
    that is not active. Both transfer-validation paths report this condition
    (nft.InvalidNFTTransferInvalidReceiverDID and
    asset.InvalidTransferInvalidReceiverDID) and neither was mapped, so it
    previously surfaced as a raw chain error name.
  • Removed the transfersCanTransfer mock option in testUtils, typed
    against a return type canTransfer no longer has.
  • See changelogs/v30.2.0-next.md for full
    migration guidance.
  • 🧨 - Removed TransferError.InvalidReceiverCdd,
    TransferError.InvalidSenderCdd and TransferError.ScopeClaimMissing.
    The first two cannot be produced because transfers are no longer CDD
    gated; ScopeClaimMissing relates to Investor Uniqueness, removed from
    the chain some time ago.
  • 🧨 - Removed TxGroup.RelayerManagement and
    RELAYER_MANAGEMENT_TX_TAGS. Every call in the relayer pallet is
    ensure_signed only, so the group never gated anything and no replacement
    grant is needed.
  • TxGroup.MultiSigManagement / MULTISIG_MANAGEMENT_TX_TAGS reduced to
    multiSig.CreateMultisig, the only permission-checked call in the pallet.
    The rest are executed under the MultiSig's own origin via a proposal, are
    ensure_signed only, or are primary-key only. What a MultiSig may do via
    proposal is constrained by the permissions held by the MultiSig Account
    itself
    , not by its signers'.
  • Added TxGroup.InstructionMediation / INSTRUCTION_MEDIATION_TX_TAGS
    (AffirmInstructionAsMediator, RejectInstructionAsMediator,
    LockInstruction, UnlockInstruction). These are newly grantable, not
    relocated
    — no group previously covered them, so existing
    SettlementManagement grantees do not already have them.
  • Added TxGroup.DidRegistration / DID_REGISTRATION_TX_TAGS
    (identity.RegisterDid); TxGroup.CddRegistration is deprecated but
    retained.
  • Removed tags for extrinsics no longer on chain:
    settlement.AddInstructionWithMemo, settlement.AddAndAffirmInstructionWithMemo,
    portfolio.MovePortfolioFundsV2.
  • Added tags for permission-checked v8 extrinsics no group previously
    covered, across SettlementManagement, PortfolioManagement,
    StoManagement and CorporateActionsManagement.
  • Consumers building permission UIs from TX_GROUP_TO_TAGS_MAP,
    AGENT_TX_GROUP_VALUES or the individual *_TX_TAGS constants should
    re-check their output.
  • See changelogs/v30.2.0-next.md for full
    migration guidance.
  • 🧨 - SDK now only supports chain v8 — connecting to a v7 chain throws on
    initialization (SUPPORTED_SPEC_VERSION_RANGE narrowed to '8.0').
  • Removed: ChildIdentity entity and all child-identity APIs (Identities.createChild/
    createChildren/getChildIdentity, Identity.* equivalents), Claims.getCddClaims,
    Identity.hasValidCdd, RoleType.CddProvider/isCddProviderRole/CddProviderRole,
    AccountManagement.subsidizeAccount, consumeAddRelayerPayingKeyAuthorization/
    AuthorizationType.AddRelayerPayingKey, Instruction.withdraw/withdrawAsMediator/
    InstructionAffirmationOperation.Withdraw/WithdrawAsMediator, Nft.controllerTransfer's
    destinationPortfolio param, AcceptPrimaryKeyRotationParams.cddAuth,
    SetStakingControllerParams/BondPolyxParams.controller.
  • Renamed: Identity.isCddProvider()Identity.isDidRegistrar().
  • Deprecated: Identities.registerIdentity (createCdd/expiry are now no-ops) —
    use registerDid/selfRegisterDid.
  • Error message changes (update any string-matching code):
    'Beneficiary/Subsidizer Account does not have a valid CDD Claim'
    '...does not have an associated Identity';
    'Issuing Identity does not have a valid CDD claim''Issuing Identity does not exist';
    'Issuer must be a CDD provider''Issuer must be a DID Registrar';
    'MultiSig signers must be accounts as of v7''MultiSig signers must be accounts'.
  • See changelogs/v30.2.0-next.md for full migration guidance.