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