Overview
Bitcoin transactions are the fundamental units of value transfer in the Bitcoin network. Each transaction consumes previous outputs (inputs) and creates new outputs, forming a directed acyclic graph of value flow. Understanding transaction structure and lifecycle is essential for working with Bitcoin Core.Transaction Structure
Core Components
Every Bitcoin transaction contains:Version Field
- Version 1: Original transaction format
- Version 2: Enables BIP 68 relative timelocks via nSequence
- Future versions may introduce new features
Transaction Identifiers
Transactions have two identifiers: TXID (Transaction ID):- SHA256(SHA256(transaction without witness))
- Used for referencing outputs in inputs
- Remains constant even if witness data changes
- SHA256(SHA256(transaction with witness))
- Used in witness commitment
- Includes witness data in hash
The separation of TXID and WTXID solves transaction malleability for SegWit transactions. Legacy transactions have identical TXID and WTXID.
Transaction Inputs
Input Structure
Outpoint (Previous Output Reference)
Each input references a previous output:- Coinbase inputs: Special case with hash = 0x00…00 and n = 0xFFFFFFFF
- Standard inputs: Reference specific outputs from previous transactions
ScriptSig (Signature Script)
The scriptSig provides data to satisfy the scriptPubKey:- For P2PKH:
<signature> <pubkey> - For P2SH:
<data> <redeemScript> - For SegWit: Typically empty (data in witness)
Sequence Number (nSequence)
Multi-purpose field with several meanings:- If disable flag not set and version ≥ 2:
- Type flag clear: Relative blocks (0-65535)
- Type flag set: Relative time (× 512 seconds)
- nSequence < 0xFFFFFFFE signals RBF
Witness Data
SegWit transactions move signature data to witness:- P2WPKH witness:
<signature> <pubkey> - P2WSH witness:
<item1> <item2> ... <witnessScript> - P2TR witness:
<signature>or script path data
Transaction Outputs
Output Structure
Value (nValue)
- Denominated in satoshis (1 BTC = 100,000,000 satoshis)
- Must be non-negative
- Maximum: 21,000,000 BTC (2,100,000,000,000,000 satoshis)
- Consensus enforced: sum of outputs ≤ sum of inputs (+ block subsidy for coinbase)
ScriptPubKey (Locking Script)
Defines spending conditions: P2PKH (Pay-to-PubKey-Hash):Taproot outputs look indistinguishable from each other, improving privacy. The spending path (key path vs script path) is only revealed when spent.
Lock Time (nLockTime)
Transaction-level timelock:- Value < 500,000,000: Block height
- Value ≥ 500,000,000: Unix timestamp
- Transaction invalid before specified time/height
- Disabled if all inputs have nSequence = 0xFFFFFFFF
Transaction Weight and Size
Weight Calculation
- base_size: Size without witness data
- total_size: Size with witness data
Size Metrics
Virtual Size (vsize):- Fee rate calculation (sat/vByte)
- Block space accounting
- Mempool size limits
Transaction Lifecycle
1. Creation
Transaction creation process:- Select inputs: Choose UTXOs to spend (coin selection)
- Create outputs: Recipient addresses and amounts
- Add change output: Return excess to sender
- Calculate fee: Fee = sum(inputs) - sum(outputs)
- Sign inputs: Create scriptSig/witness data
2. Validation
Before accepting to mempool, nodes validate: Consensus checks:- Inputs exist and are unspent
- No double-spends
- Scripts execute successfully
- Signatures are valid
- Timelocks satisfied
- Minimum fee rate
- Maximum transaction size
- Standard script types
- Dust outputs avoided
- RBF rules respected
3. Mempool Entry
Valid transactions enter the mempool:- Stored in memory with metadata
- Tracked by TXID and WTXID
- Indexed for efficient lookup
- Subject to eviction if mempool is full
Mempool Organization
The mempool tracks:- Parent-child relationships: Transaction dependencies
- Fee rates: For mining prioritization
- Entry time: For CPFP and package evaluation
- Conflicts: For RBF replacement
Bitcoin Core’s mempool uses a sophisticated graph structure (TxGraph) to optimize transaction linearization for mining.
4. Propagation
Transactions propagate through the network:- Node validates transaction
- Announces to peers via
invmessage (TXID or WTXID) - Peers request with
getdataif not already known - Transaction sent via
txmessage - Process repeats at each peer
- Bloom filters (SPV clients)
- Compact block relay
- Transaction packages (CPFP)
5. Mining
Miners select transactions for blocks: Selection criteria:- Fee rate (sat/vByte)
- Ancestor/descendant relationships (CPFP)
- Transaction dependencies
- Start with coinbase transaction
- Add highest fee rate transactions
- Respect block weight limit (4M weight units)
- Ensure all dependencies included
- Calculate merkle root
6. Confirmation
Once included in a block:- 0 confirmations: In valid block, not yet buried
- 1 confirmation: One block on top
- 6 confirmations: Standard for large transactions (recommended)
- 100 confirmations: Coinbase maturity, deep reorg protection
Special Transaction Types
Coinbase Transactions
First transaction in every block:- No real inputs (null outpoint)
- Input scriptSig: block height + arbitrary data
- Output value: block subsidy + fees
- Must mature 100 blocks before spending
OP_RETURN Transactions
Data storage on blockchain:- Provably unspendable
- Up to 80 bytes standard policy
- Used for timestamps, commitments, protocols
Transaction Fees
Fee Calculation
- Not explicitly specified in transaction
- Implied by input/output difference
- Claimed by miner in coinbase
Fee Rate
- Low priority: 1-3 sat/vByte
- Medium priority: 5-20 sat/vByte
- High priority: 20+ sat/vByte
Bitcoin Core estimates fees based on recent block inclusion rates. The
estimatesmartfee RPC provides fee rate recommendations.Fee Bumping Mechanisms
Replace-By-Fee (RBF - BIP 125):- Replace unconfirmed transaction with higher fee version
- Requires original transaction to signal RBF
- Must increase fee by minimum increment
- Spend unconfirmed output with high fee
- Miners consider package fee rate
- No cooperation from original sender needed
Transaction Malleability
Pre-SegWit Malleability
Third parties could modify:- Signature encoding (ECDSA malleability)
- ScriptSig structure
- This changed TXID, breaking dependent transactions
SegWit Fix
Segregated Witness solves malleability:- Witness data separated from transaction
- TXID computed without witness
- Witness data committed separately
- Third parties cannot change TXID
SegWit makes payment channels (Lightning Network) and other Layer 2 solutions practical by eliminating malleability risks.
Transaction Relay Policy
Bitcoin Core enforces standard transaction rules:- Minimum relay fee: 1 sat/vByte (configurable)
- Maximum size: 400,000 weight units
- Maximum sigops: 16,000
- Dust threshold: 546 satoshis for P2WPKH
- Version: 1 or 2 (higher versions non-standard)
Related Concepts
- Consensus Rules - Transaction validation rules
- Wallets - Creating and signing transactions
- Blockchain - How transactions are stored in blocks