From 5f32cfc053b4f6bde9f201f66ee945b55c8a9652 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dni=20=E2=9A=A1?= Date: Fri, 18 Oct 2024 09:08:00 +0200 Subject: [PATCH] revert fiat amounts :( --- lnbits/core/migrations.py | 1 - lnbits/core/models.py | 11 ----------- lnbits/core/services.py | 30 +++++++++++++----------------- tests/unit/test_pay_invoice.py | 2 +- 4 files changed, 14 insertions(+), 30 deletions(-) diff --git a/lnbits/core/migrations.py b/lnbits/core/migrations.py index 8f33ceff7..f3fea1099 100644 --- a/lnbits/core/migrations.py +++ b/lnbits/core/migrations.py @@ -595,7 +595,6 @@ async def m026_update_payment_table(db): await db.execute("ALTER TABLE apipayments ADD COLUMN extension TEXT") await db.execute("ALTER TABLE apipayments ADD COLUMN created_at TIMESTAMP") await db.execute("ALTER TABLE apipayments ADD COLUMN updated_at TIMESTAMP") - await db.execute("ALTER TABLE apipayments ADD COLUMN fiat_amounts TEXT") async def m027_update_apipayments_data(db): diff --git a/lnbits/core/models.py b/lnbits/core/models.py index 91655ff65..7acd63e78 100644 --- a/lnbits/core/models.py +++ b/lnbits/core/models.py @@ -270,15 +270,6 @@ class PayInvoice(BaseModel): extra: Optional[dict] = {} -class PaymentFiatAmounts(BaseModel): - wallet_fiat_currency: Optional[str] = None - wallet_fiat_amount: Optional[float] = None - wallet_fiat_rate: Optional[float] = None - fiat_currency: Optional[str] = None - fiat_amount: Optional[float] = None - fiat_rate: Optional[float] = None - - class CreatePayment(BaseModel): wallet_id: str payment_hash: str @@ -290,7 +281,6 @@ class CreatePayment(BaseModel): expiry: Optional[datetime] = None webhook: Optional[str] = None fee: int = 0 - fiat_amounts: PaymentFiatAmounts = PaymentFiatAmounts() class Payment(BaseModel): @@ -311,7 +301,6 @@ class Payment(BaseModel): time: datetime = datetime.now(timezone.utc) created_at: datetime = datetime.now(timezone.utc) updated_at: datetime = datetime.now(timezone.utc) - fiat_amounts: PaymentFiatAmounts = PaymentFiatAmounts() extra: dict = {} @property diff --git a/lnbits/core/services.py b/lnbits/core/services.py index 882c2001b..3c9c68d8d 100644 --- a/lnbits/core/services.py +++ b/lnbits/core/services.py @@ -73,7 +73,6 @@ from .models import ( BalanceDelta, CreatePayment, Payment, - PaymentFiatAmounts, PaymentState, User, UserExtra, @@ -85,15 +84,16 @@ async def calculate_fiat_amounts( amount: float, wallet: Wallet, currency: Optional[str] = None, -) -> tuple[int, PaymentFiatAmounts]: + extra: Optional[dict] = None, +) -> tuple[int, dict]: wallet_currency = wallet.currency or settings.lnbits_default_accounting_currency - fiat_amounts = PaymentFiatAmounts() + fiat_amounts: dict = extra or {} if currency and currency != "sat": amount_sat = await fiat_amount_as_satoshis(amount, currency) if currency != wallet_currency: - fiat_amounts.fiat_currency = currency - fiat_amounts.fiat_amount = round(amount, ndigits=3) - fiat_amounts.fiat_rate = amount_sat / amount + fiat_amounts["fiat_currency"] = currency + fiat_amounts["fiat_amount"] = round(amount, ndigits=3) + fiat_amounts["fiat_rate"] = amount_sat / amount else: amount_sat = int(amount) @@ -102,9 +102,9 @@ async def calculate_fiat_amounts( fiat_amount = amount else: fiat_amount = await satoshis_amount_as_fiat(amount_sat, wallet_currency) - fiat_amounts.wallet_fiat_currency = wallet_currency - fiat_amounts.wallet_fiat_amount = round(fiat_amount, ndigits=3) - fiat_amounts.wallet_fiat_rate = amount_sat / fiat_amount + fiat_amounts["wallet_fiat_currency"] = wallet_currency + fiat_amounts["wallet_fiat_amount"] = round(fiat_amount, ndigits=3) + fiat_amounts["wallet_fiat_rate"] = amount_sat / fiat_amount logger.debug( f"Calculated fiat amounts {wallet.id=} {amount=} {currency=}: {fiat_amounts=}" @@ -139,8 +139,8 @@ async def create_invoice( # use the fake wallet if the invoice is for internal use only funding_source = fake_wallet if internal else get_funding_source() - amount_sat, fiat_amounts = await calculate_fiat_amounts( - amount, user_wallet, currency + amount_sat, extra = await calculate_fiat_amounts( + amount, user_wallet, currency, extra ) if settings.is_wallet_max_balance_exceeded( @@ -179,7 +179,6 @@ async def create_invoice( expiry=invoice.expiry_date, memo=memo, extra=extra, - fiat_amounts=fiat_amounts, webhook=webhook, ) @@ -222,9 +221,7 @@ async def _pay_internal_invoice( internal_invoice.amount != abs(amount_msat) or internal_invoice.bolt11 != create_payment_model.bolt11.lower() ): - raise PaymentError( - "Invalid invoice. Bolt11 or amount is not correct", status="failed" - ) + raise PaymentError("Invalid invoice. Bolt11 changed.", status="failed") fee_reserve_total_msat = fee_reserve_total(abs(amount_msat), internal=True) create_payment_model.fee = abs(fee_reserve_total_msat) @@ -383,7 +380,7 @@ async def pay_invoice( if await is_internal_status_success(invoice.payment_hash, conn): raise PaymentError("Internal invoice already paid.", status="failed") - _, fiat_amounts = await calculate_fiat_amounts(amount_msat / 1000, wallet) + _, extra = await calculate_fiat_amounts(amount_msat / 1000, wallet, extra=extra) create_payment_model = CreatePayment( wallet_id=wallet_id, @@ -393,7 +390,6 @@ async def pay_invoice( expiry=invoice.expiry_date, memo=description or invoice.description or "", extra=extra, - fiat_amounts=fiat_amounts, ) payment = await _pay_invoice(wallet, create_payment_model, conn) diff --git a/tests/unit/test_pay_invoice.py b/tests/unit/test_pay_invoice.py index 14cd0b580..b8f6cb2b8 100644 --- a/tests/unit/test_pay_invoice.py +++ b/tests/unit/test_pay_invoice.py @@ -109,7 +109,7 @@ async def test_invoice_changed(to_wallet: Wallet): invoice.amount_msat = MilliSatoshi(12000) payment_request = bolt11_encode(invoice) - with pytest.raises(PaymentError, match="Invalid invoice."): + with pytest.raises(PaymentError, match="Invalid invoice. Bolt11 changed."): await pay_invoice( wallet_id=to_wallet.id, payment_request=payment_request,