Transazione Bitcoin

< Pagina precedente Pagina successiva >

 

 

Per semplicità, assumiamo che in commercio esistano già dei bitcoin. Successivamente vedremo come i bitcoin vengono creati.

 

 

 

1.1 Una comune transazione dal punto di vista operativo

transazione operativa

Da Alice (pagante) a Bob (ricevente):

 

1) Bob comanda alla sua applicazione su PC o smartphone di creare un indirizzo. Il software restituisce una sequenza alfanumerica da 26 a 35 caratteri. Questo è un esempio: 12gXGyXWkvyDAjVKZHyGGstVYyXJ6ZjgqV

2) Bob copia l'indirizzo e lo mostra al mittente tramite qualunque mezzo: via mail, messaggio, QR code, pubblicato su un sito internet, scritto su carta, dettato al telefono...

3) Alice inserisce nel suo software l'indirizzo di Bob e la quantità di Bitcoin da inviare, inoltre specifica l'ammontare della commissione da pagare al minatore (detto "miner") per convalidare la transazione. Ad oggi i più comuni software stabiliscono automaticamente una commisione fissa a 0,00001 bitcoin fino a 1 kilobyte (in genere nessuna transazione pesa più di un kilobyte).

4) Bob vede immediatamente sul suo software la transazione avvenuta, ma prima di considerare il pagamento effettuato attende che la transazione sia inserita nella blockchain.

5) In un massimo di 10 minuti circa la transazione viene inserita in un blocco della blockchain da parte del miner, che ha convenienza a inserirla perché in questo modo ottiene la commissione pagata da Alice.

6) Bob può sentirsi sicuro che la transazione è confermata con l’aumentare di blocchi che vengono aggiunti alla blockchain conseguentemente a quello che contiene la transazione. Tutti coloro che possiedono un PC e una connessione internet possono scaricare l'intera blockchain sul proprio dispositivo o visualizzarla online (per esempio su blockexplorer) e verificare le transazioni che sono state inserite nei blocchi. I più comuni software comunicano automaticamente al proprietario quando la transazione è confermata, in base ai loro standard. Per esempio la piattaforma Coinbase attende che ci siano almeno 6 nuovi blocchi (1 ora circa).

 

 

1.2 La transazione dal punto di vista tecnico

 

Gli step di una transazione (#1) di bitcoin da un pagante a un ricevente sono i seguenti:

 

1.Creazione di una chiave privata (una sequenza casuale di cifre) da parte del ricevente

2.La chiave privata è convertita in chiave pubblica attraverso l’algoritmo della curva ellittica

3.La chiave pubblica viene convertita in un hash

4.L’hash della chiave pubblica viene ridotto a indirizzo

 -  primi 4 passaggi avvengono istantaneamente - 

5.L’indirizzo viene mostrato al pagante

6.Il pagante decodifica l’indirizzo in hash della chiave pubblica

7.Il pagante crea la transazione, specificando l’output e il “signature script” che include l’hash della chiave pubblica del ricevente

8.Il pagante conferma la transazione inviando tutti i bitcoin presenti nell’input in uno o più output

9.La transazione viene trasmessa online dal pagante a tutta la rete

10.I minatori inseriscono nella blockchain la transazione, che viene riconosciuta così dalla comunità

11.Il ricevente firma il signature script con la propria chiave privata e pubblica, dimostrando così di essere proprietario dell’output della transazione. Ora può spendere quell’output come input per una successiva transazione (#2).

 - il passaggio 11 avviene solo durante la transazione #2 - 

 

 

Azioni del ricevente:

transazione tecnica p1

Vediamo nel dettaglio questi punti, identificando Bob come il ricevente, Alice il pagante e una transazione con un solo input.

 

1) Bob genera in modo del tutto casuale una chiave privata, che viene salvata sul suo computer.

2) La chiave privata viene convertita in una chiave pubblica tramite un procedimento matematico. Comunemente è il software di Bob a generare automaticamente la chiavi quando Bob chiede all'applicazione di creare un indirizzo da comunicare al mittente. In realtà Bob potrebbe utilizzare una chiave privata facilmente ricordabile, come “sum qui sum”, e ricavare Public key e indirizzo da questa. Il procedimento matematico si basa su un algoritmo chiamato “Elliptic Curve Digital Signature Algorithm” che utilizza la curva ellittica y2 = x3 + 7 (vedi qui).

È teoricamente possibile ma statisticamente impraticabile scoprire la chiave privata partendo da quella pubblica: poiché il procedimento matematico applicato è unidirezionale, il processo inverso per indovinare la chiave privata richiederebbe una quantità di tentativi e una potenza di calcolo talmente enorme da essere al di là di ogni possibilità. Se ci fosse un supercomputer in grado di indovinare la chiave privata, allora probabilmente qualsiasi password nel mondo sarebbe vulnerabile e i bitcoin  potrebbero non essere la prima fonte di preoccupazione.
-> Vedi i dettagli in una finestra separata

3) La chiave pubblica viene a sua volta crittografata e accorciata tramite un hash. Possiamo chiamare la nuova chiave pubblica Public Key Hash. La chiave pubblica originaria invece è detta Full Public Key.

4) L'hash della chiave pubblica viene convertito in una riga di massimo 35 caratteri (per comodità pratica), che costituisce l'indirizzo del portafoglio di Bob. Per esempio: 12gXGyXWkvyDAjVKZHyGGstVYyXJ6ZjgqV.

5) Bob spedisce l'indirizzo ad Alice.

 

azioni pagante e miner

6) Il software di Alice decodifica immediatamente l'indirizzo in una normale Public Key Hash

7) Alice crea la transazione. Si può pensare la transazione come un codice che contiene diverse informazioni, ciascuna rappresentabile come una stringa composta da molti caratteri:

-l’input: uno o più output di una transazione precedente fatta nei confronti di Alice, da cui ella attinge i bitcoin che «spedisce» nel nuovo output

-l'output: la quantità di bitcoin spediti. Possono esserci più output per ogni transazione, ciascuno identificato con un ID specifico (il «vout»)

-l'istruzione per la firma (la "signature script"), ovvero le le istruzioni che Bob dovrà fornire per convalidare la transazione, dimostrando di essere il possessore del nuovo output. È proprio per la creazione dello script che il software di Alice ha bisogno del Public Key Hash fornito da Bob. Le informazioni necessarie per validare la firma sono due, entrambe già in possesso di Bob: la full Public Key e la Private Key, che dovranno combaciare col Public Key Hash specificato da Alice nello script. In certi casi le parti della transazione si possono accordare per modificare le richieste dello script: questi metodi sono utilizzati specialmente come garanzia negli acquisti online -> Vedi i dettagli in una finestra separata

-la versione di software utilizzata nella transazione. Questa informazione permette di fare modifiche al protocollo senza invalidare le passate transazioni, poiché queste ultime risulteranno registrate nella blockchain come valide pur non rispettando le nuove regole del protocollo

-la sequence version e il locktime, di importanza marginale ai fini della comprensione del processo e perciò non trattati qui (la sequence version è il retaggio di una versione del protocollo Bitcoin vecchia e non ha più alcuna funzione)

Queste informazioni vengono processate insieme nella creazione di un unico hash chiamato txid (transaction identifier)

step 2 trans tecnica

8) Tutti i bitcoin che Alice ha a disposizione su un particolare input vengono "spediti" nella transazione. Infatti nella transazione è coinvolta sempre l'intera quantità di bitcoin presenti nell’input anche se Bob ne ha richiesti molti meno. Se Alice dispone di un input di 100 bitcoin e ne trasferisce 20 a Bob, l’input è sempre trasferito nella sua interezza di 100 bitcoin. In questo caso avrà due output diversi, uno di 80 bitcoin (al lordo della commissione per il miner) che tornano al portafoglio di Alice (il change output), l'altro di 20 bitcoin che vanno all'indirizzo di Bob. L’unico caso di transazione che abbia un solo input e un solo output è quello in cui l’input corrisponde esattamente all’ammontare richiesto da chi riceve i bitcoin. Spesso le transazioni hanno più output, e quindi i bitcoin trasferiti vanno ad indirizzi con diverse chiavi pubbliche e private.

Il software che utilizziamo per conservare, ricevere o spedire bitcoin (il nostro portafoglio, o wallet) presenta sempre un “conto” con un certo numero di bitcoin. In realtà tale conto esiste solo implicitamente, non c’è uno spazio in cui quei bitcoin sono depositati. Il portafoglio ci comunica un certo valore semplicemente ricercando all’interno della blockchain il numero di ouput non spesi (i bitcoin che sono stati ceduti in una passata transazione) che siamo in grado di spendere tramite le nostre chiavi private, quindi utilizzandoli come input per nuove transazioni.

9) Alice trasmette via internet al software di tutti gli altri nodi tutte le informazioni relative alla transazione. I nodi sono rappresentati da tutti coloro che hanno il software Bitcoin Core sui propri pc/dispositivi o numerosi altri software che permettono di "collegarsi" al network -> Vedi i dettagli in una finestra separata

transazione al miner

10) I minatori inseriscono le transazioni ancora non confermate nella blockchain

Per inserire le transazioni all’interno della blockchain il miner deve creare un nuovo blocco, processo che richiede una quantità di calcolo molto elevata e dunque una spesa in energia elettrica e strumenti. Un miner ha interesse a inserire quante più transazioni nel blocco che vuole creare poiché guadagnerà tutte le commissioni pagate su ciascuna transazione. Se una transazione non include alcuna commissione, il miner non ha alcun interesse economico nell’inserirla nel blocco.

Per inserire le transazioni nel blocco, i minatori partono dagli id delle transazioni (txid), ciascuno dei quali rappresenta l’hash di tutte le informazioni inerenti una singola transazione.

I txid sono accoppiati due a due, creando un hash per ogni coppia di transazioni. Ogni hash viene poi accoppiato con un altro hash, creando un hash figlio dei due hash precedenti, e così via finché non si arriva a un unico hash. In caso di numeri dispari un hash viene processato con una sua copia identica. Questo procedimento può essere rappresentato come un albero – il cosiddetto Merkle tree – dove le foglie sono le transazioni txid, i rami (biforcuti) gli hash intermedi e la radice l’hash finale, prodotto di tutti gli altri hash: la Merkle root. L’hash finale è come l’ultimo di una stirpe e porta con sé il “DNA” di tutti gli hash precedenti. Grazie alla struttura del Merkle tree, non è necessario conoscere tutte le transazioni incluse in un blocco per verificare che una singola transazione ne faccia parte, è invece sufficiente seguire un particolare ramo che collega una foglia (una transazione) alla merkle root -> Vedi i dettagli in una finestra separata

merkle tree

ultima azione ricevente

11) Bob ora vuole spendere i suoi nuovi bitcoin in una nuova transazione, il destinatario è Charlie. Bob segue la stessa procedura che ha seguito Alice, creando una transazione specificando output, signature script (per cui gli serve il public key hash di Charlie), timestamp e versione del software.

Bob però deve dimostrare di essere il possessore dei bitcoin che invia a Charlie, ovvero i bitcoin presenti nell’input della transazione. Tale input è anche l’output della transazione fra Alice e Bob. Ricordiamo che nella sua transazione Alice ha inserito una signature script con il Public Key Hash di Bob. Quest’ultimo per dimostrare di possedere l’ouput di quella transazione deve porre la sua firma (signature). Bob inserisce quindi la sua Full Public Key, verificando che corrisponde al Public Key Hash dato in precedenza ad Alice, e la sua Private Key, che rappresenta la conferma che Bob solo è la persona che ha originato inizialmente quella Public Key. Infatti seppur sia teoricamente possibile, è per motivi statistici «infattibile» scoprire la Private Key partendo dalla Public Key. Il procedimento di firma è del tutto automatizzato dal software Bitcoin.

Nota: lo stesso procedimento di firma del punto 11 è stato fatto in precedenza da Alice con la propria Full Public Key e Private Key per confermare la sua proprietà sui bitcoin da spedire a Bob. Il procedimento è concatenato, Alice infatti ha a sua volta ricevuto da un’altra persona i bitcoin, che figuravano come output di una precedente transazione finché Alice non ha posto la sua firma, potendo quindi utilizzare quell’output come input nella transazione per Bob. Nel corso della spiegazione questo passaggio era stato però omesso al punto 7 per semplificare l’esposizione.

 

 

Clicca su "Pagina successiva" per vedere la Creazione di Bitcoin, oppure torna all'indice

 

 

< Pagina precedente Pagina successiva >