Skip to content

Commit

Permalink
Merge pull request bitcoin#566 from jonasschnelli/node_network_limited
Browse files Browse the repository at this point in the history
BIP 159: NODE_NETWORK_LIMITED service bits
  • Loading branch information
luke-jr authored Aug 7, 2017
2 parents 545fd89 + ec403b0 commit ccc435f
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 0 deletions.
7 changes: 7 additions & 0 deletions README.mediawiki
Original file line number Diff line number Diff line change
Expand Up @@ -708,6 +708,13 @@ Those proposing changes should consider that ultimately consent may rest with th
| Standard
| Draft
|-
| [[bip-0159.mediawiki|159]]
| Peer Services
| NODE_NETWORK_LIMITED service bits
| Jonas Schnelli
| Standard
| Draft
|-
| [[bip-0171.mediawiki|171]]
| Applications
| Currency/exchange rate information API
Expand Down
66 changes: 66 additions & 0 deletions bip-0159.mediawiki
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<pre>
BIP: 159
Layer: Peer Services
Title: NODE_NETWORK_LIMITED service bits
Author: Jonas Schnelli <[email protected]>
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0159
Status: Draft
Type: Standards Track
Created: 2017-05-11
License: BSD-2-Clause
</pre>

== Abstract ==

Define service bits that allow pruned peers to signal their limited services

==Motivation==

Pruned peers can offer the same services as traditional peer except of serving all historical blocks.
Bitcoin right now only offers the NODE_NETWORK service bit which indicates that a peer can serve
all historical blocks.
# Pruned peers can relay blocks, headers, transactions, addresses and can serve a limited number of historical blocks, thus they should have a way how to announce their service(s)
# Peers no longer in initial block download should consider connection some of its outbound connections to pruned peers to allow other peers to bootstrap from non-pruned peers
== Specification ==

=== New service bits ===

This BIP proposes two new service bits

{|class="wikitable"
|-
| NODE_NETWORK_LIMITED_LOW || If signaled, the peer <I>MUST</I> be capable of serving at least the last 288 blocks (~2 day / the current minimum limit for Bitcoin Core).
|-
| NODE_NETWORK_LIMITED_HIGH || If signaled, the peer <I>MUST</i> be capable of serving at least the last 1152 blocks (~8 days)
|}

The required behaviour when signaling both bits (<code>NODE_NETWORK_LIMITED_LOW & NODE_NETWORK_LIMITED_HIGH</code>) is currently undefined.

A safety buffer of additional 144 blocks to handle chain reorganizations <I>SHOULD</I> be taken into account when connecting to a peer signaling <code>NODE_NETWORK_LIMITED_*</code> service bits.

=== Address relay ===

Full nodes following this BIP <I>SHOULD</I> relay address/services (<code>addr</code> message) from peers they would connect to (including peers signaling <code>NODE_NETWORK_LIMITED_*</code>).

=== Risks ===

Pruned peers following this BIP may consume more outbound bandwidth.

Light clients (and such) who are not checking the <code>nServiceFlags</code> (service bits) from a relayed <code>addr</code>-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 <code>NODE_NETWORK_LIMITED_*</code> 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/10387

== References ==

== Copyright ==

This BIP is licensed under the 2-clause BSD license.

0 comments on commit ccc435f

Please sign in to comment.