Bitcoin full node and query server

Nov 20, 2025

View in context in the libbitcoin Slack #general mirror.

evoskuil22:38
Along with http, peer messaging is now running through the new generated interface dispatch. I had a failure on the first attempt, where the version message was getting handled, but the verack message failed to route. Turns out I had naively use the method names here, as opposed to the message names. This defines that named message gets routed to what method given what parameters. So this is the corrected version:
static constexpr std::tuple methods
{
    method<"addr", messages::peer::address::cptr>{},
    method<"alert", messages::peer::alert::cptr>{},
    method<"block", messages::peer::block::cptr>{},
    method<"filteradd", messages::peer::bloom_filter_add::cptr>{},
    method<"filterclear", messages::peer::bloom_filter_clear::cptr>{},
    method<"filterload", messages::peer::bloom_filter_load::cptr>{},
    method<"cfilter", messages::peer::client_filter::cptr>{},
    method<"cfcheckpt", messages::peer::client_filter_checkpoint::cptr>{},
    method<"cfheaders", messages::peer::client_filter_headers::cptr>{},
    method<"cmpctblock", messages::peer::compact_block::cptr>{},
    method<"blocktxn", messages::peer::compact_transactions::cptr>{},
    method<"feefilter", messages::peer::fee_filter::cptr>{},
    method<"getaddr", messages::peer::get_address::cptr>{},
    method<"getblocks", messages::peer::get_blocks::cptr>{},
    method<"getcfcheckpt", messages::peer::get_client_filter_checkpoint::cptr>{},
    method<"getcfheaders", messages::peer::get_client_filter_headers::cptr>{},
    method<"getcfilters", messages::peer::get_client_filters::cptr>{},
    method<"getblocktxn", messages::peer::get_compact_transactions::cptr>{},
    method<"getdata", messages::peer::get_data::cptr>{},
    method<"getheaders", messages::peer::get_headers::cptr>{},
    method<"headers", messages::peer::headers::cptr>{},
    method<"inv", messages::peer::inventory::cptr>{},
    method<"mempool", messages::peer::memory_pool::cptr>{},
    method<"merkleblock", messages::peer::merkle_block::cptr>{},
    method<"notfound", messages::peer::not_found::cptr>{},
    method<"ping", messages::peer::ping::cptr>{},
    method<"pong", messages::peer::pong::cptr>{},
    method<"reject", messages::peer::reject::cptr>{},
    method<"sendaddrv2", messages::peer::send_address_v2::cptr>{},
    method<"sendcmpct", messages::peer::send_compact::cptr>{},
    method<"sendheaders", messages::peer::send_headers::cptr>{},
    method<"tx", messages::peer::transaction::cptr>{},
    method<"version", messages::peer::version::cptr>{},
    method<"verack", messages::peer::version_acknowledge::cptr>{},
    method<"wtxidrelay", messages::peer::witness_tx_id_relay::cptr>{}
};
Where the "verack" message routes to the version_acknowledge message subscribers. Should have a read on performance impact soon.
(edited)