La blockchain di Bitcoin è sostanzialmente un database che contiene transazioni, tuttavia nessuno vieta di aggiungere un testo, immagini o video. Messaggi scritti sulla blockchain di Bitcoin ci sono da sempre, tuttavia negli ultimi anni una delle teorie più note è stata quella degli Ordinals che sostanzialmente numera in modo arbitrario i Satoshi tramite il software Ord (questo concetto è stato sfruttato dai token Brc20 e dalle Inscriptions in cui vengono aggiunti dati arbitrari, ovvero testi, immagini e quant'altro, ad una transazione dove viene spostato BTC). Va sottolineato che tutto ciò funziona al di fuori del consenso della blockchain di Bitcoin (i miners vedono solo lo spostamento di Satoshi) ed usa regole proprie.
TRANSAZIONI BITCOIN: UTXO E OP_RETURN
Ipotizziamo di inviare 0.2 BTC ad un indirizzo, questi 0.2 BTC sono inizialmente associati ad un indirizzo pubblico quindi ad una chiave privata e sono degli UTXO (non spesi). Ogni UTXO contiene un'hash (impronta associata alla chiave pubblica) e il quantitativo di BTC. Una volta inviati, quell'UTXO diventa "speso" e viene creato un nuovo UTXO associato ad una nuova chiave privata (il ricevente della transazione).
Già nei primi anni della vita di Bitcoin, al posto dell'indirizzo di ricezione, si inserivano messaggi casuali (rispettando ovviamente il formato di una chiave pubblica) "burnando" frazioni di BTC (che appunto diventavano per sempre "non spendibili" essendo associati a chiavi pubbliche di cui nessuno aveva la chiave privata. Sostanzialmente ciò si basa sull'inviare una transazione ad un indirizzo pubblico con dati randomici (UTXO non spendibili ma salvati per sempre sui full node di Bitcoin).
Tuttavia è possibile inviare un messaggio sulla blockchain di Bitcoin utilizzando un'operazione denominata OP_RETURN all'interno di una transazione. OP_RETURN è un codice operativo all'interno degli script di transazione di Bitcoin che consente di inserire dati aggiuntivi e arbitrari sulla blockchain senza richiedere una destinazione per BTC. Questo è utile per includere metadati o messaggi sulla blockchain senza trasferire effettivamente BTC. Il messaggio da inviare deve essere formattato correttamente e rispettare i limiti di dimensione per l'inserimento di dati nella blockchain di Bitcoin. Dopo aver creato la transazione con il messaggio OP_RETURN, basta inviarla alla rete Bitcoin utilizzando il wallet scelto. La transazione verrà quindi trasmessa attraverso la rete Bitcoin e inclusa in un blocco da un miner. Una volta che la transazione è stata confermata e inclusa in un blocco sulla blockchain di Bitcoin, puoi verificare il messaggio consultando l'output della transazione contenente l'operazione OP_RETURN. Potrai leggere il messaggio incluso e confermare che sia stato registrato correttamente sulla blockchain. Ovviamente l'inserimento di un messaggio sulla blockchain di Bitcoin attraverso l'operazione OP_RETURN richiede il pagamento delle fee, inoltre sussistono limiti alla dimensione dei dati che possono essere inclusi in una singola transazione.
RUNES E RUNESTONE
Le Runes permettono di creare token fungibili su Bitcoin utilizzando il modello UTXO. Si tratta di UTXO con amount inviato pari a 0 (a parte le fee di rete). Runestones sono messaggi specifici del protocollo Runes, che vengono inseriti in un output successivamente all'OP_RETURN seguito dall'OP_13. L'output sarà del tipo:
OP_RETURN + OP_13 + <runestones payload>
dove <runestones payload> è il vero e proprio contenuto specifico relativo al protocollo Runes. OP_RETURN dice al protocollo Bitcoin di ignorare da lì in poi (i messaggi hanno valore solo nel protocollo Runestone con le sue regole).
Tramite la funzione "edicts" è possibile introdurre della logica custom nei trasferimenti delle rune tra gli input e gli output di una transazione. "Etching" consente di creare una rune, seguendo uno schema commit-reveal. "Mint" permette di mintare una rune. Nel momenti in cui si crea una rune, tramite "etching" è possibile settare una serie di attributi:
-premine
-total supply
-numero di rune per ogni transazione
-divisibilità (quante cifre dopo la virgola può avere)
Per creare una rune, il primo passaggio è quello di andare ad eseguire una transazione che contiene un output con una runestone al suo interno. E questa runestone deve contenere a sua volta un messaggio di etching. Ciò di cui avremo bisogno è:
-il ticker: ipotizziamo la rune XXX (in realtà ora il minimo è 13e sino a 28 caratteri ma nel tempo sarà possibile creare simboli più corti. Diminuisce di un carattere ogni 4 mesi sino ad arrivare ad 1 solo carattere nell'halving 2028)
-la supply: ad esempio massimo 21 unità
-premine di una parte di supply (sul proprio address) o no premine (mintabile da tutti)
Inoltre potremmo scegliere se fare "open mint", ossia consentire a tutti di mintare questa rune fino ad esaurimento supply, oppure consentirlo solo ad alcuni, oppure non consentire il mint a nessuno.
Fatto ciò, è sufficiente pubblicare una transazione Bitcoin in cui uno degli output sia:
OP_RETURN + OP_13 + RUNESTONE
dove la runestone include l'etching con il ticker, supply e premine.
Non appena questa transazione viene aggiunta nella blockchain di Bitcoin la nostra rune è creata e, se avessimo settato un premine, immediatamente avremmo una parte di supply.
Avendo scelto di non avere premine, in questo esatto momento la rune è stata creata ma ancora nessuno ne possiede una, nemmeno noi creatori. A questo punto ci occorre fare una transazione in cui includeremo una nuova runestone, questa volta contenente non più un messaggio di etching, ma uno di minting. In questo caso la runestone include solo il messaggio di minting della rune precedentemente creata tramite etching. Avendo impostato il limite di una rune mintabile per ogni transazione di minting, ne verrà mintata solo una con questa transazione.
Una volta che abbiamo la nostra rune possiamo trasferirla verso altri indirizzi. Ciò si basa sul modello UTXO di Bitcoin, e la nostra rune è contenuta in un UTXO. Per spostarla è sufficiente fare una normale transazione Bitcoin in cui si spende quella UTXO per muoverla da un indirizzo mittente ad uno destinatario. Per visualizzarle si può utilizzare OKX Wallet, Unisat, Xverse, Leather, etc Qui invece è possibile mintarle: Ordiscan