← Index
ARTEL 21: Bitcoin Lean Policy
ARTEL 21 / Articles

Bitcoin Lean Policy

L0 is Bitcoin. L1 is SegWit. SegWit is a soft fork — optional. Nodes can bound total block data back to 1MB by pruning witness. No consensus change required.

L0 and L1: the two layers of a block

A Bitcoin block contains two layers of data:

L0 — Bitcoin consensus. Non-witness bits. Transaction data, outputs, inputs. The original 1MB block as defined by Satoshi. Every full node validates L0. It is mandatory. It is Bitcoin.

L1 — SegWit consensus. Witness bits. Signatures, scripts, cryptographic proof. Added by SegWit (BIP-141). Bounded by 4MB via the witness discount. Not all nodes store it. It is optional. It is a soft fork.

L0 < 1 MB          (Bitcoin consensus)
L0 + L1 < 4 MB     (SegWit consensus)
                

L1 is anchored to L0. The witness commitment is a hash stored in the coinbase output. The block header depends on L0. But L1 data can be pruned without invalidating the block. The node simply does not save it.

L0 is Bitcoin. L1 is SegWit. SegWit is a soft fork — optional.

The SegWit discount broke the 1MB block

Satoshi defined Bitcoin with 1MB blocks. The fee market was designed for 1MB of financial transactions competing for inclusion. Miners included the highest-fee transactions first. The fee market priced blockspace correctly.

SegWit changed the equation. A witness byte costs 1/4 the fee of a non-witness byte. The discount was designed to reflect a real cost difference: witness data was supposed to be prunable. But inscriptions made witness data permanent. The prunability assumption collapsed. The discount remained.

The result: miners fill the entire 4MB weight envelope. Blocks average 1.5–2.5MB. L0 is typically 300–500KB. The rest is L1 garbage that fills the 4MB envelope because it is cheap. The fee market sees 4MB of blockspace. It should see 1MB of financial transactions.

L0 is 300–500KB. The rest is L1 garbage that fills the 4MB envelope because it is cheap.

The fix: node policy, not consensus

The fix is not a hardfork. It is not a consensus change. It is a node policy.

Nodes bound total block data (L0 + L1) back to 1MB. They validate all blocks fully. They store all blocks fully. But they do not relay or serve blocks exceeding the limit. The witness is just not saved. SegWit fights for what memory is remaining after L0 validity and consensus.

L0 < 1 MB          (Bitcoin consensus)
L0 + L1 < 1 MB     (node policy)
                

This is opt-in. Each node operator chooses whether to enforce the policy. The network remains compatible. Lean nodes and non-lean nodes coexist on the same chain. All transactions are Layer 0 valid. But not all transactions make it into Layer 1 blockspace bounded by 1MB and Nakamoto consensus at the node level.

All transactions are L0 valid. Not all transactions make it into L1 blockspace bounded by 1MB.

The gradient effect

The relay filter works by creating a marginal cost, not a wall. This is the key insight.

A wall creates a binary outcome: comply or die. Miners hit the wall and either break through or give up. The dynamic is adversarial. Miners resist rather than adapt.

A gradient creates a continuous outcome: each kilobyte cut improves propagation. Miners slide toward compliance because each KB has marginal value. The dynamic is cooperative. Miners optimize within the constraint.

The sweet spot is 50% relay coverage. At this threshold, the penalty is real enough to change behavior, but not so severe that miners defect. There is a gradient that rewards incremental compliance.

10% relay: wall. Miners hit it and either break through or give up.
50% relay: gradient. Miners slide toward compliance because each KB they cut improves their propagation.

The sliding scale

The relay limit slides down as the market adapts. Each step forces more L1 garbage out. Each step makes more room for L0 financial transactions.

1.6MB → 65% of blocks must trim. Fee pressure begins.
1.4MB → 89% must trim. Witness bloat squeezed out.
1.2MB → near-full L0. Financial transactions dominate.
1.0MB → L0 always filled. Pre-SegWit economics restored.
                

Each step is a gradient, not a wall. The market finds the right level. Nodes vote with their config. The sliding scale is the mechanism that gets us from “blockspace is too cheap” to “L0 is always filled.”

1.6MB is the first step. The goal is L0 always filled.

Fee pressure returns

Miners face a trade-off:

Mine >1.6MB: More transactions, but slower propagation, higher orphan risk, lower fee density.

Mine ≤1.6MB: Fewer transactions, but faster propagation, lower orphan risk, higher fee density.

Rational miners fill the constrained space with the highest-fee transactions first. This forces competition over L0 fees. The cost to spam L0 via OP_RETURN becomes more costly due to conserved and finite 1MB blockspace across all layers in total.

The more nodes that enforce this policy, the more external influence it has on the network. Totally backwards compatible and consensus valid. Just not forwards compatible. Let the 4MB nodes store everything. We filter to 1MB max as valid.

The cost to spam L0 becomes more costly due to conserved and finite 1MB blockspace across all layers.

Lean Data: revert the OP_RETURN uncapping

Bitcoin Core v30.0 (May 2025) raised MAX_OP_RETURN_RELAY from 83 bytes to 100,000 bytes and allowed multiple OP_RETURN outputs per transaction. This enables chain bloat from data storage.

The fix: revert to the pre-v30.0 limit. The existing IsStandardTx() + -datacarriersize config already handles everything. Just change the default from 100,000 back to 83.

All financial transaction types (P2PKH, P2SH, P2WPKH, P2WSH, P2TR) are unaffected. Only data storage transactions are restricted. This combats L1 spam, especially when 1MB is enforced at the L2/LN level for valid channel state.

Revert the OP_RETURN uncapping. Financial transactions compete for finite blockspace. Data pays full price.

No hardfork needed

A POW hardfork to fix spam is not necessary. All it does is inject fiat into the thermodynamic curve by manually adjusting difficulty. Invariance is lost.

The lean policy achieves the same result through node policy. No consensus change. No hardfork. No injection of fiat into the thermodynamic curve. The invariance of proof-of-work is preserved.

At some point, the consensus change will be feasible by logic. A node running better Bitcoin physics will always outlast those who discount their bits.

A node running better Bitcoin physics will always outlast those who discount their bits.

Implementation

Single commit on Bitcoin Core. 7 files, ~72 lines changed.

The relay filter checks total block size (L0 + L1) in two places: block announcement (NewPoWValidBlock) and block serving (ProcessGetBlockData). If the block exceeds the limit, it is not announced to peers and not served on request. The block is still validated and stored.

Usage:

bitcoind -relayblocksize=1600000 -datacarriersize=83    # lean everything
bitcoind -relayblocksize=1600000                        # lean blocks only
bitcoind -datacarriersize=83                            # lean data only
                
Seven files. Seventy-two lines. No consensus change. No hardfork.
See also
The Fee Market That Doesn’t Price Finality · L0 / L1 Consensus · The 0.75 MB Gap