p2p – Why are there no responses to signaling messages?


Most options are literally initiated by the receiver, by which case all function negotiation does is allow (however not drive) the opposite facet to make use of a specific function:

  • BIP144 (“Segregated Witness (Peer Companies)”) lets a node announce help for segwit serialized transactions/blocks utilizing the NODE_WITNESS service flag. All this implies is that the opposite facet allowed (however not pressured) to request blocks and transactions together with witness information. It will be weird – however not unimaginable – to allow the opposite facet to request witness information from you, however by no means ask for witness information your self.
  • BIP152 (“compact blocks”) are negotiated utilizing sendcmpct. Ignoring high-bandwidth mode, sendcmpct permits (however doesn’t drive) the opposite facet to request BIP152-encoded blocks. It’s completely doable to announce BIP152 help, however then by no means request compact blocks. The excessive bandwidth mode is a function on prime, which is successfully equal to a blanket “auto-request compact blocks” for future introduced blocks till additional discover.
  • BIP111 (“NODE_BLOOM service bit”) instructs nodes that help BIP37 bloom filters to set that service flag. All this implies is that the opposite facet is permitted, however not required, to make use of BIP37 filtering options. One can announce NODE_BLOOM with out ever utilizing the opposite facet’s filtering options (in truth, that is the case for Bitcoin Core at the moment operating with the -peerbloomfilters possibility).
  • BIP133 (“feefilter message”) provides an non-compulsory feefilter message a node can ship to tell the opposite facet it’s not fascinated about transactions with a feerate beneath a sure worth. There isn’t any negotiation for it, and the message is on the market each time each side point out protocol model 70013 or greater. There isn’t any drawback with honoring incoming feefilter messages with out ever sending them.
  • BIP157 (“Shopper Facet Block Filtering”), like BIP111, permits however doesn’t drive a node to announce help for the filtering function. One can help BIP157 however by no means use the opposite facet’s filtering function (or care about it being provided).

In some case the function is sender-initiated, however can nonetheless be negotiated individually in each instructions:

  • BIP155 (“addrv2”) is negotiated utilizing a sendaddrv2 message, which allows (however doesn’t drive) the opposite facet to ship addrv2 messages as a substitute of addr messages. From my studying, it’s not an error to not ship sendaddrv2 your self, however nonetheless honor one obtained from the opposite facet.
  • BIP130 (“sendheaders message”) lets a node inform its friends that they’ll (however are usually not pressured to) announce new blocks utilizing headers slightly than utilizing inv. It’s doable to not ship sendheaders however nonetheless honor requests from others to obtain block bulletins utilizing headers.

So I feel your commentary is slightly the exception than the norm. There are a couple of options that are all-or-nothing, in that they solely work if supported by each friends, which then drive totally different habits on each:

  • BIP330 (“Transaction announcement reconciliation”, the protocol change facet of Erlay) is negotiated utilizing sendtxrcncl, and solely takes impact when each side help it. On this case it is a laborious requirement for the protocol as it’s essentially bidirectional: as a substitute of announce->request, each side construct units of to-be-announced transactions, after which they run a set reconciliation protocol between these units. This merely is senseless except each side decide into it.
  • BIP324 (“Model 2 P2P Encrypted Transport Protocol”) essentially adjustments the protocol itself spoken between friends. It’s introduced utilizing a service flag (previous to connection), however the connection try itself is already distinct. Earlier iterations of this concept concerned beginning the protocol usually, after which negotiating an improve, however this interfered with an necessary privateness design purpose of the protocol. The one possibility is having the protocol be encrypted from the very starting, although previous friends may be detected and supported by reconnecting with the previous protocol.
  • BIP339 (“WTXID-based relay”) is negotiated utilizing a wtxidrelay message despatched in each instructions. When that succeeds, each side should announce transactions utilizing wtxids as a substitute of txids (however should request utilizing txids).

Extra essentially, the aim of function negotiation (slightly than obligatory upgrades) is permitting consumer software program to decide into what options they need to help individually. I do not suppose there’s a lot level in including protocol complexity to cater to the particular use case of solely supporting a function in a single path. If an implementation already bears the complexity value of implementing the function, why would not they need to use it?

Leave a Reply

Your email address will not be published. Required fields are marked *

Back To Top