* 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>
* port changes from dleq branch
* adjust tests
* fix tag serialization
* refactor p2pk and secrets into a new Protocol class
* clean up code
* refactor p2pk types from base
* test second refund pubkey
* [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>
* mint upgraded and still backwards compatible
* cleanup
* fix tests
* fix things
* add deprecated message to new struct
* fix test
* fix typo
* readd endpoint that got lost during merge
* version bump in pyproject.toml
* remove wallet backwards compatibility because it makes no sense
* comment for backwards compat
* fix comment
* 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
* Add multi-mint swap to CLI and API
* Add confirmation prompt to CLI
* Replace several assert statements
* Define response for API endpoint swap
* Adapt to latest changes on main
* Fix: missing argument after latest changes on main
* API: use local wallet for swap
* Improve swap command
* clean up cli swap
* fix comment
* clean up router
* fix up
* remove outgoing
---------
Co-authored-by: callebtc <93376500+callebtc@users.noreply.github.com>
* 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
* fix: add missing amount
* refactor mint
* cli and api for splitting and tests
* invoice balance?
* remove balance checks until I know why it doesnt update
* remove all balance checks from tests
* delete old code
* remove debug logs
---------
Co-authored-by: sihamon <sihamon@proton.me>
With the recent update to NUT-08, we can ensure that the amount of blank
outputs is always enough to cover any overpaid lightning fees. This
change implements this functionality for both the wallet and the mint.
The mint updateis backwards-compatible with respect to old wallets.
* Add REST API for Cashu wallet
* Add simple way to start REST API server
* Add simple tests for wallet REST API
* Add TokenV3 to REST API
* Improve tests for wallet REST API
* Make format
* Remove unused import
* Rename nostr module for API
* Unify helper functions for CLI and API
* Make format
* Move error handling from helper functions to API
* Remove 'is_api' flag where possible
* Make format, cleanup, add comments
* Fix typo for burn also in API
* Improve error handling for API
* Add flag 'trust_new_mint' to receive command
To enable trusting or mistrusting unknown mints via API
* Allow selecting mint for sending from API
* Fix: set specific mint via API
* Fix: select mint with maximum balance via CLI
* Use different variables for mint_nr
* Allow selecting mint when sending via nostr via API
* Remove unnessecary 'is_api' flags from 'send_nostr'
* Remove HTTPException from nostr.py
* Allow selecting mint for sending with parameter also via CLI
* Allow trusting unknown mint for receiving also via CLI
* Make format
* Enable trusting unknown mint also when receiving via nostr
* Fix: wrong indentation of in receive function
* Use relative imports for wallet API
* Unify get_mint_wallet for CLI and API
* Unify send command for CLI and API
* Unify receive for CLI and API
* Catch errors in nostr via API
* Remove flag 'is_api' from verify_mints_tokenv2
* Remove cli_helpers left from last merge
* refactor cli selection
* load mint in nostr_send
* cleanup
* add cli_helpers.py
* legacy deserialization in cli
* make format
* clean up api response
* fix tests
* try pk
* verify mints in api
* try github tests
* Fix: verify_mints for API
* Uncomment verify_mints in receive of API
* update README
* Show mint url in pending
* clean up balance response
* fix test
* mint selection in api
* clean up API
* CLI: verify mint for receive -a
* clean up
* Rest -> REST
* Remove unused imports
---------
Co-authored-by: sihamon <sihamon@proton.me>
Co-authored-by: sihamon <126967444+sihamon@users.noreply.github.com>
* payment_hash -> hash
* add aes encryption
* urlsafe base64 for free
* move files to crypto
* use random hash instead of encryption
* get rid of useless code
* simplify
* fix private key derivation
* add backwards compatilibity for old keysets
* bump version
* test pubkeys and private keys
* make format
* reset keys for tests
* fix cli tests
* relative import all the things
* make format
* add __init__.py to cli/
* fix mypy errors
* get rid of more mypy
* mypy fix crud.py
* fix another mypy error
* Sort mints by URL when displaying balances
* Use mint with largest balance as default when spending
* Make format
* Display mint with largest balance in prompt
* fix PostMeltRequest and /checkfees to GET
* POST /check -> GET /check
* fix GetCheckSpendableResponse
* rename models
* make format
* revert GET
* bump version to 0.9
* skip nostr test
* adjust tokenv2 and make it backwards compatible
* fix dict to list
* use pydantic object and not the dtoken
* make format
* fix typo in _meltrequest_include_fields
* reorder functions
* fixes and tests working
* bump version to 0.8.3