restore quick settle

This commit is contained in:
Arc 2026-07-27 11:26:06 +01:00 committed by dni ⚡
parent 493d6a821d
commit 32ed9ade52
2 changed files with 35 additions and 19 deletions

View file

@ -88,11 +88,7 @@ class SparkL2Wallet(Wallet):
await self._check_sidecar_mnemonic()
return StatusResponse("Spark sidecar mnemonic not set", 0)
if status == "recovering":
incoming_sats = int(res.get("incoming_sats") or 0)
return StatusResponse(
f"Spark wallet recovering; {incoming_sats} sats incoming.",
0,
)
return StatusResponse(None, 0)
if status != "ready":
return StatusResponse(
f"Spark sidecar is not ready: {status or 'unknown'}.", 0
@ -247,7 +243,7 @@ class SparkL2Wallet(Wallet):
preimage = res.get("preimage")
if preimage and self._preimage_matches_payment_hash(preimage, checking_id):
if fee_msat is None:
logger.error(
logger.warning(
"Spark sidecar returned a successful payment without a fee."
)
return PaymentPendingStatus()
@ -266,7 +262,7 @@ class SparkL2Wallet(Wallet):
mapped = self._map_payment_status(status)
if mapped.success:
if fee_msat is None:
logger.error(
logger.warning(
"Spark sidecar returned a successful payment without a fee."
)
return PaymentPendingStatus()
@ -364,8 +360,18 @@ class SparkL2Wallet(Wallet):
await asyncio.sleep(5)
def _map_invoice_status(self, status: str) -> PaymentStatus:
success = {"TRANSFER_COMPLETED"}
failed = {"TRANSFER_FAILED"}
success = {
"LIGHTNING_PAYMENT_RECEIVED",
"TRANSFER_COMPLETED",
"PAYMENT_PREIMAGE_RECOVERED",
}
failed = {
"TRANSFER_FAILED",
"PAYMENT_PREIMAGE_RECOVERING_FAILED",
"REFUND_SIGNING_FAILED",
"REFUND_SIGNING_COMMITMENTS_QUERYING_FAILED",
"TRANSFER_CREATION_FAILED",
}
if status in success:
return PaymentSuccessStatus()
if status in failed:
@ -373,8 +379,18 @@ class SparkL2Wallet(Wallet):
return PaymentPendingStatus()
def _map_payment_status(self, status: str) -> PaymentStatus:
success = {"TRANSFER_COMPLETED"}
failed = {"TRANSFER_FAILED"}
success = {
"LIGHTNING_PAYMENT_SUCCEEDED",
"TRANSFER_COMPLETED",
"PREIMAGE_PROVIDED",
}
failed = {
"LIGHTNING_PAYMENT_FAILED",
"TRANSFER_FAILED",
"PREIMAGE_PROVIDING_FAILED",
"USER_TRANSFER_VALIDATION_FAILED",
"USER_SWAP_RETURN_FAILED",
}
if status in success:
return PaymentSuccessStatus()
if status in failed:

View file

@ -33,7 +33,7 @@ async def test_status_returns_stable_available_balance(mocker: MockerFixture):
@pytest.mark.anyio
async def test_status_rejects_recovering_balance(mocker: MockerFixture):
async def test_status_accepts_recovering_balance_as_zero(mocker: MockerFixture):
wallet = object.__new__(SparkL2Wallet)
mocker.patch.object(
wallet,
@ -51,7 +51,7 @@ async def test_status_rejects_recovering_balance(mocker: MockerFixture):
status = await wallet.status()
assert status.error_message == "Spark wallet recovering; 658672 sats incoming."
assert status.error_message is None
assert status.balance_msat == 0
@ -207,20 +207,20 @@ async def test_pay_invoice_rejects_invalid_bolt11_before_sidecar(
request.assert_not_awaited()
def test_payment_status_waits_for_transfer_settlement():
def test_payment_status_accepts_spark_success_states():
wallet = object.__new__(SparkL2Wallet)
assert wallet._map_payment_status("LIGHTNING_PAYMENT_SUCCEEDED").pending
assert wallet._map_payment_status("PREIMAGE_PROVIDED").pending
assert wallet._map_payment_status("LIGHTNING_PAYMENT_SUCCEEDED").success
assert wallet._map_payment_status("PREIMAGE_PROVIDED").success
assert wallet._map_payment_status("TRANSFER_COMPLETED").success
assert wallet._map_payment_status("TRANSFER_FAILED").failed
def test_invoice_status_waits_for_transfer_settlement():
def test_invoice_status_accepts_spark_receive_success_states():
wallet = object.__new__(SparkL2Wallet)
assert wallet._map_invoice_status("LIGHTNING_PAYMENT_RECEIVED").pending
assert wallet._map_invoice_status("PAYMENT_PREIMAGE_RECOVERED").pending
assert wallet._map_invoice_status("LIGHTNING_PAYMENT_RECEIVED").success
assert wallet._map_invoice_status("PAYMENT_PREIMAGE_RECOVERED").success
assert wallet._map_invoice_status("TRANSFER_COMPLETED").success
assert wallet._map_invoice_status("TRANSFER_FAILED").failed