Come funzionano effettivamente le transazioni Bitcoin?

Se sei interessato a diventare uno sviluppatore di applicazioni blockchain, o stai solo cercando di capire cosa succede dietro le quinte quando invii bitcoin a un amico, è bene avere una conoscenza pratica di ciò che accade quando crei e trasmetti Bitcoin transazioni alla rete Bitcoin. Perché?

Perché le transazioni sono un’entità di base su cui è costruita la blockchain di bitcoin. Le transazioni sono il risultato di una brillante collisione di crittografia, strutture dati e semplici scripting non completi. Sono abbastanza semplici da non essere eccessivamente complessi, ma abbastanza flessibili da consentire agli sviluppatori di codificare anche tipi di transazioni abbastanza personalizzati. Oggi faremo un tour del primo.

In qualità di sviluppatore, come fa il tuo client bitcoin a pubblicare una nuova transazione sulla rete (e cosa succede quando viene ricevuta)?

Cosa succede esattamente quando mandi un po ‘di bitcoin a un amico?

Questo post presupporrà che il lettore abbia una conoscenza di base di hashing, crittografia asimmetrica e networking P2P. È anche una buona idea avere un buon senso di cosa sia esattamente una blockchain, anche se non hai familiarità con meccanismi specifici.

Transazioni Bitcoin e il loro ruolo nel quadro più ampio

Bitcoin è composto da alcuni pezzi principali: nodi e una blockchain. Il ruolo di un nodo tipico è quello di mantenere la propria versione blockchain e aggiornarla una volta che sente parlare di una versione “migliore” (più lunga). In poche parole, la blockchain ha blocchi e i blocchi hanno transazioni.

Con questa immagine semplificata ma accurata in mente, potresti chiederti da che cosa viene fatta esattamente una transazione.

  • In che modo la comprensione delle transazioni mi aiuterà a diventare uno sviluppatore blockchain migliore?
  • In che modo le transazioni mi consentono di trasferire un po ‘di bitcoin a un amico?

Si scopre che le risposte a queste domande variano in base a molte cose. Anche supponendo che stiamo parlando solo di bitcoin, possiamo utilizzare le transazioni in diversi modi creativi per raggiungere una varietà di obiettivi personalizzati. Cominciamo dall’inizio, ovvero diamo un’occhiata a un buon vecchio tipo di transazione pay-to-PK-hash. Dopo tutto, questo tipo di transazione rappresenta oltre il 99% di tutte le transazioni su blockchain bitcoin.

Innanzitutto, costruiamo un modello mentale. Si è tentati di pensare a bitcoin come a un sistema basato su account. Dopotutto, quando invio bitcoin a qualcuno, quella persona riceve denaro e io ho un saldo residuo. Nel mondo reale, però, le cose sono rappresentate in modo leggermente diverso. In generale, quando invio denaro a qualcuno, invio spendendo tutto quel denaro (meno le commissioni di transazione). Parte di quel denaro verrà speso di nuovo sul mio conto personale se esiste un saldo residuo. Il punto è che tutto il denaro si sposta ogni volta. Puoi passare alla sezione 3.1 di per una spiegazione del motivo per cui questo modello è preferibile.

Con questo in mente, possiamo generalizzare e dire che una transazione bitcoin ha alcuni input e output. Una rappresentazione grafica potrebbe essere simile a questa:

Come funzionano effettivamente le transazioni Bitcoin?

Quando l’ho visto per la prima volta, mi ha confuso un po ‘, quindi elaborerò un po’. Quando pubblico una transazione, sto essenzialmente “rivendicando” un output e dimostrando di avere il permesso di spendere la somma di denaro per quell’output. Quindi, se sono Bob e voglio pagare Alice, quegli input sono la mia prova che mi è stata data una certa somma di denaro (anche se questa potrebbe essere solo una parte del mio saldo totale) e gli output corrisponderanno al conto di Alice . In questo semplice caso, ci sarebbero solo un singolo input e un singolo output.

Uno sguardo più approfondito alle transazioni Bitcoin

Comprendiamo i meccanismi di una vera transazione bitcoin. Useremo l’immagine sopra come riferimento.

Se dovessi tagliare una tipica transazione bitcoin, ti ritroveresti con tre pezzi principali: l’intestazione, gli input e gli output. Esaminiamo brevemente i campi a nostra disposizione in queste sezioni, poiché saranno importanti per la discussione. Nota che questi sono i campi che si trovano in una cosiddetta transazione non elaborata. Le transazioni non elaborate vengono trasmesse tra i peer quando viene creata una transazione.

L’intestazione

  • hash: L’hash su questa intera transazione. bitcoin generalmente utilizza valori hash sia come puntatore che come mezzo per verificare l’integrità di un dato. Ne parleremo più approfonditamente nella prossima sezione.
  • ver: Il numero di versione da utilizzare per verificare questo blocco. L’ultima versione è stata introdotta in un soft fork che è diventato attivo nel dicembre 2015.
  • vin_sz: Il numero di input per questa transazione. Allo stesso modo, vout_sz conta il numero di output.
  • lock_time: Lo esamineremo più approfonditamente negli articoli successivi, ma questo descrive sostanzialmente il primo momento in cui un blocco può essere aggiunto alla blockchain. È l’altezza del blocco o un timestamp unix.

Ingresso

  • hash di output precedente: questo è un puntatore hash a un output di transazione non speso in precedenza (UTXO). Essenzialmente, questo è il denaro che ti appartiene che stai per spendere in questa transazione.
  • n: un indice nell’elenco degli output della transazione precedente. Questa è la produzione effettiva che stai spendendo.
  • scriptSig: Questo è uno script di spesa che dimostra che il creatore di questa transazione ha il permesso di spendere i soldi indicati da 1. e 2.

Produzione

  • valore: l’importo di Satoshi speso (1 BTC = 100.000.000 Satoshi).
  • scriptPubKey: il secondo dei due script forniti in una transazione bitcoin, che punta alla chiave pubblica con hash di un destinatario. Maggiori informazioni su questo nell’ultima sezione di questo articolo.

Verifica della transazione

Uno dei compiti di un nodo bitcoin è verificare che le transazioni in entrata siano corrette (i dati non sono stati manomessi, il denaro non viene creato, solo i destinatari previsti spendono UTXO, ecc.). Un elenco più esaustivo può essere trovato online, ma qui elencherò alcuni di quelli importanti:

  • Tutti gli output richiesti dagli input di questa transazione si trovano nel pool UTXO. Gli output non spesi possono essere rivendicati solo una volta.
  • Le firme su ogni input sono valide. Più precisamente, stiamo dicendo che gli script combinati restituiscono true dopo essere stati eseguiti uno dopo l’altro. Maggiori informazioni su questo nell’ultima sezione.
  • Nessun UTXO viene speso più di una volta per questa transazione. Nota come questo è diverso dal primo elemento.
  • Tutti i valori di output della transazione non sono negativi.
  • La somma dei valori di input di questa transazione è maggiore della somma dei suoi valori di output. Nota che se i numeri sono diversi, la differenza è considerata una commissione di transazione che può essere richiesta dal miner.

Una transazione di base pay-to-PK-hash

bitcoin ha un proprio linguaggio di scripting personalizzato (simile a Forth) che è abbastanza potente da consentire agli sviluppatori di creare tipi di transazioni complicati e personalizzati. Ci sono circa cinque tipi di transazione standard accettati dai client bitcoin standard [5], tuttavia, esistono altri client che accetteranno altri tipi di transazioni a pagamento. Ci occuperemo solo dei meccanismi del pay-to-PK-hash qui.

Affinché una transazione sia valida, una coppia combinata scriptSig / scriptPubKey deve restituire true. Più specificamente, uno spender di transazione fornisce uno scriptSig che viene eseguito e seguito dallo scriptPubKey dell’output della transazione dichiarata (ricordi come abbiamo detto che gli input rivendicano output di transazioni non spesi precedenti?). Entrambi gli script condividono lo stesso stack.

Nell’interesse dell’efficienza, utilizziamo (wiki ufficiale di bitcoin) un riferimento mentre discutiamo. Quando visiti il ​​collegamento, vai circa a metà per trovare una tabella contenente 7 righe. Questa tabella mostra come vengono combinati gli script, come avviene l’esecuzione e come appare lo stack ad ogni passaggio.

Una cosa da notare è che, poiché gli indirizzi bitcoin sono in realtà hash (beh, diventa anche un po ‘più complicato. Vedere ), non è possibile per il mittente conoscere l’effettiva chiave pubblica da confrontare con la chiave privata. Pertanto, il Redentore specifica sia la chiave pubblica che la chiave privata e scriptPubKey duplicherà e hash la chiave pubblica per assicurarsi che il Redentore sia effettivamente il destinatario previsto.

Durante l’esecuzione, puoi vedere che le costanti vengono posizionate direttamente sullo stack quando vengono incontrate. Le operazioni aggiungono o rimuovono elementi dalla pila man mano che vengono valutati. Ad esempio, OP_HASH160 prenderà l’elemento in cima alla pila e lo avrà due volte, prima con SHA-256 e poi con RIPEMD-160. Quando tutti gli elementi nel nostro script sono stati valutati, il nostro intero script restituirà true se true rimane nello stack e false in caso contrario.

Tutto sommato, il pay-to-PK-hash è un tipo di transazione piuttosto semplice. Assicura che solo un redentore con la coppia di chiavi pubblica / privata appropriata possa richiedere e successivamente spendere bitcoin. Supponendo che tutti gli altri criteri siano soddisfatti (vedere la sezione precedente), la transazione è buona e può essere inserita in un blocco.

In articoli futuri analizzerò i tipi di transazioni più complicati. Vedremo come più di due parti possono partecipare a una transazione e vedremo come implementare i tipi di transazione più a lungo termine.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me