feat(payments): explorer links, fuzz tests, fee estimation, webhook deduplication#428
Merged
JosephOnuh merged 2 commits intoJun 2, 2026
Conversation
|
@Dannyswiss1 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! 🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR adds on-chain transparency and resilience features across AjoSave: Stellar explorer links, contract fuzzing, dynamic fee estimation, and Paystack webhook deduplication.
What's Changed
Stellar Explorer Links - #315
stellar_tx_hashinpayoutstable on successful on-chain payouttarget="_blank" rel="noopener"STELLAR_NETWORKenvadd_stellar_tx_hash_to_payoutsPayoutRowcomponent shows "View on Stellar Expert" with hash truncationSoroban Fuzz Testing - #325
cargo-fuzzfor Ajo contract incontracts/ajosave/fuzz/fuzz_contribute,fuzz_payout,fuzz_join_circlefuzzjob with 60s timeout per target to prevent hangsu128contribution sum, zero-member payoutcontracts/ajosave/fuzz/README.mdwith run instructionsFee Estimation - #328
/fee_statsbefore tx submission2 * base_feefor priority inclusionSTELLAR_MAX_FEE_STROOPSenv; defaults to 100,000100stroops if Horizon unreachableestimate_stellar_fee()helper instellar_service.pyPaystack Webhook Retry Handling - #330
paystack_event_idinwebhook_eventstable on first receipt200 OKimmediately without reprocessingwebhook_events.paystack_event_idcreated_atTTL jobcreate_webhook_events_tableTesting Done
cargo fuzz run fuzz_contribute -- -max_total_time=60→ no panics after fixesevent.id→ 200, no DB changes; new event processes normallypnpm prisma migrate deploysucceeds; indexes presentpnpm test→ 12 new tests pass;pnpm lint && pnpm typecheckcleanNotes
Explorer links only shown when
stellar_tx_hashexists. Fee estimation adds ~80ms latency but prevents failed txs during congestion. Webhook dedup TTL keeps table size bounded.Closes #315
Closes #325
Closes #328
Closes #330