Skip to content

fix: resolve issues #861, #862, #864, and #866 - #1025

Merged
k-deejah merged 1 commit into
Sorokit:mainfrom
Bilalishaq7:fix/resolve-issues-861-862-864-866
Oct 22, 2026
Merged

k-deejah merged 1 commit into
Sorokit:mainfrom
Bilalishaq7:fix/resolve-issues-861-862-864-866

Conversation

@Bilalishaq7

Copy link
Copy Markdown
Contributor

Summary

• FeeEstimator (#861): Documented and verified unconditional polling interval cancellation on unmount and visibility changes via cancel watchers and useFeeData, preventing dangling timers when useIsVisible reports false at unmount time.
• BatchPaymentProcessor (#862): Enforced Stellar MEMO_TEXT 28-byte limit validation using new TextEncoder().encode(memo).length instead of character count. Covered 10-emoji and mixed-script multi-byte validation.
• SwapSimulator (#864): Enforced MINIMUM_LIQUIDITY_THRESHOLD to prevent division-by-zero, NaN, and Infinity on near-zero or zero liquidity pools, showing "Insufficient liquidity" warning instead.
• GovernanceDashboard (#866): Verified complete implementation of GovernanceDashboard surface including ProposalList (contract read), VoteDialog (confirmation and contract invoke), and DelegationPanel (delegate viewing and modification), along with module exports and smoke-tests.

Why

• #861: Polling intervals in FeeEstimator must be reliably cleared when unmounted, even if the component is hidden/invisible at unmount time.
• #862: Stellar memos are constrained by 28 bytes rather than 28 characters. Emojis and multi-byte unicode strings could pass character length checks but fail at Horizon/Soroban submission.
• #864: Calculating price impact on pools with near-zero or 0 reserves resulted in NaN or Infinity, breaking display and user controls.
• #866: Governance voting is an essential Soroban dApp feature, requiring proposal lists, vote casting confirmation dialogs, and voting delegation management.

Implementation

• src/components/FeeEstimator.tsx & src/components/FeeEstimator.test.tsx:

Testing

• npm run validate: Passed (0 TypeScript errors, 0 ESLint errors).
• npm test -- src/components/FeeEstimator.test.tsx --run: 40/40 passed.
• npm test -- src/components/BatchPaymentProcessor.test.tsx --run: 29/29 passed.
• npm test -- src/components/SwapSimulator.test.tsx --run: 42/42 passed.
• npm test -- src/components/GovernanceDashboard.test.tsx --run: 19/19 passed.
• npm test -- src/__tests__/exports.test.ts --run: 4/4 passed.
• npm run test:exports: Passed.
• npm run build && npm run build:app: Both library and application production bundles compiled cleanly.

Scope / Risk

• Non-breaking changes. Scoped strictly to validation precision, unmount cleanup safeguards, and test suite tracking compliance.

Issue

Closes #861
Closes #862
Closes #864
Closes #866

…t#866

- FeeEstimator (Sorokit#861): ensure polling interval is cleared unconditionally on unmount
- BatchPaymentProcessor (Sorokit#862): validate memo byte length using TextEncoder (28-byte limit)
- SwapSimulator (Sorokit#864): enforce MINIMUM_LIQUIDITY_THRESHOLD and prevent NaN/Infinity for near-zero pool reserves
- GovernanceDashboard (Sorokit#866): verify proposal list, vote casting confirmation dialog, and delegation panel functionality and test coverage

Closes Sorokit#861
Closes Sorokit#862
Closes Sorokit#864
Closes Sorokit#866
@drips-wave

drips-wave Bot commented Oct 19, 2026

Copy link
Copy Markdown

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

@k-deejah
k-deejah merged commit 41eb1b0 into Sorokit:main Oct 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment