User Story:
As a donor, I want my donation recorded on the backend after a successful blockchain transaction so that it appears in campaign stats.
Acceptance Criteria:
- Accepts: campaignId, txHash, amount, assetCode, assetIssuer, isAnonymous
- Verifies transaction on Stellar Horizon before recording
- Prevents duplicate recording (idempotent on txHash)
- Returns created donation record
- Triggers campaign stats recalculation
User Story:
As a donor, I want my donation recorded on the backend after a successful blockchain transaction so that it appears in campaign stats.
Acceptance Criteria: