#token #amount #settings #string #verification #specification #primitive

cashu

Cashu shared types and crypto utilities, used as the foundation for the CDK and their crates

7 unstable releases (3 breaking)

new 0.9.0 Apr 9, 2025
0.8.1 Mar 25, 2025
0.7.1 Feb 13, 2025
0.0.2 May 12, 2023
0.0.1 Apr 20, 2023

#282 in Magic Beans

Download history 171/week @ 2025-02-06 215/week @ 2025-02-13 34/week @ 2025-02-20 72/week @ 2025-02-27 45/week @ 2025-03-06 43/week @ 2025-03-13 358/week @ 2025-03-20 134/week @ 2025-03-27 201/week @ 2025-04-03

751 downloads per month
Used in 17 crates (2 directly)

MIT license

325KB
7K SLoC

Cashu

crates.io Documentation MIT licensed

A Rust implementation of the Cashu protocol, providing the core functionality for Cashu e-cash operations.

Overview

This crate implements the core Cashu protocol as defined in the Cashu NUTs (Notation, Usage, and Terminology).

Features

  • Cryptographic Operations: Secure blind signatures and verification
  • Token Management: Creation, validation, and manipulation of Cashu tokens
  • NUTs Implementation: Support for the core Cashu protocol specifications
  • Type-safe API: Strongly-typed interfaces for working with Cashu primitives

Usage

Add this to your Cargo.toml:

[dependencies]
cashu = "*"

Basic Example

use cashu::amount::Amount;
use cashu::nuts::nut00::Token;
use std::str::FromStr;

// Parse a Cashu token from a string
let token_str = "cashuBo2FteCJodHRwczovL25vZmVlcy50ZXN0bnV0LmNhc2h1LnNwYWNlYXVjc2F0YXSBomFpSAC0zSfYhhpEYXCCpGFhAmFzeEAzYzNlOWRhMDU3ZjQzNmExOTc2MmRhOWYyYTBjMzc5YzE5N2RlNDMzZDY5MWU1NDI0ZmRjODcxNjZjMmNlMjZmYWNYIQKKtwESLR-yn5rqNAL3_8_H5BtpwjSPs7uOJ18kPn2mV2Fko2FlWCCsMAK1xoLlwVRxpv8hfsxKYXlXTOomiVt3JCbzNgQpUmFzWCD9MfRUr0asiF_jUJMSylphLvKUd2SLz9oSpcvuLCXPp2FyWCA_1toQ_l158xW0zorqTBXvh76o-_D3e-Ru1Ea-51UrFaRhYQhhc3hAMTM5YWRjZDJlY2Q5MWQyNjNjMDhhMzdhNjBmODZjNDVkYWE3NjNmNjM4NTY0NzEyMmFiZjhlMDM3OGQ0NjA5OGFjWCECHZh5Qx9o-8PaY6t0d5hRTbWeez1dh3md7ehfE25f2N5hZKNhZVgg5MLkVzIw2tDzdUpYwFe-MLhIPJ4hkCpPGL0X7RxpPIRhc1ggyEtcsq3FX8wZOGpwTXOP7BsqfdYdMhGG1X8jVjncDcVhclggyLVOc2xy4m1_YeYGef2HQ8WyJX7LjZq403CS9Dt_eME=";
let token = Token::from_str(token_str).expect("Valid token");

// Get the total amount
let amount: Amount = token.value().expect("Value");
println!("Token amount: {}", amount);

Implemented NUTs

Mandatory

NUT # Description
00 Cryptography and Models
01 Mint public keys
02 Keysets and fees
03 Swapping tokens
04 Minting tokens
05 Melting tokens
06 Mint info

Optional

# Description Status
07 Token state check Implemented
08 Overpaid Lightning fees Implemented
09 Signature restore Implemented
10 Spending conditions Implemented
11 Pay-To-Pubkey (P2PK) Implemented
12 DLEQ proofs Implemented
13 Deterministic secrets Implemented
14 Hashed Timelock Contracts (HTLCs) Implemented
15 Partial multi-path payments (MPP) Implemented
16 Animated QR codes Not implemented
17 WebSocket subscriptions Implemented
18 Payment Requests Implemented
19 Cached responses Implemented
20 Signature on Mint Quote Implemented

License

This project is licensed under the MIT License.

Dependencies

~20MB
~323K SLoC