“Trustless” is relative. Every Bitcoin client chooses a security model: what it verifies locally vs what it assumes about peers, miners, or snapshots.
Why this matters
Product builders who default to third-party APIs without labeling trust boundaries ship wallets that fail silently under eclipse, dishonest servers, or chain forks.
Full nodes
A validating full node checks proof-of-work, scripts, and economic history rules (with pruning/assumevalid nuances). Highest assurance; highest cost.
SPV and filters
Classic SPV verifies proof-of-work headers and merkle proofs for transactions of interest, trusting that miners will not feed an invalid-but-high-work chain forever without fraud proofs.
BIP157/158 compact block filters let light clients request filters and download blocks of interest with better privacy than BIP37 bloom filters — still not full validation.
AssumeUTXO
AssumeUTXO helps nodes sync faster by loading a committed UTXO snapshot, then background-validating. It trades bootstrap time for carefully scoped assumptions until validation completes.
Common mistakes
- Calling any API-backed wallet “non-custodial and trustless”
- Ignoring that light clients can be lied to about absence of transactions
- Skipping background validation after snapshot sync in ops runbooks