[FIX] Reject Internal MPP Melt Quote Requests (#697)

* fix

* fix the fix

* make sure the mpp is supported before testing

* adjust message

---------

Co-authored-by: callebtc <93376500+callebtc@users.noreply.github.com>
This commit is contained in:
lollerfirst
2025-01-29 21:00:35 +01:00
committed by GitHub
parent 320c70060e
commit e9952e59ed
2 changed files with 22 additions and 1 deletions

View File

@@ -668,12 +668,16 @@ class Ledger(LedgerVerification, LedgerSpendingConditions, LedgerTasks, LedgerFe
# and therefore respond with internal transaction fees (0 for now)
mint_quote = await self.crud.get_mint_quote(request=request, db=self.db)
if mint_quote and mint_quote.unit == melt_quote.unit:
# check if the melt quote is partial and error if it is.
# it's just not possible to handle this case
if melt_quote.is_mpp:
raise TransactionError("internal mpp not allowed.")
payment_quote = self.create_internal_melt_quote(mint_quote, melt_quote)
else:
# not internal
# verify that the backend supports mpp if the quote request has an amount
if melt_quote.is_mpp and not self.backends[method][unit].supports_mpp:
raise TransactionError("backend does not support mpp")
raise TransactionError("backend does not support mpp.")
# get payment quote by backend
payment_quote = await self.backends[method][unit].get_payment_quote(
melt_quote=melt_quote

View File

@@ -11,6 +11,7 @@ from cashu.mint.ledger import Ledger
from cashu.wallet.wallet import Wallet
from tests.conftest import SERVER_ENDPOINT
from tests.helpers import (
assert_err,
get_real_invoice,
is_fake,
partial_pay_real_invoice,
@@ -139,3 +140,19 @@ async def test_regtest_pay_mpp_incomplete_payment(wallet: Wallet, ledger: Ledger
await asyncio.sleep(2)
assert wallet.balance <= 384 - 64
@pytest.mark.asyncio
@pytest.mark.skipif(is_fake, reason="only regtest")
async def test_regtest_internal_mpp_melt_quotes(wallet: Wallet, ledger: Ledger):
# make sure that mpp is supported by the bolt11-sat backend
if not ledger.backends[Method["bolt11"]][wallet.unit].supports_mpp:
pytest.skip("backend does not support mpp")
# create a mint quote
mint_quote = await wallet.request_mint(128)
# try and create a multi-part melt quote
await assert_err(
wallet.melt_quote(mint_quote.request, 100), "internal mpp not allowed"
)