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

IPFS: доступ по оплате и ключам

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

Мы не проверяем реальные покупки и не выдаём ключи. Модель использует собственный счёт на 30 000 сатоши и подготовленный контейнер выпуска. Серверные операции и сетевые вызовы остаются описанными исходниками.

Право существует в приложении

Сервис определяет, что конкретная учётная запись вправе получить конкретную редакцию. Основанием может быть принятая оплата, подписка или редакционный доступ. Это решение хранится отдельно от содержания файла и его CID.

Публичный идентификатор не включает имя покупателя. Если файл открыт, знающий его адрес и располагающий байтами участник может читать его без запроса к нашему серверу. Скрытие кнопки загрузки на сайте не блокирует независимое получение.

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

Сопоставление счёта

Для нашей библиотеки принятый счёт создаёт право reader → course 17 → permitted editions. Денежное наблюдение сохраняется отдельно: выход на 30 000, подтверждения и версия политики. Выдача права имеет собственный идемпотентный идентификатор, чтобы повторный обход истории не создал вторую независимую запись.

{
  "entitlementId": "access-library-17-001",
  "readerId": "LOCAL_READER_ID",
  "courseId": "17",
  "releasePolicy": "edition-1-and-corrections",
  "sourceInvoice": "library-17-001"
}

Это внутренняя прикладная структура. Она не публикуется в IPFS и не записывается в контракт с личными сведениями. Идентификатор читателя обозначен меткой; реальных данных в учебном наборе нет.

Если оплата поздняя или спорная, решение о выдаче может ожидать отдельного разбора. CID материалов при этом не меняется. Неопределённость денег относится к праву сервиса, а не к содержанию уже построенного выпуска.

Токен как основание

Владение NFT или иным токеном может использоваться для проверки права в отдельной модели. Сервер должен знать сеть, экземпляр контракта, правило владения и свежесть наблюдения. Одна подпись адреса не доказывает владение нужным токеном, а присланный браузером ответ не является достаточным основанием.

После передачи токена право может измениться согласно политике. Однако старый владелец не забывает ранее полученный ключ или открытый текст. Если продукт обещает доступ только текущему владельцу, это обещание относится к новым выдачам и обновлениям в контролируемой границе.

Публичная история токена также раскрывает определённые связи. Для обычной учебной библиотеки серверное право по принятому счёту может быть проще и приватнее. Токенизация не является обязательной частью использования проверяемых выпусков.

Подпись и сессия

Если читатель входит с подписью кошелька, сообщение должно иметь корректный домен, назначение, nonce и срок по выбранному протоколу. Сервер создаёт сессию после собственной проверки. Нельзя попросить произвольную транзакционную подпись Bitcoin и использовать её как универсальный пароль кабинета.

Проверка владения ключом и проверка оплаты также различаются. Читатель может платить из обслуживающей платформы или другого кошелька. Не стоит автоматически связывать аккаунт с одним из входов платежа. Счёт создаётся в авторизованной сессии, а получатель определяется серверным назначением.

Секрет расшифрования передаётся по защищённому разрешённому маршруту. Он не помещается в общий QR оплаты, URL публичного шлюза или событие контракта. Иначе механизм ограничения выдачи становится формальностью.

Отзыв будущего доступа

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

Если новый выпуск использует новый ключ, прежний ключ не открывает его при правильной схеме. Так можно ограничить будущие обновления. Но старый контейнер сохраняет доступность для обладателей старого секрета. Эти свойства нужно объяснить в условиях продукта точно.

Изменение active в CourseCatalog относится к объявлению издателя. Оно не является автоматическим удалением серверных прав читателя, если приложение не установило такую связь. Базовый контракт и коммерческая политика не должны молча подменять друг друга.

Оплата и выдача относятся к разным журналам

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

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

Для следующей редакции библиотека может определить, входит ли она в прежнюю покупку или требует другого основания. Сам факт знания CID первой редакции не решает это бизнес-правило. Публичный манифест описывает материалы, а серверная модель задаёт область права. Пользователю полезно показать курс, редакцию и возможность будущих обновлений до оплаты, чтобы кнопка «получить» не скрывала разные продукты.

Запрос ключа выполняется в защищённой серверной границе с подходящей сессией и проверкой полномочий. Браузер не сообщает серверу произвольный номер оплаченного заказа как достаточное доказательство. Если кошелёк служит основанием личности, подпись проверяется по отдельному протоколу с собственным контекстом; она не является автоматически платежом. Для нашего выпуска итоговая схема связывает подтверждённое решение по счёту, конкретную запись права и управляемую выдачу ключа, честно оставляя копирование уже раскрытого материала за пределами гарантированного отзыва.

Понятный интерфейс

Карточка показывает, какую редакцию можно получить, проверено ли её объявление и где находится доступная копия. Если право известно, но хранитель недоступен, это ошибка доставки, а не отказ оплаты. Если право отсутствует, доступный публичный CID не меняет решение сервера о выдаче ключа.

После перезагрузки страница восстанавливает сессию и право по серверу. Она не доверяет локальному флагу paid=true. Локальная проверенная копия может позволять читать уже полученный материал, но не предоставляет новое право на будущие редакции автоматически.

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

Оглавление серии