I created the header_in protocol and added it to node sessions using protocol attachment overloading. The store query engine is exposed by protocol base. Used network::message locator heights generation, passed to database::get hashes(heights) and was quickly generating a proper locator sequence (although with no candidate/confirmed blocks these always start at genesis). Set up a SEND(get_headers) and a SUBSCRIBE(headers) and was immediately iterating over the full chain, storing each header. The store is fully concurrent, so need to worry about bouncing store calls to a common strand. Set up a few log messages and watched it run.