v31.1-roots.1 · Commit 2: [PATCH 02/17] feat(policy): preserve Roots parsing and local transaction checks
doc/roots-features.md
Before: doc/roots-features.md · After: doc/roots-features.md
File metadata
index 48a828421d2248b4362e480e8c5f0088978a010d..3d43f86a86b05d1e57fcde41291f99e25ab824c2 100644
Download original patch · Release notes
Diff rows 1–94 of 94. 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-features.md
CHANGED
|
@@ -14,11 +14,12 @@ These upstream build conditions are not evidence that a missing optional
|
|
|
14
14
|
library or platform was tested. See [portability profiles](roots-build-portability.md).
|
|
15
15
|
|
|
16
16
|
The source contracts below are preservation requirements, **not a claim that
|
|
17
|
-
Roots behavior has been ported**. Local policy/mining and strict Roots parsing
|
|
18
|
-
are deferred to L7; peer controls/health to L8; sweep, coin-control and per-send
|
|
19
|
-
RBF extensions to L9; read/write config, effective-policy RPC, resource support
|
|
20
|
-
and dormant statistics to L10; identity/desktop and maintenance integration to
|
|
21
|
-
L11. The narrow monotonic `uptime` RPC sub-aspect has reviewed upstream
|
|
17
|
+
Roots behavior has been ported**. L7 implements scoped parsing and local transaction checks; graph accounting,
|
|
18
|
+
replacement/TRUC/reuse and dynamic dust are deferred to L8, and priority/template
|
|
19
|
+
mining to L9; peer controls/health to L10; sweep, coin-control and per-send
|
|
20
|
+
RBF extensions to L11; read/write config, effective-policy RPC, resource support
|
|
21
|
+
and dormant statistics to L12; identity/desktop and maintenance integration to
|
|
22
|
+
L13. The narrow monotonic `uptime` RPC sub-aspect has reviewed upstream
|
|
22
23
|
equivalence; this does not retire the remaining operator-stats contract.
|
|
23
24
|
|
|
24
25
|
MiniUPnPc dependency discovery is retained, but its UPnP runtime and depends
|
|
@@ -28,7 +29,8 @@ progress remains deferred to desktop integration. Passing either undeclared
|
|
|
28
29
|
option to CMake does not implement it. No intended behavior is retired by a
|
|
29
30
|
missing dependency.
|
|
30
31
|
|
|
31
|
-
Code and test references in the contract body identify paths at pinned source
|
|
32
|
+
Unless explicitly marked as candidate evidence, code and test references in the
|
|
33
|
+
contract body identify paths at pinned source
|
|
32
34
|
`10d772eb7f4b00b5193428a0dde4c06558d6c297`; they are rendered as source
|
|
33
35
|
references rather than links into this candidate when their implementation
|
|
34
36
|
has not been carried. Historical test results are not current candidate passes.
|
|
@@ -41,7 +43,9 @@ The source checked for this collection is Roots
|
|
|
41
43
|
commit `49faec4f87f5cd19c88db01a82e5c68b087c8227`. Source and test links are
|
|
42
44
|
version-specific aids; neither a function name nor the location of an admission
|
|
43
45
|
check is a preservation requirement. The contracts do not authorize a change in
|
|
44
|
-
consensus, a new feature, or repair of a documented gap.
|
|
46
|
+
consensus or a new feature. The user explicitly authorized the bounded L8
|
|
47
|
+
dynamic-dust startup/lifetime, missing-estimate fallback and safe-scaling repair;
|
|
48
|
+
other documented gaps remain preservation limitations.
|
|
45
49
|
|
|
46
50
|
**Acceptance rule for every ID:** preserve its observable results, defaults,
|
|
47
51
|
supported configuration, units, errors and boundaries. Tests named below are
|
|
@@ -60,6 +64,35 @@ compatibility decision.
|
|
|
60
64
|
|
|
61
65
|
### Local policy and mining
|
|
62
66
|
|
|
67
|
+
The L7 candidate implements `policy-parsing`, `policy-standardness`, carrier
|
|
68
|
+
recognition/budgets within `policy-carrier`, fixed thresholds and ephemeral
|
|
69
|
+
exceptions within `policy-dust`, and relay gates within `policy-coinage`.
|
|
70
|
+
Focused candidate acceptance passed in
|
|
71
|
+
[`policy_args_tests.cpp`](../src/test/policy_args_tests.cpp),
|
|
72
|
+
[`transaction_tests.cpp`](../src/test/transaction_tests.cpp),
|
|
73
|
+
[`feature_policy_args.py`](../test/functional/feature_policy_args.py),
|
|
74
|
+
[`mempool_datacarrier.py`](../test/functional/mempool_datacarrier.py),
|
|
75
|
+
[`mempool_dust.py`](../test/functional/mempool_dust.py),
|
|
76
|
+
[`mempool_sigoplimit.py`](../test/functional/mempool_sigoplimit.py), and
|
|
77
|
+
[`mempool_roots_local_policy.py`](../test/functional/mempool_roots_local_policy.py).
|
|
78
|
+
The last test covers enabled/disabled relay age, unconfirmed age, exact
|
|
79
|
+
coin-block boundaries, extreme configured bounds, local filter/ephemeral
|
|
80
|
+
switches and consensus-valid blocks for CAT21 and relay-age rejections.
|
|
81
|
+
L7.2 adds tip-reorg age checks, carrier full-count/standardness independence,
|
|
82
|
+
and consensus-valid blocks for local marker, pubkey, witness-version, token,
|
|
83
|
+
multiple-OP_RETURN, dust and relay-age rejections. The complete native unit
|
|
84
|
+
suite and applicable package/replacement/TRUC/cluster/mining functional suites
|
|
85
|
+
are candidate verification gates, with explicit local allowances in resource
|
|
86
|
+
fixtures. The v31
|
|
87
|
+
[`policy_args` fuzz target](../src/test/fuzz/policy_args.cpp) retains L5's grammar
|
|
88
|
+
oracles; [`transaction`](../src/test/fuzz/transaction.cpp) also exercises carrier
|
|
89
|
+
recognition. Bounded Clang 19 ASan/UBSan/libFuzzer campaigns executed these and
|
|
90
|
+
native coins-view policy callers with reproducible seeds. Final L7 review remains
|
|
91
|
+
pending; a bounded campaign is not exhaustive coverage.
|
|
92
|
+
Source acceptance and gaps below remain historical evidence; L8 owns carrier
|
|
93
|
+
extra weight, dynamic dust, subdust, replacement/TRUC and reuse, and L9 owns
|
|
94
|
+
mining. Explicitly supplied staged options warn that they are not enforced.
|
|
95
|
+
|
|
63
96
|
- **policy-parsing:** the [policy input compatibility contract](feature-contracts/policy-parsing.md)
|
|
64
97
|
specifies scoped grammar, effective defaults, diagnostics, migration decisions
|
|
65
98
|
and baseline characterization for Roots-added policy controls. Parser and
|
|
@@ -133,6 +166,11 @@ compatibility decision.
|
|
|
133
166
|
`DynamicDustFeePublication` covers changing snapshots. Gap: estimator-target
|
|
134
167
|
mode without an estimator is accepted by the parser; it is not evidence of a
|
|
135
168
|
working estimate. Extreme dynamic multiplier arithmetic needs separate coverage.
|
|
169
|
+
The source also aborts non-off startup because scheduler wiring is missing.
|
|
170
|
+
L8's explicitly authorized repair must add node-owned scheduling after successful
|
|
171
|
+
initialization, safe retry/shutdown lifetime, unavailable-estimator floor fallback
|
|
172
|
+
and overflow-safe scaling, with regression coverage. L7 carries syntax only;
|
|
173
|
+
this repaired runtime is not yet implemented.
|
|
136
174
|
- **policy-subdust:** apply a configurable deficit penalty to modified fees,
|
|
137
175
|
using script-specific dust thresholds, without changing the actual fee or
|
|
138
176
|
consensus validity. Enabled by default. The
|
|
@@ -163,8 +201,10 @@ compatibility decision.
|
|
|
163
201
|
to coinbase consensus maturity. See coin age (`src/policy/coin_age_priority.cpp`, source reference)
|
|
164
202
|
and admission (`src/validation.cpp`, source reference). Acceptance: priority accounting cases in
|
|
165
203
|
miner_tests.cpp (`src/test/miner_tests.cpp`, source reference) `CreateNewBlock_validity` cover the
|
|
166
|
-
shared age cache. Gap: dedicated enabled/disabled relay maturity/coin-block
|
|
167
|
-
boundaries and their valid-block fixtures.
|
|
204
|
+
shared age cache. Historical source gap: dedicated enabled/disabled relay
|
|
205
|
+
maturity/coin-block boundaries and valid-block fixtures. The candidate's
|
|
206
|
+
`mempool_roots_local_policy.py` supplies those cases and tip-reorg checks;
|
|
207
|
+
it does not port L9's priority cache or mining interactions.
|
|
168
208
|
- **policy-reuse:** `spkreuse=allow` defaults to no extra restriction. The
|
|
169
209
|
documented alternative `conflict` uses mempool scriptPubKey creation/spend
|
|
170
210
|
tracking to reject reuse or consider policy conflicts for replacement. This is a local
|