Ciao ramcrack, cerco di rispondere ai tuoi dubbi entrando nel dettaglio
ramcrack ha scritto:
- chi ha iniziato tutto questo da zero.
Il bitcoin (come prima valuta) non si sa bene da chi è stato creato.
Lo pseudonimo che ha o hanno (potrebbe anche essere un gruppo) usato è Satoshi Nakamoto.
ramcrack ha scritto:
- e come sempre perche' per ricevere un bitcoin, oppure una porzione di esso, bisogna risolvere dei problemi matematici sempre piu' complessi. Qual'e' il vero significato di tutto cio.
La risposta veloce è: per dimostrare il proprio contributo alla rete (e riceverne un compenso proporzionale al lavoro effettuato)
Ora vediamo come e perchè in maniera approfondita.
Prima di tutto è importante che tu capisca cosa sia una blockchain.
La blockchain è una struttura di dato astratta.
Le strutture di dato astratte si formano partendo da strutture di dato interne con l'aggiunta di determinate regole.
Una struttura di dato interna potrebbe essere una struttura sequenziale, quello che informatica è il classico vettore, cioè una serie di elementi dello stesso tipo (numero, parola, carattere, ecc..), che vengono memorizzati per l'appunto sequenzialmente.
Una struttura astratta molto semplice che si può implementare con una struttura sequenziale è per esempio una pila. Cioè un semplicissimo vettore però i cui elementi vengono sempre inseriti e tolti dalla coda della pila, seguendo quindi una regola di precedenza FILO (First In Last Out).
Per ritornare al discorso principale, come dicevo, la blockchain non è altro che una struttura di dato astratta, che si crea partendo dalla struttura interna definita struttura concatenata. La struttura concatenata differisce dalla sequenziale, perchè gli elementi non vengono inseriti nella memoria sequenzialmente. Ogni "cella" di memoria, che immagazzina un valore, ha anche l'indirizzo (della memoria) della prossima cella. Questo offre pro e contro. Il pro che più ci interessa per la blockchain è che puoi continuare ad aggiungere elementi alla struttura concatenata, facendo in modo che ogni elemento sia interdipendente dal precedente e dal successivo.
(Ci siamo quasi xD)
Capita la struttura della blockchain, capiamo effettivamente cos'è.
La blockchain è una catena di blocchi. Ogni blocco contiene principalmente queste informazioni:
Blocco {
index; //numero blocco
previousHash; //codice del precedente blocco (grazie al quale puoi ripercorrere in maniera univoca dal corrente blocco fino al primo)
timeStamp; //data in cui il blocco è stato creato
payload; //transazioni
hash; //codice identificativo del blocco
nonce; //capirai ben presto a cosa serve, sappi che è semplicemente un numero intero.
}
Prima di andare avanti solo 2 righi circa gli algoritmi di criptaggio.
Ne esistono di vari generi quello che interessa a noi e fare una breve distinzione tra quelli che sono invertibili e non. Cioè semplicemente se esiste un algoritmo inverso che dato il codice criptato può ritornare all'originale. Per quanto riguarda il Bitcoin l'algoritmo di criptaggio è lo SHA-256 che rientra in quelli non reversibili.
L'hash di un blocco è un seriale che identifica il blocco in maniera univoca ed è il risultato dell'applicazione dell'algoritmo SHA-256 su una stringa composta da tutte le informazioni contenute nel blocco. Modificare anche solo una virgola in una qualsiasi informazione del blocco corrisponde ad un hash completamente differente. Provare per credere:
Ne consegue che se un blocco è stato creato e ne viene calcolato l'hash, quell'hash code identificherà per sempre quelle informazioni. Esse saranno immutabili. In particolare è immutabile che il previousHash (il codice del blocco precedente) sia proprio quello del blocco a lui precedente e che chiaramente tutte le transazioni al suo interno non sono reversibili perchè ormai il blocco fa parte della blockchain.
(ecco ho fatto)
Per rispondere alla tua domanda iniziale quindi, una volta capita tutta la struttura, quando fai mining, il tuo computer prova e riprova a calcolare l'hash code del prossimo blocco (allo stato corrente in cui esso si trova), provando iterativamente ad usare nonce =0...=1...=2...=3 ecc.. FINCHE' l'hash code non rispetta una determinata regola che viene definita nel gergo difficoltà. In termini semplicistici potrebbe essere il numero minimo di 0 (zeri) che deve avere all'inizio l'hash code prima di qualunque altra cifra/carattere.
Es:
Considerando la regola della difficoltà sopracitata: Va bene qualunque hash code che abbia 5 o più zeri all'inizio.
questo hash code rispetterebbe la regola:
00000BCDC41A3AA8282BB04FE0F20DD18DF6B6BFF4042470238F5837BF6FEB4A
Arrivo anche con la seconda tranche di domande, per il momento leggi questo xd