Как настроить децентрализованное хранилище данных для NFT с помощью IPFS?
Однако эти ссылки хрупкие, и пользователи направляются в определенное место (с протоколом HTTP), а не на конкретный ресурс. Это означает, что контент, направляемый по ссылке, уязвим для изменения или перехода в автономный режим (из-за ошибок 404, неработающих ссылок) в любое время, что приведет к безвозвратной потере исходных активов.
При создании NFT блокчейн - отличный способ обрабатывать минт, бухгалтерский учет и неизменяемые метаданные на многочисленных узлах. В то же время становится очень сложно хранить большой объем данных в блокчейне из-за больших затрат на репликацию данных на тысячи узлов в сети. В результате необходимость хранить и защищать данные NFT вне сети знаменует начало и запуск IPFS (межпланетной файловой системы).
IPFS может помочь решить эти проблемы и обеспечить постоянство и доступность хранилища данных NFT в децентрализованной сети. Это одноранговая файловая система с контролируемой версией и протокол гипермедиа для хранения и извлечения данных. IPFS может однозначно идентифицировать каждый файл в глобальном пространстве имен для NFT, чтобы связать метаданные NFT для сохраненного цифрового актива с функцией адресации контента.
IPFS обеспечивает большую стойкость для закрепления данных по сравнению с централизованными службами, такими как Dropbox или Google Drive.
В статье обсуждается, как IPFS дополняет новый способ постоянного, постоянного и децентрализованного хранения данных NFT, отвечая на важные вопросы, изложенные ниже.
Что такое 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 также помогают в дедупликации блоков.
Как лучше всего хранить данные NFT в IPFS?
Учитывая популярность NFT, важно использовать следующие передовые практики для связывания и хранения данных NFT в IPFS.
1. Различные типы ссылок IPFS для разных сценариев использования.
Существуют разные способы обращения к данным в IPFS, подходящие для разных случаев использования. Некоторые из них перечислены ниже.
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.
ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi
URI IPFS - это форма канонического представления ссылки IPFS, указывающей на файл или каталог. Вы можете создать IPFS URI, добавив к строке CID префикс статической строки ipfs: //. IPFS URI должен использоваться для связи вашего смарт-контракта с любыми внешними данными, хранящимися в IPFS, включая любые метаданные, которые описывают и контекстуализируют токен. Также рекомендуется использовать IPFS URI в структурированных метаданных NFT при связывании с различными медиаресурсами, хранящимися в IPFS. Также возможно включить имена файлов в компонент пути в IPFS URI. Например, если вы храните метаданные токена в IPFS, завернутые в каталог, ваш URI может выглядеть так:
ipfs://bafybeibnsoufr2renqzsh347nrx54wcubt5lgkeivez63xvivplfwhtpym/metadata.json
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
Как обращаться с контентом в различных ситуациях?
Разработчики должны использовать разные форматы ссылок в зависимости от типа контекста:
ipfs://bafybeibnsoufr2renqzsh347nrx54wcubt5lgkeivez63xvivplfwhtpym/metadata.json
Важно создать URI IPFS перед преобразованием каждого токена и размещением его в полной цепочке URI. Это указывает на то, что интерфейсы смарт-контрактов требуют URI, а схема ipfs: // URI позволяет любому приложению видеть, что данные остаются доступными с 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
Установите параметр 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 и гарантировать бессрочное хранение контента.