Skip to content

feat: add relock / renew-at-maturity for locked tier vaults [NF-03] - #127

Merged
wumibals merged 8 commits into
LadderMine:mainfrom
michaelsimeon001:feat/nf-03-relock-renew-at-maturity
Jul 19, 2026
Merged

feat: add relock / renew-at-maturity for locked tier vaults [NF-03]#127
wumibals merged 8 commits into
LadderMine:mainfrom
michaelsimeon001:feat/nf-03-relock-renew-at-maturity

Conversation

@michaelsimeon001

Copy link
Copy Markdown
Contributor

Summary

Implements relock(user) on vault_l3, vault_l6, and vault_l12, plus a VaultRouter.relock(user, tier) passthrough, allowing depositors to renew their lock at maturity in a single transaction — no withdraw/redeposit cycle required.

Changes

Per locked vault (vault_l3, vault_l6, vault_l12)

  • Added NotYetMatured = 4 error variant to VaultError
  • Extracted lock duration into a LOCK_DURATION constant for clarity
  • Added relock(user: Address) -> u32:
    • Rejects with NotYetMatured if current_ledger < lock_until
    • Sets LockUntil = current_ledger + LOCK_DURATION in place
    • Does not touch Balance, Shares, or Checkpoint
    • No USDC transfer occurs — pure storage update
    • Returns the new lock_until

vault_router

  • Added relock(user: Address, tier: Tier) -> u32 passthrough
  • Panics with a clear message if called on the Flex tier (no lock concept)
  • Mock vault in router tests now exposes a relock function

Tests

Each vault's test file gains three new tests:

  • test_relock_at_maturity_sets_new_lock_until
  • test_relock_does_not_change_balance_or_shares
  • test_relock_before_maturity_is_rejected (#[should_panic(expected = "NotYetMatured")])

Router tests cover relock routing for L3/L6/L12 and the Flex panic.

Acceptance Criteria

  • relock before lock_until → rejected with NotYetMatured
  • relock after maturity → new lock_until = current_ledger + LOCK_DURATION
  • relock does not change Balance or Shares
  • No USDC transfer
  • Unit tests cover: relock at maturity, rejection while locked, shares/balance unchanged

closes #78

@vercel

vercel Bot commented Jul 16, 2026

Copy link
Copy Markdown

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

A member of the Team first needs to authorize it.

- Merge upstream changes: guardian param in vault_l3 initialize,
  emergency unlock in early_exit, per-asset accounting in vault_router
  deposit/withdraw/position, allowlist management functions
- Keep NF-03 relock feature: relock() in vault_l3 and vault_router,
  plus relock tests (fixed setup destructuring and ledger API calls)
- Add Unauthorized = 5 to VaultError alongside NotYetMatured = 4
- Update ethnum 1.5.0 -> 1.5.3 in Cargo.lock to fix transmute size
  mismatch build error on stable Rust
@wumibals
wumibals merged commit a176cd4 into LadderMine:main Jul 19, 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-03] [CONTRACT] Auto-Relock / Renew-at-Maturity for Locked Tiers

2 participants