1
0

fix swaps-over-nostr qml:

- post-rebase fixes
 - await sm.is_initalized.wait() instead of waiting 1 second
 - fix max_amount computation if channel recv capacity is higher
   than the max: the value returned by get_send_amount was zero
 - fix indentation
This commit is contained in:
ThomasV
2025-02-14 10:17:38 +01:00
parent 993a575b7f
commit 5600e79edd

View File

@@ -1,7 +1,6 @@
import asyncio import asyncio
import concurrent import concurrent
import threading import threading
import time
from enum import IntEnum from enum import IntEnum
from typing import Union, Optional from typing import Union, Optional
@@ -68,17 +67,15 @@ class QESwapServerNPubListModel(QAbstractListModel):
def initModel(self, items): def initModel(self, items):
self.beginInsertRows(QModelIndex(), len(items), len(items)) self.beginInsertRows(QModelIndex(), len(items), len(items))
self._services = [{ self._services = [{
'npub': x['pubkey'], 'npub': x['pubkey'],
'percentage_fee': x['percentage_fee'], 'percentage_fee': x['percentage_fee'],
'normal_mining_fee': x['normal_mining_fee'], 'normal_mining_fee': x['normal_mining_fee'],
'reverse_mining_fee': x['reverse_mining_fee'], 'reverse_mining_fee': x['reverse_mining_fee'],
'claim_mining_fee': x['claim_mining_fee'], 'claim_mining_fee': x['claim_mining_fee'],
'min_amount': x['min_amount'], 'min_amount': x['min_amount'],
'max_amount': x['max_amount'], 'max_amount': x['max_amount'],
'timestamp': age(x['timestamp']), 'timestamp': age(x['timestamp']),
} } for x in items]
for x in items
]
self.endInsertRows() self.endInsertRows()
self.countChanged.emit() self.countChanged.emit()
@@ -383,7 +380,6 @@ class QESwapHelper(AuthMixin, QObject, QtEventListener):
pass pass
if isinstance(transport, NostrTransport): if isinstance(transport, NostrTransport):
now = int(time.time())
if not swap_manager.is_initialized.is_set(): if not swap_manager.is_initialized.is_set():
if not transport.is_connected.is_set(): if not transport.is_connected.is_set():
self.userinfo = _('Error') + ': ' + '\n'.join([ self.userinfo = _('Error') + ': ' + '\n'.join([
@@ -392,7 +388,7 @@ class QESwapHelper(AuthMixin, QObject, QtEventListener):
]) ])
self.state = QESwapHelper.State.NoService self.state = QESwapHelper.State.NoService
return return
self.recent_offers = [x for x in transport.offers.values() if now - x['timestamp'] < NostrTransport.NOSTR_EVENT_TIMEOUT] self.recent_offers = [x for x in transport.offers.values()]
if not self.recent_offers: if not self.recent_offers:
self.userinfo = _('Could not find a swap provider.') self.userinfo = _('Could not find a swap provider.')
self.state = QESwapHelper.State.NoService self.state = QESwapHelper.State.NoService
@@ -402,7 +398,7 @@ class QESwapHelper(AuthMixin, QObject, QtEventListener):
self.undefinedNPub.emit() self.undefinedNPub.emit()
return return
else: else:
self.recent_offers = [x for x in transport.offers.values() if now - x['timestamp'] < NostrTransport.NOSTR_EVENT_TIMEOUT] self.recent_offers = [x for x in transport.offers.values()]
if not self.recent_offers: if not self.recent_offers:
self.userinfo = _('Could not find a swap provider.') self.userinfo = _('Could not find a swap provider.')
self.state = QESwapHelper.State.NoService self.state = QESwapHelper.State.NoService
@@ -438,7 +434,7 @@ class QESwapHelper(AuthMixin, QObject, QtEventListener):
max_onchain_spend = 0 max_onchain_spend = 0
reverse = int(min(lnworker.num_sats_can_send(), reverse = int(min(lnworker.num_sats_can_send(),
swap_manager.get_max_amount())) swap_manager.get_max_amount()))
max_recv_amt_ln = int(lnworker.num_sats_can_receive()) max_recv_amt_ln = min(swap_manager.get_max_amount(), int(lnworker.num_sats_can_receive()))
max_recv_amt_oc = swap_manager.get_send_amount(max_recv_amt_ln, is_reverse=False) or 0 max_recv_amt_oc = swap_manager.get_send_amount(max_recv_amt_ln, is_reverse=False) or 0
forward = int(min(max_recv_amt_oc, forward = int(min(max_recv_amt_oc,
# maximally supported swap amount by provider # maximally supported swap amount by provider
@@ -625,14 +621,15 @@ class QESwapHelper(AuthMixin, QObject, QtEventListener):
swap_manager = self._wallet.wallet.lnworker.swap_manager swap_manager = self._wallet.wallet.lnworker.swap_manager
loop = get_asyncio_loop() loop = get_asyncio_loop()
with self._wallet.wallet.lnworker.swap_manager.create_transport() as transport: with self._wallet.wallet.lnworker.swap_manager.create_transport() as transport:
coro = swap_manager.reverse_swap( async def coro():
transport, await swap_manager.is_initialized.wait()
lightning_amount_sat=lightning_amount, return await swap_manager.reverse_swap(
expected_onchain_amount_sat=onchain_amount + swap_manager.get_claim_fee(), transport,
) lightning_amount_sat=lightning_amount,
expected_onchain_amount_sat=onchain_amount + swap_manager.get_claim_fee(),
)
try: try:
time.sleep(1) # FIXME: this is needed because transport hasn't finished initializing yet. fut = asyncio.run_coroutine_threadsafe(coro(), loop)
fut = asyncio.run_coroutine_threadsafe(coro, loop)
self.userinfo = _('Performing swap...') self.userinfo = _('Performing swap...')
self.state = QESwapHelper.State.Started self.state = QESwapHelper.State.Started
txid = fut.result() txid = fut.result()