• Bitcoin Train
  • Posts
  • Fermata #38 - Bitcoin Training: la struttura della transazione

Fermata #38 - Bitcoin Training: la struttura della transazione

Com'è strutturata una transazione Bitcoin? La prima fermata di Bitcoin Training si focalizza su crittografia asimmetrica, input, output e UTXO.

Nei mesi scorsi alcuni di voi mi hanno chiesto di chiarire meglio alcuni aspetti tecnici di Bitcoin: com’è strutturata una transazione? Cosa fa un nodo? Come si scrive sulla blockchain?

Avete ragione: per sfruttare al meglio le potenzialità di una tecnologia è fondamentale capirne il funzionamento. Ho quindi deciso di inaugurare Bitcoin Training, una breve serie di approfondimenti per scoprire le basi tecniche di Bitcoin.

La serie, i cui articoli usciranno ogni secondo sabato del mese, inizia da qui.

Crittografia asimmetrica

Nel mondo del denaro fisico un portafoglio è utilizzato per contenere banconote o carte. In Bitcoin, invece, il wallet non contiene monete digitali ma gestisce le password necessarie a poterle spendere. In termini più appropriati, i wallet sono software che gestiscono le chiavi per firmare le transazioni.

Dalla chiave privata agli indirizzi Bitcoin

L’efficacia delle transazioni in Bitcoin è dovuta in gran parte a quella che viene definita crittografia asimmetrica. Le protagoniste principali sono due: chiave pubblica e chiave privata.

Per semplificare, la chiave privata è l’unico strumento in grado di spendere i bitcoin in proprio possesso1. La chiave pubblica è ciò che certifica al resto della rete che chi sta spendendo i bitcoin ne è l’effettivo proprietario senza però mettere in mostra la relativa chiave privata, altrimenti tutti potrebbero muovere quei bitcoin.

La chiave privata non è altro che un numero a 256 bit (una sequenza di 0 e 1 lunga 256 caratteri). Possono esistere in totale 2^256 diverse chiavi private. Un numero, come scritto nella fermata #7, che equivale più o meno a quello degli atomi presenti nell’Universo osservabile. 

Una volta creata una chiave privata è possibile ricavarne la rispettiva chiave pubblica tramite la moltiplicazione a curva ellittica (si moltiplica la chiave privata per un punto costante della curva ellittica detto punto di generazione).

Per arrivare a ottenere gli indirizzi - ovvero quelli utilizzati per ricevere pagamenti in bitcoin, spesso visualizzati anche in forma di Qr code - vanno applicate due funzioni di hashing alla chiave pubblica. Nello specifico si tratta degli algoritmi SHA256 e RIPEMD160: prima si calcola l’hash SHA256 della chiave pubblica e successivamente si calcola l’hash RIPEMD160 del risultato: ciò che si ottiene è un indirizzo Bitcoin come questo: bc1qp0qvlu6ryf6ym22qzxm3canwj427q0e2n8fxct.

Annuncio sponsorizzato

Il miglior modo per acquistare bitcoin è utilizzare RELAI, la Bitcoin App più semplice d’Europa. Scaricala cliccando qui o scannerizzando il QR Code e utilizza il codice “FEDERICO” per risparmiare lo 0,5% in commissioni.

RELAI applica una politica di KYC light: non richiede registrazioni o dati personali fino a un limite di acquisto di € 900 al giorno. Tutto ciò che serve per comprare è il proprio IBAN. E’ ottimale per impostare dei piani di accumulo settimanali o mensili.

RELAI è un servizio non-custodial. La somma bonificata viene convertita automaticamente in bitcoin e trasferita su un wallet di cui è l’utente ad avere il controllo: not your keys, not your bitcoins.

Il motivo per cui si parla di crittografia asimmetrica è perché si può facilmente ottenere la chiave pubblica conoscendo la chiave privata ma il procedimento inverso, quello di calcolare la chiave privata avendo quella pubblica, è pressoché impossibile: richiederebbe uno sforzo computazionale non compatibile, in tempi umani, con la tecnologia esistente. Lo stesso discorso vale per il passaggio chiave pubblica - indirizzo: dalla prima si può facilmente ottenere il secondo ma il processo inverso non è fattibile.

La transazione Bitcoin: input, output e UTXO

Ogni transazione Bitcoin contiene due elementi principali: input e output.

Pensiamo a un pagamento in contanti. Supponiamo di dover pagare 35 euro ma tutto ciò che abbiamo è una banconota da 50 euro. Ciò che faremo è consegnare la banconota da 50 euro e ricevere come resto 15 euro. Gli input e gli output si comportano in modo simile. Per capire come, è necessario familiarizzare con il concetto di UTXO

UTXO sta per Unspent Transaction Output e consiste in un importo ricevuto e non ancora speso: si tratta, per proseguire il paragone, di una banconota ricevuta ma non spesa, che compone quindi parte del saldo complessivo del portafoglio. L’importo totale a disposizione del wallet consiste nella somma di tutti i suoi UTXO. Ogni wallet, interrogando il nodo Bitcoin a cui è collegato, ottiene la lista degli UTXO riconducibili ai propri indirizzi ed è così che ricostruisce il suo saldo complessivo

La transazione

Supponiamo quindi che Alice voglia inviare a Bob 0.5 BTC per comprare una nuova automobile ma che nel proprio wallet abbia a disposizione solamente un UTXO da 3 BTC ricevuti da Craig per avergli venduto appartamento. Ciò che Alice dovrà fare è prendere l’UTXO da 3 BTC e trasformarlo in un input di pagamento verso Bob. A quel punto verranno creati due output: uno da 0,5 BTC diretto verso il wallet di Bob e uno da 2,5 BTC che tornerà al wallet di Alice come resto. Al termine della transazione Alice non avrà più un UTXO da 3 BTC ma ne avrà uno da 2,5 e Bob avrà un nuovo UTXO da 0,5 BTC2.

Nel dettaglio: Alice invierà al network un messaggio firmato con la propria chiave privata contenente le seguenti informazioni:

  • Input: l’UTXO ricevuto da Craig del valore di 3 BTC

  • Output: 1) 0,5 BTC verso l’indirizzo di Bob e 2) 2,5 BTC verso un proprio indirizzo

Il risultato sarà quindi la trasformazione del precedente output di Craig (che solo Alice può spendere) in due UTXO:

  • Un UTXO da 0.5 BTC che solo Bob potrà a sua volta firmare e spendere;

  • Un UTXO da 2.5 BTC che solo Alice potrà firmare e spendere.

Questione di privacy e commissioni

Padroneggiare questi concetti è utile in particolare per due ragioni: essere in grado di gestire privacy e commissioni di pagamento.

Privacy

Essendo la blockchain di Bitcoin, tra le altre cose, un registro pubblico, è possibile provare a tracciare la storia degli UTXO: capire, quindi, il percorso fatto da una determinata “banconota”, attraverso quali mani è passata.

Nel caso in cui i bitcoin vengano comprati su un exchange centralizzato - che richiede documenti e dati personali per l’apertura di un account - e poi trasferiti sull’indirizzo di un proprio wallet, può essere molto facile risalire all’identità dietro agli UTXO depositati sul wallet grazie ai documenti forniti all’exchange. In sostanza, c’è la possibilità che gli UTXO vengano collegati direttamente alla persona che li detiene.

Qualora si detenessero dei bitcoin comprati su mercati peer-to-peer (per esempio Bisq) - quindi UTXO difficilmente riconducibili a un’identità - è importante che non vegano mischiati insieme a quelli acquisiti su exchange centralizzati. Se depositati sugli stessi indirizzi ai quali sono associati gli UTXO KYC3, la privacy di quelli NON-KYC - che è superiore by design - verrebbe annullata dall’assunto che gli indirizzi appartengono con grande probabilità a un unico proprietario, quello che ha dato i documenti all’exchange.

Per questo è consigliabile mantenere bitcoin KYC e NON-KYC in wallet separati, etichettare gli UTXO (basta farlo quando si inviano con wallet che supportano la funzione di labeling come Wasabi, Sparrow, Electrum ecc…) e sperimentare il coin-control: selezionare cioè manualmente quali UTXO utilizzare quando si prepara una transazione, un po’ come scegliamo quali banconote prendere dal portafoglio per pagare.

Commissioni

Le commissioni non vengono calcolate in base all’importo della transazione ma in base alla quantità di dati da scrivere per registrare il pagamento sulla blockchain: il servizio per cui si paga, in breve, è il block space, ossia lo spazio che si occupa all’interno di un blocco della blockchain. L’unità di misura è il sat/vB, ovvero il satoshi per byte.

A parità di tutte le altre condizioni è quindi più costoso inviare più UTXO anziché uno solo. Se dobbiamo pagare 0,5 BTC e a disposizione abbiamo un UXTO da 0,5, uno da 0,3 BTC e uno da 0,2 BTC, le commissioni di transazione saranno inferiori se scegliamo di inviare solamente quello da 0,5 anziché i due UTXO da 0,3 BTC e da 0,2 BTC.

Saper gestire gli UTXO etichettandoli, selezionandoli singolarmente e riconoscendo quelli derivanti da un’acquisto KYC da quelli caratterizzati da maggior privacy è parte di un percorso solo apparentemente appannaggio di nerd e appassionati e che un domani potrebbe diventare parte della nostra quotidianità.

Reply

or to participate.