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

    TON Overflow на русском
    0 Голоса
    1 Сообщения
    36 Просмотры

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

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

  • 0 Голоса
    1 Сообщения
    76 Просмотры

    я хочу знать, какой адрес является необязательным, потому что я много раз определял адрес основного кошелька. это рабочий пример. я хочу сократить этот метод, если это возможно. Этот метод длинный, и я сомневаюсь, что я добавил в него ненужный код или метод. итак, кто-нибудь знает, что здесь за ненужный код, который я должен удалить, или как мы можем сократить этот метод?

    Адрес кошелька: адрес кошелька основного владельца toAddress : адрес назначения (для перевода) nftAddress : адрес NFT

    Использование : react js и node js

    const forwardPayload = beginCell(). storeUint(0, 32). storeStringTail("UNSTAKED"). endCell(); const transferNftBody = beginCell(). storeUint(0x5fcc3d14, 32). // Opcode for NFT transfer storeUint(0, 64). // query_id storeAddress(Address.parse(toAddress)). // new_owner storeAddress(walletAddress). // response_destination for excesses storeBit(0). // we do not have custom_payload storeCoins(toNano("0.01")). // forward_amount storeBit(1). // we store forward_payload as a reference storeRef(forwardPayload). // store forward_payload as a reference endCell(); const internalMessage = beginCell(). storeUint(0x18, 6). // bounce storeAddress(Address.parse(nftAddress)). storeCoins(toNano("0.05")). storeUint(1, 1 + 4 + 4 + 64 + 32 + 1 + 1). // We store 1 that means we have body as a reference storeRef(transferNftBody). endCell(); let toSign = beginCell(). storeUint(698983191, 32). // subwallet_id | We consider this further storeUint(Math.floor(Date.now() / 1e3) + 60, 32). // Transaction expiration time, +60 = 1 minute storeUint(seqno, 32). // store seqno storeUint(0, 8). storeUint(3, 8). // store mode of our internal transaction storeRef(internalMessage); // store our internalMessage as a reference let signature = sign(toSign.endCell().hash(), keyPair.secretKey); // get the hash of our message to wallet smart contract and sign it to get signature let body = beginCell(). storeBuffer(signature). // store signature storeBuilder(toSign). // store our message endCell(); let externalMessage = beginCell(). storeUint(0b10, 2). // ext_in_msg_info$10 storeUint(0, 2). // src -> addr_none storeAddress(walletAddress). // Destination address storeCoins(0). // Import Fee storeBit(0). // No State Init storeBit(1). // We store Message Body as a reference storeRef(body). // Store Message Body as a reference endCell(); const result = client.sendFile(externalMessage.toBoc());

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

  • Есть ли "NFT-лутбоксы" на TON?

    TON Overflow на русском
    0 Голоса
    1 Сообщения
    16 Просмотры

    В экосистеме Ethereum существуют "лутбоксы", которые содержат несколько NFT и могут быть "открыты" для обнаружения токенов внутри. Была ли эта механика уже реализована в экосистеме TON?

    Этот вопрос был импортирован из чата Telegram: <***Скрыто***

    click to show

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

  • 0 Голоса
    1 Сообщения
    16 Просмотры

    В блокчейне TON каждый NFT использует свой собственный смарт-контракт. А хранение вещей в TON требует оплаты платы за хранение, вычитаемой из любого смарт-контракта. Означает ли это, что у каждого NFT на TON есть свой баланс, который очень медленно уменьшается из-за платы за хранение? Что произойдет, если температура опустится ниже нуля? Может ли NFT быть удален?

    Этот вопрос был импортирован из чата Telegram: <***Скрыто***

    click to show

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

  • 0 Голоса
    1 Сообщения
    75 Просмотры

    Я хочу убедиться, что передача прошла успешно, используя этот метод ответа tonConnectUI.sendTransaction()

    Я использую : React js @tonconnect/ui-react @ton/тонна

    Среда : Тестовая сеть

    отправить транзакцию с помощью : tonConnectUI.sendTransaction()

    ответ на транзакцию с помощью веб-расширения : {boc:"x{B92CC224AD7A1546F9974E8ACD9B4D7305D90A21A75A24C9732DB161B7D034A0D78239814924A11BAED572D69782624216DE00BCEE93A99090469BFEE2477D0029A9A31764E4EA950000000503}\n x{620019F5CCE72C6549AE5B6A58A2B80A5E02FD23B696B24A5EDCD3C6E47A671D3AECA017D7840000000000000000000000000001}\n x{5FCC3D140000000000000000801DC05C9F00471C18F28FB322BE12D4FE504AE6C28DCE7493DB17433AE4959A0CF001AF614CF808EEEE5A8EB27AC9BD31B27BB5F6B986682F71A7F8E1A0C5F0A51F54202}"} ответ на транзакцию с помощью мобильного кошелька :

    {boc: 'te6cckEBAwEA/gAB4YgB3AXJ8ARxwY8o+zIr4S1P5QSubCjc50…T4Ajjgx5R9mRXwlqfyglc2FG5zpJ7YuhnXJKzQZwgKMscEHI='}

    =============================================================

    итак, я получаю разные ответы с помощью мобильного кошелька и веб-расширения. я не знаю, как подтвердить эту успешную транзакцию. и каждый раз, когда они показывают мне успешную транзакцию, даже nft по какой-то причине не был переведен.

    Итак, я пытаюсь получить владельца nft по адресу NFT после получения ответа на транзакцию, но все равно получаю старого владельца, который не обновляется после транзакции, я думаю, это требует времени.

    Итак, я решил расшифровать ответ и получить хэш Trasaction и данные проверки с помощью этого хэша из api.

    Но я не знаю, как получить хэш транзакции.

    Кто-нибудь может каким-либо образом помочь решить эту проблему? мне просто нужно подтвердить, что NFT получен в x wallet.

    Спасибо

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

  • 0 Голоса
    3 Сообщения
    74 Просмотры

    Вообще говоря, из сообщения об ошибке следует, что для BigInt

    Вы должны заметить, что ваша строка кода неверна: .storeUint(0,1) // forward_payload:(любая ячейка ^Cell)

    Я думаю, это должна быть "ячейка", не использующая "Uint".

  • 0 Голоса
    2 Сообщения
    39 Просмотры

    Решено

    Эй, в общем, нет никакого TEP (предложения по повышению TON), определенного для того, что представляет собой "Стандартное размещение ставок для NFT".

    Как участник, внедривший стандарт NFT на языке Tact, вы можете легко установить статус своей доли, создав новый контракт и указав его в качестве нового владельца NFT.

    В качестве альтернативы, вы можете изменить статус внутри самого элемента NFT, а затем добавить инструкцию require, чтобы ограничить метод Transfer для элемента NFT.

    Таким образом, способ реализации этого довольно прост и гибок.

    Возможно, в ближайшем будущем я запишу учебник по этому вопросу.

    Наконец, я предполагаю, что вы пытались выполнить пошаговую задачу здесь https://github.com/ton-society/ton-footsteps/issues/295

    Я уже вставил код POC (Proof of Concept), который может запускаться в тестовой сети. Иди и проверь это! <3

  • Как отличить смарт-контракт NFT от других?

    TON Overflow на русском
    0 Голоса
    2 Сообщения
    26 Просмотры

    Короткий ответ - через Интерфейс.

    Но также вы можете взять ссылку в TEP62 (стандарт NFT) https://github.com/ton-blockchain/TEPs/blob/master/text/0062-nft-standard.md

    А также проверьте мой код такта https://github.com/howardpen9/nft-template-in-тактичность

  • 0 Голоса
    1 Сообщения
    7 Просмотры

    В мире NFT обычно в цепочке хранится только ссылка на изображение, а сам файл изображения хранится где-то в другом месте. Возможно, это может привести к проблеме "гниения ссылок", когда файл удаляется, оставляя владельца NFT практически ни с чем.

    И это приводит к вопросу: если вы хотите создать TON NFT в 2023 году, есть ли для вас предпочтительный способ хранения изображений? Насколько я понимаю, варианты таковы:

    Есть платный хостинг, но он работает только до тех пор, пока за него платят * Есть сервисы хостинга изображений, такие как Imgur, но они кажутся мне недостаточно надежными * Есть GitHub, который кажется несколько надежным, но хостинг изображений не является его основной целью * Есть хранилище TON, но Я слышал, что это не поддерживается (пока?) популярной торговой площадкой Getgems * Есть IPFS, но это экзотика * Можно просто использовать NFTS с помощью инструмента GetGems и думать "хостинг - это не моя проблема", но это также зависимость от внешнего сервиса * Я слышал, что изображения могут быть даже хранятся по цепочке, но это разумно только для самых маленьких

    Итак, вариантов много, у каждого есть свои недостатки, и выбрать трудно. Итак, есть ли какие-нибудь рекомендации на этот счет? И какой способ самый популярный?

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

  • Как отследить сразу много TON NFT?

    TON Overflow на русском
    0 Голоса
    1 Сообщения
    7 Просмотры

    Я хотел бы отслеживать все изменения, касающиеся анонимных номеров Telegram. Они существуют как NFT, поэтому любая транзакция, такая как смена владельца, хранится в блокчейне TON, и эта информация доступна любому. Но таких NFT насчитывается 136 000, поэтому трудно отследить их все для хобби-проекта, слишком много данных. Может быть, есть какие-нибудь агрегаторы, которые позволяют вам подписаться на изменения во всей коллекции?

    Этот вопрос был импортирован из чата Telegram: <***Скрыто***

    click to show

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

  • 0 Голоса
    1 Сообщения
    7 Просмотры

    Может ли коллекция NFT на TON состоять из миллиона предметов или это слишком много? Существует ли ограничение по размеру и насколько оно велико?

    Этот вопрос был импортирован из чата Telegram: <***Скрыто***

    click to show

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

  • 0 Голоса
    2 Сообщения
    22 Просмотры

    Решено

    Хороший вопрос. По сути, вы не сможете этого сделать, если используете другой источник данных для хранения метаданных вне блокчейна TON. Это связано с тем, что команда проекта может легко манипулировать метаданными, которые включают в себя содержимое каждого NFT.

    Этот репозиторий (https://github.com/disintar/DTN/blob/main/notes/onchain-reveal.md) представляет альтернативный способ реализации сетевого метода раскрытия контента NFT, который является более прозрачным и справедливым.

    Вы также можете обратиться к коду контракта с товаром NFT для получения имени пользователя NFT на Fragment.com и команда Telegram (https://github.com/TelegramMessenger/telemint/blob/main/func/nft-item.fc).

  • 0 Голоса
    2 Сообщения
    56 Просмотры

    Решено

    Хороший вопрос! По сути, мы следим за содержанием из getgems.io , крупнейшая торговая площадка NFT на TON. Это предполагает, что мы можем использовать два конкретных адреса в качестве мертвых, аналогично тому, что мы знаем из Ethereum:

    1/ "EQD__________________________________________0vo"(https://dton.io/a/EQD__________________________________________0vo)

    2/ "EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c"(https://dton.io/a/EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c)

    Отправив NFT на эти адреса, вы потеряете к ним полный доступ, что сделает невозможным извлечение NFT.

    Важно отметить, что в настоящее время в TON нет полноценного "сжигания" или удаления NFT, как это существует в других блокчейнах. Однако план состоит в том, чтобы в будущем добавить "сжигание" в традиционном смысле к NFT на TON.

  • 0 Голоса
    4 Сообщения
    117 Просмотры

    #uptheme

  • 0 Голоса
    1 Сообщения
    14 Просмотры

    Иногда NFT используются для предоставления доступа к какому-либо эксклюзивному контенту. Допустим, есть Telegram-канал или чат, который должен быть доступен только владельцам определенных NFT. Как проверить, владеет ли новичок таким NFT? Есть ли для этой цели Telegram-бот или что-то в этом роде? Если нет, то как создать такого бота?

    Этот вопрос был импортирован из чата Telegram: <***Скрыто***

    click to show

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

  • 0 Голоса
    2 Сообщения
    35 Просмотры

    Решено

    Чтобы получить список адресов NFT в коллекции, вы можете выполнить двухэтапный процесс.

    Во-первых, вам нужно загрузить состояние контракта на сбор, а затем вызвать определенный "get-метод", который возвращает адрес каждого элемента на основе его индекса. Это позволяет вам собрать все соответствующие адреса NFT, связанные с коллекцией.

    Как только вы получите список адресов NFT, следующим шагом будет поиск соответствующих владельцев этих NFT. Это может быть достигнуто путем вызова соответствующего метода get для каждого отдельного контракта, указанного на предыдущем шаге. Поступая таким образом, вы можете собрать информацию о владельцах NFT, предоставляя представление о распределении прав собственности в коллекции.

    Следуя этому процессу, вы можете эффективно собирать исчерпывающие данные об адресах NFT и их соответствующих владельцах, что позволит вам более глубоко анализировать и понимать динамику сбора данных.

  • 0 Голоса
    2 Сообщения
    25 Просмотры

    Привет, Эммануэль, может быть, ты сможешь обратиться за помощью сюда. Как уже упоминалось, возможно, вам понадобится узел архива, так как это может быть сложным для сериализации item_id и NFT Item Address, хотя

    https://docs.ton.org/develop/dapps/asset-processing/nfts#unordered-коллекция

  • 0 Голоса
    2 Сообщения
    21 Просмотры

    Решено

    Хороший вопрос! В ТОННАХ стоимость газа при чеканке NFT одинакова, независимо от того, является ли это первая или последняя чеканка в серии. Это отличается от Solidity в мире EVM, где стоимость может варьироваться в зависимости от конкретной реализации.

    Что касается расчета стоимости, то это будет зависеть от конкретных деталей вашего развертывания, таких как цена на газ и сложность кода вашего смарт-контракта. Вы можете воспользоваться калькулятором расхода газа в тоннах (https://ton.live/gas) чтобы оценить стоимость газа для вашего развертывания.

  • [Решено] Горит ли NFT на TON?

    TON Overflow на русском
    0 Голоса
    2 Сообщения
    138 Просмотры

    Решено

    По сути, вы не можете сжечь NFT.

    Невозможно полностью стереть NFT из блокчейна. Это верно как для Ethereum, так и для TON, поскольку данные, хранящиеся в блокчейне, не могут быть удалены. Единственный доступный вариант - перевести NFT на адрес "черной дыры" или на конкретный неактивный контракт, который, по сути, блокирует NFT на неопределенный срок.

    Можете ознакомиться с моей реализацией NFT на Tact lang: https://github.com/howardpen9/nft-standard-template

  • 0 Голоса
    2 Сообщения
    9 Просмотры

    Прежде всего, сообщения в TVM (сеть TON) не позволяют нам получать доступ к данным о состоянии других контрактов таким же образом, как мы это делаем в Solidity (EVM).

    Это связано с тем, что данные для контракта могут динамически изменяться в асинхронной цепочке. Единственный способ получить доступ к данным из смарт-контракта - это отправлять сообщения, что означает просить контракт отправить данные через себя."

    Более подробная информация здесь:

    https://blog.ton.org/how-to-shard-your-ton-smart-contract-and-why-studying-the-anatomy-of-tons-jettons