Чому створення NFT на TON відрізняється від EVM-підходу?
TON — архітектурно інший блокчейн. Якщо ви звикли працювати з Solidity та EVM, де NFT — це запис у маппінгу контракту, то тут кожен токен — самостійний смарт-контракт. Це змінює все: деплой, mint, transfer і навіть прості операції на кшталт лістингу на маркетплейсі. Ми, наша команда, спеціалізуємося на TON з самого запуску основної мережі. За 7+ років досвіду в блокчейні та понад 50 випущених NFT-колекцій на Ethereum і TON ми набили руку на таких проектах. Працюємо під ключ: аналітика, розробка контрактів, mint-сайт, інтеграція з маркетплейсами. Ми також надаємо послуги з інтеграції NFT TON з маркетплейсами та аудиту смарт-контрактів TON. Сертифіковані інженери гарантують якість коду. Оцінимо ваш проект безкоштовно — просто напишіть.
Архітектура TEP-62
Collection та Item контракти
Колекція на TON складається з двох типів контрактів: NFT Collection contract та NFT Item contract. Collection зберігає owner_address, next_item_index, content (метадані колекції), nft_item_code (код для деплою item контрактів). При mint деплоїть новий NFT Item contract через internal message.
Item контракт кожного токена зберігає: index, collection_address, owner_address, individual_content. Адреса item-контракту обчислюється детерміновано з collection_address та index через stateInit:
Код обчислення stateInit
cell calculate_nft_item_state_init(int item_index, cell nft_item_code) { cell data = begin_cell() .store_uint(item_index, 64) .store_slice(my_address()) .end_cell(); return begin_cell() .store_uint(0, 2) .store_dict(nft_item_code) .store_dict(data) .store_uint(0, 1) .end_cell(); } Це дозволяє обчислювати адресу будь-якого NFT off-chain, що важливо для індексаторів та маркетплейсів.
Процес передачі NFT
Transfer NFT на TON — це відправка internal message від поточного власника до NFT Item контракту з operation code transfer. Item контракт змінює owner_address та опціонально відправляє ownership_assigned notification новому власнику. Ця асинхронна модель вимагає уважного проектування черг повідомлень:
if (op == op::transfer()) { slice new_owner = in_msg_body~load_msg_addr(); slice response_destination = in_msg_body~load_msg_addr(); throw_unless(401, equal_slices(sender_address, owner)); owner = new_owner; save_data(); send_msg(new_owner, 0, op::ownership_assigned(), ...); } На відміну від EVM, де transferFrom — синхронна операція, на TON transfer — це async message. Новий власник отримає сповіщення через наступний блок. Це впливає на логіку маркетплейсів: лістинг та delisting вимагають обробки async confirmation.
Зберігання метаданих
TON NFT metadata зберігається у двох форматах: on-chain (TL-B encoded прямо в контракті) та off-chain (URL на JSON файл). Для колекцій з generative metadata типовим є snake encoding URL:
Cell content = begin_cell() .store_uint(0x01, 8) .store_slice("https://ipfs.io/ipfs/bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy3w4z6/") .end_cell() Individual content зберігає суфікс (наприклад, 123.json), колекція зберігає base URL. get_nft_data() getter об'єднує їх для повного URI. Формат JSON ідентичний EVM: name, description, image, attributes. Зберігання на IPFS працює так само — різниця лише у способі передачі URI.
Скільки коштує mint на TON і як зекономити?
Кожен mint — це деплой нового контракту, що коштує дорожче ніж EVM SLOAD. На TON деплой одного NFT Item коштує близько 0.05 TON. При batch mint 10 000 токенів одразу — це 500 TON лише на storage fees. Це конкретна цифра, яку варто враховувати.
Оптимізація: lazy mint — NFT Item деплоїться при першому transfer або явному claim, що економить до 50% витрат. На нашому проекті з 10 000 NFT застосування lazy mint дозволило зменшити витрати на 50% та прискорити розгортання. Альтернатива — попередній деплой з розподілом по батчах із затримкою між блоками. Завдяки шардінговій архітектурі TON дозволяє mint-ити 10 000 NFT за один блок, що в 20 разів швидше, ніж на Ethereum.
Як задеплоїти NFT-колекцію за 4 кроки
- Підготовка метаданих: згенеруйте JSON файли для кожного токена (name, description, image, attributes) та завантажте на IPFS.
- Розробка контрактів Collection та Item на FunC з підтримкою TEP-62 та TEP-64. Використовуйте перевірені шаблони з token-contract.
- Деплой Collection контракту на testnet через TEP-62. Вкажіть owner_address, nft_item_code, content metadata.
- Mint токенів: відправте internal message з operation code deploy_nft_item для кожного індексу. Використовуйте batch mint для групи токенів, щоб знизити навантаження.
Вибір мови для продакшну
| Критерій | FunC | Tact |
|---|---|---|
| Рівень | Низький, явне управління пам'яттю | Високий, ближче до TypeScript |
| Зрілість | Продакшн-контракти, багато аудитів | Екосистема молода |
| Продуктивність | Максимум | Незначно нижче |
| Рекомендуємо для продакшну | Так | Тільки для малих проектів |
Для продакшн-колекцій ми використовуємо FunC з перевіреними шаблонами. Tact спрощує прототипування, але потребує додаткового аудиту.
Що входить у результат
- Смарт-контракти Collection та Item на FunC (TEP-62, TEP-64, TEP-66)
- Скрипти деплою через ton/core та @ton/ton
- Метадані у форматі TEP-64 (on-chain або off-chain з IPFS)
- Mint dApp з TonConnect (опціонально)
- Повна документація з інтеграції та управління
- Підтримка протягом 30 днів після запуску
Процес роботи та терміни
| Етап | Тривалість |
|---|---|
| Аналітика | 0.5-1 день |
| Розробка контрактів (FunC) | 3-4 дні |
| Mint-сайт (опціонально) | 1-2 дні |
| Деплой на testnet/mainnet та інтеграція з маркетплейсами | 1-2 дні |
| Разом | 5-7 днів |
Наші інженери проводять аудит смарт-контрактів TON з використанням формальної верифікації та статичного аналізу. Сертифіковані спеціалісти гарантують якість. Зв'яжіться з нами, щоб обговорити вашу колекцію: Telegram або пошта.







