Transazione di Bitcoin
Una transazione è una serie di dati certificati attraverso una firma. E’ inviata alla rete Bitcoin e costituisce i blocchi. Solitamente contiene riferimenti a transazioni precedenti e associa un certo numero di bitcoin ad una o più chiavi pubbliche (Indirizzo Bitcoin). La transazione non è criptata perché nessun elemento risulta criptato all’interno del sistema Bitcoin. Un browser basato sulla blockchain è il luogo dove tutte le transazioni vengono riunite sotto forma di blockchain. E’ così possibile rintracciarle e verificarle. E’ necessario a stabilire i parametri tecnici di una transazione così come a verificare i dettagli dei pagamenti.
Schema generale delle transazioni in Bicoin
Campo | Descrizione | Dimensione |
---|---|---|
Numero Versione | Currently 1 | 4 bytes |
In-Counter | Intero positivo VI = Varlnt | 1-9 bytes |
Lista degli Input | Il primo input di questa transazione è anche chiamato coinbase | <In-counter> many inputs |
Out-counter | Positive integer VI = Varlnt | 1-9 bytes |
Lista degli Output | Il primo output di questa prima transazione usa i Bitcoins trovati per il blocco | <out-counter> many outputs |
Lock time | Se non uguale a 0 e i numeri in sequenza sono inferiori a OxFFFFFFFF: blocco altezza o timestamp (per le transazioni finali) | 4 bytes |
Esempio di una transazione in Bitcoin con input e output
Dati
Interpretazione
L’input in questa transazione importa 50BTC dall’output #0 nelle transazioni f5d8…, poi l’output invia 50 BTC ad un indirizzo Bitcoin (qui espresso sotto forma di sistema esadecimale – 4043…). Quando il ricevente vuole spendere quei soldi, farà riferimento all’output #0 di questa transazione per l’input della propria transazione.
Input
L’input costituisce un riferimento all’output di un’altra transazione. Una transazione può spesso avere diversi input. I valori di questi riferimenti vengono sommati e il valore totale dei bitcoin può essere utilizzato per l’output della transazione attuale. Il tx precedente si riferisce all’hash di una precedente transazione. L’indice rappresenta un output preciso di questa transazione. ScriptSig è la prima metà dello script (vedere in seguito per ulteriori dettagli al riguardo).
Lo script si compone di due elementi: la firma e la chiave pubblica. La chiave pubblica appartiene all’utente che specifica gli output della transazione e conferma che chi crea la transazione ha il diritto di disporre della somma ottenuta dagli output. Un altro elemento è rappresentato dall’EDCSA (firma di una versione semplificata della transazione). In aggiunta alla chiave pubblica, questa firma conferma che la transazione è stata creata dal vero proprietario di questo indirizzo Bitcoin.
Output
L’output contiene istruzioni sull’invio di Bitcoin. Il valore è espresso in satoshi (1 BTC= 100000000 satoshi), e può essere utilizzato nella transazione quando la transazione in corso costituisce l’input. ScriptPubKey è la seconda metà dello script (verrà elaborato in un secondo momento). E’ possibile che ci siano più output e tutti avranno lo stesso importo inviato dagli input. Ciascun output della transazione può essere utilizzato solo una volta come input della transazione successiva, in questo modo l’importo di tutti gli input delle transazioni correnti deve essere utilizzato nell’output. In caso contrario l’importo rimanente proveniente dagli input della transazione andrà perso. Ad esempio, se l’input è pari a 50BTC e l’utente deve inviare solo 25BTC, Bitcoin crea due output, ciascuno di 25BTC: uno giungerà a destinazione, l’altro tornerà nuovamente al proprietario dei fondi (il cosiddetto “change” – un tipo di transazione in cui l’utente di fatto invia soldi a se stesso). Qualsiasi somma rimanente dagli input di Bitcoin non utilizzata nella transazione costituirà la su quella transazione. La persona che genera il blocco riceverà tale compenso.
Verifica della Transazione
Al fine di verificare se gli input hanno ottenuto il permesso di incassare le somme dovute dagli output delle precedenti transazioni, Bitcoin utilizza il sistema standard dello script (vedere in seguito), basato sullo scriptSig dell’input e sullo scriptPubKey dell’ouput a cui questa transazione fa riferimento. Entrambi sono valutati con l’aiuto di uno scriptPubkey che utilizza i valori restituiti all’interno dello stack di scritpSig.
L’input viene confermato se lo script scriptPubKey restituisce “true” come valore. Con il sistema di script, chi invia denaro può creare condizioni complesse da soddisfare per coloro che intendono ottenere il valore di output. Ad esempio, è possibile creare un input che ciascun utente può ottenere sen-za autorizzazione. Così come è possibile richiedere che l’input sia firmato da 10 chiavi diverse o sia verificato tramite password.
Schema generale di ciascun input di transazione – Txin
Campo | Descrizione | Dimensione |
---|---|---|
della transazione precedente | Doppio hash SHA256 della transazione precedente | 32 bytes |
Txout-index precedente | Intero aritmetico. Indicizza gli output della transazione precedente | 4 bytes |
Lista degli Input | Il primo input della prima transazione è anche chiamato coinbase | <In-counter> input multipli |
Lunghezza di Txin script | Intero aritmetico VI = Varlnt | 1-9 bytes |
Txin-script / scriptSig | Script | <lunghezza all’interno dello script> molti bytes |
Numero di sequenza | Normally 0[FFFFFFFF; funziona nel caso in cui il lock time della transazione è > 0 | 4 bytes |
L’input fornisce informazioni accurate su dove e come ottenere il numero di Bitcoin che può essere riscosso dal nuovo proprietario. Se si tratta del solo input della prima transazione all’interno del blocco, si parla di input di transazione generato. Il suo contenuto è totalmente ignorato.
Schema generale di ciascun output di transazione – Txout
Campo | Descrizione | Dimensione |
---|---|---|
Valore | Intero aritmetico che fornisce il numero di satoshi (BTE/10^8) necessario per le transazioni | 8 bytes |
Lunghezza del Txout-script | Stack aritmetico | 1-9 bytes |
Txout-script / scriptPubKey | Script | <lunghezza dello script di output> molti bytes |
L’output stabilisce le condizioni d’uso dei dati Bitcoin nelle successive transazioni, il totale dei valori di output della prima transazione all’interno del blocco rappresenta il valore di Bitcoin stabilito per quel blocco. In questo caso è aggiunta una commissione proveniente dalle altre transazioni aggiunte a questo blocco.