Buonasera a tutti,
scusate se mi intrometto in questa discussione molto tecnica e assai interessante.
Sono nuovo del forum...non credo che a nessuno interessi il mio nome proprio, quindi mi presento con il mio nick: Absolute Beginner. Dal nick avete già capito che sono ignorante come una bestia, quindi vi chiedo di perdonare eventuali strafalcioni.
Ho riflettuto molto sulla natura della blockchain e vorrei chiedere a voi esperti, tornando all'argomento principale del thread: è possibile cancellare dalla blockchain le informazioni ormai obsolete?
La blockchain serve a tenere traccia delle transazioni, giusto? Ma a cosa serve sapere che un determinato bitcoin è appartenuto al signor Mario Rossi se nel frattempo sono passati anni, il bitcoin in questione ha cambiato decine di proprietari e Mario Rossi possiede un saldo pari a zero su quello specifico indirizzo?
La mia logica mi spinge a credere che basterebbe un programmino, distribuito a tutti i nodi, che con una precisa cadenza (ad esempio annuale), analizzi tutti i blocchi più vecchi di una certa data eliminando tutti i "rami secchi", transazioni antiche che hanno lasciato indirizzi con saldo pari a zero, magari seppellite da decine di transazioni successive. Automaticamente tutte le blockchain del mondo verrebbero alleggerite restando comunque tutte perfettamente uguali, conservando solo le informazioni attualmente utili.
Dove sbaglio?
La possibilità di tagliare i blocchi molto vecchi della blockchain c'è già dalla versione 0.11.0 di Bitcoin Core (opzione pruning).
Il problema di base però è: quando un nuovo peer si collega alla rete, come fa a conoscere la distribuzione attuale dei bitcoin? (ovvero: quali sono gli indirizzi a saldo diverso da zero? dove sono allocati i bitcoin prodotti finora? esplicitamente questo non c'è scritto da nessuna parte!)
Il concetto che sta alla base di questo sistema è che ciascuno deve essere messo nella condizione di poter verificare di persona la validità dei pagamenti che riceve, e se io voglio verificare la validità di un pagamento che ricevo adesso devo sapere se l'indirizzo che mi ha inviato i btc possedeva effettivamente quei btc al momento dell'invio.
Per fare questa verifica in modo sicuro ho un solo modo: almeno una volta nella vita devo scaricare tutta la blockchain, ricostruendo sin dal primo blocco la storia dei passaggi di proprietà di tutti i btc. In tal modo potrò ricostruire la distribuzione attuale dei saldi degli indirizzi (ho un po' semplificato); se invece non faccio la ricostruzione personalmente dovrò fidarmi della ricostruzione fatta da qualcun altro (e questo è un male, soprattutto se lo fanno tantissime persone).
Con l'opzione pruning, man mano che arrivano nuovi blocchi posso eliminare dal mio hard disk i blocchi più vecchi per risparmiare spazio; questo è possibile dal momento che mi tengo (oltre ai blocchi delle transazioni) sempre un database, che mi sono costruito e aggiorno dinamicamente, in cui registro la distribuzione dei saldi diversi da 0 degli indirizzi (tecnicamente si chiama UTXO, insieme degli output non spesi delle transazioni).
Quindi per rispondere alla tua domanda, è possibile eliminare i blocchi molto vecchi ma:
1) solo dopo aver almeno una volta scaricato tutti i blocchi, a partire dal numero 1, in modo da poter conoscere con sicurezza dove stanno tutti i saldi diversi da 0
2) se tutti attivassero l'opzione pruning, quando un nuovo nodo entra nella rete (oppure a un vecchio nodo si rompe l'hard disk) come fa questo a controllare tutta la blockchain? Da chi scarica i blocchi più vecchi se tutti li hanno eliminati dal loro pc? Ricorda che tutti devono essere messi nella condizione di poter verificare in maniera autonoma la validità dei pagamenti ricostruendo la distribuzione dei saldi (per conoscere la quale bisogna studiare tutta la storia passata delle transazioni).
Il sistema Bitcoin è un sistema "trustless", ovvero non c'è bisogno di fiducia (è affidabile proprio perchè ciascuno può non fidarsi degli altri e fare da sè il lavoro di controllo e verifica delle transazioni e dei blocchi). Quindi non è possibile tagliare i blocchi più vecchi in modo definitivo, sarebbe come dire che tutti quelli che non hanno avuto l'opportunità di controllare la blockchain in passato non ce l'avranno mai più e dovranno fidarsi almeno un po' di chi invece ha potuto effettuare questo controllo in prima persona.
In pratica ha detto quello che ho detto io ma in 2 punti anzichè 1.
Cordiali saluti.