ПлатежиПодписки

Обзор

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

Назначение

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

Эта программа решает данную проблему, предоставляя каждой паре (user, token mint) управляемый программой Орган подписки. Аккаунт токенов пользователя одобряет этот орган один раз. Затем программа проверяет каждый запрошенный перевод на соответствие отдельной записи, которая определяет, кто может списывать средства, сколько он может списать и когда срок действия авторизации истекает или сбрасывается.

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

Идентификатор программы

De1egAFMkMWZSN5rYXRj9CAdheBamobVNubTsi9avR44

Идентификатор программы объявлен в program/src/lib.rs. Локальные рабочие процессы Surfpool устанавливают программу по этому каноническому адресу.

Модели делегирования

Программа поддерживает три модели авторизации:

МодельНазначение
Фиксированное делегированиеПозволяет другому кошельку или сервису потратить до фиксированной общей суммы, опционально до момента истечения срока действия.
Регулярное делегированиеПозволяет другому кошельку или сервису тратить до лимита, который сбрасывается каждый период, например ежедневно, еженедельно или ежемесячно.
План подпискиПозволяет торговцу опубликовать условия выставления счетов, которые пользователи могут принять, а затем разрешает утвержденным сборщикам взимать плату с подписчиков каждый расчетный период.

Поддерживаемые токены

Поддерживает все минты как SPL Token, так и Token-2022.

Для минтов Token-2022 с настроенным TransferHook программа передаёт аккаунты хука минта (программа хука, PDA ExtraAccountMetaList, дополнительные) в CPI TransferChecked при каждом делегированном переводе, обеспечивая выполнение политики хука. SDK разрешает их автоматически:

  • Клиент плагина (transferFixed, transferRecurring, transferSubscription) — добавляется автоматически.
  • При ручной сборке — вызовите resolveTransferHookAccounts, передав transferHookAccounts.

События на блокчейне

Программа генерирует события на блокчейне через self-CPI, чтобы индексаторы и приложения могли отслеживать активность. Все события зарегистрированы в опубликованном IDL, поэтому сгенерированные клиенты могут их декодировать. Генерируемые события:

  • FixedTransferEvent, RecurringTransferEvent и SubscriptionTransferEvent — по одному на каждый делегированный перевод. Каждое содержит начисленный receiverTokenAccount; SubscriptionTransferEvent также содержит puller.
  • SubscriptionCreatedEvent, SubscriptionCancelledEvent и SubscriptionResumedEvent — жизненный цикл подписки. SubscriptionCreatedEvent содержит payer.
  • PlanUpdatedEvent — генерируется при обновлении плана.

Версионирование

Записи, принадлежащие программе, содержат поле версии. Это позволяет программе обновлять данные аккаунта со временем, не нарушая работу существующих пользователей. Стратегия миграции поддерживает:

  • Ленивое обновление на месте
  • Явную инструкцию миграции
  • Откат с отзывом и повторным созданием

Участники

Проект поддерживается участниками репозитория solana-program/subscriptions.

Статус аудита

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

Демонстрационное приложение

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

Is this page helpful?