sendPayment() in src/services/stellar.ts builds every transaction with fee: StellarSdk.BASE_FEE, the network minimum. During Stellar network congestion, BASE_FEE transactions are routinely deprioritized or fail to make it into the ledger before their timebound expires, especially relevant since .setTimeout(30) gives Horizon only a 30-second window. Implement dynamic fee estimation (Horizon's fee-stats endpoint) with a user-configurable ceiling, and a fee-bump path for a transaction that's already been submitted but is stuck.
Definition of done:
- Fee computed from live network fee stats, not a hardcoded constant, with a sane floor/ceiling
- Fee-bump (
feeBumpTransaction) support for resubmitting a stuck transaction at a higher fee without double-spending risk
- Test covering the case where fee-stats endpoint itself is unreachable (must degrade to a safe default, not crash)
Before opening a PR for this issue, read CONTRIBUTING.md.
This is not a starter-issue. The Definition of done above is the full
acceptance criteria, not a subset to sample from — a PR that addresses part
of it is an unfinished issue, not a smaller one. Your PR must include, in
the PR description itself:
PRs missing these will be sent back before review, not reviewed and rejected — please do this up front.
sendPayment()insrc/services/stellar.tsbuilds every transaction withfee: StellarSdk.BASE_FEE, the network minimum. During Stellar network congestion,BASE_FEEtransactions are routinely deprioritized or fail to make it into the ledger before their timebound expires, especially relevant since.setTimeout(30)gives Horizon only a 30-second window. Implement dynamic fee estimation (Horizon's fee-stats endpoint) with a user-configurable ceiling, and a fee-bump path for a transaction that's already been submitted but is stuck.Definition of done:
feeBumpTransaction) support for resubmitting a stuck transaction at a higher fee without double-spending riskBefore opening a PR for this issue, read CONTRIBUTING.md.
This is not a starter-issue. The Definition of done above is the full
acceptance criteria, not a subset to sample from — a PR that addresses part
of it is an unfinished issue, not a smaller one. Your PR must include, in
the PR description itself:
PRs missing these will be sent back before review, not reviewed and rejected — please do this up front.