Cashu to otwarty protokół e-cash, czyli cyfrowych tokenów emitowanych przez mennicę zwaną mintem. Często reprezentują kwoty w bitcoinach; wpłaty lub wypłaty można realizować na przykład przez Lightning Network. Użytkownik kontroluje tokeny, a nie klucze do bitcoinów mennicy, której współpraca pozostaje potrzebna.
Wyobraź sobie, że Anna wysyła Piotrowi token Cashu w prywatnej wiadomości. Nie rozsyła wtedy transakcji Bitcoin do blockchainu. Przekazuje dane, które Piotr może zrealizować w odpowiedniej mennicy. Token może zawierać jeden lub kilka dowodów (Proof). To zapisy danych, z których każdy zawiera między innymi kwotę, tajną wartość i podpis mennicy. Cashu jest wspólnym protokołem, a nie jednym serwisem ze wspólną rezerwą. Liczą się emitent, jednostka walutowa i zestaw kluczy podpisujących. Kwota w sats oznacza drobne jednostki bitcoina; ta sama liczba w innej jednostce znaczy coś innego. Tokeny jednej mennicy nie są automatycznie przyjmowane w drugiej. Dla zainteresowanych formatem: V4 używa zwartego kodowania binarnego CBOR i przenosi dowody jednej mennicy. [1] [2] [9]
Anna może zachować kopię zwykłego tokena bez dodatkowych warunków wydania. Piotr potrzebuje więc operacji swap: jego portfel przekazuje stare dowody mennicy i otrzymuje nowe, z sekretami nieznanymi Annie. Mennica unieważnia stare wejścia. Dopiero udana wymiana uniemożliwia Annie ponowne wydanie tej samej kopii. Samo sprawdzenie stanu nie wystarcza. UNSPENT oznacza brak zapisu o przetwarzaniu lub wydaniu; niczego nie rezerwuje dla Piotra. PENDING to przetwarzanie w toku, a SPENT oznacza wykorzystany dowód. Nie publikuj tokena jak potwierdzenia zapłaty: ktoś z użyteczną kopią może zrealizować go pierwszy. [3] [5]
Blind Signature, ślepy podpis, pomaga oddzielić emisję tokena od jego późniejszego użycia. Portfel tworzy sekret, ukrywa jego matematyczną reprezentację i prosi mennicę o podpis. Potem usuwa zaślepienie. Sama postać realizowanego tokena nie powinna pozwalać mennicy wskazać wcześniejszej prośby o emisję. Nie ukrywa to wszystkiego: poszczególne nominały mają różne klucze, więc emitent zna klasy emitowanych wartości. Metoda nosi nazwę BDHKE i korzysta z krzywej secp256k1. Do zrozumienia płatności nie trzeba obliczać punktów krzywej; ważne, jakie powiązanie chroni ta matematyka. [1]
Opcjonalne rozszerzenie NUT-12 dodaje DLEQ, matematyczny dowód, że do podpisu użyto tego samego klucza prywatnego, któremu odpowiada klucz publiczny mennicy. Z potrzebnymi dodatkowymi danymi Piotr może sprawdzić podpis bez kontaktu z mennicą. Nie dowie się jednak, czy inna kopia została już wydana, czy serwis odpowiada i czy ma wystarczające rezerwy bitcoinów. Jeśli DLEQ dołączono, specyfikacja nakazuje portfelowi go zweryfikować. Sprawdzenie podpisu nadal nie zastępuje ukończonego swapu. Counterparty risk, ryzyko niewywiązania się operatora z zobowiązań, pozostaje. [7]
Piotr może chcieć opłacić żądanie Lightning Network zamiast otrzymywać kolejne tokeny. Taka wymiana nazywa się melt. Portfel najpierw prosi o wycenę: potrzebną kwotę i jednostkę, termin ważności oraz ewentualną rezerwę na opłaty. Mogą dojść opłaty za wejścia. Dopiero potem przekazuje dowody, a mennica wykonuje zewnętrzną płatność. HTTP 200 oznacza poprawnie obsłużone żądanie internetowe, niekoniecznie zapłatę. PENDING nadal znaczy „w toku”, a PAID informuje o sukcesie. Portfel musi śledzić wynik końcowy i ewentualne potwierdzenie właściwe dla danej metody. [4]
Mennica może zmienić zestaw kluczy podpisujących. active=false oznacza, że stary zestaw nie emituje już nowych tokenów; samo to nie wyklucza przyjmowania dawnych dowodów jako wejść. Czym innym jest opcjonalne final_expiry: ostateczny termin, po którym specyfikacja nie zobowiązuje już mennicy do wymiany tokenów z tego zestawu. Nie myl tych sytuacji. input_fee_ppk jest ponadto stawką za wejście, a nie po prostu procentem wysyłanej kwoty. Stawki wszystkich użytych dowodów sumuje się, dzieli sumę przez 1000 i dopiero wtedy zaokrągla opłatę w górę do całych jednostek. Na przykład dla zestawu kluczy z jednostką sat 3 wejścia po 100 ppk dają sumę 300; po podzieleniu i zaokrągleniu opłata wynosi 1 sat. Równe kwoty płatności mogą kosztować inaczej przy różnej liczbie dowodów lub różnych zestawach kluczy. [2]
Ślepy podpis nie usuwa czasu płatności, kwot ani danych połączenia. Nawet sposób zamawiania nowych nominałów może dać mennicy wskazówkę. NUT-03 zaleca uporządkować żądane wartości rosnąco, aby ich kolejność nie zdradzała niepotrzebnie podziału na płatność i resztę. Powtarzane przez nadawcę zapytania o przekazane tokeny również mogą ułatwić powiązanie go z odbiorcą. Cashu oferuje narzędzia do bardziej prywatnego obiegu pieniędzy; nie oznacza to, że każda aplikacja w każdej sytuacji automatycznie ukrywa wszystkie związki. [3] [5]
Odzyskiwanie musi odpowiadać używanemu portfelowi i mennicy. NUT-13 opisuje odtwarzanie sekretów tokenów i czynników zaślepiających z seedu, czyli sekretu początkowego, zestawu kluczy oraz licznika. Wersja zestawu 01 używa HMAC-SHA256, a starsza 00 — BIP32. Podpisy, których seed nie potrafi stworzyć, pobiera się z mennicy przez NUT-09; później trzeba sprawdzić, co już wydano. Samo „mam Seed Phrase, więc wszystko odzyskam wszędzie” nie wystarcza. Zanim zaczniesz polegać na portfelu, sprawdź kopię i odzyskiwanie oraz małą wypłatę. Kopia nie zmusi znikającej mennicy do odpowiedzi ani nie uzupełni jej rezerw. [8] [6]
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.