In questo (si spera corto) tutorial proveremo a spendere alcuni Bitcoin utilizzando bitcoin-cli
.
In questo tutorial uso la rete signet, ma ovviamente gli stessi passaggi funzionano anche per mainnet, testnet, e regtest.
Prerequisiti:
bitcoind
avviato e syncato- Avere alcuni sats da spendere con
bitcoin-cli
(potete ottenerli con un faucet se siete su signet/testnet, o minando su regtest)
Iniziamo analizzando dal punto di vista teorico come funziona una transazione Bitcoin.
Una transazione Bitcoin è composta da input e output.
Ogni output contiene l'indirizzo a cui voglio mandare i fondi, e quanto voglio mandare.
Ogni input contiene informazioni che indicano quale transazione precedente fornisce i bitcoin che si stanno trasferendo e la firma digitale del proprietario di quei bitcoin per confermare l'autorizzazione del trasferimento.
Ogni volta che creiamo una transazione, il nostro portafogli effettua vari passaggi:
- Scelta degli input da utilizzare
- Creazione della transazione
- Firma della transazione
- Broadcast
In questo tutorial utilizzeremo bitcoin-cli
per rifare gli stessi passaggi, in modo da capire piú a fondo il funzionamento delle transazioni Bitcoin.
Uso il comando bitcoin-cli listunspent
per vedere quanti UTXO (anche chiamati coin) ho nel mio portafogli. In questo caso, ho due UTXO che posso spendere.
Creo la transazione usando il comando bitcoin-cli createrawtransaction
seguito da una lista di UTXO che voglio spendere (per ogni UTXO devo specificare txid e vout) e da una lista di destinatari (nella forma indirizzo:quantitá
).
Il comando mi ritorna una stringa di numeri e lettere: questa è la mia transazione in formato "hex" non firmata.
Uso il comando bitcoin-cli signrawtransaction
seguito dalla stringa che ho ottenuto al passaggio prima. Questo comando firma la transazione creata prima, e mi ritorna la transazione firmata, e mi dice che la transazione è completa, cioé ho firmato tutti gli input disponibili.
Usiamo il comando bitcoin-cli decoderawtransaction
per esaminare la transazione che abbiamo appena creato e firmato. Notiamo il txid
, la lista degli input (vin
), la lista degli output (vout
).
Uso il comando bitcoin-cli sendrawtransaction
per fare il broadcast della transazione.
Fatto! 🎉