Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions cashu/core/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -1494,6 +1494,9 @@ class PaymentRequest(BaseModel):
u: Optional[str] = None # unit
s: Optional[bool] = None # single use
m: Optional[List[str]] = None # mints
ms: Optional[bool] = None # mint list strict
fr: Optional[int] = None # fee reserve
sm: Optional[List[str]] = None # supported methods
d: Optional[str] = None # description
t: Optional[List[Transport]] = None # transports
nut10: Optional[NUT10Option] = None
16 changes: 16 additions & 0 deletions cashu/core/nuts/nut26.py
Original file line number Diff line number Diff line change
Expand Up @@ -273,13 +273,21 @@ def _pr_to_tlv(pr: PaymentRequest) -> bytes:
out += _tlv_entry(0x07, _encode_transport(tr))
if pr.nut10 is not None:
out += _tlv_entry(0x08, _encode_nut10(pr.nut10))
if pr.ms is not None:
out += _tlv_entry(0x09, bytes([1 if pr.ms else 0]))
if pr.fr is not None:
out += _tlv_entry(0x0A, struct.pack(">Q", pr.fr))
if pr.sm:
for method in pr.sm:
out += _tlv_entry(0x0B, method.encode())
return out

def _tlv_to_pr(data: bytes) -> PaymentRequest:
entries = _tlv_parse(data)
kwargs: dict = {}
mints: List[str] = []
transports: List[Transport] = []
supported_methods: List[str] = []

for tag, val in entries:
if len(val) == 0 and tag in (0x01,):
Expand Down Expand Up @@ -307,11 +315,19 @@ def _tlv_to_pr(data: bytes) -> PaymentRequest:
transports.append(_decode_transport(val))
elif tag == 0x08:
kwargs["nut10"] = _decode_nut10(val)
elif tag == 0x09:
kwargs["ms"] = val[0] == 1
elif tag == 0x0A:
kwargs["fr"] = struct.unpack(">Q", val)[0]
elif tag == 0x0B:
supported_methods.append(val.decode())

if mints:
kwargs["m"] = mints
if transports:
kwargs["t"] = transports
if supported_methods:
kwargs["sm"] = supported_methods

return PaymentRequest(**kwargs)

Expand Down
Loading