Problem
All reputation scores are stored in a single instance storage Map<Address, u32> (storage.rs lines 27-46). Every score read/write loads/saves the entire Map. For large user bases this will exceed Soroban instance storage size limits.
Contract impact: At scale, the reputation contract will hit instance storage caps and fail to read/write scores for new users.
Before Starting
Read: context/architecture-context.md
Root Cause
Instance storage was used for simplicity during initial implementation.
What To Build
- Migrate to per-user persistent storage:
- Key:
DataKey::Score(address)
- Value:
u32 score
- TTL extension on every write
- Keep
get_score() interface unchanged
- Write a migration test verifying data integrity
- Document the storage layout change
Files To Touch
contracts/reputation-contract/src/storage.rs — rewrite read_score/write_score
contracts/reputation-contract/src/types.rs — add DataKey variant
contracts/reputation-contract/src/tests.rs — add migration tests
Acceptance Criteria
Mandatory Checks
Problem
All reputation scores are stored in a single instance storage
Map<Address, u32>(storage.rs lines 27-46). Every score read/write loads/saves the entire Map. For large user bases this will exceed Soroban instance storage size limits.Contract impact: At scale, the reputation contract will hit instance storage caps and fail to read/write scores for new users.
Before Starting
Read: context/architecture-context.md
Root Cause
Instance storage was used for simplicity during initial implementation.
What To Build
DataKey::Score(address)u32scoreget_score()interface unchangedFiles To Touch
contracts/reputation-contract/src/storage.rs— rewrite read_score/write_scorecontracts/reputation-contract/src/types.rs— add DataKey variantcontracts/reputation-contract/src/tests.rs— add migration testsAcceptance Criteria
Mandatory Checks