You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

createRevokeCollectionAuthorityInstruction报Derived key invalid错误

问题背景

构建Solana链上撤销NFT集合权限交易时,触发*Derived key invalid(派生密钥无效)*报错,初始实现代码如下:

const metadataPda = findMetadataPda(mintPk); // findMetadataPda() 从'@metaplex-foundation/js'库导入

    const revokeAccount = {
    collectionAuthorityRecord: collectionPk, // 从solana浏览器查询metadata对象中`collection.key`字段获取
    delegateAuthority: authorityKey, // 创建NFT的钱包公钥
    metadata: metadataPda, // 上方声明的metadata PDA变量
    revokeAuthority: authorityKey, // 创建NFT的钱包公钥
    mint: mintPk, // NFT对应的Mint公钥
  }

  transaction.add(
    createRevokeCollectionAuthorityInstruction(revokeAccount)
  );
错误原因

当前参数配置存在核心错误,直接导致派生密钥校验失败:

  • collectionAuthorityRecord字段传值完全错误:你传入的是集合NFT的Mint地址,但该字段要求传入集合授权记录PDA,这是Metaplex元数据程序通过固定规则派生的程序派生地址,不是链上存储的普通公钥。链上程序在处理指令时会校验该地址的派生种子,传入普通Mint地址必然触发地址不匹配的派生无效报错。
  • 其余字段传值逻辑符合要求:metadata、mint、delegateAuthority(当授权对象确实为创建NFT的钱包时)、revokeAuthority(当撤销发起方为授权对象本身或集合更新权限持有者时)的传值规则没有问题。
修复方案
  1. 导入集合授权记录PDA的派生方法,通过正确种子计算目标地址,不要直接传入集合Mint地址
  2. 把计算得到的PDA传入collectionAuthorityRecord字段即可,修正后代码如下:
import { findMetadataPda, findCollectionAuthorityRecordPda } from '@metaplex-foundation/js';

const metadataPda = findMetadataPda(mintPk);
// 按照Metaplex规则派生集合授权记录PDA:种子为元数据程序ID、集合Mint地址、被授权方公钥
const collectionAuthRecordPda = findCollectionAuthorityRecordPda(collectionPk, authorityKey);

const revokeAccount = {
  collectionAuthorityRecord: collectionAuthRecordPda,
  delegateAuthority: authorityKey,
  metadata: metadataPda,
  revokeAuthority: authorityKey,
  mint: mintPk,
}

transaction.add(
  createRevokeCollectionAuthorityInstruction(revokeAccount)
);
注意事项
  • 发送交易前需要确保revokeAuthority对应的钱包对交易完成签名,否则会触发签名缺失错误
  • 如果当初授予集合权限的对象不是当前传入的authorityKey,需要替换为实际的被授权公钥重新派生PDA,否则依然会出现地址校验不通过的问题

内容的提问来源于stack exchange,提问作者Lorem Ipsum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 00:48:24