Відкрити застосунок
Усі дописи

Як live.tips поводиться з грошима (ніяк)

Немає жодного балансу live.tips, жодного графіка виплат і жодної комісії. Ось архітектура, яка робить ці три твердження нудними, а не сміливими.

Будь-яка скарбничка для чайових може написати «0% комісії» на своїй головній сторінці. Цікавіше запитання — що програмному забезпеченню довелося б зробити, щоб почати брати свою частку, і скільки з цього ти зміг би побачити.

Для live.tips відповідь така: його довелося б переписати з нуля. Це не обіцянка про наші наміри, це опис того, куди йдуть гроші.

Гроші ніколи не проходять через нас

Коли шанувальник торкається суми на картці, платіж створюється для твого акаунта Stripe, осідає на твоєму балансі Stripe і виплачується за твоїм графіком Stripe. Єдина комісія — це стандартна комісія Stripe за обробку, яку Stripe стягує з тебе напряму, точно так само, як і тоді, якби ти інтегрував Stripe самостійно.

На нашому боці немає жодної облікової книги, бо нічого записувати. Ми не могли б відщипнути відсоток, не побудувавши спершу те, що тримає гроші, — а такого немає.

Це справедливо незалежно від того, увійшов ти чи ні. Вхід змінює шлях даних, а не шлях грошей, і наступні два розділи чесно пояснюють, як саме.

Твої ключі, і де вони живуть

Під час налаштування ми просимо обмежений ключ API Stripe, а не робочий секретний ключ — такі ми відхиляємо навідріз. «Обмежений» означає, що ключ може робити дві речі: створювати посилання на чайові за принципом «плати скільки хочеш» і стежити за надходженням чайових. Він не може прочитати твій баланс, запустити виплати, оформити повернення коштів чи торкнутися даних клієнтів. Якби він завтра витік, радіус ураження — одне посилання на чайові.

Без акаунта цей ключ ніколи не залишає твій пристрій. Він лежить у власному сховищі ключів твого пристрою й надсилається лише на api.stripe.com через TLS. Жодного сервера live.tips на цьому шляху немає взагалі.

Коли ти входиш в акаунт, ключ переходить до нас — бо ключ, який існує лише на одному телефоні, не може обслуговувати ще й планшет на сцені. Ми шифруємо його (окремий для кожного секрету ключ AES-256, який, своєю чергою, загорнутий у Google Cloud KMS) і зберігаємо там, звідки його ніхто не може прочитати назад: ні інший акаунт, ні ми, зазирнувши в базу даних, ні навіть ти сам. Його розпечатують лише всередині наших функцій, використовують, щоб спілкуватися зі Stripe від твого імені, і більше ніколи не віддають на пристрій. Скажімо це прямо: вхід в акаунт ставить сервер live.tips на шлях між Stripe і твоєю історією чайових. Ніколи гроші — дані.

Сервери, і чого вони не можуть

Їх два, і обидва мінімальні.

Ретранслятор існує тому, що Revolut і MobilePay не можна керувати з браузера так, як Stripe. Їхнє увімкнення запускає жменьку функцій Firebase, які віддають твою сторінку чайових на tip.live.tips. Він зберігає публічний профіль твоєї сторінки чайових — відображуване ім'я та платіжні реквізити, які ти вирішив оприлюднити — і, для сторінки, за якою немає акаунта, не веде історії чайових: чайові чекають лише доти, доки їх не покаже твій сценічний пристрій, а все, по що ніхто не повернувся, вимітається протягом години. Він не бачить грошей і самознищується після 90 днів бездіяльності. Якщо ти користуєшся лише Stripe і ніколи не входиш в акаунт, до ретранслятора взагалі ніколи не звертаються.

Вебхук існує лише тоді, коли ти увійшов в акаунт. Оскільки твій ключ тепер живе в нас, Stripe повідомляє про кожні чайові невеликій нашій функції, яка записує їх у твою власну історію, щоб їх могли показати твої інші пристрої. Це копія події, а не копія грошей. Вона не може зрушити ні цента й може писати лише в той один акаунт, якому належить.

Жоден із серверів не може взяти собі частку, бо жоден навіть близько не стоїть біля грошей. Найбільше, на що здатен будь-який із них, — це відмовити, а налаштування лише зі Stripe без акаунта не залежить від жодного.

Акаунт, якого можна не заводити

Застосунок і далі стартує з локальним профілем на пристрої — тим самим, яким він завжди й був: твоя банка чайових, твій ключ і твоя історія чайових живуть на пристрої та більше ніде. Реєструватися немає для чого.

Вхід — через Apple, через Google або як гість — тепер можливий, і існує він заради одного: другого пристрою. Якщо планшет на сцені й телефон у кишені мають показувати той самий вечір, між ними щось має стояти, і це щось — Firestore, під ідентифікатором користувача, який можеш читати лише ти. Туди синхронізуються твої гурти, налаштування, історія чайових — і, зашифрований як вище, твій ключ Stripe. Це справжня зміна в історії про приватність, і про неї варто сказати прямо, а не чекати, доки ти натрапиш на неї сам: без акаунта жоден сервер ніколи не бачить чайових; з акаунтом їх бачить твій власний куток нашого, і саме наш вебхук записує їх туди. Це ціна другого пристрою, і платити її чи відмовитися — вирішувати тобі. Чого він не торкається ніколи, то це грошей: акаунт переносить твої дані, а не твій баланс, і частки, як і раніше, немає.

Чому не варто вірити нам на слово

Усе вищесказане можна перевірити. Кодова база має ліцензію MIT і є відкритою, а сайт — це статична збірка, яку GitHub Actions розгортає на GitHub Pages: жодної прихованої інфраструктури, нічого скомпільованого за зачиненими дверима. Відкрий вкладку мережі під час демонстраційних чайових і почитай запити. Їх менше, ніж ти очікуєш.

Ось у чому справжня обіцянка продукту. Не в тому, що нам можна довіряти, а в тому, що тобі це й не потрібно.

Усі дописи