BIP 159: NODE_NETWORK_LIMITED service bit
2017-05-11
View on GitHub
  BIP: 159
  Layer: Peer Services
  Title: NODE_NETWORK_LIMITED service bit
  Author: Jonas Schnelli <dev@jonasschnelli.ch>
  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.

  1. 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)
  2. 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

|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 unwittingly connect to a pruned peer and ask for (filtered) blocks at a depth below the peer’s pruned depth. Light clients should therefore check the service bits and either (1) connect to peers signaling NODE_NETWORK_LIMITED that preferably do not also signal serving the full block chain, if they only require (filtered) blocks around the tip, or (2) connect to peers signaling serving the full block chain if they need data older than the latest 288 blocks. Light clients obtaining peer IPs through DNS seeds 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.


Updated

2025-03-03

See an issue with rendering or formatting? Submit an issue on GitHub

Do you find this site useful? Please consider donating some sats to support ongoing development.

bips.dev is presented by nickmonad

All content is owned and licensed by the respective author(s). This website makes no claim of ownership.