Fri, May 29, 2026

Propagation anomalies - 2026-05-29

Detection of blocks that propagated slower than expected, attempting to find correlations with blob count.

Show code
display_sql("block_production_timeline", target_date)
View query
WITH
-- Base slots using proposer duty as the source of truth
slots AS (
    SELECT DISTINCT
        slot,
        slot_start_date_time,
        proposer_validator_index
    FROM canonical_beacon_proposer_duty
    WHERE meta_network_name = 'mainnet'
      AND slot_start_date_time >= '2026-05-29' AND slot_start_date_time < '2026-05-29'::date + INTERVAL 1 DAY
),

-- Proposer entity mapping
proposer_entity AS (
    SELECT
        index,
        entity
    FROM ethseer_validator_entity
    WHERE meta_network_name = 'mainnet'
),

-- Blob count per slot
blob_count AS (
    SELECT
        slot,
        uniq(blob_index) AS blob_count
    FROM canonical_beacon_blob_sidecar
    WHERE meta_network_name = 'mainnet'
      AND slot_start_date_time >= '2026-05-29' AND slot_start_date_time < '2026-05-29'::date + INTERVAL 1 DAY
    GROUP BY slot
),

-- Canonical block hash (to verify MEV payload was actually used)
canonical_block AS (
    SELECT DISTINCT
        slot,
        execution_payload_block_hash
    FROM canonical_beacon_block
    WHERE meta_network_name = 'mainnet'
      AND slot_start_date_time >= '2026-05-29' AND slot_start_date_time < '2026-05-29'::date + INTERVAL 1 DAY
),

-- MEV bid timing using timestamp_ms
mev_bids AS (
    SELECT
        slot,
        slot_start_date_time,
        min(timestamp_ms) AS first_bid_timestamp_ms,
        max(timestamp_ms) AS last_bid_timestamp_ms
    FROM mev_relay_bid_trace
    WHERE meta_network_name = 'mainnet'
      AND slot_start_date_time >= '2026-05-29' AND slot_start_date_time < '2026-05-29'::date + INTERVAL 1 DAY
    GROUP BY slot, slot_start_date_time
),

-- MEV payload delivery - join canonical block with delivered payloads
-- Note: Use is_mev flag because ClickHouse LEFT JOIN returns 0 (not NULL) for non-matching rows
-- Get value from proposer_payload_delivered (not bid_trace, which may not have the winning block)
mev_payload AS (
    SELECT
        cb.slot,
        cb.execution_payload_block_hash AS winning_block_hash,
        1 AS is_mev,
        max(pd.value) AS winning_bid_value,
        groupArray(DISTINCT pd.relay_name) AS relay_names,
        any(pd.builder_pubkey) AS winning_builder
    FROM canonical_block cb
    GLOBAL INNER JOIN mev_relay_proposer_payload_delivered pd
        ON cb.slot = pd.slot AND cb.execution_payload_block_hash = pd.block_hash
    WHERE pd.meta_network_name = 'mainnet'
      AND slot_start_date_time >= '2026-05-29' AND slot_start_date_time < '2026-05-29'::date + INTERVAL 1 DAY
    GROUP BY cb.slot, cb.execution_payload_block_hash
),

-- Winning bid timing from bid_trace (may not exist for all MEV blocks)
winning_bid AS (
    SELECT
        bt.slot,
        bt.slot_start_date_time,
        argMin(bt.timestamp_ms, bt.event_date_time) AS winning_bid_timestamp_ms
    FROM mev_relay_bid_trace bt
    GLOBAL INNER JOIN mev_payload mp ON bt.slot = mp.slot AND bt.block_hash = mp.winning_block_hash
    WHERE bt.meta_network_name = 'mainnet'
      AND slot_start_date_time >= '2026-05-29' AND slot_start_date_time < '2026-05-29'::date + INTERVAL 1 DAY
    GROUP BY bt.slot, bt.slot_start_date_time
),

-- Block gossip timing with spread
block_gossip AS (
    SELECT
        slot,
        min(event_date_time) AS block_first_seen,
        max(event_date_time) AS block_last_seen
    FROM libp2p_gossipsub_beacon_block
    WHERE meta_network_name = 'mainnet'
      AND slot_start_date_time >= '2026-05-29' AND slot_start_date_time < '2026-05-29'::date + INTERVAL 1 DAY
    GROUP BY slot
),

-- Column arrival timing: first arrival per column, then min/max of those
column_gossip AS (
    SELECT
        slot,
        min(first_seen) AS first_column_first_seen,
        max(first_seen) AS last_column_first_seen
    FROM (
        SELECT
            slot,
            column_index,
            min(event_date_time) AS first_seen
        FROM libp2p_gossipsub_data_column_sidecar
        WHERE meta_network_name = 'mainnet'
          AND slot_start_date_time >= '2026-05-29' AND slot_start_date_time < '2026-05-29'::date + INTERVAL 1 DAY
          AND event_date_time > '1970-01-01 00:00:01'
        GROUP BY slot, column_index
    )
    GROUP BY slot
)

SELECT
    s.slot AS slot,
    s.slot_start_date_time AS slot_start_date_time,
    pe.entity AS proposer_entity,

    -- Blob count
    coalesce(bc.blob_count, 0) AS blob_count,

    -- MEV bid timing (absolute and relative to slot start)
    fromUnixTimestamp64Milli(mb.first_bid_timestamp_ms) AS first_bid_at,
    mb.first_bid_timestamp_ms - toInt64(toUnixTimestamp(mb.slot_start_date_time)) * 1000 AS first_bid_ms,
    fromUnixTimestamp64Milli(mb.last_bid_timestamp_ms) AS last_bid_at,
    mb.last_bid_timestamp_ms - toInt64(toUnixTimestamp(mb.slot_start_date_time)) * 1000 AS last_bid_ms,

    -- Winning bid timing (from bid_trace, may be NULL if block hash not in bid_trace)
    if(wb.slot != 0, fromUnixTimestamp64Milli(wb.winning_bid_timestamp_ms), NULL) AS winning_bid_at,
    if(wb.slot != 0, wb.winning_bid_timestamp_ms - toInt64(toUnixTimestamp(s.slot_start_date_time)) * 1000, NULL) AS winning_bid_ms,

    -- MEV payload info (from proposer_payload_delivered, always present for MEV blocks)
    if(mp.is_mev = 1, mp.winning_bid_value, NULL) AS winning_bid_value,
    if(mp.is_mev = 1, mp.relay_names, []) AS winning_relays,
    if(mp.is_mev = 1, mp.winning_builder, NULL) AS winning_builder,

    -- Block gossip timing with spread
    bg.block_first_seen,
    dateDiff('millisecond', s.slot_start_date_time, bg.block_first_seen) AS block_first_seen_ms,
    bg.block_last_seen,
    dateDiff('millisecond', s.slot_start_date_time, bg.block_last_seen) AS block_last_seen_ms,
    dateDiff('millisecond', bg.block_first_seen, bg.block_last_seen) AS block_spread_ms,

    -- Column arrival timing (NULL when no blobs)
    if(coalesce(bc.blob_count, 0) = 0, NULL, cg.first_column_first_seen) AS first_column_first_seen,
    if(coalesce(bc.blob_count, 0) = 0, NULL, dateDiff('millisecond', s.slot_start_date_time, cg.first_column_first_seen)) AS first_column_first_seen_ms,
    if(coalesce(bc.blob_count, 0) = 0, NULL, cg.last_column_first_seen) AS last_column_first_seen,
    if(coalesce(bc.blob_count, 0) = 0, NULL, dateDiff('millisecond', s.slot_start_date_time, cg.last_column_first_seen)) AS last_column_first_seen_ms,
    if(coalesce(bc.blob_count, 0) = 0, NULL, dateDiff('millisecond', cg.first_column_first_seen, cg.last_column_first_seen)) AS column_spread_ms

FROM slots s
GLOBAL LEFT JOIN proposer_entity pe ON s.proposer_validator_index = pe.index
GLOBAL LEFT JOIN blob_count bc ON s.slot = bc.slot
GLOBAL LEFT JOIN mev_bids mb ON s.slot = mb.slot
GLOBAL LEFT JOIN mev_payload mp ON s.slot = mp.slot
GLOBAL LEFT JOIN winning_bid wb ON s.slot = wb.slot
GLOBAL LEFT JOIN block_gossip bg ON s.slot = bg.slot
GLOBAL LEFT JOIN column_gossip cg ON s.slot = cg.slot

ORDER BY s.slot DESC
Show code
df = load_parquet("block_production_timeline", target_date)

# Filter to valid blocks (exclude missed slots)
df = df[df["block_first_seen_ms"].notna()]
df = df[(df["block_first_seen_ms"] >= 0) & (df["block_first_seen_ms"] < 60000)]

# Flag MEV vs local blocks
df["has_mev"] = df["winning_bid_value"].notna()
df["block_type"] = df["has_mev"].map({True: "MEV", False: "Local"})

# Get max blob count for charts
max_blobs = df["blob_count"].max()

print(f"Total valid blocks: {len(df):,}")
print(f"MEV blocks: {df['has_mev'].sum():,} ({df['has_mev'].mean()*100:.1f}%)")
print(f"Local blocks: {(~df['has_mev']).sum():,} ({(~df['has_mev']).mean()*100:.1f}%)")
Total valid blocks: 7,179
MEV blocks: 6,693 (93.2%)
Local blocks: 486 (6.8%)

Anomaly detection method

The method:

  1. Fit linear regression: block_first_seen_ms ~ blob_count
  2. Calculate residuals (actual - expected)
  3. Flag blocks with residuals > 2σ as anomalies

Points above the ±2σ band propagated slower than expected given their blob count.

Show code
# Conditional outliers: blocks slow relative to their blob count
df_anomaly = df.copy()

# Fit regression: block_first_seen_ms ~ blob_count
slope, intercept, r_value, p_value, std_err = stats.linregress(
    df_anomaly["blob_count"].astype(float), df_anomaly["block_first_seen_ms"]
)

# Calculate expected value and residual
df_anomaly["expected_ms"] = intercept + slope * df_anomaly["blob_count"].astype(float)
df_anomaly["residual_ms"] = df_anomaly["block_first_seen_ms"] - df_anomaly["expected_ms"]

# Calculate residual standard deviation
residual_std = df_anomaly["residual_ms"].std()

# Flag anomalies: residual > 2σ (unexpectedly slow)
df_anomaly["is_anomaly"] = df_anomaly["residual_ms"] > 2 * residual_std

n_anomalies = df_anomaly["is_anomaly"].sum()
pct_anomalies = n_anomalies / len(df_anomaly) * 100

# Prepare outliers dataframe
df_outliers = df_anomaly[df_anomaly["is_anomaly"]].copy()
df_outliers["relay"] = df_outliers["winning_relays"].apply(lambda x: x[0] if len(x) > 0 else "Local")
df_outliers["proposer"] = df_outliers["proposer_entity"].fillna("Unknown")
df_outliers["builder"] = df_outliers["winning_builder"].apply(
    lambda x: f"{x[:10]}..." if pd.notna(x) and x else "Local"
)

print(f"Regression: block_ms = {intercept:.1f} + {slope:.2f} × blob_count (R² = {r_value**2:.3f})")
print(f"Residual σ = {residual_std:.1f}ms")
print(f"Anomalies (>2σ slow): {n_anomalies:,} ({pct_anomalies:.1f}%)")
Regression: block_ms = 1688.9 + 15.66 × blob_count (R² = 0.008)
Residual σ = 618.9ms
Anomalies (>2σ slow): 540 (7.5%)
Show code
# Create scatter plot with regression band
x_range = np.array([0, int(max_blobs)])
y_pred = intercept + slope * x_range
y_upper = y_pred + 2 * residual_std
y_lower = y_pred - 2 * residual_std

fig = go.Figure()

# Add ±2σ band
fig.add_trace(go.Scatter(
    x=np.concatenate([x_range, x_range[::-1]]),
    y=np.concatenate([y_upper, y_lower[::-1]]),
    fill="toself",
    fillcolor="rgba(100,100,100,0.2)",
    line=dict(width=0),
    name="±2σ band",
    hoverinfo="skip",
))

# Add regression line
fig.add_trace(go.Scatter(
    x=x_range,
    y=y_pred,
    mode="lines",
    line=dict(color="white", width=2, dash="dash"),
    name="Expected",
))

# Normal points (sample to avoid overplotting)
df_normal = df_anomaly[~df_anomaly["is_anomaly"]]
if len(df_normal) > 2000:
    df_normal = df_normal.sample(2000, random_state=42)

fig.add_trace(go.Scatter(
    x=df_normal["blob_count"],
    y=df_normal["block_first_seen_ms"],
    mode="markers",
    marker=dict(size=4, color="rgba(100,150,200,0.4)"),
    name=f"Normal ({len(df_anomaly) - n_anomalies:,})",
    hoverinfo="skip",
))

# Anomaly points
fig.add_trace(go.Scatter(
    x=df_outliers["blob_count"],
    y=df_outliers["block_first_seen_ms"],
    mode="markers",
    marker=dict(
        size=7,
        color="#e74c3c",
        line=dict(width=1, color="white"),
    ),
    name=f"Anomalies ({n_anomalies:,})",
    customdata=np.column_stack([
        df_outliers["slot"],
        df_outliers["residual_ms"].round(0),
        df_outliers["relay"],
    ]),
    hovertemplate="<b>Slot %{customdata[0]}</b><br>Blobs: %{x}<br>Actual: %{y:.0f}ms<br>+%{customdata[1]}ms vs expected<br>Relay: %{customdata[2]}<extra></extra>",
))

fig.update_layout(
    margin=dict(l=60, r=30, t=30, b=60),
    xaxis=dict(title="Blob count", range=[-0.5, int(max_blobs) + 0.5]),
    yaxis=dict(title="Block first seen (ms from slot start)"),
    legend=dict(orientation="h", yanchor="bottom", y=1.02, xanchor="right", x=1),
    height=500,
)
fig.show(config={"responsive": True})

All propagation anomalies

Blocks that propagated much slower than expected given their blob count, sorted by residual (worst first).

Show code
# All anomalies table with selectable text and Lab links
if n_anomalies > 0:
    df_table = df_outliers.sort_values("residual_ms", ascending=False)[
        ["slot", "blob_count", "block_first_seen_ms", "expected_ms", "residual_ms", "proposer", "builder", "relay"]
    ].copy()
    df_table["block_first_seen_ms"] = df_table["block_first_seen_ms"].round(0).astype(int)
    df_table["expected_ms"] = df_table["expected_ms"].round(0).astype(int)
    df_table["residual_ms"] = df_table["residual_ms"].round(0).astype(int)
    
    # Build HTML table
    html = '''
    <style>
    .anomaly-table { border-collapse: collapse; width: 100%; font-family: monospace; font-size: 13px; }
    .anomaly-table th { background: #2c3e50; color: white; padding: 8px 12px; text-align: left; position: sticky; top: 0; }
    .anomaly-table td { padding: 6px 12px; border-bottom: 1px solid #eee; }
    .anomaly-table tr:hover { background: #f5f5f5; }
    .anomaly-table .num { text-align: right; }
    .anomaly-table .delta { background: #ffebee; color: #c62828; font-weight: bold; }
    .anomaly-table a { color: #1976d2; text-decoration: none; }
    .anomaly-table a:hover { text-decoration: underline; }
    .table-container { max-height: 600px; overflow-y: auto; }
    </style>
    <div class="table-container">
    <table class="anomaly-table">
    <thead>
    <tr><th>Slot</th><th class="num">Blobs</th><th class="num">Actual (ms)</th><th class="num">Expected (ms)</th><th class="num">Δ (ms)</th><th>Proposer</th><th>Builder</th><th>Relay</th></tr>
    </thead>
    <tbody>
    '''
    
    for _, row in df_table.iterrows():
        slot_link = f'<a href="https://lab.ethpandaops.io/ethereum/slots/{row["slot"]}" target="_blank">{row["slot"]}</a>'
        html += f'''<tr>
            <td>{slot_link}</td>
            <td class="num">{row["blob_count"]}</td>
            <td class="num">{row["block_first_seen_ms"]}</td>
            <td class="num">{row["expected_ms"]}</td>
            <td class="num delta">+{row["residual_ms"]}</td>
            <td>{row["proposer"]}</td>
            <td>{row["builder"]}</td>
            <td>{row["relay"]}</td>
        </tr>'''
    
    html += '</tbody></table></div>'
    display(HTML(html))
    print(f"\nTotal anomalies: {len(df_table):,}")
else:
    print("No anomalies detected.")
SlotBlobsActual (ms)Expected (ms)Δ (ms)ProposerBuilderRelay
14435779 0 11438 1689 +9749 rocketpool Local Local
14432480 0 7271 1689 +5582 upbit Local Local
14436960 11 7149 1861 +5288 upbit Local Local
14435616 0 6847 1689 +5158 upbit Local Local
14436096 4 6209 1752 +4457 upbit Local Local
14434785 0 4908 1689 +3219 whale_0x713f Local Local
14438144 1 3770 1705 +2065 stakefish 0x823e0146... Flashbots
14434213 0 3703 1689 +2014 nethermind_lido 0x856b0004... BloXroute Max Profit
14435584 2 3642 1720 +1922 0x850b00e0... BloXroute Max Profit
14434795 8 3684 1814 +1870 nethermind_lido 0x8527d16c... Ultra Sound
14434305 3 3564 1736 +1828 whale_0x9212 0xb67eaa5e... BloXroute Regulated
14438707 4 3556 1752 +1804 coinbase 0x856b0004... BloXroute Max Profit
14438633 5 3523 1767 +1756 blockdaemon 0x8a850621... Titan Relay
14436429 10 3586 1846 +1740 blockdaemon 0x8a850621... Ultra Sound
14437051 9 3565 1830 +1735 blockdaemon 0xb67eaa5e... BloXroute Max Profit
14438551 0 3411 1689 +1722 0x851b00b1... BloXroute Max Profit
14434888 9 3533 1830 +1703 nodeset 0x823e0146... BloXroute Max Profit
14435215 7 3492 1799 +1693 blockdaemon_lido 0x88a53ec4... BloXroute Regulated
14432965 5 3460 1767 +1693 blockdaemon 0x8a850621... Titan Relay
14437204 5 3446 1767 +1679 blockdaemon 0x8a850621... Titan Relay
14437020 0 3365 1689 +1676 whale_0xdc8d 0xb26f9666... Titan Relay
14432554 0 3362 1689 +1673 p2porg 0x857b0038... BloXroute Regulated
14434151 1 3375 1705 +1670 blockdaemon 0xb26f9666... Ultra Sound
14435769 2 3381 1720 +1661 0xb67eaa5e... BloXroute Max Profit
14436328 1 3362 1705 +1657 blockdaemon 0x8a850621... Titan Relay
14435076 5 3423 1767 +1656 everstake 0xb26f9666... Titan Relay
14436849 2 3375 1720 +1655 blockdaemon 0x8527d16c... Ultra Sound
14433498 0 3341 1689 +1652 blockdaemon 0x8a850621... Ultra Sound
14438344 1 3356 1705 +1651 blockdaemon 0x8527d16c... Ultra Sound
14437765 0 3337 1689 +1648 blockdaemon 0x851b00b1... BloXroute Max Profit
14437520 1 3346 1705 +1641 blockdaemon_lido 0x8527d16c... Ultra Sound
14436391 4 3392 1752 +1640 blockdaemon 0xb67eaa5e... BloXroute Regulated
14433492 2 3359 1720 +1639 whale_0xdc8d 0xb67eaa5e... BloXroute Regulated
14438850 12 3514 1877 +1637 whale_0x3878 0xb67eaa5e... BloXroute Regulated
14434823 8 3450 1814 +1636 blockdaemon 0xb67eaa5e... BloXroute Regulated
14434714 1 3339 1705 +1634 blockdaemon 0x8527d16c... Ultra Sound
14433570 7 3431 1799 +1632 blockdaemon 0x88a53ec4... BloXroute Max Profit
14433761 1 3334 1705 +1629 whale_0xdc8d 0x885c17ef... BloXroute Max Profit
14435293 0 3316 1689 +1627 0x851b00b1... BloXroute Max Profit
14437968 6 3408 1783 +1625 blockdaemon_lido 0x8527d16c... Ultra Sound
14435385 3 3361 1736 +1625 blockdaemon 0xb26f9666... Titan Relay
14437439 5 3391 1767 +1624 whale_0xdc8d 0x8db2a99d... BloXroute Max Profit
14439231 3 3358 1736 +1622 blockdaemon_lido 0x88857150... Ultra Sound
14435725 5 3382 1767 +1615 blockdaemon 0x8db2a99d... BloXroute Max Profit
14439409 4 3363 1752 +1611 gateway.fmas_lido 0x88a53ec4... BloXroute Regulated
14433122 10 3456 1846 +1610 blockdaemon 0x8527d16c... Ultra Sound
14436959 1 3309 1705 +1604 blockdaemon_lido 0x8527d16c... Ultra Sound
14434435 2 3324 1720 +1604 blockdaemon 0x8527d16c... Ultra Sound
14433288 5 3368 1767 +1601 blockdaemon_lido 0x85fb0503... BloXroute Max Profit
14437793 1 3304 1705 +1599 solo_stakers 0x8b8edce5... Flashbots
14436167 0 3288 1689 +1599 0xb26f9666... Ultra Sound
14432778 1 3303 1705 +1598 0xb26f9666... Ultra Sound
14439240 0 3287 1689 +1598 blockdaemon 0x857b0038... BloXroute Max Profit
14439386 3 3329 1736 +1593 gateway.fmas_lido 0x8527d16c... Ultra Sound
14433615 2 3313 1720 +1593 blockdaemon 0x88a53ec4... BloXroute Max Profit
14437627 13 3485 1893 +1592 ether.fi 0xb67eaa5e... Titan Relay
14438079 4 3342 1752 +1590 blockdaemon 0x8527d16c... Ultra Sound
14434028 0 3277 1689 +1588 blockdaemon 0x8527d16c... Ultra Sound
14439581 0 3275 1689 +1586 blockdaemon_lido 0xb26f9666... Titan Relay
14436854 5 3353 1767 +1586 blockdaemon_lido 0x850b00e0... BloXroute Max Profit
14436657 6 3366 1783 +1583 blockdaemon_lido 0x88857150... Ultra Sound
14437595 2 3303 1720 +1583 blockdaemon_lido 0xb67eaa5e... Ultra Sound
14435738 16 3522 1940 +1582 blockdaemon_lido 0x850b00e0... BloXroute Max Profit
14433372 0 3270 1689 +1581 blockdaemon 0x85fb0503... BloXroute Max Profit
14433685 1 3284 1705 +1579 revolut 0x8db2a99d... Titan Relay
14438063 8 3392 1814 +1578 gateway.fmas_lido 0x88a53ec4... BloXroute Max Profit
14436658 1 3282 1705 +1577 luno 0xb67eaa5e... BloXroute Regulated
14433163 5 3343 1767 +1576 blockdaemon_lido 0x88857150... Ultra Sound
14435455 4 3326 1752 +1574 blockdaemon 0x88a53ec4... BloXroute Max Profit
14434669 7 3372 1799 +1573 whale_0xdc8d 0x8527d16c... Ultra Sound
14439514 0 3261 1689 +1572 blockdaemon_lido 0xa03781b9... Ultra Sound
14435207 5 3339 1767 +1572 revolut 0x823e0146... BloXroute Max Profit
14433493 5 3338 1767 +1571 blockdaemon 0x88a53ec4... BloXroute Regulated
14435649 6 3353 1783 +1570 blockdaemon_lido 0xb67eaa5e... Titan Relay
14433354 6 3353 1783 +1570 luno 0xb26f9666... Ultra Sound
14435011 2 3288 1720 +1568 whale_0xdc8d 0x8527d16c... Ultra Sound
14435581 0 3254 1689 +1565 luno 0x851b00b1... BloXroute Max Profit
14434818 0 3251 1689 +1562 blockdaemon_lido 0x851b00b1... BloXroute Max Profit
14432782 7 3359 1799 +1560 gateway.fmas_lido 0x885c17ef... BloXroute Max Profit
14432865 8 3374 1814 +1560 whale_0xdc8d 0xb26f9666... BloXroute Max Profit
14437133 0 3248 1689 +1559 blockdaemon 0x8527d16c... Ultra Sound
14438191 4 3310 1752 +1558 0x8527d16c... Ultra Sound
14436055 9 3388 1830 +1558 luno 0x8527d16c... Ultra Sound
14437192 0 3247 1689 +1558 luno 0x823e0146... BloXroute Max Profit
14438720 0 3246 1689 +1557 whale_0x1435 0x851b00b1... BloXroute Max Profit
14436841 8 3369 1814 +1555 blockdaemon 0x88a53ec4... BloXroute Regulated
14433199 0 3243 1689 +1554 solo_stakers Local Local
14437727 1 3258 1705 +1553 blockdaemon_lido 0xb67eaa5e... BloXroute Regulated
14433795 6 3336 1783 +1553 p2porg_lido 0xb67eaa5e... Titan Relay
14433035 6 3336 1783 +1553 whale_0x8914 0x88857150... Ultra Sound
14435148 0 3240 1689 +1551 whale_0xfd67 0x851b00b1... Ultra Sound
14439403 7 3347 1799 +1548 gateway.fmas_lido 0x88a53ec4... BloXroute Regulated
14436878 1 3252 1705 +1547 p2porg 0xb26f9666... Titan Relay
14434367 0 3235 1689 +1546 blockdaemon 0xb26f9666... Titan Relay
14435078 1 3249 1705 +1544 blockdaemon 0x8527d16c... Ultra Sound
14435401 0 3231 1689 +1542 gateway.fmas_lido 0x88a53ec4... BloXroute Max Profit
14435879 5 3309 1767 +1542 revolut 0xb7c5e609... BloXroute Max Profit
14436241 0 3227 1689 +1538 p2porg 0xac23f8cc... Titan Relay
14438365 1 3239 1705 +1534 blockdaemon_lido 0x88857150... Ultra Sound
14435373 9 3364 1830 +1534 blockdaemon 0xb26f9666... Titan Relay
14434590 6 3315 1783 +1532 whale_0x8914 0x88857150... Ultra Sound
14433531 0 3220 1689 +1531 nethermind_lido 0x88a53ec4... BloXroute Regulated
14434686 0 3220 1689 +1531 blockdaemon_lido 0x851b00b1... BloXroute Max Profit
14436381 10 3372 1846 +1526 blockdaemon 0x8527d16c... Ultra Sound
14434705 11 3387 1861 +1526 blockdaemon 0x8527d16c... Ultra Sound
14437527 0 3214 1689 +1525 nethermind_lido 0x851b00b1... BloXroute Max Profit
14435911 0 3212 1689 +1523 gateway.fmas_lido 0xb67eaa5e... BloXroute Max Profit
14435984 0 3212 1689 +1523 gateway.fmas_lido 0x851b00b1... BloXroute Max Profit
14438127 8 3336 1814 +1522 Local Local
14438954 6 3304 1783 +1521 blockdaemon 0x8527d16c... Ultra Sound
14439074 5 3285 1767 +1518 gateway.fmas_lido 0x88a53ec4... BloXroute Regulated
14435930 5 3285 1767 +1518 blockdaemon 0x8a850621... Titan Relay
14436887 7 3316 1799 +1517 blockdaemon_lido 0x88a53ec4... BloXroute Max Profit
14438974 0 3205 1689 +1516 gateway.fmas_lido 0x88a53ec4... BloXroute Regulated
14433074 0 3205 1689 +1516 whale_0xdc8d 0x8527d16c... Ultra Sound
14435007 1 3220 1705 +1515 blockdaemon_lido 0x88a53ec4... BloXroute Max Profit
14433539 1 3215 1705 +1510 blockdaemon_lido 0xb7c5e609... BloXroute Max Profit
14435064 7 3308 1799 +1509 blockdaemon 0x8527d16c... Ultra Sound
14435369 1 3214 1705 +1509 gateway.fmas_lido 0x850b00e0... BloXroute Max Profit
14436085 11 3370 1861 +1509 gateway.fmas_lido 0xb67eaa5e... BloXroute Regulated
14433958 1 3213 1705 +1508 nethermind_lido 0x860d4173... BloXroute Max Profit
14433164 0 3197 1689 +1508 nethermind_lido 0x88a53ec4... BloXroute Max Profit
14438548 0 3197 1689 +1508 revolut 0x8527d16c... Ultra Sound
14437378 0 3197 1689 +1508 gateway.fmas_lido 0x823e0146... BloXroute Max Profit
14432516 5 3275 1767 +1508 whale_0xfd67 0x885c17ef... Ultra Sound
14432675 5 3273 1767 +1506 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
14432998 5 3273 1767 +1506 whale_0xdc8d 0x8527d16c... Ultra Sound
14438597 7 3303 1799 +1504 revolut 0x8527d16c... Ultra Sound
14438630 0 3193 1689 +1504 whale_0x8914 0x8527d16c... Ultra Sound
14433591 4 3252 1752 +1500 blockdaemon 0x8527d16c... Ultra Sound
14436563 5 3266 1767 +1499 revolut 0xb26f9666... Titan Relay
14433902 0 3187 1689 +1498 coinbase 0x88857150... Ultra Sound
14432477 3 3233 1736 +1497 gateway.fmas_lido 0x88a53ec4... BloXroute Regulated
14437149 0 3184 1689 +1495 gateway.fmas_lido 0x851b00b1... BloXroute Max Profit
14434512 3 3230 1736 +1494 solo_stakers Local Local
14439363 0 3183 1689 +1494 p2porg 0x850b00e0... BloXroute Regulated
14433876 1 3195 1705 +1490 revolut 0xa230e2cf... BloXroute Max Profit
14439035 5 3256 1767 +1489 p2porg 0x88a53ec4... BloXroute Regulated
14437486 0 3177 1689 +1488 coinbase 0x823e0146... Titan Relay
14435804 8 3302 1814 +1488 revolut 0xb26f9666... Titan Relay
14439504 1 3192 1705 +1487 gateway.fmas_lido 0x88857150... Ultra Sound
14436977 11 3346 1861 +1485 luno 0x8527d16c... Ultra Sound
14433792 5 3251 1767 +1484 p2porg_lido 0x88857150... Ultra Sound
14434069 4 3235 1752 +1483 whale_0xfd67 0xb67eaa5e... Titan Relay
14434905 0 3172 1689 +1483 nethermind_lido 0x851b00b1... BloXroute Max Profit
14438571 7 3280 1799 +1481 blockdaemon_lido 0x88857150... Ultra Sound
14432934 4 3233 1752 +1481 0x850b00e0... Flashbots
14437715 5 3247 1767 +1480 whale_0x8914 0x88857150... Ultra Sound
14436320 5 3245 1767 +1478 0x853b0078... BloXroute Max Profit
14432757 1 3182 1705 +1477 gateway.fmas_lido 0x88a53ec4... BloXroute Max Profit
14437557 17 3432 1955 +1477 whale_0xdc8d 0x8527d16c... Ultra Sound
14435508 0 3162 1689 +1473 blockdaemon 0xb67eaa5e... BloXroute Regulated
14438559 0 3161 1689 +1472 0x851b00b1... BloXroute Max Profit
14433979 0 3160 1689 +1471 gateway.fmas_lido 0x8527d16c... Ultra Sound
14438842 5 3238 1767 +1471 whale_0xfd67 0xb67eaa5e... Titan Relay
14438362 5 3238 1767 +1471 blockdaemon_lido 0x88857150... Ultra Sound
14435001 0 3159 1689 +1470 blockdaemon_lido 0x851b00b1... BloXroute Max Profit
14437386 14 3378 1908 +1470 p2porg 0xb67eaa5e... BloXroute Regulated
14434842 5 3237 1767 +1470 revolut 0xb26f9666... Titan Relay
14433260 5 3237 1767 +1470 whale_0x8ebd 0xa230e2cf... BloXroute Max Profit
14438161 5 3232 1767 +1465 blockdaemon_lido 0xb26f9666... Titan Relay
14432535 6 3246 1783 +1463 blockdaemon 0x88a53ec4... BloXroute Regulated
14434744 8 3276 1814 +1462 blockdaemon_lido 0x850b00e0... BloXroute Max Profit
14433932 7 3259 1799 +1460 nethermind_lido 0x88a53ec4... BloXroute Regulated
14432556 0 3149 1689 +1460 p2porg 0xb26f9666... Titan Relay
14436100 6 3242 1783 +1459 0x88a53ec4... BloXroute Regulated
14439290 4 3209 1752 +1457 whale_0x4b5e 0x88857150... Ultra Sound
14435036 1 3161 1705 +1456 gateway.fmas_lido 0x8527d16c... Ultra Sound
14437522 1 3160 1705 +1455 0x850b00e0... Flashbots
14438990 0 3144 1689 +1455 whale_0xfd67 0x851b00b1... Ultra Sound
14436923 0 3144 1689 +1455 p2porg 0xb26f9666... Titan Relay
14438380 0 3142 1689 +1453 whale_0x8914 0x88a53ec4... BloXroute Regulated
14434629 7 3251 1799 +1452 gateway.fmas_lido 0x88a53ec4... BloXroute Regulated
14435979 1 3154 1705 +1449 0xb26f9666... Titan Relay
14438104 6 3232 1783 +1449 0x88a53ec4... BloXroute Regulated
14434734 0 3138 1689 +1449 gateway.fmas_lido 0x8527d16c... Ultra Sound
14439167 0 3137 1689 +1448 nethermind_lido 0x851b00b1... BloXroute Max Profit
14433488 0 3136 1689 +1447 p2porg 0x88a53ec4... BloXroute Regulated
14434540 1 3146 1705 +1441 gateway.fmas_lido 0x823e0146... BloXroute Max Profit
14434789 0 3128 1689 +1439 blockdaemon 0x8db2a99d... BloXroute Max Profit
14432660 3 3173 1736 +1437 whale_0x8ebd 0xa230e2cf... BloXroute Max Profit
14436101 0 3125 1689 +1436 blockdaemon_lido 0xb26f9666... Titan Relay
14436885 0 3123 1689 +1434 whale_0xfd67 0xb67eaa5e... Titan Relay
14432565 2 3153 1720 +1433 whale_0xedc6 0x850b00e0... BloXroute Max Profit
14436442 6 3215 1783 +1432 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14432861 10 3276 1846 +1430 blockdaemon_lido 0x88857150... Ultra Sound
14439269 0 3119 1689 +1430 gateway.fmas_lido 0x8527d16c... Ultra Sound
14433940 0 3119 1689 +1430 kiln 0xb67eaa5e... BloXroute Regulated
14435292 5 3197 1767 +1430 whale_0x8914 0x88a53ec4... BloXroute Regulated
14438853 14 3337 1908 +1429 whale_0x8914 0x88857150... Ultra Sound
14437458 1 3131 1705 +1426 whale_0x8ebd 0x823e0146... Ultra Sound
14434470 0 3115 1689 +1426 whale_0x8ebd 0xb26f9666... Titan Relay
14436706 1 3129 1705 +1424 p2porg 0xb26f9666... Titan Relay
14432644 1 3127 1705 +1422 gateway.fmas_lido 0x850b00e0... Flashbots
14433994 2 3141 1720 +1421 whale_0x8914 0x88a53ec4... BloXroute Max Profit
14433041 2 3141 1720 +1421 0x850b00e0... BloXroute Regulated
14433550 1 3125 1705 +1420 whale_0x8ebd 0x88857150... Ultra Sound
14437073 0 3108 1689 +1419 blockdaemon_lido 0xb26f9666... Titan Relay
14435889 8 3233 1814 +1419 gateway.fmas_lido 0xb67eaa5e... BloXroute Regulated
14433899 8 3233 1814 +1419 p2porg 0x850b00e0... BloXroute Regulated
14436294 0 3107 1689 +1418 0x851b00b1... BloXroute Max Profit
14436264 0 3106 1689 +1417 p2porg 0x851b00b1... BloXroute Max Profit
14434767 2 3136 1720 +1416 whale_0xedc6 0x850b00e0... Flashbots
14433226 1 3119 1705 +1414 p2porg 0xb26f9666... Titan Relay
14433485 6 3197 1783 +1414 whale_0x8914 0x85fb0503... BloXroute Max Profit
14432603 5 3181 1767 +1414 coinbase 0x8527d16c... Ultra Sound
14436752 5 3181 1767 +1414 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
14432495 0 3101 1689 +1412 whale_0x8ebd Local Local
14439571 0 3100 1689 +1411 kiln 0x8db2a99d... Titan Relay
14436549 5 3178 1767 +1411 figment 0x8db2a99d... BloXroute Max Profit
14434924 5 3176 1767 +1409 0x850b00e0... Flashbots
14435782 1 3112 1705 +1407 whale_0x8ebd 0xb26f9666... Titan Relay
14435969 0 3096 1689 +1407 whale_0xedc6 0x851b00b1... BloXroute Max Profit
14438759 5 3174 1767 +1407 blockdaemon 0x8527d16c... Ultra Sound
14436377 0 3095 1689 +1406 gateway.fmas_lido 0x88cd924c... Ultra Sound
14436861 0 3095 1689 +1406 0x851b00b1... BloXroute Max Profit
14436132 2 3126 1720 +1406 p2porg 0x856b0004... BloXroute Max Profit
14434046 10 3251 1846 +1405 p2porg 0x853b0078... BloXroute Regulated
14434875 5 3172 1767 +1405 solo_stakers 0x88a53ec4... BloXroute Max Profit
14436441 3 3140 1736 +1404 whale_0x8ebd 0x8527d16c... Ultra Sound
14432832 6 3186 1783 +1403 p2porg_lido 0x856b0004... BloXroute Max Profit
14438399 3 3139 1736 +1403 p2porg 0x853b0078... BloXroute Regulated
14434033 5 3170 1767 +1403 whale_0x8ebd 0xb26f9666... Titan Relay
14435848 0 3091 1689 +1402 blockdaemon 0x851b00b1... BloXroute Max Profit
14436748 4 3153 1752 +1401 coinbase 0xb67eaa5e... BloXroute Max Profit
14438329 1 3106 1705 +1401 coinbase 0x8527d16c... Ultra Sound
14437423 6 3184 1783 +1401 whale_0x8914 0x88a53ec4... BloXroute Regulated
14433242 6 3182 1783 +1399 blockdaemon 0xa230e2cf... BloXroute Max Profit
14436963 1 3102 1705 +1397 p2porg 0x853b0078... BloXroute Max Profit
14433878 5 3164 1767 +1397 whale_0x8ebd 0x8527d16c... Ultra Sound
14437138 6 3179 1783 +1396 coinbase 0x88a53ec4... BloXroute Regulated
14435414 0 3085 1689 +1396 whale_0x8914 0xb67eaa5e... BloXroute Max Profit
14435678 6 3178 1783 +1395 p2porg 0x88a53ec4... BloXroute Regulated
14433624 0 3084 1689 +1395 whale_0x8ebd 0xb26f9666... Titan Relay
14433144 1 3099 1705 +1394 0xb26f9666... Titan Relay
14434569 1 3096 1705 +1391 p2porg 0x853b0078... Flashbots
14438023 4 3141 1752 +1389 coinbase 0x88857150... Ultra Sound
14439134 4 3141 1752 +1389 gateway.fmas_lido 0x8527d16c... Ultra Sound
14439200 0 3076 1689 +1387 p2porg_lido 0xa03781b9... Ultra Sound
14438689 0 3076 1689 +1387 figment 0x88a53ec4... BloXroute Regulated
14439300 5 3154 1767 +1387 p2porg 0x850b00e0... Flashbots
14432775 2 3107 1720 +1387 p2porg_lido 0xb26f9666... Titan Relay
14436689 5 3153 1767 +1386 whale_0x8ebd 0x8527d16c... Ultra Sound
14434683 6 3168 1783 +1385 p2porg_lido 0x8527d16c... Ultra Sound
14434152 0 3074 1689 +1385 kiln 0x88857150... Ultra Sound
14437983 8 3199 1814 +1385 p2porg 0x853b0078... BloXroute Regulated
14439352 8 3199 1814 +1385 gateway.fmas_lido 0x8527d16c... Ultra Sound
14436893 2 3105 1720 +1385 stader 0x850b00e0... Flashbots
14435599 2 3103 1720 +1383 whale_0x8ebd 0xb26f9666... Titan Relay
14434232 7 3181 1799 +1382 gateway.fmas_lido 0x8527d16c... Ultra Sound
14438129 1 3087 1705 +1382 whale_0x8ebd 0x8527d16c... Ultra Sound
14433715 9 3212 1830 +1382 p2porg 0x88a53ec4... BloXroute Max Profit
14433390 5 3149 1767 +1382 p2porg 0xb26f9666... Titan Relay
14437481 4 3133 1752 +1381 coinbase 0x88a53ec4... BloXroute Regulated
14439312 0 3070 1689 +1381 p2porg 0x853b0078... Flashbots
14436537 0 3070 1689 +1381 0x851b00b1... BloXroute Max Profit
14435576 0 3069 1689 +1380 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
14437312 2 3100 1720 +1380 whale_0x8ebd 0x856b0004... BloXroute Max Profit
14435239 8 3192 1814 +1378 whale_0x8914 0x88a53ec4... BloXroute Regulated
14435750 5 3145 1767 +1378 p2porg 0x823e0146... BloXroute Max Profit
14436481 5 3145 1767 +1378 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
14438133 1 3082 1705 +1377 p2porg 0xac23f8cc... Titan Relay
14433521 0 3065 1689 +1376 whale_0x8e76 0x850b00e0... BloXroute Regulated
14439445 5 3143 1767 +1376 whale_0x8ebd 0xb4ce6162... Ultra Sound
14433647 4 3127 1752 +1375 blockdaemon_lido 0xb26f9666... Titan Relay
14435080 2 3094 1720 +1374 whale_0x8ebd 0x8527d16c... Ultra Sound
14438697 13 3263 1893 +1370 coinbase 0x856b0004... BloXroute Max Profit
14432927 5 3136 1767 +1369 solo_stakers 0x88a53ec4... BloXroute Regulated
14434825 5 3136 1767 +1369 p2porg_lido 0x8527d16c... Ultra Sound
14434578 4 3120 1752 +1368 whale_0x8ebd 0x8527d16c... Ultra Sound
14434941 3 3104 1736 +1368 coinbase 0x8527d16c... Ultra Sound
14438005 0 3056 1689 +1367 coinbase 0x8527d16c... Ultra Sound
14436019 5 3134 1767 +1367 p2porg 0xb26f9666... Titan Relay
14433374 3 3102 1736 +1366 p2porg_lido 0xb26f9666... Titan Relay
14435574 0 3055 1689 +1366 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14436029 5 3133 1767 +1366 p2porg 0xb26f9666... Titan Relay
14436556 1 3070 1705 +1365 p2porg 0x8db2a99d... BloXroute Max Profit
14438555 6 3148 1783 +1365 whale_0x8ebd 0x8527d16c... Ultra Sound
14437568 6 3148 1783 +1365 p2porg 0xb26f9666... Titan Relay
14438364 0 3054 1689 +1365 p2porg 0x853b0078... BloXroute Max Profit
14437222 0 3053 1689 +1364 coinbase 0xb26f9666... Titan Relay
14433598 0 3052 1689 +1363 whale_0x8ebd 0xb26f9666... Titan Relay
14432829 5 3130 1767 +1363 kiln 0x885c17ef... BloXroute Max Profit
14432645 10 3208 1846 +1362 coinbase 0x88a53ec4... BloXroute Regulated
14433929 7 3159 1799 +1360 kiln 0x88a53ec4... BloXroute Max Profit
14438741 0 3047 1689 +1358 p2porg_lido 0x8527d16c... Ultra Sound
14437647 4 3109 1752 +1357 kiln 0x88a53ec4... BloXroute Max Profit
14435635 0 3045 1689 +1356 whale_0xedc6 0x8db2a99d... BloXroute Max Profit
14435666 0 3045 1689 +1356 p2porg 0x8db2a99d... BloXroute Max Profit
14433625 1 3060 1705 +1355 p2porg 0x860d4173... BloXroute Max Profit
14435316 12 3232 1877 +1355 coinbase 0x88a53ec4... BloXroute Max Profit
14434439 3 3091 1736 +1355 kiln 0x8527d16c... Ultra Sound
14433459 7 3152 1799 +1353 whale_0x8ebd 0x8527d16c... Ultra Sound
14434782 1 3058 1705 +1353 coinbase Local Local
14433282 0 3042 1689 +1353 0x823e0146... Titan Relay
14434102 5 3119 1767 +1352 coinbase 0x8527d16c... Ultra Sound
14439298 2 3072 1720 +1352 coinbase 0x856b0004... BloXroute Max Profit
14436156 2 3071 1720 +1351 coinbase 0x88a53ec4... BloXroute Regulated
14435100 0 3039 1689 +1350 whale_0x0000 0xb26f9666... BloXroute Max Profit
14437970 0 3039 1689 +1350 p2porg_lido 0x88857150... Ultra Sound
14436518 5 3117 1767 +1350 whale_0x8ebd 0x8527d16c... Ultra Sound
14432712 5 3117 1767 +1350 coinbase 0x88a53ec4... BloXroute Regulated
14432856 0 3038 1689 +1349 whale_0xedc6 0xa230e2cf... BloXroute Max Profit
14437695 0 3038 1689 +1349 whale_0x8ebd 0x823e0146... BloXroute Max Profit
14437763 5 3116 1767 +1349 figment 0xb26f9666... Titan Relay
14437031 0 3037 1689 +1348 coinbase 0x99cba505... BloXroute Max Profit
14436961 0 3037 1689 +1348 p2porg_lido 0x8527d16c... Ultra Sound
14435928 1 3052 1705 +1347 0xb26f9666... BloXroute Regulated
14438416 1 3051 1705 +1346 coinbase 0x88857150... Ultra Sound
14433949 0 3035 1689 +1346 p2porg 0x853b0078... BloXroute Max Profit
14433749 0 3035 1689 +1346 whale_0x8ebd 0xa230e2cf... BloXroute Max Profit
14438226 0 3035 1689 +1346 kiln 0x88857150... Ultra Sound
14437301 5 3113 1767 +1346 whale_0x8ebd 0x8527d16c... Ultra Sound
14439428 4 3097 1752 +1345 p2porg_lido 0x853b0078... BloXroute Max Profit
14438655 2 3065 1720 +1345 whale_0xedc6 0x853b0078... BloXroute Max Profit
14435553 1 3049 1705 +1344 p2porg_lido 0x8db2a99d... BloXroute Max Profit
14435337 6 3127 1783 +1344 kiln 0x88a53ec4... BloXroute Regulated
14432639 3 3080 1736 +1344 p2porg_lido 0x8527d16c... Ultra Sound
14437464 0 3033 1689 +1344 kiln 0xb26f9666... BloXroute Max Profit
14438816 0 3033 1689 +1344 0x88a53ec4... BloXroute Max Profit
14437362 1 3048 1705 +1343 whale_0x8ebd 0xb4ce6162... Ultra Sound
14435471 0 3032 1689 +1343 coinbase 0x88a53ec4... BloXroute Regulated
14433250 8 3157 1814 +1343 whale_0x8ebd 0x8527d16c... Ultra Sound
14434346 2 3063 1720 +1343 p2porg 0x853b0078... BloXroute Regulated
14435818 1 3047 1705 +1342 coinbase 0x853b0078... BloXroute Max Profit
14437167 6 3125 1783 +1342 p2porg 0xb26f9666... Titan Relay
14435783 6 3124 1783 +1341 p2porg 0x853b0078... BloXroute Regulated
14433671 6 3124 1783 +1341 0x8527d16c... Ultra Sound
14435466 6 3123 1783 +1340 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14436026 0 3029 1689 +1340 whale_0x8ebd 0x8527d16c... Ultra Sound
14437569 1 3044 1705 +1339 coinbase 0x8527d16c... Ultra Sound
14438910 6 3122 1783 +1339 whale_0x8ebd 0x8527d16c... Ultra Sound
14432983 0 3028 1689 +1339 p2porg 0x860d4173... BloXroute Max Profit
14439191 0 3028 1689 +1339 p2porg_lido 0x8db2a99d... Ultra Sound
14432773 0 3028 1689 +1339 whale_0x8ebd 0x99cba505... BloXroute Max Profit
14436217 10 3184 1846 +1338 kiln 0x88857150... Ultra Sound
14438792 9 3168 1830 +1338 coinbase 0xb4ce6162... Ultra Sound
14435872 0 3027 1689 +1338 everstake 0x851b00b1... BloXroute Max Profit
14434549 4 3088 1752 +1336 whale_0x8ebd 0x8527d16c... Ultra Sound
14435696 0 3025 1689 +1336 p2porg 0xb67eaa5e... BloXroute Max Profit
14437111 0 3025 1689 +1336 p2porg_lido 0x8527d16c... Ultra Sound
14436765 1 3040 1705 +1335 abyss_finance 0xb26f9666... Aestus
14436839 0 3024 1689 +1335 whale_0x8ebd 0x8527d16c... Ultra Sound
14433429 5 3102 1767 +1335 kiln 0x8527d16c... Ultra Sound
14436387 2 3055 1720 +1335 whale_0x8ebd 0x8527d16c... Ultra Sound
14437411 1 3039 1705 +1334 p2porg_lido 0x8527d16c... Ultra Sound
14434890 0 3023 1689 +1334 p2porg_lido 0x8527d16c... Ultra Sound
14437534 6 3115 1783 +1332 kiln 0x88a53ec4... BloXroute Max Profit
14433718 5 3099 1767 +1332 coinbase 0xb26f9666... BloXroute Max Profit
14434229 1 3036 1705 +1331 whale_0x8ebd 0x8527d16c... Ultra Sound
14436591 9 3160 1830 +1330 0x8527d16c... Ultra Sound
14436941 0 3019 1689 +1330 p2porg_lido 0x8527d16c... Ultra Sound
14435044 4 3081 1752 +1329 coinbase 0x8527d16c... Ultra Sound
14433585 2 3049 1720 +1329 kiln 0xa230e2cf... BloXroute Max Profit
14432949 1 3033 1705 +1328 p2porg_lido 0x823e0146... Ultra Sound
14438623 3 3064 1736 +1328 p2porg 0x853b0078... BloXroute Max Profit
14438483 0 3017 1689 +1328 p2porg 0x83d6a6ab... Flashbots
14435442 10 3172 1846 +1326 kiln 0xb67eaa5e... BloXroute Regulated
14437984 5 3093 1767 +1326 everstake 0x8527d16c... Ultra Sound
14433699 2 3046 1720 +1326 kiln 0x88857150... Ultra Sound
14433991 13 3218 1893 +1325 whale_0xfd67 0x85fb0503... BloXroute Max Profit
14437136 3 3061 1736 +1325 coinbase 0x8527d16c... Ultra Sound
14434257 1 3029 1705 +1324 p2porg_lido 0x8527d16c... Ultra Sound
14432746 1 3029 1705 +1324 everstake 0x88a53ec4... BloXroute Max Profit
14436137 0 3013 1689 +1324 coinbase 0xb67eaa5e... BloXroute Max Profit
14436888 3 3059 1736 +1323 coinbase 0x8527d16c... Ultra Sound
14432425 0 3012 1689 +1323 coinbase 0x823e0146... Titan Relay
14437908 2 3043 1720 +1323 kiln 0x856b0004... BloXroute Max Profit
14433319 7 3121 1799 +1322 p2porg_lido 0x8527d16c... Ultra Sound
14439127 3 3058 1736 +1322 whale_0x8ebd 0x8527d16c... Ultra Sound
14434459 5 3089 1767 +1322 kiln 0xb67eaa5e... BloXroute Regulated
14435841 7 3120 1799 +1321 p2porg 0x8db2a99d... Titan Relay
14436955 0 3009 1689 +1320 coinbase 0x8527d16c... Ultra Sound
14432695 0 3008 1689 +1319 p2porg_lido 0x8527d16c... Ultra Sound
14432407 0 3008 1689 +1319 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14434062 1 3023 1705 +1318 0xac23f8cc... Ultra Sound
14438679 7 3115 1799 +1316 whale_0x8ebd 0x8527d16c... Ultra Sound
14436496 5 3083 1767 +1316 kiln 0x88857150... Ultra Sound
14439340 1 3020 1705 +1315 kiln 0x88a53ec4... BloXroute Regulated
14435082 1 3020 1705 +1315 coinbase 0x8527d16c... Ultra Sound
14436558 6 3098 1783 +1315 p2porg_lido 0x8527d16c... Ultra Sound
14432864 0 3004 1689 +1315 everstake 0x88a53ec4... BloXroute Max Profit
14432928 1 3019 1705 +1314 kraken 0x8527d16c... Ultra Sound
14436152 8 3128 1814 +1314 whale_0x8ebd 0x8527d16c... Ultra Sound
14439252 1 3017 1705 +1312 coinbase 0x856b0004... BloXroute Max Profit
14432561 5 3079 1767 +1312 p2porg_lido 0x8527d16c... Ultra Sound
14439390 1 3016 1705 +1311 coinbase 0x856b0004... BloXroute Max Profit
14435683 0 3000 1689 +1311 kiln 0x851b00b1... BloXroute Max Profit
14432891 4 3061 1752 +1309 p2porg 0xb26f9666... Titan Relay
14436229 0 2998 1689 +1309 whale_0x8ebd 0x8527d16c... Ultra Sound
14435035 0 2998 1689 +1309 p2porg 0x88857150... Ultra Sound
14432444 0 2998 1689 +1309 kiln 0x88857150... Ultra Sound
14438459 5 3076 1767 +1309 coinbase 0xb26f9666... BloXroute Regulated
14432403 1 3013 1705 +1308 whale_0x8ebd 0x8527d16c... Ultra Sound
14438383 1 3013 1705 +1308 kiln 0xb26f9666... BloXroute Max Profit
14434831 9 3137 1830 +1307 whale_0x8ebd 0x8db2a99d... BloXroute Max Profit
14434644 6 3090 1783 +1307 coinbase 0x8db2a99d... BloXroute Max Profit
14436602 5 3074 1767 +1307 p2porg_lido 0x8527d16c... Ultra Sound
14433616 4 3058 1752 +1306 whale_0x8ebd 0x85fb0503... BloXroute Max Profit
14439166 3 3042 1736 +1306 coinbase 0x853b0078... BloXroute Max Profit
14434797 8 3120 1814 +1306 coinbase 0x8527d16c... Ultra Sound
14434447 0 2994 1689 +1305 0x83d6a6ab... Flashbots
14436746 5 3072 1767 +1305 kiln 0x88a53ec4... BloXroute Regulated
14433276 2 3025 1720 +1305 solo_stakers 0x9129eeb4... Ultra Sound
14439306 6 3087 1783 +1304 p2porg 0x853b0078... BloXroute Max Profit
14439587 0 2993 1689 +1304 everstake 0x8527d16c... Ultra Sound
14434415 2 3024 1720 +1304 kiln 0x8527d16c... Ultra Sound
14435809 6 3086 1783 +1303 whale_0x8ebd 0x853b0078... BloXroute Regulated
14436507 5 3070 1767 +1303 p2porg_lido 0x8527d16c... Ultra Sound
14432959 4 3053 1752 +1301 coinbase 0x8527d16c... Ultra Sound
14435041 7 3099 1799 +1300 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14432439 1 3005 1705 +1300 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14434350 1 3005 1705 +1300 kiln 0x8527d16c... Ultra Sound
14433186 0 2989 1689 +1300 whale_0x8ebd Local Local
14438196 5 3067 1767 +1300 whale_0x8ebd 0x823e0146... Titan Relay
14433418 5 3067 1767 +1300 p2porg 0xb26f9666... Titan Relay
14435037 13 3192 1893 +1299 whale_0x8914 0xb67eaa5e... Titan Relay
14432686 0 2988 1689 +1299 coinbase 0x88857150... Ultra Sound
14433697 5 3066 1767 +1299 lido Local Local
14434951 7 3096 1799 +1297 whale_0x8ebd 0x823e0146... Flashbots
14432472 1 3001 1705 +1296 everstake 0xb26f9666... Titan Relay
14434393 1 2999 1705 +1294 kiln 0x8527d16c... Ultra Sound
14434311 9 3123 1830 +1293 p2porg_lido 0x8527d16c... Ultra Sound
14433662 1 2997 1705 +1292 coinbase 0x8527d16c... Ultra Sound
14435849 5 3059 1767 +1292 coinbase 0xb26f9666... Titan Relay
14438615 7 3090 1799 +1291 p2porg 0x853b0078... Flashbots
14438746 4 3043 1752 +1291 p2porg_lido 0x8527d16c... Ultra Sound
14435225 0 2980 1689 +1291 coinbase 0x88a53ec4... BloXroute Max Profit
14434204 8 3105 1814 +1291 coinbase 0x8527d16c... Ultra Sound
14438424 5 3058 1767 +1291 coinbase 0x8527d16c... Ultra Sound
14439015 2 3011 1720 +1291 p2porg 0x9129eeb4... Agnostic Gnosis
14435736 3 3026 1736 +1290 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14432518 5 3057 1767 +1290 whale_0x8ebd 0x8527d16c... Ultra Sound
14432433 2 3009 1720 +1289 whale_0x8ebd 0x860d4173... BloXroute Max Profit
14437193 0 2977 1689 +1288 coinbase 0x83bee517... Flashbots
14434107 1 2992 1705 +1287 kiln 0x823e0146... Titan Relay
14436282 3 3023 1736 +1287 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14438828 0 2976 1689 +1287 whale_0x8ebd 0x856b0004... BloXroute Max Profit
14439374 2 3007 1720 +1287 kiln 0x853b0078... BloXroute Max Profit
14439040 6 3069 1783 +1286 coinbase 0x856b0004... BloXroute Max Profit
14436404 6 3068 1783 +1285 p2porg 0x856b0004... BloXroute Max Profit
14433553 0 2973 1689 +1284 everstake 0xb26f9666... Titan Relay
14434413 11 3145 1861 +1284 kiln 0xb67eaa5e... BloXroute Regulated
14435053 1 2987 1705 +1282 kiln 0x8527d16c... Ultra Sound
14433264 5 3049 1767 +1282 p2porg_lido 0x8527d16c... Ultra Sound
14437366 5 3049 1767 +1282 p2porg_lido 0x8527d16c... Ultra Sound
14437652 5 3049 1767 +1282 p2porg 0x853b0078... BloXroute Max Profit
14439359 3 3017 1736 +1281 coinbase 0xb26f9666... BloXroute Max Profit
14436465 6 3063 1783 +1280 whale_0x8ebd 0x8527d16c... Ultra Sound
14434864 3 3016 1736 +1280 kiln 0x8db2a99d... BloXroute Max Profit
14434723 0 2969 1689 +1280 stader 0xb26f9666... Titan Relay
14434210 4 3031 1752 +1279 0x8527d16c... Ultra Sound
14433937 4 3031 1752 +1279 kiln 0xb26f9666... BloXroute Max Profit
14436956 8 3093 1814 +1279 coinbase 0x8527d16c... Ultra Sound
14432728 1 2983 1705 +1278 everstake 0xb26f9666... Titan Relay
14435715 2 2998 1720 +1278 whale_0x2f38 Local Local
14439560 1 2981 1705 +1276 kiln 0x8527d16c... Ultra Sound
14438614 0 2965 1689 +1276 everstake 0x8527d16c... Ultra Sound
14437444 1 2979 1705 +1274 coinbase 0x823e0146... Flashbots
14432876 6 3057 1783 +1274 p2porg 0x8527d16c... Ultra Sound
14437832 5 3041 1767 +1274 coinbase 0x88857150... Ultra Sound
14434821 10 3119 1846 +1273 coinbase 0x8527d16c... Ultra Sound
14438538 3 3009 1736 +1273 kiln 0x853b0078... BloXroute Max Profit
14437084 0 2962 1689 +1273 coinbase 0x8527d16c... Ultra Sound
14435427 2 2993 1720 +1273 coinbase 0xb26f9666... BloXroute Regulated
14432586 3 3007 1736 +1271 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14432718 2 2991 1720 +1271 everstake 0x885c17ef... BloXroute Max Profit
14436472 6 3053 1783 +1270 kiln 0x856b0004... Ultra Sound
14434165 0 2959 1689 +1270 kiln 0x8527d16c... Ultra Sound
14438732 13 3162 1893 +1269 coinbase 0x856b0004... BloXroute Max Profit
14439087 8 3082 1814 +1268 kiln 0x88857150... Ultra Sound
14435974 1 2972 1705 +1267 solo_stakers 0x857b0038... BloXroute Max Profit
14435288 1 2972 1705 +1267 kiln 0x856b0004... BloXroute Max Profit
14436810 6 3050 1783 +1267 whale_0x8ebd 0x8527d16c... Ultra Sound
14435816 0 2956 1689 +1267 kiln 0xb26f9666... BloXroute Max Profit
14434078 10 3112 1846 +1266 whale_0x8ebd 0x8527d16c... Ultra Sound
14437319 5 3033 1767 +1266 kiln 0xb26f9666... BloXroute Max Profit
14439367 7 3064 1799 +1265 coinbase 0x8527d16c... Ultra Sound
14433505 5 3032 1767 +1265 coinbase 0x85fb0503... BloXroute Max Profit
14433064 4 3016 1752 +1264 whale_0x8ebd 0x850b00e0... BloXroute Max Profit
14438398 0 2953 1689 +1264 kiln 0x88857150... Ultra Sound
14432767 0 2953 1689 +1264 coinbase 0x8527d16c... Ultra Sound
14433682 4 3015 1752 +1263 whale_0x8ebd 0x823e0146... BloXroute Max Profit
14439462 6 3046 1783 +1263 coinbase 0x88857150... Ultra Sound
14436542 0 2952 1689 +1263 kiln 0x8527d16c... Ultra Sound
14437009 0 2952 1689 +1263 gateway.fmas_lido 0x851b00b1... BloXroute Max Profit
14438978 0 2951 1689 +1262 kiln 0x8527d16c... Ultra Sound
14437592 8 3076 1814 +1262 0x8db2a99d... BloXroute Max Profit
14436471 1 2966 1705 +1261 kiln 0x8527d16c... Ultra Sound
14437234 10 3106 1846 +1260 whale_0x8ebd 0x8527d16c... Ultra Sound
14432862 0 2948 1689 +1259 kiln 0x88a53ec4... BloXroute Max Profit
14437677 0 2948 1689 +1259 coinbase 0xb26f9666... BloXroute Regulated
14437413 14 3167 1908 +1259 p2porg_lido 0x8527d16c... Ultra Sound
14438550 6 3041 1783 +1258 kiln 0x8527d16c... Ultra Sound
14436543 9 3087 1830 +1257 p2porg_lido 0x8527d16c... Ultra Sound
14433948 2 2977 1720 +1257 coinbase 0x860d4173... BloXroute Max Profit
14437689 7 3055 1799 +1256 coinbase 0x8db2a99d... BloXroute Max Profit
14437221 12 3133 1877 +1256 coinbase 0xb26f9666... BloXroute Max Profit
14436445 6 3039 1783 +1256 kiln 0x8527d16c... Ultra Sound
14437937 0 2945 1689 +1256 whale_0x8ebd 0x8a850621... BloXroute Max Profit
14435380 0 2945 1689 +1256 kiln 0x88a53ec4... BloXroute Regulated
14438468 5 3023 1767 +1256 everstake 0x8527d16c... Ultra Sound
14437739 1 2960 1705 +1255 kiln 0x8527d16c... Ultra Sound
14435792 11 3116 1861 +1255 coinbase 0xb26f9666... Titan Relay
14438390 8 3069 1814 +1255 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14433982 7 3053 1799 +1254 kiln 0xac23f8cc... Ultra Sound
14432685 5 3021 1767 +1254 whale_0xedc6 0x85fb0503... BloXroute Max Profit
14437934 2 2974 1720 +1254 kiln 0x8db2a99d... Ultra Sound
14432455 1 2958 1705 +1253 kiln 0x8527d16c... Ultra Sound
14438771 3 2989 1736 +1253 everstake 0x88a53ec4... BloXroute Regulated
14433143 0 2942 1689 +1253 kiln 0x85fb0503... BloXroute Max Profit
14437369 8 3067 1814 +1253 p2porg_lido 0x8527d16c... Ultra Sound
14438473 8 3067 1814 +1253 p2porg 0x853b0078... BloXroute Max Profit
14437500 5 3020 1767 +1253 kiln 0x8527d16c... Ultra Sound
14433843 1 2957 1705 +1252 everstake 0xb26f9666... Titan Relay
14434938 5 3018 1767 +1251 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14433849 2 2971 1720 +1251 coinbase 0x85fb0503... BloXroute Max Profit
14439586 0 2939 1689 +1250 kiln 0x8db2a99d... Ultra Sound
14435943 9 3079 1830 +1249 kiln 0xb26f9666... BloXroute Regulated
14434217 0 2938 1689 +1249 kiln 0x88857150... Ultra Sound
14438918 2 2969 1720 +1249 kiln 0xb26f9666... BloXroute Max Profit
14436562 0 2937 1689 +1248 everstake 0xb26f9666... Titan Relay
14437679 1 2952 1705 +1247 kiln 0x8527d16c... Ultra Sound
14432697 1 2951 1705 +1246 everstake 0xb26f9666... Titan Relay
14438444 0 2935 1689 +1246 everstake 0x8527d16c... Ultra Sound
14439280 0 2934 1689 +1245 kiln 0x8527d16c... Ultra Sound
14432860 0 2932 1689 +1243 everstake 0x8527d16c... Ultra Sound
14438143 3 2978 1736 +1242 everstake 0x88a53ec4... BloXroute Max Profit
14434154 6 3024 1783 +1241 whale_0x7275 0x8527d16c... Ultra Sound
14432847 2 2961 1720 +1241 0x860d4173... BloXroute Max Profit
14438661 6 3023 1783 +1240 kiln 0x8527d16c... Ultra Sound
14436476 0 2929 1689 +1240 kiln 0x8527d16c... Ultra Sound
14439512 1 2944 1705 +1239 everstake 0x88857150... Ultra Sound
14435913 6 3022 1783 +1239 everstake 0x850b00e0... Flashbots
14437476 0 2928 1689 +1239 kiln 0x823e0146... Flashbots
14435389 0 2928 1689 +1239 kiln 0x88510a78... Flashbots
14433924 5 3006 1767 +1239 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14434182 5 3006 1767 +1239 whale_0x8ebd 0x8db2a99d... BloXroute Max Profit
14438430 6 3021 1783 +1238 kiln 0x8527d16c... Ultra Sound
14438410 0 2927 1689 +1238 everstake 0xb26f9666... Titan Relay
Total anomalies: 540

Anomalies by relay

Which relays produce the most propagation anomalies?

Show code
if n_anomalies > 0:
    # Count anomalies by relay
    relay_counts = df_outliers["relay"].value_counts().reset_index()
    relay_counts.columns = ["relay", "anomaly_count"]
    
    # Get total blocks per relay for context
    df_anomaly["relay"] = df_anomaly["winning_relays"].apply(lambda x: x[0] if len(x) > 0 else "Local")
    total_by_relay = df_anomaly.groupby("relay").size().reset_index(name="total_blocks")
    
    relay_counts = relay_counts.merge(total_by_relay, on="relay")
    relay_counts["anomaly_rate"] = relay_counts["anomaly_count"] / relay_counts["total_blocks"] * 100
    relay_counts = relay_counts.sort_values("anomaly_rate", ascending=True)
    
    fig = go.Figure()
    
    fig.add_trace(go.Bar(
        y=relay_counts["relay"],
        x=relay_counts["anomaly_count"],
        orientation="h",
        marker_color="#e74c3c",
        text=relay_counts.apply(lambda r: f"{r['anomaly_count']}/{r['total_blocks']} ({r['anomaly_rate']:.1f}%)", axis=1),
        textposition="outside",
        hovertemplate="<b>%{y}</b><br>Anomalies: %{x}<br>Total blocks: %{customdata[0]:,}<br>Rate: %{customdata[1]:.1f}%<extra></extra>",
        customdata=np.column_stack([relay_counts["total_blocks"], relay_counts["anomaly_rate"]]),
    ))
    
    fig.update_layout(
        margin=dict(l=150, r=80, t=30, b=60),
        xaxis=dict(title="Number of anomalies"),
        yaxis=dict(title=""),
        height=350,
    )
    fig.show(config={"responsive": True})

Anomalies by proposer entity

Which proposer entities produce the most propagation anomalies?

Show code
if n_anomalies > 0:
    # Count anomalies by proposer entity
    proposer_counts = df_outliers["proposer"].value_counts().reset_index()
    proposer_counts.columns = ["proposer", "anomaly_count"]
    
    # Get total blocks per proposer for context
    df_anomaly["proposer"] = df_anomaly["proposer_entity"].fillna("Unknown")
    total_by_proposer = df_anomaly.groupby("proposer").size().reset_index(name="total_blocks")
    
    proposer_counts = proposer_counts.merge(total_by_proposer, on="proposer")
    proposer_counts["anomaly_rate"] = proposer_counts["anomaly_count"] / proposer_counts["total_blocks"] * 100
    
    # Show top 15 by anomaly count
    proposer_counts = proposer_counts.nlargest(15, "anomaly_rate").sort_values("anomaly_rate", ascending=True)
    
    fig = go.Figure()
    
    fig.add_trace(go.Bar(
        y=proposer_counts["proposer"],
        x=proposer_counts["anomaly_count"],
        orientation="h",
        marker_color="#e74c3c",
        text=proposer_counts.apply(lambda r: f"{r['anomaly_count']}/{r['total_blocks']} ({r['anomaly_rate']:.1f}%)", axis=1),
        textposition="outside",
        hovertemplate="<b>%{y}</b><br>Anomalies: %{x}<br>Total blocks: %{customdata[0]:,}<br>Rate: %{customdata[1]:.1f}%<extra></extra>",
        customdata=np.column_stack([proposer_counts["total_blocks"], proposer_counts["anomaly_rate"]]),
    ))
    
    fig.update_layout(
        margin=dict(l=150, r=80, t=30, b=60),
        xaxis=dict(title="Number of anomalies"),
        yaxis=dict(title=""),
        height=450,
    )
    fig.show(config={"responsive": True})

Anomalies by builder

Which builders produce the most propagation anomalies? (Truncated pubkeys shown for MEV blocks)

Show code
if n_anomalies > 0:
    # Count anomalies by builder
    builder_counts = df_outliers["builder"].value_counts().reset_index()
    builder_counts.columns = ["builder", "anomaly_count"]
    
    # Get total blocks per builder for context
    df_anomaly["builder"] = df_anomaly["winning_builder"].apply(
        lambda x: f"{x[:10]}..." if pd.notna(x) and x else "Local"
    )
    total_by_builder = df_anomaly.groupby("builder").size().reset_index(name="total_blocks")
    
    builder_counts = builder_counts.merge(total_by_builder, on="builder")
    builder_counts["anomaly_rate"] = builder_counts["anomaly_count"] / builder_counts["total_blocks"] * 100
    
    # Show top 15 by anomaly count
    builder_counts = builder_counts.nlargest(15, "anomaly_rate").sort_values("anomaly_rate", ascending=True)
    
    fig = go.Figure()
    
    fig.add_trace(go.Bar(
        y=builder_counts["builder"],
        x=builder_counts["anomaly_count"],
        orientation="h",
        marker_color="#e74c3c",
        text=builder_counts.apply(lambda r: f"{r['anomaly_count']}/{r['total_blocks']} ({r['anomaly_rate']:.1f}%)", axis=1),
        textposition="outside",
        hovertemplate="<b>%{y}</b><br>Anomalies: %{x}<br>Total blocks: %{customdata[0]:,}<br>Rate: %{customdata[1]:.1f}%<extra></extra>",
        customdata=np.column_stack([builder_counts["total_blocks"], builder_counts["anomaly_rate"]]),
    ))
    
    fig.update_layout(
        margin=dict(l=150, r=80, t=30, b=60),
        xaxis=dict(title="Number of anomalies"),
        yaxis=dict(title=""),
        height=450,
    )
    fig.show(config={"responsive": True})

Anomalies by blob count

Are anomalies more common at certain blob counts?

Show code
if n_anomalies > 0:
    # Count anomalies by blob count
    blob_anomalies = df_outliers.groupby("blob_count").size().reset_index(name="anomaly_count")
    blob_total = df_anomaly.groupby("blob_count").size().reset_index(name="total_blocks")
    
    blob_stats = blob_total.merge(blob_anomalies, on="blob_count", how="left").fillna(0)
    blob_stats["anomaly_count"] = blob_stats["anomaly_count"].astype(int)
    blob_stats["anomaly_rate"] = blob_stats["anomaly_count"] / blob_stats["total_blocks"] * 100
    
    fig = go.Figure()
    
    fig.add_trace(go.Bar(
        x=blob_stats["blob_count"],
        y=blob_stats["anomaly_count"],
        marker_color="#e74c3c",
        hovertemplate="<b>%{x} blobs</b><br>Anomalies: %{y}<br>Total: %{customdata[0]:,}<br>Rate: %{customdata[1]:.1f}%<extra></extra>",
        customdata=np.column_stack([blob_stats["total_blocks"], blob_stats["anomaly_rate"]]),
    ))
    
    fig.update_layout(
        margin=dict(l=60, r=30, t=30, b=60),
        xaxis=dict(title="Blob count", dtick=1),
        yaxis=dict(title="Number of anomalies"),
        height=350,
    )
    fig.show(config={"responsive": True})