electrum server select

This commit is contained in:
dni
2026-07-13 09:09:42 +02:00
parent 65d809a66c
commit fe02f54021
4 changed files with 76 additions and 6 deletions
+4 -2
View File
@@ -849,9 +849,11 @@ window.localisation.en = {
blockexplorer_public_api: 'Public API Access',
blockexplorer_public_api_desc:
'Allow unauthenticated access to the block explorer API endpoints.',
electrum_compatible_server: 'Electrum compatible server',
electrum_server_url: 'Electrum Server URL',
electrum_server_url_hint:
'e.g. ssl://electrum.blockstream.info:50002 or tcp://localhost:50001',
electrum_server_url_hint: 'Choose a public Electrum server or enter your own.',
electrum_server_url_custom: 'Custom Electrum Server URL',
view_public_electrum_servers: 'View public Electrum servers',
blockexplorer_network: 'Bitcoin Network',
blockexplorer_network_hint:
'The network the Electrum server is connected to, used to render addresses correctly.',
@@ -1,4 +1,40 @@
window.app.component('lnbits-admin-blockexplorer', {
props: ['form-data'],
template: '#lnbits-admin-blockexplorer'
template: '#lnbits-admin-blockexplorer',
data() {
return {
electrumServers: [
'ssl://fulcrum.lnbits.com:443',
'ssl://mainnet.nunchuk.io:52002',
'ssl://fulcrum.grey.pw:50002',
'ssl://electrum2.bluewallet.io:443',
'ssl://electrum.acinq.co:50002',
'ssl://electrum.blockstream.info:50002',
'ssl://bitcoin.mullvad.net:5010'
]
}
},
computed: {
electrumServerOptions() {
return [...this.electrumServers, 'Custom']
},
electrumServerPreset: {
get() {
return this.electrumServers.includes(
this.formData.lnbits_blockexplorer_electrum_url
)
? this.formData.lnbits_blockexplorer_electrum_url
: 'Custom'
},
set(value) {
if (value === 'Custom') {
if (this.electrumServerPreset !== 'Custom') {
this.formData.lnbits_blockexplorer_electrum_url = ''
}
return
}
this.formData.lnbits_blockexplorer_electrum_url = value
}
}
}
})
@@ -46,12 +46,24 @@
</div>
</div>
<q-separator class="q-mb-lg q-mt-sm"></q-separator>
<h6 class="q-my-none q-mb-sm">
<span v-text="$t('electrum_compatible_server')"></span>
</h6>
<div class="row q-col-gutter-md">
<div class="col-12 col-md-8">
<div class="col-12 col-md-4">
<q-select
filled
v-model="electrumServerPreset"
:options="electrumServerOptions"
:label="$t('electrum_server_url')"
:hint="$t('electrum_server_url_hint')"
></q-select>
</div>
<div class="col-12 col-md-4" v-if="electrumServerPreset === 'Custom'">
<q-input
filled
v-model="formData.lnbits_blockexplorer_electrum_url"
:label="$t('electrum_server_url')"
:label="$t('electrum_server_url_custom')"
:hint="$t('electrum_server_url_hint')"
></q-input>
</div>
@@ -64,6 +76,15 @@
:hint="$t('blockexplorer_network_hint')"
></q-select>
</div>
<div class="col-12">
<a
href="https://1209k.com/bitcoin-eye/ele.php?chain=btc"
target="_blank"
rel="noopener noreferrer"
>
<span v-text="$t('view_public_electrum_servers')"></span>
</a>
</div>
</div>
</q-card-section>
</template>
+12 -1
View File
@@ -763,7 +763,18 @@ class AddressTracker:
for scripthash, address in list(subscribed.items()):
if address not in still_wanted:
del subscribed[scripthash]
await client.unsubscribe_scripthash(scripthash)
try:
await client.unsubscribe_scripthash(scripthash)
except ElectrumError:
# blockchain.scripthash.unsubscribe is part of the spec but
# many ElectrumX deployments don't implement it, returning
# "unknown method". This is expected and harmless: we've
# already dropped the scripthash from `subscribed` above,
# so if the server keeps pushing notifications for it
# anyway, on_status_change() looks it up, finds nothing,
# and drops them. Not logged since it fires on every
# untrack against these servers.
pass
async def _wait_for_change_or_close(self, client: ElectrumClient) -> bool:
"""Waits until addresses change or the connection closes; returns True