插件
委托和撤销插件
Last updated January 31, 2026
本指南展示如何在 Core Asset 上委托和撤销插件权限。将插件控制权转移给其他地址或使插件数据永久不可变。
学习内容
- 将插件权限委托给另一个地址
- 撤销已委托的权限
- 了解不同插件类型的撤销行为
- 使插件数据不可变
摘要
使用 approvePluginAuthority() 委托插件权限,使用 revokePluginAuthority() 撤销。不同的插件类型有不同的撤销行为。
- 所有者管理:撤销回
Owner权限 - 权限管理:撤销回
UpdateAuthority - 设置权限为
None使插件不可变 - 所有者管理的插件在 Asset 转移时自动撤销
范围外
插件删除(见删除插件)、添加插件(见添加插件)和永久插件权限更改。
快速开始
- 使用新权限地址调用
approvePluginAuthority() - 要撤销:调用
revokePluginAuthority() - 要设为不可变:将权限设为
None
委托权限
插件可以通过委托权限指令更新委托给另一个地址。委托的插件允许主要权限者以外的地址控制该插件的功能。
委托插件权限
import { publicKey } from '@metaplex-foundation/umi'
import { approvePluginAuthority } from '@metaplex-foundation/mpl-core'
const assetAddress = publicKey('11111111111111111111111111111111')
const delegate = publicKey('33333333333333333333333333333')
await approvePluginAuthority(umi, {
asset: assetAddress,
plugin: { type: 'Attributes' },
newAuthority: { type: 'Address', address: delegate },
}).sendAndConfirm(umi)
撤销权限
撤销插件权限会根据被撤销的插件类型产生不同的行为。
- 所有者管理的插件:如果从
所有者管理的插件撤销一个地址,那么插件将默认返回Owner权限类型。 - 权限管理的插件:如果从
权限管理的插件撤销一个地址,那么插件将默认返回UpdateAuthority权限类型。
谁可以撤销插件?
所有者管理的插件
- 所有者可以撤销所有者管理的插件,这会撤销委托并将 pluginAuthority 类型设置为
Owner。 - 插件的被委托权限者可以撤销自己,这会将插件权限类型设置为
Owner。 - 在转移时,所有者管理插件的被委托权限者会自动撤销回
Owner Authority类型。
权限管理的插件
- Asset 的更新权限者可以撤销委托,这会将 pluginAuthority 类型设置为
UpdateAuthority。 - 插件的被委托权限者可以撤销自己,这会将插件权限类型设置为
UpdateAuthority。 插件及其类型的列表可以在插件概述页面查看。
撤销插件权限
import { publicKey } from '@metaplex-foundation/umi'
import { revokePluginAuthority } from '@metaplex-foundation/mpl-core'
await revokePluginAuthority(umi, {
asset: asset.publicKey,
plugin: { type: 'Attributes' },
}).sendAndConfirm(umi)
Asset 转移时委托重置
所有所有者管理的插件在 Asset 转移时,其被委托的权限者会被撤销并设置回 Owner 权限类型。 这包括:
- Freeze Delegate
- Transfer Delegate
- Burn Delegate
使插件数据不可变
通过将插件权限更新为 None 值,将有效地使插件数据不可变。
警告 - 这样做会使您的插件数据不可变。请谨慎操作!
使插件不可变
import {
approvePluginAuthority
} from '@metaplex-foundation/mpl-core'
await approvePluginAuthority(umi, {
asset: asset.publicKey,
plugin: { type: 'FreezeDelegate' },
newAuthority: { type: 'None' },
}).sendAndConfirm(umi)
常见错误
Authority mismatch
您没有委托或撤销此插件的权限。只有当前权限者可以委托;只有所有者/权限者可以撤销。
Plugin not found
Asset/Collection 没有附加此插件类型。
Cannot revoke None authority
权限为 None 的插件是不可变的。没有权限可以撤销。
注意事项
- 委托转移控制权但不移除原权限者撤销的能力
- 设置权限为
None是永久且不可逆的 - 所有者管理的插件在 Asset 转移给新所有者时自动撤销
- 撤销将权限返回给默认类型(Owner 或 UpdateAuthority)
快速参考
按插件类型的撤销行为
| 插件类型 | 撤销到 |
|---|---|
| 所有者管理 | Owner 权限 |
| 权限管理 | UpdateAuthority |
谁可以委托/撤销
| 操作 | 所有者管理 | 权限管理 |
|---|---|---|
| 委托 | 所有者 | 更新权限者 |
| 撤销 | 所有者或委托人 | 更新权限者或委托人 |
常见问题
撤销和删除插件有什么区别?
撤销只改变谁控制插件——插件及其数据保持不变。删除会完全移除插件。
可以委托给多个地址吗?
不可以。每个插件一次只有一个权限者。委托给新地址会替换之前的权限者。
转移 Asset 时委托的插件会怎样?
所有者管理的插件会自动撤销回 Owner 权限。权限管理的插件保持不变。
设置权限为 None 后可以撤销吗?
不可以。设置权限为 None 会使插件永久不可变。这无法逆转。
委托人可以撤销自己吗?
可以。被委托的权限者可以撤销自己的访问权限,这会将控制权返回给默认的权限类型。
相关操作
术语表
| 术语 | 定义 |
|---|---|
| 委托人 | 被授予插件临时控制权的地址 |
| 撤销 | 移除被委托的权限,返回默认值 |
| None 权限 | 使插件不可变的特殊权限类型 |
| 自动撤销 | 转移时所有者管理插件的自动撤销 |
| 插件权限 | 当前控制插件的地址 |
