David Bakin’s programming blog.


Blocksifter Roadmap, 2025

2025 March: BlockSifter project rebooted! This is the (beginning) of the BlockSifter roadmap. It’ll be running on three tracks simultaneously, interleaved.

And there will be progress reports, project news, and interesting findings posted at X @BlockSifter (coming soon).

[This post will be updated with both checkmarks for tasks completed, and new tasks added to describe future work.]

BlockSifter Roadmap, 2025

Goal

Bitcoin node capable of

  • accepting and validating blocks
    • including IBL (initial block load)
  • accepting and validating transactions
    • and keeping a mempool up-to-date
    • and broadcasting transactions to the Bitcoin network
  • handling all Bitcoin semantics (“consensus rules”) from the beginning to date
    • all script execution
    • segwit
    • taproot
    • SPV
    • filters
  • full participation in Bitcoin network
  • Bitcoin Core RPC capability

but not:

  • no wallet functionality
  • no (production) mining capability
    • mining only as a demonstration

Three tracks to be intertwined:

  1. Bitcoin functionality
  2. Project/repo maintenance (e.g., CI)
  3. Software engineering of this node software

Blocksifter will be an educational resource:

  • readable (and maintainable, and extensible) code
  • multiple ways of doing most functionality

Bitcoin Semantics track

  • Initial block/transaction processing
    • Fetch block given height or hash
      • Using blockchain.com API
      • Using bitcoin core RPC API
    • Parse block into transactions, validate block hash
    • Parse transaction into components, validate signature
    • Persist blocks / Fetch blocks
    • Persist transactions / Fetch transactions
    • CLI tools to validate block/transaction store
  • General blockchain information fetch
    • Height, tips, latest block header, etc.
    • From multiple sources
  • Initial Bitcoin P2P Network processing
    • Join network, exchange initial messages
    • Get full blockchain headers (and persist them)
    • Get a block from the network
  • TBD

Project Maintenance track

  • Proper CMake configuration for two initial toolsets
    • Windows using MinGW w/ gcc
    • Linux (via WSL) using Clang
  • Add toolset and scripts for Gitlab CI
  • Add build configurations for
    • Sanitizers
    • Profiling
  • Add additional toolsets
    • Windows MinGW w/ Clang
    • Linux (via WSL) using gcc\
  • TBD

Software Engineering track

  • Pick / build or fetch / use libraries for:
    • REST-style networking
    • P2P-style networking
    • Crypto (hashing, signature validation)
  • Create initial platform-insulating wrappers for
    • “system” call
    • file system abstraction
      • something that will, e.g., remember file name of open file you’re using
  • Create initial foundation libraries for
    • semantic logging
    • configuration
  • Put RPC vs REST APIs behind library
    • each individual call has a “client” side that takes standard parameters, returns standardized format result (JSON or maybe something more C++ specific, i.e. a custom struct
    • each “provider” has a plugin that will include getting IP address (from configuration or elsewhere)
    • each call+provider combination supported has a bridge/relation that takes the standard parameters into the particular template for the call, and the reverse for the results
    • all plugging into a library which
      • selects the client/relation/provider combination desired
      • handles the networking
      • handles sessions, history, logging, retry, following “next”/“prev” links, etc.
    • with multiple examples of each
  • Put block fetch / store / load behind interfaces
    • with multiple examples of each
  • Create bibliography / resource directory of all Bitcoin and software resources used
  • TBD