Refuse an Electrum server that is not on the PLM chain (B-99, ELC-30)
PLM shares Bitcoin's genesis and powLimit, so a Bitcoin server passed every header check. connect() now asks server.features and requires PLM's genesis. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
1433813ec7
commit
2c0e71a74c
4 files changed
+72
-2
No files matched your search
@@ -62,6 +62,16 @@ Le difese sono cinque.
|
||||
di [ELC-14].
|
||||
*Codice:* `app/config.py:validate_quorum_servers`, `app/main.py:lifespan` ·
|
||||
*Test:* `tests/unit/test_electrum_listener.py`
|
||||
- **[ELC-30]** Subito dopo `server.version` la connessione chiede
|
||||
`server.features`: il `genesis_hash` deve essere quello di PLM
|
||||
(`000000000019d668…ce26f`). PLM condivide genesis e `powLimit` con Bitcoin
|
||||
(`palladiumcore/src/chainparams.cpp`), quindi un server Electrum di Bitcoin
|
||||
supererebbe ogni controllo sugli header di [ELC-11]; solo il genesis lo
|
||||
distingue. Un genesis diverso o assente, o un errore alla richiesta, fa
|
||||
fallire la connessione come un server irraggiungibile ([ELC-02]); vale anche
|
||||
per le connessioni del quorum ([ELC-14]).
|
||||
*Codice:* `app/electrum/client.py:ElectrumClient._check_genesis`, `app/wallet/plm_network.py:GENESIS_HASH` ·
|
||||
*Test:* `tests/unit/test_electrum_client.py`
|
||||
|
||||
## 2. Richieste con limite di tempo
|
||||
|
||||
@@ -338,11 +348,14 @@ B-83).
|
||||
- **[ELC-29]** Il listener espone lo stato della connessione: se è connesso,
|
||||
il server attivo, l'altezza della punta e da quanti secondi è stato
|
||||
accettato l'ultimo header. Lo leggono `GET /health/ready` (non pronto se non
|
||||
connesso o se l'ultimo header ha più di 360 secondi,
|
||||
connesso o se l'ultimo header ha più di 1800 secondi (con blocchi da 120 s
|
||||
una soglia di 360 s scatterebbe a vuoto ogni ventina di blocchi,
|
||||
e^-3 ≈ 5%; la rotazione di [ELC-21] resta a 360 s perché agisce solo se un
|
||||
altro server ha davvero una punta più alta),
|
||||
[api.md](api.md) B-92) e l'indicatore Electrum di `/admin`. L'altezza
|
||||
corrente resta visibile anche nella barra di stato della catena di `/` (da
|
||||
`chain_tip_height` di `GET /rounds/current`).
|
||||
*Codice:* `app/electrum/listener.py:ElectrumListener.current_endpoint`, `app/main.py:health` · *Test:* —
|
||||
*Stato:* da implementare (B-86, B-92) · *Oggi:* `/health` risponde sempre
|
||||
*Stato:* da implementare (B-92) · *Oggi:* `/health` risponde sempre
|
||||
`ok`; l'età dell'ultimo header non è registrata da nessuna parte e `/admin`
|
||||
mostra solo l'altezza.
|
||||
Reference in new issue
Block a user