Cashu to otwarty protokół e-cash ze ślepymi podpisami, często używany z Bitcoinem przez Lightning Network. Portfel przechowuje dowody wydane przez konkretną mennicę, a nie uprawnienie do podpisywania wydatków z jej rezerwy bitcoinów.
Cashu nie jest jedną wspólną mennicą. Token wskazuje emitenta, jednostkę i zestaw kluczy podpisujących; ta sama liczba nie oznacza tej samej waluty ani zobowiązania. Tokenów jednej mennicy nie można automatycznie wykupić w innej. Format V4 używa CBOR i zawiera dowody tylko jednej mennicy. [Cashu — NUT-00: Protocol and tokens] [Cashu — NUT-02: Keysets and fees] [Cashu — Project introduction]
Podstawowy protokół wykorzystuje BDHKE na secp256k1. Portfel tworzy sekret i zaślepia jego punkt, mennica go podpisuje, a portfel usuwa zaślepienie. Nominały mają odrębne klucze: mennica zna wartości wydawanych dowodów, choć nie powinna znać ich przyszłej niezaślepionej postaci. [Cashu — NUT-00: Protocol and tokens]
Zwykły bezwarunkowy token można skopiować. Odbiorca wymienia go przez swap na nowe dowody z własnymi sekretami; mennica unieważnia stare wejścia. UNSPENT to tylko chwilowy stan, nie rezerwacja dla odbiorcy. PENDING oznacza trwające przetwarzanie, a SPENT już wykorzystany dowód. [Cashu — NUT-03: Swap tokens] [Cashu — NUT-07: Token state check]
Opcjonalne NUT-12 dodaje dowód DLEQ zgodności podpisu z kluczem publicznym mennicy. Odbiorca mający odpowiednie dane może sprawdzić go offline. Nie ustali w ten sposób, czy ktoś już wydał token, czy mennica odpowiada i czy ma rezerwy. Weryfikacja offline nie zastępuje więc przyjęcia przez swap. [Cashu — NUT-12: Offline signature validation]
NUT-02 rozróżnia active=false i opcjonalne final_expiry. Nieaktywny zestaw nie emituje nowych tokenów, lecz jego dowody nadal są przyjmowane jako wejścia; po ostatecznym wygaśnięciu specyfikacja nie zobowiązuje mennicy do ich honorowania. Opłatę wejściową input_fee_ppk sumuje się według liczby i stawek dowodów, po czym zaokrągla w górę. [Cashu — NUT-02: Keysets and fees]
Przy melt portfel przekazuje dowody za płatność zewnętrzną, często przez Lightning Network. Oferta określa kwotę, jednostkę, ważność i ewentualną rezerwę na opłatę; mogą też wystąpić opłaty wejściowe. HTTP 200 ze stanem PENDING nie potwierdza płatności. Trzeba odróżnić końcowy wynik od przyjęcia żądania. [Cashu — NUT-05: Melting tokens]
Zaślepienie nie usuwa informacji o kwotach, czasie ani połączeniach sieciowych. NUT-03 zaleca sortowanie żądanych nominałów, aby kolejność nie zdradzała podziału na płatność i resztę. Zapytania nadawcy o stan przekazanych dowodów mogą ułatwić mennicy powiązanie nadawcy z odbiorcą. [Cashu — NUT-03: Swap tokens] [Cashu — NUT-07: Token state check]
NUT-13 wyprowadza sekrety i czynniki zaślepienia z seedu według zestawu kluczy i licznika. Wersja 01 używa HMAC-SHA256, starsza 00 — BIP32. Odzyskiwanie wymaga pierwotnych zestawów oraz podpisów uzyskanych przez NUT-09, a następnie sprawdzenia wydania. Bez współpracy mennicy seed nie zapewnia odzyskania podpisów ani wypłaty rezerwy. [Cashu — NUT-13: Deterministic secrets] [Cashu — NUT-09: Restore signatures]
Pełniejszy obraz uzyskasz, czytając to hasło razem z Fedimint, Chaumian eCash, Blind signature, Lightning Network, Counterparty risk, Satoshi. Do tego hasła prowadzą również odsyłacze z Chaumian eCash, Blind signature, Fedimint, Fiduciary Media.