satwire

What is OP_RETURN?

The part of a Bitcoin transaction that can carry your own bytes.

The short answer

OP_RETURN is an instruction in Bitcoin's scripting language that marks a transaction output as unspendable. Because nobody will ever need to spend it, the space after the instruction is free for anything you like — a sentence, a hash, a receipt, a small picture. The data is not a link and not a fingerprint: the bytes themselves sit inside a real Bitcoin transaction, in every copy of the blockchain, for as long as Bitcoin exists.

A transaction output normally says who may spend this money. An OP_RETURN output says nobody may spend this, and here are some bytes. It usually carries 0 sats of value — you are paying for the space it takes up in a block, not putting coins into it.

Why it exists

People wrote data into Bitcoin long before OP_RETURN did, by hiding it in fake payment addresses. Those outputs look spendable, so every node has to keep them in memory forever, in the set of unspent outputs it checks against. That set is the expensive part of running a node, and junk in it never goes away.

OP_RETURN was the answer: a way to say this is data, not money that a node can recognise and discard. It fails the script immediately, so the output is provably unspendable and never enters the set a node must keep. Writing data this way is the polite version of something people were going to do regardless.

How many bytes fit

More than most pages on the internet will tell you, because the answer changed recently. The 80-byte figure you will find everywhere was never a rule of Bitcoin itself — it was relay policy, a default each node operator can set, deciding which transactions a node passes on to its peers.

So a message of a few kilobytes is standard today, and a small picture genuinely fits. What has not changed is that relay policy is a choice: a node running an older version, or a deliberately stricter configuration, may still refuse to pass on anything over 83 bytes. A large OP_RETURN is standard, not guaranteed — it needs nodes that will relay it and a miner willing to include it.

What an OP_RETURN costs

You are buying block space, so the price is the size of the whole transaction multiplied by the fee rate you choose. Every byte of your message is a byte of that size, which makes the cost close to linear in message length. These are real quotes from this service — a single input, a change output, and the flat 2,000-sat SatWire fee included:

Message OP_RETURN output At 2 sat/vB At 10 sat/vB
20 bytes — a few words31 vB2,282 sats3,410 sats
80 bytes — the old limit92 vB2,404 sats4,020 sats
200 bytes — a paragraph212 vB2,644 sats5,220 sats
1,000 bytes — a long note1,015 vB4,250 sats13,250 sats
20,000 bytes — a picture20,015 vB42,250 sats203,250 sats

The fee rate is yours to pick. 2 sat/vByte is the floor this service will sign at; a higher rate buys a place in an earlier block, not a better message.

How to read one

Open any transaction in a block explorer and look at its outputs. An OP_RETURN output shows 0 BTC and a script that starts with OP_RETURN, followed by the payload — usually displayed as hex, with the readable text beside it if the bytes happen to be text. Nothing is hidden and no tool of ours is involved: the data is a public part of the transaction, and anyone who pulls the raw transaction from their own node can decode it.

What it cannot do

Two ways to publish one

Yourself. With your own node and a wallet that will build a raw transaction, you add an output with an OP_RETURN script, fund it, sign it and broadcast. This is the cheapest route — you pay only the network fee — and it is fiddly enough that mistakes cost real money: an under-paid fee, a mis-sized push, or a transaction no node will relay.

Or use SatWire. You type the message, we quote the whole cost up front, you pay a one-off address from any wallet, and we build, sign and broadcast the transaction and hand you the transaction id. No account, no signup, and a flat 2,000-sat fee on top of the network fee. Text up to 1,000 bytes, pictures up to 20,000.

Write a message on the blockchain →

Aiming one at somebody else's address is a slightly different job — it needs a payment alongside the text: how to send a message to a Bitcoin address →

Questions

How many bytes fit in an OP_RETURN?
Bitcoin Core v30, released in October 2025, raised the default relay limit from 83 bytes to 100,000. Before that, a standard OP_RETURN carried 80 bytes of data. The consensus rules never had an 80-byte limit at all — it was relay policy, which each node operator sets.
Can an OP_RETURN message be deleted?
No. Once the transaction is mined, the data is in every copy of the blockchain in the world. Nobody can remove it — not the sender, not the miner, not the service that published it.
Is an OP_RETURN output spendable?
No. The OP_RETURN opcode fails the script immediately, so the output is provably unspendable. That is the point: nodes can drop it from the UTXO set they keep in memory, which is why writing data this way is considered polite compared to the alternatives.
How much does an OP_RETURN cost?
You pay for the size of the transaction at the fee rate you choose. A 200-byte message in a single-input transaction is about 322 vBytes, which is 644 sats at 2 sat/vByte. The data itself is the largest part of the size, so cost scales almost linearly with message length.
Is data in an OP_RETURN encrypted?
No. It is stored in the clear and anyone can read it with a block explorer. If you need it private, encrypt it yourself before publishing — the chain stores whatever bytes you hand it.