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:
- v0.6 Entrypoint - 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789
- v0.7 Entrypoint - 0x0000000071727De22E5E9d8BAf0edAc6f37da032
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.
No additional dependencies
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.
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
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 |