Glossario / Nodi e software
Server Electrum
Noto anche come Electrum server, Electrum Personal Server.
- Che cos'è un server Electrum?
- Un server Electrum indicizza la blockchain per script e risponde alle query sugli indirizzi dei wallet leggeri, così quei wallet ottengono saldi immediati senza scaricare la catena da soli.
Qualcuno deve fare la ricerca. Un nodo completo sa quali bitcoin non sono ancora spesi, ma non tiene alcuna mappa da un indirizzo alla sua cronologia, quindi i wallet che vogliono quella cronologia in un secondo anziché in un'ora si rivolgono a un server che l'ha costruita. La pratica standard è gestirne uno proprio accanto al proprio nodo, perché l'alternativa consegna a un estraneo l'elenco completo degli indirizzi che possiedi.
Come funziona
Un server Electrum si colloca tra Bitcoin Core e un wallet, facendo da traduttore tra i due.
Legge ogni blocco dal nodo appena arriva, estrae ogni script di output e memorizza una corrispondenza tra quello script e le transazioni che lo coinvolgono. I wallet si connettono poi tramite un semplice protocollo JSON basato su righe, in testo semplice sulla porta 50001 o con TLS sulla porta 50002, e pongono una domanda oppure si iscrivono per ricevere un avviso quando la risposta cambia. È l'iscrizione a rendere un wallet Electrum immediato: il server invia una notifica nel momento in cui arriva un pagamento, invece di lasciare che il wallet interroghi ripetutamente.
I wallet non inviano indirizzi su quella connessione. Inviano un hash dello script, il digest SHA-256 dello script di output con i byte invertiti, che è una convenzione del protocollo e non una misura di privacy. Il server apprende comunque esattamente quali bitcoin stai osservando, perché restituisce la cronologia di quell'hash e può ritrovare in un attimo l'indirizzo corrispondente nel proprio indice. Considerare gli hash degli script come anonimato è l'equivoco più comune su questo software.
Ciò che il wallet tiene per sé è la verifica. Scarica la catena delle intestazioni di blocco e controlla la prova di Merkle che il server fornisce per ogni transazione, così un server non può inventare un pagamento mai avvenuto senza produrre anche una falsa catena di intestazioni sostenuta da proof of work reale. Può però mentire per omissione, nascondendoti una transazione o una spesa, il che è un rischio minore ma reale.
Tre implementazioni coprono quasi tutte le installazioni: electrs in Rust, preferita per il suo indice ridotto; Fulcrum in C++, preferita per la velocità delle query; ed ElectrumX in Python, l'originale. Electrum Personal Server segue una strada diversa: osserva solo i wallet che elenchi in un file di configurazione invece di indicizzare l'intera catena, il che richiede pochissimo spazio su disco ma non fornisce alcuna risposta sugli indirizzi di altri.
Dove lo vedi
I server Electrum sono la metà invisibile della maggior parte dei wallet bitcoin per desktop.
Electrum stesso, pubblicato per la prima volta da Thomas Voegtlin a novembre 2011, si connette a server pubblici gestiti da volontari, a meno che tu non gli indichi diversamente. Sparrow, Specter e BlueWallet parlano tutti lo stesso protocollo. Ogni pacchetto di nodo diffuso, inclusi Umbrel, Start9, RaspiBlitz e myNode, include electrs o Fulcrum proprio perché il wallet sul tuo computer possa interrogare la tua macchina e nessun altro venga a conoscenza dei tuoi indirizzi.
La ragione per cui questo conta non è ipotetica. Da fine dicembre 2018 alcuni aggressori hanno gestito server malevoli sulla rete pubblica Electrum e sfruttato una debolezza nelle versioni precedenti alla 3.3.3, in cui un server poteva restituire come messaggio di errore testo formattato arbitrario. Agli utenti che tentavano di inviare un pagamento veniva mostrato quello che sembrava un avviso ufficiale per installare un aggiornamento, e il download era malware. Le perdite segnalate ammontano a centinaia di bitcoin. Il client è stato modificato per rimuovere la formattazione dai messaggi del server, ma la lezione resta: un server pubblico è una parte non attendibile con cui il tuo wallet parla continuamente.
Server Electrum vs Neutrino
Un server Electrum fa la ricerca per te e apprende cosa stavi cercando; Neutrino ti invia il materiale grezzo, così non apprende quasi nulla. Il modello Electrum è economico, pochi kilobyte per query e una risposta immediata, ed è per questo che domina nei wallet per desktop abbinati a un dispositivo hardware. Il modello Neutrino scarica un filtro compatto per ogni blocco e lo ispeziona localmente, consumando molta più banda per non rivelare quali script hanno corrisposto. Scegli il modello con server quando il server è tuo, e il modello con filtri quando non può esserlo.