Skip to content

fix(batch-tx): replace simulated confirmation with viem-based provider reads#549

Open
danieloche635-bit wants to merge 4 commits into
MettaChain:mainfrom
danieloche635-bit:fix/431-batch-transaction-race-condition
Open

fix(batch-tx): replace simulated confirmation with viem-based provider reads#549
danieloche635-bit wants to merge 4 commits into
MettaChain:mainfrom
danieloche635-bit:fix/431-batch-transaction-race-condition

Conversation

@danieloche635-bit

Copy link
Copy Markdown

Summary (P2)

\BatchTransactionService\ used \Math.random()\ to fabricate confirmation data and raced between real and fake states, causing inconsistent success/failure branching.

Changes

  • Replaced \Math.random()-based simulation with real viem \publicClient\ for \getTransactionStatus\ and \waitForConfirmation\
  • Added \NEXT_PUBLIC_DEMO_TX\ feature flag: when set to \ rue, uses the deterministic demo path
  • Production path throws a clear error instructing developers to configure a wallet client
  • Removed polling loop in favor of viem's \waitForTransactionReceipt\

Tests

  • Added 8 new unit tests covering:
    • Validation errors (insufficient tokens, inactive property)
    • Empty items error handling
    • Demo mode execution with feature flag
    • Gas estimation
    • Transaction status pending/timeout
  • All tests pass in isolation using \jest.resetModules()\ for env var control

Closes #431

- Replace localStorage plaintext UUID storage with salted hash
- Add per-session salt stored in sessionStorage
- Add synchronous hash function for device identity
- Update tests to verify hashed storage behavior

Closes MettaChain#448
- Add /api/security/address-check Next.js API route to proxy Chainalysis requests
- Remove API key exposure from browser via window global (__CHAINALYSIS_API_KEY__)
- Move API key to server-only CHAINALYSIS_API_KEY env variable
- Add security:check-globals npm script to prevent future __ global leaks
- Update tests to verify proxy endpoint usage

Closes MettaChain#442
…ing in ChartStyle

- Remove dangerouslySetInnerHTML usage in chart.tsx ChartStyle component
- Use React's built-in text content escaping via JSX children
- Filter empty CSS rules to prevent rendering empty style tags
- CSS content is automatically HTML-escaped by React's text node rendering

Closes MettaChain#439
…ovider reads

- Replace Math.random()-based simulation with real viem publicClient reads
- Add NEXT_PUBLIC_DEMO_TX feature flag for demo/simulation mode
- Replace polling loop with viem's waitForTransactionReceipt
- Add comprehensive unit tests covering validation, demo mode, and edge cases

Closes MettaChain#431
@drips-wave

drips-wave Bot commented Jun 27, 2026

Copy link
Copy Markdown

@danieloche635-bit 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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug: batchTransaction confirmation logic races simulation branches

2 participants