diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 294b287..eb84072 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -34,7 +34,7 @@ repos:
rev: v1.11.2 # Use the latest MyPy version
hooks:
- id: mypy
- files: ^bitcoin_safe/
+ files: ^bitcoin_safe/|^tools/
args:
- --check-untyped-defs
# - --disallow-untyped-defs
diff --git a/bitcoin_safe/fx.py b/bitcoin_safe/fx.py
index 5c8f000..cf64a3f 100644
--- a/bitcoin_safe/fx.py
+++ b/bitcoin_safe/fx.py
@@ -43,9 +43,9 @@
class FX(QObject, ThreadingManager):
signal_data_updated: TypedPyQtSignalNo = pyqtSignal() # type: ignore
- def __init__(self, threading_parent: ThreadingManager | None = None) -> None:
+ def __init__(self, proxies: Dict | None, threading_parent: ThreadingManager | None = None) -> None:
super().__init__(threading_parent=threading_parent) # type: ignore
-
+ self.proxies = proxies
self.rates: Dict[str, Dict] = {}
self.update()
logger.debug(f"initialized {self}")
@@ -89,7 +89,6 @@ def on_success(data) -> None:
self.append_thread(
threaded_fetch(
- "https://api.coingecko.com/api/v3/exchange_rates",
- on_success,
+ "https://api.coingecko.com/api/v3/exchange_rates", on_success, proxies=self.proxies
)
)
diff --git a/bitcoin_safe/gui/icons/status_connected_proxy.svg b/bitcoin_safe/gui/icons/status_connected_proxy.svg
new file mode 100644
index 0000000..88c8ae8
--- /dev/null
+++ b/bitcoin_safe/gui/icons/status_connected_proxy.svg
@@ -0,0 +1,306 @@
+
+
+
+
diff --git a/bitcoin_safe/gui/locales/app_ar_AE.qm b/bitcoin_safe/gui/locales/app_ar_AE.qm
index 37889be..517d37f 100644
Binary files a/bitcoin_safe/gui/locales/app_ar_AE.qm and b/bitcoin_safe/gui/locales/app_ar_AE.qm differ
diff --git a/bitcoin_safe/gui/locales/app_ar_AE.ts b/bitcoin_safe/gui/locales/app_ar_AE.ts
index 4eaf096..daa2bf3 100644
--- a/bitcoin_safe/gui/locales/app_ar_AE.ts
+++ b/bitcoin_safe/gui/locales/app_ar_AE.ts
@@ -83,6 +83,10 @@
Copy as csvنسخ كملف csv
+
+ Set category
+ تعيين الفئة
+ Txتحويلة
@@ -438,6 +442,17 @@ Please back up this descriptor to be able to recover the funds!
اختر الجهاز المكتشف
+
+ DeviceManager
+
+ Trusted
+ موثوق
+
+
+ Untrusted
+ غير موثوق
+
+DisplayAddressDialog
@@ -1413,6 +1428,14 @@ Location of signing device: .....
Mempool Instance URLعنوان Mempool Instance
+
+ The proxy does not apply to the Sync&Chat feature!
+ الوكيل لا ينطبق على ميزة المزامنة والدردشة!
+
+
+ Proxy:
+ بروكسي:
+ Apply && Shutdownتطبيق && إيقاف
@@ -1721,10 +1744,26 @@ Location of signing device: .....
Choose a new name, or an existing name for merging:اختر اسمًا جديدًا، أو اسمًا موجودًا للدمج:
+
+ Syncing with {server}
+ مزامنة مع {server}
+
+
+ Connected to {server}
+ متصل بـ {server}
+
+
+ Disconnected from {server}
+ منفصل عن {server}
+ Click for new addressانقر للحصول على عنوان جديد
+
+ Sync && Chat
+ المزامنة && الدردشة
+ Export labelsتصدير التسميات
@@ -1737,10 +1776,6 @@ Location of signing device: .....
Import labelsاستيراد التسميات
-
- Sync && Chat
- المزامنة && الدردشة
- All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json)جميع الملفات (*);;ملفات JSONL (*.jsonl);;ملفات JSON (*.json)
@@ -2333,18 +2368,10 @@ You can restore your labels at a later time with 'Import Sync Key'.
- TrustedDevice
-
- Connected to {id}
- متصل ب{id}
-
-
- Syncing Address labels
- مزامنة تسميات العناوين
-
+ TrustedDeviceItem
- Can share Transactions
- يمكن مشاركة المعاملات
+ Untrust device
+ جهاز غير موثوق
@@ -2403,14 +2430,6 @@ You can restore your labels at a later time with 'Import Sync Key'.Set custom Relay list
تعيين قائمة تتابع مخصصة
-
- Trusted
- موثوق
-
-
- UnTrusted
- غير موثوق
- My Device: {id}جهازي: {id}
@@ -2625,14 +2644,14 @@ below {rate}
- UnTrustedDevice
+ UntrustedDeviceItem
- Trust {id}
- ثق {id}
+ Trust
+ ثقة
- Accept trust request from {other}
- قبول طلب الثقة من {other}
+ Trust this device
+ ثق بهذا الجهاز
@@ -3212,6 +3231,10 @@ Please install it.
This is a private and fast way to connect to the bitcoin network.هذه طريقة خاصة وسريعة للاتصال بشبكة البيتكوين.
+
+ Run your bitcoind with "bitcoind -chain=test"
+ قم بتشغيل bitcoind الخاص بك باستخدام "bitcoind -chain=test"
+ Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com.قم بتشغيل bitcoind الخاص بك باستخدام "bitcoind -chain=signet" ومع ذلك، فإن هذا التوقيع مختلف عن mutinynet.com.
@@ -3222,20 +3245,24 @@ It is best to use your own server, such as {link}.
يمكن للخادم ربط عنوان IP الخاص بك بعناوين المحفظة. من الأفضل استخدام خادمك الخاص، مثل {link}.
- You can setup {link} with an electrum server on {server} and a block explorer on {explorer}
- يمكنك إعداد {link} مع خادم إليكتروم على {server} ومستكشف الكتل على {explorer}
+ You can setup {electrum} with an electrum server on {server} and a block explorer on {explorer}
+ يمكنك إعداد {electrum} بخادم إلكتروم على {server} ومستكشف البلوك على {explorer}
+
+
+ A good option is {electrum_testnet4} and as block explorer {explorer_testnet4}
+ خيار جيد هو {electrum_testnet4} وكمستكشف بلوك {explorer_testnet4}
- A good option is {link} and a block explorer on {explorer}.
- الخيار الجيد هو {link} ومستكشف الكتل على {explorer}.
+ Signet choose {electrum} and a block explorer on {mempool_url}.
+ اختر Signet {electrum} ومستكشف بلوك على {mempool_url}. You can setup {setup} with an esplora server on {server} and a block explorer on {explorer}يمكنك إعداد {setup} باستخدام خادم esplora على {server} ومستكشف الكتل على {explorer}
- A good option is {link} and a block explorer on {explorer}. There is a {faucet}.
- الخيار الجيد هو {link} ومستكشف الكتل على {explorer}. هناك {faucet}.
+ A (somtimes working) server is {link} and a block explorer on {explorer}. There is a {faucet}.
+ خادم (يعمل أحياناً) هو {link} ومستكشف بلوك على {explorer}. هناك {faucet}. You can connect your own Bitcoin node, such as {link}.
@@ -3245,9 +3272,16 @@ It is best to use your own server, such as {link}.
Run your bitcoind with "bitcoind -chain=regtest"قم بتشغيل bitcoind الخاص بك باستخدام "bitcoind -chain=regtest"
+
+
+ network_config
- Run your bitcoind with "bitcoind -chain=test"
- قم بتشغيل bitcoind الخاص بك باستخدام "bitcoind -chain=test"
+ {server_name} via the proxy {proxy}
+ {server_name} عبر البروكسي {proxy}
+
+
+ {server_name}
+ {server_name}
diff --git a/bitcoin_safe/gui/locales/app_de_DE.qm b/bitcoin_safe/gui/locales/app_de_DE.qm
index 48b1c81..75f7b5d 100644
Binary files a/bitcoin_safe/gui/locales/app_de_DE.qm and b/bitcoin_safe/gui/locales/app_de_DE.qm differ
diff --git a/bitcoin_safe/gui/locales/app_de_DE.ts b/bitcoin_safe/gui/locales/app_de_DE.ts
index a4882b4..6b0c105 100644
--- a/bitcoin_safe/gui/locales/app_de_DE.ts
+++ b/bitcoin_safe/gui/locales/app_de_DE.ts
@@ -83,6 +83,10 @@
Copy as csvAls CSV kopieren
+
+ Set category
+ Kategorie festlegen
+ TxTx
@@ -438,6 +442,17 @@ Please back up this descriptor to be able to recover the funds!
Erkanntes Gerät auswählen
+
+ DeviceManager
+
+ Trusted
+ Vertrauenswürdig
+
+
+ Untrusted
+ Nicht vertrauenswürdig
+
+DisplayAddressDialog
@@ -1413,6 +1428,14 @@ Location of signing device: .....
Mempool Instance URLMempool Instance-URL
+
+ The proxy does not apply to the Sync&Chat feature!
+ Der Proxy gilt nicht für die Sync&Chat-Funktion!
+
+
+ Proxy:
+ Proxy:
+ Apply && ShutdownAnwenden && Herunterfahren
@@ -1718,10 +1741,26 @@ Location of signing device: .....
Choose a new name, or an existing name for merging:Wählen Sie einen neuen Namen oder einen bestehenden Namen zum Zusammenführen:
+
+ Syncing with {server}
+ Synchronisierung mit {server}
+
+
+ Connected to {server}
+ Verbunden mit {server}
+
+
+ Disconnected from {server}
+ Getrennt von {server}
+ Click for new addressFür neue Adresse klicken
+
+ Sync && Chat
+ Synchronisieren && Chatten
+ Export labelsEtiketten exportieren
@@ -1734,10 +1773,6 @@ Location of signing device: .....
Import labelsEtiketten importieren
-
- Sync && Chat
- Synchronisieren && Chatten
- All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json)Alle Dateien (*);;JSONL-Dateien (*.jsonl);;JSON-Dateien (*.json)
@@ -2330,18 +2365,10 @@ You can restore your labels at a later time with 'Import Sync Key'.
- TrustedDevice
-
- Connected to {id}
- Verbunden mit {id}
-
-
- Syncing Address labels
- Adresslabels synchronisieren
-
+ TrustedDeviceItem
- Can share Transactions
- Kann Transaktionen teilen
+ Untrust device
+ Gerät nicht vertrauen
@@ -2400,14 +2427,6 @@ You can restore your labels at a later time with 'Import Sync Key'.Set custom Relay list
Benutzerdefinierte Relay-Liste festlegen
-
- Trusted
- Vertrauenswürdig
-
-
- UnTrusted
- Nicht vertrauenswürdig
- My Device: {id}Mein Gerät: {id}
@@ -2622,14 +2641,14 @@ below {rate}
- UnTrustedDevice
+ UntrustedDeviceItem
- Trust {id}
- Vertrauen {id}
+ Trust
+ Vertrauen
- Accept trust request from {other}
- Vertrauensanfrage von {other} akzeptieren
+ Trust this device
+ Diesem Gerät vertrauen
@@ -3209,6 +3228,10 @@ Please install it.
This is a private and fast way to connect to the bitcoin network.Dies ist eine private und schnelle Möglichkeit, sich mit dem Bitcoin-Netzwerk zu verbinden.
+
+ Run your bitcoind with "bitcoind -chain=test"
+ Führen Sie Ihren bitcoind mit "bitcoind -chain=test" aus
+ Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com.Führen Sie Ihren bitcoind mit "bitcoind -chain=signet" aus. Dies ist jedoch ein anderes Signet als mutinynet.com.
@@ -3219,20 +3242,24 @@ It is best to use your own server, such as {link}.
Der Server kann Ihre IP-Adresse den Wallet-Adressen zuordnen. Es ist am besten, Ihren eigenen Server zu verwenden, wie {link}.
- You can setup {link} with an electrum server on {server} and a block explorer on {explorer}
- Sie können {link} mit einem Electrum-Server auf {server} und einem Block-Explorer auf {explorer} einrichten
+ You can setup {electrum} with an electrum server on {server} and a block explorer on {explorer}
+ Sie können {electrum} mit einem Electrum-Server auf {server} und einem Block-Explorer auf {explorer} einrichten
+
+
+ A good option is {electrum_testnet4} and as block explorer {explorer_testnet4}
+ Eine gute Option ist {electrum_testnet4} und als Block-Explorer {explorer_testnet4}
- A good option is {link} and a block explorer on {explorer}.
- Eine gute Option ist {link} und ein Block-Explorer auf {explorer}.
+ Signet choose {electrum} and a block explorer on {mempool_url}.
+ Signet wählen {electrum} und einen Block-Explorer auf {mempool_url}. You can setup {setup} with an esplora server on {server} and a block explorer on {explorer}Sie können {setup} mit einem Esplora-Server auf {server} und einem Block-Explorer auf {explorer} einrichten
- A good option is {link} and a block explorer on {explorer}. There is a {faucet}.
- Eine gute Option ist {link} und ein Block-Explorer auf {explorer}. Dort gibt es ein {faucet}.
+ A (somtimes working) server is {link} and a block explorer on {explorer}. There is a {faucet}.
+ Ein (manchmal funktionierender) Server ist {link} und ein Block-Explorer auf {explorer}. Es gibt ein {faucet}. You can connect your own Bitcoin node, such as {link}.
@@ -3242,9 +3269,16 @@ It is best to use your own server, such as {link}.
Run your bitcoind with "bitcoind -chain=regtest"Führen Sie Ihren bitcoind mit "bitcoind -chain=regtest" aus
+
+
+ network_config
- Run your bitcoind with "bitcoind -chain=test"
- Führen Sie Ihren bitcoind mit "bitcoind -chain=test" aus
+ {server_name} via the proxy {proxy}
+ {server_name} über den Proxy {proxy}
+
+
+ {server_name}
+ {server_name}
diff --git a/bitcoin_safe/gui/locales/app_es_ES.qm b/bitcoin_safe/gui/locales/app_es_ES.qm
index 20ce15f..7e8e909 100644
Binary files a/bitcoin_safe/gui/locales/app_es_ES.qm and b/bitcoin_safe/gui/locales/app_es_ES.qm differ
diff --git a/bitcoin_safe/gui/locales/app_es_ES.ts b/bitcoin_safe/gui/locales/app_es_ES.ts
index 6a27833..f82fbd5 100644
--- a/bitcoin_safe/gui/locales/app_es_ES.ts
+++ b/bitcoin_safe/gui/locales/app_es_ES.ts
@@ -83,6 +83,10 @@
Copy as csvCopiar como csv
+
+ Set category
+ Establecer categoría
+ TxTx
@@ -438,6 +442,17 @@ Please back up this descriptor to be able to recover the funds!
Seleccionar el dispositivo detectado
+
+ DeviceManager
+
+ Trusted
+ Confiado
+
+
+ Untrusted
+ No confiado
+
+DisplayAddressDialog
@@ -1413,6 +1428,14 @@ Location of signing device: .....
Mempool Instance URLURL de instancia de Mempool
+
+ The proxy does not apply to the Sync&Chat feature!
+ ¡El proxy no se aplica a la función de Sincronización y Chat!
+
+
+ Proxy:
+ Proxy:
+ Apply && ShutdownAplicar && Apagar
@@ -1721,10 +1744,26 @@ Location of signing device: .....
Choose a new name, or an existing name for merging:Elige un nuevo nombre o un nombre existente para fusionar:
+
+ Syncing with {server}
+ Sincronizando con {server}
+
+
+ Connected to {server}
+ Conectado a {server}
+
+
+ Disconnected from {server}
+ Desconectado de {server}
+ Click for new addressHaz clic para una nueva dirección
+
+ Sync && Chat
+ Sincronizar && Chatear
+ Export labelsExportar etiquetas
@@ -1737,10 +1776,6 @@ Location of signing device: .....
Import labelsImportar etiquetas
-
- Sync && Chat
- Sincronizar && Chatear
- All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json)Todos los archivos (*);;Archivos JSONL (*.jsonl);;Archivos JSON (*.json)
@@ -2333,18 +2368,10 @@ You can restore your labels at a later time with 'Import Sync Key'.
- TrustedDevice
-
- Connected to {id}
- Conectado a {id}
-
-
- Syncing Address labels
- Sincronizando etiquetas de direcciones
-
+ TrustedDeviceItem
- Can share Transactions
- Puede compartir transacciones
+ Untrust device
+ Dispositivo no confiable
@@ -2403,14 +2430,6 @@ You can restore your labels at a later time with 'Import Sync Key'.Set custom Relay list
Establecer lista personalizada de Relay
-
- Trusted
- Confiado
-
-
- UnTrusted
- No confiado
- My Device: {id}Mi dispositivo: {id}
@@ -2625,14 +2644,14 @@ below {rate}
- UnTrustedDevice
+ UntrustedDeviceItem
- Trust {id}
- Confiar {id}
+ Trust
+ Confianza
- Accept trust request from {other}
- Aceptar solicitud de confianza de {other}
+ Trust this device
+ Confía en este dispositivo
@@ -3212,6 +3231,10 @@ Please install it.
This is a private and fast way to connect to the bitcoin network.Esta es una forma privada y rápida de conectarse a la red bitcoin.
+
+ Run your bitcoind with "bitcoind -chain=test"
+ Ejecuta tu bitcoind con "bitcoind -chain=test"
+ Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com.Ejecuta tu bitcoind con "bitcoind -chain=signet" Sin embargo, este es un signet diferente al de mutinynet.com.
@@ -3222,20 +3245,24 @@ It is best to use your own server, such as {link}.
El servidor puede asociar tu dirección IP con las direcciones de la cartera. Es mejor usar tu propio servidor, como {link}.
- You can setup {link} with an electrum server on {server} and a block explorer on {explorer}
- Puedes configurar {link} con un servidor de electrum en {server} y un explorador de bloques en {explorer}
+ You can setup {electrum} with an electrum server on {server} and a block explorer on {explorer}
+ Puedes configurar {electrum} con un servidor electrum en {server} y un explorador de bloques en {explorer}
+
+
+ A good option is {electrum_testnet4} and as block explorer {explorer_testnet4}
+ Una buena opción es {electrum_testnet4} y como explorador de bloques {explorer_testnet4}
- A good option is {link} and a block explorer on {explorer}.
- Una buena opción es {link} y un explorador de bloques en {explorer}.
+ Signet choose {electrum} and a block explorer on {mempool_url}.
+ Signet elige {electrum} y un explorador de bloques en {mempool_url}. You can setup {setup} with an esplora server on {server} and a block explorer on {explorer}Puedes configurar {setup} con un servidor esplora en {server} y un explorador de bloques en {explorer}
- A good option is {link} and a block explorer on {explorer}. There is a {faucet}.
- Una buena opción es {link} y un explorador de bloques en {explorer}. Hay un {faucet}.
+ A (somtimes working) server is {link} and a block explorer on {explorer}. There is a {faucet}.
+ Un servidor (a veces funciona) es {link} y un explorador de bloques en {explorer}. Hay un {faucet}. You can connect your own Bitcoin node, such as {link}.
@@ -3245,9 +3272,16 @@ It is best to use your own server, such as {link}.
Run your bitcoind with "bitcoind -chain=regtest"Ejecuta tu bitcoind con "bitcoind -chain=regtest"
+
+
+ network_config
- Run your bitcoind with "bitcoind -chain=test"
- Ejecuta tu bitcoind con "bitcoind -chain=test"
+ {server_name} via the proxy {proxy}
+ {server_name} a través del proxy {proxy}
+
+
+ {server_name}
+ {server_name}
diff --git a/bitcoin_safe/gui/locales/app_fr_FR.qm b/bitcoin_safe/gui/locales/app_fr_FR.qm
index 1baab8c..4aaf410 100644
Binary files a/bitcoin_safe/gui/locales/app_fr_FR.qm and b/bitcoin_safe/gui/locales/app_fr_FR.qm differ
diff --git a/bitcoin_safe/gui/locales/app_fr_FR.ts b/bitcoin_safe/gui/locales/app_fr_FR.ts
index 39655cd..dd51731 100644
--- a/bitcoin_safe/gui/locales/app_fr_FR.ts
+++ b/bitcoin_safe/gui/locales/app_fr_FR.ts
@@ -83,6 +83,10 @@
Copy as csvCopier en csv
+
+ Set category
+ Définir la catégorie
+ TxTx
@@ -438,6 +442,17 @@ Please back up this descriptor to be able to recover the funds!
Scanner les adresses à l'avance
+
+ DeviceManager
+
+ Trusted
+ Exporter la clé de synchronisation
+
+
+ Untrusted
+ Non fiable
+
+DisplayAddressDialog
@@ -1413,6 +1428,14 @@ Location of signing device: .....
Mempool Instance URLURL de l'instance Mempool
+
+ The proxy does not apply to the Sync&Chat feature!
+ Le proxy ne s'applique pas à la fonctionnalité de Synchronisation et de Chat !
+
+
+ Proxy:
+ Proxy :
+ Apply && ShutdownAppliquer && Arrêter
@@ -1721,10 +1744,26 @@ Voulez-vous continuer malgré tout ?
Choose a new name, or an existing name for merging:Choisissez un nouveau nom, ou un nom existant pour la fusion:
+
+ Syncing with {server}
+ Synchronisation avec {server}
+
+
+ Connected to {server}
+ Connecté à {server}
+
+
+ Disconnected from {server}
+ Déconnecté de {server}
+ Click for new addressCliquez pour une nouvelle adresse
+
+ Sync && Chat
+ Synchroniser && Discuter
+ Export labelsExporter les étiquettes
@@ -1737,10 +1776,6 @@ Voulez-vous continuer malgré tout ?
Import labelsImporter les étiquettes
-
- Sync && Chat
- Synchroniser && Discuter
- All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json)Tous les fichiers (*);;Fichiers JSONL (*.jsonl);;Fichiers JSON (*.json)
@@ -2333,18 +2368,10 @@ You can restore your labels at a later time with 'Import Sync Key'.
- TrustedDevice
-
- Connected to {id}
- Connecté à {id}
-
-
- Syncing Address labels
- Synchronisation des étiquettes d'adresse
-
+ TrustedDeviceItem
- Can share Transactions
- Peut partager des Transactions
+ Untrust device
+ Appareil non fiable
@@ -2403,14 +2430,6 @@ You can restore your labels at a later time with 'Import Sync Key'.Set custom Relay list
Exportation de clé de synchronisation
-
- Trusted
- Exporter la clé de synchronisation
-
-
- UnTrusted
- Importer la clé de synchronisation
- My Device: {id}Réinitialiser la clé de synchronisation
@@ -2625,14 +2644,14 @@ below {rate}
- UnTrustedDevice
+ UntrustedDeviceItem
- Trust {id}
- Faire confiance à {id}
+ Trust
+ Confiance
- Accept trust request from {other}
- Accepter la demande de confiance de {other}
+ Trust this device
+ Faire confiance à cet appareil
@@ -3212,6 +3231,10 @@ Please install it.
This is a private and fast way to connect to the bitcoin network.C'est un moyen privé et rapide de se connecter au réseau bitcoin.
+
+ Run your bitcoind with "bitcoind -chain=test"
+ Exécutez votre bitcoind avec "bitcoind -chain=test"
+ Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com.Exécutez votre bitcoind avec "bitcoind -chain=signet" Cependant, c'est un signet différent de mutinynet.com.
@@ -3222,20 +3245,24 @@ It is best to use your own server, such as {link}.
Le serveur peut associer votre adresse IP aux adresses des portefeuilles. Il est préférable d'utiliser votre propre serveur, tel que {link}.
- You can setup {link} with an electrum server on {server} and a block explorer on {explorer}
- Vous pouvez configurer {link} avec un serveur Electrum sur {server} et un explorateur de blocs sur {explorer}
+ You can setup {electrum} with an electrum server on {server} and a block explorer on {explorer}
+ Vous pouvez configurer {electrum} avec un serveur electrum sur {server} et un explorateur de blocs sur {explorer}
+
+
+ A good option is {electrum_testnet4} and as block explorer {explorer_testnet4}
+ Une bonne option est {electrum_testnet4} et comme explorateur de blocs {explorer_testnet4}
- A good option is {link} and a block explorer on {explorer}.
- Une bonne option est {link} et un explorateur de blocs sur {explorer}.
+ Signet choose {electrum} and a block explorer on {mempool_url}.
+ Signet choisit {electrum} et un explorateur de blocs sur {mempool_url}. You can setup {setup} with an esplora server on {server} and a block explorer on {explorer}Vous pouvez configurer {setup} avec un serveur esplora sur {server} et un explorateur de blocs sur {explorer}
- A good option is {link} and a block explorer on {explorer}. There is a {faucet}.
- Une bonne option est {link} et un explorateur de blocs sur {explorer}. Il y a un {faucet}.
+ A (somtimes working) server is {link} and a block explorer on {explorer}. There is a {faucet}.
+ Un serveur (parfois fonctionnel) est {link} et un explorateur de blocs sur {explorer}. Il y a un {faucet}. You can connect your own Bitcoin node, such as {link}.
@@ -3245,9 +3272,16 @@ It is best to use your own server, such as {link}.
Run your bitcoind with "bitcoind -chain=regtest"Exécutez votre bitcoind avec "bitcoind -chain=regtest"
+
+
+ network_config
- Run your bitcoind with "bitcoind -chain=test"
- Exécutez votre bitcoind avec "bitcoind -chain=test"
+ {server_name} via the proxy {proxy}
+ {server_name} via le proxy {proxy}
+
+
+ {server_name}
+ {server_name}
diff --git a/bitcoin_safe/gui/locales/app_hi_IN.qm b/bitcoin_safe/gui/locales/app_hi_IN.qm
index b131cb9..8c26a34 100644
Binary files a/bitcoin_safe/gui/locales/app_hi_IN.qm and b/bitcoin_safe/gui/locales/app_hi_IN.qm differ
diff --git a/bitcoin_safe/gui/locales/app_hi_IN.ts b/bitcoin_safe/gui/locales/app_hi_IN.ts
index d9540ec..6abe581 100644
--- a/bitcoin_safe/gui/locales/app_hi_IN.ts
+++ b/bitcoin_safe/gui/locales/app_hi_IN.ts
@@ -83,6 +83,10 @@
Copy as csvसीएसवी के रूप में कॉपी करें
+
+ Set category
+ श्रेणी सेट करें
+ Txटीएक्स
@@ -438,6 +442,17 @@ Please back up this descriptor to be able to recover the funds!
पता लगाए गए उपकरण का चयन करें
+
+ DeviceManager
+
+ Trusted
+ विश्वसनीय
+
+
+ Untrusted
+ अविश्वसनीय
+
+DisplayAddressDialog
@@ -1413,6 +1428,14 @@ Location of signing device: .....
Mempool Instance URLमेमपूल इंस्टेंस URL
+
+ The proxy does not apply to the Sync&Chat feature!
+ प्रॉक्सी सिंक और चैट सुविधा पर लागू नहीं होती!
+
+
+ Proxy:
+ प्रॉक्सी:
+ Apply && Shutdownलागू करें && बंद करें
@@ -1721,10 +1744,26 @@ Location of signing device: .....
Choose a new name, or an existing name for merging:नया नाम चुनें, या विलय के लिए मौजूदा नाम चुनें:
+
+ Syncing with {server}
+ {server} के साथ सिंकिंग
+
+
+ Connected to {server}
+ {server} से जुड़ा हुआ
+
+
+ Disconnected from {server}
+ {server} से डिस्कनेक्टेड
+ Click for new addressनया पता के लिए क्लिक करें
+
+ Sync && Chat
+ सिंक && चैट
+ Export labelsलेबल निर्यात करें
@@ -1737,10 +1776,6 @@ Location of signing device: .....
Import labelsलेबल आयात करें
-
- Sync && Chat
- सिंक && चैट
- All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json)सभी फ़ाइलें (*);;JSONL फ़ाइलें (*.jsonl);;JSON फ़ाइलें (*.json)
@@ -2333,18 +2368,10 @@ You can restore your labels at a later time with 'Import Sync Key'.
- TrustedDevice
-
- Connected to {id}
- {id} से जुड़ा हुआ
-
-
- Syncing Address labels
- पता लेबल सिंक करना
-
+ TrustedDeviceItem
- Can share Transactions
- लेन-देन साझा कर सकते हैं
+ Untrust device
+ डिवाइस पर भरोसा नहीं
@@ -2403,14 +2430,6 @@ You can restore your labels at a later time with 'Import Sync Key'.Set custom Relay list
कस्टम रिले सूची सेट करें
-
- Trusted
- विश्वसनीय
-
-
- UnTrusted
- अविश्वसनीय
- My Device: {id}मेरा उपकरण: {id}
@@ -2625,14 +2644,14 @@ below {rate}
- UnTrustedDevice
+ UntrustedDeviceItem
- Trust {id}
- {id} पर भरोसा करें
+ Trust
+ भरोसा
- Accept trust request from {other}
- {other} से भरोसा अनुरोध स्वीकार करें
+ Trust this device
+ इस डिवाइस पर भरोसा करें
@@ -3212,6 +3231,10 @@ Please install it.
This is a private and fast way to connect to the bitcoin network.यह बिटकॉइन नेटवर्क से जुड़ने का एक निजी और तेज़ तरीका है।
+
+ Run your bitcoind with "bitcoind -chain=test"
+ "bitcoind -chain=test" के साथ अपना bitcoind चलाएं
+ Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com."bitcoind -chain=signet" के साथ अपना bitcoind चलाएं यह हालांकि mutinynet.com के अलग signet है।
@@ -3222,20 +3245,24 @@ It is best to use your own server, such as {link}.
सर्वर आपके IP पते को वॉलेट पतों के साथ जोड़ सकता है। अपना खुद का सर्वर उपयोग करना सबसे अच्छा है, जैसे कि {link}।
- You can setup {link} with an electrum server on {server} and a block explorer on {explorer}
- आप {link} के साथ एक इलेक्ट्रम सर्वर पर {server} और एक ब्लॉक एक्सप्लोरर पर {explorer} के साथ सेटअप कर सकते हैं
+ You can setup {electrum} with an electrum server on {server} and a block explorer on {explorer}
+ आप {server} पर एक इलेक्ट्रम सर्वर के साथ {electrum} सेटअप कर सकते हैं और एक ब्लॉक एक्सप्लोरर {explorer} पर
+
+
+ A good option is {electrum_testnet4} and as block explorer {explorer_testnet4}
+ एक अच्छा विकल्प है {electrum_testnet4} और ब्लॉक एक्सप्लोरर के रूप में {explorer_testnet4}
- A good option is {link} and a block explorer on {explorer}.
- एक अच्छा विकल्प है {link} और एक ब्लॉक एक्सप्लोरर पर {explorer}।
+ Signet choose {electrum} and a block explorer on {mempool_url}.
+ Signet चुनें {electrum} और एक ब्लॉक एक्सप्लोरर पर {mempool_url}। You can setup {setup} with an esplora server on {server} and a block explorer on {explorer}आप {setup} के साथ एक esplora सर्वर पर {server} और एक ब्लॉक एक्सप्लोरर पर {explorer} के साथ सेटअप कर सकते हैं
- A good option is {link} and a block explorer on {explorer}. There is a {faucet}.
- एक अच्छा विकल्प है {link} और एक ब्लॉक एक्सप्लोरर पर {explorer}। वहाँ एक {faucet} है।
+ A (somtimes working) server is {link} and a block explorer on {explorer}. There is a {faucet}.
+ एक (कभी-कभी काम करने वाला) सर्वर है {link} और एक ब्लॉक एक्सप्लोरर पर {explorer}। एक {faucet} है। You can connect your own Bitcoin node, such as {link}.
@@ -3245,9 +3272,16 @@ It is best to use your own server, such as {link}.
Run your bitcoind with "bitcoind -chain=regtest""bitcoind -chain=regtest" के साथ अपना bitcoind चलाएं
+
+
+ network_config
- Run your bitcoind with "bitcoind -chain=test"
- "bitcoind -chain=test" के साथ अपना bitcoind चलाएं
+ {server_name} via the proxy {proxy}
+ प्रॉक्सी {proxy} के माध्यम से {server_name}
+
+
+ {server_name}
+ {server_name}
diff --git a/bitcoin_safe/gui/locales/app_it_IT.qm b/bitcoin_safe/gui/locales/app_it_IT.qm
index 706b698..7ac65fd 100644
Binary files a/bitcoin_safe/gui/locales/app_it_IT.qm and b/bitcoin_safe/gui/locales/app_it_IT.qm differ
diff --git a/bitcoin_safe/gui/locales/app_it_IT.ts b/bitcoin_safe/gui/locales/app_it_IT.ts
index 3d9acca..ad866cf 100644
--- a/bitcoin_safe/gui/locales/app_it_IT.ts
+++ b/bitcoin_safe/gui/locales/app_it_IT.ts
@@ -83,6 +83,10 @@
Copy as csvCopia come csv
+
+ Set category
+ Imposta categoria
+ TxTx
@@ -438,6 +442,17 @@ Please back up this descriptor to be able to recover the funds!
Seleziona il dispositivo rilevato
+
+ DeviceManager
+
+ Trusted
+ Fidato
+
+
+ Untrusted
+ Non fidato
+
+DisplayAddressDialog
@@ -1413,6 +1428,14 @@ Location of signing device: .....
Mempool Instance URLURL dell'istanza Mempool
+
+ The proxy does not apply to the Sync&Chat feature!
+ Il proxy non si applica alla funzione di Sincronizzazione e Chat!
+
+
+ Proxy:
+ Proxy:
+ Apply && ShutdownApplica && Spegni
@@ -1721,10 +1744,26 @@ Vuoi procedere comunque?
Choose a new name, or an existing name for merging:Scegli un nuovo nome, o un nome esistente per la fusione:
+
+ Syncing with {server}
+ Sincronizzazione con {server}
+
+
+ Connected to {server}
+ Connesso a {server}
+
+
+ Disconnected from {server}
+ Disconnesso da {server}
+ Click for new addressClicca per un nuovo indirizzo
+
+ Sync && Chat
+ Sincronizza && Chatta
+ Export labelsEsporta etichette
@@ -1737,10 +1776,6 @@ Vuoi procedere comunque?
Import labelsImporta etichette
-
- Sync && Chat
- Sincronizza && Chatta
- All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json)Tutti i File (*);;File JSONL (*.jsonl);;File JSON (*.json)
@@ -2333,18 +2368,10 @@ You can restore your labels at a later time with 'Import Sync Key'.
- TrustedDevice
-
- Connected to {id}
- Connesso a {id}
-
-
- Syncing Address labels
- Sincronizzazione etichette indirizzi
-
+ TrustedDeviceItem
- Can share Transactions
- Può condividere transazioni
+ Untrust device
+ Dispositivo non fidato
@@ -2403,14 +2430,6 @@ You can restore your labels at a later time with 'Import Sync Key'.Set custom Relay list
Imposta l'elenco dei Relay personalizzati
-
- Trusted
- Fidato
-
-
- UnTrusted
- Non fidato
- My Device: {id}Il mio dispositivo: {id}
@@ -2625,14 +2644,14 @@ below {rate}
- UnTrustedDevice
+ UntrustedDeviceItem
- Trust {id}
- Fidati di {id}
+ Trust
+ Fiducia
- Accept trust request from {other}
- Accetta la richiesta di fiducia da {other}
+ Trust this device
+ Fidati di questo dispositivo
@@ -3212,6 +3231,10 @@ Please install it.
This is a private and fast way to connect to the bitcoin network.Questo è un modo privato e veloce per connettersi alla rete bitcoin.
+
+ Run your bitcoind with "bitcoind -chain=test"
+ Esegui il tuo bitcoind con "bitcoind -chain=test"
+ Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com.Esegui il tuo bitcoind con "bitcoind -chain=signet" Questo tuttavia è un signet diverso da mutinynet.com.
@@ -3222,20 +3245,24 @@ It is best to use your own server, such as {link}.
Il server può associare il tuo indirizzo IP agli indirizzi del portafoglio. È meglio usare il proprio server, come {link}.
- You can setup {link} with an electrum server on {server} and a block explorer on {explorer}
- Puoi configurare {link} con un server electrum su {server} e un block explorer su {explorer}
+ You can setup {electrum} with an electrum server on {server} and a block explorer on {explorer}
+ Puoi impostare {electrum} con un server electrum su {server} e un esploratore di blocchi su {explorer}
+
+
+ A good option is {electrum_testnet4} and as block explorer {explorer_testnet4}
+ Una buona opzione è {electrum_testnet4} e come esploratore di blocchi {explorer_testnet4}
- A good option is {link} and a block explorer on {explorer}.
- Una buona opzione è {link} e un block explorer su {explorer}.
+ Signet choose {electrum} and a block explorer on {mempool_url}.
+ Signet sceglie {electrum} e un esploratore di blocchi su {mempool_url}. You can setup {setup} with an esplora server on {server} and a block explorer on {explorer}Puoi configurare {setup} con un server esplora su {server} e un block explorer su {explorer}
- A good option is {link} and a block explorer on {explorer}. There is a {faucet}.
- Una buona opzione è {link} e un block explorer su {explorer}. C'è un {faucet}.
+ A (somtimes working) server is {link} and a block explorer on {explorer}. There is a {faucet}.
+ Un server (a volte funzionante) è {link} e un esploratore di blocchi su {explorer}. C'è un {faucet}. You can connect your own Bitcoin node, such as {link}.
@@ -3245,9 +3272,16 @@ It is best to use your own server, such as {link}.
Run your bitcoind with "bitcoind -chain=regtest"Esegui il tuo bitcoind con "bitcoind -chain=regtest"
+
+
+ network_config
- Run your bitcoind with "bitcoind -chain=test"
- Esegui il tuo bitcoind con "bitcoind -chain=test"
+ {server_name} via the proxy {proxy}
+ {server_name} tramite il proxy {proxy}
+
+
+ {server_name}
+ {server_name}
diff --git a/bitcoin_safe/gui/locales/app_ja_JP.qm b/bitcoin_safe/gui/locales/app_ja_JP.qm
index 2c1e214..62ae1bc 100644
Binary files a/bitcoin_safe/gui/locales/app_ja_JP.qm and b/bitcoin_safe/gui/locales/app_ja_JP.qm differ
diff --git a/bitcoin_safe/gui/locales/app_ja_JP.ts b/bitcoin_safe/gui/locales/app_ja_JP.ts
index 9a50377..2aa7937 100644
--- a/bitcoin_safe/gui/locales/app_ja_JP.ts
+++ b/bitcoin_safe/gui/locales/app_ja_JP.ts
@@ -83,6 +83,10 @@
Copy as csvCSVとしてコピー
+
+ Set category
+ カテゴリを設定
+ Txトランザクション
@@ -438,6 +442,17 @@ Please back up this descriptor to be able to recover the funds!
検出されたデバイスを選択する
+
+ DeviceManager
+
+ Trusted
+ 信頼済み
+
+
+ Untrusted
+ 信頼されていない
+
+DisplayAddressDialog
@@ -1413,6 +1428,14 @@ Location of signing device: .....
Mempool Instance URL新しいウォレットを作成
+
+ The proxy does not apply to the Sync&Chat feature!
+ プロキシは同期&チャット機能には適用されません!
+
+
+ Proxy:
+ プロキシ:
+ Apply && Shutdown適用 && シャットダウン
@@ -1721,10 +1744,26 @@ Location of signing device: .....
Choose a new name, or an existing name for merging:新しい名前、またはマージするための既存の名前を選択してください:
+
+ Syncing with {server}
+ {server} と同期中
+
+
+ Connected to {server}
+ {server} に接続しました
+
+
+ Disconnected from {server}
+ {server} から切断しました
+ Click for new addressウォレットの設定がまだありません
+
+ Sync && Chat
+ 同期 && チャット
+ Export labels新規
@@ -1737,10 +1776,6 @@ Location of signing device: .....
Import labelsラベルのインポート
-
- Sync && Chat
- 同期 && チャット
- All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json)すべてのファイル (*);;JSONL ファイル (*.jsonl);;JSON ファイル (*.json)
@@ -2333,18 +2368,10 @@ You can restore your labels at a later time with 'Import Sync Key'.
- TrustedDevice
-
- Connected to {id}
- {id}に接続済み
-
-
- Syncing Address labels
- アドレスラベルを同期する
-
+ TrustedDeviceItem
- Can share Transactions
- トランザクションを共有することができます
+ Untrust device
+ デバイスを信頼しない
@@ -2403,14 +2430,6 @@ You can restore your labels at a later time with 'Import Sync Key'.Set custom Relay list
カスタムリレーリストを設定する
-
- Trusted
- 信頼済み
-
-
- UnTrusted
- 信頼されていない
- My Device: {id}私のデバイス:{id}
@@ -2625,14 +2644,14 @@ below {rate}
- UnTrustedDevice
+ UntrustedDeviceItem
- Trust {id}
- {id}を信頼する
+ Trust
+ 信頼
- Accept trust request from {other}
- {other}からの信頼リクエストを受け入れる
+ Trust this device
+ このデバイスを信頼する
@@ -3212,6 +3231,10 @@ Please install it.
This is a private and fast way to connect to the bitcoin network.これはビットコインネットワークに接続するためのプライベートかつ高速な方法です。
+
+ Run your bitcoind with "bitcoind -chain=test"
+ "bitcoind -chain=test"でbitcoindを実行してください
+ Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com."bitcoind -chain=signet"でbitcoindを実行してください。ただし、これはmutinynet.comの別のsignetです。
@@ -3222,20 +3245,24 @@ It is best to use your own server, such as {link}.
サーバーはIPアドレスをウォレットアドレスに関連付けることができます。{link}など、独自のサーバーを使用するのが最適です。
- You can setup {link} with an electrum server on {server} and a block explorer on {explorer}
- {link}を{server}上のElectrumサーバーと{explorer}上のブロックエクスプローラーに設定できます。
+ You can setup {electrum} with an electrum server on {server} and a block explorer on {explorer}
+ {server} でエレクトラムサーバーを使用して {electrum} を設定し、{explorer} でブロックエクスプローラーを使用することができます
+
+
+ A good option is {electrum_testnet4} and as block explorer {explorer_testnet4}
+ 良い選択肢は {electrum_testnet4} としてブロックエクスプローラー {explorer_testnet4}
- A good option is {link} and a block explorer on {explorer}.
- 良いオプションは{link}と{explorer}上のブロックエクスプローラーです。
+ Signet choose {electrum} and a block explorer on {mempool_url}.
+ Signet は {electrum} と {mempool_url} でブロックエクスプローラーを選択します。 You can setup {setup} with an esplora server on {server} and a block explorer on {explorer}{setup}を{server}上のEsploraサーバーと{explorer}上のブロックエクスプローラーに設定できます。
- A good option is {link} and a block explorer on {explorer}. There is a {faucet}.
- 良いオプションは{link}と{explorer}上のブロックエクスプローラーです。蛇口があります。
+ A (somtimes working) server is {link} and a block explorer on {explorer}. There is a {faucet}.
+ (時々動作する)サーバーは {link} と {explorer} でブロックエクスプローラーです。{faucet} があります。You can connect your own Bitcoin node, such as {link}.
@@ -3245,9 +3272,16 @@ It is best to use your own server, such as {link}.
Run your bitcoind with "bitcoind -chain=regtest""bitcoind -chain=regtest"でbitcoindを実行してください
+
+
+ network_config
- Run your bitcoind with "bitcoind -chain=test"
- "bitcoind -chain=test"でbitcoindを実行してください
+ {server_name} via the proxy {proxy}
+ プロキシ {proxy} 経由の {server_name}
+
+
+ {server_name}
+ {server_name}
diff --git a/bitcoin_safe/gui/locales/app_pt_PT.qm b/bitcoin_safe/gui/locales/app_pt_PT.qm
index 8502cfa..75f7c22 100644
Binary files a/bitcoin_safe/gui/locales/app_pt_PT.qm and b/bitcoin_safe/gui/locales/app_pt_PT.qm differ
diff --git a/bitcoin_safe/gui/locales/app_pt_PT.ts b/bitcoin_safe/gui/locales/app_pt_PT.ts
index 4d8ff04..6a68ed2 100644
--- a/bitcoin_safe/gui/locales/app_pt_PT.ts
+++ b/bitcoin_safe/gui/locales/app_pt_PT.ts
@@ -83,6 +83,10 @@
Copy as csvCopiar como csv
+
+ Set category
+ Definir categoria
+ TxTx
@@ -438,6 +442,17 @@ Please back up this descriptor to be able to recover the funds!
Selecionar o dispositivo detetado
+
+ DeviceManager
+
+ Trusted
+ Confiável
+
+
+ Untrusted
+ Não confiado
+
+DisplayAddressDialog
@@ -1413,6 +1428,14 @@ Location of signing device: .....
Mempool Instance URLURL da Instância do Mempool
+
+ The proxy does not apply to the Sync&Chat feature!
+ O proxy não se aplica à função de Sincronização e Chat!
+
+
+ Proxy:
+ Proxy:
+ Apply && ShutdownAplicar && Encerrar
@@ -1721,10 +1744,26 @@ Deseja prosseguir mesmo assim?
Choose a new name, or an existing name for merging:Escolha um novo nome, ou um nome existente para fusão:
+
+ Syncing with {server}
+ Sincronizando com {server}
+
+
+ Connected to {server}
+ Conectado a {server}
+
+
+ Disconnected from {server}
+ Desconectado de {server}
+ Click for new addressClique para novo endereço
+
+ Sync && Chat
+ Sincronizar && Conversar
+ Export labelsExportar etiquetas
@@ -1737,10 +1776,6 @@ Deseja prosseguir mesmo assim?
Import labelsImportar etiquetas
-
- Sync && Chat
- Sincronizar && Conversar
- All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json)Todos os Ficheiros (*);;Ficheiros JSONL (*.jsonl);;Ficheiros JSON (*.json)
@@ -2333,18 +2368,10 @@ You can restore your labels at a later time with 'Import Sync Key'.
- TrustedDevice
-
- Connected to {id}
- Conectado a {id}
-
-
- Syncing Address labels
- Sincronizando etiquetas de endereços
-
+ TrustedDeviceItem
- Can share Transactions
- Pode partilhar Transações
+ Untrust device
+ Dispositivo não confiável
@@ -2403,14 +2430,6 @@ You can restore your labels at a later time with 'Import Sync Key'.Set custom Relay list
Definir lista personalizada de Relay
-
- Trusted
- Confiável
-
-
- UnTrusted
- Não confiável
- My Device: {id}Meu dispositivo: {id}
@@ -2625,14 +2644,14 @@ below {rate}
- UnTrustedDevice
+ UntrustedDeviceItem
- Trust {id}
- Confiar {id}
+ Trust
+ Confiar
- Accept trust request from {other}
- Aceitar pedido de confiança de {other}
+ Trust this device
+ Confiar neste dispositivo
@@ -3212,6 +3231,10 @@ Please install it.
This is a private and fast way to connect to the bitcoin network.Esta é uma maneira privada e rápida de se conectar à rede bitcoin.
+
+ Run your bitcoind with "bitcoind -chain=test"
+ Execute seu bitcoind com "bitcoind -chain=test"
+ Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com.Execute seu bitcoind com "bitcoind -chain=signet" No entanto, este é um signet diferente de mutinynet.com.
@@ -3222,20 +3245,24 @@ It is best to use your own server, such as {link}.
O servidor pode associar seu endereço IP aos endereços da carteira. É melhor usar seu próprio servidor, como {link}.
- You can setup {link} with an electrum server on {server} and a block explorer on {explorer}
- Você pode configurar {link} com um servidor electrum em {server} e um explorador de blocos em {explorer}
+ You can setup {electrum} with an electrum server on {server} and a block explorer on {explorer}
+ Você pode configurar {electrum} com um servidor electrum em {server} e um explorador de blocos em {explorer}
+
+
+ A good option is {electrum_testnet4} and as block explorer {explorer_testnet4}
+ Uma boa opção é {electrum_testnet4} e como explorador de blocos {explorer_testnet4}
- A good option is {link} and a block explorer on {explorer}.
- Uma boa opção é {link} e um explorador de blocos em {explorer}.
+ Signet choose {electrum} and a block explorer on {mempool_url}.
+ Signet escolha {electrum} e um explorador de blocos em {mempool_url}. You can setup {setup} with an esplora server on {server} and a block explorer on {explorer}Você pode configurar {setup} com um servidor esplora em {server} e um explorador de blocos em {explorer}
- A good option is {link} and a block explorer on {explorer}. There is a {faucet}.
- Uma boa opção é {link} e um explorador de blocos em {explorer}. Há uma {faucet}.
+ A (somtimes working) server is {link} and a block explorer on {explorer}. There is a {faucet}.
+ Um servidor (às vezes funciona) é {link} e um explorador de blocos em {explorer}. Há um {faucet}. You can connect your own Bitcoin node, such as {link}.
@@ -3245,9 +3272,16 @@ It is best to use your own server, such as {link}.
Run your bitcoind with "bitcoind -chain=regtest"Execute seu bitcoind com "bitcoind -chain=regtest"
+
+
+ network_config
- Run your bitcoind with "bitcoind -chain=test"
- Execute seu bitcoind com "bitcoind -chain=test"
+ {server_name} via the proxy {proxy}
+ {server_name} através do proxy {proxy}
+
+
+ {server_name}
+ {server_name}
diff --git a/bitcoin_safe/gui/locales/app_ru_RU.qm b/bitcoin_safe/gui/locales/app_ru_RU.qm
index bbe4491..2a8bfc8 100644
Binary files a/bitcoin_safe/gui/locales/app_ru_RU.qm and b/bitcoin_safe/gui/locales/app_ru_RU.qm differ
diff --git a/bitcoin_safe/gui/locales/app_ru_RU.ts b/bitcoin_safe/gui/locales/app_ru_RU.ts
index a73e56d..4a13b0e 100644
--- a/bitcoin_safe/gui/locales/app_ru_RU.ts
+++ b/bitcoin_safe/gui/locales/app_ru_RU.ts
@@ -83,6 +83,10 @@
Copy as csvКопировать в CSV
+
+ Set category
+ Установить категорию
+ TxТранзакция
@@ -438,6 +442,17 @@ Please back up this descriptor to be able to recover the funds!
Выберите обнаруженное устройство
+
+ DeviceManager
+
+ Trusted
+ Доверенный
+
+
+ Untrusted
+ Недоверие
+
+DisplayAddressDialog
@@ -1413,6 +1428,14 @@ Location of signing device: .....
Mempool Instance URLURL экземпляра Mempool
+
+ The proxy does not apply to the Sync&Chat feature!
+ Прокси не применяется к функции Синхронизация и Чат!
+
+
+ Proxy:
+ Прокси:
+ Apply && ShutdownПрименить && Завершить работу
@@ -1721,10 +1744,26 @@ Location of signing device: .....
Choose a new name, or an existing name for merging:Выберите новое имя или существующее имя для объединения:
+
+ Syncing with {server}
+ Синхронизация с {server}
+
+
+ Connected to {server}
+ Подключено к {server}
+
+
+ Disconnected from {server}
+ Отключено от {server}
+ Click for new addressНажмите для нового адреса
+
+ Sync && Chat
+ Синхронизация && Чат
+ Export labelsЭкспортировать метки
@@ -1737,10 +1776,6 @@ Location of signing device: .....
Import labelsИмпортировать метки
-
- Sync && Chat
- Синхронизация && Чат
- All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json)Все файлы (*);;Файлы JSONL (*.jsonl);;Файлы JSON (*.json)
@@ -2333,18 +2368,10 @@ You can restore your labels at a later time with 'Import Sync Key'.
- TrustedDevice
-
- Connected to {id}
- Подключено к {id}
-
-
- Syncing Address labels
- Синхронизация меток адресов
-
+ TrustedDeviceItem
- Can share Transactions
- Может делиться транзакциями
+ Untrust device
+ Недоверие устройству
@@ -2403,14 +2430,6 @@ You can restore your labels at a later time with 'Import Sync Key'.Set custom Relay list
Установить пользовательский список реле
-
- Trusted
- Доверенный
-
-
- UnTrusted
- Не доверенный
- My Device: {id}Мое устройство: {id}
@@ -2625,14 +2644,14 @@ below {rate}
- UnTrustedDevice
+ UntrustedDeviceItem
- Trust {id}
- Доверять {id}
+ Trust
+ Доверие
- Accept trust request from {other}
- Принять запрос доверия от {other}
+ Trust this device
+ Доверять этому устройству
@@ -3212,6 +3231,10 @@ Please install it.
This is a private and fast way to connect to the bitcoin network.Это приватный и быстрый способ подключения к биткойн-сети.
+
+ Run your bitcoind with "bitcoind -chain=test"
+ Запустите ваш bitcoind с "bitcoind -chain=test"
+ Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com.Запустите ваш bitcoind с "bitcoind -chain=signet" Это, однако, другой signet, чем mutinynet.com.
@@ -3222,20 +3245,24 @@ It is best to use your own server, such as {link}.
Сервер может ассоциировать ваш IP-адрес с адресами кошелька. Лучше всего использовать свой собственный сервер, например {link}.
- You can setup {link} with an electrum server on {server} and a block explorer on {explorer}
- Вы можете настроить {link} с электрум-сервером на {server} и блок-эксплорером на {explorer}
+ You can setup {electrum} with an electrum server on {server} and a block explorer on {explorer}
+ Вы можете настроить {electrum} с сервером электрума на {server} и блок-эксплорером на {explorer}
+
+
+ A good option is {electrum_testnet4} and as block explorer {explorer_testnet4}
+ Хорошим вариантом будет {electrum_testnet4} и как блок-эксплорер {explorer_testnet4}
- A good option is {link} and a block explorer on {explorer}.
- Хороший вариант - {link} и блок-эксплорер на {explorer}.
+ Signet choose {electrum} and a block explorer on {mempool_url}.
+ Signet выберите {electrum} и блок-эксплорер на {mempool_url}. You can setup {setup} with an esplora server on {server} and a block explorer on {explorer}Вы можете настроить {setup} с сервером esplora на {server} и блок-эксплорером на {explorer}
- A good option is {link} and a block explorer on {explorer}. There is a {faucet}.
- Хороший вариант - {link} и блок-эксплорер на {explorer}. Есть {faucet}.
+ A (somtimes working) server is {link} and a block explorer on {explorer}. There is a {faucet}.
+ Работающий (иногда) сервер - {link} и блок-эксплорер на {explorer}. Есть {faucet}. You can connect your own Bitcoin node, such as {link}.
@@ -3245,9 +3272,16 @@ It is best to use your own server, such as {link}.
Run your bitcoind with "bitcoind -chain=regtest"Запустите ваш bitcoind с "bitcoind -chain=regtest"
+
+
+ network_config
- Run your bitcoind with "bitcoind -chain=test"
- Запустите ваш bitcoind с "bitcoind -chain=test"
+ {server_name} via the proxy {proxy}
+ {server_name} через прокси {proxy}
+
+
+ {server_name}
+ {server_name}
diff --git a/bitcoin_safe/gui/locales/app_zh_CN.qm b/bitcoin_safe/gui/locales/app_zh_CN.qm
index c17439d..5a5e3ab 100644
Binary files a/bitcoin_safe/gui/locales/app_zh_CN.qm and b/bitcoin_safe/gui/locales/app_zh_CN.qm differ
diff --git a/bitcoin_safe/gui/locales/app_zh_CN.ts b/bitcoin_safe/gui/locales/app_zh_CN.ts
index df2a49f..df93f83 100644
--- a/bitcoin_safe/gui/locales/app_zh_CN.ts
+++ b/bitcoin_safe/gui/locales/app_zh_CN.ts
@@ -83,6 +83,10 @@
Copy as csv复制为csv
+
+ Set category
+ 设置类别
+ Tx交易
@@ -438,6 +442,17 @@ Please back up this descriptor to be able to recover the funds!
选择检测到的设备
+
+ DeviceManager
+
+ Trusted
+ 信任
+
+
+ Untrusted
+ 不受信任
+
+DisplayAddressDialog
@@ -1414,6 +1429,14 @@ Location of signing device: .....
Mempool Instance URLMempool实例URL
+
+ The proxy does not apply to the Sync&Chat feature!
+ 代理不适用于同步和聊天功能!
+
+
+ Proxy:
+ 代理:
+ Apply && Shutdown应用&&关闭
@@ -1724,10 +1747,26 @@ Location of signing device: .....
Choose a new name, or an existing name for merging:选择一个新名称,或一个已有名称以进行合并:
+
+ Syncing with {server}
+ 与 {server} 同步
+
+
+ Connected to {server}
+ 已连接到 {server}
+
+
+ Disconnected from {server}
+ 已从 {server} 断开
+ Click for new address点击获取新地址
+
+ Sync && Chat
+ 同步 && 聊天
+ Export labels导出标签
@@ -1740,10 +1779,6 @@ Location of signing device: .....
Import labels导入标签
-
- Sync && Chat
- 同步 && 聊天
- All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json)所有文件 (*);;JSONL 文件 (*.jsonl);;JSON 文件 (*.json)
@@ -2336,18 +2371,10 @@ You can restore your labels at a later time with 'Import Sync Key'.
- TrustedDevice
-
- Connected to {id}
- 已连接至{id}
-
+ TrustedDeviceItem
- Syncing Address labels
- 同步地址标签
-
-
- Can share Transactions
- 可以分享交易
+ Untrust device
+ 不信任设备
@@ -2406,14 +2433,6 @@ You can restore your labels at a later time with 'Import Sync Key'.Set custom Relay list
设置自定义中继列表
-
- Trusted
- 信任
-
-
- UnTrusted
- 未受信任
- My Device: {id}我的设备:{id}
@@ -2631,14 +2650,14 @@ below {rate}
- UnTrustedDevice
+ UntrustedDeviceItem
- Trust {id}
- 信任{id}
+ Trust
+ 信任
- Accept trust request from {other}
- 接受{other}的信任请求
+ Trust this device
+ 信任此设备
@@ -3219,6 +3238,10 @@ Please install it.
This is a private and fast way to connect to the bitcoin network.这是一种私密且快速的连接到比特币网络的方式。
+
+ Run your bitcoind with "bitcoind -chain=test"
+ 使用 "bitcoind -chain=test" 运行您的bitcoind
+ Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com.使用 "bitcoind -chain=signet" 运行您的bitcoind,但这和mutinynet.com的signet不同。
@@ -3229,20 +3252,24 @@ It is best to use your own server, such as {link}.
服务器可以将您的IP地址与钱包地址关联。最好使用您自己的服务器,如 {link}。
- You can setup {link} with an electrum server on {server} and a block explorer on {explorer}
- 您可以在 {server} 上设置 {link},并在 {explorer} 上设置一个区块浏览器
+ You can setup {electrum} with an electrum server on {server} and a block explorer on {explorer}
+ 你可以在 {server} 上设置 {electrum} 与一个区块浏览器在 {explorer}
+
+
+ A good option is {electrum_testnet4} and as block explorer {explorer_testnet4}
+ 一个好的选择是 {electrum_testnet4} 和作为区块浏览器的 {explorer_testnet4}
- A good option is {link} and a block explorer on {explorer}.
- 一个好选择是 {link} 和一个在 {explorer} 上的区块浏览器。
+ Signet choose {electrum} and a block explorer on {mempool_url}.
+ Signet 选择 {electrum} 和一个区块浏览器在 {mempool_url}。 You can setup {setup} with an esplora server on {server} and a block explorer on {explorer}您可以在 {server} 上设置 {setup},并在 {explorer} 上设置一个esplora服务器
- A good option is {link} and a block explorer on {explorer}. There is a {faucet}.
- 一个好选择是 {link} 和一个在 {explorer} 上的区块浏览器。这里有一个 {faucet}。
+ A (somtimes working) server is {link} and a block explorer on {explorer}. There is a {faucet}.
+ 一个(有时有效的)服务器是 {link} 和一个区块浏览器在 {explorer}。这里有一个 {faucet}。 You can connect your own Bitcoin node, such as {link}.
@@ -3252,9 +3279,16 @@ It is best to use your own server, such as {link}.
Run your bitcoind with "bitcoind -chain=regtest"使用 "bitcoind -chain=regtest" 运行您的bitcoind
+
+
+ network_config
- Run your bitcoind with "bitcoind -chain=test"
- 使用 "bitcoind -chain=test" 运行您的bitcoind
+ {server_name} via the proxy {proxy}
+ 通过代理 {proxy} 的 {server_name}
+
+
+ {server_name}
+ {server_name}
diff --git a/bitcoin_safe/gui/qt/address_list.py b/bitcoin_safe/gui/qt/address_list.py
index 7d56183..80c27f4 100644
--- a/bitcoin_safe/gui/qt/address_list.py
+++ b/bitcoin_safe/gui/qt/address_list.py
@@ -102,7 +102,15 @@
needs_frequent_flag,
)
from .taglist import AddressDragInfo
-from .util import ColorScheme, Message, do_copy, read_QIcon, sort_id_to_icon, webopen
+from .util import (
+ ColorScheme,
+ Message,
+ create_color_square,
+ do_copy,
+ read_QIcon,
+ sort_id_to_icon,
+ webopen,
+)
class ImportLabelMenu:
@@ -605,6 +613,8 @@ def create_menu(self, position: QPoint) -> Menu:
)
menu.addSeparator()
+ self._add_category_menu(menu, idx)
+ menu.addSeparator()
self.add_copy_menu(menu, idx, include_columns_even_if_hidden=[self.key_column])
@@ -623,6 +633,34 @@ def create_menu(self, position: QPoint) -> Menu:
return menu
+ def _add_category_menu(self, menu: Menu, idx: QModelIndex):
+ copy_menu = menu.add_menu(self.tr("Set category"))
+
+ def factory(category, address):
+ def f(category=category, address=address):
+ drag_info = AddressDragInfo([category], [address])
+ logger.debug(f"_add_category_menu set {drag_info}")
+ self.signal_tag_dropped.emit(drag_info)
+
+ return f
+
+ for category in self.wallet.labels.categories:
+ item = self.sourceModel().horizontalHeaderItem(self.Columns.ADDRESS)
+ if not item:
+ continue
+ item_col = self.item_from_index(idx.sibling(idx.row(), self.Columns.ADDRESS))
+ if not item_col:
+ continue
+ address = item_col.data(MyItemDataRole.ROLE_CLIPBOARD_DATA)
+ if address is None:
+ address = item_col.text().strip()
+
+ copy_menu.add_action(
+ category,
+ factory(category=category, address=address),
+ icon=create_color_square(CategoryEditor.color(category)),
+ )
+
# def place_text_on_clipboard(self, text: str, *, title: str = None) -> None:
# if bdk.Address(text):
# try:
diff --git a/bitcoin_safe/gui/qt/downloader.py b/bitcoin_safe/gui/qt/downloader.py
index 798f096..8a7a5b3 100644
--- a/bitcoin_safe/gui/qt/downloader.py
+++ b/bitcoin_safe/gui/qt/downloader.py
@@ -30,6 +30,7 @@
import logging
import sys
from pathlib import Path
+from typing import Dict
import requests
from PyQt6.QtCore import QThread, pyqtSignal
@@ -55,15 +56,16 @@ class DownloadThread(QThread):
finished: TypedPyQtSignalNo = pyqtSignal() # type: ignore
aborted: TypedPyQtSignalNo = pyqtSignal() # type: ignore
- def __init__(self, url, destination_dir) -> None:
+ def __init__(self, url, destination_dir, proxies: Dict | None) -> None:
super().__init__()
self.url = url
self.destination_dir = Path(destination_dir)
+ self.proxies = proxies
self.filename: Path = self.destination_dir / Path(url).name
def run(self) -> None:
try:
- response = requests.get(self.url, stream=True, timeout=10)
+ response = requests.get(self.url, stream=True, timeout=10, proxies=self.proxies)
content_length = response.headers.get("content-length")
if content_length is None: # no content length header
@@ -85,11 +87,12 @@ def run(self) -> None:
class Downloader(QWidget):
finished: TypedPyQtSignal[DownloadThread] = pyqtSignal(DownloadThread) # type: ignore
- def __init__(self, url, destination_dir) -> None:
+ def __init__(self, url, destination_dir, proxies: Dict | None) -> None:
super().__init__()
self.url = url
self.destination_dir = Path(destination_dir)
self.filename = Path(url).name # Extract filename from URL
+ self.proxies = proxies
self.initUI()
def initUI(self) -> None:
@@ -121,7 +124,7 @@ def initUI(self) -> None:
def startDownload(self) -> None:
self.startButton.hide()
self.progress.show()
- self.mythread = DownloadThread(self.url, str(self.destination_dir))
+ self.mythread = DownloadThread(self.url, str(self.destination_dir), proxies=self.proxies)
self.mythread.progress.connect(self.progress.setValue)
self.mythread.finished.connect(self.downloadFinished)
self.mythread.aborted.connect(self.download_aborted)
@@ -147,7 +150,9 @@ def showFile(self) -> None:
app = QApplication(sys.argv)
# Example usage
downloader = Downloader(
- "https://github.com/sparrowwallet/sparrow/releases/download/1.8.4/sparrow_1.8.4-1_amd64.deb", "/tmp"
+ "https://github.com/sparrowwallet/sparrow/releases/download/1.8.4/sparrow_1.8.4-1_amd64.deb",
+ "/tmp",
+ proxies=None,
)
downloader.show()
sys.exit(app.exec())
diff --git a/bitcoin_safe/gui/qt/main.py b/bitcoin_safe/gui/qt/main.py
index de99dc6..082c078 100644
--- a/bitcoin_safe/gui/qt/main.py
+++ b/bitcoin_safe/gui/qt/main.py
@@ -47,6 +47,7 @@
from bitcoin_safe.gui.qt.wrappers import Menu, MenuBar
from bitcoin_safe.keystore import KeyStoreImporterTypes
from bitcoin_safe.logging_setup import get_log_file
+from bitcoin_safe.network_config import ProxyInfo
from bitcoin_safe.pdf_statement import make_and_open_pdf_statement
from bitcoin_safe.pdfrecovery import make_and_open_pdf
from bitcoin_safe.threading_manager import ThreadingManager
@@ -134,7 +135,14 @@ def __init__(
self.qt_wallets: Dict[str, QTWallet] = {}
self.threading_manager = ThreadingManager(threading_manager_name=self.__class__.__name__)
- self.fx = FX(threading_parent=self.threading_manager)
+ self.fx = FX(
+ threading_parent=self.threading_manager,
+ proxies=(
+ ProxyInfo.parse(self.config.network_config.proxy_url).get_requests_proxy_dist()
+ if self.config.network_config.proxy_url
+ else None
+ ),
+ )
self.language_chooser = LanguageChooser(self, self.config, [self.signals.language_switch])
if not config_present:
self.config.language_code = self.language_chooser.dialog_choose_language(self)
@@ -148,7 +156,13 @@ def __init__(
signals_min=self.signals,
threading_parent=self.threading_manager,
)
- self.mempool_data.set_data_from_mempoolspace()
+ self.mempool_data.set_data_from_mempoolspace(
+ proxies=(
+ ProxyInfo.parse(self.config.network_config.proxy_url).get_requests_proxy_dist()
+ if self.config.network_config.proxy_url
+ else None
+ )
+ )
self.last_qtwallet: Optional[QTWallet] = None
# connect the listeners
@@ -287,7 +301,13 @@ def setupUi(self) -> None:
vbox.addWidget(self.notification_bar_testnet)
self.update_notification_bar = UpdateNotificationBar(
- signals_min=self.signals, threading_parent=self.threading_manager
+ signals_min=self.signals,
+ threading_parent=self.threading_manager,
+ proxies=(
+ ProxyInfo.parse(self.config.network_config.proxy_url).get_requests_proxy_dist()
+ if self.config.network_config.proxy_url
+ else None
+ ),
)
self.update_notification_bar.check() # TODO: disable this, after it got more stable
vbox.addWidget(self.update_notification_bar)
@@ -1311,10 +1331,11 @@ def create_qtwallet_from_ui():
return qtprotowallet
- def set_tab_widget_icon(self, tab: QWidget, icon: QIcon) -> None:
+ def set_tab_widget_icon(self, tab: QWidget, icon: QIcon, tooltip: str | None) -> None:
idx = self.tab_wallets.indexOf(tab)
if idx != -1:
self.tab_wallets.setTabIcon(idx, icon)
+ self.tab_wallets.setTabToolTip(idx, tooltip if tooltip else "")
def add_qt_wallet(
self, qt_wallet: QTWallet, file_path: str | None = None, password: str | None = None
diff --git a/bitcoin_safe/gui/qt/network_settings/__main__.py b/bitcoin_safe/gui/qt/network_settings/__main__.py
index b7b9075..065d773 100644
--- a/bitcoin_safe/gui/qt/network_settings/__main__.py
+++ b/bitcoin_safe/gui/qt/network_settings/__main__.py
@@ -4,10 +4,9 @@
import numpy as np
from PyQt6.QtWidgets import QApplication
+from bitcoin_safe.gui.qt.network_settings.main import NetworkSettingsUI
from bitcoin_safe.network_config import NetworkConfigs
-from .main import NetworkSettingsUI
-
logging.basicConfig(level=logging.DEBUG)
if __name__ == "__main__":
diff --git a/bitcoin_safe/gui/qt/network_settings/main.py b/bitcoin_safe/gui/qt/network_settings/main.py
index fbfb1bc..fe4d5f0 100644
--- a/bitcoin_safe/gui/qt/network_settings/main.py
+++ b/bitcoin_safe/gui/qt/network_settings/main.py
@@ -27,17 +27,39 @@
# SOFTWARE.
+import json
import logging
-from typing import Optional, Tuple
+import socket
+import ssl
+from typing import Dict, Optional, Tuple
import bdkpython as bdk
import numpy as np
import requests
+import socks # Import the socks module from PySocks
+from PyQt6.QtCore import Qt, pyqtSignal
+from PyQt6.QtGui import QColor, QKeyEvent
+from PyQt6.QtWidgets import (
+ QCheckBox,
+ QComboBox,
+ QDialog,
+ QDialogButtonBox,
+ QFormLayout,
+ QGroupBox,
+ QHBoxLayout,
+ QLabel,
+ QPushButton,
+ QStackedWidget,
+ QVBoxLayout,
+ QWidget,
+)
from bitcoin_safe.gui.qt.custom_edits import QCompleterLineEdit
from bitcoin_safe.gui.qt.dialogs import question_dialog
+from bitcoin_safe.gui.qt.notification_bar import NotificationBar
from bitcoin_safe.gui.qt.util import (
Message,
+ adjust_bg_color_for_darkmode,
ensure_scheme,
get_host_and_port,
read_QIcon,
@@ -47,6 +69,7 @@
from bitcoin_safe.network_config import (
NetworkConfig,
NetworkConfigs,
+ ProxyInfo,
get_default_port,
get_description,
get_electrum_configs,
@@ -61,39 +84,24 @@
logger = logging.getLogger(__name__)
-import json
-import socket
-import ssl
-
-from PyQt6.QtCore import Qt, pyqtSignal
-from PyQt6.QtGui import QKeyEvent
-from PyQt6.QtWidgets import (
- QCheckBox,
- QComboBox,
- QDialog,
- QDialogButtonBox,
- QFormLayout,
- QGroupBox,
- QHBoxLayout,
- QLabel,
- QPushButton,
- QStackedWidget,
- QVBoxLayout,
- QWidget,
-)
-
-def test_mempool_space_server(url: str) -> bool:
+def test_mempool_space_server(url: str, proxies: Dict | None) -> bool:
try:
- response = requests.get(f"{url}/api/blocks/tip/height", timeout=2)
+ response = requests.get(f"{url}/api/blocks/tip/height", timeout=2, proxies=proxies)
return response.status_code == 200
except Exception as e:
logger.warning(f"Mempool.space server connection test failed: {e}")
return False
-def get_electrum_server_version(host: str, port: int, use_ssl: bool = True, timeout=2) -> Optional[str]:
+def get_electrum_server_version(
+ host: str, port: int, use_ssl: bool = True, timeout: int = 2, proxy_info: Optional[ProxyInfo] = None
+) -> Optional[str]:
try:
+ if proxy_info:
+ socks.set_default_proxy(proxy_info.get_socks_scheme(), proxy_info.host, proxy_info.port)
+ socket.socket = socks.socksocket # type: ignore
+
# Connect to the server
with socket.create_connection((host, port), timeout=timeout) as sock:
# Wrap the socket with SSL if required
@@ -117,12 +125,12 @@ def get_electrum_server_version(host: str, port: int, use_ssl: bool = True, time
if use_ssl:
ssock.close()
- # Check and print the server version
+ # Check and return the server version
if "result" in response_json:
logger.debug(f"Server version: {response_json['result']}")
return response_json["result"]
else:
- logger.debug(f"Failed to retrieve server version of {host , port , use_ssl}.")
+ logger.debug(f"Failed to retrieve server version of {host, port, use_ssl}.")
return None
except Exception as e:
logger.debug(f"Connection or communication error: {e}")
@@ -133,11 +141,15 @@ def test_connection(network_config: NetworkConfig) -> Optional[str]:
if network_config.server_type == BlockchainType.Electrum:
try:
host, port = get_host_and_port(network_config.electrum_url)
-
if host is None or port is None:
logger.warning(f"No host or port given")
return None
- return get_electrum_server_version(host=host, port=port, use_ssl=network_config.electrum_use_ssl)
+ return get_electrum_server_version(
+ host=host,
+ port=port,
+ use_ssl=network_config.electrum_use_ssl,
+ proxy_info=ProxyInfo.parse(network_config.proxy_url) if network_config.proxy_url else None,
+ )
except Exception as e:
logger.warning(f"Electrum connection test failed: {e}")
return None
@@ -145,7 +157,15 @@ def test_connection(network_config: NetworkConfig) -> Optional[str]:
elif network_config.server_type == BlockchainType.Esplora:
try:
# Assuming Esplora's REST API for testing connection
- response = requests.get(f"{network_config.esplora_url}/blocks/tip/height", timeout=2)
+ response = requests.get(
+ f"{network_config.esplora_url}/blocks/tip/height",
+ timeout=2,
+ proxies=(
+ ProxyInfo.parse(network_config.proxy_url).get_requests_proxy_dist()
+ if network_config.proxy_url
+ else None
+ ),
+ )
if response.status_code == 200:
return response.json()
else:
@@ -348,6 +368,7 @@ def __init__(
self.stackedWidget.addWidget(self.rpcTab)
+ # mempool
self.groupbox_blockexplorer = QGroupBox()
self.groupbox_blockexplorer_layout = QHBoxLayout(self.groupbox_blockexplorer)
button_mempool = QPushButton(self)
@@ -361,6 +382,24 @@ def __init__(
self.groupbox_blockexplorer_layout.addWidget(self.edit_mempool_url)
self._layout.addWidget(self.groupbox_blockexplorer)
+ # proxy
+ self.groupbox_proxy = QGroupBox()
+ self.groupbox_proxy_layout = QHBoxLayout(self.groupbox_proxy)
+
+ self.proxy_url_edit = QCompleterLineEdit(
+ network=network,
+ suggestions={network: ["127.0.0.1:9050"] for network in bdk.Network},
+ )
+ self.proxy_url_edit.textChanged.connect(self.on_proxy_url_changed)
+ self.proxy_url_edit_label = QLabel()
+ self.groupbox_proxy_layout.addWidget(self.proxy_url_edit_label)
+ self.groupbox_proxy_layout.addWidget(self.proxy_url_edit)
+ self._layout.addWidget(self.groupbox_proxy)
+ self.proxy_warning_label = NotificationBar("")
+ self.proxy_warning_label.set_background_color(adjust_bg_color_for_darkmode(QColor("#FFDF00")))
+ self.proxy_warning_label.set_icon(read_QIcon("warning.png"))
+ self._layout.addWidget(self.proxy_warning_label)
+
# Create buttons and layout
self.button_box = QDialogButtonBox(
QDialogButtonBox.StandardButton.Help
@@ -404,6 +443,10 @@ def updateUi(self):
self.rpc_username_edit_label.setText(self.tr("Username:"))
self.rpc_password_edit_label.setText(self.tr("Password:"))
self.groupbox_blockexplorer.setTitle(self.tr("Mempool Instance URL"))
+ self.proxy_warning_label.textLabel.setText(
+ self.tr("The proxy does not apply to the Sync&Chat feature!")
+ )
+ self.proxy_url_edit_label.setText(self.tr("Proxy:"))
if ok_button := self.button_box.button(QDialogButtonBox.StandardButton.Ok):
ok_button.setText(self.tr("Apply && Shutdown"))
@@ -420,10 +463,21 @@ def get_use_ssl(url: str):
logger.debug(f"set use_ssl = {use_ssl}")
self.electrum_use_ssl = use_ssl
+ def on_proxy_url_changed(self):
+ is_proxy = bool(self.proxy_url_edit.text().strip())
+ self.proxy_warning_label.setHidden(not is_proxy)
+
def _test_connection(self, network_config: NetworkConfig) -> Tuple[str | None, bool]:
server_connection = test_connection(network_config=network_config)
- mempool_server = test_mempool_space_server(url=network_config.mempool_url)
+ mempool_server = test_mempool_space_server(
+ url=network_config.mempool_url,
+ proxies=(
+ ProxyInfo.parse(network_config.proxy_url).get_requests_proxy_dist()
+ if network_config.proxy_url
+ else None
+ ),
+ )
return server_connection, mempool_server
def _format_test_responses(
@@ -470,6 +524,7 @@ def _edits_set_network(self, network: bdk.Network):
self.rpc_username_edit.set_network(network)
self.rpc_password_edit.set_network(network)
self.edit_mempool_url.set_network(network)
+ self.proxy_url_edit.set_network(network)
def add_to_completer_memory(self):
self.compactblockfilters_ip_address_edit.add_current_to_memory()
@@ -479,6 +534,7 @@ def add_to_completer_memory(self):
self.rpc_username_edit.add_current_to_memory()
self.rpc_password_edit.add_current_to_memory()
self.edit_mempool_url.add_current_to_memory()
+ self.proxy_url_edit.add_current_to_memory()
def on_apply_click(self):
new_network_config = self.get_network_settings_from_ui()
@@ -565,18 +621,6 @@ def enableIPPortLineEdit(self, index: int):
self.compactblockfilters_port_edit.setEnabled(False)
# Properties for all user entries
-
- @property
- def mempool_url(self) -> str:
- url = self.edit_mempool_url.text()
- url = url if url.endswith("/") else f"{url}/"
- url = url.replace("api/", "") if url.endswith("api/") else url
- return ensure_scheme(url)
-
- @mempool_url.setter
- def mempool_url(self, value: str):
- self.edit_mempool_url.setText(value)
-
@property
def network(self) -> bdk.Network:
return self.network_combobox.currentData()
@@ -685,3 +729,24 @@ def rpc_password(self) -> str:
@rpc_password.setter
def rpc_password(self, password: str):
self.rpc_password_edit.setText(password if password else "")
+
+ @property
+ def mempool_url(self) -> str:
+ url = self.edit_mempool_url.text()
+ url = url if url.endswith("/") else f"{url}/"
+ url = url.replace("api/", "") if url.endswith("api/") else url
+ return ensure_scheme(url)
+
+ @mempool_url.setter
+ def mempool_url(self, value: str):
+ self.edit_mempool_url.setText(value)
+
+ @property
+ def proxy_url(self) -> str | None:
+ text = self.proxy_url_edit.text()
+ return text if text else None
+
+ @proxy_url.setter
+ def proxy_url(self, url: str | None):
+ self.proxy_url_edit.setText(url if url else "")
+ self.on_proxy_url_changed()
diff --git a/bitcoin_safe/gui/qt/qt_wallet.py b/bitcoin_safe/gui/qt/qt_wallet.py
index bcfef87..6ee3e77 100644
--- a/bitcoin_safe/gui/qt/qt_wallet.py
+++ b/bitcoin_safe/gui/qt/qt_wallet.py
@@ -205,7 +205,7 @@ def __init__(
fx: FX,
get_lang_code: Callable[[], str],
sync_tab: SyncTab | None = None,
- set_tab_widget_icon: Optional[Callable[[QWidget, QIcon], None]] = None,
+ set_tab_widget_icon: Optional[Callable[[QWidget, QIcon, str | None], None]] = None,
password: str | None = None,
file_path: str | None = None,
threading_parent: ThreadingManager | None = None,
@@ -320,7 +320,7 @@ def from_file(
mempool_data: MempoolData,
fx: FX,
get_lang_code: Callable[[], str],
- set_tab_widget_icon: Optional[Callable[[QWidget, QIcon], None]] = None,
+ set_tab_widget_icon: Optional[Callable[[QWidget, QIcon, str | None], None]] = None,
password: str | None = None,
threading_parent: ThreadingManager | None = None,
) -> "QTWallet":
@@ -976,18 +976,34 @@ def update_status_visualization(self, sync_status: SyncStatus) -> None:
return
icon = None
+ tooltip = None
if sync_status == SyncStatus.syncing:
icon = read_QIcon("status_waiting.svg")
self.history_tab_with_toolbar.sync_button.set_icon_is_syncing()
+ tooltip = self.tr("Syncing with {server}").format(
+ server=self.config.network_config.description_short()
+ )
elif self.wallet.get_height() and sync_status in [SyncStatus.synced]:
- icon = read_QIcon("status_connected.svg")
+ using_proxy = self.config.network_config.proxy_url
+ icon = (
+ read_QIcon("status_connected_proxy.svg")
+ if using_proxy
+ else read_QIcon("status_connected.svg")
+ )
+ tooltip = self.config.network_config.description_short()
+ tooltip = self.tr("Connected to {server}").format(
+ server=self.config.network_config.description_short()
+ )
self.history_tab_with_toolbar.sync_button.set_icon_allow_refresh()
else:
icon = read_QIcon("status_disconnected.svg")
+ tooltip = self.tr("Disconnected from {server}").format(
+ server=self.config.network_config.description_short()
+ )
self.history_tab_with_toolbar.sync_button.set_icon_allow_refresh()
if self.set_tab_widget_icon:
- self.set_tab_widget_icon(self.tab, icon)
+ self.set_tab_widget_icon(self.tab, icon, tooltip)
def create_list_tab(
self,
diff --git a/bitcoin_safe/gui/qt/ui_tx.py b/bitcoin_safe/gui/qt/ui_tx.py
index 22ffe6f..bea1780 100644
--- a/bitcoin_safe/gui/qt/ui_tx.py
+++ b/bitcoin_safe/gui/qt/ui_tx.py
@@ -64,7 +64,7 @@
import bdkpython as bdk
from PyQt6.QtCore import Qt, pyqtSignal
-from PyQt6.QtGui import QColor, QFont, QIcon
+from PyQt6.QtGui import QColor, QFont
from PyQt6.QtWidgets import (
QCheckBox,
QDialogButtonBox,
@@ -124,7 +124,6 @@
add_to_buttonbox,
caught_exception_message,
clear_layout,
- icon_path,
read_QIcon,
)
from .utxo_list import UTXOList, UtxoListWithToolbar
@@ -140,7 +139,7 @@ def __init__(self, signals_min: SignalsMin) -> None:
self.category_dict: Dict[str, Set[str]] = {}
self.signals_min = signals_min
self.set_background_color(adjust_bg_color_for_darkmode(QColor("#FFDF00")))
- self.set_icon(QIcon(icon_path("warning.png")))
+ self.set_icon(read_QIcon("warning.png"))
self.optionalButton.setVisible(False)
self.textLabel.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
diff --git a/bitcoin_safe/gui/qt/update_notification_bar.py b/bitcoin_safe/gui/qt/update_notification_bar.py
index ceae129..5bcb143 100644
--- a/bitcoin_safe/gui/qt/update_notification_bar.py
+++ b/bitcoin_safe/gui/qt/update_notification_bar.py
@@ -33,7 +33,7 @@
import shutil
import tempfile
from pathlib import Path
-from typing import Any, List, Optional
+from typing import Any, Dict, List, Optional
from packaging import version
from PyQt6.QtCore import pyqtSignal
@@ -63,8 +63,13 @@ class UpdateNotificationBar(NotificationBar, ThreadingManager):
key = KnownGPGKeys.andreasgriffin
def __init__(
- self, signals_min: SignalsMin, parent=None, threading_parent: ThreadingManager | None = None
+ self,
+ signals_min: SignalsMin,
+ proxies: Dict | None,
+ parent=None,
+ threading_parent: ThreadingManager | None = None,
) -> None:
+ self.proxies = proxies
self.download_container = QWidget()
self.download_container_layout = QHBoxLayout(self.download_container)
current_margins = self.download_container_layout.contentsMargins()
@@ -86,7 +91,7 @@ def __init__(
refresh_icon = (self.style() or QStyle()).standardIcon(QStyle.StandardPixmap.SP_BrowserReload)
self.optionalButton.setIcon(refresh_icon)
- self.verifyer = SignatureVerifyer(list_of_known_keys=[self.key])
+ self.verifyer = SignatureVerifyer(list_of_known_keys=[self.key], proxies=self.proxies)
self.assets: List[Asset] = []
self.setVisible(False)
@@ -126,7 +131,9 @@ def refresh(self) -> None:
self.setVisible(True)
for asset in self.assets:
- downloader = Downloader(url=asset.url, destination_dir=tempfile.gettempdir())
+ downloader = Downloader(
+ url=asset.url, destination_dir=tempfile.gettempdir(), proxies=self.proxies
+ )
downloader.finished.connect(self.on_download_finished)
self.download_container_layout.addWidget(downloader)
else:
@@ -206,7 +213,7 @@ def get_filtered_assets(self, assets: List[Asset]) -> List[Asset]:
def check(self) -> None:
def do() -> Any:
- return GitHubAssetDownloader(self.key.repository).get_assets_latest()
+ return GitHubAssetDownloader(self.key.repository, proxies=self.proxies).get_assets_latest()
def on_done(result) -> None:
pass
diff --git a/bitcoin_safe/gui/qt/util.py b/bitcoin_safe/gui/qt/util.py
index 3e71adb..52d29ff 100644
--- a/bitcoin_safe/gui/qt/util.py
+++ b/bitcoin_safe/gui/qt/util.py
@@ -882,3 +882,17 @@ def hash_color(text: str) -> QColor:
def category_color(text: str) -> QColor:
return adjust_bg_color_for_darkmode(hash_color(text))
+
+
+def create_color_square(color: QColor, length=24) -> QIcon:
+ # Define the size of the square icon
+ size = QSize(length, length)
+
+ # Create a QPixmap of defined size
+ pixmap = QPixmap(size)
+
+ # Fill the QPixmap with the provided color
+ pixmap.fill(color)
+
+ # Create and return a QIcon from the QPixmap
+ return QIcon(pixmap)
diff --git a/bitcoin_safe/mempool.py b/bitcoin_safe/mempool.py
index 4c01fd4..ab4cc25 100644
--- a/bitcoin_safe/mempool.py
+++ b/bitcoin_safe/mempool.py
@@ -182,11 +182,11 @@ def fee_to_color(fee, colors=chartColors) -> str:
return colors[indizes[-1]]
-def fetch_from_url(url: str, is_json=True) -> Optional[Any]:
+def fetch_from_url(url: str, proxies: Dict | None, is_json=True) -> Optional[Any]:
logger.debug(f"fetch_json_from_url requests.get({url}, timeout=10)")
try:
- response = requests.get(url, timeout=10)
+ response = requests.get(url, timeout=10, proxies=proxies)
# Check if the request was successful (status code 200)
if response.status_code == 200:
# Parse the JSON response
@@ -201,9 +201,9 @@ def fetch_from_url(url: str, is_json=True) -> Optional[Any]:
return None
-def threaded_fetch(url: str, on_success, is_json=True) -> TaskThread:
+def threaded_fetch(url: str, on_success, proxies: Dict | None, is_json=True) -> TaskThread:
def do() -> Any:
- return fetch_from_url(url, is_json=is_json)
+ return fetch_from_url(url, is_json=is_json, proxies=proxies)
def on_error(packed_error_info) -> None:
custom_exception_handler(*packed_error_info)
@@ -296,7 +296,7 @@ def max_reasonable_fee_rate(self) -> float:
return average_fee_rate * (1 + slack)
- def set_data_from_mempoolspace(self, force=False) -> None:
+ def set_data_from_mempoolspace(self, proxies: Dict | None, force=False) -> None:
if not force and datetime.datetime.now() - self.time_of_data < datetime.timedelta(minutes=9):
logger.debug(
f"Do not fetch data from {self.network_config.mempool_url} because data is only {datetime.datetime.now()- self.time_of_data } old."
@@ -314,6 +314,7 @@ def on_mempool_blocks(mempool_blocks) -> None:
threaded_fetch(
f"{self.network_config.mempool_url}api/v1/fees/mempool-blocks",
on_mempool_blocks,
+ proxies=proxies,
)
)
logger.debug(f"started on_mempool_blocks")
@@ -325,8 +326,7 @@ def on_recommended(recommended) -> None:
self.append_thread(
threaded_fetch(
- f"{self.network_config.mempool_url}api/v1/fees/recommended",
- on_recommended,
+ f"{self.network_config.mempool_url}api/v1/fees/recommended", on_recommended, proxies=proxies
)
)
logger.debug(f"started on_recommended")
@@ -338,15 +338,12 @@ def on_mempool_dict(mempool_dict) -> None:
self.signal_data_updated.emit()
self.append_thread(
- threaded_fetch(
- f"{self.network_config.mempool_url}api/mempool",
- on_mempool_dict,
- )
+ threaded_fetch(f"{self.network_config.mempool_url}api/mempool", on_mempool_dict, proxies=proxies)
)
logger.debug(f"started on_mempool_dict")
- def fetch_block_tip_height(self) -> int:
- response = fetch_from_url(f"{self.network_config.mempool_url}api/blocks/tip/height")
+ def fetch_block_tip_height(self, proxies: Dict | None) -> int:
+ response = fetch_from_url(f"{self.network_config.mempool_url}api/blocks/tip/height", proxies=proxies)
return response if response else 0
def fee_rate_to_projected_block_index(self, fee_rate: float) -> int:
diff --git a/bitcoin_safe/network_config.py b/bitcoin_safe/network_config.py
index f32401a..a476dd8 100644
--- a/bitcoin_safe/network_config.py
+++ b/bitcoin_safe/network_config.py
@@ -29,14 +29,16 @@
import logging
from dataclasses import dataclass
+from urllib.parse import urlparse
from packaging import version
logger = logging.getLogger(__name__)
-from typing import Any, Dict
+from typing import Any, Dict, Literal
import bdkpython as bdk
+import socks
from bitcoin_safe.pythonbdk_types import BlockchainType, CBFServerType
from bitcoin_safe.storage import BaseSaveableClass, filtered_for_init
@@ -48,6 +50,38 @@
FEE_RATIO_HIGH_WARNING = 0.05 # warn user if fee/amount for on-chain tx is higher than this
+@dataclass
+class ProxyInfo:
+ host: str | None
+ port: int | None
+ scheme: str = "socks5"
+
+ def get_socks_scheme(self) -> Literal[1] | Literal[2]:
+ if self.scheme == "socks4":
+ return socks.SOCKS4
+ return socks.SOCKS5
+
+ def get_url(self):
+ return f"{self.scheme}://{self.host}:{self.port}"
+
+ def get_requests_proxy_dist(self):
+ return {"http": self.get_url(), "https": self.get_url()}
+
+ @classmethod
+ def parse(cls, proxy_url: str):
+ # Prepend "socks5h://" if the proxy string does not contain a scheme
+ if "://" not in proxy_url:
+ proxy_url = f"{cls.scheme}://{proxy_url}" # Default to SOCKS5 with remote DNS
+ parsed_proxy = urlparse(proxy_url)
+ return cls(host=parsed_proxy.hostname, port=parsed_proxy.port, scheme=parsed_proxy.scheme)
+
+
+def clean_electrum_url(url: str, electrum_use_ssl: bool) -> str:
+ if electrum_use_ssl and not url.startswith("ssl://"):
+ url = "ssl://" + url
+ return url
+
+
def get_mempool_url(network: bdk.Network) -> Dict[str, str]:
d = {
bdk.Network.BITCOIN: {
@@ -300,6 +334,25 @@ def __init__(self, network: bdk.Network) -> None:
self.esplora_url: str = get_esplora_urls(network)["default"]
self.mempool_url: str = get_mempool_url(network)["default"]
+ self.proxy_url: str | None = None
+
+ def description_short(self):
+ server_name = ""
+ if self.server_type == BlockchainType.Electrum:
+ server_name = f"{self.electrum_url}"
+ elif self.server_type == BlockchainType.Esplora:
+ server_name = f"{self.esplora_url}"
+ elif self.server_type == BlockchainType.CompactBlockFilter:
+ server_name = f"{self.server_type.name}"
+ elif self.server_type == BlockchainType.RPC:
+ server_name = f"{self.server_type.name}"
+
+ if self.proxy_url:
+ return translate("network_config", "{server_name} via the proxy {proxy}").format(
+ server_name=server_name, proxy=self.proxy_url
+ )
+ else:
+ return translate("network_config", "{server_name}").format(server_name=server_name)
def dump(self) -> Dict[str, Any]:
d = super().dump()
diff --git a/bitcoin_safe/signature_manager.py b/bitcoin_safe/signature_manager.py
index 62d9c48..5365e42 100644
--- a/bitcoin_safe/signature_manager.py
+++ b/bitcoin_safe/signature_manager.py
@@ -123,14 +123,15 @@ class Asset:
class GitHubAssetDownloader:
- def __init__(self, repository: str) -> None:
+ def __init__(self, repository: str, proxies: Dict | None) -> None:
self.repository = repository
+ self.proxies = proxies
logger.debug(f"initialized {self}")
def _get_assets(self, api_url) -> List[Asset]:
try:
logger.debug(f"Get assets from {api_url}")
- response = requests.get(api_url, timeout=2)
+ response = requests.get(api_url, timeout=2, proxies=self.proxies)
response.raise_for_status()
assets = response.json().get("assets", [])
@@ -154,12 +155,10 @@ def get_assets_latest(self) -> List[Asset]:
class SignatureVerifyer:
- def __init__(
- self,
- list_of_known_keys: Optional[List[SimpleGPGKey]],
- ) -> None:
+ def __init__(self, list_of_known_keys: Optional[List[SimpleGPGKey]], proxies: Dict | None) -> None:
self.list_of_known_keys = list_of_known_keys if list_of_known_keys else []
self.public_keys: Dict[str, pgpy.PGPKey] = {}
+ self.proxies = proxies
self.import_known_keys()
def import_public_key_file(self, path: Path) -> pgpy.PGPKey:
@@ -300,8 +299,8 @@ def _get_asset_url(assets: List[Asset], ending: str) -> Optional[str]:
return None
@staticmethod
- def _download_file(download_url: str, filename: Path) -> Path:
- sig_response = requests.get(download_url, timeout=2)
+ def _download_file(download_url: str, filename: Path, proxies: Dict | None) -> Path:
+ sig_response = requests.get(download_url, timeout=2, proxies=proxies)
sig_response.raise_for_status()
with open(filename, "wb") as f:
f.write(sig_response.content)
@@ -309,12 +308,12 @@ def _download_file(download_url: str, filename: Path) -> Path:
@staticmethod
def _download_asset_file(
- assets: List[Asset], target_directory: Path, asset_ending: str
+ assets: List[Asset], target_directory: Path, asset_ending: str, proxies: Dict | None
) -> Optional[Path]:
if url := SignatureVerifyer._get_asset_url(assets, asset_ending):
url_filename = Path(url).name
filename = target_directory / url_filename
- SignatureVerifyer._download_file(url, filename)
+ SignatureVerifyer._download_file(url, filename, proxies=proxies)
return filename
return None
@@ -350,22 +349,27 @@ def get_signature_from_web(self, binary_filename: Path) -> Optional[Path]:
if not tag:
return None
- assets = GitHubAssetDownloader(repository=key.repository).get_assets_by_tag(tag)
+ assets = GitHubAssetDownloader(repository=key.repository, proxies=self.proxies).get_assets_by_tag(tag)
if assets:
if key.manifest_ending:
self._download_asset_file(
- assets, target_directory=binary_filename.parent, asset_ending=key.manifest_ending
+ assets,
+ target_directory=binary_filename.parent,
+ asset_ending=key.manifest_ending,
+ proxies=self.proxies,
)
sig_filename = self._download_asset_file(
assets,
target_directory=binary_filename.parent,
asset_ending=f"{key.manifest_ending}.asc",
+ proxies=self.proxies,
)
else:
sig_filename = self._download_asset_file(
assets,
target_directory=binary_filename.parent,
asset_ending=f"{binary_filename.name}.asc",
+ proxies=self.proxies,
)
return sig_filename
diff --git a/bitcoin_safe/wallet.py b/bitcoin_safe/wallet.py
index 1965386..f2bfd77 100644
--- a/bitcoin_safe/wallet.py
+++ b/bitcoin_safe/wallet.py
@@ -33,6 +33,7 @@
import random
from time import time
+from bitcoin_safe.network_config import ProxyInfo, clean_electrum_url
from bitcoin_safe.psbt_util import FeeInfo
from .signals import Signals, UpdateFilter
@@ -807,13 +808,16 @@ def init_blockchain(self) -> bdk.Blockchain:
blockchain_config = None
if self.config.network_config.server_type == BlockchainType.Electrum:
- full_url = (
- "ssl://" if self.config.network_config.electrum_use_ssl else ""
- ) + self.config.network_config.electrum_url
blockchain_config = bdk.BlockchainConfig.ELECTRUM(
bdk.ElectrumConfig(
- url=full_url,
- socks5=None,
+ url=clean_electrum_url(
+ self.config.network_config.electrum_url, self.config.network_config.electrum_use_ssl
+ ),
+ socks5=(
+ ProxyInfo.parse(self.config.network_config.proxy_url).get_url()
+ if self.config.network_config.proxy_url
+ else None
+ ),
retry=2,
timeout=10,
stop_gap=max(self.gap, self.gap_change),
@@ -824,7 +828,11 @@ def init_blockchain(self) -> bdk.Blockchain:
blockchain_config = bdk.BlockchainConfig.ESPLORA(
bdk.EsploraConfig(
base_url=self.config.network_config.esplora_url,
- proxy=None,
+ proxy=(
+ ProxyInfo.parse(self.config.network_config.proxy_url).get_url()
+ if self.config.network_config.proxy_url
+ else None
+ ),
concurrency=1,
stop_gap=max(self.gap, self.gap_change),
timeout=10,
diff --git a/poetry.lock b/poetry.lock
index afff6f5..7959f04 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -791,61 +791,61 @@ typing = ["typing-extensions (>=4.12.2)"]
[[package]]
name = "fonttools"
-version = "4.55.5"
+version = "4.55.6"
description = "Tools to manipulate font files"
optional = false
python-versions = ">=3.8"
files = [
- {file = "fonttools-4.55.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:58fbc0dba6c87a9ec57be7e6751a6442911e546750e362b39ff07e30445c355f"},
- {file = "fonttools-4.55.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b788742d99e7e62b3428728f3af743c6e169b53796c2b885adb0080c256c523e"},
- {file = "fonttools-4.55.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f64266bbeccd1c289f4ea2ae4cc8b87daa51ba44bdbf27b3950f6f303ee2ee9"},
- {file = "fonttools-4.55.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d073d6e0a5576c7b82d7926c8489f326b6c9381871660bbdeeafe5e9a7b400f7"},
- {file = "fonttools-4.55.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:57e79e3fdb011792be6e9f73cb2154c37a2b3f14ff09ddec32f4d1591ba56d64"},
- {file = "fonttools-4.55.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:53f9b4bf0c4744bfabdd488db6eb374beb3ee4778f54019b48486aebbcc6c77d"},
- {file = "fonttools-4.55.5-cp310-cp310-win32.whl", hash = "sha256:4f47f9b4f2674b5841d119a5bffade603777729a23cb6d9413146b6b109cd04e"},
- {file = "fonttools-4.55.5-cp310-cp310-win_amd64.whl", hash = "sha256:01bf83e07a44a34d58d22a6af0013c94ed7d876c081ed04e6a6db368db3ec4f2"},
- {file = "fonttools-4.55.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:019ab35daacec241d567174e1e8068191b059a7e171f68483778a91485e8e27b"},
- {file = "fonttools-4.55.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:59fbfd348fe3c15b4cb31f0cb81a9fad67c1419596e2f349be0a1e48955775fd"},
- {file = "fonttools-4.55.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3686e74b372313495ffbe58b23304772bc2f7c7fb947da382f250bfc1b0417c"},
- {file = "fonttools-4.55.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f8065f503b2abc9d8d2b241da307c58c80df0e28c5ea8464fe8d2ba3bb76990"},
- {file = "fonttools-4.55.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ac1e3139c9776eb3a5119a25da5665fd961f6b39a5307b62bd427afba69b7c5e"},
- {file = "fonttools-4.55.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1bf14bcec231408581ee3cafcb23a0ef1821a974a6ff5031ccbc1aad65192de9"},
- {file = "fonttools-4.55.5-cp311-cp311-win32.whl", hash = "sha256:aa7868dd7d42992ccd722d70a3bd413d875ca51633b094b5867ab09ed8e78bbe"},
- {file = "fonttools-4.55.5-cp311-cp311-win_amd64.whl", hash = "sha256:d895f363e03697f7941c278fb7a42fca63d52de5416180ef1892dfd67a136698"},
- {file = "fonttools-4.55.5-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5ad2b4a8bfd94ae6792c2f00e585fcdaa5c7803d87eedaeaa30e81616283e712"},
- {file = "fonttools-4.55.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:928d0a093eaab9bde8b295f01859b0463384b86ba800eb959370734588347444"},
- {file = "fonttools-4.55.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59b10b408a68f5c1ecb927ad11860bf534312a236c61f3b20cb6e22bb55265b9"},
- {file = "fonttools-4.55.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1a06e77f956a5857a4444f689f0ca4a1c4bdbcb38c812805f54a1b21380cc24"},
- {file = "fonttools-4.55.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:85dc010bb9dc0fc9cfdb050ace4fb810ff5d5edb6a34045bce83dd4307b1a27c"},
- {file = "fonttools-4.55.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:546b195de57360e52b6f94bf126b1400004643fc2754705b6ae659293c34e449"},
- {file = "fonttools-4.55.5-cp312-cp312-win32.whl", hash = "sha256:8c9061a4027bfc62b22c55885e561d6eb36d3f6d058f7894e4d84eb778580e3f"},
- {file = "fonttools-4.55.5-cp312-cp312-win_amd64.whl", hash = "sha256:742c63ba8e2888dc6cf4cce98d16fe77d79a6c283f5c6d1a8e17d128ecde45fc"},
- {file = "fonttools-4.55.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a853ee8ac47c2e2e68d5a0f07f7f38eb616d60c4438bcff5c0312322451f15c6"},
- {file = "fonttools-4.55.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:444e84d8158ed40427827e5ff8db4d05d89560e19f2a6baf90565880d1c7c08f"},
- {file = "fonttools-4.55.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e8eb7ca7b3ef580114edd6f9ce9424e534b9cb1a98c918a42930f196b1ac59e"},
- {file = "fonttools-4.55.5-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0c27b2084eb715bce93b4c3cc2080a8b3fb6aff5a105c221f150df42e79120a"},
- {file = "fonttools-4.55.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bb11588c41c9e867cebbf72485963252b2d782e97514845aa3fd372b31f63afe"},
- {file = "fonttools-4.55.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a65d4407ca31ec582d1a7105ee08986f6ef964ddcbe0a2878881926bc23cfba3"},
- {file = "fonttools-4.55.5-cp313-cp313-win32.whl", hash = "sha256:7cf3dc8051c0b37034c2661934e8795a1e95ac5cf4f97ce9935cf6f10ba481f0"},
- {file = "fonttools-4.55.5-cp313-cp313-win_amd64.whl", hash = "sha256:b5e6868d8952a31cb3643080ea1594adde971bf2a05aae5bc47bf0ac91e79575"},
- {file = "fonttools-4.55.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a7b3c77c5dcf0a1b4e3b57e976253f5ef09966f811b4b06d36f8eb8672c209fb"},
- {file = "fonttools-4.55.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91e989b53cdcb301ebd599c32a95cf397082184d46ec73125dbdc83b56720e2e"},
- {file = "fonttools-4.55.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:240927333041df5377a86d4458bdadea1573bd29589040dcab4e52b6277dfae1"},
- {file = "fonttools-4.55.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41b52283f68b090b85ba5fd94541ef15c21a17b7c7e3917fd9520297975838fc"},
- {file = "fonttools-4.55.5-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:686ee7f1d0ef1d8d540039219d256ee89724e9dc3db4c394b4c65f6512228924"},
- {file = "fonttools-4.55.5-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a0723737a3fb16e7d359df797c9c4d8a3fd974dfff1c27d245f6670efb4b8ab6"},
- {file = "fonttools-4.55.5-cp38-cp38-win32.whl", hash = "sha256:365e7f9005df0a0125d0728aa49340030431ba54b33f20226c5529a26ce4980f"},
- {file = "fonttools-4.55.5-cp38-cp38-win_amd64.whl", hash = "sha256:f51572d1c8277f91b2be575b7069f8765170cbf7c2d5b1cdd53d40dd2323b792"},
- {file = "fonttools-4.55.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9e747a98062af9dca29d035417c6f547b956908a0711a66697125596c40ad05a"},
- {file = "fonttools-4.55.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:96f6a1ed5181e80b1db8c1352d5f45c8cef875a9633ad69df6af4ee7c6895077"},
- {file = "fonttools-4.55.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ed53c04d444660a2eeef3d8a8fe8c62d9bd99d50a03b0400624144d3131cf4a"},
- {file = "fonttools-4.55.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25362494d1f9ef467c210fc1d73116811a01fd507345e865c14ecbd80b323380"},
- {file = "fonttools-4.55.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:acd86a4605586502f6716a543183dcedc4497a7cbce7fb1ca4e793daa5bfdc12"},
- {file = "fonttools-4.55.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2c14aae1b255767f2cb2f8c8de4c50d45f94bf125a5149325d3af0e4f6b39060"},
- {file = "fonttools-4.55.5-cp39-cp39-win32.whl", hash = "sha256:a8602b04451e7f62eda75071210ebea4e2ba7d2a24868eba2cf541232b88357c"},
- {file = "fonttools-4.55.5-cp39-cp39-win_amd64.whl", hash = "sha256:17a14d3a23e894289288d77abcf4b2e6e198c0e1ec6798522bcc51f1ffbfdf6d"},
- {file = "fonttools-4.55.5-py3-none-any.whl", hash = "sha256:6261deeaa54a720405fc4a21dc92f722d1b2c5a977910d464029534b9475f716"},
- {file = "fonttools-4.55.5.tar.gz", hash = "sha256:87afe2a1e81a55131bbae66f3f1718b1faee3218b1261abce036d7d189094c36"},
+ {file = "fonttools-4.55.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:57d55fc965e5dd20c8a60d880e0f43bafb506be87af0b650bdc42591e41e0d0d"},
+ {file = "fonttools-4.55.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:127999618afe3a2490fad54bab0650c5fbeab1f8109bdc0205f6ad34306deb8b"},
+ {file = "fonttools-4.55.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3226d40cb92787e09dcc3730f54b3779dfe56bdfea624e263685ba17a6faac4"},
+ {file = "fonttools-4.55.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e82772f70b84e17aa36e9f236feb2a4f73cb686ec1e162557a36cf759d1acd58"},
+ {file = "fonttools-4.55.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a632f85bd73e002b771bcbcdc512038fa5d2e09bb18c03a22fb8d400ea492ddf"},
+ {file = "fonttools-4.55.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:791e0cf862cdd3a252df395f1bb5f65e3a760f1da3c7ce184d0f7998c266614d"},
+ {file = "fonttools-4.55.6-cp310-cp310-win32.whl", hash = "sha256:94f7f2c5c5f3a6422e954ecb6d37cc363e27d6f94050a7ed3f79f12157af6bb2"},
+ {file = "fonttools-4.55.6-cp310-cp310-win_amd64.whl", hash = "sha256:2d15e02b93a46982a8513a208e8f89148bca8297640527365625be56151687d0"},
+ {file = "fonttools-4.55.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0879f99eabbf2171dfadd9c8c75cec2b7b3aa9cd1f3955dd799c69d60a5189ef"},
+ {file = "fonttools-4.55.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d77d83ca77a4c3156a2f4cbc7f09f5a8503795da658fa255b987ad433a191266"},
+ {file = "fonttools-4.55.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07478132407736ee5e54f9f534e73923ae28e9bb6dba17764a35e3caf7d7fea3"},
+ {file = "fonttools-4.55.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1c06fbc2fd76b9bab03eddfd8aa9fb7c0981d314d780e763c80aa76be1c9982"},
+ {file = "fonttools-4.55.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:09ed667c4753e1270994e5398cce8703e6423c41702a55b08f843b2907b1be65"},
+ {file = "fonttools-4.55.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0ee6ed68af8d57764d69da099db163aaf37d62ba246cfd42f27590e3e6724b55"},
+ {file = "fonttools-4.55.6-cp311-cp311-win32.whl", hash = "sha256:9f99e7876518b2d059a9cc67c506168aebf9c71ac8d81006d75e684222f291d2"},
+ {file = "fonttools-4.55.6-cp311-cp311-win_amd64.whl", hash = "sha256:3aa6c684007723895aade9b2fe76d07008c9dc90fd1ef6c310b3ca9c8566729f"},
+ {file = "fonttools-4.55.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:51120695ee13001533e50abd40eec32c01b9c6f44c5567db38a7acd3eedcd19d"},
+ {file = "fonttools-4.55.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:76ac5a595f86892b49ba86ba2e46185adc76328ce6eff0583b30e5c3ab02a914"},
+ {file = "fonttools-4.55.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b7535a5ac386e549e2b00b34c59b53f805e2423000676723b6867df3c10df04"},
+ {file = "fonttools-4.55.6-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c42009177d3690894288082d5e3dac6bdc9f5d38e25054535e341a19cf5183a4"},
+ {file = "fonttools-4.55.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:88f74bc19dbab3dee6a00ca67ca54bb4793e44ff0c4dcf1fa61d68651ae3fa0a"},
+ {file = "fonttools-4.55.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bc6f58976ffc19fe1630119a2736153b66151d023c6f30065f31c9e8baed1303"},
+ {file = "fonttools-4.55.6-cp312-cp312-win32.whl", hash = "sha256:4259159715142c10b0f4d121ef14da3fa6eafc719289d9efa4b20c15e57fef82"},
+ {file = "fonttools-4.55.6-cp312-cp312-win_amd64.whl", hash = "sha256:d91fce2e9a87cc0db9f8042281b6458f99854df810cfefab2baf6ab2acc0f4b4"},
+ {file = "fonttools-4.55.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9394813cc73fa22c5413ec1c5745c0a16f68dd2b890f7c55eaba5cb40187ed55"},
+ {file = "fonttools-4.55.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ac817559a7d245454231374e194b4e457dca6fefa5b52af466ab0516e9a09c6e"},
+ {file = "fonttools-4.55.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34405f1314f1e88b1877a9f9e497fe45190e8c4b29a6c7cd85ed7f666a57d702"},
+ {file = "fonttools-4.55.6-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af5469bbf555047efd8752d85faeb2a3510916ddc6c50dd6fb168edf1677408f"},
+ {file = "fonttools-4.55.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8a8004a19195eb8a8a13de69e26ec9ed60a5bc1fde336d0021b47995b368fac9"},
+ {file = "fonttools-4.55.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:73a4aaf672e7b2265c6354a69cbbadf71b7f3133ecb74e98fec4c67c366698a3"},
+ {file = "fonttools-4.55.6-cp313-cp313-win32.whl", hash = "sha256:73bdff9c44d36c57ea84766afc20517eda0c9bb1571b4a09876646264bd5ff3b"},
+ {file = "fonttools-4.55.6-cp313-cp313-win_amd64.whl", hash = "sha256:132fa22be8a99784de8cb171b30425a581f04a40ec1c05183777fb2b1fe3bac9"},
+ {file = "fonttools-4.55.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8398928acb8a57073606feb9a310682d4a7e2d7536f2c61719261f4c0974504c"},
+ {file = "fonttools-4.55.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c2f78ebfdef578d4db7c44bc207ac5f9a5c1f22c9db606460dcc8ad48e183338"},
+ {file = "fonttools-4.55.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fb545f3a4ebada908fa717ec732277de18dd10161f03ee3b3144d34477804de"},
+ {file = "fonttools-4.55.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1062daa0390b32bfd062ded2b450db9e9cf10e5a9919561c13f535e818b1952b"},
+ {file = "fonttools-4.55.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:860ab9ed3f9e088d3bdb77b9074e656635f173b039e77d550b603cba052a0dca"},
+ {file = "fonttools-4.55.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:03701e7de70c71eb5965cb200986b0c11dfa3cf8e843e4f517ee30a0f43f0a25"},
+ {file = "fonttools-4.55.6-cp38-cp38-win32.whl", hash = "sha256:f66561fbfb75785d06513b8025a50be37bf970c3c413e87581cc6eff10bc78f1"},
+ {file = "fonttools-4.55.6-cp38-cp38-win_amd64.whl", hash = "sha256:edf159a8f1e48dc4683a715b36da76dd2f82954b16bfe11a215d58e963d31cfc"},
+ {file = "fonttools-4.55.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:61aa1997c520bee4cde14ffabe81efc4708c500c8c81dce37831551627a2be56"},
+ {file = "fonttools-4.55.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7954ea66a8d835f279c17d8474597a001ddd65a2c1ca97e223041bfbbe11f65e"},
+ {file = "fonttools-4.55.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f4e88f15f5ed4d2e4bdfcc98540bb3987ae25904f9be304be9a604e7a7050a1"},
+ {file = "fonttools-4.55.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d419483a6295e83cabddb56f1c7b7bfdc8169de2fcb5c68d622bd11140355f9"},
+ {file = "fonttools-4.55.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:acc74884afddc2656bffc50100945ff407574538c152931c402fccddc46f0abc"},
+ {file = "fonttools-4.55.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a55489c7e9d5ea69690a2afad06723c3d0c48c6d276a25391ea97cb31a16b37c"},
+ {file = "fonttools-4.55.6-cp39-cp39-win32.whl", hash = "sha256:8c9de8d16d02ecc8b65e3f3d2d1e3002be2c4a3f094d580faf76d7f768bd45fe"},
+ {file = "fonttools-4.55.6-cp39-cp39-win_amd64.whl", hash = "sha256:471961af7a4b8461fac0c8ee044b4986e6fe3746d4c83a1aacbdd85b4eb53f93"},
+ {file = "fonttools-4.55.6-py3-none-any.whl", hash = "sha256:d20ab5a78d0536c26628eaadba661e7ae2427b1e5c748a0a510a44d914e1b155"},
+ {file = "fonttools-4.55.6.tar.gz", hash = "sha256:1beb4647a0df5ceaea48015656525eb8081af226fe96554089fd3b274d239ef0"},
]
[package.extras]
@@ -1832,22 +1832,22 @@ virtualenv = ">=20.10.0"
[[package]]
name = "protobuf"
-version = "4.25.5"
+version = "4.25.6"
description = ""
optional = false
python-versions = ">=3.8"
files = [
- {file = "protobuf-4.25.5-cp310-abi3-win32.whl", hash = "sha256:5e61fd921603f58d2f5acb2806a929b4675f8874ff5f330b7d6f7e2e784bbcd8"},
- {file = "protobuf-4.25.5-cp310-abi3-win_amd64.whl", hash = "sha256:4be0571adcbe712b282a330c6e89eae24281344429ae95c6d85e79e84780f5ea"},
- {file = "protobuf-4.25.5-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:b2fde3d805354df675ea4c7c6338c1aecd254dfc9925e88c6d31a2bcb97eb173"},
- {file = "protobuf-4.25.5-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:919ad92d9b0310070f8356c24b855c98df2b8bd207ebc1c0c6fcc9ab1e007f3d"},
- {file = "protobuf-4.25.5-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:fe14e16c22be926d3abfcb500e60cab068baf10b542b8c858fa27e098123e331"},
- {file = "protobuf-4.25.5-cp38-cp38-win32.whl", hash = "sha256:98d8d8aa50de6a2747efd9cceba361c9034050ecce3e09136f90de37ddba66e1"},
- {file = "protobuf-4.25.5-cp38-cp38-win_amd64.whl", hash = "sha256:b0234dd5a03049e4ddd94b93400b67803c823cfc405689688f59b34e0742381a"},
- {file = "protobuf-4.25.5-cp39-cp39-win32.whl", hash = "sha256:abe32aad8561aa7cc94fc7ba4fdef646e576983edb94a73381b03c53728a626f"},
- {file = "protobuf-4.25.5-cp39-cp39-win_amd64.whl", hash = "sha256:7a183f592dc80aa7c8da7ad9e55091c4ffc9497b3054452d629bb85fa27c2a45"},
- {file = "protobuf-4.25.5-py3-none-any.whl", hash = "sha256:0aebecb809cae990f8129ada5ca273d9d670b76d9bfc9b1809f0a9c02b7dbf41"},
- {file = "protobuf-4.25.5.tar.gz", hash = "sha256:7f8249476b4a9473645db7f8ab42b02fe1488cbe5fb72fddd445e0665afd8584"},
+ {file = "protobuf-4.25.6-cp310-abi3-win32.whl", hash = "sha256:61df6b5786e2b49fc0055f636c1e8f0aff263808bb724b95b164685ac1bcc13a"},
+ {file = "protobuf-4.25.6-cp310-abi3-win_amd64.whl", hash = "sha256:b8f837bfb77513fe0e2f263250f423217a173b6d85135be4d81e96a4653bcd3c"},
+ {file = "protobuf-4.25.6-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:6d4381f2417606d7e01750e2729fe6fbcda3f9883aa0c32b51d23012bded6c91"},
+ {file = "protobuf-4.25.6-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:5dd800da412ba7f6f26d2c08868a5023ce624e1fdb28bccca2dc957191e81fb5"},
+ {file = "protobuf-4.25.6-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:4434ff8bb5576f9e0c78f47c41cdf3a152c0b44de475784cd3fd170aef16205a"},
+ {file = "protobuf-4.25.6-cp38-cp38-win32.whl", hash = "sha256:8bad0f9e8f83c1fbfcc34e573352b17dfce7d0519512df8519994168dc015d7d"},
+ {file = "protobuf-4.25.6-cp38-cp38-win_amd64.whl", hash = "sha256:b6905b68cde3b8243a198268bb46fbec42b3455c88b6b02fb2529d2c306d18fc"},
+ {file = "protobuf-4.25.6-cp39-cp39-win32.whl", hash = "sha256:3f3b0b39db04b509859361ac9bca65a265fe9342e6b9406eda58029f5b1d10b2"},
+ {file = "protobuf-4.25.6-cp39-cp39-win_amd64.whl", hash = "sha256:6ef2045f89d4ad8d95fd43cd84621487832a61d15b49500e4c1350e8a0ef96be"},
+ {file = "protobuf-4.25.6-py3-none-any.whl", hash = "sha256:07972021c8e30b870cfc0863409d033af940213e0e7f64e27fe017b929d2c9f7"},
+ {file = "protobuf-4.25.6.tar.gz", hash = "sha256:f8cfbae7c5afd0d0eaccbe73267339bff605a2315860bb1ba08eb66670a9a91f"},
]
[[package]]
@@ -2168,6 +2168,18 @@ files = [
[package.extras]
cp2110 = ["hidapi"]
+[[package]]
+name = "pysocks"
+version = "1.7.1"
+description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information."
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+files = [
+ {file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"},
+ {file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"},
+ {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"},
+]
+
[[package]]
name = "pytest"
version = "8.3.4"
@@ -2527,13 +2539,13 @@ files = [
[[package]]
name = "semver"
-version = "3.0.2"
+version = "3.0.4"
description = "Python helper for Semantic Versioning (https://semver.org)"
optional = false
python-versions = ">=3.7"
files = [
- {file = "semver-3.0.2-py3-none-any.whl", hash = "sha256:b1ea4686fe70b981f85359eda33199d60c53964284e0cfb4977d243e37cf4bf4"},
- {file = "semver-3.0.2.tar.gz", hash = "sha256:6253adb39c70f6e51afed2fa7152bcd414c411286088fb4b9effb133885ab4cc"},
+ {file = "semver-3.0.4-py3-none-any.whl", hash = "sha256:9c824d87ba7f7ab4a1890799cec8596f15c1241cb473404ea1cb0c55e4b04746"},
+ {file = "semver-3.0.4.tar.gz", hash = "sha256:afc7d8c584a5ed0a11033af086e8af226a9c0b206f313e0301f8dd7b6b589602"},
]
[[package]]
@@ -2891,4 +2903,4 @@ type = ["pytest-mypy"]
[metadata]
lock-version = "2.0"
python-versions = ">=3.10,<3.13"
-content-hash = "076f4a1421554bb518a174588ec5cf8ae92191bb4ffdcf56b3a2590f6ce93784"
+content-hash = "a6b00c64503f23653b582636a2bff1fc014ab339bb36683b4823469f03f460af"
diff --git a/pyproject.toml b/pyproject.toml
index 061adde..22143c6 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -44,6 +44,7 @@ numpy = "2.2.1" # error in wine/pyinstaller when increased
bitcoin-qr-tools = "^1.0.3"
bitcoin-nostr-chat = "^0.6.1" # { git = "https://github.com/andreasgriffin/bitcoin-nostr-chat.git", rev = "1707c7479d9de4c1915f2b0d907b27f58703e7c0" }
bitcoin-usb = "^0.7.4"
+pysocks = "^1.7.1"
[tool.poetry.group.dev.dependencies]
diff --git a/tests/non_gui/test_signature_manager.py b/tests/non_gui/test_signature_manager.py
index 5b5b02d..7234c8e 100644
--- a/tests/non_gui/test_signature_manager.py
+++ b/tests/non_gui/test_signature_manager.py
@@ -36,7 +36,7 @@
def test_download_manifest_and_verify() -> None:
- manager = SignatureVerifyer(list_of_known_keys=KnownGPGKeys.all())
+ manager = SignatureVerifyer(list_of_known_keys=KnownGPGKeys.all(), proxies=None)
with tempfile.TemporaryDirectory() as tempdir:
logger.debug(f"tempdir {tempdir}")
@@ -53,7 +53,7 @@ def test_download_manifest_and_verify() -> None:
def test_download_manifest_and_verify_wrong_signature() -> None:
- manager = SignatureVerifyer(list_of_known_keys=KnownGPGKeys.all())
+ manager = SignatureVerifyer(list_of_known_keys=KnownGPGKeys.all(), proxies=None)
with tempfile.TemporaryDirectory() as tempdir:
logger.debug(f"tempdir {tempdir}")
diff --git a/tools/build.py b/tools/build.py
index f9cabf7..a89d9b3 100644
--- a/tools/build.py
+++ b/tools/build.py
@@ -35,7 +35,7 @@
import shutil
import subprocess
from pathlib import Path
-from typing import Dict, List, Literal
+from typing import Callable, Dict, List, Literal
from translation_handler import TranslationHandler, run_local
@@ -227,21 +227,21 @@ def build_in_docker(
run_local(f'docker build {DOCKER_BUILD_FLAGS} -t {docker_image} "{path_build}"')
# Possibly do a fresh clone
- FRESH_CLONE = False
+ cloned_path: Path | None = None
if build_commit:
logger.info(f"BITCOINSAFE_BUILD_COMMIT={build_commit}. Doing fresh clone and git checkout.")
- FRESH_CLONE = Path(f"/tmp/{docker_image.replace(' ','')}/fresh_clone/bitcoin_safe")
+ cloned_path = Path(f"/tmp/{docker_image.replace(' ','')}/fresh_clone/bitcoin_safe")
try:
- run_local(f'rm -rf "{FRESH_CLONE}"')
+ run_local(f'rm -rf "{cloned_path}"')
except subprocess.CalledProcessError:
logger.info("We need sudo to remove previous FRESH_CLONE.")
- run_local(f'sudo rm -rf "{FRESH_CLONE}"')
+ run_local(f'sudo rm -rf "{cloned_path}"')
os.umask(0o022)
- run_local(f'git clone "{PROJECT_ROOT}" "{FRESH_CLONE}"')
- os.chdir(str(FRESH_CLONE))
+ run_local(f'git clone "{PROJECT_ROOT}" "{cloned_path}"')
+ os.chdir(str(cloned_path))
run_local(f'git checkout "{build_commit}"')
os.chdir(original_dir)
- PROJECT_ROOT_OR_FRESHCLONE_ROOT = FRESH_CLONE
+ PROJECT_ROOT_OR_FRESHCLONE_ROOT = cloned_path
else:
logger.info("Not doing fresh clone.")
@@ -290,20 +290,20 @@ def build_dmg(
logger.info(f"Building within current project")
# Possibly do a fresh clone
- FRESH_CLONE = False
+ cloned_path: Path | None = None
if build_commit:
logger.info(f"BITCOINSAFE_BUILD_COMMIT={build_commit}. Doing fresh clone and git checkout.")
- FRESH_CLONE = Path(f"/tmp/{build_commit.replace(' ','')}/fresh_clone/bitcoin_safe")
+ cloned_path = Path(f"/tmp/{build_commit.replace(' ','')}/fresh_clone/bitcoin_safe")
try:
- run_local(f'rm -rf "{FRESH_CLONE}"')
+ run_local(f'rm -rf "{cloned_path}"')
except subprocess.CalledProcessError:
logger.info("We need sudo to remove previous FRESH_CLONE.")
- run_local(f'sudo rm -rf "{FRESH_CLONE}"')
+ run_local(f'sudo rm -rf "{cloned_path}"')
os.umask(0o022)
- run_local(f'git clone "{PROJECT_ROOT}" "{FRESH_CLONE}"')
- os.chdir(str(FRESH_CLONE))
+ run_local(f'git clone "{PROJECT_ROOT}" "{cloned_path}"')
+ os.chdir(str(cloned_path))
run_local(f'git checkout "{build_commit}"')
- PROJECT_ROOT_OR_FRESHCLONE_ROOT = FRESH_CLONE
+ PROJECT_ROOT_OR_FRESHCLONE_ROOT = cloned_path
else:
logger.info("Not doing fresh clone.")
@@ -354,7 +354,7 @@ def package_application(
):
# self.update_briefcase_requires()
- f_map = {
+ f_map: Dict[str, Callable[..., None]] = {
"appimage": self.build_appimage_docker,
"windows": self.build_windows_exe_and_installer_docker,
"mac": self.build_dmg,
@@ -398,9 +398,7 @@ def lock(self):
run_local("poetry lock --no-cache --no-update")
def verify(self, signed_files: List[Path]):
- manager = SignatureVerifyer(
- list_of_known_keys=[KnownGPGKeys.andreasgriffin],
- )
+ manager = SignatureVerifyer(list_of_known_keys=[KnownGPGKeys.andreasgriffin], proxies=None)
assert signed_files
for filepath in signed_files:
@@ -576,7 +574,7 @@ def get_default_targets() -> List[TARGET_LITERAL]:
targets = get_default_targets()
else:
print(f"--targets was given with the values: {args.targets}")
- targets = [t.replace(",", "") for t in targets]
+ targets = [t.replace(",", "") for t in targets] # type: ignore
builder = Builder(module_name="bitcoin_safe", clean_all=args.clean)
builder.package_application(targets=targets, build_commit=args.commit)