mirror of
https://github.com/lnbits/lnbits-legend.git
synced 2025-02-24 14:51:05 +01:00
147 lines
3 KiB
Python
147 lines
3 KiB
Python
from sqlite3 import Row
|
|
from typing import List, Union
|
|
|
|
from fastapi import Query
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class Cashu(BaseModel):
|
|
id: str = Query(None)
|
|
name: str = Query(None)
|
|
wallet: str = Query(None)
|
|
tickershort: str = Query(None)
|
|
fraction: bool = Query(None)
|
|
maxsats: int = Query(0)
|
|
coins: int = Query(0)
|
|
keyset_id: str = Query(None)
|
|
|
|
@classmethod
|
|
def from_row(cls, row: Row):
|
|
return cls(**dict(row))
|
|
|
|
|
|
class Pegs(BaseModel):
|
|
id: str
|
|
wallet: str
|
|
inout: str
|
|
amount: str
|
|
|
|
@classmethod
|
|
def from_row(cls, row: Row):
|
|
return cls(**dict(row))
|
|
|
|
|
|
class PayLnurlWData(BaseModel):
|
|
lnurl: str
|
|
|
|
|
|
class Promises(BaseModel):
|
|
id: str
|
|
amount: int
|
|
B_b: str
|
|
C_b: str
|
|
cashu_id: str
|
|
|
|
|
|
class Proof(BaseModel):
|
|
amount: int
|
|
secret: str
|
|
C: str
|
|
reserved: bool = False # whether this proof is reserved for sending
|
|
send_id: str = "" # unique ID of send attempt
|
|
time_created: str = ""
|
|
time_reserved: str = ""
|
|
|
|
@classmethod
|
|
def from_row(cls, row: Row):
|
|
return cls(
|
|
amount=row[0],
|
|
C=row[1],
|
|
secret=row[2],
|
|
reserved=row[3] or False,
|
|
send_id=row[4] or "",
|
|
time_created=row[5] or "",
|
|
time_reserved=row[6] or "",
|
|
)
|
|
|
|
@classmethod
|
|
def from_dict(cls, d: dict):
|
|
assert "secret" in d, "no secret in proof"
|
|
assert "amount" in d, "no amount in proof"
|
|
return cls(
|
|
amount=d.get("amount"),
|
|
C=d.get("C"),
|
|
secret=d.get("secret"),
|
|
reserved=d.get("reserved") or False,
|
|
send_id=d.get("send_id") or "",
|
|
time_created=d.get("time_created") or "",
|
|
time_reserved=d.get("time_reserved") or "",
|
|
)
|
|
|
|
def to_dict(self):
|
|
return dict(amount=self.amount, secret=self.secret, C=self.C)
|
|
|
|
def __getitem__(self, key):
|
|
return self.__getattribute__(key)
|
|
|
|
def __setitem__(self, key, val):
|
|
self.__setattr__(key, val)
|
|
|
|
|
|
class Proofs(BaseModel):
|
|
"""TODO: Use this model"""
|
|
|
|
proofs: List[Proof]
|
|
|
|
|
|
class Invoice(BaseModel):
|
|
amount: int
|
|
pr: str
|
|
hash: str
|
|
issued: bool = False
|
|
|
|
@classmethod
|
|
def from_row(cls, row: Row):
|
|
return cls(
|
|
amount=int(row[0]),
|
|
pr=str(row[1]),
|
|
hash=str(row[2]),
|
|
issued=bool(row[3]),
|
|
)
|
|
|
|
|
|
class BlindedMessage(BaseModel):
|
|
amount: int
|
|
B_: str
|
|
|
|
|
|
class BlindedSignature(BaseModel):
|
|
amount: int
|
|
C_: str
|
|
|
|
@classmethod
|
|
def from_dict(cls, d: dict):
|
|
return cls(
|
|
amount=d["amount"],
|
|
C_=d["C_"],
|
|
)
|
|
|
|
|
|
class MintPayloads(BaseModel):
|
|
blinded_messages: List[BlindedMessage] = []
|
|
|
|
|
|
class SplitPayload(BaseModel):
|
|
proofs: List[Proof]
|
|
amount: int
|
|
output_data: MintPayloads
|
|
|
|
|
|
class CheckPayload(BaseModel):
|
|
proofs: List[Proof]
|
|
|
|
|
|
class MeltPayload(BaseModel):
|
|
proofs: List[Proof]
|
|
amount: int
|
|
invoice: str
|