Skip to content

fix(dex): refund at-cap LP deposits instead of erroring the whole batch - #474

Merged
pablocampogo merged 1 commit into
mainfrom
fix-cap-error
Jul 17, 2026
Merged

fix(dex): refund at-cap LP deposits instead of erroring the whole batch#474
pablocampogo merged 1 commit into
mainfrom
fix-cap-error

Conversation

@pablocampogo

Copy link
Copy Markdown
Collaborator

fix(dex): refund at-cap LP deposits instead of erroring the whole batch

A remote liquidity deposit from a brand-new LP into a pool already at
MaxLiquidityProviders (50k) caused HandleBatchDeposit to return
ErrInvalidLiquidityPool for the entire batch. Since remote batches bypass
the enqueue-time cap check and begin_block DEX settlement aborts the whole
block on error, the poison batch was deterministically re-served every
block and could never rotate - deadlocking the nested chain (no fix via
pod restart, as the failing input is committed root state).

HandleBatchDeposit now enforces the LP holder cap per-deposit: an at-cap
deposit from a new holder is skipped (and refunded from the holding pool
on the local/escrow side) rather than erroring the batch. Point issuance
is computed from accepted deposits only, so a rejected deposit's share no
longer leaks to the dead address as phantom dust. Both chains run the
identical logic over mirrored pool points, keeping accept/reject decisions
in sync.

Tests: replace the remote at-cap error test with a skip-without-error
test; add local-refund and mixed accept/refund coverage.

@pablocampogo
pablocampogo merged commit 8ccd04a into main Jul 17, 2026
2 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.

2 participants