Learning Platform
Глоссарий Troubleshooting
Урок 05.03 · 18 мин
Продвинутый
NFTCollection PatternFactorySBTContract Deployment

NFT Collection Pattern и Factory Contracts

NFT на TON: Collection + Item

NFT на TON используют тот же sharded pattern, что и Jetton:

NFT Collection Architecture
NFT Collection (Master)
Item #0
Item #1
Item #9999

Сравнение: ERC-721 vs TON NFT

АспектERC-721 (Ethereum)TON NFT
StorageВсе tokenID→owner в одном контрактеКаждый Item = отдельный контракт
TransferОдин вызов transferFrom()2-3 сообщения (async)
EnumerationtokenOfOwnerByIndex() — on-chainOff-chain indexer (Tonscan)
RoyaltyERC-2981 (необязательно)Встроено в Collection
ScalabilityОграничено одним контрактомКаждый Item в своём шарде

Factory Pattern

Factory Contract — контракт, который деплоит другие контракты. Collection — это factory для Items.

Общий Factory Pattern

// Factory Contract
recv_internal(msg) {
  if (op == op::create_child) {
    // 1. Подготовить initial data для child
    let init_data = pack_child_data(msg.params);
    
    // 2. Вычислить state_init (code + data)
    let state_init = pack_state_init(child_code, init_data);
    
    // 3. Вычислить адрес child (deterministic!)
    let child_address = calc_address(state_init);
    
    // 4. Отправить deploy message
    send(child_address, gas, body, state_init);
    
    // 5. Обновить registry (если нужно)
    self.child_count += 1;
  }
}

Use Cases для Factory Pattern

FactoryChildПример
Jetton MasterJetton WalletПервое получение токена → deploy wallet
NFT CollectionNFT ItemMint → deploy item
DEX RouterLiquidity PoolСоздание пары → deploy pool
Lending MarketUser PositionПервый deposit → deploy position
Multisig FactoryMultisig WalletСоздание кошелька → deploy multisig

SBT (Soulbound Token)

SBT — не-передаваемый токен (Soulbound). Та же архитектура Collection + Item, но transfer запрещён:

SBT vs NFT:
├── Deploy: одинаковый (Collection → Item)
├── Ownership: одинаковый (Item.owner)
├── Transfer: [NO] ЗАПРЕЩЁН для SBT
├── Burn: [OK] только owner может burn
└── Use case: сертификаты, репутация, KYC-токены

Design Insight

SBT — пример, как один паттерн (Collection + Item) адаптируется для разных use cases просто изменением transfer policy. Код item-контракта одинаковый, но transfer handler в SBT возвращает ошибку.

Batch Minting: массовый deploy

Минтинг 10,000 NFT за одну транзакцию невозможен (~255 messages limit). Используйте chain of batches:

Batch Minting Pattern:

Tx 1: Collection deploys Items #0-254 + self-msg("continue from 255")
Tx 2: Collection deploys Items #255-509 + self-msg("continue from 510")
...
Tx 40: Collection deploys Items #9745-9999

Total: ~40 транзакций для 10,000 NFT
Gas: ~40 × 255 × deploy_cost ≈ 100+ TON
WARNING

Batch mint = дорого

10,000 NFT mint = ~100+ TON в gas. Альтернатива: lazy minting — Item деплоится только при первом claim/purchase, не при создании коллекции. Экономит gas creator-у, переносит cost на buyer-а.

Design Patterns Summary

Sharding Patterns на TON
Pattern
Когда
Примеры
Master-Child
Factory
Lazy Deploy
Registry
Проверка знанийKnowledge check
ОтветAnswer

Проверьте понимание

Результат: 0 из 0
Аналитический
Вопрос 1 из 2. Creator хочет минтить 10,000 NFT. TVM ограничивает ~255 outbound messages на транзакцию. Какой паттерн использовать?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 5