* Mint: fix loading b64 keysets and Wallet: option to set b64 inactive
* typo
* readd include fees flag (unused)
* fix test to respect new default False flag
* fix default flag for regtest
* clean up db
* db: table lock
* db.table_with_schema
* fix encrypt.py
* postgres nowait
* add timeout to lock
* melt quote state in db
* kinda working
* kinda working with postgres
* remove dispose
* getting there
* porperly clean up db for tests
* faster tests
* configure connection pooling
* try github with connection pool
* invoice dispatcher does not lock db
* fakewallet: pay_if_regtest waits
* pay fakewallet invoices
* add more
* faster
* slower
* pay_if_regtest async
* do not lock the invoice dispatcher
* test: do I get disk I/O errors if we disable the invoice_callback_dispatcher?
* fix fake so it workss without a callback dispatchert
* test on github
* readd tasks
* refactor
* increase time for lock invoice disatcher
* try avoiding a race
* remove task
* github actions: test regtest with postgres
* mint per module
* no connection pool for testing
* enable pool
* do not resend paid event
* reuse connection
* close db connections
* sessions
* enable debug
* dispose engine
* disable connection pool for tests
* enable connection pool for postgres only
* clean up shutdown routine
* remove wait for lightning fakewallet lightning invoice
* cancel invoice listener tasks on shutdown
* fakewallet conftest: decrease outgoing delay
* delay payment and set postgres only if needed
* disable fail fast for regtest
* clean up regtest.yml
* change order of tests_db.py
* row-specific mint_quote locking
* refactor
* fix lock statement
* refactor swap
* refactor
* remove psycopg2
* add connection string example to .env.example
* remove unnecessary pay
* shorter sleep in test_wallet_subscription_swap
* log cln error
* return a string
* update corelightningrest to work with latest ver using rune
* fix mpp spec and backend support check
* refactor validation in ledger
* remove weird error
* fix mpp melt model
* corelightningrest.py: Added Multi-Mint payout support
lndrest.py: fix `quote.amount` is not always in sats + better checks
* small fix
* Fix quote.unit str2unit conversion + add missing imports
* settings enable mpp corelightning (default false)
* small fix
* fix `paid_invoice_stream`
* make format
* handle runes
* load rune
* rename to MINT_CORELIGHTNING_REST_RUNE
* try without cert
* port
* try except callback dispatcher
* clean up cln-rest streaming parser
* conftest: mint_corelightning_enable_mpp
* enable mpp in regtest.yaml
* fix error handling clnrest, remove lndrest changes
* CLNRest + CoreLightningRest
* clean up corelightningrest and get last index before starting the stream
* clean up
---------
Co-authored-by: callebtc <93376500+callebtc@users.noreply.github.com>
Co-authored-by: Richard Bensberg <r@coinbatsu.com>
* LND Backend
- Add MINT_LND_REST_CERT_VERIFY bool variable that when set to False allows
verify=False for httpx and ignore LND selfsigned certificate validation
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
modified: .env.example
modified: cashu/core/settings.py
modified: cashu/lightning/lndrest.py
* Update .env.example
---------
Co-authored-by: callebtc <93376500+callebtc@users.noreply.github.com>
* add websockets for quote updates
* add test (not working)
* wip: emit events to everyone
* wip: emit events to everyone
* wip, lots of things broken but invoice callback works
* wip
* add wip files
* tests almost passing
* add task
* refactor nut constants
* startup fix
* works with old mints
* wip cli
* fix mypy
* remove automatic invoice test now with websockets
* remove comment
* better logging
* send back response
* add rate limiter to websocket
* add rate limiter to subscriptions
* refactor websocket ratelimit
* websocket tests
* subscription kinds
* doesnt start
* remove circular import
* update
* fix mypy
* move test file in test because it fails if it runs later... dunno why
* adjust websocket NUT-06 settings
* local import and small fix
* disable websockets in CLI if "no_check" is selected
* move subscription test to where it was
* check proof state with callback, add tests
* tests: run mint fixture per module instead of per session
* subscription command name fix
* test per session again
* update test race conditions
* fix tests
* clean up
* tmp
* fix db issues and remove cached secrets
* fix tests
* blindly try pipeline
* remove comments
* comments
* wip
* wip
* model
* refactor wallet transactions
* refactor wallet
* sending with fees works and outputs fill up the wallet
* wip work
* ok
* comments
* receive with amount=0
* correctly import postmeltrequest
* fix melt amount
* tests working
* remove mint_loaded decorator in deprecated wallet api
* wallet works with units
* refactor: melt_quote
* fix fees
* add file
* fees for melt inputs
* set default input fee for internal quotes to 0
* fix coinselect
* coin selection working
* yo
* fix all tests
* clean up
* last commit added fees for inputs for melt transactions - this commit adds a blanace too low exception
* fix fee return and melt quote max allowed amount check during creation of melt quote
* clean up code
* add tests for fees
* add melt tests
* update wallet fee information
* amount in melt request
* apply fee limit
* more error handling
* wip: signal flag in /info
* clean up multinut
* decode mypy error lndrest
* fix test
* fix tests
* signal feature and blindmessages_deprecated
* setting
* fix blindedsignature method
* fix tests
* mint info file
* test mpp with lnd regtest
* nuts optionsl mint
info
* try to enable mpp with lnd
* test mpp with third payment
* wip works with fakewallet
* startup refactor
* add tests
* regtest tests for pending melts
* wip CLN
* remove db migration
* remove foreign key relation to keyset id
* fix: get_promise from db and restore DLEQs
* test: check for keyset not found error
* fix migrations
* lower-case all db column names
* add more tests for regtest
* simlate failure for lightning
* test wallet spent state with hodl invoices
* retry
* regtest with postgres
* retry postgres
* add sleeps
* longer sleep on github
* more sleep for github sigh
* increase sleep ffs
* add sleep loop
* try something
* do not pay with wallet but with ledger
* fix lnbits pending state
* fix pipeline to use fake admin from docker
* wip blink
* Blink working
* check fee correctly
* add comment
* unfix lnbits
* unit test blink backend
* make format
* mypy
* settings
* add error if blink key not set
* make backups before migrations
* database tests
* postgres db backup with location string
* ignore version in pg_dump and throw warning
* install latest pg_dump
* install latest
* pg update?
* remove test from github
* skip for postgres on github actions
* with postgres
* postgres test explicit
* make format
* start postgres only if needed
* remove if again
* print db
* db in matrix
* delete schema
* use new env var MINT_TEST_DATABASE for tests
* add db path to regtest
* storage y db
* for proofs_pending as well
* pending check with Y
* fix pending table
* test_race_pending
* skip race condition test on github
* skip test on github actions
* move test_cli.py -> test_wallet_cli.py
* get full proof from memory
* add domain separation wallet
* fix keys
* fix tests
* backwards compatible api upgrade
* upgrade seems to work
* fix tests
* add deprecated api functions
* add more tests of backwards compat
* add test serialization for nut00
* remove a redundant test
* move mint and melt to new api
* mypy works
* CI: mypy --check-untyped-defs
* add deprecated router
* add hints and remove logs
* fix tests
* cleanup
* use new mint and melt endpoints
* tests passing?
* fix mypy
* make format
* make format
* make format
* commit
* errors gone
* save
* adjust the API
* store quotes in db
* make mypy happy
* add fakewallet settings
* remove LIGHTNING=True and pass quote id for melt
* format
* tests passing
* add CoreLightningRestWallet
* add macaroon loader
* add correct config
* preimage -> proof
* move wallet.status() to cli.helpers.print_status()
* remove statuses from tests
* remove
* make format
* Use httpx in deprecated wallet
* fix cln interface
* create invoice before quote
* internal transactions and deprecated api testing
* fix tests
* add deprecated API tests
* fastapi type hints break things
* fix duplicate wallet error
* make format
* update poetry in CI to 1.7.1
* precommit restore
* remove bolt11
* oops
* default poetry
* store fee reserve for melt quotes and refactor melt()
* works?
* make format
* test
* finally
* fix deprecated models
* rename v1 endpoints to bolt11
* raise restore and check to v1, bump version to 0.15.0
* add version byte to keyset id
* remove redundant fields in json
* checks
* generate bip32 keyset wip
* migrate old keysets
* load duplicate keys
* duplicate old keysets
* revert router changes
* add deprecated /check and /restore endpoints
* try except invalidate
* parse unit from derivation path, adjust keyset id calculation with bytes
* remove keyest id from functions again and rely on self.keyset_id
* mosts tests work
* mint loads multiple derivation paths
* make format
* properly print units
* fix tests
* wallet works with multiple units
* add strike wallet and choose backend dynamically
* fix mypy
* add get_payment_quote to lightning backends
* make format
* fix startup
* fix lnbitswallet
* fix tests
* LightningWallet -> LightningBackend
* remove comments
* make format
* remove msat conversion
* add Amount type
* fix regtest
* use melt_quote as argument for pay_invoice
* test old api
* fees in sats
* fix deprecated fees
* fixes
* print balance correctly
* internally index keyset response by int
* add pydantic validation to input models
* add timestamps to mint db
* store timestamps for invoices, promises, proofs_used
* fix wallet migration
* rotate keys correctly for testing
* remove print
* update latest keyset
* fix tests
* fix test
* make format
* make format with correct black version
* remove nsat and cheese
* test against deprecated mint
* fix tests?
* actually use env var
* mint run with env vars
* moar test
* cleanup
* simplify tests, load all keys
* try out testing with internal invoices
* fix internal melt test
* fix test
* deprecated checkfees expects appropriate fees
* adjust comment
* drop lightning table
* split migration for testing for now, remove it later
* remove unused lightning table
* skip_private_key -> skip_db_read
* throw error on migration error
* reorder
* fix migrations
* fix lnbits fee return value negative
* fix typo
* comments
* add type
* make format
* split must use correct amount
* fix tests
* test deprecated api with internal/external melts
* do not split if not necessary
* refactor
* fix test
* make format with new black
* cleanup and add comments
* add quote state check endpoints
* fix deprecated wallet response
* split -> swap endpoint
* make format
* add expiry to quotes, get quote endpoints, and adjust to nut review comments
* allow overpayment of melt
* add lightning wallet tests
* commiting to save
* fix tests a bit
* make format
* remove comments
* get mint info
* check_spendable default False, and return payment quote checking id
* make format
* bump version in pyproject
* update to /v1/checkstate
* make format
* fix mint api checks
* return witness on /v1/checkstate
* no failfast
* try fail-fast: false in ci.yaml
* fix db lookup
* clean up literals
* index on db and read spent proofs from db
* add benchmark for testing
* remove benchmark
* add option to disable cached secrets
* disable python 3.9 tests
* update
* working
* test with lnd
* update action
* cache poetry
* add lndrest
* enable regtest
* add regtests.yml
* poetry version
* add helpers
* save
* run legend regtest fork
* actually start
* use bash
* give rights
* remove cache?
* change order
* tests succeed with lndrestwallet
* check if wallet is set
* settings for regtest
* fix fakewallet test
* remove wacky balance check
* adjust permissions
* try with sudo
* adjust example
* remove eclair
* first working version but some sats go missing
* back at it
* make format
* restore to main
* move mint database
* fix some tests
* make format
* remove old _construct_outputs we reintroduced in merge with main
* add type annotations
* add wallet private key to tests
* wallet: load proofs
* fix tests
* _generate_secrets with deterministic generation (temporary)
* allow wallet initialization with custom private key
* add pk to wallet api test
* mint scope=module
* remove private_key from test_wallet.py to see if it helps with the github tests
* readd private keys to tests
* workflow without env
* add more private key!
* readd env
* ledger scope session
* add default private key for testing
* generate private keys if not available
* testing
* its working!!!
* first iteration of bip32 working
* get mint info and add many type annotations
* tests
* fix tests with bip32
* restore from multiple mints
* disable profiler
* make format
* failed POST /mint do not increment secret counter
* store derivation path in each token
* fix tests
* refactor migrations so private keys can be generated by the wallet with .with_db() classmethod
* start fixing tests
* all tests passing except those that need to set a specific private key
* bip39 mnemonic to seed - with db but restore doesnt work yet with custom seed
* mnemonic restore works
* enter mnemonic in cli
* fix tests to use different mnemonic
* properly ask user for seed input
* tests: dont ask for inputs
* try to fix tests
* fix cashu -d
* fixing
* bump version and add more text to mnemonic enter
* add more comments
* add many more comments and type annotations in the wallet
* dont print generated mnemonic and dont wait for input
* fix test
* does this fix tests?
* sigh....
* make format
* do not restore from an initialized wallet
* fix mnemonics
* fix nitpicks
* print wallet name if nonstandard wallet
* fix merge error and remove comments
* poetry lock and requirements
* remove unused code
* fix tests
* mnemonic.lower() and add keyset id if not present for backwards compat
* edit comment
* refactor split
* add sigflag to Secret base model
* add better comments
* add comments
* add witnesses inside /split
* more comments
* sign outputs if proofs indicate it
* add signature to outputs but mint does not check it yet
* multiple scriptsigs
* signatures on outputs
* add multisig tests
* rename test
* timelock -> locktime
* move parameters to tags
* convert back to List[List[str]]
* errors are back!
* fix all the stuff
* more testing
* make format
* add pending state
* proofs spendable check and tests
* bump version to 0.12.3
* remove sleep for testing
* comment clarify
* use list comprehension in pending list
* p2pk with nostr privatekey and timelocks
* add p2pk
* fix test
* fix test with custom secret
* sign whole split transaction
* p2pk signature now commits to entire secret and thus to a nonce
* use schnorr signatures
* revamp P2SH and P2PK with new Secret model
* test p2pk
* add comments
* add nostr private key to tests
* fix nostr receive
* make format
* test redemption after timelock
* refactor Server.serialize()
* sign sha256(secret)
* add optional refund pubkey that triggers after timelock
* use nostr private key for now (including nsec parser)
* use nostr private key and fix tests
* bump version to 0.12.2
* Allow to start wallet API by cashu --daemon
* Provide access to wallet name via settings
* Make format
* Use flag is_eager for daemon option
* add setting api_host
---------
Co-authored-by: callebtc <93376500+callebtc@users.noreply.github.com>
* Assert `mint_private_key` is available at startup
If the mint's private key is not available, the ledger cannot be created
because no pubkey can be derived. We now explicitly assert this with a
descriptive error message.
Additionally fixed some typing errors.
* Shorten error message
* Allow to set maximum peg in/out for mint
* Make format
* remove duplicate error
* move business logic to ledger
---------
Co-authored-by: callebtc <93376500+callebtc@users.noreply.github.com>