mirror of
https://github.com/aljazceru/cdk.git
synced 2026-01-10 00:16:02 +01:00
The codebase was used to correctly perform signatory calls during a database transaction, as the signatory was previously exclusively in process. However, a few months ago, it was changed to be a trait that can be either local or remote. Making external calls to services, adding latency, during an ongoing database transaction is a bad idea because it will lock the rows until the service call is finalized, which is unpredictable. The issue is even worse in our pipeline where the SQLite storage driver is used with the ":memory:" path, which forces the Database pool to have a size of 1. Since our tests run in parallel, they would randomly fail. This issue was failing in the CI, but the error was not making the pipeline fail. This bug was fixed as well.
Cashu
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.