如何仅调用一次 TokenMintTransaction 在 Hedera 上铸造多个 NFT?

Ed *_*uez 3 hashgraph hedera-hashgraph

我想铸造 100 个 NFT。我需要调用“TokenMintTransaction()”100 次吗?有没有办法在一次 API 调用中铸造 100 个 NFT?

这是我正在使用的代码:

let mintTx = new TokenMintTransaction().setTokenId(tokenId).setMetadata([Buffer.from(CID)]).freezeWith(client);
Run Code Online (Sandbox Code Playgroud)

我可以在 .setMetadata() 中传递什么来铸造多个 NFT?

Abi*_*Abi 5

是的,可以在一个 NFT 中铸造多个NFTTokenMintTransaction(),但有一些事情需要注意。

一笔交易的最大大小为 6,144 kb(包括签名)。

.setMetadata()接受一系列 NFT 元数据。每个数组元素都会生成一个 NFT,该 NFT 具有在令牌类型下创建的唯一序列号。交易收据将包含该交易创建的所有新序列号。

密切关注元数据的大小非常重要,因为如果您在数组中放入太多项目,您将收到错误TRANSACTION_OVERSIZE,并且不会铸造任何 NFT。

以下是在单笔交易中铸造多个 NFT 的示例:

let metadata = [];
let CID = [];
for (let i = 0; i < 3; i++) {
  // NFT STORAGE
  const fileName = `LEAF${i + 1}.jpg`;
  metadata[i] = await nftClient.store({
    name: `LEAF${i + 1}`,
    description: "Leaf NFT.",
    image: new File([await fs.promises.readFile(fileName)], fileName, { type: "image/jpg" }),
  });

  CID[i] = Buffer.from(metadata[i].url);

  // IPFS URI FOR NFT METADATA - See HIP-412: https://hips.hedera.com/hip/hip-412
  let ipfsBaseUrl = "https://ipfs.io/ipfs/";
  let ipfsGatewayLink = ipfsBaseUrl + metadata[i].ipnft + "/metadata.json";
  console.log(`- IPFS link for serial ${i + 1}: ${ipfsGatewayLink} \n`);
}

// MINT NEW BATCH OF NFTs
let mintTx = new TokenMintTransaction().setTokenId(tokenId).setMetadata(CID).freezeWith(client);
let mintTxSign = await mintTx.sign(operatorKey);
let mintTxSubmit = await mintTxSign.execute(client);
let mintRec = await mintTxSubmit.getRecord(client);

console.log(`- Minting fees: ${mintRec.transactionFee._valueInTinybar.c[0] * 1e-8} hbar \n`);

Run Code Online (Sandbox Code Playgroud)

虽然一次创建 100 个 NFT 可能不太可能,但您应该能够一次创建数十个(取决于元数据大小)。