Wed, May 6, 2026

Propagation anomalies - 2026-05-06

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-06' AND slot_start_date_time < '2026-05-06'::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-06' AND slot_start_date_time < '2026-05-06'::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-06' AND slot_start_date_time < '2026-05-06'::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-06' AND slot_start_date_time < '2026-05-06'::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-06' AND slot_start_date_time < '2026-05-06'::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-06' AND slot_start_date_time < '2026-05-06'::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-06' AND slot_start_date_time < '2026-05-06'::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-06' AND slot_start_date_time < '2026-05-06'::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,183
MEV blocks: 6,684 (93.1%)
Local blocks: 499 (6.9%)

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 = 1677.4 + 17.75 × blob_count (R² = 0.011)
Residual σ = 606.8ms
Anomalies (>2σ slow): 556 (7.7%)
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
14267724 0 8922 1677 +7245 whale_0x1435 Local Local
14272870 0 6736 1677 +5059 chainlayer_lido Local Local
14273867 5 6079 1766 +4313 rocketpool Local Local
14267488 0 4322 1677 +2645 abyss_finance Local Local
14268768 6 4081 1784 +2297 whale_0x1435 0x850b00e0... BloXroute Max Profit
14268192 0 3962 1677 +2285 whale_0x2017 0x857b0038... Titan Relay
14273127 1 3792 1695 +2097 whale_0x2f38 Local Local
14270208 6 3854 1784 +2070 blockdaemon 0xb67eaa5e... BloXroute Regulated
14270464 0 3707 1677 +2030 blockdaemon_lido Local Local
14269904 5 3753 1766 +1987 staked.us 0xb26f9666... Titan Relay
14267510 5 3747 1766 +1981 blockdaemon_lido 0xb67eaa5e... BloXroute Regulated
14268517 5 3691 1766 +1925 kraken 0xb26f9666... Titan Relay
14267744 5 3654 1766 +1888 whale_0xd5e9 0xb26f9666... Ultra Sound
14268424 0 3565 1677 +1888 blockdaemon 0x88857150... Ultra Sound
14271489 6 3647 1784 +1863 whale_0x9212 0xb67eaa5e... Titan Relay
14270048 0 3496 1677 +1819 whale_0x3878 Local Local
14266867 3 3524 1731 +1793 blockdaemon 0x88a53ec4... BloXroute Max Profit
14269499 5 3552 1766 +1786 blockdaemon 0xb4ce6162... Ultra Sound
14272322 1 3450 1695 +1755 blockdaemon 0x857b0038... BloXroute Max Profit
14267316 3 3468 1731 +1737 blockdaemon 0xb4ce6162... Ultra Sound
14271584 0 3408 1677 +1731 blockdaemon 0x8527d16c... Ultra Sound
14271776 0 3408 1677 +1731 blockdaemon_lido 0x851b00b1... BloXroute Max Profit
14269227 2 3443 1713 +1730 whale_0xdc8d 0xb67eaa5e... BloXroute Max Profit
14268839 0 3406 1677 +1729 ether.fi 0x88857150... Ultra Sound
14267159 5 3492 1766 +1726 solo_stakers 0x88a53ec4... BloXroute Max Profit
14270885 5 3481 1766 +1715 solo_stakers 0x88857150... Ultra Sound
14271483 1 3407 1695 +1712 ether.fi 0xac23f8cc... Titan Relay
14270507 1 3405 1695 +1710 ether.fi 0x850b00e0... BloXroute Max Profit
14268606 5 3476 1766 +1710 blockdaemon 0x8a850621... Titan Relay
14267630 0 3385 1677 +1708 blockdaemon 0x8a850621... Titan Relay
14268256 5 3472 1766 +1706 sigmaprime_lido Local Local
14273268 0 3365 1677 +1688 blockdaemon_lido 0xb67eaa5e... BloXroute Regulated
14268631 7 3489 1802 +1687 blockdaemon_lido 0x8527d16c... Ultra Sound
14271660 0 3362 1677 +1685 ether.fi 0xb26f9666... Titan Relay
14270729 5 3449 1766 +1683 ether.fi 0xb26f9666... Titan Relay
14266908 7 3484 1802 +1682 blockdaemon 0x8a850621... Titan Relay
14267324 0 3358 1677 +1681 whale_0x8914 0x88857150... Ultra Sound
14273637 1 3371 1695 +1676 blockdaemon 0x8527d16c... Ultra Sound
14273569 1 3365 1695 +1670 luno 0xb67eaa5e... BloXroute Max Profit
14267270 0 3344 1677 +1667 p2porg 0xa965c911... Ultra Sound
14272866 6 3446 1784 +1662 blockdaemon 0x850b00e0... BloXroute Max Profit
14270054 0 3333 1677 +1656 blockdaemon 0x8a850621... Titan Relay
14271947 8 3470 1819 +1651 blockdaemon 0xb67eaa5e... BloXroute Regulated
14273490 5 3410 1766 +1644 blockdaemon 0x88857150... Ultra Sound
14267825 0 3318 1677 +1641 revolut 0x851b00b1... BloXroute Max Profit
14270344 2 3353 1713 +1640 luno 0x8db2a99d... BloXroute Max Profit
14271639 6 3424 1784 +1640 blockdaemon 0x8a850621... Titan Relay
14268310 0 3315 1677 +1638 0x8527d16c... Ultra Sound
14270389 3 3363 1731 +1632 stakefish_lido Local Local
14273870 0 3309 1677 +1632 whale_0x8914 0x851b00b1... Ultra Sound
14268588 1 3326 1695 +1631 blockdaemon_lido 0x88857150... Ultra Sound
14271233 0 3307 1677 +1630 everstake 0x857b0038... BloXroute Max Profit
14272796 5 3395 1766 +1629 blockdaemon 0x850b00e0... BloXroute Max Profit
14273355 3 3359 1731 +1628 whale_0xdc8d 0x850b00e0... BloXroute Max Profit
14269553 2 3341 1713 +1628 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14273557 0 3305 1677 +1628 0x851b00b1... Ultra Sound
14270622 1 3322 1695 +1627 0x8527d16c... Ultra Sound
14272087 2 3336 1713 +1623 blockdaemon 0xb67eaa5e... BloXroute Regulated
14271748 0 3299 1677 +1622 whale_0xdc8d 0x88a53ec4... BloXroute Max Profit
14270798 0 3298 1677 +1621 whale_0x8ebd Local Local
14267935 8 3437 1819 +1618 0xb67eaa5e... BloXroute Max Profit
14273253 2 3328 1713 +1615 blockdaemon 0x856b0004... BloXroute Max Profit
14272349 0 3292 1677 +1615 whale_0xfd67 0x851b00b1... Ultra Sound
14270376 0 3291 1677 +1614 blockdaemon 0x8db2a99d... Titan Relay
14273295 1 3307 1695 +1612 ether.fi 0x856b0004... BloXroute Max Profit
14271247 1 3302 1695 +1607 blockdaemon_lido 0xb67eaa5e... Titan Relay
14269036 8 3426 1819 +1607 blockdaemon 0xb7c5e609... BloXroute Max Profit
14269743 3 3336 1731 +1605 blockdaemon 0x8527d16c... Ultra Sound
14267836 0 3282 1677 +1605 blockdaemon_lido 0x9129eeb4... Ultra Sound
14268777 15 3547 1944 +1603 blockdaemon 0x850b00e0... BloXroute Max Profit
14268052 0 3280 1677 +1603 ether.fi 0xb26f9666... BloXroute Max Profit
14268920 4 3350 1748 +1602 blockdaemon 0x850b00e0... BloXroute Max Profit
14267549 1 3296 1695 +1601 lido 0x8db2a99d... BloXroute Max Profit
14269124 5 3364 1766 +1598 blockdaemon 0x8527d16c... Ultra Sound
14270902 0 3273 1677 +1596 revolut 0xb67eaa5e... BloXroute Max Profit
14270460 1 3288 1695 +1593 blockdaemon 0x8527d16c... Ultra Sound
14272381 1 3288 1695 +1593 blockdaemon_lido 0x8527d16c... Ultra Sound
14271102 0 3269 1677 +1592 p2porg 0x851b00b1... Ultra Sound
14271712 8 3411 1819 +1592 revolut 0xb26f9666... Titan Relay
14269896 3 3322 1731 +1591 blockdaemon 0x88857150... Ultra Sound
14270551 7 3391 1802 +1589 0x8527d16c... Ultra Sound
14271168 5 3354 1766 +1588 p2porg 0x850b00e0... BloXroute Regulated
14269664 0 3264 1677 +1587 whale_0xfd67 0x851b00b1... Ultra Sound
14272543 3 3316 1731 +1585 blockdaemon_lido 0xb26f9666... Titan Relay
14268159 5 3350 1766 +1584 revolut 0xb7c5e609... BloXroute Max Profit
14269484 11 3456 1873 +1583 lido 0x8527d16c... Ultra Sound
14271819 6 3367 1784 +1583 blockdaemon_lido 0x8527d16c... Ultra Sound
14270279 4 3330 1748 +1582 ether.fi 0xb26f9666... BloXroute Max Profit
14267011 8 3398 1819 +1579 blockdaemon 0x8527d16c... Ultra Sound
14272217 1 3272 1695 +1577 0x8527d16c... Ultra Sound
14269353 5 3343 1766 +1577 kiln 0x850b00e0... BloXroute Max Profit
14270424 1 3269 1695 +1574 blockdaemon_lido 0x9129eeb4... Ultra Sound
14267723 0 3251 1677 +1574 blockdaemon 0x8527d16c... Ultra Sound
14270112 1 3268 1695 +1573 p2porg 0x850b00e0... BloXroute Max Profit
14273690 5 3338 1766 +1572 blockdaemon_lido 0x88857150... Ultra Sound
14268787 2 3283 1713 +1570 blockdaemon_lido 0x88857150... Ultra Sound
14268510 6 3354 1784 +1570 revolut 0x88857150... Ultra Sound
14272582 5 3335 1766 +1569 whale_0xdc8d 0x88857150... Ultra Sound
14270023 6 3352 1784 +1568 ether.fi 0xb26f9666... BloXroute Max Profit
14268498 0 3244 1677 +1567 coinbase Local Local
14266925 2 3275 1713 +1562 blockdaemon 0xb67eaa5e... BloXroute Max Profit
14271219 1 3256 1695 +1561 gateway.fmas_lido 0xb67eaa5e... BloXroute Max Profit
14271843 6 3342 1784 +1558 blockdaemon 0xb67eaa5e... Titan Relay
14273479 10 3413 1855 +1558 revolut 0xb7c5e609... BloXroute Max Profit
14270797 1 3253 1695 +1558 whale_0xc611 0xb67eaa5e... Titan Relay
14273388 0 3231 1677 +1554 revolut 0xb26f9666... Titan Relay
14270308 1 3248 1695 +1553 coinbase Local Local
14273424 10 3407 1855 +1552 ether.fi 0xb26f9666... Titan Relay
14269286 2 3264 1713 +1551 blockdaemon 0x88857150... Ultra Sound
14271523 5 3315 1766 +1549 luno 0x8527d16c... Ultra Sound
14270384 5 3314 1766 +1548 bitstamp 0xb67eaa5e... BloXroute Regulated
14271348 10 3402 1855 +1547 revolut 0xb67eaa5e... BloXroute Max Profit
14267263 13 3454 1908 +1546 blockdaemon 0x8527d16c... Ultra Sound
14270232 7 3346 1802 +1544 blockdaemon 0xb26f9666... Titan Relay
14267130 0 3221 1677 +1544 blockdaemon_lido 0x88a53ec4... BloXroute Max Profit
14269877 3 3274 1731 +1543 whale_0xdc8d 0x8527d16c... Ultra Sound
14268822 12 3433 1890 +1543 blockdaemon 0x8a850621... Titan Relay
14272647 1 3237 1695 +1542 revolut 0xb26f9666... Titan Relay
14267859 2 3254 1713 +1541 gateway.fmas_lido 0xb67eaa5e... BloXroute Regulated
14271426 0 3217 1677 +1540 p2porg 0x851b00b1... Ultra Sound
14271714 0 3212 1677 +1535 gateway.fmas_lido 0x851b00b1... BloXroute Max Profit
14267017 5 3299 1766 +1533 whale_0xdc8d 0xb26f9666... Titan Relay
14268361 0 3209 1677 +1532 blockdaemon 0x88a53ec4... BloXroute Regulated
14271355 0 3207 1677 +1530 kiln 0x857b0038... BloXroute Max Profit
14267027 1 3220 1695 +1525 gateway.fmas_lido 0x8527d16c... Ultra Sound
14268268 0 3200 1677 +1523 whale_0xdc8d 0x8527d16c... Ultra Sound
14270334 6 3304 1784 +1520 blockdaemon_lido 0x88857150... Ultra Sound
14272100 5 3286 1766 +1520 kiln 0xb67eaa5e... BloXroute Regulated
14270100 9 3354 1837 +1517 p2porg 0xb67eaa5e... BloXroute Max Profit
14271291 0 3194 1677 +1517 p2porg 0x851b00b1... Ultra Sound
14267512 1 3210 1695 +1515 whale_0xfd67 0xb67eaa5e... BloXroute Max Profit
14271390 5 3280 1766 +1514 blockdaemon 0xb67eaa5e... BloXroute Regulated
14269282 0 3191 1677 +1514 whale_0x8ebd Local Local
14271728 0 3190 1677 +1513 p2porg 0x850b00e0... Ultra Sound
14270937 5 3276 1766 +1510 blockdaemon_lido 0xb7c5e609... BloXroute Max Profit
14272181 3 3239 1731 +1508 revolut 0xb26f9666... Titan Relay
14268285 5 3274 1766 +1508 blockdaemon_lido 0x8527d16c... Ultra Sound
14271380 7 3309 1802 +1507 gateway.fmas_lido 0xb67eaa5e... BloXroute Max Profit
14270305 6 3290 1784 +1506 bitstamp 0x857b0038... BloXroute Max Profit
14273552 5 3272 1766 +1506 whale_0xfd67 0xb67eaa5e... Titan Relay
14272876 6 3289 1784 +1505 whale_0xfd67 0xb67eaa5e... Titan Relay
14267945 7 3303 1802 +1501 blockdaemon 0x856b0004... BloXroute Max Profit
14267789 5 3267 1766 +1501 figment 0x9129eeb4... Ultra Sound
14267064 7 3301 1802 +1499 revolut 0xb26f9666... Titan Relay
14269922 0 3176 1677 +1499 revolut 0x851b00b1... BloXroute Max Profit
14269209 3 3229 1731 +1498 kiln 0xb67eaa5e... BloXroute Max Profit
14268515 0 3175 1677 +1498 whale_0x8ebd 0xb26f9666... Titan Relay
14270606 3 3228 1731 +1497 revolut 0xb26f9666... Titan Relay
14267163 5 3263 1766 +1497 coinbase 0xb26f9666... BloXroute Regulated
14268071 5 3263 1766 +1497 blockdaemon_lido 0xb26f9666... Titan Relay
14267346 2 3209 1713 +1496 whale_0x8914 0x856b0004... BloXroute Max Profit
14268130 1 3191 1695 +1496 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14267129 6 3279 1784 +1495 coinbase 0x88a53ec4... BloXroute Max Profit
14273703 1 3190 1695 +1495 0x823e0146... BloXroute Max Profit
14270576 0 3172 1677 +1495 gateway.fmas_lido 0x823e0146... BloXroute Max Profit
14270661 6 3273 1784 +1489 revolut 0xb26f9666... Titan Relay
14268477 0 3166 1677 +1489 kiln 0x851b00b1... Flashbots
14269050 7 3288 1802 +1486 blockdaemon 0x856b0004... BloXroute Max Profit
14270193 0 3163 1677 +1486 gateway.fmas_lido 0xb26f9666... Titan Relay
14269683 17 3464 1979 +1485 coinbase 0xb26f9666... BloXroute Regulated
14267679 0 3162 1677 +1485 gateway.fmas_lido 0x8527d16c... Ultra Sound
14273843 6 3268 1784 +1484 kiln 0xb26f9666... Titan Relay
14272042 0 3160 1677 +1483 p2porg 0xb7c5e609... BloXroute Regulated
14269823 0 3158 1677 +1481 0x805e28e6... BloXroute Max Profit
14270487 0 3157 1677 +1480 whale_0x4b5e 0x851b00b1... Ultra Sound
14270809 5 3245 1766 +1479 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14268344 1 3172 1695 +1477 whale_0x8ebd 0xb4ce6162... Ultra Sound
14268215 0 3153 1677 +1476 whale_0xfd67 0xb67eaa5e... Titan Relay
14267053 11 3348 1873 +1475 whale_0xdc8d 0xb26f9666... Titan Relay
14272032 3 3203 1731 +1472 whale_0x6ddb 0xb67eaa5e... Titan Relay
14273635 1 3167 1695 +1472 blockdaemon_lido 0xb26f9666... Titan Relay
14269343 1 3166 1695 +1471 blockdaemon 0x8527d16c... Ultra Sound
14273322 0 3147 1677 +1470 blockdaemon_lido 0xb26f9666... Titan Relay
14273291 2 3182 1713 +1469 p2porg 0x850b00e0... BloXroute Regulated
14267764 1 3164 1695 +1469 whale_0xfd67 0xb67eaa5e... Ultra Sound
14273714 0 3145 1677 +1468 blockdaemon 0x88857150... Ultra Sound
14269065 0 3143 1677 +1466 revolut 0xb26f9666... Titan Relay
14269149 0 3141 1677 +1464 gateway.fmas_lido 0x8527d16c... Ultra Sound
14271881 6 3247 1784 +1463 p2porg 0x850b00e0... BloXroute Regulated
14269334 1 3158 1695 +1463 gateway.fmas_lido 0xa03781b9... Ultra Sound
14269750 1 3157 1695 +1462 p2porg 0x850b00e0... BloXroute Regulated
14272625 5 3228 1766 +1462 kiln Local Local
14272457 5 3225 1766 +1459 revolut 0xb26f9666... Titan Relay
14270299 6 3240 1784 +1456 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14270141 6 3240 1784 +1456 whale_0xfd67 0x850b00e0... Ultra Sound
14267185 6 3237 1784 +1453 whale_0xfd67 0xb67eaa5e... Titan Relay
14267143 2 3165 1713 +1452 whale_0x8914 0x850b00e0... Ultra Sound
14271303 2 3165 1713 +1452 whale_0xfd67 0x88857150... Ultra Sound
14267667 6 3236 1784 +1452 kiln 0xb67eaa5e... BloXroute Regulated
14267900 6 3235 1784 +1451 gateway.fmas_lido 0x8db2a99d... BloXroute Max Profit
14270468 7 3252 1802 +1450 blockdaemon 0x8527d16c... Ultra Sound
14268557 1 3145 1695 +1450 coinbase 0xb26f9666... Titan Relay
14268226 1 3144 1695 +1449 kiln 0x8db2a99d... Titan Relay
14272093 8 3267 1819 +1448 blockdaemon_lido 0xb26f9666... Titan Relay
14272854 3 3177 1731 +1446 whale_0x8914 0xb67eaa5e... Titan Relay
14270709 6 3230 1784 +1446 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14267156 1 3141 1695 +1446 kiln Local Local
14272120 15 3388 1944 +1444 kiln 0x857b0038... BloXroute Max Profit
14270751 0 3120 1677 +1443 whale_0x8914 0x851b00b1... Ultra Sound
14269129 0 3120 1677 +1443 whale_0x6ddb 0xb67eaa5e... BloXroute Regulated
14270572 6 3225 1784 +1441 gateway.fmas_lido 0x8527d16c... Ultra Sound
14268958 4 3188 1748 +1440 coinbase 0xac09aa45... Flashbots
14267664 2 3152 1713 +1439 p2porg 0x850b00e0... BloXroute Regulated
14267183 0 3116 1677 +1439 whale_0x6ddb 0x851b00b1... Ultra Sound
14273934 1 3126 1695 +1431 gateway.fmas_lido 0x850b00e0... BloXroute Max Profit
14267529 0 3107 1677 +1430 whale_0x8ebd 0xb26f9666... Titan Relay
14268942 5 3194 1766 +1428 kiln 0xb67eaa5e... BloXroute Regulated
14266917 1 3121 1695 +1426 coinbase 0xb26f9666... Titan Relay
14273265 12 3316 1890 +1426 p2porg 0x850b00e0... BloXroute Regulated
14266945 0 3102 1677 +1425 solo_stakers 0x80ad903b... Ultra Sound
14269739 5 3190 1766 +1424 coinbase Local Local
14270935 8 3243 1819 +1424 coinbase 0xb67eaa5e... BloXroute Regulated
14273306 5 3188 1766 +1422 whale_0x8914 0xb67eaa5e... Titan Relay
14270879 5 3187 1766 +1421 coinbase 0xb26f9666... Ultra Sound
14266912 0 3097 1677 +1420 whale_0x8ebd 0x8db2a99d... BloXroute Max Profit
14271783 0 3097 1677 +1420 whale_0x8914 0x823e0146... Ultra Sound
14267362 4 3168 1748 +1420 p2porg 0x850b00e0... BloXroute Max Profit
14273073 8 3239 1819 +1420 whale_0x3878 0xb67eaa5e... Titan Relay
14269977 0 3095 1677 +1418 figment 0x99cba505... BloXroute Max Profit
14270563 0 3095 1677 +1418 p2porg 0x856b0004... Ultra Sound
14271914 9 3254 1837 +1417 coinbase 0x850b00e0... BloXroute Max Profit
14267832 6 3197 1784 +1413 everstake 0xb67eaa5e... BloXroute Max Profit
14272464 0 3090 1677 +1413 p2porg 0xb26f9666... Titan Relay
14271578 0 3090 1677 +1413 0x83d6a6ab... BloXroute Regulated
14270310 8 3232 1819 +1413 kiln Local Local
14268824 1 3103 1695 +1408 p2porg 0xb26f9666... Titan Relay
14268007 0 3084 1677 +1407 whale_0x8914 0xb67eaa5e... BloXroute Regulated
14269015 7 3207 1802 +1405 gateway.fmas_lido 0x8527d16c... Ultra Sound
14272103 1 3099 1695 +1404 whale_0x8ebd 0x9129eeb4... Agnostic Gnosis
14268442 7 3203 1802 +1401 blockdaemon 0x8527d16c... Ultra Sound
14271853 11 3274 1873 +1401 whale_0x8ebd Local Local
14268410 1 3096 1695 +1401 blockdaemon 0x9129eeb4... Ultra Sound
14268399 7 3202 1802 +1400 gateway.fmas_lido 0xb26f9666... Ultra Sound
14267416 9 3237 1837 +1400 coinbase Local Local
14268673 2 3112 1713 +1399 figment 0xb26f9666... Titan Relay
14269308 1 3093 1695 +1398 whale_0x8ebd 0xb26f9666... BloXroute Max Profit
14272182 5 3164 1766 +1398 gateway.fmas_lido 0x88857150... Ultra Sound
14269157 5 3164 1766 +1398 kiln 0x850b00e0... Flashbots
14270088 3 3126 1731 +1395 whale_0x8914 0x85fb0503... Ultra Sound
14270442 0 3072 1677 +1395 whale_0x8ebd 0x850b00e0... BloXroute Max Profit
14267406 7 3196 1802 +1394 whale_0x8914 0x856b0004... BloXroute Max Profit
14267643 8 3212 1819 +1393 figment 0xb26f9666... Titan Relay
14269312 2 3105 1713 +1392 kiln 0xb26f9666... Titan Relay
14270007 1 3087 1695 +1392 whale_0x8ebd Local Local
14271121 7 3193 1802 +1391 kiln 0xb26f9666... BloXroute Regulated
14271969 1 3086 1695 +1391 whale_0x8ebd 0x856b0004... Ultra Sound
14268978 5 3156 1766 +1390 whale_0x8914 0xb67eaa5e... BloXroute Regulated
14270508 5 3156 1766 +1390 solo_stakers 0x857b0038... Ultra Sound
14271533 7 3191 1802 +1389 whale_0x8ebd 0x850b00e0... BloXroute Max Profit
14272764 0 3066 1677 +1389 p2porg 0xb26f9666... Titan Relay
14269852 7 3189 1802 +1387 0x85fb0503... Aestus
14267467 6 3171 1784 +1387 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14271693 6 3170 1784 +1386 whale_0x8914 0xb67eaa5e... Titan Relay
14270261 7 3187 1802 +1385 whale_0xfd67 0xb67eaa5e... Titan Relay
14272185 6 3169 1784 +1385 coinbase 0x8527d16c... Ultra Sound
14268551 6 3168 1784 +1384 whale_0xfd67 0x88a53ec4... BloXroute Regulated
14270510 6 3168 1784 +1384 0x8527d16c... Ultra Sound
14268343 6 3167 1784 +1383 whale_0xfd67 0x88a53ec4... BloXroute Regulated
14268643 1 3078 1695 +1383 whale_0x8ebd 0x8527d16c... Ultra Sound
14269429 0 3059 1677 +1382 coinbase 0x851b00b1... BloXroute Max Profit
14272052 5 3147 1766 +1381 coinbase 0xb26f9666... BloXroute Regulated
14268866 0 3058 1677 +1381 whale_0xedc6 0x856b0004... Ultra Sound
14268971 4 3128 1748 +1380 whale_0x3878 0xb67eaa5e... BloXroute Max Profit
14268350 1 3074 1695 +1379 coinbase 0x8527d16c... Ultra Sound
14268483 9 3215 1837 +1378 everstake 0x88a53ec4... BloXroute Regulated
14269151 6 3161 1784 +1377 whale_0x8ebd 0x8527d16c... Ultra Sound
14269430 15 3319 1944 +1375 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14272392 0 3051 1677 +1374 whale_0xedc6 0x823e0146... Ultra Sound
14272601 6 3157 1784 +1373 coinbase 0x850b00e0... BloXroute Max Profit
14269396 5 3139 1766 +1373 kiln 0xb26f9666... BloXroute Regulated
14272179 2 3085 1713 +1372 whale_0x8ebd 0x88857150... Ultra Sound
14271044 6 3155 1784 +1371 whale_0x8ebd 0x8527d16c... Ultra Sound
14270958 10 3224 1855 +1369 kiln Local Local
14268860 1 3064 1695 +1369 coinbase 0xb26f9666... BloXroute Regulated
14269221 0 3046 1677 +1369 whale_0x8ebd 0xb67eaa5e... Ultra Sound
14272468 2 3081 1713 +1368 figment 0xb26f9666... Titan Relay
14270332 1 3063 1695 +1368 kiln 0x856b0004... BloXroute Max Profit
14271735 7 3169 1802 +1367 whale_0x8ebd 0x8527d16c... Ultra Sound
14271564 0 3044 1677 +1367 coinbase 0x851b00b1... BloXroute Max Profit
14273529 4 3114 1748 +1366 whale_0x8ebd 0x88857150... Ultra Sound
14267553 0 3042 1677 +1365 coinbase Local Local
14273448 6 3148 1784 +1364 figment 0x856b0004... Ultra Sound
14271372 6 3148 1784 +1364 whale_0x8ebd 0x8527d16c... Ultra Sound
14269986 3 3094 1731 +1363 coinbase 0xb67eaa5e... BloXroute Max Profit
14271759 7 3165 1802 +1363 whale_0x8ebd 0xb4ce6162... Ultra Sound
14267607 6 3147 1784 +1363 p2porg 0xb7c5e609... BloXroute Max Profit
14268167 5 3129 1766 +1363 whale_0x8ebd 0xb67eaa5e... Ultra Sound
14272411 0 3039 1677 +1362 p2porg 0x856b0004... BloXroute Max Profit
14272047 2 3073 1713 +1360 coinbase 0xb26f9666... Titan Relay
14272174 1 3055 1695 +1360 stader 0x856b0004... BloXroute Max Profit
14272123 2 3071 1713 +1358 coinbase 0x8527d16c... Ultra Sound
14271225 10 3213 1855 +1358 kiln 0x850b00e0... BloXroute Max Profit
14273047 1 3053 1695 +1358 coinbase 0xb26f9666... Aestus
14271765 7 3159 1802 +1357 p2porg 0x856b0004... Ultra Sound
14271808 5 3123 1766 +1357 coinbase 0xb26f9666... Titan Relay
14267319 1 3049 1695 +1354 0xb26f9666... BloXroute Max Profit
14270739 0 3030 1677 +1353 kiln 0x8527d16c... Ultra Sound
14273577 6 3136 1784 +1352 kiln 0x88857150... Ultra Sound
14269675 1 3047 1695 +1352 whale_0x8ebd 0xb26f9666... BloXroute Max Profit
14267234 8 3171 1819 +1352 p2porg 0x8db2a99d... BloXroute Max Profit
14271882 0 3028 1677 +1351 p2porg 0x856b0004... Ultra Sound
14273108 1 3045 1695 +1350 kiln 0xb26f9666... BloXroute Max Profit
14271317 0 3027 1677 +1350 p2porg 0xb67eaa5e... BloXroute Max Profit
14269799 5 3112 1766 +1346 whale_0x8ebd 0x8527d16c... Ultra Sound
14273661 0 3023 1677 +1346 whale_0x8ebd 0x8527d16c... Ultra Sound
14273801 0 3021 1677 +1344 p2porg 0xa965c911... Ultra Sound
14272842 6 3126 1784 +1342 kiln 0x850b00e0... Flashbots
14271695 0 3019 1677 +1342 figment 0x856b0004... Ultra Sound
14268930 3 3072 1731 +1341 p2porg 0x856b0004... BloXroute Max Profit
14271391 2 3054 1713 +1341 coinbase 0xb26f9666... Titan Relay
14267570 0 3018 1677 +1341 coinbase 0xb67eaa5e... Ultra Sound
14272574 2 3053 1713 +1340 p2porg 0xb26f9666... BloXroute Regulated
14269089 1 3035 1695 +1340 kiln 0x823e0146... BloXroute Max Profit
14272173 4 3088 1748 +1340 coinbase 0x856b0004... BloXroute Max Profit
14267894 6 3123 1784 +1339 kiln 0x8527d16c... Ultra Sound
14270223 5 3105 1766 +1339 whale_0x8ebd 0x856b0004... BloXroute Max Profit
14271318 5 3105 1766 +1339 kiln 0x8527d16c... Ultra Sound
14271516 0 3016 1677 +1339 kiln 0x851b00b1... BloXroute Max Profit
14273040 6 3122 1784 +1338 p2porg 0xb26f9666... BloXroute Regulated
14267540 0 3014 1677 +1337 whale_0x23be 0x856b0004... BloXroute Max Profit
14270070 5 3102 1766 +1336 whale_0x8ebd 0x8527d16c... Ultra Sound
14271784 5 3101 1766 +1335 coinbase 0xb26f9666... BloXroute Max Profit
14271767 0 3012 1677 +1335 coinbase 0x8db2a99d... BloXroute Max Profit
14266944 0 3012 1677 +1335 stader 0x99cba505... Flashbots
14267515 0 3011 1677 +1334 p2porg 0x8db2a99d... BloXroute Max Profit
14268276 3 3064 1731 +1333 coinbase 0x88857150... Ultra Sound
14270116 3 3064 1731 +1333 coinbase 0xb26f9666... Titan Relay
14268369 1 3027 1695 +1332 whale_0xedc6 0xb26f9666... BloXroute Max Profit
14268404 0 3009 1677 +1332 coinbase 0xb26f9666... BloXroute Regulated
14270793 5 3097 1766 +1331 kiln Local Local
14267389 6 3114 1784 +1330 whale_0x8ebd 0xb26f9666... BloXroute Max Profit
14271944 5 3096 1766 +1330 whale_0x8ebd 0x8527d16c... Ultra Sound
14267944 4 3077 1748 +1329 gateway.fmas_lido 0xb67eaa5e... Ultra Sound
14267970 5 3094 1766 +1328 0xb67eaa5e... Ultra Sound
14268543 2 3040 1713 +1327 coinbase 0x8527d16c... Ultra Sound
14270790 0 3004 1677 +1327 whale_0x8ebd 0xb26f9666... BloXroute Max Profit
14268485 0 3004 1677 +1327 coinbase 0x856b0004... BloXroute Max Profit
14270215 5 3092 1766 +1326 coinbase 0xb26f9666... BloXroute Max Profit
14267257 0 3003 1677 +1326 kiln 0x9129eeb4... Ultra Sound
14268104 0 3003 1677 +1326 everstake 0xb26f9666... Titan Relay
14273006 2 3038 1713 +1325 kiln 0xb7c5e609... BloXroute Max Profit
14267285 5 3091 1766 +1325 whale_0x8ebd 0x8db2a99d... BloXroute Max Profit
14272777 0 3001 1677 +1324 coinbase 0x8527d16c... Ultra Sound
14267166 7 3125 1802 +1323 0x850b00e0... BloXroute Max Profit
14271211 6 3107 1784 +1323 whale_0x8ebd 0x8527d16c... Ultra Sound
14270401 6 3107 1784 +1323 whale_0x8ebd 0x8527d16c... Ultra Sound
14273067 1 3017 1695 +1322 kiln 0x856b0004... BloXroute Max Profit
14268249 0 2999 1677 +1322 coinbase 0x88a53ec4... BloXroute Regulated
14273649 6 3105 1784 +1321 everstake 0x850b00e0... BloXroute Max Profit
14271496 6 3105 1784 +1321 p2porg 0xb26f9666... Titan Relay
14269579 2 3033 1713 +1320 kiln 0xb26f9666... Titan Relay
14267423 10 3174 1855 +1319 kiln Local Local
14270325 3 3049 1731 +1318 kiln 0x88857150... Ultra Sound
14268169 3 3048 1731 +1317 coinbase 0xb67eaa5e... Ultra Sound
14273850 2 3030 1713 +1317 p2porg 0x85fb0503... Aestus
14273150 5 3083 1766 +1317 coinbase 0x8527d16c... Ultra Sound
14272500 0 2993 1677 +1316 whale_0x8ebd 0x88857150... Ultra Sound
14267246 6 3099 1784 +1315 coinbase 0x8527d16c... Ultra Sound
14270453 0 2991 1677 +1314 coinbase 0xb26f9666... Titan Relay
14271096 8 3133 1819 +1314 0x856b0004... BloXroute Max Profit
14270306 2 3025 1713 +1312 kiln 0xb26f9666... BloXroute Max Profit
14267139 1 3007 1695 +1312 coinbase 0x853b0078... BloXroute Max Profit
14273921 5 3078 1766 +1312 coinbase 0xb26f9666... Titan Relay
14269753 7 3113 1802 +1311 kiln 0x856b0004... BloXroute Max Profit
14273627 10 3166 1855 +1311 coinbase 0x8db2a99d... BloXroute Max Profit
14270585 0 2988 1677 +1311 coinbase 0xb26f9666... Titan Relay
14271005 9 3147 1837 +1310 whale_0x8ebd 0x856b0004... BloXroute Max Profit
14273766 20 3342 2032 +1310 whale_0x4b5e 0xb67eaa5e... Titan Relay
14267548 3 3040 1731 +1309 coinbase 0xb67eaa5e... Ultra Sound
14268218 6 3093 1784 +1309 0x856b0004... BloXroute Max Profit
14272441 6 3093 1784 +1309 coinbase 0xb26f9666... BloXroute Regulated
14269935 1 3003 1695 +1308 coinbase 0xb26f9666... BloXroute Regulated
14272855 5 3074 1766 +1308 0x8db2a99d... BloXroute Max Profit
14271046 6 3091 1784 +1307 whale_0x8ebd 0x856b0004... BloXroute Max Profit
14273489 0 2984 1677 +1307 p2porg 0x99cba505... BloXroute Max Profit
14271805 8 3126 1819 +1307 whale_0x8ebd 0xb26f9666... Titan Relay
14270098 5 3072 1766 +1306 whale_0xc547 0xb4ce6162... Ultra Sound
14267956 0 2983 1677 +1306 whale_0x8ebd 0x856b0004... BloXroute Max Profit
14270184 6 3089 1784 +1305 coinbase 0x856b0004... BloXroute Max Profit
14270821 5 3070 1766 +1304 p2porg 0x856b0004... Ultra Sound
14267866 4 3052 1748 +1304 kiln 0xb26f9666... Titan Relay
14270106 8 3122 1819 +1303 kiln Local Local
14267644 8 3121 1819 +1302 kiln 0x856b0004... BloXroute Max Profit
14272811 5 3067 1766 +1301 kiln 0x9129eeb4... Ultra Sound
14267198 8 3120 1819 +1301 whale_0x8ebd 0x8527d16c... Ultra Sound
14267344 6 3084 1784 +1300 coinbase 0x88857150... Ultra Sound
14269458 6 3084 1784 +1300 0xb67eaa5e... BloXroute Max Profit
14271547 1 2995 1695 +1300 kiln 0x856b0004... BloXroute Max Profit
14270587 0 2976 1677 +1299 coinbase 0x856b0004... BloXroute Max Profit
14268941 0 2975 1677 +1298 whale_0x8ebd 0x8527d16c... Ultra Sound
14267713 6 3081 1784 +1297 everstake 0xb26f9666... Titan Relay
14270423 1 2992 1695 +1297 bitstamp 0x857b0038... BloXroute Max Profit
14268078 0 2974 1677 +1297 whale_0x8ebd 0xa03781b9... Ultra Sound
14269558 0 2974 1677 +1297 whale_0x8ebd 0x8527d16c... Ultra Sound
14269550 12 3187 1890 +1297 whale_0x8ebd 0x856b0004... BloXroute Max Profit
14270404 3 3027 1731 +1296 coinbase 0x8527d16c... Ultra Sound
14268567 6 3080 1784 +1296 p2porg 0xb67eaa5e... Aestus
14268764 0 2973 1677 +1296 kiln 0x853b0078... BloXroute Max Profit
14271480 4 3044 1748 +1296 coinbase 0x85fb0503... Aestus
14271079 0 2971 1677 +1294 coinbase 0x8527d16c... Ultra Sound
14268987 5 3059 1766 +1293 coinbase 0x8527d16c... Ultra Sound
14270614 8 3112 1819 +1293 whale_0x8ebd 0x8527d16c... Ultra Sound
14268793 2 3005 1713 +1292 whale_0x8ebd 0xb4ce6162... Ultra Sound
14272616 7 3093 1802 +1291 kiln 0x856b0004... BloXroute Max Profit
14273500 7 3093 1802 +1291 everstake 0x8527d16c... Ultra Sound
14267421 0 2968 1677 +1291 everstake 0xb26f9666... Titan Relay
14270963 3 3021 1731 +1290 kiln 0x856b0004... BloXroute Max Profit
14271831 6 3074 1784 +1290 kiln 0xb26f9666... BloXroute Regulated
14273943 1 2985 1695 +1290 coinbase 0x8527d16c... Ultra Sound
14267905 2 3002 1713 +1289 coinbase 0x853b0078... Agnostic Gnosis
14273366 5 3055 1766 +1289 p2porg 0xb26f9666... BloXroute Max Profit
14267410 5 3055 1766 +1289 coinbase 0x853b0078... BloXroute Max Profit
14271681 6 3072 1784 +1288 coinbase 0x856b0004... BloXroute Max Profit
14270837 1 2983 1695 +1288 kiln 0x856b0004... BloXroute Max Profit
14267440 0 2965 1677 +1288 coinbase 0x8527d16c... Ultra Sound
14271488 0 2965 1677 +1288 stader 0xb26f9666... Titan Relay
14267757 5 3053 1766 +1287 everstake 0xb67eaa5e... BloXroute Max Profit
14267418 0 2964 1677 +1287 coinbase 0xb26f9666... BloXroute Max Profit
14268835 6 3070 1784 +1286 coinbase 0x8527d16c... Ultra Sound
14269017 5 3052 1766 +1286 kiln Local Local
14270880 5 3051 1766 +1285 whale_0x8ebd 0xb4ce6162... Ultra Sound
14268093 1 2978 1695 +1283 kiln 0xb26f9666... BloXroute Max Profit
14270938 5 3049 1766 +1283 0x856b0004... Ultra Sound
14272045 0 2960 1677 +1283 kiln 0x99cba505... Flashbots
14270273 5 3048 1766 +1282 whale_0x8ebd 0x88857150... Ultra Sound
14273985 7 3083 1802 +1281 whale_0x8ebd 0x8527d16c... Ultra Sound
14268480 6 3065 1784 +1281 coinbase 0x8527d16c... Ultra Sound
14269463 6 3065 1784 +1281 kiln 0xb26f9666... BloXroute Max Profit
14267370 5 3047 1766 +1281 ether.fi 0x8db2a99d... BloXroute Max Profit
14272155 1 2975 1695 +1280 everstake 0x8527d16c... Ultra Sound
14272447 5 3046 1766 +1280 kiln 0x8db2a99d... Titan Relay
14272326 0 2956 1677 +1279 p2porg 0xb26f9666... BloXroute Max Profit
14268024 1 2973 1695 +1278 coinbase 0x823e0146... Flashbots
14266974 0 2955 1677 +1278 kiln 0x99cba505... Flashbots
14267084 0 2955 1677 +1278 kiln 0x823e0146... BloXroute Max Profit
14267125 7 3079 1802 +1277 coinbase 0x8527d16c... Ultra Sound
14268030 6 3061 1784 +1277 coinbase 0x8527d16c... Ultra Sound
14273724 0 2954 1677 +1277 kiln 0xb26f9666... Titan Relay
14273514 3 3007 1731 +1276 kiln Local Local
14271954 5 3041 1766 +1275 coinbase 0x8527d16c... Ultra Sound
14271106 0 2951 1677 +1274 coinbase 0xb26f9666... BloXroute Max Profit
14271294 1 2968 1695 +1273 coinbase 0x823e0146... Ultra Sound
14268076 5 3039 1766 +1273 coinbase 0x8527d16c... Ultra Sound
14267226 0 2950 1677 +1273 kiln 0x99cba505... BloXroute Max Profit
14268171 5 3038 1766 +1272 coinbase 0x8527d16c... Ultra Sound
14268683 6 3055 1784 +1271 coinbase 0xb26f9666... Titan Relay
14270375 6 3054 1784 +1270 coinbase 0x9129eeb4... Agnostic Gnosis
14269677 7 3071 1802 +1269 whale_0x8ebd 0x8527d16c... Ultra Sound
14270414 6 3053 1784 +1269 coinbase 0x856b0004... BloXroute Max Profit
14267279 1 2964 1695 +1269 kiln 0xa965c911... Ultra Sound
14269981 11 3141 1873 +1268 figment 0xb26f9666... Titan Relay
14268780 8 3087 1819 +1268 whale_0x8ebd 0xa965c911... Ultra Sound
14269383 5 3033 1766 +1267 coinbase 0xb26f9666... Titan Relay
14271088 13 3175 1908 +1267 p2porg 0xb26f9666... Titan Relay
14272260 0 2944 1677 +1267 everstake 0x9129eeb4... Ultra Sound
14269629 0 2944 1677 +1267 coinbase 0x8527d16c... Ultra Sound
14272953 0 2943 1677 +1266 kiln 0x99cba505... BloXroute Max Profit
14267213 0 2943 1677 +1266 everstake 0x83d6a6ab... BloXroute Max Profit
14268280 3 2996 1731 +1265 everstake 0x88cd924c... Ultra Sound
14270664 12 3155 1890 +1265 gateway.fmas_lido 0x8527d16c... Ultra Sound
14272523 0 2941 1677 +1264 whale_0x8ebd 0xb4ce6162... Ultra Sound
14267634 1 2958 1695 +1263 everstake 0xb67eaa5e... BloXroute Max Profit
14273199 1 2957 1695 +1262 kiln 0x85fb0503... Aestus
14268530 0 2939 1677 +1262 everstake 0xb26f9666... Titan Relay
14270830 8 3080 1819 +1261 0x8527d16c... Ultra Sound
14268384 7 3062 1802 +1260 whale_0x8ebd 0xb26f9666... Titan Relay
14273881 1 2955 1695 +1260 kiln 0x856b0004... BloXroute Max Profit
14272000 5 3026 1766 +1260 whale_0x8ebd 0x85fb0503... Ultra Sound
14270407 6 3043 1784 +1259 coinbase 0xb26f9666... Titan Relay
14271686 1 2954 1695 +1259 everstake 0x850b00e0... BloXroute Max Profit
14267692 5 3025 1766 +1259 kiln 0xb26f9666... BloXroute Regulated
14271792 0 2934 1677 +1257 kiln 0x823e0146... Flashbots
14267341 0 2934 1677 +1257 kiln 0x8db2a99d... Ultra Sound
14270292 0 2934 1677 +1257 stakingfacilities_lido 0x850b00e0... BloXroute Max Profit
14268462 6 3040 1784 +1256 whale_0x8ebd 0x8527d16c... Ultra Sound
14272815 5 3021 1766 +1255 coinbase 0xb26f9666... Titan Relay
14272238 4 3003 1748 +1255 swell 0x856b0004... BloXroute Max Profit
14268069 2 2967 1713 +1254 0xb7c5e609... BloXroute Max Profit
14270588 6 3038 1784 +1254 whale_0x8ebd 0xac23f8cc... Ultra Sound
14271790 6 3038 1784 +1254 coinbase 0x823e0146... Flashbots
14267012 0 2931 1677 +1254 kiln 0x805e28e6... BloXroute Max Profit
14271145 6 3037 1784 +1253 kiln Local Local
14273262 5 3019 1766 +1253 kiln 0xb67eaa5e... BloXroute Max Profit
14270618 0 2930 1677 +1253 nethermind_lido 0xb26f9666... Aestus
14267826 13 3160 1908 +1252 figment 0x8527d16c... Ultra Sound
14267547 8 3071 1819 +1252 everstake 0xb67eaa5e... BloXroute Max Profit
14272594 1 2946 1695 +1251 0xb26f9666... Titan Relay
14268660 3 2981 1731 +1250 kiln 0xb26f9666... BloXroute Max Profit
14271697 5 3016 1766 +1250 everstake 0x850b00e0... BloXroute Max Profit
14273433 0 2927 1677 +1250 everstake 0x851b00b1... BloXroute Max Profit
14271364 3 2980 1731 +1249 kiln 0x856b0004... BloXroute Max Profit
14271965 5 3013 1766 +1247 everstake 0x88857150... Ultra Sound
14273215 4 2995 1748 +1247 kiln 0x8527d16c... Ultra Sound
14269911 2 2959 1713 +1246 coinbase 0xb26f9666... Aestus
14268292 0 2923 1677 +1246 everstake 0xb7c5e609... BloXroute Max Profit
14267242 6 3029 1784 +1245 everstake 0x8527d16c... Ultra Sound
14270863 0 2922 1677 +1245 kiln 0xb26f9666... BloXroute Max Profit
14272213 1 2939 1695 +1244 nethermind_lido 0x856b0004... BloXroute Max Profit
14268647 3 2974 1731 +1243 kiln 0x8527d16c... Ultra Sound
14268616 1 2938 1695 +1243 nethermind_lido 0xb26f9666... Aestus
14273780 7 3044 1802 +1242 everstake 0xb26f9666... Titan Relay
14273969 5 3008 1766 +1242 everstake 0xb26f9666... Titan Relay
14273698 0 2919 1677 +1242 0x856b0004... Agnostic Gnosis
14269641 8 3061 1819 +1242 whale_0x8ebd 0x8527d16c... Ultra Sound
14268904 2 2954 1713 +1241 kiln 0x823e0146... Ultra Sound
14273212 2 2954 1713 +1241 nethermind_lido 0x85fb0503... Aestus
14272247 3 2971 1731 +1240 nethermind_lido 0x856b0004... BloXroute Max Profit
14271692 1 2935 1695 +1240 kiln 0x856b0004... BloXroute Max Profit
14273539 5 3006 1766 +1240 kiln 0x856b0004... BloXroute Max Profit
14272427 1 2934 1695 +1239 everstake 0x856b0004... BloXroute Max Profit
14268364 1 2934 1695 +1239 kiln 0x88857150... Ultra Sound
14270045 9 3076 1837 +1239 kiln 0x8527d16c... Ultra Sound
14270642 0 2916 1677 +1239 0x88cd924c... Ultra Sound
14272008 7 3038 1802 +1236 whale_0x8ee5 0xb26f9666... BloXroute Max Profit
14271579 0 2913 1677 +1236 gateway.fmas_lido 0x851b00b1... BloXroute Max Profit
14267918 0 2913 1677 +1236 kiln 0x8527d16c... Ultra Sound
14271341 0 2913 1677 +1236 coinbase 0xb26f9666... BloXroute Max Profit
14270012 1 2930 1695 +1235 kiln 0x8527d16c... Ultra Sound
14268200 5 3001 1766 +1235 coinbase 0x88857150... Ultra Sound
14270443 6 3018 1784 +1234 kiln 0x856b0004... BloXroute Max Profit
14268655 0 2911 1677 +1234 everstake 0xb26f9666... Titan Relay
14272794 5 2999 1766 +1233 everstake 0xb67eaa5e... BloXroute Regulated
14272730 0 2909 1677 +1232 stader 0x823e0146... BloXroute Max Profit
14273063 7 3033 1802 +1231 everstake 0x850b00e0... BloXroute Max Profit
14268365 4 2979 1748 +1231 kiln 0x88857150... Ultra Sound
14268943 0 2906 1677 +1229 everstake 0xb26f9666... Titan Relay
14272396 8 3048 1819 +1229 kiln 0x856b0004... BloXroute Max Profit
14269644 8 3048 1819 +1229 coinbase 0xb26f9666... Titan Relay
14270365 8 3047 1819 +1228 whale_0x8ebd 0x856b0004... BloXroute Max Profit
14267182 0 2904 1677 +1227 everstake 0xb26f9666... Titan Relay
14273269 0 2904 1677 +1227 everstake 0xb67eaa5e... Ultra Sound
14272348 6 3010 1784 +1226 coinbase 0x8527d16c... Ultra Sound
14268390 1 2921 1695 +1226 whale_0x8ebd 0xb4ce6162... Ultra Sound
14273507 2 2938 1713 +1225 kiln 0x85fb0503... Aestus
14272007 6 3009 1784 +1225 kiln 0xb26f9666... BloXroute Max Profit
14270702 6 3008 1784 +1224 kiln 0x856b0004... BloXroute Max Profit
14268541 5 2990 1766 +1224 everstake 0xa965c911... Ultra Sound
14269859 0 2901 1677 +1224 kiln Local Local
14269612 11 3096 1873 +1223 ether.fi 0x850b00e0... BloXroute Max Profit
14273879 5 2989 1766 +1223 everstake 0x8db2a99d... Ultra Sound
14273898 0 2900 1677 +1223 kiln 0x85fb0503... Aestus
14269375 0 2899 1677 +1222 kiln 0xb26f9666... BloXroute Regulated
14269000 0 2899 1677 +1222 everstake 0x8db2a99d... Ultra Sound
14267557 12 3112 1890 +1222 p2porg 0x856b0004... BloXroute Max Profit
14269136 8 3040 1819 +1221 coinbase 0x85fb0503... Aestus
14271856 6 3004 1784 +1220 nethermind_lido 0xb26f9666... Aestus
14269764 0 2897 1677 +1220 everstake 0x85fb0503... Aestus
14273988 6 3003 1784 +1219 everstake 0xb7c5e609... BloXroute Max Profit
14271007 0 2895 1677 +1218 whale_0x8ebd 0x857b0038... BloXroute Max Profit
14270569 4 2966 1748 +1218 solo_stakers 0xb26f9666... BloXroute Regulated
14267232 5 2983 1766 +1217 gateway.fmas_lido 0x88a53ec4... BloXroute Max Profit
14270233 0 2894 1677 +1217 everstake 0xb26f9666... Titan Relay
14267436 0 2894 1677 +1217 kiln 0xba003e46... Flashbots
14271718 0 2892 1677 +1215 stader 0xb26f9666... Titan Relay
14269356 10 3069 1855 +1214 coinbase 0x8527d16c... Ultra Sound
14269447 1 2909 1695 +1214 stader 0xb26f9666... BloXroute Max Profit
Total anomalies: 556

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})