Интеграция с NFT.Storage

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Интеграция с NFT.Storage
Простая
~2-3 рабочих дня
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1221
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1163
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    855
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1056
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    828

Интеграция с NFT.Storage

NFT.Storage — это сервис от Protocol Labs, который предоставляет бесплатное хранение NFT-данных на IPFS и Filecoin. Технически: вы загружаете файл через API, получаете CID (Content Identifier), данные реплицируются на Filecoin для долгосрочного хранения. В отличие от централизованных серверов, контент адресуется по хэшу содержимого — если файл изменился, изменился и CID.

Для NFT-проектов это решает конкретную проблему: tokenURI не должен указывать на https://myproject.com/metadata/1.json — этот сервер может отключиться, а NFT станет пустым. IPFS URI вида ipfs://Qm.../1.json работает независимо от того, существует ли сайт проекта.

Как устроено хранение

IPFS — адресация по содержимому

IPFS использует content addressing: CID вычисляется из хэша содержимого файла. ipfs://QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/image.png — это конкретный файл с конкретным хэшем. Изменить содержимое без изменения CID невозможно — это гарантия immutability для NFT-метаданных.

NFT.Storage реализует два API: старый REST API (v1) и новый w3up клиент (v2). Для новых проектов рекомендуем w3up — лучшая производительность на больших коллекциях.

Filecoin для persistence

IPFS сам по себе не гарантирует хранение: если ни один узел не пинит файл, он исчезает. NFT.Storage автоматически создаёт Filecoin deals для загруженных данных — децентрализованное долгосрочное хранение с cryptographic proof of storage. Это отличие от простого IPFS pinning сервиса (Pinata, Infura).

Лимиты и ограничения

NFT.Storage ввёл ограничения в 2024 году: бесплатный тир больше не доступен для новых регистраций через основной сайт. Protocol Labs переключил фокус на web3.storage с платными планами. Для существующих проектов — данные остаются доступными. Для новых — альтернативы: Pinata (платный), 4EVERLAND, или self-hosted IPFS ноды.

Для production NFT-проектов рекомендуем гибридный подход: основное хранение + репликация на 2-3 pinning сервисах.

Интеграция через JavaScript SDK

Загрузка коллекции

import { NFTStorage, File } from 'nft.storage'

const client = new NFTStorage({ token: process.env.NFT_STORAGE_KEY })

// Загрузка одного NFT с изображением и метаданными
const metadata = await client.store({
  name: 'Collection #1234',
  description: 'Description here',
  image: new File([imageBuffer], 'image.png', { type: 'image/png' }),
  attributes: [
    { trait_type: 'Background', value: 'Blue' }
  ]
})

console.log(metadata.url) // ipfs://Qm.../metadata.json
console.log(metadata.data.image.href) // ipfs://Qm.../image.png

Батч загрузка для 10K коллекции

Для больших коллекций — storeDirectory для загрузки всего директория одним CID:

const files = images.map((buffer, i) => 
  new File([buffer], `${i}.png`, { type: 'image/png' })
)
const imagesCid = await client.storeBlob(new Blob([/* directory */]))

На практике удобнее использовать Pinata pinFileToIPFS с batch upload — более надёжный API для тысяч файлов.

Верификация загрузки

После загрузки важно верифицировать доступность через public gateway перед установкой baseURI в контракте. Используем несколько gateway: ipfs.io/ipfs/{CID}, cloudflare-ipfs.com/ipfs/{CID}, gateway.pinata.cloud/ipfs/{CID}. Если файл доступен через 2 из 3 gateway в течение 30 минут — загрузка успешна.

Лучшие практики

Разделяйте изображения и метаданные по CID. Загружаем изображения отдельно, получаем CID директории изображений. Затем генерируем JSON метаданные с image: ipfs://{imagesCid}/{tokenId}.png и загружаем их. Изменить метаданные без изменения CID нельзя — это гарантия для покупателей.

Храните CID в контракте как константу. После финального reveal baseURI должен быть immutable. Если setBaseURI доступен owner'у навсегда — это trust assumption. Рассмотрите renounceOwnership для функции смены URI после reveal.

IPFS gateway в tokenURI. Кошельки и маркетплейсы ожидают ipfs:// схему, не https://gateway.ipfs.io/. Возвращайте ipfs://{CID}/{tokenId}.json — каждый клиент использует свой gateway.

Процесс работы

Настройка (несколько часов). Регистрация аккаунта, получение API ключа, тест загрузки одного файла.

Разработка upload скрипта (1 день). Батч загрузка изображений и метаданных, верификация CID, генерация финального baseURI.

Интеграция с контрактом. Установка baseURI после верификации доступности на gateway.

Ориентиры по срокам

Интеграция как часть разработки NFT-коллекции — 1-2 дня. Отдельно — несколько часов для опытной команды.