Итак, в прошлой серии мы научились генерировать из своих собственных заготовок коллекцию NFT, теперь самое время задуматься о ее хранении и доставке до пользователя, а поскольку мы используем технологии децентрализации, блокчейна и всего такого, хранить и раздавать мы будем через IPFS — контентно-адресуемый, одноранговый гипермедийный протокол связи. Узлы IPFS-сети формируют распределённую файловую систему. IPFS является проектом с открытым исходным кодом, разработанным Protocol Labs при содействии open-source сообщества. Первоначально он был разработан Хуаном Бенетом (Википедия)
В общем не вдаваясь в подробности работы самой технологии, об этом можно отдельно ознакомиться в гугле поискав, скажу лишь, что благодаря этому мы можем разместить свой контент на своем компьютере или виртуальной машине (дома, в офисе, гараже, на хостинге), причем это может быть даже несколько мест, адрес папки или файла будет всегда один и тот же, если содержимое не менялось, так как адрес – это хеш от содержимого. И даже если единственный узел упадет, потом при поднятии в другом месте узла с таким же файлом или папкой пользователи снова получат к ним доступ. Это очень важное свойство, так как мы собираемся записывать информацию о местонахождении папки с нашими картинками в метадату NFT-токена и менять ее там, в случае чего, будет весьма проблематично, а иногда и не возможно в принципе.
Итак, для начала нам нужно загрузить и установить себе на компьютер (или на виртуальную машину, мы рассматриваем обычный домашний ПК с установленным Linux Debian, но алгоритм действий везде одинаковый) клиент IPFS (https://ipfs.io/), скачать клиент можно с гитхаба, выбрав версию под вашу ОС.
После установки и запуска вы должны увидеть примерно такое окно.
Теперь немного отвлечемся от установленной программы и подумаем, а что же все таки делать, если все компьютеры с файлом станут недоступны? Для этого есть сервис проксирования и кэширования, такой как Pinata Cloud (https://www.pinata.cloud/), это не их реклама (хотя было б неплохо)), но прям в интерфейсе IPFS, после регистрации в Пинате вы сможете настроить кэширование в облако и когда все компьютеры будут недоступны или слишком медленный канал будет к примеру, пользователь сможет получить ваш файл из этого облака, причем для все будет происходит одинаково, и неважно откуда он получит этот файл, так же ему не надо ничего нигде менять или вообще что-то делать, так как адрес всегда остается одинаковый, если не менялось содержимое, это кстати, тоже важно. К примеру создали папку, ее адрес внесли в контракт, все работает, потом из нее удалили или добавили в нее файл, хеш и ее адрес изменился, итог: папка недоступна по старому адресу, по этому лучше так не делать.
В общем если воспользуетесь и зарегистрируетесь на Пинате, у них там до 1Гб и доступ к API (то что нам сейчас и надо) на бесплатном тарифе, в общем я пользуюсь платным, но только потому что у меня больше 1Гб задействовано. После регистрации и выбора тарифа, заходим в раздел API Keys (он там где профиль справа сверху), создаем новый API ключ и копируем его.
Теперь возвращаемся в только что установленный IPFS Desktop, переходим в раздел Настройки, Нажимаем + Добавить сервис, выбираем там Pinata и далее в поле Secret access token вставляем наш API ключ.
Далее, переходим в раздел Файлы, справа сверху нажимаем + Импорт, Папка и выбираем сначала папку images, а затем тоже самое, только выираем папку metadata. Эти папки появились у нас после генерации коллекции скриптом из первой части, и находятся папке build. Хочу заметить, что я добавлял по 1000 файлов за раз (у меня в каждой папке по 10000 было файлов), больше почему-то зависало, разбираться времени не было, просто важно дождаться полной обработкивсех файлов и этих папок, что бы сформировался правильный хеш, он же адрес, а еще нам надо сделать что бы все это через Пинату кешировалось, по этому когда все файлы обработаются, нажимаем на … напротив имени папки, и выбираем Установить процесс, там ставим обе галочки локальный и Pinata, это нужно сделать с обеими папками. Сохраняем, и там же в меню, только у папки images … выбрать Копировать CID. Теперь нам надо заменить этот CID в каждом файле .json в папке metadata нашей коллекции. Уверен, для любой платформы найдется утилита, расскажу как я делаю это в терминале линукса, обычно VPS у провайдера работают точно так же, на линуксе естественно, а за Windows зачем нам переплачивать на виртуалке.
Для начала сразу заходим в папку build, если еще не установлен rpl пишем: sudo apt-get rpl
установили, далее переходим в папку metadata: cd metadata
и в ней уже пишем: rpl «старый_сид_images» «новый_сид_images» *.json
и во всех .json файлах заменится адрес, остальное нам менять не надо.
Старый сид можно скопировать из любого файла .json в папке в которой мы собираемся все изменять, открываем файл и находим там строчку типа:
«image»: «ipfs://QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn/1.png»,
вот именно в ней, мы и будем его заменять и из нее мы можем скопировать старый сид, он находится между ipfs:// и /1.png (номер картинки может различаться, сид папки все равно будет одинаковый). Еще нам понадобится CID от папки metadata, ее можно или пересчитать, но наверное проще будет сейчас удалить и просто заново добавить в IPFS уже сразу она будет с новым адресом, так как хеш у измененных нами .json файлов изменится. CID от папки metadata нам потребуется в следующей части, где мы будем писать и деплоить смарт-контракт, так что можно просто его сейчас записать на всякий случай. Ну и не забывайте все адреса тестировать.
Пробуйте набрать адрес ipfs://CID_папки_images или ipfs://CID_папки_metadata в браузере, к примеру для хрома у меня установлено расширение IPFS и он такие адреса сразу открывает, но можно попробовать через gateway какой-нибудь. В общем вы при переходе на адрес должны увидеть папку с картинками и папку с метадатой, если видите, то все получилось правильно и вы подготовили коллекцию к публикации в смарт-контракте, чем мы и займемся в следующей части. Оставайтесь на связи, вопросы можно задавать у нас в тг группе https://t.me/nftsoul, подключайтесь, давайте принесем NFT в массы!