{"number":159,"title":"NODE_NETWORK_LIMITED service bit","authors":["Jonas Schnelli"],"status":"Deployed","type":"Specification","layer":"Peer Services","created":"2017-05-11","license":"BSD-2-Clause","requires":[],"replaces":[],"replacedBy":[],"discussion":[],"abstract":"Define a service bit that allows pruned peers to signal their limited services.","eli5":"Defines a signal that pruned nodes, which keep only recent blocks to save disk space, can use to advertise that they can serve recent history. This lets pruned nodes contribute more to the network while making clear they cannot provide the full blockchain.","categories":["network"],"filename":"bip-0159.mediawiki","githubUrl":"https://github.com/bitcoin/bips/blob/master/bip-0159.mediawiki","format":"mediawiki","readingMinutes":2,"inbound":0,"revisions":20,"impact":31,"core":false,"references":[],"lastModified":"2025-10-08","html":"<h2 id=\"abstract\">Abstract</h2>\n<p>Define a service bit that allows pruned peers to signal their limited services.</p>\n<h2 id=\"motivation\">Motivation</h2>\n<p>Pruned peers can offer the same services as traditional peers, except that of serving all historical blocks. Bitcoin right now only offers the <code>NODE_NETWORK</code> service bit to indicate that a peer can serve all historical blocks.</p>\n<ol><li>\nPruned 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)\n</li></ol>\n<ol><li>\nPeers 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\n</li></ol>\n<h2 id=\"specification\">Specification</h2>\n<h3 id=\"new-service-bit\">New service bit</h3>\n<p>This BIP proposes a new service bit</p>\n<div class=\"table-wrap\"><table><tbody><tr><td>NODE_NETWORK_LIMITED</td><td>bit 10 (0x400)</td><td>If signaled, the peer <I>MUST</I> be capable of serving at least the last 288 blocks (~2 days).</td></tr></tbody></table></div>\n<p>Pruned/limited peers <I>MUST NOT</I> set a service bit that signals serving the complete block chain (e.g., <code>NODE_NETWORK</code>). Rationale: nodes that signal serving the complete block chain may also signal <code>NODE_NETWORK_LIMITED</code>.</p>\n<p>A safety buffer of 144 blocks to handle chain reorganizations <I>SHOULD</I> be taken into account when connecting to a peer signaling the <code>NODE_NETWORK_LIMITED</code> service bit.</p>\n<h3 id=\"address-relay\">Address relay</h3>\n<p>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>).</p>\n<h3 id=\"counter-measures-for-peer-fingerprinting\">Counter-measures for peer fingerprinting</h3>\n<p>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).</p>\n<p>Pruned nodes should therefore avoid leaking the prune depth and <I>SHOULD NOT</I> serve blocks deeper than the signaled <code>NODE_NETWORK_LIMITED</code> threshold of 288 blocks.</p>\n<h3 id=\"risks\">Risks</h3>\n<p>Pruned peers following this BIP may consume more outbound bandwidth.</p>\n<p>Light clients (and such) who are not checking the <code>nServiceFlags</code> (service bits) from a relayed <code>addr</code>-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 <code>NODE_NETWORK_LIMITED</code> 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.</p>\n<h2 id=\"compatibility\">Compatibility</h2>\n<p>This proposal is backward compatible.</p>\n<h2 id=\"reference-implementation\">Reference implementation</h2>\n<ul><li>\n<a href=\"https://github.com/bitcoin/bitcoin/pull/11740\">https://github.com/bitcoin/bitcoin/pull/11740</a> (signaling)\n</li></ul>\n<ul><li>\n<a href=\"https://github.com/bitcoin/bitcoin/pull/10387\">https://github.com/bitcoin/bitcoin/pull/10387</a> (connection and relay)\n</li></ul>\n<h2 id=\"copyright\">Copyright</h2>\n<p>This BIP is licensed under the 2-clause BSD license.</p>","toc":[{"id":"abstract","title":"Abstract","level":2},{"id":"motivation","title":"Motivation","level":2},{"id":"specification","title":"Specification","level":2},{"id":"new-service-bit","title":"New service bit","level":3},{"id":"address-relay","title":"Address relay","level":3},{"id":"counter-measures-for-peer-fingerprinting","title":"Counter-measures for peer fingerprinting","level":3},{"id":"risks","title":"Risks","level":3},{"id":"compatibility","title":"Compatibility","level":2},{"id":"reference-implementation","title":"Reference implementation","level":2},{"id":"copyright","title":"Copyright","level":2}],"history":{"totalCommits":20,"firstCommit":"2017-08-07T19:29:04+02:00","lastUpdated":"2025-10-08T14:59:36-07:00","events":[{"sha":"24e96e870fffaa257b465ce1f0370c14aac588e8","date":"2025-10-08T14:59:36-07:00","author":"Murch","message":"process: Created ↦ Assigned","url":"https://github.com/bitcoin/bips/commit/24e96e870fffaa257b465ce1f0370c14aac588e8","kind":"edit"},{"sha":"5207ef92a52d0b8902895b0dbb40823a4d698ec9","date":"2025-04-11T20:08:17-07:00","author":"Murch","message":"process: Author ↦ Authors","url":"https://github.com/bitcoin/bips/commit/5207ef92a52d0b8902895b0dbb40823a4d698ec9","kind":"edit"},{"sha":"59730dec4fb641a41589aa1b91d3c452f13e0e36","date":"2025-04-11T20:05:13-07:00","author":"Murch","message":"process: Remove Comments-URI and -Summary","url":"https://github.com/bitcoin/bips/commit/59730dec4fb641a41589aa1b91d3c452f13e0e36","kind":"edit"},{"sha":"a233bde4af52c6a11269e2e6dd9707abce441ffe","date":"2025-04-11T18:19:21-07:00","author":"Murch","message":"process: Standards Track ↦ Specification","url":"https://github.com/bitcoin/bips/commit/a233bde4af52c6a11269e2e6dd9707abce441ffe","kind":"edit"},{"sha":"5d3ceb37734f80b2ec206fc94245e3bfd6d5b0f0","date":"2025-04-11T18:08:44-07:00","author":"Murch","message":"process: Final/Active ↦ Deployed","url":"https://github.com/bitcoin/bips/commit/5d3ceb37734f80b2ec206fc94245e3bfd6d5b0f0","kind":"status"},{"sha":"d44f70e77a6b477eed8b1d1fa8d95fb6dc1aaa35","date":"2025-02-25T17:45:25-05:00","author":"Murch","message":"BIP159 Risks section: clarifications and fixups","url":"https://github.com/bitcoin/bips/commit/d44f70e77a6b477eed8b1d1fa8d95fb6dc1aaa35","kind":"edit"},{"sha":"22f7f0477c825031a8be80589464766cb2eb2559","date":"2025-02-17T11:10:58-06:00","author":"Jon Atack","message":"BIP159: unwillingly -> unwittingly","url":"https://github.com/bitcoin/bips/commit/22f7f0477c825031a8be80589464766cb2eb2559","kind":"edit"},{"sha":"5b85dbe120c2e770bde950aff638ca6084094752","date":"2025-02-14T14:39:44-06:00","author":"Jon Atack","message":"BIP159: editorial fixups","url":"https://github.com/bitcoin/bips/commit/5b85dbe120c2e770bde950aff638ca6084094752","kind":"edit"},{"sha":"8118a14dc813d895ff317604342808391219ce5b","date":"2025-02-14T14:26:22-06:00","author":"Jon Atack","message":"BIP159: clarify pruned means not signaling serving complete block chain","url":"https://github.com/bitcoin/bips/commit/8118a14dc813d895ff317604342808391219ce5b","kind":"status"},{"sha":"3f86dc4ea6c475469b4f4a6cbf5409238110377c","date":"2025-02-14T14:22:46-06:00","author":"Jon Atack","message":"BIP159: emphasize minimum number of blocks","url":"https://github.com/bitcoin/bips/commit/3f86dc4ea6c475469b4f4a6cbf5409238110377c","kind":"edit"},{"sha":"9a56d3544eac1f949a747c251810f7a440d63fb9","date":"2024-07-25T18:35:39+03:00","author":"Orfeas Stefanos Thyfronitis Litos","message":"Remove trailing whitespace from all BIPs","url":"https://github.com/bitcoin/bips/commit/9a56d3544eac1f949a747c251810f7a440d63fb9","kind":"edit"},{"sha":"dfacb8de6ac5f6636c3d3fd55cf817c0b73cacea","date":"2024-07-17T22:00:11+02:00","author":"Jonas Schnelli","message":"159: Mark as final","url":"https://github.com/bitcoin/bips/commit/dfacb8de6ac5f6636c3d3fd55cf817c0b73cacea","kind":"status"},{"sha":"6c99f7a3efa86b995fa73156cf2af73b497d5c3a","date":"2018-10-28T07:01:19+03:30","author":"Coding Enthusiast","message":"bip-0159: Fix NODE_NETWORK_LIMITED threshold","url":"https://github.com/bitcoin/bips/commit/6c99f7a3efa86b995fa73156cf2af73b497d5c3a","kind":"edit"},{"sha":"fa9a4f307eb241b69f04681c3da35b7f69cf9fd5","date":"2017-12-19T14:01:35-05:00","author":"MarcoFalke","message":"bip159: Add missing link to implementation","url":"https://github.com/bitcoin/bips/commit/fa9a4f307eb241b69f04681c3da35b7f69cf9fd5","kind":"edit"},{"sha":"fa810b3bff542200c50c4fd33fcfd982142b63ed","date":"2017-12-19T13:52:46-05:00","author":"MarcoFalke","message":"bip159: Clarify that there is only one threshold","url":"https://github.com/bitcoin/bips/commit/fa810b3bff542200c50c4fd33fcfd982142b63ed","kind":"edit"},{"sha":"8b971ea4deb5c99bbf99914b84d687982000ba22","date":"2017-09-23T09:23:38-06:00","author":"Jonas Schnelli","message":"Remove second service bit from NODE_NETWORK_LIMITED/BIP159","url":"https://github.com/bitcoin/bips/commit/8b971ea4deb5c99bbf99914b84d687982000ba22","kind":"edit"},{"sha":"ee45bbc7c4962d4b551d730469749bb35df18757","date":"2017-08-11T21:25:14+02:00","author":"Jonas Schnelli","message":"Add fingerprinting countermeasures part","url":"https://github.com/bitcoin/bips/commit/ee45bbc7c4962d4b551d730469749bb35df18757","kind":"edit"},{"sha":"f1e884b75acb577a2aecb3f29323c767595efaf8","date":"2017-08-08T22:20:37+02:00","author":"Jonas Schnelli","message":"Allow to signal both bits and treat them independently","url":"https://github.com/bitcoin/bips/commit/f1e884b75acb577a2aecb3f29323c767595efaf8","kind":"edit"},{"sha":"677e6e31efdc0d2ede7a0f6d2c2ae4fee0a60416","date":"2017-08-08T10:38:54+02:00","author":"Jonas Schnelli","message":"Set bit 10 and 11 for NODE_NETWORK_LIMITED_LOW, HIGH","url":"https://github.com/bitcoin/bips/commit/677e6e31efdc0d2ede7a0f6d2c2ae4fee0a60416","kind":"edit"},{"sha":"ec403b0ac53bbf248493da219a191df494795a4a","date":"2017-08-07T19:29:04+02:00","author":"Jonas Schnelli","message":"Add BIP NODE_NETWORK_LIMITED service bits","url":"https://github.com/bitcoin/bips/commit/ec403b0ac53bbf248493da219a191df494795a4a","kind":"edit"}]}}