Commit Graph

986 Commits

Author SHA1 Message Date
callebtc
48b0368ad2 Mint: LNbitsWallet add extra check for payment state (#601)
* add extra check for payment state

* improve error handling

* fix response

* add failure
2024-10-28 18:05:53 +01:00
callebtc
09d007ec88 Refactor conditions and fix HTLC multisig (#643)
* refactor conditions and fix htlc multisig

* restore db/write.py

* safer check for P2PK secrets for SIG_ALL

* comment cleanup
2024-10-22 14:02:45 +02:00
conduition
d12a8d1bde wait for uvicorn server to bind before running tests (#607)
* wait for uvicorn server to bind before running tests

Previously we had a simple `time.sleep(1)` call after `server.start()`
which was present to give the Mint's HTTP server time to spin up during
test runs. This meant that if the server took longer than 1s to start
on a dev's machine for any reason (even intermittently) then tests would
fail due to connection errors.

The fix is to use a simple repeated polling check which allows
the test runner to start only once the server is confirmed listening.

* fix linter errors

* prevent infinite loop

* specifically except httpx.ConnectError

Co-authored-by: Pavol Rusnak <pavol@rusnak.io>

---------

Co-authored-by: Pavol Rusnak <pavol@rusnak.io>
2024-10-20 01:01:32 +02:00
callebtc
d2e96162f8 wallet can now handle PostMeltResponse_deprecated from v1 api (#642) 2024-10-19 14:26:57 +02:00
callebtc
4490cc6fce Add get quote API to wallet + check proof states in batches (#637)
* add get quote api to wallet

* wrong string

* test before pushing

* fix tests for deprecated api only

* sigh
2024-10-08 18:12:10 +02:00
callebtc
cd39e18916 Bump dependencies to latest versions (#636)
* bump dependencies

* ignore type for validation handler
2024-10-08 09:20:20 +02:00
callebtc
307d2d7a98 Halt melt on exception (#635)
* halt melt for payment status exception

* refactor

* less log

* add fakewallet test throwing exceptions
2024-10-06 17:51:54 +02:00
lollerfirst
c5ccf65e4d Bump SQLAlchemy to 2.0 (#626)
* `SQLALCHEMY_WARN_20=1` fixed all removed warnings.

* fix some mypy errors

* fix fetchone

* make format

* ignore annotations

* let's try like this?

* remove

* make format

* Update pyproject.toml

Co-authored-by: Pavol Rusnak <pavol@rusnak.io>

* extract _mapping in fetchone() and fetchall() + fix poetry lock

* fix

* make format

* fix integer indexing of row fields

* Update cashu/mint/crud.py

---------

Co-authored-by: Pavol Rusnak <pavol@rusnak.io>
Co-authored-by: callebtc <93376500+callebtc@users.noreply.github.com>
2024-10-05 13:32:32 +02:00
callebtc
7fdca3b1a1 Fix: ledger requires deprecated paid flags in db + wallet disable base64 keysets by default (#634)
* wallet: deprecate base64 keysets by default

* readd deprecated paid to melt quotes as well

* readd paid flag removed in #622 before
2024-10-04 15:32:36 +02:00
Pavol Rusnak
75ffa39807 chore: modernize f-string usage (#627) 2024-10-04 14:11:00 +02:00
callebtc
4d8b6a7a74 bump version to 0.16.1 (#633) 2024-10-04 14:02:46 +02:00
callebtc
b92999cb21 tests: add tests for event client manager (#632) 2024-10-04 13:11:23 +02:00
callebtc
ca7269e74e disable codecov status (#631) 2024-10-03 10:59:03 +02:00
callebtc
700320a8c4 Fix: wallet include fees in swap outputs for inputs of successive melt (#630)
* 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
2024-10-03 09:50:23 +02:00
callebtc
f8f061f810 Fix: Unset pending melt quote by quote id (#629)
* unser melt quote based on quote id

* fixes for lnbits
2024-10-02 15:13:17 +02:00
callebtc
d8d3037cc5 WIP: New melt flow (#622)
* `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>
2024-09-24 14:55:35 +02:00
Pavol Rusnak
25f0763f94 chore: run pyupgrade (#623)
- use `{...}` instead of `set([...])`
- do not use `class Foo(object):`, just use `class Foo:`
- do not specify default flags (`"r"`) for `open()`
2024-09-24 13:53:35 +02:00
Pavol Rusnak
870d75b205 feat: untangle MintMeltMethodSetting into MintMethodSetting and MeltMethodSetting (#617)
+ add description to MintMethodSetting
2024-09-22 15:57:17 +02:00
callebtc
637e4ba80c NUT-04: add description (#613)
* 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
2024-09-09 11:50:02 +02:00
callebtc
0287c02f97 sanitize mint URL before adding (#606) 2024-09-08 15:59:10 +02:00
callebtc
ef5aee92d6 NUT-06: add icon URL (#604)
* mint info icon

* Update cashu/core/models.py

Co-authored-by: Pavol Rusnak <pavol@rusnak.io>

* Update cashu/mint/router.py

Co-authored-by: Pavol Rusnak <pavol@rusnak.io>

* Update cashu/wallet/mint_info.py

Co-authored-by: Pavol Rusnak <pavol@rusnak.io>

* fix setting

---------

Co-authored-by: Pavol Rusnak <pavol@rusnak.io>
2024-09-08 15:00:32 +02:00
Pavol Rusnak
9eb66a46d3 bump bip32 and coincurve dependencies (#612) 2024-09-08 14:08:50 +02:00
Pavol Rusnak
accfdfec8e implement nut-06 time (#611) 2024-09-04 11:15:27 +02:00
lollerfirst
77ba356499 CLN multinut test fix (#602) 2024-07-30 16:30:01 +02:00
callebtc
e14dc6d7ca strip URL (#605) 2024-07-29 17:27:59 +02:00
lollerfirst
d388508521 Mint: Talk to LND via gRPC (#595)
* protos + lnd_grpc.py + __init__ +  status method

* `create_invoice`

* `pay_invoice`, `pay_partial_invoice` and router pb2

* `get_invoice_status`

* channel keep-alive options

* Update lnd_grpc.py

* `get_payment_status` + make format

* `get_payment_quote` and `paid_invoices_stream`. This was suspiciously easy...

* download_and_build script modified to fix the imports on generated code

* pyproject with new dependencies

* update poetry.lock

* fixed errors in `pay_partial_invoice`

* update .env.example

* make format

* enable regtest

* update .env.example

* suggested fixes

* suggested changes pt.2

* Update cashu/core/settings.py

Co-authored-by: callebtc <93376500+callebtc@users.noreply.github.com>

---------

Co-authored-by: callebtc <93376500+callebtc@users.noreply.github.com>
2024-07-29 17:16:40 +02:00
callebtc
4d0d25f738 Remove base64 padding from serialized tokens (#600)
* serialize tokens without base64 padding

* fix tests
2024-07-26 11:53:21 +02:00
callebtc
125ce9e8db Remove unused coinselection (#597) 2024-07-24 07:17:54 +02:00
callebtc
40e60c0e9b Mint: enable LNbitsWallet invoice stream (#594)
* enable lnbits invoice stream

* fix stream
2024-07-20 15:06:05 +02:00
callebtc
8675745e98 Add docker compose instructions (#591) 2024-07-18 00:38:43 +02:00
callebtc
040ee12d54 Edit README.md (#590) 2024-07-17 14:14:36 +02:00
lollerfirst
efdfecc182 Fix race condition (#586)
* `_set_proofs_pending` performs DB related "proofs are spendable" check inside the lock.

* move _verify_spent_proofs_and_set_pending to write.py

* edit logging

---------

Co-authored-by: callebtc <93376500+callebtc@users.noreply.github.com>
2024-07-17 14:04:17 +02:00
callebtc
71580a5e60 Fix parsing of old format contact field in wallet (#589)
* wallet parse contact field if its old format

* default checks for contacts
2024-07-17 11:48:40 +02:00
callebtc
c6f236494f Fix NUT-17 settings entry for NUT-06 (#587)
* Fix NUT-17 settings entry for NUT-06

* Wallet: fix mint info deserialization
2024-07-16 17:38:19 +02:00
callebtc
21f339ca2b NUT-06: Mint contact info (#585)
* Implement NUT-06 change: https://github.com/cashubtc/nuts/pull/117

* wallet deserialize

* ignore contact info for deprecated v0 response
2024-07-15 14:11:54 +02:00
elnosh
f32099bce7 Wallet: default to SIG_INPUTS in P2PK lock (#584) 2024-07-13 03:25:23 +02:00
callebtc
99382242dc Instructions for .env (#582) 2024-07-12 19:01:19 +02:00
callebtc
a019fb76fc codecov: ignore cashu/nostr (#378)
* codecov: ignore cashu/nostr

* adjust codecov call in regtest
2024-07-12 18:59:06 +02:00
callebtc
069e9476d4 StrikeWallet: support USDT (#583)
* Strike: add error message if currency is not present

* small print

* try USDT
2024-07-12 18:44:33 +02:00
callebtc
c52a4c26fb More information (#581) 2024-07-12 18:04:56 +02:00
callebtc
3077ca4c7d Wallet: add CLI flag --force-swap flag and force swapping all inactive keysets (#580)
* 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
2024-07-11 23:08:36 +02:00
callebtc
77697c52ee Fix loading b64 keysets and add option to set b64 inactive in WalletSettings (#579)
* 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
2024-07-11 15:25:16 +02:00
callebtc
1660005bef Fix receive -a to receive all pending tokens (#578)
* 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
2024-07-11 12:55:36 +02:00
callebtc
26b94951fc Fix Tokenv4 handling of base64 keysets (#575)
* 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
2024-07-10 14:12:03 +02:00
callebtc
8eea541b74 update requirements and docker build (#572) 2024-07-09 16:36:24 +02:00
callebtc
eccbf6f789 bump version to 0.16.0 (#573) 2024-07-09 16:36:09 +02:00
callebtc
539054a7c9 refactor db transactions (#571) 2024-07-09 15:46:19 +02:00
callebtc
51ae82bee8 fix: cashu send --lock (#570) 2024-07-08 19:47:11 +02:00
callebtc
6a0a370ba5 Mint: table locks (#566)
* 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
2024-07-08 18:05:57 +02:00
callebtc
af636db545 update poetry.lock (#567) 2024-07-01 11:17:46 +02:00