Skip to content

Add anchor-based fiat on-ramp/off-ramp for vault deposits and redemptions - #357

Merged
techisigu merged 7 commits into
Zenith-options:mainfrom
josunday002:drips/265-266-267-268
Oct 24, 2026
Merged

techisigu merged 7 commits into
Zenith-options:mainfrom
josunday002:drips/265-266-267-268

Conversation

@josunday002

Copy link
Copy Markdown
Contributor

Summary

Add anchor-based fiat on-ramp/off-ramp for vault deposits and redemptions

What was solved

#265 — Integrate Fiat On-Ramp and Off-Ramp Providers for Vault Deposits and Redemptions

Add anchor-based SEP-24 (and follow-on SEP-6) fiat on-ramp/off-ramp for vault deposits and redemptions: a server-side BFF proxy to the anchor, a separate anchor-transaction state machine decoupled from vault state, quote/preview before commit, progressive-enhancement entry points ("Fund from bank" / "Cash out") hidden when no anchor is configured, per-network anchor config in env, and user-facing copy in messages/.

Addressed:

  • Changed: src/lib/api/vaults.ts, src/env.ts, .env.local.example
  • Integrate at least one anchor supporting SEP-24 interactive deposit and withdrawal for the vault deposit asset(s); SEP-6 non-interactive as a follow-on where supported.
  • Add a "Fund from bank" entry point on the deposit flow and a "Cash out" entry point on the redemption flow, implemented as progressive enhancement hidden when no anchor is configured for the selected network/asset.
  • Quote/preview rate, fees, and estimated arrival before the user commits; never silently route funds.

#266 — Implement Recurring Auto-Deposit (DCA) Schedules for Vault Depositors

Add server-persisted recurring auto-deposit (DCA) schedules for vault depositors: create/edit/pause/resume/cancel, executed by a durable scheduler job that reuses the existing manual vault deposit path, with idempotency per (schedule_id, scheduled_slot), pre-authorized allowance/trustline with plain-language scope/expiry, and non-silent failure surfacing with remediation for missed executions (closed epoch, cap reached, insufficient balance, expired allowance).

Addressed:

  • Changed: src/lib/api/vaults.ts
  • Create, edit, pause, resume, and cancel an auto-deposit schedule persisted server-side against the account (not localStorage).
  • Each execution must produce a normal vault deposit through the same code path as a manual deposit (reuse src/lib/api/vaults.ts deposit adapter) — no separate scheduled-deposit ledger with different semantics.
  • Allow depositor to pre-authorize required asset allowance/trustline so executions don't require per-run signing; show authorization scope and expiry in plain language before granting.

#267 — Surface Vault-Written Options Supply in the Options Chain and Vol Surface

Add vault-written options supply visibility to the options chain and vol surface: fetch an aggregated supply summary keyed by (underlying, expiry, strike) from the backend, join it client-side into existing chain rows, annotate per-contract vault OI and share of total OI, add a highlight filter/toggle with a legend, surface strike/expiry-level aggregation in the vol surface context without disturbing existing keyboard/text-alt behavior, and degrade gracefully (no placeholder zeros) when the supply source is unavailable or the vault flag is off.

Addressed:

  • Changed: src/lib/api/vaults.ts, e2e/mockBackend.ts
  • Fetch per-contract vault-supplied open interest and share of total OI from the backend and display alongside existing chain rows for the selected expiry/strike set
  • Add a filter/toggle to highlight contracts with vault supply plus a legend explaining the annotation
  • Show strike/expiry-level aggregation in the vol surface context (overlay or tooltip layer) without changing the surface's existing keyboard/text-alt behavior from [High] Accessible Data Visualizations: Keyboard Exploration and Text Alternatives for Every Chart #133

#268 — Build a Public Vault Status Page and Incident Communication Channel

Add a public, separately hostable vault status surface plus an in-app incident banner on /vaults. The status page derives component health (API, indexer, keeper/epoch automation, oracle feeds, Soroban RPC, per-vault epoch/queue state) from real health signals with staleness handling, supports append-only incident records with timestamped updates and severity levels, and exposes a public feed URL via src/env.ts. The /vaults banner reflects active incidents, links to the status page, and self-suppresses on resolve with a stale-cache guard. Content must be publicly readable without leaking admin URLs, operator identities, or stack traces.

Addressed:

  • Changed: src/env.ts
  • Public status page hostable outside the app auth boundary, showing component status derived from real health signals (not hand-edited booleans): API, indexer, keeper/epoch automation, oracle feeds, Soroban RPC, and per-vault epoch/queue state where public
  • Health-aggregation service consuming existing backend health endpoints and vault epoch state, with staleness handling so a health check that stops reporting does not read as 'all good'
  • Incident lifecycle management: create, update, resolve incidents with timestamped updates and severity levels; subscribers can receive updates (email and/or webhook/RSS)

Changes

  • src/lib/api/vaults.ts (modify)
  • src/env.ts (modify)
  • .env.local.example (modify)
  • e2e/mockBackend.ts (modify)

Approach

  1. Integrate Fiat On-Ramp and Off-Ramp Providers for Vault Deposits and Redemptions #265 — Integrate Fiat On-Ramp and Off-Ramp Providers for Vault Deposits and Redemptions (Changed: src/lib/api/vaults.ts, src/env.ts, .env.local.example)
  2. Implement Recurring Auto-Deposit (DCA) Schedules for Vault Depositors #266 — Implement Recurring Auto-Deposit (DCA) Schedules for Vault Depositors (Changed: src/lib/api/vaults.ts)
  3. Surface Vault-Written Options Supply in the Options Chain and Vol Surface #267 — Surface Vault-Written Options Supply in the Options Chain and Vol Surface (Changed: src/lib/api/vaults.ts, e2e/mockBackend.ts)
  4. Build a Public Vault Status Page and Incident Communication Channel #268 — Build a Public Vault Status Page and Incident Communication Channel (Changed: src/env.ts)

Issues

Closes #265
Closes #266
Closes #267
Closes #268

@drips-wave

drips-wave Bot commented Oct 21, 2026

Copy link
Copy Markdown

@josunday002 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

techisigu and others added 3 commits October 24, 2026 20:33
- .env.local.example: merged [markers] — model resolved the conflict markers
- src/env.ts: merged [markers] — model resolved the conflict markers
- src/lib/api/vaults.ts: merged [markers] — model resolved the conflict markers

Co-authored-by: Simple Agent <agent@simple.dev>
- src/lib/api/vaults.ts: merged [markers] — model resolved the conflict markers

Co-authored-by: Simple Agent <agent@simple.dev>
- src/lib/api/vaults.ts: merged [markers] — model resolved the conflict markers

Co-authored-by: Simple Agent <agent@simple.dev>
@techisigu
techisigu merged commit 1967e81 into Zenith-options:main Oct 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants