Skip to content

feat: implement dividend snapshot validation, campaign audit trail, IPFS circuit breaker, and multi-sig validation#1192

Merged
Emmyt24 merged 1 commit into
Emmyt24:mainfrom
victorisiguzoruzoma874:feat/backend-all-issues-1123-1126
May 28, 2026
Merged

feat: implement dividend snapshot validation, campaign audit trail, IPFS circuit breaker, and multi-sig validation#1192
Emmyt24 merged 1 commit into
Emmyt24:mainfrom
victorisiguzoruzoma874:feat/backend-all-issues-1123-1126

Conversation

@victorisiguzoruzoma874
Copy link
Copy Markdown
Contributor

Summary

Comprehensive feature implementation addressing 4 backend/contract issues:

Implementation Details

#1123 - Dividend Snapshot Consistency

  • New verifySnapshotConsistency() function validates holder balance sum
  • Tolerance: 1 unit for rounding differences
  • Admin endpoint: GET /api/dividends/pools/:poolId/consistency
  • Returns: expected total, actual total, consistency status, holder count

#1124 - Campaign Audit Trail

  • New CampaignAuditTrail database model for all state transitions
  • Records: from/to status, actor, timestamp, optional txHash
  • Service methods: recordStateTransition(), getAuditTrail()
  • API endpoint: GET /api/campaigns/:campaignId/audit-trail with pagination

#1125 - IPFS Circuit Breaker

  • Circuit breaker configuration:
    • Failure threshold: 5 consecutive failures
    • Success threshold: 2 consecutive successes to close
    • Timeout: 30 seconds before attempting recovery
  • Wrapped all IPFS operations (upload image, upload metadata, get metadata)
  • Admin metrics: GET /api/admin/operational/circuit-breaker/ipfs
  • Admin reset: POST /api/admin/operational/circuit-breaker/ipfs/reset

#1126 - Multi-Sig Validation

  • Validates threshold is not zero and not greater than signer count
  • Validates no duplicate signers in configuration
  • New error code: DuplicateSigners (86)
  • Events emitted on successful configuration

Test Plan

  • Code compiles without warnings (Rust clippy, TypeScript strict)
  • Input validation working at boundaries (Zod schemas, Rust validation)
  • Error handling follows conventions (typed AppError, Soroban Error codes)
  • Database migrations created and backwards compatible
  • API documentation updated with new endpoints
  • No breaking changes to existing APIs

Notes

  • Token/credit efficiency: Focused implementations without unnecessary abstractions
  • All changes preserve existing error-handling conventions
  • Migration is non-destructive and can be rolled back
  • Circuit breaker metrics useful for monitoring IPFS availability

Closes #1123
Closes #1124
Closes #1125
Closes #1126

…ign audit trail, IPFS circuit breaker, and multi-sig validation

Closes Emmyt24#1123, Emmyt24#1124, Emmyt24#1125, Emmyt24#1126

Changes:
- (Emmyt24#1123) Add dividend snapshot consistency verification to catch ingestion gaps
  * New verifySnapshotConsistency() function in dividendService.ts
  * Admin endpoint: GET /api/dividends/pools/:poolId/consistency
  * Validates holder balance sum vs expected total supply with 1 unit tolerance

- (Emmyt24#1124) Persist campaign state transitions with full audit trail
  * New CampaignAuditTrail database model to record all state changes
  * Records from/to status, actor, timestamp, and optional txHash
  * Endpoint: GET /api/campaigns/:campaignId/audit-trail
  * Transactional recording of state changes

- (Emmyt24#1125) Wrap IPFS/Pinata service calls in circuit breaker
  * Failure threshold: 5 consecutive failures
  * Success threshold: 2 consecutive successes to recover
  * Timeout before retry: 30 seconds
  * Metrics endpoint: GET /api/admin/operational/circuit-breaker/ipfs
  * Manual reset endpoint: POST /api/admin/operational/circuit-breaker/ipfs/reset

- (Emmyt24#1126) Enforce comprehensive multi-sig threshold validation
  * Validate threshold is not zero or greater than signer count
  * Validate no duplicate signers in configuration
  * New DuplicateSigners error code (86)
  * Emit configuration events on success

All changes include proper error handling, input validation at boundaries,
and maintain existing code style and conventions.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
@drips-wave
Copy link
Copy Markdown

drips-wave Bot commented May 27, 2026

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

@Emmyt24 Emmyt24 merged commit f2506d8 into Emmyt24:main May 28, 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