Overview
This patch release hardens portfolio and multisig permission checks, closes several freeze-related gaps around portfolio transfers and NFT locking, refines the NFT precompile and its NFTApproval event, and updates the toolchain and dependency set. It also adds a Least Authority audit report for DART.
Runtime spec_version: 8_001_020
New Features
NFT Precompile
forcedTransferon theNonFungibleAssetStubprecompile now takes an explicitaddress toparameter (#2003)
Modified Events
NFTApprovalnow returns the NFT owner instead of the caller (#2004)
Bug Fixes
Freeze Checks
- Moving assets between portfolios now enforces the asset/holder freeze check, closing a gap that allowed transfers between a caller's own portfolios while frozen (#2005)
transfer_reportsnow surfaces freezing errors, and locking an NFT held in a frozen portfolio now returns an error instead of succeeding (#2006)
Permission Checks
Portfolio::quit_custodynow checks secondary key permissions before removing custody (#2010)MultiSig::create_multisignow enforcesensure_perms_length_limitedon the signer permissions supplied at creation (#2010)- External Agents reject nested except permissions
pallet_sto::investreturns an error if settlement didn't fully execute.
Other Changes
- Improved redeem_nft benhcmarks
- Updated to Rust nightly-2026-09-01 and refreshed all dependencies;
- Regenerated extrinsic weights (#2009)