Привет, сообщество 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, и перед отчеканкой следующего элемента я должен получить подтверждение того, что предыдущий отчеканен правильно.
Оригинал вопроса