mirror of
https://github.com/aljazceru/nutshell.git
synced 2026-02-02 23:34:21 +01:00
[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:
@@ -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
|
||||
|
||||
@@ -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"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user