Skip to content

Conversation

@AugustoL
Copy link
Collaborator

Description

Implement a binary search algorithm on blockchain state (nonce/balance) to find address transactions without requiring an indexer. This enables transaction history for any address on any network directly from RPC.

Related Issue

N/A

Type of Change

  • Bug fix
  • New feature
  • Documentation update
  • Refactoring
  • Performance improvement
  • Other (please describe):

Changes Made

  • Implement binary search on blockchain state (nonce/balance) to find address transactions
  • Add streaming support to display transactions as they are found
  • Support internal transaction detection by scanning calldata and logs
  • Add search controls with configurable limits (5, 10, 50, all)
  • Add Load More functionality to fetch older transactions
  • Add progress bar with cancel button during search
  • Display Block column in transaction history table
  • Optimize internal tx detection to check calldata first (no RPC calls)
  • Add rate limiting with smaller batches to avoid 429 errors

Screenshots (if applicable)

N/A

Checklist

  • I have run npm run format:fix and npm run lint:fix
  • I have run npm run typecheck with no errors
  • I have run tests with npm run test:run
  • I have tested my changes locally
  • I have updated documentation if needed
  • My code follows the project's architecture patterns

Additional Notes

This feature allows OpenScan to show transaction history for any address without relying on third-party indexers. The binary search algorithm efficiently finds transactions by checking the address's nonce/balance at different block heights.

AugustoL and others added 9 commits January 13, 2026 12:03
- Update waitForLoad() to wait for blocksHeaderInfo which only appears
  when data is loaded, fixing race condition with loading state
- Use exact regex match for Gas column header to avoid ambiguity with
  Gas Price column
- Add dotenv to load environment variables from .env file
- Inject INFURA_E2E_API_KEY and ALCHEMY_E2E_API_KEY via localStorage
- RPC endpoints are prepended to mainnet for more reliable e2e tests
- Load .env file using dotenv for API keys
- Increase retries: 6 for CI, 3 for local
- Increase workers: 2 for CI (parallel execution)
- Add documentation for RPC API key env vars
- Add waitForNavigationLoad() method to TxsPage
- Wait for loading state to start AND finish after pagination clicks
- Wait for URL changes before checking button states
- Use exact regex match for Gas column to avoid ambiguity
- Wait for either address content or error page
- Pass test if error page shown (RPC flakiness, not test failure)
…/claude-gh-action

Create claude.yml gh workflow
…st-race-condition

fix(e2e): resolve race condition in txs page tests
…rithm

- Implement binary search on blockchain state (nonce/balance) to find
  address transactions without requiring an indexer
- Add streaming support to display transactions as they are found
- Support internal transaction detection by scanning calldata and logs
- Add search controls with configurable limits (5, 10, 50, all)
- Add Load More functionality to fetch older transactions
- Add progress bar with cancel button during search
- Display Block column in transaction history table
- Optimize internal tx detection to check calldata first (no RPC calls)
- Add rate limiting with smaller batches to avoid 429 errors
@github-actions
Copy link

🚀 Preview: https://pr-154--openscan.netlify.app
📝 Commit: 8c2a6c1d1c5b3a3c2595bd97100007c4b70aabab

@MatiasOS MatiasOS self-requested a review January 17, 2026 15:10
@MatiasOS
Copy link
Member

MatiasOS commented Jan 17, 2026

Address for testing: mati-os.eth

Text on number of txs

Text says: Found 1 of 9 transactions. But it's searching for 10 txs

image

Button failing to load more txs

Load 10 more txs; it doesn't work, and there is no feedback on click
image

Switch to 5 and click.

  • Buttons disappear; the search starts. (Ok)
  • The loading bar doesn't display anything (image below).
  • Text update to Found 12 of 5 (image below).
image

Copy link
Member

@MatiasOS MatiasOS left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Previous comment

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.

3 participants