I just started checking out this BIP and I’m curious to hear what others think about it. There’s been some chatter already, but I want to dig into this specific BIP.
Check out these links:
https://x.com/ostrom72158/status/1997537240701112497
https://github.com/ostromcode/The-Cat
I’m in favor of it.
Here’s the reasoning:
This BIP only tweaks the consensus side a little. No new opcodes are added, and it doesn’t make Bitcoin’s scripting language or programmability bigger. What it does is introduce a new idea: it classifies some existing UTXOs as permanently unspendable Non-Monetary UTXOs (NMUs). So, it’s more like a one-time reclassifying of a group of UTXOs instead of a long-term change to Bitcoin’s programming.
For indexers, determinism, and reproducibility:
Instead of making clients handle complex rules for inscriptions and stamps, this BIP uses established tools that the non-monetary data community already relies on, like Ord and Stamps. It specifies exact versions of these indexers and ties them to commits to ensure their behavior is predictable. The NMU set is defined based on chain data accessed through these indexers, rather than just a random hard-coded list of UTXOs. This keeps the consensus rule tied to what’s on the chain while steering clear of embedding inscription logic directly into Bitcoin client software.
It is a bad name, because it can be easily confused with existing OP_CAT proposal: https://github.com/bitcoin/bips/blob/master/bip-0347.mediawiki
I am not, because if you start excluding UTXOs, then it will create a precedent to exclude more and more in the future, which will finally burn all coins in existence, or centralize everything in the hands of filter creators.
Because if you make any rule, which will exclude specific keys, for example "all private keys below 2^32 are weak, and should be unspendable", then you will keep excluding more and more things, while harming regular users. At the same time, if your code will be Open Source, then spammers will know exactly, what is filtered, and what is not. Which means, that they will still use some patterns, but just sacrifice one or two bits of entropy, to bypass your filters.
Also, if you try to invalidate any UTXOs on consensus level, then it will create more spam, because people will call it "censorship", and upload a lot of data on-chain, just to prove, that your filters are not effective enough.
So, to sum up, you can try ideas like that in signet, or other centralized networks. But if you try it on mainnet, then you will end up on an altcoin. People will just make transactions, which will be invalid under your consensus, but valid on old BTC version, and they will immediately split coins, and sell them, just like they did with BCH.
I both like it and don't like it at the same time
I like it because at the very least this is an attempt to address a very serious issue that some of us saw and warned about 2.5 years ago (The severity of the Ordinals Attack is increasing), so at least this is doing something most others didn't bother thinking about!
But at the same time I don't consider these things as actual solutions because they are still not addressing the root of the problem which is the exploit in SegWit which has enabled injecting arbitrary data into the chain with a discount and at any arbitrary size (Stamps can already be mostly prevented with OP_RETURN incentive).
This makes the name of this proposal perfect while also telling us why it won't work. When you don't fix the root cause, it does turn into a game of cat and mouse. When the flaw that allows Ordinals attack to take place continues to exist, the attack will continue to take place whether we mark the outputs unspendable or not. Not to mention they can make changes to avoid that as well, which means we'll have to fork again to extend the list to include more conditions which could then have unintended side effects like accidentally including valid outputs in it as well...
Absolutely against it.
You do not touch the UTXO set. When I say that bitcoin is censorship resistant, I understand exactly that. I don't care if you don't like Ordinals. I don't care if you think dust outputs are spam. Bitcoin is fuck you money, and it is exactly where the "fuck you" property lies in. Information wants to be free and any attempt to restrict it will lead to unintended consequences.
Don't play with fire.
I doubt it'll work as expected, considering
1. There are some TX (that aim to add arbitrary data or create token/NFT) willing to pay very high TX fee rate.
2. There are some ordinal TX which create new UTXO with amount 1000 satoshi or higher. For example, https://ordiscan.com/inscription/5476 create new UTXO with 10000 satoshi.
Edit: this part of BIP is also relevant with my above reply.
I like the idea of keeping the consensus changes as small as possible and treating NMUs more like a one-time reclassification than a shift in Bitcoins programmability. That feels like a reasonable middle ground.
Using pinned versions of Ord and Stamps for determinism also makes sense to me, especially if the goal is to avoid pulling complex inscription logic into Bitcoin clients. Im generally supportive of the idea, though I think it would be good to see more discussion around long-term reproducibility and how the community feels about relying on external indexers, even when theyre clearly defined.
I think this BIP does it wrong, even if the idea isn't bad and I'm all for ideas that mitigate the UTXO set spam a bit.
There are some of these UTXOs generated by these data/spam techniques that are unspendable, and these are those we should worry about. Not to make additional UTXOs unspendable.
But I think no consensus changes are necessary for this. Instead, nodes should be simply enabled to apply their own calculations, by themselves, which allows them to drop UTXOs they recognize as unspendable from their UTXO set. What method they use would be up to them, they could of course use the external tools or any other heuristics they think viable.
If there's a false positive, and a node drops an UTXO which is spendable, this would not be the end of the world. When that UTXO is spent and they receive the transaction, they would detect it first as invalid and not rely it. However, once they receive a block with the transaction, then the node would become aware of their "fault" and they could reconstruct the UTXO with blockchain data.
Basically it would be always a tradeoff: if their UTXO classification algorithm is too aggressive, then they would have higher running costs later to reconstruct the UTXOs and because they wouldn't be able to use the compact block mechanism for blocks containing that txes.
This is a terrible idea. Dust outputs are very often spent, consolidated in large transactions, and find their way into blocks. When a node has discarded a UTXO, then any transaction spending it is considered invalid, and the node must resync with the network from the block that the discarding took place. This can make the user experience significantly worse, with resyncings happening often, going back and fourth in the past. Also, it's not clear to me how the node will distinguish an invalid transaction from an invalid-due-to-discarding.
Just accept the reality that dust outputs are fine, they have always been, and don't make things more complicated than needed. Complexity is the enemy of security, and the UTXO set works in a fairly simple and straight forward way.
I don't mean dust outputs (in the sense of outputs locking a smaller amount than the dust limit), but outputs which cannot be spent because they do not correspond to any private key but are simply fake data, such as the stuff which is stuffed into Stampchain/OLGA transactions.
There seem to be cryptographic methods to distinguish them (or at least some of them) from those that can be spent, if I understood previous discussions with @gmaxwell about that subject correctly. If that is not true and I understood it wrong, nodes could simply run the tools proposed in this "BIP" ("ord", the Stampchain tools etc.) each one independently, without any consensus changes, and delete the UTXOs these mark as data transactions. Nodes could even share snapshots of "invalid UTXOs" to avoid having higher costs due to running tools like "ord" all the time, but without imposing anything of that to other nodes.
In any case, it doesn't make sense at all to "invalidate" those already-unspendable UTXOs by consensus like this "BIP" proposed, and I fully agree with you that the UTXO set should never be "touched" by consensus methods. The nodes themselves should select what they're considering worthwile to preserve and what not. As I wrote already, if the proceed too agressively, they will later have higher syncing costs - just as Knots nodes have which reject OP_RETURN transactions over 83 bytes and later have to accept them anyway when they get included in blocks.
Anyway the definitive solution would be a widespread adoption of Utreexo (where the UTXO set isn't stored entirely, but instead a hash of it).
If an output can't be spent you can just delete it. It's a purely implementation thing with no interoperability concerns, so a description of it wouldn't normally qualify as a BIP. Since it can't be spent no one could ever tell you didn't have it.
well you can't do that literally, since there is no way to look up the block that contained it from the transaction in the block. (not without carrying a txindex which uses many many many times more resources than the UTXO set). If you imagine the node relaying the block to you would need to provide accurate hints on where to find the outputs, then you've almost reinvented UTXOTREE-- except its hints aren't to the block history but to a separate tree accumulator of all the unspent outputs.
This BIP is like burning down the house to get rid of a few cobwebs. Proposing consensus-level confiscation just to fight 'spam' is a slippery slope toward a private club where we pick and choose which coins are valid. It turns Bitcoin into a game of Whack-A-Mole where the only real victim is censorship resistance