Plugins

Freeze Delegate

Last updated January 31, 2026

The Freeze Delegate Plugin allows you to freeze Core Assets, blocking transfers and burns while the asset remains in the owner's wallet. Perfect for escrowless staking, marketplace listings, and game mechanics.

What You'll Learn

  • Add the Freeze Delegate plugin to an Asset
  • Freeze and thaw Assets
  • Delegate freeze authority to another address
  • Use cases: staking, listings, game locking

Summary

The Freeze Delegate is an Owner Managed plugin that freezes Assets in place. When frozen, the Asset cannot be transferred or burned until thawed by the freeze authority.

  • Freeze Assets without transferring to escrow
  • Delegate freeze authority to a program or other wallet
  • Authority is revoked on transfer (for non-permanent version)
  • Use Permanent Freeze Delegate for irrevocable freezing

Out of Scope

Collection-level freezing (use Asset-level only), permanent freezing (see Permanent Freeze Delegate), and Token Metadata freeze authority (different system).

Quick Start

Jump to: Add Plugin · Delegate Authority · Freeze · Thaw

  1. Add the Freeze Delegate plugin: addPlugin(umi, { asset, plugin: { type: 'FreezeDelegate', data: { frozen: true } } })
  2. The Asset is now frozen and cannot be transferred
  3. Thaw when ready: update the plugin with frozen: false
  4. Authority is revoked on transfer

When to Use Freeze vs Permanent Freeze

Use CaseFreeze DelegatePermanent Freeze Delegate
Marketplace listings✅ Best choice❌ Overkill
Escrowless staking✅ Best choice✅ Also works
Soulbound tokens❌ Revokes on transfer✅ Best choice
Collection-wide freeze❌ Assets only✅ Supports Collections
Rental protocols✅ Best choice✅ Also works
Choose Freeze Delegate when authority should reset on ownership change.
Choose Permanent Freeze Delegate when authority must persist forever.

Common Use Cases

  • Escrowless staking: Freeze NFTs while staked without transferring to escrow
  • Marketplace listings: Lock NFTs for sale without escrow accounts
  • Game item locking: Temporarily lock items during gameplay
  • Rental protocols: Lock NFTs while rented out
  • Governance: Lock tokens during voting periods
  • Collateral: Lock NFTs used as lending collateral
  • Tournaments: Lock NFTs during competition participation

Works With

MPL Core Asset
MPL Core Collection
For collection-level freezing, use Permanent Freeze Delegate instead.

Arguments

ArgValue
frozenbool

Functions

Add Freeze Delegate Plugin to an Asset

The addPlugin command adds the Freeze Delegate Plugin to an Asset. This plugin allows the Asset to be frozen, preventing transfers and burns.

Adding a Freeze Plugin to an MPL Core Asset

import { publicKey } from '@metaplex-foundation/umi'
import { addPlugin } from '@metaplex-foundation/mpl-core'
const assetAddress = publicKey('11111111111111111111111111111111')
await addPlugin(umi, {
asset: assetAddress,
plugin: { type: 'FreezeDelegate', data: { frozen: true } },
}).sendAndConfirm(umi)

Delegate the Freeze Authority

The approvePluginAuthority command delegates the freeze authority to a different address. This allows another address to freeze and thaw the Asset while maintaining ownership.

Delegate the Freeze Authority

import { publicKey } from '@metaplex-foundation/umi'
import { approvePluginAuthority } from '@metaplex-foundation/mpl-core'
const asset = publicKey('11111111111111111111111111111111')
const delegateAddress = publicKey('22222222222222222222222222222222')
await approvePluginAuthority(umi, {
asset: asset.publicKey,
plugin: { type: 'FreezeDelegate' },
newAuthority: { type: 'Address', address: delegateAddress },
}).sendAndConfirm(umi)

Updating the Freeze Delegate Plugin

The Freeze Delegate Plugin can be updated to change the frozen state of the asset. This is the same as using the Freezing an Asset and Thawing a Frozen Asset functions shown below.

Freezing an Asset

The freezeAsset command freezes an Asset, preventing it from being transferred or burned. This is useful for escrowless staking or marketplace listings.

Freeze an MPL Core Asset

import { publicKey } from '@metaplex-foundation/umi'
import { freezeAsset, fetchAsset } from '@metaplex-foundation/mpl-core'
const assetAddress = publicKey('11111111111111111111111111111111')
const assetAccount = await fetchAsset(umi, assetAddress)
const delegateSigner = generateSigner(umi)
await freezeAsset(umi, {
asset: assetAccount,
delegate: delegateSigner.publicKey,
authority: delegateSigner,
}).sendAndConfirm(umi)

Thawing a Frozen Asset

The thawAsset command unfreezes a frozen Asset, restoring its ability to be transferred and burned.

Thaw an MPL Core Asset

import { publicKey } from '@metaplex-foundation/umi'
import { thawAsset, fetchAsset } from '@metaplex-foundation/mpl-core'
const assetAddress = publicKey('11111111111111111111111111111111')
const assetAccount = await fetchAsset(umi, assetAddress)
const delegateSigner = generateSigner(umi)
await thawAsset(umi, {
asset: assetAccount,
delegate: delegateSigner,
}).sendAndConfirm(umi)

Common Errors

Asset is frozen

You tried to transfer or burn a frozen Asset. The freeze authority must thaw it first.

Authority mismatch

Only the freeze delegate authority can freeze/thaw the Asset. Check who has the plugin authority.

Plugin not found

The Asset doesn't have a Freeze Delegate plugin. Add it first with addPlugin.

Notes

  • Owner Managed: requires owner signature to add
  • Authority is automatically revoked when the Asset transfers
  • Frozen Assets can still be updated (metadata changes allowed)
  • Use Permanent Freeze Delegate if you need the authority to persist after transfer
  • Freezing is immediate - no confirmation period

Quick Reference

Freeze States

StateCan TransferCan BurnCan Update
UnfrozenYesYesYes
FrozenNoNoYes

Authority Behavior

EventAuthority Result
Asset transfersAuthority revoked
Plugin removedAuthority gone
ThawAuthority retained

FAQ

Can I freeze an Asset I don't own?

No. The Freeze Delegate is Owner Managed, so only the owner can add it. After adding, you can delegate authority to another address.

What's the difference between Freeze Delegate and Permanent Freeze Delegate?

Freeze Delegate authority is revoked on transfer. Permanent Freeze Delegate authority persists forever and can only be added at creation time.

Can a frozen Asset be burned?

No. Frozen Assets block both transfers and burns. Thaw the Asset first if you want to burn it.

Can I freeze an entire Collection at once?

Not with the regular Freeze Delegate (Assets only). Use Permanent Freeze Delegate on the Collection instead - it supports collection-level freezing and will freeze all Assets in that Collection at once. Note that Permanent Freeze Delegate can only be added at Collection creation time.

Does freezing affect metadata updates?

No. The Asset owner or update authority can still update metadata (name, URI) while frozen. Only transfers and burns are blocked.

How do I implement escrowless staking?

  1. Add Freeze Delegate plugin with your staking program as authority
  2. When user stakes: freeze the Asset
  3. When user unstakes: thaw the Asset
  4. The NFT never leaves the user's wallet

Glossary

TermDefinition
Freeze DelegateOwner Managed plugin that blocks transfers and burns
FrozenAsset state where transfers and burns are blocked
ThawUnfreezing an Asset to allow transfers again
Delegate AuthorityThe account authorized to freeze/thaw the Asset
EscrowlessStaking/listing without transferring to a holding account
Owner ManagedPlugin type requiring owner signature to add