test(fork): exercise TailTwins tail-match gate off parity - #16
Merged
Conversation
ForkDeploy inits every hook at SQRT_1_1 (2^96), whose low byte is 0, so TailTwins' requiredTail is a constant 0 and the tail-match mechanic is never really exercised. Add a GateFix case that inits a Base pool off parity (sqrtPrice low byte 0x37): requiredTail is nonzero, an off-tail swap reverts TailMismatch, and a matching-tail swap clears the gate and moves the price. Verified on a Base fork (3/3 GateFix tests pass).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds an off-parity fork test for TailTwins. Every
ForkDeployfixture initializes atSQRT_1_1(2^96), whose low byte is0, soTailTwins.requiredTailis a constant0and the "your size's last byte must match the price's, which shifts every swap" mechanic is never actually exercised at a nonzero tail.test_TailTwins_tailBindsOffParityinits a Base pool off parity (sqrtPricelow byte0x37) and asserts:requiredTail != 0(the 1:1 blind spot is avoided),TailMismatch,slot0, not a frozen constant.Verification
forge buildclean. All 3GateFixtests pass on a live Base fork:Behavioral coverage only; no source or deployment change. Closes the last sibling whose gate was vacuous at parity (HeavierHand + CapGate were already covered off-parity in the same file).