Настройка хранения метаданных NFT на Arweave
IPFS — не постоянное хранилище. Файл на IPFS существует, пока хотя бы один нод держит его в pin. Платный pinning через Pinata или NFT.Storage стоит денег — и если проект перестаёт платить, метаданные и изображения исчезают. «Ваш» NFT становится токеном, указывающим на 404.
Arweave решает это иначе: разовая плата за постоянное хранение. Экономика протокола рассчитана на хранение данных 200+ лет за счёт storage endowment механики. Платишь один раз — файл существует навсегда.
Как работает загрузка на Arweave
Загрузка через Bundlr Network (теперь Irys) — это L2 поверх Arweave. Основные преимущества: мгновенное подтверждение загрузки (99.9% уверенности сразу, финализация на Arweave через несколько минут-часов), поддержка оплаты в ETH/MATIC/SOL помимо AR токена, batch загрузка тысяч файлов через SDK.
import Irys from "@irys/sdk";
const irys = new Irys({
url: "https://node1.irys.xyz",
token: "ethereum",
key: process.env.PRIVATE_KEY
});
// Загружаем одно изображение
const response = await irys.uploadFile("./images/1.png", {
tags: [{ name: "Content-Type", value: "image/png" }]
});
const permanentUrl = `https://arweave.net/${response.id}`;
Для коллекции 10k токенов: загружаем сначала все изображения, получаем массив Arweave transaction IDs, затем формируем JSON metadata с "image": "https://arweave.net/TxId", загружаем metadata, получаем базовый URI.
Стоимость хранения одного изображения (~50KB PNG) на момент написания — $0.001-0.005. Вся 10k коллекция обходится в $10-50 в зависимости от размера файлов. Это разовый платёж.
Структура URI для смарт-контракта
После загрузки metadata возможны два подхода к базовому URI:
Вариант 1 — Irys manifest (рекомендуется для коллекций): загружаем все файлы как папку через irys.uploadFolder(), получаем один manifest ID. Тогда baseURI = "https://arweave.net/ManifestId/" и tokenURI(1) возвращает "https://arweave.net/ManifestId/1". Удобно, но manifest немного медленнее в финализации.
Вариант 2 — индивидуальные txId: каждый metadata JSON имеет собственный txId, они записываются в маппинг mapping(uint256 => string) private _tokenURIs. Более гибко (можно обновить отдельный токен до reveal), но дороже по газу.
Для стандартной генеративной коллекции с reveal — Вариант 1 + reveal через setBaseURI(manifestId).
Ориентиры по срокам и процессу
Настройка хранения для готовой коллекции (изображения + metadata JSON уже сгенерированы) — 1 день:
- Настройка Irys SDK, пополнение баланса в ETH
- Batch загрузка изображений с проверкой integrity
- Генерация metadata JSON с arweave.net URLs
- Загрузка metadata, получение manifest ID
- Обновление
baseURIв контракте (если уже задеплоен)
Если metadata нужно генерировать с нуля (трейты не определены) — это отдельная задача.
Стоимость фиксирована по объёму работы + стоимость AR storage (оплачивается клиентом напрямую или включается в смету).







