harb/tmp/usertest-results/BALANCE-BUG-FIX-SUMMARY.md
2026-02-18 00:19:05 +01:00

4.4 KiB

Balance Bug Fix - Implementation Summary

Bug Fixed

Issue: KRK token balance takes 10-90+ seconds to load (or never loads) after swapping ETH→KRK, causing "Insufficient Balance" errors on stake page.

Root Cause: The buyKrk() function in CheatsView.vue did not refresh the wallet balance after completing the swap transaction.

Changes Made

File: /home/debian/harb/web-app/src/views/CheatsView.vue

1. Added Import

import { useWallet } from '@/composables/useWallet';

2. Modified buyKrk() Function

Added balance refresh after swap completes:

await writeContract(wagmiConfig, {
  abi: SWAP_ROUTER_ABI,
  address: router,
  functionName: 'exactInputSingle',
  args: [/* swap params */],
  chainId,
});

// FIX: Refresh KRK balance immediately after swap completes
// This ensures the balance is up-to-date when navigating to the stake page
const { loadBalance } = useWallet();
await loadBalance();

toast.success('Swap submitted. Watch your wallet for KRK.');

Expected Behavior After Fix

Before Fix:

  1. User swaps ETH→KRK
  2. User navigates to stake page
  3. Balance shows 0 KRK for 10-90+ seconds (or never)
  4. "Insufficient Balance" error

After Fix:

  1. User swaps ETH→KRK
  2. Balance refreshes automatically (1-2 seconds)
  3. User navigates to stake page
  4. Balance displays correctly immediately
  5. User can stake without waiting

Testing Checklist

Manual Testing:

  • Start local dev environment
  • Connect wallet to app
  • Navigate to Cheats page
  • Buy KRK with ETH (e.g., 0.1 ETH)
  • Wait for transaction confirmation
  • Immediately navigate to Stake page
  • Verify KRK balance displays correctly within 1-2 seconds
  • Verify slider shows correct max amount
  • Attempt to stake - should succeed

Edge Cases to Test:

  • Multiple rapid swaps in succession
  • Swap with slow RPC endpoint
  • Swap then refresh page (should still load)
  • Swap with different wallet providers (MetaMask, Coinbase)
  • Balance display on other pages (Dashboard, etc.)

Regression Testing:

  • Verify existing swap functionality still works
  • Check console for errors during/after swap
  • Verify toast notifications still display
  • Test with wallet disconnection/reconnection

Performance Impact

  • Additional RPC Call: 1 extra balanceOf call after each swap
  • Latency Added: ~100-500ms (typical RPC response time)
  • User Impact: POSITIVE - eliminates 10-90 second wait

Alternative Solutions Considered

  1. Polling (REJECTED):

    • Poll balance every 5-10 seconds
    • Unnecessary RPC calls when no transactions occurring
    • Drains user's RPC quota on rate-limited providers
  2. Router Navigation Guard (OVERKILL):

    • Refresh balance on every route navigation
    • Adds delay to all page loads
    • Unnecessary when balance hasn't changed
  3. Event Bus (FUTURE):

    • Emit events after any token-affecting transaction
    • Clean architecture
    • More complex, requires broader refactoring

Chosen Solution: Direct Call After Transaction

  • Simple, targeted fix
  • Only refreshes when necessary
  • Minimal performance impact
  • Easy to understand and maintain

Monitoring Recommendations

Once deployed, monitor:

  • Time from swap completion to balance display
  • Error rates on stake page
  • User drop-off between swap and stake pages
  • RPC call volumes (should be negligible increase)

If balance still doesn't load after this fix, investigate:

  1. RPC endpoint reliability/latency
  2. Wallet provider connection issues
  3. Contract address mismatches between environments
  4. Browser wallet extension bugs

Future Enhancements:

  1. Add loading indicator during balance refresh
  2. Add manual "Refresh Balance" button on stake page
  3. Show helpful message if balance is 0 after swap
  4. Implement optimistic UI updates (show pending balance)

Rollback Plan

If this fix causes issues:

  1. Revert the two changes to CheatsView.vue
  2. Balance will work as before (requires page refresh or chain switch)
  3. No database or contract changes involved

Deployment Notes

  • No build config changes required
  • No environment variable changes
  • Safe to deploy immediately
  • Can be tested in dev/staging before production

Status: FIXED
Date: 2026-02-14
Files Modified: 1
Lines Changed: ~10
Test Coverage: Manual testing required