Add a strict set of updates to prevent incorrect state changes and correct
usage. Supporting the transaction at the trait level prevented some cases, but
having a strict set of state change flows is better.
This bug was found while developing the signatory. The keys are read from
memory, triggering race conditions at the database, and some `Pending` states
are selected (instead of just selecting `Unspent`).
This PR also introduces a set of generic database tests to be executed for all
database implementations, this test suite will make sure writing and
maintaining new database drivers
* fix: grpc set mint urls
* refactor: Extract payment processor retrieval into helper method
* fix: only allow updates to nut04/05 where there is a backend
* feat: Add GetQuoteTtl RPC method to retrieve quote TTL settings
* fix: update long desctiption
* feat: Add created_time and paid_time fields to MintQuote struct
* feat: Add serde default of 0 for created_time in MintQuote
* feat: Add created_time and paid_time to MintQuote and MeltQuote structs
* feat: Add paid_time update when setting melt quote state to Paid
* fix: Update melt quote state with current Unix timestamp
* feat: Add paid_time update for mint quote when state is set to Paid
* feat: Add issued_time field to MintQuote conversion from SQLite row
* feat: Add issued_time tracking for MintQuoteState::Issued state
* feat: Add migration script for mint time of quotes
* feat: Add timestamp columns to mint_quote and melt_quote tables
* feat: Add timestamp columns to `add_mint_quote` method
* refactor: Improve code formatting and readability in mint quote state update logic
* feat: Add created_time and paid_time columns to melt_quote query
* feat: time on mint and melt quotes
* feat: Add migration script for mint created time signature
feat: Add created_time column to blind_signature table
feat: Add created_time to blind_signature insertion
feat: Add created_time column to proof table and update insert query
feat: time on mint and melt quotes
* feat: Add new table to track blind signature creation time
* feat: Add timestamp tracking for proofs in ReDB database
* feat: redb proof time
* chore: fmt
The bug comes with the SQLx-sqlite pool bug, where several connections are
created by default, but the `new` function takes care of that, fixing that bug
by making a single instance of the database.
If constructed directly, the pool would create several connections to the
database, which in most instances is fine, but with SQLite :memory: each
connection is entirely independent.
Also follow documentation to make sure that failed `acquire` will not end up
dropping connections by setting test_before_acquire to false
However, if your workload is sensitive to dropped connections such as using an in-memory
SQLite database with a pool size of 1, you can pretty easily ensure that a cancelled
`acquire()` call will never drop connections by tweaking your [`PoolOptions`]:
* Set [`test_before_acquire(false)`][PoolOptions::test_before_acquire]
* Never set [`before_acquire`][PoolOptions::before_acquire] or
[`after_connect`][PoolOptions::after_connect].
* chore: Add nutshell wallet integration test script
feat: Add MINT_URL configuration for docker container in nutshell wallet integration test script
chore: Make nutshell_wallet_itest.sh executable
fix: Update MINT_URL to use host.docker.internal for Docker container access
feat: Add Docker container startup for Cashu daemon in wallet integration test script
chore: Update Docker image to use Docker Hub repository
feat: Add cleanup trap to stop Docker container and unset variables
feat: Add initial test stub for nutshell wallet mint functionality
test: Add Cashu wallet mint integration test
feat: Add just command for nutshell wallet integration test
refactor: Organize imports and improve code formatting in nutshell wallet test
fix: Update Cashu Docker image and test URL for correct container access
fix: Update Docker container name and image for Cashu wallet test script
fix: Handle Docker container name conflict in nutshell wallet integration test
fix: Update Docker image to cashubtc/nutshell:latest in wallet integration test script
feat: Add support for running separate Nutshell mint and wallet containers
feat: Update Nutshell mint and wallet container configurations for integration testing
fix: Update wallet port and container configuration in integration test script
chore: Export MINT_URL and WALLET_URL as environment variables
fix: Update invoice creation and state checking in nutshell wallet test
fix: Update MINT_URL to use host.docker.internal for container access
fix: Update nutshell wallet mint test to handle invoice payment state
refactor: Improve Nutshell wallet test with better error handling and robustness
refactor: Improve code formatting and logging in nutshell wallet test
refactor: Replace anyhow with expect for error handling in Nutshell wallet test
refactor: Simplify error handling in Nutshell wallet mint test
refactor: Replace `?` with `expect()` in Nutshell wallet test
refactor: Simplify nutshell wallet test by removing unused code and improving error handling
refactor: Extract minting and balance helper functions in nutshell wallet test
feat: Add test for Nutshell wallet token swap functionality
fix: Trim quotes from token in nutshell wallet swap test
refactor: Remove debug print statements and improve code readability
refactor: Improve test_nutshell_wallet_melt with payment state checking and balance verification
refactor: Update Nutshell wallet integration test script configuration
feat: Extract common mint startup function into shared script
refactor: Simplify nutshell wallet integration test script and improve startup process
feat: Add mintd process termination and test status capture in integration test script
refactor: Capitalize env vars and ensure comprehensive cleanup in trap
feat: nutshell wallet test
* ci: Add test step for Nutshell wallet integration tests
* ci: Split Nutshell integration tests into separate jobs
* feat: nutshell wallet test
* ci: Add Docker setup and increase timeout for Nutshell wallet integration tests
* chore: Improve Nutshell wallet integration test script robustness
* fix: Remove -i flag from Nix develop and improve Docker accessibility check
* fix: payment processor
* fix: wallet tests
* feat: Add integration shell with Docker and Rust stable for testing
* ci: Simplify Nutshell wallet integration test workflow and script
* fix: Improve mintd endpoint detection and error handling in integration test script
* fix: wallet tests
* Here's a commit message for this change:
refactor: Move mint tests to fake_wallet.rs and add descriptive comments
refactor: pure wallet/mint does not need arc
refactor: Consolidate NUT-06 test into single function and remove redundant module
docs: Add comments explaining test purposes in integration tests file
refactor: Remove anyhow and replace with expect for error handling
refactor: use expect in pure tests
feat: Add configurable database type via environment variable for test mint and wallet
refactor: Update database initialization in test mint and wallet creation
feat: Add temporary directory support for redb and sqlite databases in tests
feat: Add database type argument to test commands in justfile
ci: Add build matrix for pure-itest with memory, sqlite, and redb databases
refactor: use expect in pure tests
refactor: Move and refactor `test_swap_unbalanced` from mint to integration tests pure
refactor: move mint tests to pure tests
docs: Add detailed comments explaining test file purposes for mint and integration tests
refactor: Extract keyset ID retrieval into a reusable function
test: Add concurrent double-spend test with 3 swap transactions
refactor: Simplify concurrent swap request processing and error handling
test: Add check to verify all proofs are marked as spent in concurrent double-spend test
refactor: Optimize proof state retrieval in concurrent double-spend test
feat: Add test for concurrent melt race condition with same proofs
fix: Update concurrent melt test to use melt quote and handle errors
refactor: melt concurrrent
refactor: Rename test function for clarity in concurrent double-spend scenario
refactor: Modify test_concurrent_double_spend_melt to manually create melt requests in mint tasks
feat: con melt test
refactor: Optimize proof state handling and error recovery in check_spendable
refactor: Extract helper method to reset proofs to original state
fix: reset y states
fix: reset y states
* fix: acces of priv feilds
* fix: add extra migrate
- MintKeysDatabase
- MintQuotesDatabase
- MintProofsDatabase
- MintSignaturesDatabase
This commit splits the MintDatabase trait with 30+ methods into a series
of smaller traits, each dedicate to a specific subsystem of the mint
service.