Skip to content

feat: harden remittance summary consistency for partial data#421

Open
Miracle656 wants to merge 2 commits intoRemitwise-Org:mainfrom
Miracle656:feature/reporting-summary-partial-data-consistency
Open

feat: harden remittance summary consistency for partial data#421
Miracle656 wants to merge 2 commits intoRemitwise-Org:mainfrom
Miracle656:feature/reporting-summary-partial-data-consistency

Conversation

@Miracle656
Copy link
Copy Markdown
Contributor

Provide Graceful Degradation for Remittance Summary Queries (#315)

🎯 Objective

Resolves #315 by hardening the ReportingContract::get_remittance_summary query against partial or missing data from external source contracts.

Prior to this PR, get_remittance_summary would result in a hard panic (panic!() or unwrap()) if any of the target contracts (savings, bills, insurance, or split config) were unconfigured, temporarily unresponsive, or threw an error.

🛠️ Changes Implemented

  • Introduced DataAvailability Enum: Added a new DataAvailability field (Complete, Partial, Missing) to the RemittanceSummary struct.
  • Graceful Fallbacks: Refactored get_remittance_summary to use try_get_split and try_calculate_split for external cross-contract calls. If a cross-contract request errors out, the summary creation continues and degrades gracefully.
  • Missing Data Handler: If the reporting contract's address overrides are unconfigured, it now correctly returns DataAvailability::Missing rather than blowing up entirely.
  • Documentation: Formally documented the graceful degradation behavior and security expectations inside the project's README.md.
  • Fixed Workspace Fragmentation: Upgraded remitwise-common from soroban-sdk 20.0.0 to 21.0.0 and added explicit ed25519-dalek trait versions. This fixes previous broken Cargo.lock dependency resolving bottlenecks across the repository.

🧪 Testing and Verification

Achieved >95% test coverage for the new feature pathways.

  • Re-architected tests.rs to substitute the deprecated create_test_env test fixture with Env::default().
  • Auth checks now rely on programmatic env.mock_all_auths() where appropriate to actually reach our inner business layer logic.
  • ✅ Added test_get_remittance_summary_missing_addresses (Verifies the DataAvailability::Missing state).
  • ✅ Added test_get_remittance_summary_partial_data (Mocks a failing cross-contract execution to verify the DataAvailability::Partial state).
  • ✅ All 28 reporting test permutations cleanly passed locally with cargo test -p reporting.

🛡️ Security Implications

Clients executing summary queries are now responsible for inspecting the data_availability indicator. The presence of Partial or Missing means the returned array is not exhaustively complete. This ensures the frontend doesn't hang or crash entirely if the blockchain RPC stutters, minimizing overall DoS susceptibility for the platform.

Closes #315

…stency

Resolved conflicts:
- Cargo.toml: use pinned soroban-sdk =21.7.7 in dev-dependencies
- remitwise-common/Cargo.toml: use pinned soroban-sdk =21.7.7
- reporting/src/lib.rs: remove extraneous blank line before #[contract]
- reporting/src/tests.rs: adopt upstream import style (use super::*) and
  deduplicate create_test_env helper
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.

Harden remittance summary query consistency under partial data

1 participant