Перейти к содержанию

IPFS

Материал из Malw.lol Wiki

IPFS (InterPlanetary File System) — распределённая файловая система без цензуры с бессрочным хранением данных и открытым исходным кодом, доступ к которой осуществляется через специализированные шлюзы[1] . Представляет собой что-то среднее между торрентом и облаком, а точнее является децентрализованным облаком, информация в котором распределена между узлами, а не между серверами.

Ключевые особенности

Облака — MEGA, Google Диск и все прочие подвержены цензуре, любая информация может быть удалена. Она также может быть потеряна, если случится поломка серверов или остановка сервиса. В противоположность этому, вся информация, выложенная на IPFS, остаётся там навсегда, рециркулируя по узлам сети[2].

Однако тот, кто выложил информацию на IPFS, может понести ответственность: файлы, хотя и обезличенные, сами по себе никак не шифруются. Поэтому, хотя и есть техническая возможность, хранить на IPFS запрещённую информацию крайне не рекомендуется, как и в обычных облаках. И уж тем более не стоит хранить на IPFS список паролей.

Исключением из правила невмешательства являются шлюзы; они могут налагать собственные ограничения, например чтобы компенсировать нагрузку на себя, как было с Pinata.cloud. С точки зрения сохранности загруженных данных, более надёжного хранилища не существует, что способно помочь во многих ситуациях.

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

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

Пример ссылки на файл в IPFS

Для изменения файлов используется не менее сложная система — IPNS (InterPlanetary Naming System), смысл которой заключается в том, чтобы вернуть отнятую возможность обновлять файлы, не изменяя при этом саму суть IPFS (хранить все файлы неизменными). В отличие от IPFS, ссылки IPNS, указывающие на файлы в сети, не являются вечными, имея период валидности, который пользователь назначает самостоятельно (может длиться достаточно долго, например 30 лет).

Из-за такой громоздкой структуры в IPFS/IPNS может быть трудно разобраться новичкам. Тем же, кто напротив хочет разобраться больше всех остальных, стоит установить IPFS в виде официальной программы kubo (только командная строка), позволяющей открыть и поддерживать собственный узел, а также продвинуто взаимодействовать с сетью. Существует и графический клиент, способный безлимитно загружать в IPFS файлы, но он имеет далеко не все возможности.

Пример использования

  1. Пройдите регистрацию на сайте https://web3.storage/. Бесплатный лимит в нём — 5 гигабайт, но стоит помнить, что это всего лишь консоль, предоставляющая быстрый доступ.
  2. Через https://console.web3.storage/ загрузите файл и получите его CID (bafy...). Если вам нужно загрузить несколько файлов, выбирайте загрузку директории (среди вариантов File, Directory, CAR выбираете второй). Файл будет доступен по ссылке вида https://ipfs.io/ipfs/ВашCID/НазваниеФайла, директория — то же самое, но без названия файла в конце.
  3. Для создания IPNS ссылки используйте IPNS Record Inspector & Creator и выберите create record. Сайт на момент написания статьи является очень свежей разработкой (начало 2025 года), его создатели замечательные люди. Сгенерируйте private key, обязательно сохраните его и никому не показывайте — он будет использоваться для обновления IPNS ссылки, являясь вашим паролем от неё. После его создания одновременно будет подобран публичный IPNS Name.
  4. В значении Value добавьте CID от нужного IPFS файла, а значение Validity, обозначающее срок действия IPNS ссылки, лучше завышать — сам сайт предлагает выдать ему срок, равный максимум одному году в миллисекундах, но если вы вставите туда 946684800000, то это будет ровно 30 лет.
  5. В inspect record вставьте созданный вами ранее IPNS Name, составляющий тело вашей ссылки; он должен выдать вам корректные данные о ссылке, создали ли вы её или обновили. IPNS ссылка будет иметь вид https://ipfs.io/ipns/ВашIPNSname/НазваниеФайла и способна перенаправлять на различные файлы внутри IPFS, не давая данным устаревать: вы можете сменить CID, а IPNS ссылка останется той же самой.
  6. Для обновления содержимого IPNS ссылки повторно пройдите её создание через create record, с тем условием, что теперь вы не генерируете приватный ключ, а импортируете старый. Вам нужно поменять CID от IPFS файла, а также убедиться через inspect record, что изменения применились.

Всё готово. Остальное изучение IPFS вам стоит пройти самостоятельно под различные сценарии его использования, благо на него имеется обширная документация. Самое сложное, что можно делать внутри IPFS — хостить целые сайты[3].

Примечания