Pages:
Author

Topic: Scalabilità bitcoin e "troncatura della blockchain" domanda per esperti! (Read 7145 times)

legendary
Activity: 1260
Merit: 1003

Capito! SVP consente quindi di "snellire" la blockchain perdendo la completezza (campo commento) ma mantenendo l'integrità.
Grazie BitNow

Questo è fondamentale per capire la tecnologia Blockchain che sta alla base di Bitcoin.

Se voglio trasferire valore: una Blockchain snella è più che sufficiente.
Se voglio un libro mastro (utilizzare la Blockchain come libro mastro dove registrare informazioni utili: identità, indirizzi, energia, materia, altro...): una Blockchain completa è quello che mi serve.

Quando si parla di Bitcoin si da per scontato che il valore delle transazioni è ciò che ci interessa: questo è limitativo.

Bisogna separare cosa trasferire sulla Blockchain dalla tecnologia Blockchain stessa: la Blockchain è una tecnologia per trasportare cose (valore, informazioni, energia, materia, altro...).

Focalizzarsi sulla Blockchain come tecnologia per trasferire valore è limitativo.

Ethereum fa già questo.

Per qualsiasi dubbio o informazione non si faccia problemi a chiedere.


Cordiali saluti.
newbie
Activity: 13
Merit: 0


Non l'integrità.

Si può concludere che non è possibile in alcun modo "snellire" la blockchain senza intaccare la completezza delle informazioni sulla Blockchain.

L'integrità è riferita ad una cosa (un'informazione, un valore, una materia, altro...), Bitcoin è una tecnologia che permette di trasferire valore.

"Snellendo" la Blockchain (il DB distribuito che sta alla base della tecnologia Bitcoin) è ancora possibile transferire valore, di conseguenza l'integrità è intatta, tuttavia non tutte le informazioni (tipo il campo commento) vengono mantenute se si "snellisce" la Blockchain.

Da questo se ne evince che, in caso di "snellimento" della Blockchain la completezza delle informazioni viene meno mentre l'integrità resta.

Per qualsiasi dubbio o informazione non si faccia problemi a chiedere.


Cordiali saluti.

Capito! SVP consente quindi di "snellire" la blockchain perdendo la completezza (campo commento) ma mantenendo l'integrità.
Grazie BitNow
newbie
Activity: 13
Merit: 0

Comunque io continuo a non capire il problema della dimensione della blockchain

1) adesso c'è un'opzione (pruning) per cui chi vuole può buttare via quasi tutti i blocchi

2) l'unico problema è il sync iniziale, ma appunto si fa una volta sola

3) i problemi più grossi oggi sono legati alla potenza computazionale richiesta per verificare le transazioni, sono legati alla quantità di banda necessaria per scambiarsi i blocchi e le transazioni, sono legati allo spazio occupato in RAM dal database dell'UTXO e dalla mempool, tutti questi fattori incidono in maniera davvero determinante sulle prestazioni di un full node.

Invece 60 GB per conservare i dati cosa saranno mai oggi? Con poche decine di euro ti prendi un hard disk esterno di 2 TB e sei a posto per anni (e inoltre non è più obbligatorio ripeto mantenere copia di tutta la chain per far girare un full node!)

Sicuramente i problemi di cui parli tu sono prioritari.

Il problema della dimensione della blockchain lo vedo in prospettiva futura. Se Bitcoin diventasse un moneta di massa e non di nicchia com'è adesso, le dimensioni dei blocchi dovranno inevitabilmente aumentare, e la  blockchain "ingrasserebbe" ad un ritmo vertiginoso.
A quel punto sempre meno utenti avranno l'ardire di scaricarla tutta, impedendo di fatto la sua diffusione.
legendary
Activity: 1260
Merit: 1003


Spero sia chiaro: dipende dall'obbiettivo che si vuole raggiungere (completezza delle informazioni o meno)




Grazie BitNow, non conoscevo l'esistenza del protocollo SVP.
In ogni caso mi pare si possa concludere che non è possibile in alcun modo "snellire" la blockchain senza intaccare profondamente l'integrità del sistema-bitcoin.



Non l'integrità.

Si può concludere che non è possibile in alcun modo "snellire" la blockchain senza intaccare la completezza delle informazioni sulla Blockchain.

L'integrità è riferita ad una cosa (un'informazione, un valore, una materia, altro...), Bitcoin è una tecnologia che permette di trasferire valore.

"Snellendo" la Blockchain (il DB distribuito che sta alla base della tecnologia Bitcoin) è ancora possibile transferire valore, di conseguenza l'integrità è intatta, tuttavia non tutte le informazioni (tipo il campo commento) vengono mantenute se si "snellisce" la Blockchain.

Da questo se ne evince che, in caso di "snellimento" della Blockchain la completezza delle informazioni viene meno mentre l'integrità resta.

Per qualsiasi dubbio o informazione non si faccia problemi a chiedere.


Cordiali saluti.
newbie
Activity: 13
Merit: 0


La differenza tra un genesis block sintetico e il genesis block della chain attuale è sostanziale.

CUT



Grazie arulbero, sei stato chiarissimo.
newbie
Activity: 13
Merit: 0


Spero sia chiaro: dipende dall'obbiettivo che si vuole raggiungere (completezza delle informazioni o meno)




Grazie BitNow, non conoscevo l'esistenza del protocollo SVP.
In ogni caso mi pare si possa concludere che non è possibile in alcun modo "snellire" la blockchain senza intaccare profondamente l'integrità del sistema-bitcoin.

legendary
Activity: 1948
Merit: 2097
Idea: un eventuale genesis block dovrebbe nascere dalle transazioni contenute nella blockchain fino a quel momento. Ci vorrebbero delle regole per determinare tale blocco calcolando tutte le tarnsazioni, chi non si fida si scarica la catena da zero e lo calcola.
Rimane il problema che le informazioni contenute tipo le colored coin e ethernitywall e simili sarebbero perse da chi parte dal genesis block a meno che non decida di scaricare l'intera chain.

Comunque io continuo a non capire il problema della dimensione della blockchain

1) adesso c'è un'opzione (pruning) per cui chi vuole può buttare via quasi tutti i blocchi

2) l'unico problema è il sync iniziale, ma appunto si fa una volta sola

3) i problemi più grossi oggi sono legati alla potenza computazionale richiesta per verificare le transazioni, sono legati alla quantità di banda necessaria per scambiarsi i blocchi e le transazioni, sono legati allo spazio occupato in RAM dal database dell'UTXO e dalla mempool, tutti questi fattori incidono in maniera davvero determinante sulle prestazioni di un full node.

Invece 60 GB per conservare i dati cosa saranno mai oggi? Con poche decine di euro ti prendi un hard disk esterno di 2 TB e sei a posto per anni (e inoltre non è più obbligatorio ripeto mantenere copia di tutta la chain per far girare un full node!)
legendary
Activity: 2506
Merit: 1120
Idea: un eventuale genesis block dovrebbe nascere dalle transazioni contenute nella blockchain fino a quel momento. Ci vorrebbero delle regole per determinare tale blocco calcolando tutte le tarnsazioni, chi non si fida si scarica la catena da zero e lo calcola.
Rimane il problema che le informazioni contenute tipo le colored coin e ethernitywall e simili sarebbero perse da chi parte dal genesis block a meno che non decida di scaricare l'intera chain.
legendary
Activity: 1948
Merit: 2097
[...] un genesis block sarebbe una soluzione assai più sbrigativa, per chi volesse entrare e provare a tenere un full-node. Scarica solo quello che gli serve e si fida del genesis block.

Del resto, se esistesse un genesis block accettato da tutti coloro che in quel momento si occupano di conservare la blockchain, perché non dovrei fidarmi? Se adesso un nuovo utente volesse entrare e scaricare la blockchain, non si deve già fidare della "bontà " della blockchain stessa?

La risposta alla tua domanda è no, un nuovo utente che adesso deve entrare nella rete non si limita a scaricare la blockchain, quindi non si fida proprio di nessuno!

Il nuovo utente che utilizza Bitcoin Core deve, prima di poter utilizzare i dati della "propria" blockchain per effettuare transazioni o per conoscere semplicemente il bilancio del proprio wallet, compiere le seguenti due operazioni su questi dati:

1) controllare che la propria blockchain sia corretta, cioè che dalla prima transazione del primo blocco all'ultima transazione dell'ultimo blocco siano state rispettate tutte le regole condivise del protocollo bitcoin

2) assicurarsi che la propria blockchain sia tra quelle presenti in rete quella che metta insieme i blocchi che nel loro insieme hanno richiesto più lavoro da parte dei miner per validarli; se il nuovo utente scopre che ci sono altri nodi nella rete che hanno una versione piú "costosa" della blockchain, allora è capitato su una diramazione non valida, è come se a un certo punto avesse sbagliato snodo nell'assemblare la catena e deve quindi provvedere a tornare indietro, cioè deve sostituire alcuni blocchi (per come è concepita la blockchain, una sua riorganizzazione prevede nella pratica solo il cambio degli ultimi blocchi, questo è il motivo per cui nel caso di grosse transazioni si raccomanda di attendere almeno 6 conferme); per non farla troppo lunga la riorganizzazione della blockchain è dovuta al fatto che in un sistema decentralizzato, se due blocchi vengono minati quasi contemporaneamente, l'ordine con cui vengono minati non è subito noto (ad alcuni nodi arriverà prima un blocco, ad altri l'altro); la blockchain ha proprio lo scopo di fissare un ordine temporale al susseguirsi delle transazioni, e riesce a farlo, nonostante i nodi siano dislocati in punti diversi del pianeta, giocando su una temporanea flessibilità della sua parte finale che viene risolta grazie a un discorso probabilistico.


arulbero paragona un simile genesis block ad un estratto conto, cioè ad uno strumento abitualmente usato da tutti, che dopo un certo lasso di tempo si "dimentica" delle vecchie transazioni. Questo non crea "crisi di fiducia" perché le operazioni che hanno portato a quel saldo sono state conosciute e verificate da tutti!

Un genesis block "modificato arbitrariamente" comporterebbe che tutti i full-node fosse d'accordo tra loro per modificare i saldi: ma ciò sarebbe impossibile!
E se fosse possibile, perché non potrebbero già farlo con la blockchain stessa?

La differenza tra un genesis block sintetico e il genesis block della chain attuale è sostanziale.

Quando è stato creato il genesis block 7 anni fa, non c'erano bitcoin. Quel genesis block rappresenta semplicemente un punto da cui partire; sottolineo "punto", nel senso che non aveva "dimensione", cioè in pratica non c'era nulla su cui si poteva imbrogliare. Quel piccolo punto è inserito nel codice di Bitcoin Core e puoi considerarlo a tutti gli effetti come facente parte delle regole del bitcoin.

Creando un nuovo genesis block adesso (a parte che bisognerebbe cambiare alcune regole del protocollo) si otterrebbe al posto di un semplice punto una complessa figura che descrive la distribuzione attuale di 16 milioni di Bitcoin (su 21 milioni).  Non è proprio la stessa cosa.

Facciamo un paragone con la matematica.
In geometria per esempio si parte da un minimo numero di assiomi (regole condivise dalla comunità dei matematici) e poi da lí si costruiscono tutti i teoremi. Se uno cambia anche un solo assioma, si costruisce una geometria diversa (tipo quella non euclidea).

Gli assiomi di Euclide sono come il genesis block di Satoshi (+ le regole del protocollo). Se adesso la comunità dei matematici dicesse: va bene, ormai gli assiomi non ci servono più, nè molte dimostrazioni in cui ormai crediamo, prendiamo solo i risultati dei teoremi più importanti, e partiamo da quelli, decidiamo ad esempio che un certo insieme variegato di teoremi come quello di Pitagora (o anche teorema più evoluti) sono la nostra nuova base di partenza, e facciamo il pruning delle dimostrazioni (che sono il collegamento logico fra assiomi e risultati dei teoremi attuali), mi pare che avremmo perso moltissimo. O no?
legendary
Activity: 1260
Merit: 1003

Certo che, come dice picchio, un genesis block sarebbe una soluzione assai più sbrigativa, per chi volesse entrare e provare a tenere un full-node. Scarica solo quello che gli serve e si fida del genesis block.


Questo è SPV!

Un conto è tenere tutte le informazioni per se (campo commento delle transazioni).

Un  conto è verificare solo le transazioni (campo ammontare delle transazioni).

Se vuoi verificare solo le transazioni (quantità di bitcoin scambiati) fidarsi di altri blocchi va bene: protocollo SPV
Link: https://en.bitcoin.it/wiki/Thin_Client_Security

Se si vogliono tutte le informazion (quantià e campo commento) fidarsi degli altri blocchi non và più bene perchè ci danno solo le quantità (nel protocollo SPV).

Spero sia chiaro: dipende dall'obbiettivo che si vuole raggiungere (completezza delle informazioni o meno)


Non puoi ridurre la dimensione della Blockchain mantenedo la completezza delle informazioni.

Puoi ridurre la dimensione mantenendo inalterata la sicurezza (no double-spending), ma non puoi ridurre la dimensione e mantere la completezza (tutte le informazioni).

Il processo di riduzione della blockchain si chiama SPV (Simplified Protocol Verification - protocollo di semplificazione delle verifiche, BitcoinJ è basata su questo protocollo).
https://en.bitcoin.it/wiki/Thin_Client_Security

Sicurezza della Blockchain e Completezza delle informazioni sono due obbiettivi diversi.



Cordiali saluti.
newbie
Activity: 13
Merit: 0
Ringrazio alrubero per la minuziosa descrizione del pruning, di cui non conoscevo l'esistenza. Mi pare sia già un gran bel passo avanti!

Certo che, come dice picchio, un genesis block sarebbe una soluzione assai più sbrigativa, per chi volesse entrare e provare a tenere un full-node. Scarica solo quello che gli serve e si fida del genesis block.

Del resto, se esistesse un genesis block accettato da tutti coloro che in quel momento si occupano di conservare la blockchain, perché non dovrei fidarmi? Se adesso un nuovo utente volesse entrare e scaricare la blockchain, non si deve già fidare della "bontà " della blockchain stessa?

Un genesis block generato periodicamente da un programma che tutti possono verificare, non perderebbe, a mio avviso, di autorità. E sicuramente, per quanto pesante, sarebbe assai più leggero dei blocchi obosleti che sostituirebbe, essendo per sua natura un saldo e quindi una sintesi.


arulbero paragona un simile genesis block ad un estratto conto, cioè ad uno strumento abitualmente usato da tutti, che dopo un certo lasso di tempo si "dimentica" delle vecchie transazioni. Questo non crea "crisi di fiducia" perché le operazioni che hanno portato a quel saldo sono state conosciute e verificate da tutti!

Un genesis block "modificato arbitrariamente" comporterebbe che tutti i full-node fossero d'accordo tra loro per modificare i saldi: ma ciò sarebbe impossibile!
E se fosse possibile, perché non potrebbero già farlo con la blockchain stessa?

Lo so, sono un gatto attaccato agli zebedei...chiedo scusa! Grin
newbie
Activity: 13
Merit: 0


Un bitcoin è una chiave privata che identifica una transazione: se non ho memoria che quella transazione sia mai avvenuta posso ricreare quella transazione, perchè nessun nodo si ricorda della sua esistenza, di fatto spendendo gli stessi bitcoin 2 volte (da qui la definizione di "double-spend").

Per questo motivo non è possibile troncare la Blockchain.

Per qualsiasi dubbio o informazione non si faccia problemi a chiedere.


Cordiali saluti.


Grazie per la sua risposta.

Secondo lei un genesis-block tipo quello ipotizzato da "picchio", con tutti i saldi aggiornati ad una certa data ecc, esporrebbe la rete bitcoin ad attacchi di doppia spesa?

Buonasera
legendary
Activity: 1948
Merit: 2097
Consideriamo il funzionamento del pruning attuale:

Quote
Wallet: Pruning

With 0.12 it is possible to use wallet functionality in pruned mode. This can reduce the disk usage from currently around 60 GB to around 2 GB.

However, rescans as well as the RPCs importwallet, importaddress, importprivkey are disabled.

To enable block pruning set prune= on the command line or in bitcoin.conf, where N is the number of MiB to allot for raw block & undo data.

A value of 0 disables pruning. The minimal value above 0 is 550. Your wallet is as secure with high values as it is with low ones. Higher values merely ensure that your node will not shut down upon blockchain reorganizations of more than 2 days - which are unlikely to happen in practice. In future releases, a higher value may also help the network as a whole: stored blocks could be served to other nodes.

Una funzionalità che si perde con il pruning è quindi la possibilità di importare delle chiavi private nel nostro wallet.

Osservazione:

in un wallet odierno non compare solo il bilancio (che può - o è già così? Huh - essere ricavato immagino anche direttamente dal database degli UTXO) ma in esso compare anche la storia di tutte le transazioni in entrata e in uscita che hanno interessato i suoi indirizzi. Nel momento in cui si importa una chiave privata, il wallet deve rifare la scansione di tutti i blocchi per ricostruire la storia delle transazioni riguardanti il nuovo indirizzo importato, e chiaramente in caso di pruning questa operazione non è più possibile.

Qualora si operasse un pruning definitivo come quello di cui si sta discutendo in questo thread, perderemmo quindi la storia delle nostre transazioni, almeno di tutte quelle avvenute prima del taglio, pur conservando in maniera corretta il bilancio.
Sarebbe un po' come succede adesso con gli estratti conto, dopo un certo lasso di tempo non è più possibile conoscere lo storico dei movimenti effettuati sul conto, ma almeno siamo sicuri che il bilancio attuale tiene conto di tutte le entrate e le uscite passate, anche quelle ormai dimenticate.
legendary
Activity: 1260
Merit: 1003
Qui c'è un interessante articolo sul segregated witness che è l'argomento che si sta discutendo di più in questo periodo:
https://news.bitcoin.com/segregated-witness-concept-turning-point-bitcoin/

Tradurrei l'articolo sul mio blog ma sono troppo occupato con lo sviluppo al momento.

Il concetto Sicurezza della Blockchain e Completezza delle informazioni sono due obbiettivi diversi è centrale nello Segregated Witness.


Cordiali saluti.
legendary
Activity: 1260
Merit: 1003
Forse si puo' salvare capra e cavoli creando un superblocco che contiene tutte le transazioni con i timestamp al solo fine di avere un punto di partenza, la "vecchia" chani si potrebbe mettere a disposizione per chi vuole controllare in un servizio tipo ipfs che dovrebbe conservare i files ... credo che anche i client faranno meno fatica se possono partire dallo stesso punto per verificare una transazione, poi ogni x blocchi si ricrea il mega blocco e si riparte considerando archiviato il periodo precedente.
Rimane il fatto che non puoi dirottare un treno come BTC in corsa e questo è al tempo stesso la sua forza e la sua debolezza ...

EDIT: mi sa che il superblocco sarebbe grande quanto la chain ...


Ma a questo punto tanto vale lasciare le cose come sono, se uno non vuole sprecare spazio utilizza l'opzione di pruning; con il tempo sai quanti superblocchi e quindi nuovi (e arbitrari) punti di partenza bisognerebbe introdurre; mi sembrano più gli svantaggi che i vantaggi.

Non puoi ridurre la dimensione della Blockchain mantenedo la completezza delle informazioni.

Puoi ridurre la dimensione mantenendo inalterata la sicurezza (no double-spending), ma non puoi ridurre la dimensione e mantere la completezza (tutte le informazioni).

Il processo di riduzione della blockchain si chiama SPV (Simplified Protocol Verification - protocollo di semplificazione delle verifiche, BitcoinJ è basata su questo protocollo).
https://en.bitcoin.it/wiki/Thin_Client_Security

Sicurezza della Blockchain e Completezza delle informazioni sono due obbiettivi diversi.

Per qualsiasi dubbio o informazione non si faccia problemi a chiedere.


Cordiali saluti.

legendary
Activity: 1948
Merit: 2097
Forse si puo' salvare capra e cavoli creando un superblocco che contiene tutte le transazioni con i timestamp al solo fine di avere un punto di partenza, la "vecchia" chani si potrebbe mettere a disposizione per chi vuole controllare in un servizio tipo ipfs che dovrebbe conservare i files ... credo che anche i client faranno meno fatica se possono partire dallo stesso punto per verificare una transazione, poi ogni x blocchi si ricrea il mega blocco e si riparte considerando archiviato il periodo precedente.
Rimane il fatto che non puoi dirottare un treno come BTC in corsa e questo è al tempo stesso la sua forza e la sua debolezza ...

EDIT: mi sa che il superblocco sarebbe grande quanto la chain ...


Ma a questo punto tanto vale lasciare le cose come sono, se uno non vuole sprecare spazio utilizza l'opzione di pruning; con il tempo sai quanti superblocchi e quindi nuovi (e arbitrari) punti di partenza bisognerebbe introdurre; mi sembrano più gli svantaggi che i vantaggi.
legendary
Activity: 1260
Merit: 1003

Non era una gara, ho semplicemente dato una mia risposta a un newbie che chiedeva informazioni (penso sia meglio ricevere 2 risposte che una sola  Wink)

...omissis...


La sua risposta aveva senso: il pruning è qualcosa che snellisce la blockchain lasciandone inalterate le propietà di completezza.

L'utente absolute beginner poteva essere anche lo stesso utente picchio che si fa le domande e si da le risposte da solo per indirizzare la discussione dove meglio ha agibilità.

"La solitudine è una brutta bestia!"

La mia domanda:

Facciamo a gara a chi ce l'ha più grosso?!?


Era d'obbligo.

Continuate la discussione le informazioni gratuite sono sempre utili.

"W il software Open-Source!"


Cordiali saluti.
legendary
Activity: 2506
Merit: 1120
Forse si puo' salvare capra e cavoli creando un superblocco che contiene tutte le transazioni con i timestamp al solo fine di avere un punto di partenza, la "vecchia" chani si potrebbe mettere a disposizione per chi vuole controllare in un servizio tipo ipfs che dovrebbe conservare i files ... credo che anche i client faranno meno fatica se possono partire dallo stesso punto per verificare una transazione, poi ogni x blocchi si ricrea il mega blocco e si riparte considerando archiviato il periodo precedente.
Rimane il fatto che non puoi dirottare un treno come BTC in corsa e questo è al tempo stesso la sua forza e la sua debolezza ...

EDIT: mi sa che il superblocco sarebbe grande quanto la chain ...
legendary
Activity: 1948
Merit: 2097
In pratica ha detto quello che ho detto io ma in 2 punti anzichè 1.


Se tronco la Blockchain di Bitcoin posso spendere i bitcoin che non sono più visibili.

Questa operazione si chiama "double-spend".
https://bitcoin.org/en/glossary/double-spend

...omissis...

Per essere una moneta bitcoin ha bisogno di non essere passibile di double spend.


Facciamo a gara a chi ce l'ha più grosso?!?

Cordiali saluti.

Non era una gara, ho semplicemente dato una mia risposta a un newbie che chiedeva informazioni (penso sia meglio ricevere 2 risposte che una sola  Wink)

Nella mia risposta non ho parlato di double spending. Io non penso che la troncatura della blockchain possa portare alla double spending (che di fatto è possibile sempre solo in casi particolari e su tempi brevissimi, di solito le double spending sono a 0 conferme, è impossibile ingannare la rete costruendo un ramo alternativo della chain a meno che non si abbia il 51% di capacità computazionale).

Altra considerazione, è possibile sicuramente operare un taglio "sensato" della chain; la domanda del nuovo utente sul senso di mantenere informazioni vecchie e obsolete era dal mio punto di vista molto ben posta, e in fondo aveva quasi ragione, almeno dal mio punto di vista: se si raccogliessero tutte le informazioni aggiornate al blocco 100000 per esempio (incluso il database degli UTXO) e si troncasse lì la chain, partendo da un unico nuovo grande genesis block come suggeriva l'utente picchio qualche post fa, non sarebbe affatto possibile la double spending; di fatto ci troveremmo all'incirca nella stessa situazione di adesso; questo però non si fa perchè bisognerebbe cambiare le regole, e abbiamo visto anche di recente com'è difficile introdurre delle modifiche in corsa in un meccanismo delicato che ormai è avviato (e meno si tocca meglio è).

Ovvio che se invece si operasse un taglio della chain senza contromisura alcuna, allora sorgerebbero molti problemi, ma non certo di double spending, al contrario molti bitcoin semplicemente sparirebbero e non potrebbero essere più spesi dai loro proprietari (non puoi spendere dei bitcoin - o meglio degli UTXO - di cui la rete ha perso traccia).

Cos'è che non va allora in generale nel taglio della chain?

Secondo me, e ripeto la mia risposta, in ogni tipologia di pruning definitivo (anche quello "sensato" temperato mediante l'introduzione ad esempio di un nuovo grande blocco di partenza che facesse la sintesi della storia passata), coloro che entreranno nel mondo bitcoin dopo il taglio dovrebbero dare per scontato una serie di informazioni, fidandosi di altri che hanno avuto invece la possibilità di verificare queste informazioni in prima persona. Si dovrebbero confrontare nel migliore dei casi solo con una sintesi, non avrebbero più la possibilità di verificare che quel nuovo (e per certi aspetti arbitrario) punto di partenza sia stato correttamente impostato secondo le regole di base del protocollo (e non mi pare poco). Quindi invece di avere un unico solidissimo genesis block su cui si fonda tutto l'impianto, ne avremmo al suo posto uno nuovo un po' più debole; dopo x blocchi probabilmente si provvederebbe a rimpiazzare un'altra volta il nuovo punto di partenza con uno più recente (la sintesi della sintesi), creando in questo modo una successione di punti di partenza sempre più deboli, dove il senso della storia originale rischia di andare perduto e con esso la fondatezza e l'autorevolezza delle certificazioni operate dalla blockchain (un notaio che certifica in base al sentito dire e non controlla in prima persona non fornisce una grande garanzia).

Anche adesso è possibile utilizzare un full node con pruning attivato, ma non si tratta di un pruning definitivo, un conto è scaricare e controllare tutta la blockchain e poi eliminarne una parte dal proprio hard disk (sapendo che in caso di necessità sarà sempre possibile riscaricarla dal primo blocco), un altro è non averla mai potuta scaricare e verificare.
legendary
Activity: 1260
Merit: 1003
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.


Se tronco la Blockchain di Bitcoin posso spendere i bitcoin che non sono più visibili.

Questa operazione si chiama "double-spend".
https://bitcoin.org/en/glossary/double-spend

...omissis...

Per essere una moneta bitcoin ha bisogno di non essere passibile di double spend.


Facciamo a gara a chi ce l'ha più grosso?!?


Cordiali saluti.
Pages:
Jump to: