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.

Indice

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

Input: Previous tx: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6 Index: 0 scriptSig: 304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d10 90db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501 
Output: Value: 5000000000 scriptPubKey: OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35549d OP_EQUALVERIFY OP_CHECKSIG 

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.

Vedere anche su BitcoinWiki