• Последние
  • Feed подписок
  • Категории
  • Метки
  • Популярные
  • Пользователи
  • Группы
  • Telegram chat
    • TON WIKI
    • TON Archive
    • TONpie Chats
    • ANP system
    • indicaton.io
Theme Center
  • Theme Center
  • default

  • reset theme
Collapse

tonpie.io

Подпишись на канал фаундера и разработчика экосистемы tonpie

Серийная/массовая чеканка NFT

Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском
a-mintinga-nfta-ton
1 Сообщения 1 Posters 61 Просмотры
    • Сначала старые
    • Сначала новые
    • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • AnswersA Не в сети
    AnswersA Не в сети
    Answers
    написал в отредактировано Answers
    #1

    Привет, сообщество TON,

    Я создаю игру на основе TON, которая использует некоторые NFT. В моем коде в основном используется код из этого туториала и библиотеки ton/ton-core/ton-crypto:

    Мой код развертывания NFT:

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

    Затем я получаю подтверждение с помощью seqno, я запрашиваю адрес элемента NFT по индексу NFT:

    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(
          collectionAddress,
          "get_nft_address_by_index",
          [{ type: "int", value: BigInt(itemIndex) }]
        );
        return response.stack.readAddress();
      }
    

    Весь процесс занимает до 30 секунд на 1 NFT. Мне интересно, есть ли лучший вариант для чеканки, например, 10 NFT, или лучший способ - чеканить один за другим и ждать подтверждения? В этом случае у меня есть некоторые опасения по поводу количества NFT, которых я могу достичь в течение 1 часа. Прямо сейчас я должен отчеканить все элементы последовательно, потому что для команды отчеканки требуется параметр индекса nft, и перед отчеканкой следующего элемента я должен получить подтверждение того, что предыдущий отчеканен правильно.


    Оригинал вопроса

    1 ответ Последний ответ
    0

  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Login or register to search.
  • Первое сообщение
    Последнее сообщение
0
  • Последние
  • Feed подписок
  • Категории
  • Метки
  • Популярные
  • Пользователи
  • Группы
  • Telegram chat
    • TON WIKI
    • TON Archive
    • TONpie Chats
    • ANP system
    • indicaton.io
  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Login or register to search.