Features

Delegating Compressed NFTs

Last updated February 24, 2026

Summary

Delegating compressed NFTs allows the owner to authorize another account to perform actions on their behalf. This page covers approving and revoking delegate authorities on individual cNFTs.

  • Approve a leaf delegate to transfer, burn, or freeze a cNFT on the owner's behalf
  • Revoke a delegate by re-delegating to the owner's own address
  • Delegate authority is reset automatically after a transfer

The owner of a Compressed NFT can delegate it to another account while keeping ownership of the cNFT.

This allows the delegated account — which we also refer to as the Delegate Authority — to perform actions on behalf of the owner. These actions are:

Each of these actions provides examples of how to use the Delegate Authority to perform them. Usually, you simply provide the Leaf Delegate account as a Signer instead of the Leaf Owner account. Let's see how we can approve and revoke Delegate Authorities for our Compressed NFTs.

Approving a Delegate Authority

To approve or replace a Delegate Authority, the owner must send a Delegate instruction. This instruction accepts the following parameters:

  • Leaf Owner: The current owner of the Compressed NFT as a Signer. It defaults to the payer of the transaction.
  • Previous Leaf Delegate: The previous Delegate Authority, if any. Otherwise, this should be set to the Leaf Owner.
  • New Leaf Delegate: The new Delegate Authority to approve.

Additionally, more parameters must be provided to verify the integrity of the Compressed NFT as this instruction replaces the leaf on the Bubblegum Tree, since these parameters are common to all instructions that mutate leaves, they are documented in the following FAQ. Fortunately, we can use a helper method that will automatically fetch these parameters for us using the Metaplex DAS API.

Delegate a Compressed NFT

import { getAssetWithProof, delegate } from '@metaplex-foundation/mpl-bubblegum';
const assetWithProof = await getAssetWithProof(umi, assetId, { truncateCanopy: true });
await delegate(umi, {
...assetWithProof,
leafOwner,
previousLeafDelegate: leafOwner.publicKey,
newLeafDelegate: newDelegate,
}).sendAndConfirm(umi);

Revoking a Delegate Authority

To revoke an existing Delegate Authority, the owner simply needs to set themselves as the new Delegate Authority.

Revoke the Delegate Authority of a Compressed NFT

import { getAssetWithProof, delegate } from '@metaplex-foundation/mpl-bubblegum';
const assetWithProof = await getAssetWithProof(umi, assetId, {truncateCanopy: true});
await delegate(umi, {
...assetWithProof,
leafOwner,
previousLeafDelegate: currentDelegate,
newLeafDelegate: leafOwner.publicKey,
}).sendAndConfirm(umi);

Notes

  • Delegate authority is reset to the new owner after a transfer. The new owner must re-delegate if needed.
  • Only one leaf delegate can be active at a time per cNFT. Approving a new delegate replaces the previous one.
  • To revoke a delegate, set the new delegate to the owner's own public key.

FAQ

What can a delegate do with a cNFT?

A leaf delegate can transfer, burn, and freeze/thaw the cNFT on the owner's behalf.

How do I revoke a delegate?

Call the delegate instruction with newLeafDelegate set to the owner's own public key. This effectively removes the delegate.

Does the delegate persist after a transfer?

No. After a transfer, the leaf delegate is automatically reset to the new owner.

Glossary

TermDefinition
Leaf DelegateAn account authorized by the cNFT owner to perform transfer, burn, and freeze actions
Delegate AuthorityThe approved account that can act on behalf of the cNFT owner
Previous Leaf DelegateThe current delegate being replaced, or the owner if no delegate was previously set