Examples: query, "exact match", wildcard*, wild?ard, wild*rd
Fuzzy search: cake~ (finds cakes, bake)
Term boost: "red velvet"^4, chocolate^2
Field grouping: tags:(+work -"fun-stuff")
Escape special characters +-&|!(){}[]^"~*?:\ - e.g. \+ \* \!
Range search: properties.timestamp:[1587729413488 TO *] (inclusive), properties.title:{A TO Z}(excluding A and Z)
Combinations: chocolate AND vanilla, chocolate OR vanilla, (chocolate OR vanilla) NOT "vanilla pudding"
Field search: properties.title:"The Title" AND text
Batch/bulk NFT minting

Hey TON community,

I am building TON-based game that mints some NFTs. My code mostly uses the code from this tutorial and ton/ton-core/ton-crypto libs:

My NFT deploy code:

public async deploy(
    wallet: OpenedWallet,
    collectionAddress: Address,
    params: mintParams
  ): Promise<number> {
    const seqno = await wallet.contract.getSeqno();
    await wallet.contract.sendTransfer({
      secretKey: wallet.keyPair.secretKey,
      messages: [
          value: "0.05",
          to: collectionAddress,
          body: this.createMintBody(params),
      sendMode: SendMode.IGNORE_ERRORS + SendMode.PAY_GAS_SEPARATELY,
    return seqno;

And after I am waiting seqno:

export async function waitSeqno(seqno: number, wallet: OpenedWallet): Promise<number> {
  for (let attempt = 0; attempt < 20; attempt++) {
    await sleep(2000);
    const seqnoAfter = await wallet.contract.getSeqno();
    if (seqnoAfter == seqno + 1) {
      return Promise.resolve(seqno)
  return Promise.reject(`Seqno ${seqno} timeout`)

export function sleep(ms: number): Promise<void> {
  return new Promise((resolve) => setTimeout(resolve, ms));

Then I get the confirmation with seqno I request NFT item address by NFT index:

static async getAddressByIndex(
    collectionAddress: Address,
    itemIndex: number,
    tonCenterApiKey: string
  ): Promise<Address> {
    const client = new TonClient({
      endpoint: "https://toncenter.com/api/v2/jsonRPC",
      apiKey: tonCenterApiKey,
    const response = await client.runMethod(
      [{ type: "int", value: BigInt(itemIndex) }]
    return response.stack.readAddress();

The whole process takes up to 30 seconds per 1 NFT. I am curiose is there a better option to mint for example 10 NFTs, or the best way is to mint one by one and wait it's confirmation? In that case I have some worries about number of NFTs I can achive within 1 hours. Right now I have to mint all items in sequence because minting command requires nft INDEX parameter and before minting next item I have to get the confirmation that the previous one is minted properly.

Posted 3 months ago
Edited 3 months ago
Votes Newest


0 Answers
3 months ago
3 months ago