* wip store balance
* store balances in watchdog worker
* move mint_auth_database setting
* auth db
* balances returned as Amount (instead of int)
* add test for balance change on invoice receive
* fix 1 test
* cancel tasks on shutdown
* watchdog can now abort
* remove wallet api server
* fix lndgrpc
* fix lnbits balance
* disable watchdog
* balance lnbits msat
* test db watcher with its own database connection
* init superclass only once
* wip: log balance in keysets table
* check max balance using new keyset balance
* fix test
* fix another test
* store fees in keysets
* format
* cleanup
* shorter
* add keyset migration to auth server
* fix fakewallet
* fix db tests
* fix postgres problems during migration 26 (mint)
* fix cln
* ledger
* working with pending
* super fast watchdog, errors
* test new pipeline
* delete walletapi
* delete unneeded files
* revert workflows
* manage state of proofs
* test set proofs unreserved
* melt recovers state on error
* fix wallet test
* fix tests
* fix another test
* get_mint_quote returns MintQuote
* fix tests
* refactor
* fix deprecated tests
* add new unset type
* auth server
* cleaning up
* auth ledger class
* class variables -> instance variables
* annotations
* add models and api route
* custom amount and api prefix
* add auth db
* blind auth token working
* jwt working
* clean up
* JWT works
* using openid connect server
* use oauth server with password flow
* new realm
* add keycloak docker
* hopefully not garbage
* auth works
* auth kinda working
* fix cli
* auth works for send and receive
* pass auth_db to Wallet
* auth in info
* refactor
* fix supported
* cache mint info
* fix settings and endpoints
* add description to .env.example
* track changes for openid connect client
* store mint in db
* store credentials
* clean up v1_api.py
* load mint info into auth wallet
* fix first login
* authenticate if refresh token fails
* clear auth also middleware
* use regex
* add cli command
* pw works
* persist keyset amounts
* add errors.py
* do not start auth server if disabled in config
* upadte poetry
* disvoery url
* fix test
* support device code flow
* adopt latest spec changes
* fix code flow
* mint max bat dynamic
* mypy ignore
* fix test
* do not serialize amount in authproof
* all auth flows working
* fix tests
* submodule
* refactor
* test
* dont sleep
* test
* add wallet auth tests
* test differently
* test only keycloak for now
* fix creds
* daemon
* fix test
* install everything
* install jinja
* delete wallet for every test
* auth: use global rate limiter
* test auth rate limit
* keycloak hostname
* move keycloak test data
* reactivate all tests
* add readme
* load proofs
* remove unused code
* remove unused code
* implement change suggestions by ok300
* add error codes
* test errors
* nut-19 sign mint quote
* ephemeral key for quote
* `mint` adjustments + crypto/nut19.py
* wip: mint side working
* fix import
* post-merge fixups
* more fixes
* make format
* move nut19 to nuts directory
* `key` -> `privkey` and `pubkey`
* make format
* mint_info method for nut-19 support
* fix tests imports
* fix signature missing positional argument + fix db migration format not correctly escaped + pass in NUT-19 keypair to `request_mint` `request_mint_with_callback`
* make format
* fix `get_invoice_status`
* rename to xx
* nutxx -> nut20
* mypy
* remove `mint_quote_signature_required` as per spec
* wip edits
* clean up
* fix tests
* fix deprecated api tests
* fix redis tests
* fix cache tests
* fix regtest mint external
* fix mint regtest
* add test without signature
* test pubkeys in quotes
* wip
* add compat
---------
Co-authored-by: callebtc <93376500+callebtc@users.noreply.github.com>
* wallet: add fees to outputs for melt that requires a split
* add test that requires a swap
* verify test fails, will revert
* revert true
* hopefully fix the tests
* fix default fee selection
* cleanup and renamings
* cleanup coinselect function, estimate fees
* fix test
* add comments
* weird error
* `PaymentResult`
* ledger: rely on PaymentResult instead of paid flag. Double check for payments marked pending.
* `None` is `PENDING`
* make format
* reflected changes API tests where `PaymentStatus` is used + reflected changes in lnbits
* reflect changes in blink backend and tests
* fix lnbits get_payment_status
* remove paid flag
* fix mypy
* remove more paid flags
* fix strike mypy
* green
* shorten all state checks
* fix
* fix some tests
* gimme ✅
* fix............
* fix lnbits
* fix error
* lightning refactor
* add more regtest tests
* add tests for pending state and failure
* shorten checks
* use match case for startup check - and remember modified checking_id from pay_invoice
* fix strike pending return
* new tests?
* refactor startup routine into get_melt_quote
* test with purge
* refactor blink
* cleanup responses
* blink: return checking_id on failure
* fix lndgrpc try except
* add more testing for melt branches
* speed things up a bit
* remove comments
* remove comments
* block pending melt quotes
* remove comments
---------
Co-authored-by: lollerfirst <lollerfirst@gmail.com>
* NUT-04: add description
* skip test for deprecated api
* fix for lndgrpc
* add test for cli
* add two random tests
* add max length to request model validator
* skip cli test with description for deprecated api
* add cli test for invoice command
* default value to None
* Wallet: add flag --force-swap to send command
* Reame split to swap across codebase
* rename remaining splits to swap
* fix restore index with multiple keysets
* fix wallet api restore
* catch error if receive -a doesnt work with a certain mint
* receive pending tokens from multiple mints
* receive pending from all mints and catch exceptions
* wip: handle tokenv4 if the keyset is base64
* wip
* Tokens now dataclasses
* Deserialize DLEQ from string
* add tokenv3/v4 base64 keyset ID tests
* fix cli
* 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
* Update deprecated datetime
* Add options to Invoices cli
With these options, we are able to return:
1) all invoices (this is the default);
2) pending invoices (paid False, out False);
3) paid invoices;
4) and unpaid invoices.
* make format
* Fix mypy error with datetime
* sort imports
* Remove unneeded unit when printing out info
* Fix wrong method doc
* Try to mint pending invoices
* make pre-commit
* Refactor --tests flag to --mint
The default will be false, i.e., if the user does not
pass in the --mint flag, it will not try to mint
the pending invoice.
---------
Co-authored-by: callebtc <93376500+callebtc@users.noreply.github.com>
* 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
* 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
* 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
* mint does not start yet
* fix import
* revert mint db migrations
* handle zero fee case
* cli: adjust fee message
* wallet: replace requests with httpx
* clean up
* rename http client decorator
* fix pending check in main, todo: TEST PROXIES WITH HTTPX
* fix up
* use httpx for nostr as well
* update packages to same versions as https://github.com/lnbits/lnbits/pull/1609/files
* fix proof deserialization
* check for string
* tests passing
* adjust wallet api tests
* lockfile
* add correct responses to Lightning interface and delete melt_id for proofs for which the payent has failed
* fix create_invoice checking_id response
* migrations atomic
* proofs are stored automatically when created
* make format
* use bolt11 lib
* stricter type checking
* add fee response to payments
* assert fees in test_melt
* test that mint_id and melt_id is stored correctly in proofs and proofs_used
* remove traces
* refactor: Lightning interface into own file and LedgerCrud with typing
* fix tests
* fix payment response
* rename variable
* produce dleq
* start working on verification
* wip dleq
* Use C_ instead of C in verify DLEQ! (#176)
* Fix comments (DLEQ sign error)
* Fix alice_verify_dleq in d_dhke.py
* Fix_generate_promise in ledger.py
* Fix verify_proofs_dleq in wallet.py
* Fix: invalid public key (#182)
* Use C_ instead of C in verify DLEQ!
* Fix comments (DLEQ sign error)
* Fix alice_verify_dleq in d_dhke.py
* Fix_generate_promise in ledger.py
* Fix verify_proofs_dleq in wallet.py
* Fix: invalid public key
* Exception: Mint Error: invalid public key
* Update cashu/wallet/wallet.py
---------
Co-authored-by: calle <93376500+callebtc@users.noreply.github.com>
* Update cashu/core/b_dhke.py
* Update tests/test_cli.py
* verify all constructed proofs
* dleq upon receive
* serialize without dleq
* all tests passing
* make format
* remove print
* remove debug
* option to send with dleq
* add tests
* fix test
* deterministic p in step2_dleq and fix mypy error for hash_to_curve
* test crypto/hash_e and crypto/step2_bob_dleq
* rename A to K in b_dhke.py and test_alice_verify_dleq
* rename tests
* make format
* store dleq in mint db (and readd balance view)
* remove `r` from dleq in tests
* add pending output
* make format
* works with pre-dleq mints
* fix comments
* make format
* fix some tests
* fix last test
* test serialize dleq fix
* flake
* flake
* keyset.id must be str
* fix test decorators
* start removing the duplicate fields from the dleq
* format
* remove print
* cleanup
* add type anotations to dleq functions
* remove unnecessary fields from BlindedSignature
* tests not working yet
* spelling mistakes
* spelling mistakes
* fix more spelling mistakes
* revert to normal
* add comments
* bdhke: generalize hash_e
* remove P2PKSecret changes
* revert tests for P2PKSecret
* revert tests
* revert test fully
* revert p2pksecret changes
* refactor proof invalidation
* store dleq proofs in wallet db
* make mypy happy
---------
Co-authored-by: moonsettler <moonsettler@protonmail.com>
* [DEV] add ruff and remove isort and flake
- precommit
- workflow
- Makefile
updated black
* configure black to use default line-length
* reformat to 88 chars line-length
* fix ugly comments
* init flake8
* exclude nostr client, and add ds_store to gitignore
* fix flake8 F811 issue, redefinition of unused variables
* add flake8 to workflow
* F401 unused imports
* F541 f-string is missing placeholders
* E501 line too long > 150 characters
* E722 no bare except
* E402 module level import not at top of file
* F405 no star imports
* E712 comparison to False should be 'if cond is False:'
* F841 local variable is assigned to but never used
* E266 too many leading '#' for block comment
* E265, E261
* E713 test for membership should be 'not in'
* E711, E741
E741 ambiguous variable name 'l'
E711 comparison to None should be 'if cond is None:'
* flake config
* isort
* refactor makefile flake8 usage
* reflaking the rebase
* black
* fix tests?
* black
* fix line lenght it test_cli
* sort out makefile
* fix strings
* reintroduce black-check
* reflake and mypy
* isort
* Update cashu/wallet/wallet.py
Co-authored-by: Angus Pearson <angus@toaster.cc>
* Update cashu/mint/ledger.py
Co-authored-by: Angus Pearson <angus@toaster.cc>
---------
Co-authored-by: Angus Pearson <angus@toaster.cc>
* 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
* 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