BIP 159
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
| 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.
BIP: 324
Layer: Peer Services
Title: Version 2 P2P Encrypted Transport Protocol
Authors: Dhruv Mehta <dhruv@bip324.com>
Tim Ruffing <crypto@timruffing.de>
Jonas Schnelli <dev@jonasschnelli.ch>
Pieter Wuille <bitcoin-dev@wuille.net>
Status: Deployed
Type: Specification
Assigned: 2019-03-08
License: BSD-3-Clause
Version: 1.0.2
Replaces: 151