Skip to content

Contracts: Consolidate duplicate total_shares and total_assets storage #801

Description

@Junirezz

Context

Vault accounting state is split across VaultState (DataKey::State) and legacy scalar keys DataKey::TotalShares, DataKey::TotalAssets, and DataKey::TotalAssets used in deposit/withdraw.

Problem / Gap

deposit updates DataKey::TotalAssets, DataKey::TotalShares, and VaultState fields independently. total_shares() reads from VaultState while some paths read DataKey::TotalShares directly. Divergence risks incorrect share-price math and complicates upgrades.

Proposed approach

  • Choose a single source of truth (prefer VaultState) and deprecate redundant keys with a migration helper in upgrade.rs.
  • Add invariant tests asserting state.total_shares == sum(ShareBalance) and state.total_assets consistency with idle + strategy value.
  • Document storage layout changes in docs/architecture.md.

Files/areas affected

  • contracts/vault/src/lib.rs
  • contracts/vault/src/upgrade.rs
  • contracts/vault/src/test.rs, fuzz_math.rs

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions