1
0

Merge pull request #9755 from f321x/psbt_nostr_proxy

plugin: psbt_nostr: use proxy in psbt cosigning plugin
This commit is contained in:
accumulator
2025-04-28 22:01:04 +02:00
committed by GitHub

View File

@@ -38,11 +38,13 @@ from electrum.i18n import _
from electrum.logging import Logger from electrum.logging import Logger
from electrum.plugin import BasePlugin from electrum.plugin import BasePlugin
from electrum.transaction import PartialTransaction, tx_from_any from electrum.transaction import PartialTransaction, tx_from_any
from electrum.util import log_exceptions, OldTaskGroup, ca_path, trigger_callback, event_listener from electrum.util import (log_exceptions, OldTaskGroup, ca_path, trigger_callback, event_listener,
make_aiohttp_proxy_connector)
from electrum.wallet import Multisig_Wallet from electrum.wallet import Multisig_Wallet
if TYPE_CHECKING: if TYPE_CHECKING:
from electrum.wallet import Abstract_Wallet from electrum.wallet import Abstract_Wallet
from aiohttp_socks import ProxyConnector
# event kind used for nostr messages (with expiration tag) # event kind used for nostr messages (with expiration tag)
NOSTR_EVENT_KIND = 4 NOSTR_EVENT_KIND = 4
@@ -122,6 +124,14 @@ class CosignerWallet(Logger):
self.logger.debug('starting handling of PSBTs') self.logger.debug('starting handling of PSBTs')
self.wallet_uptodate.set() self.wallet_uptodate.set()
@event_listener
async def on_event_proxy_set(self, *args):
if not (self.network and self.nostr_pubkey):
return
await self.stop()
self.taskgroup = OldTaskGroup()
asyncio.run_coroutine_threadsafe(self.main_loop(), self.network.asyncio_loop)
@log_exceptions @log_exceptions
async def main_loop(self): async def main_loop(self):
self.logger.info("starting taskgroup.") self.logger.info("starting taskgroup.")
@@ -139,15 +149,17 @@ class CosignerWallet(Logger):
@asynccontextmanager @asynccontextmanager
async def nostr_manager(self): async def nostr_manager(self):
if self.network.proxy and self.network.proxy.enabled:
proxy = make_aiohttp_proxy_connector(self.network.proxy, self.ssl_context)
else:
proxy: Optional['ProxyConnector'] = None
manager_logger = self.logger.getChild('aionostr') manager_logger = self.logger.getChild('aionostr')
manager_logger.setLevel("INFO") # set to INFO because DEBUG is very spammy manager_logger.setLevel("INFO") # set to INFO because DEBUG is very spammy
async with aionostr.Manager( async with aionostr.Manager(
relays=self.config.NOSTR_RELAYS.split(','), relays=self.config.NOSTR_RELAYS.split(','),
private_key=self.nostr_privkey, private_key=self.nostr_privkey,
ssl_context=self.ssl_context, ssl_context=self.ssl_context,
# todo: add proxy support, first needs: proxy=proxy,
# https://github.com/spesmilo/electrum-aionostr/pull/8
proxy=None,
log=manager_logger log=manager_logger
) as manager: ) as manager:
yield manager yield manager