Skip to content

Instantly share code, notes, and snippets.

@instagibbs
Last active May 9, 2025 15:08
Show Gist options
  • Save instagibbs/c436110890ab25aa9997b13c2270d5ce to your computer and use it in GitHub Desktop.
Save instagibbs/c436110890ab25aa9997b13c2270d5ce to your computer and use it in GitHub Desktop.

Caveat Emptor

I (instagibbs) was asked to draft a statement, I feel this is a fair summation of the project's direction. I might be wrong

Retiring the 80-Byte OP_RETURN Limit

Bitcoin Core’s next release will, by default, relay and mine transactions whose OP_RETURN outputs exceed 80 bytes and allow any number of these outputs. The long-standing cap, originally a gentle signal that block space should be used sparingly for non-payment proof of publication data, has outlived its utility. Readers who want the full policy history should consult Bitcoin Optech’s Waiting for Confirmation mempool series.


Why standardness policy exists

Consensus rules decide whether a transaction can ever be included in a block. Standardness rules (aka policy) implemented in Bitcoin Core’s relay code decide whether it is forwarded across the peer-to-peer network before it reaches a miner. Three considerations motivate those extra checks.

  1. Denial-of-Service defence. Nodes decline transactions that waste CPU, RAM, or bandwidth disproportionate to their fee. E.g., quadratic hashing from legacy scripts.
  2. Incentive alignment. Giving policy nudges towards wallet authors for fee-efficient yet UTXO-friendly constructions.
  3. Upgrade safety. Unknown opcodes or version bits remain non-standard until activated by a soft fork, preventing premature use that could hamper future consensus changes.

Standardized OP_RETURN outputs embody that philosophy. Users were already embedding arbitrary data in spendable outputs, leaving toxic, unspendable entries in the UTXO set. OP_RETURN gave them a provably unspendable output that is not added to the UTXO set; the 80-byte ceiling that accompanied it was a soft deterrent: large enough for a hash or short commitment, too small for a photograph.

The 80-byte ceiling is now counter-productive

The modern transaction landscape has rendered the legacy cap ineffective and, in several ways, damaging.

Easily bypassed

A number of private mining accelerators simply do not enforce these limits, and other centralized services use alternative implementations to peer with these miners as well.

Large-data inscriptions are happening regardless and can be done in more or less abusive ways; the cap merely channels them into more opaque forms that cause damage to the network.

Perverse incentives

When the polite avenue is blocked, determined users turn to impolite ones. Some use bare multisig or craft fake output public keys that do enter the UTXO set, exactly the outcome OP_RETURN was invented to avoid.


Why not add new filters instead?

Some have proposed an aggressive blacklist against recognised data-embedding tricks. The project declined for both pragmatic and philosophical reasons. It does not stop the most basic forms of data embedding as mentioned before. There is no reliable pattern to detect “bad data”, resulting in a complex game of cat-and-mouse increasing negative externalities, and risks confiscation of user’s funds.


Practical impact on operators and wallets

Blocks remain limited to 4 million weight units; dust outputs are still rejected; signature-operation and ancestor/descendant caps still guard mempool growth. The withdrawal of the 80-byte rule yields in at least two tangible benefits:

  • Cleaner UTXO set. Data now fits in a single, provably unspendable output rather than being disguised in spendable scripts or spread over multiple transactions.
  • Consistent default behaviour. Nodes relay the same transactions miners want to see, making fee estimation and compact-block relay more reliable.

How the decision was reached

Three possible paths were considered:

  1. Keep the cap. Rejected as ineffective and arbitrary.
  2. Raise the cap. Still arbitrary; any figure likely to age poorly.
  3. Delete the cap. Aligns default policy with actual network practice, minimises incentives for harmful workarounds, and simplifies the relay path.

Option 3 earned broad, though not perhaps unanimous, support. Dissenting parties remain free to modify software, run stricter policy, or propose new resource limits if empirical harm emerges.


Alignment with Bitcoin’s ethos

The change re-affirms that Bitcoin is governed by transparent, minimal rules rather than editorial preference. By retiring a deterrent that no longer deters, Bitcoin Core keeps the policy surface lean and lets the fee market arbitrate competing demands.

Should a future pattern demonstrably exhaust node resources, targeted protections will be considered as they have been for signature-checking limits, ancestor limits, and dust rules.

@casey
Copy link

casey commented May 6, 2025

Large-data inscriptions are happening regardless and can be done in more or less abusive ways; the cap merely channels them into more opaque forms that cause damage to the network.

I think this sentence is inaccurate.

Technically speaking, "inscriptions" refer specifically to the OP_FALSE OP_IF "ord" … OP_ENDIF envelope construction embedded in a tapscript, and are not a generic term for "big data put anywhere in a transaction". So they can only be made in one way, which is not particularly abusive. Stamps, for example, which embed data in fake outputs, are not inscriptions.

@achow101
Copy link

achow101 commented May 6, 2025

why not punish the miner (or mining pool) who included the naughty transactions by slowing the propagation of their block and helping them lose the mining competition?

Slow propagation of blocks only punishes small miners and helps larger miners, regardless of who created the block.

For small miners, slow block propagation means that the rest of the network will remain on the previous block for longer, giving a bigger change that someone else will find a competing block and cause the small miner's block to become stale. Larger miners have a higher probability of finding the competing block, and in general of finding another block on top of it, which means that the larger miner benefits.

For large miners, the effect is essentially an accidental selfish mining attack. The large miner will be ahead of everyone else while their block propagates slowly. Since they are large, they have a higher chance of finding another block on top of theirs, while the rest of the network needs to find a block that competes and another block on top to make the large miner's block(s) stale. The effect is also that large miners benefit.

@liviu-liviu
Copy link

@achow101 Thank you for the clarifications. I'd like to follow up on your comment. Maybe you can clarify this, too:

I don't see all outcomes as bad.

The small miners know the propagation filters in advance. If they still choose to produce a block, knowing it will be slowed down, then it's their fault for losing. No one stopped them from following the propagation filters. They lost, so the filter worked as intended.
Any other small miners who respected the filter got a boost in comparison with the ones who did not respect the filter.
In such an event, the forfeited share of bitcoin rewards might move toward the large miners. I'm fine with this outcome. The large miners did nothing wrong, and the rewards were initially heading to a bad actor.

The outcome of large miners producing bad blocks is bad. But it will always be bad (with or without the propagation delay). If large miners see an edge when using slow blocks, they do not need the filter to slow their blocks. They will publish them as slowly as they want.

@achow101
Copy link

achow101 commented May 6, 2025

I don't see all outcomes as bad.

It leads to further miner centralization.

Large mining pools are essentially free to produce "bad" blocks as much as they want. So they can accept nonstandard transactions that pay them fees, but the small pools can't because they'll lose the propagation race. This means that in proportion to the rest of the network, large pools are able to collect more fees and therefore pay out more to the hashers. Since hashers are only motivated by more profits, they will tend to mine with the pool that pays them more. This means that small pools lose hashrate to the large pools as those large pools can pay out more than the small ones. Over time, this leads to further mining centralization around the large pools.

Conversely, if the nonstandard txs were accepted by all pools, then the proportional fee revenue would be about the same for all pools, removing this incentive for the hashrate to switch pools. The small pools would not lose hashrate to the large pools because they are paying their hashers about the same that they would get at a large pool.

@gmart7t2
Copy link

gmart7t2 commented May 6, 2025 via email

@CraigSellars
Copy link

Bitcoin is a state machine (Doo-dah!, doo-dah!)

Allowing more data in OP_RETURN opens up huge opportunities for metaprotocols to encode instructions for parsers to consume, and it can be pruned. Everybody wins.

Oh, doo-dah-day!

@parhamesque
Copy link

as much as i like to have data on chain, 1) not at L1 2) why removing option to chose?

the proponents have obviously ulterior motives. removing options is a literal “screw you public”. if BTC was private, absolutely within their rights. but BTC is a public protocol and by virtue of its value, it’s public property.

thankfully there are other nodes like btcd snd knots.

@bensig
Copy link

bensig commented May 6, 2025

This was the obvious choice.
Blockspace should be allocated by the free market - not a committee choosing which transaction types are "right."

@bensig
Copy link

bensig commented May 6, 2025

Bitcoin is a state machine (Doo-dah!, doo-dah!)

Allowing more data in OP_RETURN opens up huge opportunities for metaprotocols to encode instructions for parsers to consume, and it can be pruned. Everybody wins.

Oh, doo-dah-day!

Exactly.

@andrewtoth
Copy link

It's not really a matter of opinion

"I nudge you": nudge is a verb
"I give you a nudge": nudge is a noun

Of course you are correct, my mistake.

@andy108369
Copy link

Hey all — just a friendly clarification that might help ease some concerns:

This change to remove the 80-byte OP_RETURN limit is a policy change, not a consensus change. That means:

  • The 4MB block size limit stays exactly the same
  • No full node will reject valid blocks because of this
  • Nodes like Bitcoin Knots or btcd can still enforce stricter policies if users prefer

Why remove the limit at all? Because it was already being bypassed via worse methods like fake outputs or direct-to-miner submission — which causes more harm (especially UTXO bloat). In contrast, OP_RETURN is provably unspendable and prunable.

This isn't about turning Bitcoin into a data chain — it's about minimizing harm, improving relay consistency, and reducing centralization pressure from mining pools with special access.

If you want conservative defaults, you're free to run software that enforces them. Bitcoin remains a system of voluntary rules — and that’s exactly what makes it strong.

More on that:

@eigmax
Copy link

eigmax commented May 7, 2025

From a Bitcoin L2's perspective, removing this limit is helpful. it allows us to use Bitcoin as a Data Availability option (though its not practical).

In the future, I think a trade-off can be made like this: Import a temporary storage/cache design on OP_RETURN, miners can change it with a cheaper price, and remove the data when it expires.

@sonnyxsm
Copy link

sonnyxsm commented May 9, 2025

For those who need an easily digestible understanding that supports both arguments.

Most certainly a trade-off for the better.

https://gist.github.com/sonnyxsm/cacd906e7586788dcb5bb45f1e997dec

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment