Files
nutshell/cashu/wallet/htlc.py
callebtc d827579e65 Coalesce all witness fields to Proof.witness (#342)
* call proofs field witness

* test p2pk sig_all=True

* outputs also use witness field
2023-10-13 21:33:21 +02:00

55 lines
1.5 KiB
Python

import hashlib
from datetime import datetime, timedelta
from typing import List, Optional
from ..core import bolt11 as bolt11
from ..core.base import HTLCWitness, Proof
from ..core.db import Database
from ..core.htlc import (
HTLCSecret,
)
from ..core.secret import SecretKind, Tags
from .protocols import SupportsDb
class WalletHTLC(SupportsDb):
db: Database
async def create_htlc_lock(
self,
*,
preimage: Optional[str] = None,
preimage_hash: Optional[str] = None,
hashlock_pubkey: Optional[str] = None,
locktime_seconds: Optional[int] = None,
locktime_pubkey: Optional[str] = None,
) -> HTLCSecret:
tags = Tags()
if locktime_seconds:
tags["locktime"] = str(
int((datetime.now() + timedelta(seconds=locktime_seconds)).timestamp())
)
if locktime_pubkey:
tags["refund"] = locktime_pubkey
if not preimage_hash and preimage:
preimage_hash = hashlib.sha256(bytes.fromhex(preimage)).hexdigest()
assert preimage_hash, "preimage_hash or preimage must be provided"
if hashlock_pubkey:
tags["pubkeys"] = hashlock_pubkey
return HTLCSecret(
kind=SecretKind.HTLC,
data=preimage_hash,
tags=tags,
)
async def add_htlc_preimage_to_proofs(
self, proofs: List[Proof], preimage: str
) -> List[Proof]:
for p in proofs:
p.witness = HTLCWitness(preimage=preimage).json()
return proofs