Skip to content
Bitcoin Roots

v31.1-roots.1 · Commit 5: [PATCH 05/17] feat(net): preserve Roots peer controls and health view on v31

doc/roots-v31-port-review.md

Before: doc/roots-v31-port-review.md · After: doc/roots-v31-port-review.md

File metadata
index 17b088f77e5b1e74c074db3f70766dea64156ca2..0948ff33ab106892045cf13b8157c1d4fadd214d 100644

Download original patch · Release notes

Diff rows 1–82 of 82. Line numbers refer to the original before/after files.

+ Added− RemovedUnmarked lines are context.

Scroll the code area horizontally to read long lines. The two line-number columns refer to before and after.

doc/roots-v31-port-review.md CHANGED
@@ -334,8 +334,8 @@ The remaining default headless functional suite is also covered, beyond the
334
334
  selected policy filter. Its block resurrection, CSV/DER, orphan/package,
335
335
  burn-accounting RPC and large wallet-script fixtures retain their original
336
336
  assertions with explicit allowances for their constructed outputs and padding.
337
- The IBD fee-filter fixture uses the buckets produced by the unchanged native
338
- rounder from the Roots default relay fee. Full native units, non-Boost CTest
337
+ The IBD fee-filter fixture follows native bucket quantization; L10 restores
338
+ the source incremental-fee seed selection and its corresponding fixture values. Full native units, non-Boost CTest
339
339
  gates, and the applicable functional tests pass; optional-feature/environment
340
340
  skips remain gaps. The bounded Clang ASan/UBSan campaigns cover parser,
341
341
  transaction/carrier and native input/witness callers, not the L8/L9 extensions.
@@ -550,3 +550,72 @@ the dynamic/subdust template-reward interactions. The existing template matrix
550
550
  sanitizer evidence retains the same production source and daemon hash. Parser,
551
551
  penalty arithmetic and randomized native pool assembly have bounded sanitizer
552
552
  fuzz smoke coverage. No repeated full sweep or exhaustive fuzz claim is made.
553
+
554
+ ## L10.1 peer resource and permission controls
555
+
556
+ Compact reconstruction retains 32,768 extra slots by default with a separate
557
+ 10 decimal MB transaction dynamic-usage budget. Zero/negative disables caching;
558
+ malformed fixed-point memory settings retain the source default. Four decimal
559
+ places of MB represent 100-byte increments. Slot allocation is capped from the
560
+ memory budget, avoiding an extreme count-only allocation. Eviction occurs
561
+ before addition to avoid size_t overflow on 32-bit platforms. The source's
562
+ 100,000-byte individual dynamic-usage exclusion now covers replacements too,
563
+ matching the stated contract. Native v31 compact-block reconstruction is unchanged.
564
+
565
+ ForceInbound implies NoBan/Download. Its random fallback considers only inbound
566
+ ban-able peers, after unconditional NoBan/outbound protections; ordinary eviction
567
+ retains native scoring. Explicit blockfilters/compactfilters/cfilters permission
568
+ requires the basic index and grants native BIP157 services to that connection;
569
+ All retains the source non-explicit exception. Legacy whitelist defaults include
570
+ Addr; outbound ranges apply to automatic and manual connections. Bloom is
571
+ unadvertised globally by default and permitted on loopback unless explicitly
572
+ disabled. Onion-specific and first-bind Tor targets suppress address whitelist
573
+ permissions, including implicit loopback bloom.
574
+
575
+ Subnet disconnect uses v31's existing CSubNet overload and native RPC argument
576
+ views. Clearnet-v2-only suppresses v1 initiation and fallback for the source
577
+ routable IPv4/IPv6 classification; loopback/non-routable and encrypted overlay
578
+ networks retain source eligibility. Tests use a local forwarding SOCKS server
579
+ for routable targets and authentication, with no external traffic. Credentials
580
+ are not included in the proxy debug message. Fee filters default on with the
581
+ source explicit off switch. Fee-filter buckets retain the source 100 sat/kvB
582
+ seed below 1,000 sat/kvB initialized incremental fee and 1,000 otherwise;
583
+ both profiles and the IBD exit regression are tested. Duplicate CJDNS manual addresses ignore ports;
584
+ local-address scores saturate, and duplicate manual block fetch rejects before
585
+ resetting in-flight tracking. The source's nullable FetchBlock overload has no
586
+ production caller; v31's typed existing-header interface remains sufficient.
587
+
588
+ Native v31 already carries network-key inventory timers/address-cache grouping,
589
+ inactivity checks, reconnection cleanup, orphan resource controls, protected
590
+ outbound/manual peers and safe subversion handling. Their upstream regression
591
+ assertions remain. No new wire message/inventory type or filtered-witness-block
592
+ extension is introduced. These are local controls over existing P2P interfaces.
593
+ Peer-health fields and Qt evidence remain L10.2.
594
+
595
+ Provenance: mixed peer controls from `1b73fe3d21`, `ec9db369f5`; compact and
596
+ permission fixtures from `fc0dc945d0` plus their feature-owned corrective history
597
+ in the complete mapping. Retain Jaromil/devjoinedthechat and Core/Knots credit.
598
+
599
+ ### L10.2 peer-health adaptation
600
+
601
+ The source current-connection fields travel through native `CNodeStats`,
602
+ `CNodeStateStats`, `getpeerinfo` and the existing GUI node interface. Thread CPU
603
+ measurement covers the message-processing/send pass, not historical samples.
604
+ Unavailable or backwards CPU readings are ignored, and RPC omits load unless
605
+ CPU time and connection duration are positive. Native v31's deprecated
606
+ `startingheight` RPC gate is retained rather than reversing upstream interface
607
+ changes. The source Starting Block detail uses the still-available native state
608
+ field and resets to Unknown when unavailable. Deprecated misbehavior score remains source-compatible at 0 or 100.
609
+
610
+ The peer detail pane clears state fields before each refresh, and clears the
611
+ hidden BIP324 session ID when switching transports. The model resolves peer data
612
+ by current row because refresh swaps its storage; persistent selection cannot
613
+ keep a pointer into a discarded snapshot. Native table columns and sorting are
614
+ preserved. Focused GUI tests can connect to caller-supplied real regtest nodes,
615
+ exercise sorting/refresh/disconnect selection and the production unavailable
616
+ try-lock branch, and capture the rendered window at the specified font/resolution
617
+ matrix. No static mockup or history collector is introduced.
618
+
619
+ These adaptations preserve the catalogued Roots contracts and attribution to
620
+ Jaromil and devjoinedthechat alongside the Bitcoin Core and Bitcoin Knots
621
+ provenance already recorded above.