Cashu adalah protokol terbuka untuk e-cash: token digital yang diterbitkan oleh mint. Token sering mewakili jumlah bitcoin; penyetoran atau penarikan dapat dilakukan, misalnya, melalui Lightning Network. Pemegang mengendalikan token, bukan kunci bitcoin milik mint, dan tetap bergantung pada kerja samanya.
Bayangkan Anna mengirim token Cashu kepada Petr melalui pesan pribadi. Ia tidak menyiarkan transaksi Bitcoin ke blockchain. Ia menyerahkan data yang dapat ditebus Petr pada mint terkait. Satu token dapat memuat satu atau beberapa bukti (Proof). Bukti ini berupa rekaman data yang antara lain berisi jumlah dana, nilai rahasia, dan tanda tangan mint. Cashu adalah protokol bersama, bukan satu layanan dengan cadangan bersama. Penerbit, satuan mata uang, dan kumpulan kunci penandatangan semuanya penting. Jumlah dalam sats menunjukkan satuan kecil bitcoin; angka sama dalam satuan lain berarti hal berbeda. Token suatu mint tidak otomatis diterima mint lain. Bagi pembaca yang tertarik pada formatnya, V4 memakai pengodean biner ringkas CBOR dan memuat bukti dari satu mint saja. [1] [2] [9]
Anna bisa tetap menyimpan salinan token biasa tanpa syarat pembelanjaan tambahan. Karena itu Petr memerlukan swap: dompetnya menyerahkan bukti lama ke mint dan menerima bukti baru dengan rahasia yang tidak diketahui Anna. Mint membatalkan input lama. Pertukaran yang berhasil inilah yang mencegah Anna memakai salinan yang sama lagi. Pemeriksaan status saja tidak cukup. UNSPENT berarti mint tidak mencatat pemrosesan atau pembelanjaan; status itu tidak mencadangkan apa pun untuk Petr. PENDING berarti sedang diproses, sedangkan SPENT berarti bukti sudah ditebus. Jangan memublikasikan token seolah-olah tanda terima: siapa pun yang mendapat salinan yang dapat dipakai mungkin menebusnya lebih dahulu. [3] [5]
Blind Signature, atau tanda tangan buta, membantu memisahkan penerbitan token dari pemakaian berikutnya. Dompet membuat rahasia, menyembunyikan representasi matematisnya, lalu meminta mint menandatanganinya. Setelah itu dompet menghapus penyamaran tersebut. Mint seharusnya tidak dapat mengenali permintaan penerbitan lama hanya dari token yang ditebus. Namun tidak semuanya tersembunyi: denominasi berbeda memiliki kunci berbeda, sehingga mint tahu kelas nilai yang diterbitkan. Metodenya bernama BDHKE dan memakai kurva secp256k1. Anda tidak perlu menghitung titik kurva untuk memahami pembayaran; yang penting adalah hubungan mana yang dilindungi matematika ini. [1]
Ekstensi opsional NUT-12 menambahkan DLEQ, bukti matematis bahwa tanda tangan memakai kunci privat yang sama dengan yang bersesuaian dengan kunci publik mint. Dengan data pendamping yang diperlukan, Petr bisa memeriksa tanda tangan tanpa menghubungi mint. Itu tidak menunjukkan apakah salinan lain sudah dibelanjakan, apakah layanan merespons, atau apakah cadangan bitcoinnya cukup. Jika DLEQ disertakan, spesifikasi mewajibkan dompet memverifikasinya. Pemeriksaan tanda tangan tetap tidak menggantikan swap yang selesai. Counterparty risk, risiko operator gagal memenuhi kewajiban, tetap ada. [7]
Petr mungkin ingin membayar permintaan Lightning Network, bukan menerima lebih banyak token. Pertukaran ini disebut melt. Dompet meminta penawaran lebih dulu: jumlah token dan satuannya, masa berlaku, serta kemungkinan cadangan biaya. Biaya input juga dapat berlaku. Setelah itu dompet menyerahkan bukti dan mint melakukan pembayaran eksternal. HTTP 200 menunjukkan permintaan web berhasil ditangani, bukan selalu berarti pembayaran berhasil. PENDING masih berarti diproses, sedangkan PAID melaporkan keberhasilan. Dompet harus mengikuti hasil akhir dan konfirmasi yang sesuai dengan metode pembayaran. [4]
Mint dapat mengganti kumpulan kunci penandatangannya. active=false berarti kumpulan lama tidak menerbitkan token baru; itu sendiri tidak melarang bukti lama diterima sebagai input. Berbeda dengan final_expiry opsional: setelah tenggat akhir ini, spesifikasi tidak lagi mewajibkan mint menepati janji pencairan. Jangan menyamakan keduanya. input_fee_ppk juga merupakan tarif per input, bukan sekadar persentase jumlah kiriman. Tarif semua bukti yang dipakai dijumlahkan, hasilnya dibagi 1000, dan baru kemudian biayanya dibulatkan ke atas ke satuan utuh. Misalnya, pada kumpulan kunci dengan satuan sat, 3 input dengan tarif masing-masing 100 ppk menghasilkan jumlah 300; setelah pembagian dan pembulatan, biayanya 1 sat. Dua pembayaran bernilai sama bisa memiliki biaya berbeda jika memakai jumlah bukti atau kumpulan kunci yang berbeda. [2]
Tanda tangan buta tidak menghapus waktu pembayaran, jumlah, atau data koneksi jaringan. Bahkan cara dompet meminta denominasi baru dapat mengungkap informasi. NUT-03 menyarankan agar nilai yang diminta diurutkan dari kecil ke besar supaya urutannya tidak membocorkan pembagian pembayaran dan kembalian tanpa perlu. Pemeriksaan berulang oleh pengirim atas status token yang diserahkan juga dapat membantu menghubungkannya dengan penerima. Cashu menyediakan alat untuk peredaran uang yang lebih privat; tidak berarti setiap aplikasi dalam setiap keadaan otomatis menyembunyikan semua hubungan. [3] [5]
Pemulihan harus sesuai dengan dompet dan mint yang dipakai. NUT-13 menjelaskan cara menurunkan kembali rahasia token dan faktor pembutaan dari seed, yaitu rahasia awal, bersama kumpulan kunci serta pencacah. Versi kumpulan 01 memakai HMAC-SHA256, sedangkan 00 yang lebih lama memakai BIP32. Tanda tangan yang tidak dapat dibuat seed diperoleh dari mint melalui NUT-09; kemudian status pembelanjaannya harus diperiksa. Jadi, “punya Seed Phrase berarti bisa memulihkan semuanya di mana saja” tidak cukup. Sebelum mengandalkan dompet, periksa pencadangan dan pemulihannya serta coba penarikan kecil. Cadangan data tidak bisa membuat mint yang menghilang merespons atau mengisi kembali cadangan dananya. [8] [6]
Untuk gambaran yang lebih utuh, baca entri ini bersama Fedimint, Chaumian eCash, Blind Signature, Lightning Network, Counterparty risk, Satoshi. Entri ini juga dirujuk dari Chaumian eCash, Blind Signature, Fedimint, Fiduciary Media.