BitcoinMachine
TERM_DEF // TRANSACTION / WITNESS
WITNESS
Witness. Per-input field introduced by SegWit holding signatures and witness scripts outside the legacy serialization.

This page sits in the Transaction section — How money moves: inputs, outputs, fees, signatures, sighash flags, and the formats that wrap them. Read on for what it is, why it exists, how it works under the hood, and what to watch out for.
Witness — at a glance
TRANSACTION
Witness is part of the SERIALIZATION sub-family of transaction-level concepts. The signature(s) and other input-unlock data, segregated from the legacy transaction body into its own stack-of-stacks section. Per-input field introduced by SegWit holding signatures and witness scripts outside the legacy serialization.
Why it exists
DESIGN
Moving signatures out of scriptSig fixes malleability (txid no longer changes if a signature is re-encoded) AND lets the witness data carry a 4× weight discount, effectively expanding block capacity.
Mechanism
HOW IT WORKS
For each input, the witness contains a list of stack items (the script's input data, not opcodes). For P2WPKH: 2 items — signature + pubkey. For P2WSH: M items + the redeemScript. For P2TR key-path: 1 item — the Schnorr signature.
1. Wallet selects UTXOs whose total value covers the spend amount + estimated fee (coin selection). 2. Wallet builds the transaction body: version, inputs (each with prev txid + vout + sequence), outputs (each with value + scriptPubKey), locktime. 3. Wallet computes the sighash for each input (which parts of the tx the signature commits to — controlled by the SIGHASH flag). 4. Wallet signs each input with the right private key. Witness/scriptSig is populated with the resulting signatures + pubkeys. 5. Tx is broadcast to peers. Mempool propagation: tens of seconds globally. 6. A miner includes it in a block. Confirmation count grows by 1 per block; after ~6 the tx is effectively final.
Witness — SERIALIZATION
EXAMPLE
P2WPKH witness: 0x02 ← 2 items follow 0x47 ← 71 bytes <71-byte ECDSA signature + sighash type> 0x21 ← 33 bytes <33-byte compressed pubkey> P2TR key-path witness: 0x01 ← 1 item 0x40 ← 64 bytes (or 65 with sighash byte) <64-byte Schnorr signature>
ATOMIC
A transaction is either fully accepted into a block or fully rejected. There is no partial spend.
IMMUTABLE INPUTS
A UTXO can only ever be spent once. After that, it is permanently consumed.
NO BALANCES
Bitcoin tracks UTXOs, not balances. Your wallet computes a balance by summing the UTXOs it controls.
IRREVERSIBLE
After ~6 confirmations (~1 hour), reversing the tx would require more proof-of-work than the honest network produces.
Things that catch people out
PITFALLS
  • address-reuse/">Address reuse degrades privacy — every reuse links more of your UTXOs together publicly. Modern wallets generate a fresh address per receive.
  • Fee estimation matters: under-pay and your tx sits in the mempool for hours; over-pay and you tip the miner more than necessary. Use a fee estimator.
  • "Change outputs" must go back to a fresh address you control. A missing output/">change output sends the difference to the miner as fee — a known footgun.
  • RBF (Replace-By-Fee) lets you re-broadcast a tx with a higher fee. Useful for stuck txs but means a 0-confirmation tx is never truly final.

TERMINOLOGY
Witness
Per-input field introduced by SegWit holding signatures and witness scripts outside the legacy serialization.
Transaction (Tx)
A signed payload spending one or more UTXOs and creating new ones; every state change in Bitcoin is a tx.
Raw Transaction
The hex-serialized bytes of a transaction, ready to broadcast or analyze.
Transaction ID (TXID)
HASH256 of a transaction's pre-witness serialization; used to reference outputs by (txid, vout).
wTXID (Witness TXID)
HASH256 of the full transaction including witness data; commits to signatures and used in the witness commitment.
Input
A reference to a previous output being spent, plus the data (scriptSig/witness) authorizing the spend.
Output
An (amount, scriptPubKey) pair created by a transaction; spendable later by a tx whose input references it.
UTXO (Unspent Transaction Output)
An output that hasn't been spent yet; your "balance" is the sum of UTXOs you can sign for.