Минтинг NFT с мобильного устройства — задача с подвохом. Нужно загрузить медиа в IPFS, сгенерировать корректные метаданные ERC-721 и вызвать смарт-контракт, при этом на телефоне возможны обрывы связи и нехватка памяти. Мы реализовали более 15 проектов с интеграцией NFT, включая интеграцию с крупными маркетплейсами, и накопили практические решения этих проблем.
Наш опыт охватывает сети Ethereum, Polygon и Solana, работу с IPFS через Pinata и NFT.Storage, а также настройку push-уведомлений о статусе транзакций. Lazy minting позволяет отложить уплату газа до момента продажи, экономя до 90% затрат по сравнению с обычным минтингом — это в 10 раз выгоднее для создателя. В этой статье разберём технические детали каждого этапа, чтобы вы могли избежать типичных ошибок и сделать минтинг удобным для пользователя.
Как выполнить минтинг NFT с мобильного устройства?
Минтинг в мобильном приложении проходит три этапа: выбор и загрузка медиафайла, генерация метаданных ERC-721 и отправка транзакции в блокчейн. Каждый этап имеет свои подводные камни.
Загрузка медиа в IPFS
Для хранения медиа используем децентрализованное хранилище IPFS. На iOS применяем PHPickerViewController (доступен с iOS 14), на Android — PhotoPicker (Android 13) с fallback на GetContent. Файл отправляется на API Pinata или NFT.Storage. Приведём пример загрузки на Swift:
Пример загрузки на iOS Swift
// iOS — загрузка файла в Pinata IPFS func pinFileToIPFS(fileURL: URL, fileName: String) async throws -> String { var request = URLRequest(url: URL(string: "https://api.pinata.cloud/pinning/pinFileToIPFS")!) request.httpMethod = "POST" request.setValue("Bearer \(pinataJWT)", forHTTPHeaderField: "Authorization") let boundary = UUID().uuidString request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") var body = Data() body.append("--\(boundary)\r\nContent-Disposition: form-data; name=\"file\"; filename=\"\(fileName)\"\r\n") body.append("Content-Type: image/jpeg\r\n\r\n") body.append(try Data(contentsOf: fileURL)) body.append("\r\n--\(boundary)--\r\n") request.httpBody = body let (data, _) = try await URLSession.shared.data(for: request) let response = try JSONDecoder().decode(PinataResponse.self, from: data) return "ipfs://\(response.ipfsHash)" } Для больших файлов (видео от 100 МБ) настраиваем фоновую загрузку через URLSession с background-конфигурацией на iOS и WorkManager с setExpedited на Android. Отображаем прогресс в виде полосы и уведомлений. Средняя комиссия газа для минтинга на Ethereum ~0.05 ETH, на Polygon — менее $0.01, что делает второй вариант намного дешевле.
Формирование метаданных ERC-721
После загрузки медиа необходимо сгенерировать JSON‑метаданные по стандарту OpenSea. Пример на Kotlin:
// Android — формирование NFT metadata JSON data class NftMetadata( val name: String, val description: String, val image: String, // ipfs://QmXxx... (CID загруженного файла) val externalUrl: String?, val attributes: List<NftAttribute> ) data class NftAttribute( val traitType: String, val value: String ) // Пример результата val metadata = NftMetadata( name = "My NFT #1", description = "Created via mobile app", image = "ipfs://QmImageHash...", attributes = listOf( NftAttribute("Background", "Blue"), NftAttribute("Rarity", "Rare") ) ) Этот JSON загружается в IPFS, и полученный URI передаётся в функцию mint смарт‑контракта. Мы автоматизируем генерацию атрибутов — пользователь может добавлять пары «ключ‑значение» в интерфейсе.
UI формы минтинга
Форма содержит поля: название, описание, медиа, атрибуты. Preview NFT в реальном времени. Процесс разбит на три шага с индикацией:
- Загрузка медиа в IPFS
- Загрузка метаданных
- Транзакция минтинга
Прогресс отображается на каждом шаге. Ошибки (например, нехватка газа) обрабатываются с понятными сообщениями.
Почему lazy minting выгоден для авторов?
Высокие комиссии за газ — главный барьер для создателей. Lazy minting позволяет отложить запись токена в блокчейн до момента первой продажи. Вместо немедленной транзакции создатель подписывает EIP-712 ваучер, который содержит цену и URI метаданных. Покупатель при покупке активирует минтинг и оплачивает газ.
Сравним два подхода:
| Характеристика | Обычный минтинг | Lazy minting |
|---|---|---|
| Оплата газа | Платит создатель (upfront) | Платит покупатель при покупке |
| Риск для создателя | Газ может оказаться дороже, чем выручка | Минимальный — газ только при продаже |
| Скорость появления в блокчейне | Немедленно | Только после покупки |
| Сложность интеграции | Базовая | Требуется генерация и проверка ваучеров (EIP-712) |
Мы рекомендуем lazy minting для маркетплейсов и коллекций с низким объёмом продаж. Экономия газа может достигать 90%.
Процесс работы над минтингом в мобильном приложении
- Анализ — определяем требования к NFT: стандарт (ERC‑721/1155), сеть (Ethereum, Polygon, Solana), способы оплаты газа.
- Проектирование — разрабатываем архитектуру: выбор IPFS‑провайдера, схему метаданных, интеграцию с кошельком (WalletConnect или встроенный).
- Реализация — пишем модуль минтинга: выбор медиа, загрузка в IPFS, генерация метаданных, вызов контракта. Для lazy minting добавляем подпись и проверку ваучеров.
- Тестирование — проверка на тестовой сети (Goerli, Mumbai), эмуляция обрывов связи, тесты с разными размерами файлов.
- Деплой — публикация в App Store и Google Play, интеграция с серверной частью (если требуется).
Этапы и сроки:
| Этап | Длительность |
|---|---|
| Анализ | 1 день |
| Проектирование | 1-2 дня |
| Реализация | 3-5 дней |
| Тестирование | 1-2 дня |
| Деплой | 1 день |
Что входит в результат
- Исходный код модуля минтинга (iOS Swift, Android Kotlin)
- Интеграция с IPFS (Pinata или NFT.Storage)
- Документая по смарт‑контракту и API
- Настройка push-уведомлений для статуса транзакции
- Руководство по администрированию (замена провайдера, обновление контракта)
- Поддержка в течение 30 дней после сдачи
Сроки
Проект занимает от 5 до 10 рабочих дней в зависимости от сложности: базовый минтинг — 5 дней, с lazy minting — до 8 дней, с интеграцией нескольких сетей — до 10 дней. Свяжитесь с нами для точной оценки вашего кейса.
Мы гарантируем совместимость с правилами App Store и Google Play, а также полную документацию для самостоятельного развития. Закажите разработку минтинга — получите готовый модуль за 5-10 дней.







