Cashu はブラインド署名を使うオープンな電子現金プロトコルで、Lightning Network を介して Bitcoin と併用されることが多くあります。ウォレットが持つのは特定のミントが発行した証明であり、そのビットコイン準備金を動かす署名権限ではありません。
Cashu は単一の共通ミントではありません。トークンには発行者、単位、署名鍵セットが対応します。同じ数値でも同じ通貨や債務とは限りません。あるミントのトークンを別のミントで自動的に換金できるわけではありません。V4 形式は CBOR を使い、単一ミントの証明を格納します。 [Cashu — NUT-00: Protocol and tokens] [Cashu — NUT-02: Keysets and fees] [Cashu — Project introduction]
基本プロトコルは secp256k1 上の BDHKE を使います。ウォレットは秘密を生成して対応する点をブラインド化し、ミントが署名した後、ブラインド化を解除します。額面ごとに鍵が異なるため、ミントは発行する証明の額面を知りますが、将来のブラインド化解除後の形は知るべきではありません。 [Cashu — NUT-00: Protocol and tokens]
通常の無条件トークンはコピーできます。受取人は swap により、自分の秘密を持つ新しい証明へ交換し、ミントは古い入力を無効にします。UNSPENT は一時点の状態であり、受取人への予約ではありません。PENDING は処理中、SPENT はすでに使用済みの証明を表します。 [Cashu — NUT-03: Swap tokens] [Cashu — NUT-07: Token state check]
任意の拡張 NUT-12 は、署名がミントの公開鍵に対応することを示す DLEQ 証明を追加します。必要なデータがあれば受取人はオフラインで検証できます。しかし、その間に誰かがトークンを使ったか、ミントが応答するか、準備金があるかは分かりません。オフライン検証は swap による受領の代わりにはなりません。 [Cashu — NUT-12: Offline signature validation]
NUT-02 は active=false と任意の final_expiry を区別します。非アクティブな鍵セットは新規発行を停止しますが、その証明は引き続き入力として受け付けられます。最終期限後は、仕様上ミントに履行義務がなくなります。入力手数料 input_fee_ppk は証明の数と各料率に応じて合計し、切り上げます。 [Cashu — NUT-02: Keysets and fees]
melt では、ウォレットが証明を渡して外部支払いを依頼します。Lightning Network がよく使われます。見積もりは金額、単位、有効期限、必要に応じた手数料準備額を指定し、入力手数料が加わる場合もあります。PENDING 状態の HTTP 200 は支払い完了の確認ではありません。最終結果とリクエスト受理を区別する必要があります。 [Cashu — NUT-05: Melting tokens]
ブラインド化で金額、時刻、ネットワーク接続の情報が消えるわけではありません。NUT-03 は、支払いと釣り銭の区分が順序から漏れないよう、要求する額面を整列することを勧めています。送信者が渡した証明の状態を問い合わせると、ミントが送信者と受取人を結び付けやすくなる場合があります。 [Cashu — NUT-03: Swap tokens] [Cashu — NUT-07: Token state check]
NUT-13 は鍵セットとカウンターに従い seed から秘密とブラインド化係数を導出します。バージョン 01 は HMAC-SHA256、旧 00 は BIP32 を使います。復元には元の鍵セットと NUT-09 で得る署名、その後の使用状態確認が必要です。協力するミントがなければ、seed は署名の復元も準備金の引き出しも保証しません。 [Cashu — NUT-13: Deterministic secrets] [Cashu — NUT-09: Restore signatures]
理解を深めるには、この項目とあわせて次もお読みください Fedimint, Chaumian eCash, Blind signature, Lightning Network, Counterparty risk, Satoshi. 次の項目からも参照されています Chaumian eCash, Blind signature, Fedimint, Fiduciary Media.