Skip to content

feat: partial withdrawal support across all tier vaults [NF-02] - #130

Merged
wumibals merged 8 commits into
LadderMine:mainfrom
yusuftomilola:feat/nf-02-partial-withdrawal-all-vaults
Jul 21, 2026
Merged

feat: partial withdrawal support across all tier vaults [NF-02]#130
wumibals merged 8 commits into
LadderMine:mainfrom
yusuftomilola:feat/nf-02-partial-withdrawal-all-vaults

Conversation

@yusuftomilola

Copy link
Copy Markdown
Contributor

Summary

Adds amount: i128 parameter to withdraw and early_exit across vault_l3, vault_l6, vault_l12, and vault_router, enabling partial position exits without forcing a full close-and-redeposit cycle.

Behaviour

Condition Result
amount < balance Partial — burns proportional shares, reduces Balance/Shares, LockUntil/Checkpoint untouched
amount >= balance Full — identical end-state to original all-or-nothing withdrawal (storage entries removed)
amount > balance Rejected with AmountExceedsBalance = 7

Exit fee (early_exit only): applied only to the withdrawn amount, not the full position. Tier rates unchanged: L3 = 0.50%, L6 = 1.25%, L12 = 2.50%.

Share burn formula: shares_to_burn = (user_shares * amount) / balance — proportional burn preserving the remaining position's share ratio.

Files Changed

  • contracts/vault_l3/src/lib.rswithdraw(user, amount), early_exit(user, amount); new AmountExceedsBalance = 7 error
  • contracts/vault_l3/src/test.rs — 6 new tests
  • contracts/vault_l6/src/lib.rs — same pattern
  • contracts/vault_l6/src/test.rs — 3 new tests
  • contracts/vault_l12/src/lib.rs — same pattern
  • contracts/vault_l12/src/test.rs — 3 new tests
  • contracts/vault_router/src/lib.rswithdraw(user, tier, amount), early_exit(user, tier, amount); forwards amount to tier vault

Tests per vault

  • test_partial_withdraw_reduces_position
  • test_full_amount_partial_withdraw_equals_full_withdraw
  • test_over_withdrawal_rejected (#[should_panic(expected = "AmountExceedsBalance")])
  • test_partial_early_exit_fee_on_withdrawn_amount_only
  • test_over_early_exit_rejected
  • test_withdraw_before_lock_fails (L3 only)

closes #77

@vercel

vercel Bot commented Jul 16, 2026

Copy link
Copy Markdown

@yusuftomilola is attempting to deploy a commit to the wumibals' projects Team on Vercel.

A member of the Team first needs to authorize it.

# Conflicts:
#	contracts/vault_l12/src/lib.rs
#	contracts/vault_l12/src/test.rs
#	contracts/vault_l3/src/lib.rs
#	contracts/vault_l3/src/test.rs
#	contracts/vault_l6/src/lib.rs
#	contracts/vault_l6/src/test.rs
#	contracts/vault_router/src/lib.rs
@yusuftomilola
yusuftomilola force-pushed the feat/nf-02-partial-withdrawal-all-vaults branch from 06f7506 to 925d72f Compare July 21, 2026 10:33
@wumibals
wumibals merged commit 70f5cf0 into LadderMine:main Jul 21, 2026
3 of 4 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.

[NF-02] [CONTRACT] Partial Withdrawal Support Across All Tier Vaults

2 participants