Bitcoin full node and query server

Oct 28, 2025

View in context in the libbitcoin Slack #general mirror.

evoskuil20:50
The boost approach is based on mapping c++ classes in/out of the json DOM (boost::json::value) abstraction. This generally comes down to trivial almost declarative mappings of objects, and looks very much like the custom serializer. But with the custom types annotated you get bidirectional streaming (and non-streaming), for any such types. And common types are automatic (like a vector of array of strings for example). The objective has always been to annotate any transported types, which we implemented a couple years ago for all of the system::chain objects (like block, tx, etc.) just to verify it. These currently run in our system unit tests using non-streaming parse/serialize. To implement this for json-rpc just required creating a c++ object model for the required classes, which are network::json::request and ::response. These represent the structure of RPC calls and responses, with parameters (::request::params) as an array [...] or object {...} representation, and similar for ::response::result. The contained parameters can be any c++ objects/types, represented in JSON. The intent was to contain parameter values as strings and defer parse/serialize. So the custom parse/serialize would be used for the request/response and boost::json for parameter values.