mirror of
https://github.com/aljazceru/nutshell.git
synced 2025-12-22 03:24:18 +01:00
Determinstic secrets / ecash restore (#131)
* 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
This commit is contained in:
@@ -1,23 +1,27 @@
|
||||
import base64
|
||||
import json
|
||||
import os
|
||||
from typing import List, Optional
|
||||
|
||||
import click
|
||||
from loguru import logger
|
||||
|
||||
from ..core.base import TokenV1, TokenV2, TokenV3, TokenV3Token
|
||||
from ..core.db import Database
|
||||
from ..core.helpers import sum_proofs
|
||||
from ..core.migrations import migrate_databases
|
||||
from ..core.settings import settings
|
||||
from ..wallet import migrations
|
||||
from ..wallet.crud import get_keyset, get_unused_locks
|
||||
from ..wallet.wallet import Wallet as Wallet
|
||||
from ..wallet.crud import get_keyset
|
||||
from ..wallet.wallet import Wallet
|
||||
|
||||
|
||||
async def migrate_wallet_db(db: Database):
|
||||
await migrate_databases(db, migrations)
|
||||
|
||||
|
||||
async def init_wallet(wallet: Wallet, load_proofs: bool = True):
|
||||
"""Performs migrations and loads proofs from db."""
|
||||
await migrate_databases(wallet.db, migrations)
|
||||
await wallet._migrate_database()
|
||||
await wallet._init_private_key()
|
||||
if load_proofs:
|
||||
await wallet.load_proofs(reload=True)
|
||||
|
||||
@@ -31,7 +35,9 @@ async def redeem_TokenV3_multimint(wallet: Wallet, token: TokenV3):
|
||||
assert t.mint, Exception(
|
||||
"redeem_TokenV3_multimint: multimint redeem without URL"
|
||||
)
|
||||
mint_wallet = Wallet(t.mint, os.path.join(settings.cashu_dir, wallet.name))
|
||||
mint_wallet = await Wallet.with_db(
|
||||
t.mint, os.path.join(settings.cashu_dir, wallet.name)
|
||||
)
|
||||
keysets = mint_wallet._get_proofs_keysets(t.proofs)
|
||||
logger.debug(f"Keysets in tokens: {keysets}")
|
||||
# loop over all keysets
|
||||
@@ -130,7 +136,7 @@ async def receive(
|
||||
assert mint_keysets, Exception("we don't know this keyset")
|
||||
assert mint_keysets.mint_url, Exception("we don't know this mint's URL")
|
||||
# now we have the URL
|
||||
mint_wallet = Wallet(
|
||||
mint_wallet = await Wallet.with_db(
|
||||
mint_keysets.mint_url,
|
||||
os.path.join(settings.cashu_dir, wallet.name),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user