Logo

Overview

A probe scheduler is started in each region and takes care of orchestrating, spawning and executing all probes in this region. For each endpoint, multiple independent probes are started. All the measurements are sent by the probes to a single raw BigQuery Database.


Each endpoint needs to serve the default JSON-RPC scheme provided by the ethereum foundation (https://github.com/ethereum/execution-apis). In general we can say that each EVM compatible chain can be supported. The probe scheduler and the probes are implemented in Rust.


In the BigQuery Database there are multiple queries in place which are getting executed once per day to calculate the data for the previous day. These transformation queries are creating several intermediate tables and transforming the data into their

The final form of the data is queried by Looker Studio and enriched by metadata to produce the final tables.

Methodology

Probes

erc20_balance


This probe measures the time it takes to query the actual balance of a wallet for a given erc20 token. The wallet and the token are predefined per chain.


The measurement starts after the provider is initialized and stops after the request finished and the result is parsed in the representative data types.


Requests are performed using ethers.rs.


For websocket: initialization of the connection is not part of the measurement.

eth_balance


This probe measures the time it takes to query the actual balance of a wallet for the native chain token. The wallet is predefined per chain.


The measurement starts after the provider is initialized and stops after the request finished and the result is parsed in the representative data types.


Requests are performed using ethers.rs.


For websocket: initialization of the connection is not part of the measurement.

eth_block_number


This probe measures the time it takes to query the actual block number of the chain. The wallet is predefined per chain.


The measurement starts after the provider is initialized and stops after the request finished and the result is parsed in the representative data types.


Requests are performed using ethers.rs.


For websocket: initialization of the connection is not part of the measurement.

http_basic


This probe performs a http request towards the RPC endpoint with an empty body.


The measurement starts after the client is initialized and stops after we receive a response from the server.


Requests are performed using reqwest.

websocket_basic


This probe performs a websocket request towards the RPC endpoint. It queries the client version with the following request body:


{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}

The measurement starts after the client is initialized and stops after we receive a response from the server.


Requests are performed using tokio-tungstenite.

websocket_block_propagation


All probes in a region are executed in parallel. Each probe subscribes to receive new blocks from the provider and waits until it receives 10 blocks. This probe measures the timestamp at which each block was received by the probe.


This probe only works for websocket connections.


Requests are performed using ethers.rs.

websocket_mempool_propagation


All probes in a region are executed in parallel. Each probe subscribes to receive new mempool transactions from the provider for the next 30 seconds. This probe measures the timestamp at which each transaction was received by the probe.


This probe only works for websocket connections.


Requests are performed using ethers.rs.

erc20_balance_archival


For this probe, we are querying the (actual_block_number * 0.99) and measure the time it takes to query the balance of a wallet for a given erc20 token. The wallet and the token are predefined per chain.


The measurement starts after the provider is initialized and stops after the request finished and the result is parsed in the representative data types.


Requests are performed using ethers.rs.


For websocket: initialization of the connection is not part of the measurement.

Looker Studio

Best location per chain


  • Calculating average request latency per endpoint per probe per day.
  • Only considering measurements from the probes ‘erc20_balance’, ‘eth_balance’ and ‘eth_block_number’.
  • Showing the lowest average per region.

Lowest request latency by region


  • Calculating average, median, and p95 request latency per endpoint per probe per day.
  • Only considering measurements from the probes ‘erc20_balance’, ‘eth_balance’ and ‘eth_block_number’.
  • Showing the average for these metrics for the given timeframe.

Fastest chains (request latency)


  • Calculating average request latency per endpoint per probe per day.
  • Only considering measurements from the probes ‘erc20_balance’, ‘eth_balance’ and ‘eth_block_number’.
  • Showing the average of the daily values across all endpoints and regions for the given chain and timeframe.

Block propagation delay by provider


  • Only works for endpoints with a websocket connection.
  • Collecting the same blocks per chain per region. For each collected block in the same region:
    • Find the earliest timestamp.
    • For each provider: calculate the delay to the earliest timestamp.
  • Showing the average delay per endpoint.

Fastest Provider for a chain


  • Calculating average, median, and p95 request latency per endpoint per probe per day.
  • Grouping endpoints by provider and availability.
  • Only considering measurements from the probes ‘erc20_balance’, ‘eth_balance’ and ‘eth_block_number’.
  • Showing average of all metrics for the given chain and timeframe.

Provider details


  • Calculating average, median, and p95 request latency per endpoint per probe per day.
  • Showing all endpoints for a given provider.
  • Showing average of all metrics for the given provider and timeframe.

Archival Requests


  • Calculating average, median, and p95 request latency per endpoint per probe per day.
  • Only considering measurements from the probes ‘erc20_balance’ and ‘erc20_balance_archival’.
  • Showing the average of ‘erc20_balance’ and ‘erc20_balance_archival’ for the given timeframe.
  • Null-value means, there is no measurement in the timeframe for this particular probe.