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

Hedera铸造NFT报MAX_NFTS_IN_PRICE_REGIME_HAVE_BEEN_MINTED错误求解

报错原因

这个报错和你设置的maxSupply=250没有关系,触发根源是两个核心问题:

  • 元数据传参格式错误,导致SDK误判单批次铸造的NFT数量
  • 交易费未匹配对应铸造数量的费率档位

具体细节:

  1. 元数据参数写法不符合接口要求
    你代码中把CID定义为字符串数组,但传给Buffer.from()时直接传入了整个数组而非数组内的CID字符串,会生成异常的乱码元数据。
    绝大多数人触发这个报错的直接原因是漏写了setMetadata()参数外层的数组包裹:setMetadata()要求传入值为元数据数组,数组的每个元素对应1个NFT的元数据字节(Buffer/Uint8Array类型),数组长度等于本次要铸造的NFT总数。如果你直接把单个NFT的Buffer实例传给setMetadata(),由于Buffer本身是可迭代的字节数组,SDK会把每个字节识别为1个独立NFT的元数据,判定你要铸造的NFT数量等于元数据的字节长度。普通IPFS CID转成Buffer有34~46字节,若传入更长的元数据,很容易超过默认档位允许的单批次铸造上限,直接触发报错。
  2. 未显式设置足够的交易费阈值
    Hedera网络对NFT铸造采用分档计费规则:默认交易配置下,基础费率档位单批次最多允许铸造10个NFT,铸造更多数量需要支付更高的交易费。SDK默认的最大交易费阈值较低,无法覆盖更高档位的费用,即使你实际铸造数量没有超过自己设置的maxSupply,也会触发该错误。
修复方案

按照以下步骤调整代码即可:

  1. 修正元数据传参逻辑
  • 单批次铸造1个NFT时,CID直接使用字符串类型,转成Buffer后包裹在数组中传入:
// CID直接定义为字符串,不需要包数组
const CID = "**********************************************";
let mintTx = await new TokenMintTransaction()
  .setTokenId(tokenId)
  // 必须传入数组,每个元素对应1个NFT的元数据Buffer
  .setMetadata([Buffer.from(CID)])
  • 单批次铸造多个NFT时,将每个CID字符串单独转成Buffer,组成元数据数组后再传入:
const CIDList = ["cid1", "cid2", ..."cidN"];
// 逐个转成Buffer,组成符合要求的元数据数组
const metadataArr = CIDList.map(cid => Buffer.from(cid));
let mintTx = await new TokenMintTransaction()
  .setTokenId(tokenId)
  .setMetadata(metadataArr)
  1. 显式设置足够的交易费
    在freezeWith(client)调用前,通过setMaxTransactionFee设置足够的最大交易费阈值,单批次铸造250个NFT设置2~5Hbar即可完全覆盖费用:
let mintTx = await new TokenMintTransaction()
  .setTokenId(tokenId)
  .setMetadata([Buffer.from(CID)])
  // 显式设置最大交易费,匹配对应铸造数量的费率档位
  .setMaxTransactionFee(new Hbar(3))
  .freezeWith(client);

如果调整后仍触发报错,先检查当前使用的tokenId是否为之前测试中已经铸满NFT的旧代币,重新创建NFT获取新的tokenId即可。


内容的提问来源于stack exchange,提问作者Nal Luksic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:21:29