mirror of
https://github.com/aljazceru/nutshell.git
synced 2025-12-22 03:24:18 +01:00
[Wallet/Mint] DLEQ proofs (#175)
* 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>
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import json
|
||||
import time
|
||||
from typing import Any, List, Optional, Tuple
|
||||
|
||||
@@ -9,12 +10,12 @@ async def store_proof(
|
||||
proof: Proof,
|
||||
db: Database,
|
||||
conn: Optional[Connection] = None,
|
||||
):
|
||||
) -> None:
|
||||
await (conn or db).execute(
|
||||
"""
|
||||
INSERT INTO proofs
|
||||
(id, amount, C, secret, time_created, derivation_path)
|
||||
VALUES (?, ?, ?, ?, ?, ?)
|
||||
(id, amount, C, secret, time_created, derivation_path, dleq)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||
""",
|
||||
(
|
||||
proof.id,
|
||||
@@ -23,6 +24,7 @@ async def store_proof(
|
||||
str(proof.secret),
|
||||
int(time.time()),
|
||||
proof.derivation_path,
|
||||
json.dumps(proof.dleq.dict()) if proof.dleq else "",
|
||||
),
|
||||
)
|
||||
|
||||
@@ -30,29 +32,29 @@ async def store_proof(
|
||||
async def get_proofs(
|
||||
db: Database,
|
||||
conn: Optional[Connection] = None,
|
||||
):
|
||||
) -> List[Proof]:
|
||||
rows = await (conn or db).fetchall("""
|
||||
SELECT * from proofs
|
||||
""")
|
||||
return [Proof(**dict(r)) for r in rows]
|
||||
return [Proof.from_dict(dict(r)) for r in rows]
|
||||
|
||||
|
||||
async def get_reserved_proofs(
|
||||
db: Database,
|
||||
conn: Optional[Connection] = None,
|
||||
):
|
||||
) -> List[Proof]:
|
||||
rows = await (conn or db).fetchall("""
|
||||
SELECT * from proofs
|
||||
WHERE reserved
|
||||
""")
|
||||
return [Proof(**r) for r in rows]
|
||||
return [Proof.from_dict(dict(r)) for r in rows]
|
||||
|
||||
|
||||
async def invalidate_proof(
|
||||
proof: Proof,
|
||||
db: Database,
|
||||
conn: Optional[Connection] = None,
|
||||
):
|
||||
) -> None:
|
||||
await (conn or db).execute(
|
||||
"""
|
||||
DELETE FROM proofs
|
||||
@@ -84,7 +86,7 @@ async def update_proof_reserved(
|
||||
send_id: str = "",
|
||||
db: Optional[Database] = None,
|
||||
conn: Optional[Connection] = None,
|
||||
):
|
||||
) -> None:
|
||||
clauses = []
|
||||
values: List[Any] = []
|
||||
clauses.append("reserved = ?")
|
||||
@@ -109,7 +111,7 @@ async def secret_used(
|
||||
secret: str,
|
||||
db: Database,
|
||||
conn: Optional[Connection] = None,
|
||||
):
|
||||
) -> bool:
|
||||
rows = await (conn or db).fetchone(
|
||||
"""
|
||||
SELECT * from proofs
|
||||
@@ -124,7 +126,7 @@ async def store_p2sh(
|
||||
p2sh: P2SHScript,
|
||||
db: Database,
|
||||
conn: Optional[Connection] = None,
|
||||
):
|
||||
) -> None:
|
||||
await (conn or db).execute(
|
||||
"""
|
||||
INSERT INTO p2sh
|
||||
@@ -144,7 +146,7 @@ async def get_unused_locks(
|
||||
address: str = "",
|
||||
db: Optional[Database] = None,
|
||||
conn: Optional[Connection] = None,
|
||||
):
|
||||
) -> List[P2SHScript]:
|
||||
clause: List[str] = []
|
||||
args: List[str] = []
|
||||
|
||||
@@ -173,7 +175,7 @@ async def update_p2sh_used(
|
||||
used: bool,
|
||||
db: Optional[Database] = None,
|
||||
conn: Optional[Connection] = None,
|
||||
):
|
||||
) -> None:
|
||||
clauses = []
|
||||
values = []
|
||||
clauses.append("used = ?")
|
||||
@@ -190,7 +192,7 @@ async def store_keyset(
|
||||
mint_url: str = "",
|
||||
db: Optional[Database] = None,
|
||||
conn: Optional[Connection] = None,
|
||||
):
|
||||
) -> None:
|
||||
await (conn or db).execute( # type: ignore
|
||||
"""
|
||||
INSERT INTO keysets
|
||||
@@ -243,7 +245,7 @@ async def store_lightning_invoice(
|
||||
db: Database,
|
||||
invoice: Invoice,
|
||||
conn: Optional[Connection] = None,
|
||||
):
|
||||
) -> None:
|
||||
await (conn or db).execute(
|
||||
"""
|
||||
INSERT INTO invoices
|
||||
@@ -266,7 +268,7 @@ async def get_lightning_invoice(
|
||||
db: Database,
|
||||
hash: str = "",
|
||||
conn: Optional[Connection] = None,
|
||||
):
|
||||
) -> Invoice:
|
||||
clauses = []
|
||||
values: List[Any] = []
|
||||
if hash:
|
||||
@@ -291,7 +293,7 @@ async def get_lightning_invoices(
|
||||
db: Database,
|
||||
paid: Optional[bool] = None,
|
||||
conn: Optional[Connection] = None,
|
||||
):
|
||||
) -> List[Invoice]:
|
||||
clauses: List[Any] = []
|
||||
values: List[Any] = []
|
||||
|
||||
@@ -319,7 +321,7 @@ async def update_lightning_invoice(
|
||||
paid: bool,
|
||||
time_paid: Optional[int] = None,
|
||||
conn: Optional[Connection] = None,
|
||||
):
|
||||
) -> None:
|
||||
clauses = []
|
||||
values: List[Any] = []
|
||||
clauses.append("paid = ?")
|
||||
@@ -344,7 +346,7 @@ async def bump_secret_derivation(
|
||||
by: int = 1,
|
||||
skip: bool = False,
|
||||
conn: Optional[Connection] = None,
|
||||
):
|
||||
) -> int:
|
||||
rows = await (conn or db).fetchone(
|
||||
"SELECT counter from keysets WHERE id = ?", (keyset_id,)
|
||||
)
|
||||
@@ -374,7 +376,7 @@ async def set_secret_derivation(
|
||||
keyset_id: str,
|
||||
counter: int,
|
||||
conn: Optional[Connection] = None,
|
||||
):
|
||||
) -> None:
|
||||
await (conn or db).execute(
|
||||
"UPDATE keysets SET counter = ? WHERE id = ?",
|
||||
(
|
||||
@@ -388,7 +390,7 @@ async def set_nostr_last_check_timestamp(
|
||||
db: Database,
|
||||
timestamp: int,
|
||||
conn: Optional[Connection] = None,
|
||||
):
|
||||
) -> None:
|
||||
await (conn or db).execute(
|
||||
"UPDATE nostr SET last = ? WHERE type = ?",
|
||||
(timestamp, "dm"),
|
||||
@@ -398,7 +400,7 @@ async def set_nostr_last_check_timestamp(
|
||||
async def get_nostr_last_check_timestamp(
|
||||
db: Database,
|
||||
conn: Optional[Connection] = None,
|
||||
):
|
||||
) -> Optional[int]:
|
||||
row = await (conn or db).fetchone(
|
||||
"""
|
||||
SELECT last from nostr WHERE type = ?
|
||||
@@ -432,7 +434,7 @@ async def store_seed_and_mnemonic(
|
||||
seed: str,
|
||||
mnemonic: str,
|
||||
conn: Optional[Connection] = None,
|
||||
):
|
||||
) -> None:
|
||||
await (conn or db).execute(
|
||||
"""
|
||||
INSERT INTO seed
|
||||
|
||||
Reference in New Issue
Block a user