Skip to content

dgb(phase-b): AutoRatchet 60% tail-guard SSOT + conformance KAT - #406

Merged
frstrtr merged 1 commit into
masterfrom
dgb/auto-ratchet-tail-guard-ssot
Jun 24, 2026
Merged

dgb(phase-b): AutoRatchet 60% tail-guard SSOT + conformance KAT#406
frstrtr merged 1 commit into
masterfrom
dgb/auto-ratchet-tail-guard-ssot

Conversation

@frstrtr

@frstrtr frstrtr commented Jun 24, 2026

Copy link
Copy Markdown
Owner

Phase-B pool/share conformance pillar — work-weighted 60% tail guard vs the frstrtr/p2pool-dgb-scrypt oracle.

What

Lift the work-weighted 60% tail-guard predicate that gates AutoRatchet VOTING -> ACTIVATED into a fenced SSOT (auto_ratchet_tail_guard.hpp) and pin it against the oracle switch rule (data.py:1399):

SWITCHED iff target_weight >= floor(total_weight * 60 / 100) over uint288 work weights.

This is the mint<->accept coupling (#288-class no-miss property): without it a 95%-by-COUNT activation can outrun the 60%-by-WORK accept gate and wedge the crossing.

Conformance finding (flagged for review)

The SSOT implements the exact canonical floor. The live inline in auto_ratchet.hpp uses the exact-rational form target*100 < total*60, which diverges from the oracle floor in exactly one measure-zero casetarget == floor(total*60/100) AND total*60 % 100 != 0 — where the inline waits one extra work-quantum (negligibly STRICTER; never observed at real uint288 scale). The KAT pins both the canonical floor and that boundary divergence non-circularly via a verbatim inline replica.

Fenced

Proof

dgb_auto_ratchet_tail_guard_test 9/9 green locally (-DCOIN_DGB=ON). GPG-signed.

No self-merge — surfacing for tap/auto-merge per fenced band.

Lift the work-weighted 60% tail-guard predicate that gates AutoRatchet
VOTING -> ACTIVATED into a fenced SSOT (auto_ratchet_tail_guard.hpp) and
pin it against the p2pool-dgb-scrypt oracle switch rule (data.py:1399):
SWITCHED iff target_weight >= floor(total_weight * 60 / 100), over uint288
work weights.

The SSOT implements the EXACT canonical floor expression. The live inline
in auto_ratchet.hpp uses the exact-rational form (target*100 < total*60),
which diverges from the oracle floor in exactly one measure-zero case
(target == floor(total*60/100) AND total*60 % 100 != 0), where the inline
waits one extra work-quantum -- negligibly stricter, never observed at
real uint288 scale. KAT pins both the canonical floor and that boundary
divergence non-circularly (verbatim inline replica). auto_ratchet.hpp is
NOT rewired -- delegation is the byte-identity follow-on.

FENCED: additive header + test, both build.yml arms, dgb-tree-local,
consensus path untouched. 9/9 green.
@frstrtr
frstrtr merged commit 9495962 into master Jun 24, 2026
32 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant