Skip to content

Latest commit

 

History

History
 
 

user-ops-indexer

User Ops Indexer

User Ops Indexer is a service designed to index, decode and serve user operations as per the ERC-4337 standard.

The service can index 2 official ERC-4337 Entrypoint deployments:

The service consists of 2 parts:

  • Indexer logic - entrypoint contract indexing module. Each entrypoint contract is indexed in a separate tokio async task.
  • API server - API module serving data about indexed user operations, accounts, factories, bundlers.

Requirements

No additional dependencies

How to run

Production

Set the following ENVs on the Blockscout instance (configuration):

  • MICROSERVICE_ACCOUNT_ABSTRACTION_ENABLED=true
  • MICROSERVICE_ACCOUNT_ABSTRACTION_URL={service_url}

And the following ENVs on the Blockscout frontend (configuration):

  • NEXT_PUBLIC_HAS_USER_OPS=true

It's recommended to run all the services using docker compose or Blockscout Stack Helm charts.

Locally

For testing and development purposes, service can be run locally, without having an active instance of Blockscout Elixir backend, but it'll need access to the working JSON RPC URL and to the fully indexed Blockscout database (tables blocks and logs in particular).

Configure env as described above and then run the service as following:

cargo run --bin user-ops-indexer-server

Envs

Here, we describe variables specific to this service. Variables common to all services can be found here.

Variable Required Description Default value
USER_OPS_INDEXER__API__MAX_PAGE_SIZE Max page size for API requests 100
USER_OPS_INDEXER__INDEXER__RPC_URL true Indexer RPC URL, should be an archive JSON RPC node with eth, web3 and trace/debug namespaces enabled. Both HTTP and WS protocols are supported. WS is recommended for local RPC nodes, use HTTP otherwise. ws://127.0.0.1:8546
USER_OPS_INDEXER__INDEXER__CONCURRENCY Indexer concurrency. Will process up to the configured number of transactions concurrently 10
USER_OPS_INDEXER__INDEXER__ENTRYPOINTS__V06 Enable Entrypoint v0.6 indexer true
USER_OPS_INDEXER__INDEXER__ENTRYPOINTS__V06_ENTRY_POINT Entrypoint v0.6 contract address 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789
USER_OPS_INDEXER__INDEXER__ENTRYPOINTS__V07 Enable Entrypoint v0.7 indexer true
USER_OPS_INDEXER__INDEXER__ENTRYPOINTS__V07_ENTRY_POINT Entrypoint v0.7 contract address 0x0000000071727De22E5E9d8BAf0edAc6f37da032
USER_OPS_INDEXER__INDEXER__REALTIME__ENABLED Enable forward realtime indexing of user operations from the latest block true
USER_OPS_INDEXER__INDEXER__PAST_RPC_LOGS_INDEXER__ENABLED Enable one-time reindex of missed user operations from recent blocks false
USER_OPS_INDEXER__INDEXER__PAST_RPC_LOGS_INDEXER__BLOCK_RANGE Block range width for missed user operations reindex. Will re-index events from a given number of blocks prior the latest block 0
USER_OPS_INDEXER__INDEXER__PAST_DB_LOGS_INDEXER__ENABLED Enable one-time reindex of missed user operations from core Blockscout DB. Will query relevant events from logs Postgres table false
USER_OPS_INDEXER__INDEXER__PAST_DB_LOGS_INDEXER__START_BLOCK Block range start for one-time DB reindex. Use positive number for static block number, or zero/negative number to count backwards from latest 0
USER_OPS_INDEXER__INDEXER__PAST_DB_LOGS_INDEXER__END_BLOCK Block range end for one-time DB reindex. Use positive number for static block number, or zero/negative number to count backwards from latest 0
USER_OPS_INDEXER__DATABASE__CONNECT__URL true Postgres connect URL to Blockscout DB with read/write access (empty)
USER_OPS_INDEXER__DATABASE__CREATE_DATABASE Create database if doesn't exist false
USER_OPS_INDEXER__DATABASE__RUN_MIGRATIONS Run database migrations false

Links