PłatnościSubskrypcje

Przegląd

Program Delegacji Subskrypcji umożliwia deweloperom pozwolenie użytkownikom na autoryzację przyszłych transferów tokenów z ich portfeli z wyraźnymi limitami. Jest zaprojektowany do płatności cyklicznych, subskrypcji, rozliczeń handlowych i innych przepływów, w których użytkownik nie powinien podpisywać ręcznie każdego transferu.

Cel

Konta tokenów Solana mogą zatwierdzić inny autorytet do przenoszenia tokenów, ale każde konto tokenu może mieć tylko jeden zatwierdzony autorytet na raz. To utrudnia bezpieczne wspieranie przez jeden portfel kilku ustaleń wydatkowania dla tego samego tokenu, takich jak miesięczna subskrypcja, stały limit wydatków i umowa rozliczeniowa z handlowcem.

Ten program rozwiązuje to poprzez nadanie każdej parze (user, token mint) kontrolowany przez program Autorytet Subskrypcji. Konto tokenu użytkownika zatwierdza ten autorytet jednokrotnie. Program następnie sprawdza każdy żądany transfer względem oddzielnego rekordu, który definiuje, kto może pobierać środki, ile może pobrać i kiedy autoryzacja wygasa lub się resetuje.

Autorytet Subskrypcji nie może przenosić środków samodzielnie. Transfer kończy się sukcesem tylko wtedy, gdy pasuje do jednej z aktywnych autoryzacji użytkownika.

Identyfikator Programu

De1egAFMkMWZSN5rYXRj9CAdheBamobVNubTsi9avR44

Identyfikator programu jest zadeklarowany w program/src/lib.rs. Lokalne przepływy pracy Surfpool instalują program pod tym kanonicznym adresem.

Modele Delegacji

Program obsługuje trzy modele autoryzacji:

ModelCel
Delegacja stałaPozwól innemu portfelowi lub usłudze wydać do ustalonej kwoty całkowitej, opcjonalnie do czasu wygaśnięcia.
Delegacja cyklicznaPozwól innemu portfelowi lub usłudze wydać do limitu, który resetuje się co okres, np. codziennie, co tydzień lub co miesiąc.
Plan subskrypcjiPozwól handlowcowi opublikować warunki rozliczeniowe, które użytkownicy mogą zaakceptować, następnie zezwól zatwierdzonym podmiotom na obciążanie subskrybentów w każdym okresie rozliczeniowym.

Obsługiwane tokeny

Obsługuje wszystkie minty zarówno z SPL Token, jak i Token-2022.

W przypadku mintów Token-2022 ze skonfigurowanym TransferHook, program przekazuje konta hook minta (program hook, PDA ExtraAccountMetaList, dodatki) do TransferChecked CPI przy każdym delegowanym transferze, dzięki czemu polityka hook jest egzekwowana. SDK rozwiązuje je za Ciebie:

  • Klient pluginu (transferFixed, transferRecurring, transferSubscription) — dołączany automatycznie.
  • Budowanie ręczne — wywołaj resolveTransferHookAccounts, przekaż transferHookAccounts.

Zdarzenia On-Chain

Program emituje zdarzenia on-chain za pośrednictwem self-CPI, dzięki czemu indeksery i aplikacje mogą śledzić aktywność. Wszystkie zdarzenia są zarejestrowane w opublikowanym IDL, więc wygenerowane klienty mogą je dekodować. Emitowane zdarzenia to:

  • FixedTransferEvent, RecurringTransferEvent i SubscriptionTransferEvent — jedno na każdy delegowany transfer. Każde zawiera zaliczone receiverTokenAccount; SubscriptionTransferEvent zawiera również puller.
  • SubscriptionCreatedEvent, SubscriptionCancelledEvent i SubscriptionResumedEvent — cykl życia subskrypcji. SubscriptionCreatedEvent zawiera payer.
  • PlanUpdatedEvent — emitowane po aktualizacji planu.

Wersjonowanie

Rekordy należące do programu zawierają pole wersji. Umożliwia to programowi aktualizację danych kont w czasie bez naruszania działania istniejących użytkowników. Strategia migracji obsługuje:

  • Leniwa aktualizacja w miejscu
  • Jawna instrukcja migracji
  • Cofnięcie i odtworzenie jako fallback

Współtwórcy

Projekt jest utrzymywany przez współtwórców repozytorium solana-program/subscriptions.

Status Audytu

Program został poddany audytowi przez Cantina. Status audytu, bazowy commit, commit z zweryfikowanymi poprawkami oraz bieżąca nieaudytowana delta są śledzone w katalogu audits/ repozytorium.

Aplikacja Demo

Jeśli chcesz samodzielnie poeksperymentować z programem, możesz zapoznać się z przykładową aplikacją tutaj, aby zobaczyć kompleksową implementację koncepcji omówionych w tej sekcji.

Is this page helpful?

Spis treści

Edytuj stronę