Official MASTR logo MASTR Support the work
Contents
← Wiki home

Blockchain fundamentals

Transaction malleability: when an identifier changes

A transaction reference is a hash of a defined serialisation, so the exact fields included matter.

Technical reference · Bitcoin signatures · 1 min read

Research articles and reference entries are published in English. Navigation is available in seven languages.

In this article
  1. Identity and payment intent
  2. What to inspect
  3. Sources and originals

Identity and payment intent

A transaction ID is computed from a specified representation of transaction data. Historically, some changes to signature-related encodings could alter an unconfirmed transaction's identifier without changing the intended payment. Software that assumed the first observed identifier could never change could therefore mis-handle a later reference.

This was particularly relevant to systems preparing transactions that spent the output of another unconfirmed transaction. If the parent reference changed, a dependent transaction constructed with the old identifier no longer referred to the expected output under that identifier.

What to inspect

SegWit separated witness data and changed the relevant hashing arrangements. BIP143 documents the signature-hash calculation for version-0 witness programmes, including the fields committed for a spend. The exact protection depends on the transaction form and signing mode.

Malleability is not a synonym for forging a private-key signature or spending arbitrary coins. It describes how different encodings or permitted modifications affect identity and dependencies. When reading an incident report, identify whether the failure concerned authorisation, accounting, confirmation tracking or a transaction reference. Those require different fixes.

Sources and originals

Related reading

MASTR

Support independent research

The investigations, original evidence and guides here are free to read. Voluntary donations help fund the research and keep MASTR’s tools available.

Open wallet