pull down to refresh

The Quadratic Sighash Problem

Before SegWit, there was a serious scalability issue in Bitcoin called the Quadratic Sighash problem.
It made signature validation slow, especially for transactions with many inputs, and opened the door to denial-of-service attacks.

What Happened?

In 2015, F2Pool mined a block containing one huge “mega-transaction” (≈1 MB, 522 inputs).
It took about 25 seconds for a full node to validate just that transaction.
Slow validation means fewer people can run full nodes
→ which increases the risk of centralization.

Why Does It Happen?

Imagine a transaction with 2 inputs.
To verify each signature, Bitcoin must hash a modified version of the transaction.
So for 2 inputs, we hash 2 different messages:
Input #1 → message #1  
Input #2 → message #2  
So far, this looks linear:
2 inputs → 2 messages

The Trick: Each Message Contains All Inputs

When signing input i:
  • include every input
  • but remove scriptSig from all other inputs
    (so they can't change the message being signed)
That means each input needs its own version of the transaction to hash.
So with 2 inputs:
2 inputs × 2 messages = 4 hashing operations

Scaling Up

Now imagine 3 inputs:
Each message now contains 3 inputs:
3 inputs × 3 messages = 9 units of work
In general:
n inputs  →  n × n  =  n²  hashing work
That’s why it’s called Quadratic Sighash -> cost grows as n².

Example Table

InputsMessagesTotal Work
111
224
339
1010100
10010010,000

Why This Was Dangerous

A miner could include a single huge multi-input tx that takes seconds/minutes to validate.
  • Slow full nodes can’t keep up
  • They fall behind the chain tip
  • They aren’t participating in consensus
  • Network centralizes to only fast validators

Why "just limit transaction size" failed

Proposed fix: cap tx size to 100 KB. Rejected because: ❌ Doesn't fix root cause ❌ Just delays the attack ❌ Breaks legitimate large-input transactions (eg batching)

SegWit Fixed This

SegWit changed how transactions are serialized and hashed. It reduced sighash cost back to O(n) (we’ll explain it in the next posts)
Follow @Bitcoin_Devs for more technical explainers.