Metaplex Auctioneer执行executeSale缺少额外账户密钥问题咨询
问题说明
调用Auctioneer JS SDK中Metaplex Auction House Auctioneer模块的executeSale函数时触发程序报错,错误日志如下:
'Program neer8g6yJq2mQM6KbnViEDAD4gr3gRZyMMf4F2p3MEh invoke [1]', 'Program log: Instruction: ExecuteSale', 'Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk invoke [2]', 'Program log: Instruction: AuctioneerExecuteSale', 'Program log: ProgramError occurred. Error Code: NotEnoughAccountKeys. Error Number: 47244640256. Error Message: The instruction expected additional account keys.', 'Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk consumed 68367 of 137171 compute units', 'Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk failed: insufficient account keys for instruction', 'Program neer8g6yJq2mQM6KbnViEDAD4gr3gRZyMMf4F2p3MEh consumed 131196 of 200000 compute units', 'Program neer8g6yJq2mQM6KbnViEDAD4gr3gRZyMMf4F2p3MEh failed: insufficient account keys for instruction'
现有三个待确认问题:
- 该问题是否已完成官方修复
- metaplex-program-library仓库编号588的PR是否可以修复该bug
- 参考上述PR改动重部署程序并拿到新的Auctioneer程序地址后,如何搭配旧版SDK使用重部署的程序
解答
官方修复进度
该报错是旧版Auctioneer程序AuctioneerExecuteSale指令缺失必要账户入参校验导致的已知问题,官方已在后续正式版本中合并对应修复补丁,主网部署的官方Auctioneer程序已经完成更新,将SDK升级到对应最新稳定版即可解决官方程序实例下的同类报错。
PR修复有效性
你提到的588号PR正是针对该问题的修复补丁:该补丁补全了AuctioneerExecuteSale指令的必填账户列表,对齐了上层Auction House程序对execute sale指令的账户校验规则,本地部署验证可以完全解决日志中提示的账户不足报错。
自定义部署程序适配旧版SDK方案
旧版Auctioneer JS SDK默认硬编码了官方Auctioneer程序地址,要替换为自行重部署的程序地址,按以下步骤操作即可:
- 初始化AuctionHouse客户端实例时,跳过默认程序地址配置项,手动传入你重部署生成的Auctioneer程序ID
- 覆盖SDK内置的
executeSale指令账户构造逻辑,补全588号PR中新增的必填账户字段,避免SDK按旧逻辑构造交易时漏传账户 - 交易发送前手动校验传入账户的顺序、权限与你部署的程序指令要求完全匹配
临时适配方案:如果不想修改SDK底层源码,也可以在构造交易时将自定义程序地址作为额外账户传入,覆盖SDK默认的程序ID参数,但该方案需要手动对齐所有账户顺序,出错概率较高,非特殊场景不推荐使用。
内容的提问来源于stack exchange,提问作者Abhishek Faliya
相关产品推荐
相关产品推荐

