Skip to main content

Проблема традиционных платёжных API

Stripe, LemonSqueezy, Paddle — каждый стандартный платёжный провайдер требует:
  • Адрес электронной почты (PII, ответственность по GDPR)
  • Аккаунт и пароль (уязвимы к фишингу и взлому)
  • Централизованное хранение ключей (единая точка отказа)
  • Доверие к тому, что провайдер не продаёт ваши данные
Lightning полностью меняет модель. Ваш кошелёк — это криптографическое доказательство личности. l402-kit построен именно на этом принципе.

Что мы храним — и чего не храним

ДанныеХранятсяПочему
payment_hash✅ ДаSHA-256 от preimage — уже публичен в инвойсе BOLT11
Lightning Address✅ Да (только владелец)Необходим для маршрутизации сплита 99,7%
Вызванный эндпоинт✅ ДаТребуется для вашей аналитики
preimage (секрет платежа)❌ НикогдаРаскрыл бы ключ платежа
Email❌ НикогдаНе нужен — кошелёк является удостоверением личности
Имя / IP / устройство❌ НикогдаНе собирается ни на одном уровне
Cookies / трекинг❌ НикогдаНикаких аналитических SDK, никакого отпечатка браузера

Почему payment_hash безопасно хранить

Preimage — это 32-байтный секрет, подтверждающий платёж. Его SHA-256-хэш (payment_hash) уже публично транслируется в инвойсе BOLT11 в момент его создания. Хранение хэша ничего не раскрывает — preimage никогда не попадает в нашу базу данных.
preimage  →  SHA-256  →  payment_hash  (публичен, в BOLT11)

никогда не хранится

Аутентификация: ваш кошелёк, а не пароль

Панель управления разработчика

Панель аналитики выполняет аутентификацию через LNURL-auth — тот же поток secp256k1, используемый Lightning-кошельками:
sequenceDiagram
  participant D as Dashboard
  participant W as Your Wallet
  participant S as Supabase

  D->>S: Request challenge (k1 = 32 random bytes)
  S-->>D: k1 encoded as LNURL
  D->>W: Display QR / deeplink
  W->>S: GET ?tag=login&k1&sig&key (secp256k1 signature)
  S->>S: verify(sig, k1, pubkey) — no server call
  S-->>D: JWT (Supabase session)
  D->>S: Read payments, stats (RLS enforced)
Нет пароля для фишинга. Нет токена сессии, который можно похитить с edge. JWT ограничен с помощью Row Level Security — другие pubkey ничего не видят.

Удаление данных

Только ваш кошелёк может авторизовать удаление ваших данных. Процесс:
  1. Клиент вызывает /api/lnurl-auth?lightningAddress=you@yourdomain.com
  2. Сервер возвращает одноразовый k1-вызов + LNURL
  3. Ваш кошелёк подписывает k1 своим приватным ключом secp256k1
  4. Сервер проверяет подпись — выдаёт одноразовый 64-символьный токен
  5. Клиент отправляет POST на /api/delete-data с { lightningAddress, token }
  6. Сервер немедленно аннулирует токен (защита от повторного использования) и удаляет все строки
  7. Данные уничтожены — никаких тикетов поддержки, никакого подтверждения по email
Почему это надёжно: Злоумышленник, знающий ваш Lightning Address, не сможет удалить ваши данные без вашего приватного ключа. Токен одноразовый и истекает через 10 минут.

Распределение ключей

Традиционный SaaS: одна утечка → всё раскрыто. l402-kit распределяет доверие между уровнями:
Layer          Holds                          Can do if breached
─────────────────────────────────────────────────────────────────
Cloudflare     Env secrets (Workers)          Create invoices (not read data)
Supabase       Payment rows (hashed)          See payment_hash + endpoints
               RLS policies                  Cannot bypass without service key
               Edge Functions                 Logic runs inside DB boundary
Lightning      Your private key               Never leaves your wallet
Your wallet    secp256k1 keypair              Signs challenges (offline capable)
Ни один уровень не обладает достаточными данными, чтобы выдать себя за вас, прочитать вашу личную информацию или опустошить ваш кошелёк.

Соответствие LGPD / GDPR по умолчанию

Поскольку мы не храним никакого PII, большинство обязательств по LGPD/GDPR не применяются:
  • Никаких запросов субъектов данных — нет личности, которую можно найти
  • Никаких уведомлений об утечке персональных данных — payment_hash не является персональными данными
  • Никакого согласия на cookies — нет отслеживания, нет cookies
  • Право на удаление — реализуется криптографически через LNURL-auth
Это не юридическая консультация. Но «мы не собираем это» — более сильная позиция, чем «мы собираем это и защищаем».

Платежи Lightning по умолчанию приватны

Платежи Lightning не идентифицируют плательщика в блокчейне:
  • Никакого имени, адреса, банковского счёта
  • Маршрут платежа зашифрован по принципу луковой маршрутизации (как Tor)
  • Только эмитент инвойса знает, что платёж был проведён
  • Личность плательщика никогда не раскрывается получателю
Ваши конечные пользователи оплачивают ваш API анонимно. Вы знаете, что инвойс был оплачен. Этого достаточно для обеих сторон.

Сравнение

l402-kitStripeLemonSqueezy
Требуется email
Требуется аккаунт
KYC / идентификация
Хранится PII
Метод аутентификацииsecp256k1 walletemail + passwordemail + password
Механизм удалениякриптографическое доказательствозапрос по emailзапрос по email
Нагрузка LGPD/GDPRминимальнаявысокаявысокая
Плательщик анонимен

Что это означает для ваших пользователей

Если вы строите на l402-kit:
  • Ваши пользователи никогда не передают вам свой email
  • Утечка вашей базы данных не раскрывает никаких личных данных
  • Любой AI-агент может оплатить ваш API без аккаунта и удостоверения личности
  • Пользователи, желающие удалить свои данные, делают это самостоятельно, мгновенно, с помощью своего кошелька
Это платёжный уровень, которого заслуживает Bitcoin.