output_data -> outputs

This commit is contained in:
callebtc
2022-10-05 18:57:04 +02:00
parent ea5aead235
commit 7271f982a4
4 changed files with 19 additions and 14 deletions

View File

@@ -113,7 +113,17 @@ class MintPayloads(BaseModel):
class SplitPayload(BaseModel):
proofs: List[Proof]
amount: int
output_data: MintPayloads
output_data: MintPayloads = None # backwards compatibility with clients < v0.2.1
outputs: MintPayloads = None
def __init__(self):
self.backwards_compatibility_v021()
def backwards_compatibility_v021(self):
# before v0.2.1: output_data, after: outputs
if self.output_data:
self.outputs = self.output_data
self.output_data = None
class CheckPayload(BaseModel):

View File

@@ -124,24 +124,20 @@ class Ledger:
), f"secret does not contain correct P2SH address: {proof.secret.split(':')[1]}!={txin_p2sh_address}."
return valid
def _verify_outputs(
self, total: int, amount: int, output_data: List[BlindedMessage]
):
def _verify_outputs(self, total: int, amount: int, outputs: List[BlindedMessage]):
"""Verifies the expected split was correctly computed"""
fst_amt, snd_amt = total - amount, amount # we have two amounts to split to
fst_outputs = amount_split(fst_amt)
snd_outputs = amount_split(snd_amt)
expected = fst_outputs + snd_outputs
given = [o.amount for o in output_data]
given = [o.amount for o in outputs]
return given == expected
def _verify_no_duplicates(
self, proofs: List[Proof], output_data: List[BlindedMessage]
):
def _verify_no_duplicates(self, proofs: List[Proof], outputs: List[BlindedMessage]):
secrets = [p.secret for p in proofs]
if len(secrets) != len(list(set(secrets))):
return False
B_s = [od.B_ for od in output_data]
B_s = [od.B_ for od in outputs]
if len(B_s) != len(list(set(B_s))):
return False
return True

View File

@@ -3,8 +3,7 @@ from typing import Union
from fastapi import APIRouter
from secp256k1 import PublicKey
from cashu.core.base import (CheckPayload, MeltPayload, MintPayloads,
SplitPayload)
from cashu.core.base import CheckPayload, MeltPayload, MintPayloads, SplitPayload
from cashu.mint import ledger
router: APIRouter = APIRouter()
@@ -77,9 +76,9 @@ async def split(payload: SplitPayload):
"""
proofs = payload.proofs
amount = payload.amount
output_data = payload.output_data.blinded_messages
outputs = payload.outputs.blinded_messages
try:
split_return = await ledger.split(proofs, amount, output_data)
split_return = await ledger.split(proofs, amount, outputs)
except Exception as exc:
return {"error": str(exc)}
if not split_return:

View File

@@ -174,7 +174,7 @@ class LedgerAPI:
), "number of secrets does not match number of outputs"
await self._check_used_secrets(secrets)
payloads, rs = self._construct_outputs(amounts, secrets)
split_payload = SplitPayload(proofs=proofs, amount=amount, output_data=payloads)
split_payload = SplitPayload(proofs=proofs, amount=amount, outputs=payloads)
resp = requests.post(
self.url + "/split",
json=split_payload.dict(),