Skip to content

feat: vault-balance-sync — closes #SC-085 - #387

Merged
PeterOche merged 1 commit into
degenspot:mainfrom
alade-dev:feature/sc-085-vault-balance-sync
Sep 4, 2026
Merged

feat: vault-balance-sync — closes #SC-085#387
PeterOche merged 1 commit into
degenspot:mainfrom
alade-dev:feature/sc-085-vault-balance-sync

Conversation

@alade-dev

Copy link
Copy Markdown

Closes #SC-085 — Vault Balance Sync via Treasury Callback (#366)

Summary

Implements sync_vault_balance(call_id) pulling vault_balance from call_registry via cross-contract CallRegistryClient::get_call and caching in Map<u64, i128> (SyncedVaultBalance) for analytics, with get_synced_vault(call_id) view.

Changes

  • packages/contracts-stellar/treasury/src/treasury.rs: add DataKey::SyncedVaultBalance(u64), call_registry_iface with full Call mirror (13 fields) for cross-contract deserialization, sync_vault_balance (permissionless, TTL bump, VaultBalanceSynced event), get_synced_vault view
  • packages/contracts-stellar/treasury/src/test.rs: MockCallRegistry with full MockCall mirror, 6 tests (sync matches registry, missing reverts, cached view correct, permissionless, idempotent, zero, updated registry)

Acceptance Criteria

  • Sync matches registry value
  • Missing call reverts (Call does not exist)
  • Cached view correct via get_synced_vault

Checks

cargo test --workspace
# 139 tests: 76 call_registry + 19 outcome_manager + 38 treasury + 6 liquidity — all pass
cargo clippy -p treasury -- -D warnings  # pass
cargo fmt --check  # pass
# soroban CLI not installed — wasm build skipped (treasury crate-type cdylib OK via cargo test)

Notes

  • cargo clippy --workspace -- -D warnings fails on pre-existing call_registry warnings (unnecessary_cast, manual_range_contains) — not introduced by this PR; treasury alone passes clean
  • governance::errors::ContractError has 50 variants (at limit for #[contracterror] macro); missing-call case propagates registry's Call does not exist panic rather than adding a new error code

Add sync_vault_balance(call_id) pulling vault_balance from
call_registry via cross-contract CallRegistryClient::get_call and
caching in Map<u64, i128> (SyncedVaultBalance) for analytics,
with get_synced_vault(call_id) view. Handles missing call revert,
permissionless sync, TTL bumps on persistent writes, and
VaultBalanceSynced event with redundant vault_balance.

Co-authored-by: Muse Spark <muse-spark@meta.com>
@PeterOche
PeterOche merged commit 8c89e18 into degenspot:main Sep 4, 2026
3 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