功能

销毁 Asset

Last updated September 3, 2026

本指南展示如何使用 Metaplex Core SDK 在 Solana 上销毁 Core Asset。永久销毁 Asset 并回收大部分租金押金。

您将学到

  • 销毁 Asset 并回收租金
  • 处理 Collection 中 Asset 的销毁
  • 理解 Burn Delegate 权限
  • 了解销毁后账户会发生什么
  • 销毁前清空 Asset Signer PDA

销毁前先提取 Asset Signer 余额

销毁 Core Asset 会使 execute 失败。Asset Signer PDA 中剩余的 SOL、代币或其他资产将滞留且无法找回。请先转出。

摘要

销毁 Core Asset 以永久销毁它并回收租金。只有所有者(或 Burn Delegate)可以销毁 Asset。

  • 调用 burn(umi, { asset }) 销毁 Asset
  • 账户租金返还给销毁交易的付款人
  • 少量(约 0.0009 SOL)保留以防止账户重用
  • 销毁是永久且不可逆的
  • 先清空 Asset Signer PDA — 销毁后 execute 无法再转移这些资金

范围外

Token Metadata 销毁(使用 mpl-token-metadata)、压缩 NFT 销毁(使用 Bubblegum)、Collection 销毁(Collection 有自己的销毁流程)。

快速开始

跳转至: 销毁 Asset · Collection 内销毁

  1. 安装:npm install @metaplex-foundation/mpl-core @metaplex-foundation/umi
  2. 获取 Asset 以验证所有权
  3. 如果 Asset Signer PDA 持有资金,用 execute 将其转出
  4. 作为所有者调用 burn(umi, { asset })
  5. 租金会自动返还到您的钱包

前提条件

  • 配置了拥有 Asset(或是其 Burn Delegate)的签名者的 Umi
  • 要销毁的 Asset 的 Asset 地址
  • Collection 地址(如果 Asset 在 Collection 中) 可以使用 burn 指令销毁 Asset。这会将 Asset 账户的租金押金返还给交易付款人。只有 1 字节的免租金最低余额(0.00089784 SOL)会留在账户中以防止其被重新打开;超出该数额的 lamports 也会留在账户中。

仅退还租金

burn 将账户数据大小对应的免租金余额减去 1 字节下限后的金额退还给付款人。为防止地址重开攻击,账户不会被删除,而是被调整为 1 字节的未初始化账户。任何超过租金的 lamports(例如尚未收取的协议费用)会留在该 1 字节未初始化账户中,直到被 Metaplex 费用收集器清扫。

代码示例

以下是如何使用我们的 SDK 销毁 Core asset。该代码片段假设您是资产的所有者。

1import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
2import { burn } from '@metaplex-foundation/mpl-core'
3import { mplCore } from '@metaplex-foundation/mpl-core'
4import { publicKey } from '@metaplex-foundation/umi'
5
6const umi = createUmi('https://api.devnet.solana.com').use(mplCore())
7const assetAddress = publicKey('AssetAddressHere...')
8
9// Permanently destroy/burn an NFT asset
10const result = await burn(umi, {
11 asset: assetAddress,
12}).sendAndConfirm(umi)
13
14console.log('Asset burned successfully')

销毁属于 Collection 的 Asset

以下是如何使用我们的 SDK 销毁属于 collection 的 Core asset。该代码片段假设您是资产的所有者。

销毁属于 Collection 的 Asset

import { publicKey } from '@metaplex-foundation/umi'
import {
burn,
fetchAsset,
collectionAddress,
fetchCollection,
} from '@metaplex-foundation/mpl-core'
const assetId = publicKey('11111111111111111111111111111111')
const asset = await fetchAsset(umi, assetId)
const collectionId = collectionAddress(asset)
let collection = undefined
if (collectionId) {
collection = await fetchCollection(umi, collectionId)
}
await burn(umi, {
asset,
collection,
}).sendAndConfirm(umi)

常见错误

Authority mismatch

您不是 Asset 的所有者或 Burn Delegate。检查所有权:

const asset = await fetchAsset(umi, assetAddress)
console.log(asset.owner) // 必须与您的签名者匹配

Asset is frozen

Asset 有 Freeze Delegate 插件且当前已冻结。冻结权限必须在销毁前解冻它。

Missing collection parameter

对于 Collection 中的 Asset,您必须传递 collection 地址。首先获取 Asset 以获取 collection:

const asset = await fetchAsset(umi, assetAddress)
const collectionId = collectionAddress(asset)

注意事项

  • 销毁是永久且不可逆的 - Asset 无法恢复
  • 租金返还给付款人(金额取决于资产大小和插件)
  • 仅退还租金。任何超过免租金最低余额的 lamports 不会返还给所有者
  • 剩余的 SOL 防止账户地址被重用
  • Burn Delegate 可以代表所有者销毁(通过 Burn Delegate 插件)
  • 冻结的 Asset 必须在销毁前解冻
  • 销毁前清空 Asset Signer PDA — 之后 execute 会失败,剩余余额将滞留

快速参考

销毁参数

参数必需描述
assetAsset 地址或获取的对象
collection如果在收藏中Collection 地址
authority默认为签名者(用于委托)

谁可以销毁?

权限可以销毁?
Asset 所有者
Burn Delegate
Transfer Delegate
Update Authority

租金回收

项目金额
返还给付款人基础 + 插件存储租金
留在账户中~0.0009 SOL
超过租金的 lamports不退还

FAQ

我可以回收账户中剩余的约 0.0009 SOL 吗?

不可以。这笔小额资金是故意留下的,用于标记账户为"已销毁"并防止其地址被新 Asset 重用。

销毁后 Asset 的元数据会怎样?

链上账户被清除(归零)。链下元数据通过原始 URI 仍可访问,但没有链上记录链接到它。

Burn Delegate 可以在没有所有者批准的情况下销毁吗?

可以。一旦所有者通过插件分配了 Burn Delegate,委托人可以随时销毁 Asset。所有者应只分配可信任的地址作为 Burn Delegate。

销毁会影响 Collection 的计数吗?

会。当 Asset 被销毁时,Collection 的 currentSize 会减少。numMinted 计数器保持不变(它跟踪历史铸造总数)。

我可以一次销毁多个 Asset 吗?

单个指令不行。您可以在一个交易中批量处理多个销毁指令(受交易大小限制)。

销毁时 Asset Signer PDA 中的 SOL 和代币会怎样?

销毁会禁用 execute。请先清空 Asset Signer PDA,否则这些余额会滞留且无法找回。

术语表

术语定义
销毁永久销毁 Asset 并回收租金
Burn Delegate被授权代表所有者销毁的账户
租金在 Solana 上保持账户活跃所需存入的 SOL
冻结销毁和转移被阻止的 Asset 状态
CollectionAsset 可能属于的组账户
Asset Signer PDA附加到 Asset、通过 execute 签名的钱包。销毁会使剩余余额滞留。