Cashu — відкритий протокол e-cash: цифрових токенів, які випускає емітент, або mint. Часто вони представляють суми в біткоїнах; внести або вивести кошти можна, наприклад, через Lightning Network. Користувач контролює токени, а не біткоїн-ключі емітента, від співпраці якого й далі залежить.
Уявімо, що Анна надсилає Петру токен Cashu в приватному повідомленні. Вона не публікує транзакцію Bitcoin у блокчейні, а передає дані, які Петро може погасити у відповідного емітента. Токен може містити один чи кілька доказів (Proof). Це записи даних, кожен із яких містить, зокрема, суму, секретне значення й підпис емітента. Cashu — спільний протокол, а не єдиний сервіс зі спільним резервом. Важливі емітент, грошова одиниця та набір ключів підпису. Сума в sats означає дрібні одиниці біткоїна; те саме число в іншій одиниці має інший зміст. Токени одного емітента не приймаються автоматично іншим. Для тих, кого цікавить формат: V4 використовує компактне двійкове кодування CBOR і містить докази лише одного емітента. [1] [2] [9]
Анна може залишити собі копію звичайного токена без додаткових умов витрачання. Тому Петру потрібен swap: його гаманець передає старі докази емітенту й отримує нові, із секретами, яких Анна не знає. Емітент робить старі входи недійсними. Саме успішний обмін не дає Анні витратити ту саму копію ще раз. Перевірки стану недостатньо. UNSPENT означає, що немає запису про обробку чи витрачання; це не резервування для Петра. PENDING — обробка триває, SPENT — доказ уже погашений. Не публікуйте токен як квитанцію: власник придатної копії може встигнути використати її першим. [3] [5]
Blind Signature, сліпий підпис, допомагає відокремити випуск токена від подальшого використання. Гаманець створює секрет, приховує його математичне представлення й просить емітента підписати його. Потім прибирає засліплення. За самим токеном, поданим до погашення, емітент не повинен визначити попередній запит на випуск. Проте приховано не все: різні номінали мають різні ключі, тож емітент знає категорії випущених значень. Метод називається BDHKE та працює на кривій secp256k1. Для розуміння платежу не треба обчислювати точки кривої; важливо знати, який саме зв’язок захищає ця математика. [1]
Необов’язкове розширення NUT-12 додає DLEQ — математичний доказ, що підпис створено тим самим приватним ключем, якому відповідає публічний ключ емітента. Маючи необхідні супровідні дані, Петро може перевірити підпис без звернення до емітента. Це не показує, чи вже витрачено іншу копію, чи відповідає сервіс і чи достатньо в нього резервів біткоїна. Якщо DLEQ додано, специфікація вимагає його перевірки гаманцем. Утім, перевірка підпису не замінює завершеного swap. Counterparty risk, ризик невиконання оператором зобов’язань, залишається. [7]
Петро може захотіти оплатити запит через Lightning Network замість отримання нових токенів. Така операція називається melt. Спершу гаманець запитує пропозицію: потрібну суму й одиницю, строк дії та можливий резерв на комісії. Можуть додатися й комісії за входи. Потім він передає докази, а емітент здійснює зовнішній платіж. HTTP 200 означає успішну обробку вебзапиту, але не обов’язково оплату. PENDING усе ще означає «обробляється», а PAID повідомляє про успіх. Гаманець має простежити кінцевий результат і відповідне підтвердження обраного способу оплати. [4]
Емітент може змінити набір ключів підпису. active=false означає, що старий набір більше не випускає нових токенів; саме по собі це не забороняє приймати старі докази як входи. Інше значення має необов’язкове final_expiry: остаточний строк, після якого специфікація вже не вимагає від емітента погашення токенів із цього набору. Не плутайте ці ситуації. input_fee_ppk — також ставка за окремий вхід, а не просто відсоток суми переказу. Ставки всіх використаних доказів додають, суму ділять на 1000 і лише потім округлюють комісію вгору до цілих одиниць. Наприклад, для набору ключів з одиницею sat 3 входи зі ставкою 100 ppk дають суму 300; після ділення й округлення комісія становить 1 sat. Однакові суми платежів можуть коштувати по-різному через кількість доказів або різні набори ключів. [2]
Сліпий підпис не прибирає час платежу, суми чи дані мережевого з’єднання. Навіть спосіб запиту нових номіналів може щось підказати емітенту. NUT-03 радить упорядковувати запитані значення за зростанням, щоб порядок зайвий раз не розкривав поділ на платіж і решту. Повторні запити відправника про стан переданих токенів також можуть полегшити його зв’язування з одержувачем. Cashu дає інструменти для приватнішого обігу грошей; це не означає, що кожен застосунок у будь-якій ситуації автоматично приховує всі зв’язки. [3] [5]
Відновлення має відповідати гаманцю й емітенту. NUT-13 описує повторне отримання секретів токенів і коефіцієнтів засліплення із seed, початкового секрету, набору ключів та лічильника. Версія набору 01 використовує HMAC-SHA256, старіша 00 — BIP32. Підписи, яких seed створити не може, отримують від емітента через NUT-09; далі перевіряють, що вже витрачено. Тож обіцянки «є Seed Phrase — відновлю все будь-де» недостатньо. Перш ніж покладатися на гаманець, перевірте, як створити резервну копію й відновити гаманець, а також випробуйте невелике виведення. Копія не змусить зниклого емітента відповісти й не поповнить його резерви. [8] [6]
Для повної картини прочитайте також Fedimint, Chaumian eCash, Blind Signature, Lightning Network, Counterparty risk, Satoshi. На цю статтю також посилаються Chaumian eCash, Blind Signature, Fedimint, Fiduciary Media.