Как настроить децентрализованное хранилище данных для NFT с помощью IPFS?

Из-за частых ограничений стоимости и места для хранения данных в блокчейне сохраняется только запись о праве собственности с метаданными, связывающими исходный контент NFT.

Однако эти ссылки хрупкие, и пользователи направляются в определенное место (с протоколом HTTP), а не на конкретный ресурс. Это означает, что контент, направляемый по ссылке, уязвим для изменения или перехода в автономный режим (из-за ошибок 404, неработающих ссылок) в любое время, что приведет к безвозвратной потере исходных активов.


При создании NFT блокчейн - отличный способ обрабатывать минт, бухгалтерский учет и неизменяемые метаданные на многочисленных узлах. В то же время становится очень сложно хранить большой объем данных в блокчейне из-за больших затрат на репликацию данных на тысячи узлов в сети. В результате необходимость хранить и защищать данные NFT вне сети знаменует начало и запуск IPFS (межпланетной файловой системы).

IPFS может помочь решить эти проблемы и обеспечить постоянство и доступность хранилища данных NFT в децентрализованной сети. Это одноранговая файловая система с контролируемой версией и протокол гипермедиа для хранения и извлечения данных. IPFS может однозначно идентифицировать каждый файл в глобальном пространстве имен для NFT, чтобы связать метаданные NFT для сохраненного цифрового актива с функцией адресации контента.


IPFS обеспечивает большую стойкость для закрепления данных по сравнению с централизованными службами, такими как Dropbox или Google Drive.


В статье обсуждается, как IPFS дополняет новый способ постоянного, постоянного и децентрализованного хранения данных NFT, отвечая на важные вопросы, изложенные ниже.

  • Что такое IPFS и как он может хранить данные NFT?
  • Как лучше всего хранить данные NFT в IPFS?

Что такое IPFS и как он может хранить данные NFT?

IPFS - это протокол гипермедиа с открытым исходным кодом, который позволяет одноранговое (p2p) децентрализованное хранение данных посредством:

  • Упрощенный обмен
  • Сопротивление цензуре
  • Легкий поиск

IPFS позволяет перемещать данные по сети и находить то, что вы просите, используя адрес содержимого с расширенными функциями управления версиями файлов и структурами данных.


Следующие три фундаментальных шага, основанные друг на друге, составляют целую экосистему IPFS.

Шаг 1. Адресация контента посредством уникальной идентификации

После того, как пользователи загружают данные NFT в IPFS, они получают хэш содержимого IPFS, известный как CID.


CID - это уникальные идентификаторы или адреса данных NFT, используемые для ссылки на контент, независимо от того, как и где он хранится. CID создаются из содержимого. Таким образом, использование CID для ссылки на данные NFT предотвращает такие проблемы, как битые ссылки.


IPFS следует определенным предпочтениям в структуре данных, соглашениям и IPLD от необработанного контента до адреса IPFS, который однозначно идентифицирует контент в сети IPFS. На следующем шаге исследуется, как ссылки между контентом встраиваются в этот адрес контента через структуру данных DAG.

Шаг 2. Хранение контента и связывание через группы DAG

IPFS обеспечивает децентрализованное хранение и извлечение данных для долговременного сохранения данных NFT. Уровень постоянства в IPFS использует криптографические доказательства, чтобы гарантировать долговечность и постоянство данных NFT с течением времени.


Когда дело доходит до связывания данных NFT, IPFS использует Merkle DAG, оптимизированный для представления каталогов и файлов. Merkle DAG можно структурировать множеством способов.


Для создания представления Merkle DAG ваших сохраненных данных NFT IPFS изначально разбивает их на  блоки. Разделение его на блоки подразумевает, что разные части файла могут поступать из разных источников и быстро аутентифицироваться. Merkle DAG также предоставляет еще одну важную функцию: если у вас есть два похожих файла, части разных Merkle DAG используются для ссылки на одно и то же подмножество данных.


Это приводит к более удобной передаче различных версий больших наборов данных (таких как исследования геномики или данные о погоде). Причина в том, что вам нужно переносить только недавно измененные части, а не каждый раз создавать совершенно новые файлы. Таким образом, все данные NFT связываются и представляются через Merkle DAG.

Шаг 3. Получение контента через распределенные хеш-таблицы (DHT)

IPFS использует распределенную хеш-таблицу, чтобы определить, на каких узлах размещаются данные NFT. Хеш-таблица представляет собой базу данных ключей к значениям. Эта хэш-таблица разделена между всеми одноранговыми узлами в распределенной сети, где libp2p обрабатывает подключение и взаимодействие между одноранговыми узлами.


Libp2p запрашивает DHT, чтобы узнать и найти, какие одноранговые узлы хранят каждый из блоков, составляющих данные NFT. После нахождения контента вам необходимо подключиться к этому контенту (данным NFT) и получить его.


IPFS использует модуль Bitswap для этой цели, чтобы устанавливать соединения с одноранговыми узлами и отправлять список желаний (список всех блоков, содержащих требуемые данные NFT). После получения блоков запрошенного контента их можно проверить путем хеширования и сравнения их CID. Эти CID также помогают в дедупликации блоков.


  • Как Libp2p поддерживает мультиплексирование соединений? Установить соединение и поддерживать его расходы непросто. Благодаря IPFS Libp2p обеспечивает мультиплексирование соединений между одноранговыми узлами с высокой степенью совместимости и устраняет необходимость в настройке нескольких соединений для каждой службы по-разному. Экосистема IPFS создает идентификаторы CID для контента и связывает его, генерируя IPLD Merkle DAG. Контент извлекается с помощью DHT, предоставляемого libp2p, а затем пользователь может загрузить его, используя мультиплексное соединение. Все это хранится в середине стека, связанного уникальными идентификаторами.

Как лучше всего хранить данные NFT в IPFS?

Учитывая популярность NFT, важно использовать следующие передовые практики для связывания и хранения данных NFT в IPFS.

1. Различные типы ссылок IPFS для разных сценариев использования.

Существуют разные способы обращения к данным в IPFS, подходящие для разных случаев использования. Некоторые из них перечислены ниже.


  • CID (идентификатор содержимого) CID - это уникальный идентификатор с самоописанием для любого содержимого, независимо от того, где он хранится. Они хранятся и передаются по сети в компактной двоичной форме. При отображении для пользователей они представлены в виде строк случайных символов следующим образом.
bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

Чтобы включить CIDv1 при использовании командной строки IPFS, добавьте флаг –cid-version = 1 при выполнении следующего кода:

ipfs add --cid-version=1 ~/no-time-to-explain.jpeg added bafkreigg4a4z7o5m5pwzcfyphodsbbdp5sdiu5bwibdw5wvq5t24qswula no-time-to-explain.jpeg

При использовании javascript для метода ipfs.add используются следующие команды:

const cid = await ipfs.add({ content }, { cidVersion: 1, hashAlg: sha2-256})

При добавлении ваших данных в IPFS мы получаем CID. Затем становится проще подготовить метаданные токена и создать токен в цепочке блоков. Также важно преобразовать CID в URI IPFS для связывания нашего контента из смарт-контракта или внутри наших метаданных NFT.

URI (универсальный идентификатор ресурса) Универсальный идентификатор ресурса IPFS URI используется для указания конкретного содержимого в заданном контексте. Схема URI определяет контекст (добавляется к URI в виде префикса, за которым следует: //). Здесь схема URI IPFS - это просто IPFS. Пример полного URI IPFS приведен ниже.
ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

URI IPFS - это форма канонического представления ссылки IPFS, указывающей на файл или каталог. Вы можете создать IPFS URI, добавив к строке CID префикс статической строки ipfs: //. IPFS URI должен использоваться для связи вашего смарт-контракта с любыми внешними данными, хранящимися в IPFS, включая любые метаданные,  которые описывают и контекстуализируют токен. Также рекомендуется использовать IPFS URI в структурированных метаданных NFT при связывании с различными медиаресурсами, хранящимися в IPFS. Также возможно включить имена файлов в компонент пути в IPFS URI. Например, если вы храните метаданные токена в IPFS, завернутые в каталог, ваш URI может выглядеть так:

ipfs://bafybeibnsoufr2renqzsh347nrx54wcubt5lgkeivez63xvivplfwhtpym/metadata.json
URL-адрес шлюза
HTTP Шлюзы HTTP предлагают возможность взаимодействия для устаревших браузеров, которые не могут разрешить URI IPFS изначально. Эти ссылки используются на уровне представления приложения без сохранения в блокчейне или внутри метаданных NFT, например:
https://dweb.link/ipfs/bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

Браузеры со встроенной поддержкой IPFS могут определять ссылки шлюза и разрешать контент с помощью собственных протоколов IPFS. Здесь под встроенной поддержкой понимается расширение браузера IPFS Companion или встроенная поддержка, предоставляемая Brave. Таким образом, они автоматически  извлекают CID из таких ссылок и загружают данные из IPFS в соответствии с предпочтениями пользователя. Ссылки шлюза являются средой для обеспечения взаимодействия, но они не должны быть основной ссылкой на ваши данные NFT в IPFS. Пока данные NFT хранятся в IPFS, URI IPFS остается доступным. Связь шлюза может потерпеть неудачу, если оператор теряет связь. Следовательно, для разработчиков очень важно при использовании ссылок шлюза гарантировать, что шлюз проходит правильные соглашения об URL-адресах. В этом случае допустимы следующие структуры URL-адресов.

https://gateway-host.tld/ipfs/cid/path/to/subresource
https://cidv1b32.ipfs.gateway-host.tld/path/to/subresource

Как обращаться с контентом в различных ситуациях?

Разработчики должны использовать разные форматы ссылок в зависимости от типа контекста:

  • В цепочке Смарт-контракт NFT должен возвращать URI IPFS для активов и метаданных, привязанных к каждому токену, следующим образом:
ipfs://bafybeibnsoufr2renqzsh347nrx54wcubt5lgkeivez63xvivplfwhtpym/metadata.json

Важно создать URI IPFS перед преобразованием каждого токена и размещением его в полной цепочке URI. Это указывает на то, что интерфейсы смарт-контрактов требуют URI, а схема ipfs: // URI позволяет любому приложению видеть, что данные остаются доступными с IPFS.
Приложение
Рекомендуется связывать содержимое IPFS через URI IPFS и URL-адрес шлюза HTTP для приложений, ориентированных на пользователя. Можно сгенерировать ссылки шлюза из CID или IPFS в соответствии с требованиями.
Например, URL-адрес шлюза HTTP, нацеленный на общедоступный шлюз на dweb.link, представлен как:

https://dweb.link/ipfs/bafybeigvafaks2bvivtv46n2z7uxszpvl25jhvzc6dbhnjjgjkbeia5jta/nft.mp4

Теперь, используя CID в качестве поддомена, эта же ссылка также представлена ​​как:

https://bafybeigvafaks2bvivtv46n2z7uxszpvl25jhvzc6dbhnjjgjkbeia5jta.ipfs.dweb.link/nft.mp4

Обе ссылки соответствуют следующему каноническому URI IPFS:

ipfs://bafybeigvafaks2bvivtv46n2z7uxszpvl25jhvzc6dbhnjjgjkbeia5jta/nft.mp4

2. Связывание метаданных с активами

Метаданные - неотъемлемая часть ценности NFT. Большинство NFT требуют структурированных метаданных для определения свойств токена. Поэтому важно хранить метаданные в виде объекта JSON, закодированного в байтовую строку UTF-8.

Например, метаданные JSON для NFT представлены как:

{
name: No time to explain!
description: I said there was no time to explain, and I stand by that.
image: ipfs://bafybeict2kq6gt4ikgulypt7h7nwj4hmfi2kevrqvnx2osibfulyy5x3hu/no-time-to-explain.jpeg
}

В зависимости от конкретных случаев использования существует несколько способов структурировать метаданные для NFT. В приведенном выше примере используется стандарт ERC-721. Использование стандартов   ERC-721  и  ERC-1155  может помочь вам просматривать NFT с помощью стандартных кошельков и инструментов, таких как обозреватели блоков.


Лучше использовать IPFS URI для ссылки на изображения, видео и другие медиа, а не хранить URL-адрес HTTP-шлюза. Если вам нужно использовать URL-адреса шлюза, их можно создать на уровне представления вашего приложения.


Добавление медиаресурсов в IPFS позволяет вам создавать метаданные, чтобы знать CID изображений и других медиа для справки. Метаданные, хранящиеся в IPFS, обеспечивают доступность для сохранения стоимости активов. Ниже приведены шаги, позволяющие разработчикам включать имена файлов в свои ссылки (что полезно для взаимодействия с пользователем) и обеспечивать возможность ссылаться на метаданные и ресурсы и получать к ним доступ независимо друг от друга.

Шаги для доступа к связанным метаданным:

Шаг 1.  Создайте отдельные каталоги для активов и метаданных.


Шаг 2:  Добавьте активы во вновь созданные каталоги.


Шаг 3:  Добавьте каталог активов в IPFS и запишите его CID.


Шаг 4.  Создайте метаданные в своем каталоге со ссылочными активами CID для создания URI IPFS. Убедитесь, что URI состоит из имени файла CID и актива каталога.


Шаг 5:  Теперь продолжайте добавлять каталог метаданных в IPFS и запишите его CID.


Шаг 6.  Создайте URI IPFS с указанным CID и сохраните его, чтобы создать запись о праве собственности в цепочке.

После выполнения вышеуказанных шагов метаданные станут доступны по адресу:

ipfs://{metadata-directory-CID}/metadata-filename

и актив становится доступен по адресу:

ipfs://{asset-directory-CID}/asset-filename
Как сохранить имена файлов в каталогах IPFS?
При добавлении данных в IPFS можно сохранить удобочитаемые имена файлов, поместив их в каталог.

Установите параметр wrapwithDirectory в javascript при вызове ipfs.add следующим образом: В javascript вы можете установить параметр wrapWithDirectory при вызове ipfs.add:

const cid = await ipfs.add(
{ path: metadata.json, content: aJsonString },
{ wrapWithDirectory: true }
)

Добавляя файлы в каталог, команда ipfs.add возвращает CID объекта каталога. Вы также можете создать полный URI IPFS для файла, добавив символ «/» после CID, за которым следует имя файла, как показано в следующем примере.

ipfs://bafybeibnsoufr2renqzsh347nrx54wcubt5lgkeivez63xvivplfwhtpym/metadata.json

3. Сохранение и доступность данных 

Когда данные NFT хранятся в IPFS, пользователи могут получить их с любого узла IPFS, содержащего его копию. Это упрощает передачу данных и сводит к минимуму нагрузку на один сервер. При получении данных пользователь сохраняет их локальную копию, чтобы помочь другим пользователям, если они им понадобятся позже. Эти копии являются временными и могут быть удалены до тех пор, пока пользователь не захочет закрепить данные.


Закрепление CID указывает IPFS, что данные имеют решающее значение и должны быть удалены, когда узел приближается к пределу хранения. При использовании IPFS для создания платформы для хранения крайне важно закрепить данные NFT на узлах IPFS. Надежность и высокая доступность этих узлов гарантируют, что они работают без простоев и обеспечивают лучшую производительность. Внедрение кластера IPFS также может помочь вам управлять своим облаком узлов IPFS, которые координируют свои действия, чтобы закрепить данные вашей платформы и предложить их пользователям.


Делегирование инфраструктуры службам удаленного закрепления обеспечивает избыточное высокодоступное хранилище для данных IPFS без привязки к поставщику . Когда ваша платформа растет, можно переключаться между закрепляющими службами или переходить на другую инфраструктуру, поскольку данные на основе IPFS адресуются с помощью CID, независимо от местоположения.

Дорожная карта

IPFS привлекла к себе внимание благодаря своей стойкости, постоянству и функциям закрепления. Растущая потребность в системах управления данными и хранилищах с простым поиском и защищенными идентификаторами CID позволяет пользователям применять лучшие практики IPFS.


С IPFS создатели NFT могут немедленно получить преимущества децентрализованного, неизменяемого и проверяемого хранилища. Создатели могут беспрепятственно помещать контент в IPFS, чтобы создавать неизменяемые ссылки на метаданные NFT и гарантировать бессрочное хранение контента.


Вы также хотите начать работу с IPFS для хранения данных NFT и использовать его потенциал для репликации данных и безопасного обмена данными?

Свяжитесь с нашими экспертами, чтобы внедрить децентрализованное хранилище данных для NFT.

Поддержите блог, перечислив небольшие чаевые

Если у вас нет кошелька MetaMask, вы можете получить его здесь
Made on
Tilda