BIP: 159
  Layer: Peer Services
  Title: NODE_NETWORK_LIMITED service bit
  Author: Jonas Schnelli 
  Comments-Summary: No comments yet.
  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0159
  Status: Final
  Type: Standards Track
  Created: 2017-05-11
  License: BSD-2-Clause
== Abstract == Define a service bit that allows pruned peers to signal their limited services. ==Motivation== Pruned peers can offer the same services as traditional peers, except that of serving all historical blocks. Bitcoin right now only offers the NODE_NETWORK service bit to indicate that a peer can serve all historical blocks. # Pruned peers can relay blocks, headers, transactions, and addresses, but they only guarantee serving a minimum number of historical blocks; thus, they should have a way to announce their service(s) # Peers no longer in initial block download should consider connecting some of their outbound connections to pruned peers, to allow other peers to bootstrap from non-pruned peers == Specification == === New service bit === This BIP proposes a new service bit {|class="wikitable" |- | NODE_NETWORK_LIMITED || bit 10 (0x400) || If signaled, the peer MUST be capable of serving at least the last 288 blocks (~2 days). |} Pruned/limited peers MUST NOT set a service bit that signals serving the complete block chain (e.g., NODE_NETWORK). Rationale: nodes that signal serving the complete block chain may also signal NODE_NETWORK_LIMITED. A safety buffer of 144 blocks to handle chain reorganizations SHOULD be taken into account when connecting to a peer signaling the NODE_NETWORK_LIMITED service bit. === Address relay === Full nodes following this BIP SHOULD relay address/services (addr message) from peers they would connect to (including peers signaling NODE_NETWORK_LIMITED). === Counter-measures for peer fingerprinting === Peers may have different prune depths (depending on their configuration, disk space, etc.), which can result in a fingerprinting weakness (finding the prune depth through getdata requests). Pruned nodes should therefore avoid leaking the prune depth and SHOULD NOT serve blocks deeper than the signaled NODE_NETWORK_LIMITED threshold of 288 blocks. === Risks === Pruned peers following this BIP may consume more outbound bandwidth. Light clients (and such) who are not checking the nServiceFlags (service bits) from a relayed addr-message may unwillingly connect to a pruned peer and ask for (filtered) blocks at a depth below their pruned depth. Light clients should therefore check the service bits (and eventually connect to peers signaling NODE_NETWORK_LIMITED and not also signaling serving the full block chain, if they require [filtered] blocks around the tip). Light clients obtaining peer IPs though DNS seed should use the DNS filtering option. == Compatibility == This proposal is backward compatible. == Reference implementation == * https://github.com/bitcoin/bitcoin/pull/11740 (signaling) * https://github.com/bitcoin/bitcoin/pull/10387 (connection and relay) == Copyright == This BIP is licensed under the 2-clause BSD license.