Glossario / Riferimento per sviluppatori
OP_RETURN
- Che cos'è OP_RETURN?
- OP_RETURN è l'opcode che rende un output di transazione dimostrabilmente non spendibile, il che consente di scrivere sulla blockchain una piccola quantità di dati arbitrari senza appesantire l'insieme degli UTXO attivi.
Un output il cui script inizia con 0x6a non può mai essere speso da nessuno, quindi i nodi completi lo escludono dall'insieme degli UTXO che devono tenere a portata di mano. Bitcoin Core 0.9.0 ha reso standard questo tipo di output a marzo 2014 con una tolleranza di 40 byte, portata a 80 byte di payload nella 0.11.0. Se compri e conservi, non dovrai mai crearne uno, ma paghi quelli degli altri attraverso il mercato delle commissioni.
Come funziona
OP_RETURN fa fallire lo script nell'istante in cui viene raggiunto. Nulla può soddisfare un output bloccato in questo modo e, a differenza di un indirizzo di bruciatura, dove i bitcoin vengono inviati a un hash di cui nessuno possiede la chiave, l'impossibilità è visibile al software invece che soltanto probabile. È proprio questa visibilità il punto: un nodo mantiene un indice di ogni output spendibile, e un output di cui si può dimostrare la morte non deve mai entrarvi.
I wallet che ne costruiscono uno ne impostano il valore a zero e inseriscono il payload dopo l'opcode, di solito come un'unica push. Il risultato è una transazione con un output normale che paga qualcuno e un secondo output che trasporta byte e nessun denaro.
La prima versione dell'opcode fu un disastro. Nel 2010 uno script di input e uno script di output venivano eseguiti insieme, e OP_RETURN terminava la valutazione riportando successo, così chi spendeva poteva aggiungerlo e portarsi via bitcoin appartenenti a qualcun altro. La correzione di quell'anno separò le due metà dell'esecuzione e trasformò l'opcode in un fallimento incondizionato. Il suo uso moderno come trasportatore di dati arrivò quattro anni dopo, quando gli sviluppatori stipavano già dati in chiavi pubbliche false che i nodi non potevano mai eliminare.
Seguirono i limiti di relay, e nessuno di essi era una regola di consenso. Bitcoin Core introdusse nella versione 0.9.0 un trasportatore standard da 40 byte, raddoppiò la tolleranza a 80 byte nella 0.11.0 a luglio 2015 e consentì un solo output di questo tipo per transazione. La versione 30.0 rimosse il limite di dimensione predefinito e la regola dell'output unico dopo una lunga e aspra discussione pubblica, con la motivazione che i limiti erano aggirati banalmente e spingevano i dati in posti peggiori. Bitcoin Knots mantenne i valori predefiniti più severi, e la spaccatura nella politica dei nodi è uno dei disaccordi ancora aperti nel bitcoin oggi.
Perché questo conta quando compri bitcoin
Non ti verrà mai chiesto di creare un output OP_RETURN, e se un sito web ti dice di inviare bitcoin a uno, è una truffa: non c'è nulla a cui inviare. Alcuni exchange e alcune catene usano campi memo, ma un prelievo di bitcoin non ne ha mai bisogno.
Quello che ti arriva è la commissione. I dati scritti on-chain competono con il tuo prelievo per lo stesso spazio limitato, e l'effetto è misurabile. Il blocco 840.000, minato il 20 aprile 2024, ha incassato circa 37,6 bitcoin in commissioni, il valore più alto di qualsiasi blocco fino a oggi, perché un nuovo protocollo di token si è attivato esattamente a quell'altezza e migliaia di persone si sono precipitate a scriverci dentro. Chiunque abbia prelevato da un exchange quel pomeriggio ha pagato diverse volte la tariffa corrente per il privilegio.
La difesa è il tempismo, non lo sdegno. Le commissioni variano di un ordine di grandezza nell'arco di una sola settimana, quindi consolidare i tuoi bitcoin, spostarli da un exchange o fare qualsiasi trasferimento non urgente in un fine settimana tranquillo costa una frazione di quanto costa lo stesso trasferimento durante una corsa ai dati. I wallet che ti lasciano impostare la tua tariffa, invece di indovinarla per te, meritano la preferenza proprio per questo motivo. Se la questione di politica ti sta molto a cuore, eseguire Bitcoin Knots invece di Bitcoin Core è il modo diretto di esprimerla, dato che la politica di relay è scelta da ogni operatore di nodo individualmente.
Esempio pratico: quanto costano 80 byte
Un output trasportatore legacy di dimensione massima occupa 92 byte sulla rete: 8 byte di valore impostato a zero, un byte per la lunghezza dello script, poi 83 byte di script formati dall'opcode, un'istruzione di push, un byte di lunghezza e 80 byte di payload. Nulla di questo fa parte dei dati witness, quindi ogni byte conta quattro unità di peso, per 368 unità di peso o 92 byte virtuali. A 10 satoshi per byte virtuale sono 920 satoshi prima di contare il resto della transazione.
Per confronto, un normale output SegWit nativo occupa 31 byte, o 31 byte virtuali, quindi l'output di dati costa tre volte tanto rispetto a pagare qualcuno. I dati non sono mai stati gratis, e il mercato delle commissioni è l'unico meccanismo di razionamento che il bitcoin ha.
OP_RETURN vs transazione di dati nulli
OP_RETURN è l'opcode; transazione di dati nulli è il nome che Bitcoin Core dà all'intero schema della transazione quando vi compare uno di questi output. Il software riporta il tipo di output come "nulldata" nel JSON decodificato, e quella stringa è ciò che di solito mostrano i block explorer. La distinzione è piccola ma impedisce una lettura errata comune: una transazione di dati nulli non è una transazione che non sposta denaro. Quasi sempre paga anche qualcuno, con i dati che viaggiano in un secondo output.
OP_RETURN vs iscrizione
Le iscrizioni non usano affatto OP_RETURN, e da qui nasce una confusione senza fine sull'archiviazione dei dati nel bitcoin. Lo schema ordinals, rilasciato a gennaio 2023, nasconde il contenuto dentro un ramo di script Taproot che non viene mai eseguito, e quel ramo vive nel witness, dove ogni byte costa un'unità di peso invece di quattro. La conseguenza pratica è la scala. Un payload OP_RETURN è stato limitato dalla politica di relay a 80 byte per un decennio, mentre una singola iscrizione può avvicinarsi alla dimensione di un intero blocco a un quarto del costo in peso per byte. Runes, lanciato ad aprile 2024, è andato nella direzione opposta e codifica deliberatamente i suoi messaggi di protocollo in OP_RETURN, ed è per questo che le due discussioni sui dati nel bitcoin sono in realtà discussioni su due meccanismi diversi.