Skip to content

Sundayjob996 e fix cancel race - #357

Merged
james2177 merged 3 commits into
stellar-vortex-protocol:mainfrom
sundayjob996:sundayjob996E-fix-cancel-race
Sep 2, 2026
Merged

Sundayjob996 e fix cancel race#357
james2177 merged 3 commits into
stellar-vortex-protocol:mainfrom
sundayjob996:sundayjob996E-fix-cancel-race

Conversation

@sundayjob996

Copy link
Copy Markdown

closes #280
closes #282
closes #283
closes #285

…o fix cancel/expiry/slash race conditions

IntentsController.cancel() used a check-then-update() sequence that could
race with a concurrent accept() or sweeper expiry. IntentsSweeperService.sweep()
had the same class of race for expiry (vs cancel/accept) and slashing
(vs fill), both using the generic update() with no state guard.

Adds cancelIfOpen/expireIfOpen/slashIfAccepted to IIntentsRepository,
mirroring the existing acceptIfOpen/fillIfAccepted atomic-update pattern,
implemented in both the in-memory and Prisma repositories, and wires the
controller and sweeper to use them instead of read-check-update().
registeredAt was the only timestamp on a solver record, making it
impossible to distinguish a solver that registered once and has been
dormant since from one that's continuously active.

Adds lastActiveAt (Unix epoch seconds) to SolverRecord and the Solver
Prisma model, updated on registration, successful fill, and any
deactivate/reactivate/deregister/markLive/markOffline call. Wires
IntentsController.fill() to bump it via a new SolversService.recordSuccessfulFill().
Data model and write-path only, per issue scope.
@drips-wave

drips-wave Bot commented Aug 31, 2026

Copy link
Copy Markdown

@sundayjob996 Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@james2177
james2177 merged commit cbcb469 into stellar-vortex-protocol:main Sep 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment