Mon, Apr 13, 2026

Propagation anomalies - 2026-04-13

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-04-13' AND slot_start_date_time < '2026-04-13'::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-04-13' AND slot_start_date_time < '2026-04-13'::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-04-13' AND slot_start_date_time < '2026-04-13'::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-04-13' AND slot_start_date_time < '2026-04-13'::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-04-13' AND slot_start_date_time < '2026-04-13'::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-04-13' AND slot_start_date_time < '2026-04-13'::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-04-13' AND slot_start_date_time < '2026-04-13'::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-04-13' AND slot_start_date_time < '2026-04-13'::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,186
MEV blocks: 6,715 (93.4%)
Local blocks: 471 (6.6%)

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 = 1682.9 + 17.11 × blob_count (R² = 0.011)
Residual σ = 586.4ms
Anomalies (>2σ slow): 553 (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
14105756 0 5007 1683 +3324 solo_stakers Local Local
14101471 3 4990 1734 +3256 whale_0x8ebd 0x853b0078... Agnostic Gnosis
14103712 0 4788 1683 +3105 upbit Local Local
14103313 0 4219 1683 +2536 lido Local Local
14105313 5 3895 1768 +2127 solo_stakers 0x88a53ec4... Aestus
14103384 1 3730 1700 +2030 solo_stakers 0x853b0078... Agnostic Gnosis
14106080 1 3678 1700 +1978 liquid_collective 0xb26f9666... Titan Relay
14101440 2 3666 1717 +1949 nethermind_lido 0x853b0078... Agnostic Gnosis
14107109 1 3596 1700 +1896 blockdaemon 0xb67eaa5e... BloXroute Max Profit
14105237 5 3654 1768 +1886 blockdaemon 0x8527d16c... Ultra Sound
14104960 5 3639 1768 +1871 blockdaemon 0x8527d16c... Ultra Sound
14105085 12 3750 1888 +1862 coinbase 0xb67eaa5e... Aestus
14101504 5 3605 1768 +1837 stakefish 0x88a53ec4... BloXroute Regulated
14105601 3 3570 1734 +1836 blockdaemon 0xb4ce6162... Ultra Sound
14105320 8 3649 1820 +1829 blockdaemon 0x8527d16c... Ultra Sound
14106362 0 3507 1683 +1824 upbit 0xb4ce6162... Ultra Sound
14106496 6 3583 1786 +1797 senseinode_lido 0x88857150... Ultra Sound
14105635 0 3469 1683 +1786 blockdaemon 0x88857150... Ultra Sound
14103627 1 3466 1700 +1766 ether.fi 0x82c466b9... Titan Relay
14105970 5 3521 1768 +1753 blockdaemon 0x8527d16c... Ultra Sound
14104380 1 3451 1700 +1751 blockdaemon 0x91b123d8... Ultra Sound
14103200 3 3454 1734 +1720 blockdaemon 0xac23f8cc... BloXroute Max Profit
14103933 1 3415 1700 +1715 coinbase 0x88a53ec4... Aestus
14107520 0 3391 1683 +1708 gateway.fmas_lido 0x850b00e0... BloXroute Max Profit
14103762 1 3395 1700 +1695 nethermind_lido 0x853b0078... Agnostic Gnosis
14101798 4 3436 1751 +1685 ether.fi 0x8527d16c... Ultra Sound
14105688 10 3538 1854 +1684 ether.fi 0x8527d16c... EthGas
14106663 12 3572 1888 +1684 blockdaemon 0x88857150... Ultra Sound
14104423 5 3449 1768 +1681 ether.fi 0x9129eeb4... Ultra Sound
14102656 5 3437 1768 +1669 blockdaemon 0x88a53ec4... BloXroute Regulated
14104057 7 3471 1803 +1668 blockdaemon 0xb4ce6162... Ultra Sound
14107680 1 3357 1700 +1657 stakefish 0x8db2a99d... Flashbots
14104106 0 3333 1683 +1650 blockdaemon 0x8a850621... Titan Relay
14101940 5 3411 1768 +1643 whale_0x8ebd 0xb4ce6162... Ultra Sound
14108196 0 3325 1683 +1642 blockdaemon_lido 0x853b0078... BloXroute Regulated
14105599 5 3406 1768 +1638 ether.fi 0x823e0146... Ultra Sound
14106265 1 3336 1700 +1636 whale_0xfd67 0xb67eaa5e... Aestus
14103277 0 3318 1683 +1635 blockdaemon_lido 0x91b123d8... Ultra Sound
14104785 1 3335 1700 +1635 blockdaemon_lido 0x88857150... Ultra Sound
14108179 0 3310 1683 +1627 blockdaemon_lido 0xb67eaa5e... BloXroute Regulated
14105927 0 3308 1683 +1625 blockdaemon 0x88a53ec4... BloXroute Regulated
14102883 4 3369 1751 +1618 blockdaemon 0xb67eaa5e... BloXroute Max Profit
14103054 1 3315 1700 +1615 csm_operator115_lido 0xb67eaa5e... Titan Relay
14107675 0 3296 1683 +1613 blockdaemon 0xb26f9666... Titan Relay
14108069 9 3449 1837 +1612 blockdaemon_lido 0xb67eaa5e... BloXroute Regulated
14101388 0 3292 1683 +1609 ether.fi 0x9129eeb4... Ultra Sound
14108138 1 3306 1700 +1606 solo_stakers 0x853b0078... Agnostic Gnosis
14105989 10 3453 1854 +1599 whale_0xdc8d 0x88a53ec4... BloXroute Regulated
14102612 10 3450 1854 +1596 blockdaemon_lido 0x856b0004... BloXroute Max Profit
14103083 0 3278 1683 +1595 blockdaemon 0xb26f9666... Titan Relay
14102866 5 3361 1768 +1593 ether.fi 0xb26f9666... BloXroute Max Profit
14106240 6 3378 1786 +1592 blockdaemon 0xb4ce6162... Ultra Sound
14104278 4 3342 1751 +1591 0xa965c911... Ultra Sound
14107290 5 3357 1768 +1589 blockdaemon 0xb26f9666... Titan Relay
14106487 6 3372 1786 +1586 ether.fi 0x853b0078... Ultra Sound
14103428 0 3268 1683 +1585 blockdaemon 0x8a850621... Titan Relay
14104360 2 3302 1717 +1585 blockdaemon 0x88a53ec4... BloXroute Regulated
14103625 0 3266 1683 +1583 blockdaemon 0x856b0004... Ultra Sound
14108082 6 3364 1786 +1578 nethermind_lido 0xb26f9666... Aestus
14105148 10 3432 1854 +1578 whale_0x8ebd 0xb72cae2f... Ultra Sound
14102262 0 3258 1683 +1575 blockdaemon 0x8527d16c... Ultra Sound
14106006 5 3343 1768 +1575 blockdaemon 0x856b0004... Ultra Sound
14102382 5 3343 1768 +1575 blockdaemon 0x8527d16c... Ultra Sound
14104048 0 3254 1683 +1571 coinbase Local Local
14103222 1 3269 1700 +1569 blockdaemon_lido 0xb67eaa5e... BloXroute Max Profit
14103679 0 3249 1683 +1566 blockdaemon 0x80ad903b... BloXroute Max Profit
14106565 11 3437 1871 +1566 nethermind_lido 0xb26f9666... Aestus
14105498 11 3431 1871 +1560 blockdaemon 0x88a53ec4... BloXroute Max Profit
14105585 7 3360 1803 +1557 blockdaemon 0x850b00e0... BloXroute Max Profit
14103498 6 3342 1786 +1556 whale_0xdc8d 0x853b0078... Ultra Sound
14104171 9 3391 1837 +1554 blockdaemon_lido 0x88a53ec4... BloXroute Max Profit
14107325 11 3421 1871 +1550 blockdaemon_lido 0x853b0078... Ultra Sound
14104592 0 3227 1683 +1544 whale_0x8ebd 0x8db2a99d... Ultra Sound
14105214 1 3244 1700 +1544 whale_0x8ebd 0xb7c5e609... BloXroute Max Profit
14107365 6 3326 1786 +1540 gateway.fmas_lido 0xb67eaa5e... BloXroute Max Profit
14108186 3 3272 1734 +1538 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14102675 7 3331 1803 +1528 kiln 0x88a53ec4... BloXroute Regulated
14103797 1 3223 1700 +1523 blockdaemon_lido 0x88857150... Ultra Sound
14104067 0 3202 1683 +1519 blockdaemon 0x9129eeb4... Ultra Sound
14105240 11 3388 1871 +1517 blockdaemon 0x8a850621... BloXroute Regulated
14106451 17 3489 1974 +1515 blockdaemon 0x88a53ec4... BloXroute Max Profit
14104654 0 3198 1683 +1515 blockdaemon_lido 0x850b00e0... BloXroute Max Profit
14105543 12 3402 1888 +1514 kraken 0xb26f9666... EthGas
14105106 0 3193 1683 +1510 blockdaemon_lido 0xb26f9666... Titan Relay
14101922 5 3274 1768 +1506 p2porg 0x88a53ec4... BloXroute Max Profit
14101302 1 3202 1700 +1502 gateway.fmas_lido 0x856b0004... Aestus
14104261 0 3182 1683 +1499 blockdaemon 0xb26f9666... Titan Relay
14105372 3 3232 1734 +1498 whale_0xfd67 0xac23f8cc... Aestus
14102965 6 3282 1786 +1496 whale_0x8ebd 0x857b0038... Ultra Sound
14103558 0 3179 1683 +1496 p2porg 0x853b0078... Titan Relay
14105238 8 3315 1820 +1495 p2porg 0xb67eaa5e... BloXroute Max Profit
14102176 0 3176 1683 +1493 senseinode_lido 0xa0366397... Flashbots
14105903 2 3209 1717 +1492 blockdaemon 0x88a53ec4... BloXroute Max Profit
14104734 5 3257 1768 +1489 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
14101752 6 3274 1786 +1488 kiln 0xb26f9666... BloXroute Regulated
14104347 1 3187 1700 +1487 gateway.fmas_lido 0xb67eaa5e... BloXroute Regulated
14108260 13 3392 1905 +1487 nethermind_lido 0xb26f9666... Aestus
14107362 1 3185 1700 +1485 p2porg 0x8527d16c... Ultra Sound
14106844 5 3253 1768 +1485 blockdaemon_lido 0x8db2a99d... Ultra Sound
14106637 0 3167 1683 +1484 coinbase 0xac23f8cc... Aestus
14102042 1 3184 1700 +1484 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
14101231 1 3179 1700 +1479 blockdaemon 0x9129eeb4... Ultra Sound
14101808 0 3161 1683 +1478 blockdaemon 0x856b0004... BloXroute Max Profit
14104639 2 3194 1717 +1477 gateway.fmas_lido 0xb67eaa5e... BloXroute Max Profit
14101590 1 3176 1700 +1476 gateway.fmas_lido 0x85fb0503... BloXroute Max Profit
14104590 0 3158 1683 +1475 revolut 0x9129eeb4... Ultra Sound
14107090 4 3224 1751 +1473 kiln 0xb67eaa5e... BloXroute Max Profit
14107534 0 3153 1683 +1470 blockdaemon_lido 0x88857150... Ultra Sound
14105410 0 3150 1683 +1467 blockdaemon_lido 0x850b00e0... BloXroute Max Profit
14105991 3 3201 1734 +1467 revolut 0x88510a78... Ultra Sound
14101576 9 3303 1837 +1466 blockdaemon 0xac23f8cc... BloXroute Max Profit
14105679 6 3249 1786 +1463 blockdaemon_lido 0x88a53ec4... BloXroute Max Profit
14105118 0 3145 1683 +1462 whale_0x8ebd 0x88857150... Ultra Sound
14103460 0 3144 1683 +1461 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14106720 0 3144 1683 +1461 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14107629 1 3161 1700 +1461 whale_0xfd67 0x8527d16c... Ultra Sound
14103698 1 3159 1700 +1459 gateway.fmas_lido 0x853b0078... Agnostic Gnosis
14106618 0 3140 1683 +1457 gateway.fmas_lido 0x823e0146... Flashbots
14105884 5 3222 1768 +1454 gateway.fmas_lido 0x88a53ec4... BloXroute Max Profit
14103301 6 3239 1786 +1453 p2porg 0xb67eaa5e... BloXroute Max Profit
14108204 11 3324 1871 +1453 luno 0x853b0078... BloXroute Max Profit
14107883 0 3135 1683 +1452 p2porg 0x88a53ec4... BloXroute Max Profit
14104325 0 3134 1683 +1451 revolut 0xb26f9666... Titan Relay
14102778 6 3235 1786 +1449 coinbase Local Local
14104517 2 3166 1717 +1449 p2porg 0x856b0004... Ultra Sound
14105016 3 3182 1734 +1448 p2porg 0xb67eaa5e... BloXroute Max Profit
14105936 6 3233 1786 +1447 blockdaemon_lido 0xb26f9666... Titan Relay
14102773 0 3129 1683 +1446 revolut 0x83cae7e5... Titan Relay
14104995 1 3146 1700 +1446 p2porg 0x9129eeb4... Agnostic Gnosis
14106790 5 3213 1768 +1445 whale_0x4b5e 0x850b00e0... Ultra Sound
14105417 6 3229 1786 +1443 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
14107154 7 3246 1803 +1443 everstake 0x8527d16c... Ultra Sound
14106751 1 3143 1700 +1443 0x850b00e0... BloXroute Max Profit
14103068 0 3125 1683 +1442 p2porg 0xb67eaa5e... BloXroute Max Profit
14107041 1 3141 1700 +1441 gateway.fmas_lido 0x8527d16c... Ultra Sound
14101395 2 3158 1717 +1441 gateway.fmas_lido 0x85fb0503... Aestus
14108007 1 3140 1700 +1440 0xb26f9666... Aestus
14106517 6 3222 1786 +1436 blockdaemon 0xb26f9666... Titan Relay
14105395 0 3119 1683 +1436 Local Local
14106477 8 3255 1820 +1435 whale_0x8ebd 0x853b0078... Agnostic Gnosis
14107264 8 3254 1820 +1434 0xb26f9666... BloXroute Max Profit
14108188 5 3202 1768 +1434 whale_0x8914 0xb67eaa5e... Aestus
14104763 6 3218 1786 +1432 kiln 0x850b00e0... Flashbots
14105572 10 3286 1854 +1432 gateway.fmas_lido 0xb67eaa5e... BloXroute Max Profit
14104890 0 3114 1683 +1431 p2porg 0x9129eeb4... Agnostic Gnosis
14104930 3 3163 1734 +1429 gateway.fmas_lido 0xb67eaa5e... BloXroute Max Profit
14107599 5 3195 1768 +1427 whale_0xfd67 0x88857150... Ultra Sound
14102158 6 3212 1786 +1426 0xac23f8cc... BloXroute Max Profit
14105242 1 3122 1700 +1422 p2porg 0x850b00e0... BloXroute Regulated
14105845 3 3156 1734 +1422 gateway.fmas_lido 0x88857150... Ultra Sound
14103849 1 3121 1700 +1421 blockdaemon 0x856b0004... Ultra Sound
14101603 0 3102 1683 +1419 whale_0xfd67 0x85fb0503... BloXroute Regulated
14106493 10 3273 1854 +1419 whale_0x8ebd 0xac23f8cc... BloXroute Max Profit
14102959 11 3288 1871 +1417 kiln 0xb67eaa5e... BloXroute Max Profit
14103592 2 3134 1717 +1417 p2porg 0x88a53ec4... BloXroute Max Profit
14105026 0 3098 1683 +1415 coinbase 0x88a53ec4... BloXroute Max Profit
14106771 1 3112 1700 +1412 whale_0x8ebd 0x9129eeb4... Agnostic Gnosis
14106785 0 3094 1683 +1411 gateway.fmas_lido 0x823e0146... Ultra Sound
14108176 1 3111 1700 +1411 coinbase 0x88a53ec4... BloXroute Max Profit
14101224 1 3110 1700 +1410 coinbase 0x88a53ec4... BloXroute Regulated
14105602 5 3177 1768 +1409 bitstamp 0x8527d16c... Ultra Sound
14105383 1 3107 1700 +1407 p2porg 0x853b0078... Agnostic Gnosis
14107316 1 3107 1700 +1407 p2porg 0x853b0078... Agnostic Gnosis
14103880 5 3175 1768 +1407 whale_0x8ebd 0x8527d16c... Ultra Sound
14102164 0 3089 1683 +1406 blockdaemon 0xa965c911... Ultra Sound
14102783 1 3106 1700 +1406 p2porg 0x853b0078... Agnostic Gnosis
14102418 4 3154 1751 +1403 whale_0x8ebd 0x857b0038... Ultra Sound
14107412 0 3085 1683 +1402 everstake 0x88857150... Ultra Sound
14104797 2 3119 1717 +1402 0x8527d16c... Ultra Sound
14107803 4 3152 1751 +1401 p2porg 0xb67eaa5e... BloXroute Max Profit
14103671 7 3203 1803 +1400 coinbase Local Local
14105347 0 3083 1683 +1400 figment 0xb26f9666... BloXroute Max Profit
14101620 2 3117 1717 +1400 kiln 0x823e0146... Ultra Sound
14107649 5 3168 1768 +1400 coinbase 0x856b0004... Ultra Sound
14102731 0 3082 1683 +1399 whale_0x8ebd 0xa10f2964... Ultra Sound
14106287 0 3078 1683 +1395 coinbase 0x8527d16c... Ultra Sound
14101404 0 3077 1683 +1394 whale_0x8ebd 0x85fb0503... Aestus
14108041 0 3077 1683 +1394 p2porg 0x851b00b1... BloXroute Max Profit
14107966 0 3076 1683 +1393 gateway.fmas_lido 0x8527d16c... Ultra Sound
14106532 0 3075 1683 +1392 p2porg 0x850b00e0... Flashbots
14102752 0 3075 1683 +1392 coinbase 0xb26f9666... BloXroute Max Profit
14108315 7 3193 1803 +1390 blockdaemon 0x8527d16c... Ultra Sound
14104648 1 3089 1700 +1389 coinbase 0x850b00e0... BloXroute Max Profit
14102423 0 3070 1683 +1387 blockdaemon 0xb67eaa5e... BloXroute Regulated
14104223 5 3155 1768 +1387 blockdaemon_lido 0x850b00e0... Ultra Sound
14106449 0 3068 1683 +1385 nethermind_lido 0xb26f9666... Aestus
14104513 1 3085 1700 +1385 stader 0x850b00e0... BloXroute Max Profit
14106804 5 3153 1768 +1385 coinbase 0x9129eeb4... Ultra Sound
14103905 2 3101 1717 +1384 p2porg 0x88a53ec4... BloXroute Regulated
14104254 0 3066 1683 +1383 figment 0xb26f9666... Titan Relay
14104049 0 3066 1683 +1383 p2porg 0xb67eaa5e... BloXroute Regulated
14107756 1 3083 1700 +1383 blockdaemon 0x823e0146... BloXroute Max Profit
14103154 0 3065 1683 +1382 p2porg 0xb26f9666... BloXroute Regulated
14102427 2 3097 1717 +1380 kiln 0x88a53ec4... BloXroute Regulated
14104072 2 3097 1717 +1380 p2porg 0x9129eeb4... Agnostic Gnosis
14103248 10 3232 1854 +1378 blockdaemon 0xb26f9666... Titan Relay
14101228 3 3112 1734 +1378 0x853b0078... Agnostic Gnosis
14103027 1 3077 1700 +1377 p2porg 0x856b0004... Aestus
14107421 11 3247 1871 +1376 gateway.fmas_lido 0x850b00e0... Ultra Sound
14103009 6 3159 1786 +1373 p2porg 0xa965c911... Ultra Sound
14105553 7 3176 1803 +1373 0x850b00e0... BloXroute Max Profit
14102145 0 3056 1683 +1373 p2porg 0x88a53ec4... BloXroute Max Profit
14104458 0 3056 1683 +1373 whale_0xedc6 0x856b0004... Ultra Sound
14104269 1 3073 1700 +1373 coinbase 0x88a53ec4... BloXroute Regulated
14107657 0 3055 1683 +1372 kiln 0x823e0146... Flashbots
14106882 0 3055 1683 +1372 whale_0x6ddb 0xb67eaa5e... BloXroute Regulated
14102480 1 3071 1700 +1371 coinbase 0xb7c5e609... BloXroute Max Profit
14103766 5 3139 1768 +1371 0x8527d16c... Ultra Sound
14107456 1 3070 1700 +1370 blockdaemon 0x88a53ec4... BloXroute Regulated
14108174 18 3360 1991 +1369 0x850b00e0... BloXroute Max Profit
14104295 0 3052 1683 +1369 p2porg 0x9129eeb4... Agnostic Gnosis
14101209 1 3069 1700 +1369 whale_0x8ebd 0xb26f9666... Titan Relay
14103215 0 3051 1683 +1368 0x8db2a99d... Flashbots
14104205 0 3051 1683 +1368 0x88a53ec4... BloXroute Regulated
14106213 1 3068 1700 +1368 p2porg 0x853b0078... Agnostic Gnosis
14104662 1 3068 1700 +1368 whale_0xedc6 0x856b0004... Aestus
14103991 0 3049 1683 +1366 kiln 0x823e0146... Aestus
14106089 0 3049 1683 +1366 coinbase 0x805e28e6... BloXroute Max Profit
14101783 1 3066 1700 +1366 p2porg 0xb26f9666... Titan Relay
14103761 5 3134 1768 +1366 coinbase 0xb26f9666... Titan Relay
14107190 5 3132 1768 +1364 coinbase 0xb26f9666... BloXroute Max Profit
14104949 0 3046 1683 +1363 coinbase 0xb67eaa5e... BloXroute Max Profit
14105904 0 3046 1683 +1363 coinbase 0x8527d16c... Ultra Sound
14106209 10 3217 1854 +1363 gateway.fmas_lido 0x8db2a99d... Flashbots
14104922 5 3131 1768 +1363 coinbase 0xb26f9666... Aestus
14103355 0 3045 1683 +1362 p2porg 0xb26f9666... Titan Relay
14107043 1 3062 1700 +1362 p2porg 0x853b0078... Agnostic Gnosis
14108206 21 3403 2042 +1361 gateway.fmas_lido 0xb67eaa5e... BloXroute Max Profit
14103847 5 3129 1768 +1361 p2porg 0xb67eaa5e... Ultra Sound
14104958 0 3043 1683 +1360 p2porg 0xb26f9666... Titan Relay
14102489 1 3058 1700 +1358 whale_0xedc6 0xb67eaa5e... Aestus
14104664 5 3126 1768 +1358 gateway.fmas_lido 0x8527d16c... Ultra Sound
14105852 8 3177 1820 +1357 gateway.fmas_lido 0x853b0078... Ultra Sound
14101421 6 3141 1786 +1355 whale_0x8ebd 0x9129eeb4... Agnostic Gnosis
14102559 0 3038 1683 +1355 coinbase 0x805e28e6... BloXroute Max Profit
14102688 0 3037 1683 +1354 ether.fi 0xb67eaa5e... BloXroute Max Profit
14107206 1 3054 1700 +1354 p2porg 0xac23f8cc... Aestus
14103093 10 3207 1854 +1353 blockdaemon 0xb26f9666... Titan Relay
14104683 7 3155 1803 +1352 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
14106348 0 3034 1683 +1351 p2porg 0xb26f9666... BloXroute Max Profit
14102566 0 3032 1683 +1349 whale_0xedc6 0xb26f9666... BloXroute Max Profit
14104294 5 3117 1768 +1349 p2porg 0x856b0004... Ultra Sound
14108018 0 3031 1683 +1348 p2porg 0xb26f9666... BloXroute Regulated
14101788 5 3116 1768 +1348 whale_0x8ebd 0x85fb0503... BloXroute Max Profit
14108177 0 3029 1683 +1346 whale_0x8ebd 0x853b0078... Agnostic Gnosis
14104670 0 3027 1683 +1344 whale_0x8ebd 0x853b0078... Agnostic Gnosis
14102196 1 3044 1700 +1344 whale_0x8ebd 0x8db2a99d... Flashbots
14103998 0 3025 1683 +1342 coinbase 0xb26f9666... Titan Relay
14107656 0 3025 1683 +1342 whale_0xedc6 0x823e0146... Flashbots
14108304 2 3059 1717 +1342 whale_0x8914 0x88a53ec4... BloXroute Max Profit
14101372 6 3127 1786 +1341 p2porg 0x853b0078... BloXroute Regulated
14107519 0 3023 1683 +1340 p2porg 0xb26f9666... BloXroute Max Profit
14106516 3 3074 1734 +1340 p2porg 0x88857150... Ultra Sound
14104433 0 3022 1683 +1339 coinbase 0xb26f9666... Titan Relay
14105998 0 3021 1683 +1338 coinbase 0xb26f9666... Titan Relay
14102696 0 3021 1683 +1338 kiln 0x88857150... Ultra Sound
14102597 0 3020 1683 +1337 whale_0x8ebd 0x805e28e6... BloXroute Max Profit
14104944 0 3019 1683 +1336 kiln 0xb67eaa5e... BloXroute Regulated
14107048 0 3019 1683 +1336 p2porg 0xb26f9666... BloXroute Max Profit
14105817 2 3053 1717 +1336 whale_0x8ebd 0x8db2a99d... Flashbots
14104674 5 3104 1768 +1336 whale_0x8ebd 0x9129eeb4... Agnostic Gnosis
14102992 8 3153 1820 +1333 p2porg 0xac23f8cc... Ultra Sound
14103525 5 3101 1768 +1333 coinbase 0x8527d16c... Ultra Sound
14106614 0 3014 1683 +1331 coinbase 0x8527d16c... Ultra Sound
14103207 1 3029 1700 +1329 coinbase 0x9129eeb4... Agnostic Gnosis
14106638 11 3199 1871 +1328 whale_0x8914 0xb67eaa5e... BloXroute Max Profit
14103854 3 3062 1734 +1328 coinbase 0x9129eeb4... Agnostic Gnosis
14103367 1 3027 1700 +1327 kiln 0x9129eeb4... Agnostic Gnosis
14103136 1 3027 1700 +1327 everstake 0x853b0078... Agnostic Gnosis
14107185 5 3095 1768 +1327 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14102241 6 3112 1786 +1326 ether.fi 0xb26f9666... EthGas
14102482 0 3009 1683 +1326 coinbase 0x853b0078... Ultra Sound
14103568 0 3009 1683 +1326 solo_stakers 0x823e0146... Flashbots
14105686 0 3009 1683 +1326 kiln 0x853b0078... BloXroute Max Profit
14103071 5 3094 1768 +1326 0xb67eaa5e... BloXroute Max Profit
14106694 0 3007 1683 +1324 whale_0x8ebd 0x8db2a99d... BloXroute Max Profit
14106520 1 3024 1700 +1324 coinbase 0x8db2a99d... Flashbots
14103003 6 3109 1786 +1323 coinbase 0x8527d16c... Ultra Sound
14101356 5 3090 1768 +1322 whale_0xedc6 0xb26f9666... BloXroute Max Profit
14101985 0 3003 1683 +1320 coinbase 0x88a53ec4... BloXroute Regulated
14105464 0 3002 1683 +1319 p2porg 0xb26f9666... Titan Relay
14103782 0 3001 1683 +1318 whale_0x8ebd 0xb26f9666... BloXroute Max Profit
14104082 0 3000 1683 +1317 solo_stakers 0x823e0146... BloXroute Max Profit
14103363 6 3101 1786 +1315 p2porg 0xac23f8cc... Flashbots
14102944 0 2998 1683 +1315 coinbase 0x8527d16c... Ultra Sound
14106954 3 3048 1734 +1314 p2porg 0xb67eaa5e... BloXroute Max Profit
14103836 0 2996 1683 +1313 coinbase 0x88a53ec4... BloXroute Max Profit
14107563 1 3013 1700 +1313 kiln 0xb26f9666... Aestus
14103017 5 3081 1768 +1313 kiln 0x9129eeb4... Ultra Sound
14106150 0 2994 1683 +1311 coinbase 0xb26f9666... Aestus
14102847 1 3009 1700 +1309 everstake 0x8527d16c... Ultra Sound
14105028 3 3043 1734 +1309 kiln 0x88a53ec4... BloXroute Regulated
14104090 0 2991 1683 +1308 nethermind_lido 0xb26f9666... Aestus
14106174 1 3008 1700 +1308 kiln 0x853b0078... Agnostic Gnosis
14101992 6 3093 1786 +1307 everstake 0xb26f9666... Titan Relay
14105422 9 3144 1837 +1307 whale_0xfd67 0x856b0004... Agnostic Gnosis
14104703 0 2990 1683 +1307 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
14102017 1 3007 1700 +1307 everstake 0xb26f9666... Aestus
14104113 6 3092 1786 +1306 whale_0xedc6 0xac23f8cc... Ultra Sound
14106714 5 3074 1768 +1306 kiln 0xb67eaa5e... BloXroute Max Profit
14101951 6 3091 1786 +1305 coinbase 0xb26f9666... BloXroute Regulated
14105038 0 2988 1683 +1305 kiln 0x853b0078... Agnostic Gnosis
14102972 0 2987 1683 +1304 0x853b0078... Agnostic Gnosis
14107165 5 3071 1768 +1303 coinbase 0x9129eeb4... Agnostic Gnosis
14104988 0 2985 1683 +1302 kiln 0xb26f9666... Aestus
14105952 0 2985 1683 +1302 whale_0x8ebd 0x99cba505... Flashbots
14104210 1 3002 1700 +1302 kiln 0xb26f9666... Aestus
14104019 2 3019 1717 +1302 whale_0x8ebd 0xb26f9666... Titan Relay
14108277 7 3103 1803 +1300 p2porg 0x8db2a99d... Flashbots
14106534 5 3068 1768 +1300 whale_0x7275 0xb67eaa5e... BloXroute Max Profit
14107056 5 3066 1768 +1298 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14105252 0 2980 1683 +1297 coinbase 0x805e28e6... BloXroute Max Profit
14101488 0 2980 1683 +1297 whale_0x8ebd 0x85fb0503... BloXroute Max Profit
14102943 10 3151 1854 +1297 p2porg 0x8527d16c... Ultra Sound
14105801 2 3014 1717 +1297 coinbase 0x856b0004... Aestus
14102917 5 3065 1768 +1297 kiln 0x88a53ec4... BloXroute Max Profit
14105603 0 2979 1683 +1296 coinbase 0x853b0078... Agnostic Gnosis
14106523 0 2979 1683 +1296 kiln 0xb26f9666... Aestus
14103844 0 2978 1683 +1295 stader 0xb26f9666... Titan Relay
14101728 0 2978 1683 +1295 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
14102299 3 3029 1734 +1295 kiln 0xb67eaa5e... BloXroute Max Profit
14102872 6 3079 1786 +1293 0xb26f9666... BloXroute Max Profit
14103035 2 3010 1717 +1293 kiln 0x856b0004... Aestus
14101848 5 3061 1768 +1293 p2porg 0x85fb0503... BloXroute Max Profit
14101725 14 3214 1922 +1292 whale_0xfd67 0x88a53ec4... BloXroute Max Profit
14107640 6 3076 1786 +1290 coinbase 0x8527d16c... Ultra Sound
14101695 6 3075 1786 +1289 p2porg 0x85fb0503... Aestus
14105421 2 3006 1717 +1289 coinbase 0x853b0078... Agnostic Gnosis
14106279 7 3090 1803 +1287 kiln 0x9129eeb4... Ultra Sound
14107061 1 2987 1700 +1287 kiln 0xb67eaa5e... BloXroute Regulated
14106740 0 2969 1683 +1286 coinbase 0xb26f9666... BloXroute Regulated
14104720 1 2986 1700 +1286 everstake 0xb26f9666... Titan Relay
14101873 0 2967 1683 +1284 nethermind_lido 0xb26f9666... Aestus
14103065 7 3086 1803 +1283 kiln 0x853b0078... BloXroute Max Profit
14106167 9 3120 1837 +1283 p2porg 0x853b0078... Agnostic Gnosis
14105198 0 2966 1683 +1283 kiln 0x9129eeb4... Agnostic Gnosis
14106409 1 2983 1700 +1283 whale_0x8ebd 0x853b0078... Agnostic Gnosis
14104635 2 2999 1717 +1282 solo_stakers 0xb26f9666... Titan Relay
14102983 7 3084 1803 +1281 kiln 0x856b0004... Aestus
14107933 0 2964 1683 +1281 kiln 0x88a53ec4... BloXroute Regulated
14103554 3 3015 1734 +1281 coinbase 0xb26f9666... BloXroute Max Profit
14105116 0 2963 1683 +1280 everstake 0x823e0146... Flashbots
14105577 0 2963 1683 +1280 kiln 0xb26f9666... Titan Relay
14108224 9 3116 1837 +1279 whale_0x8ebd 0x8db2a99d... Ultra Sound
14107307 0 2962 1683 +1279 whale_0x8ee5 0xb26f9666... Aestus
14106769 10 3133 1854 +1279 p2porg 0xb26f9666... Titan Relay
14104018 0 2961 1683 +1278 whale_0x8ebd 0x853b0078... Agnostic Gnosis
14102380 1 2978 1700 +1278 whale_0x8ebd 0x853b0078... Agnostic Gnosis
14105517 9 3114 1837 +1277 whale_0x8ebd 0xb4ce6162... Ultra Sound
14107748 0 2960 1683 +1277 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14105262 0 2958 1683 +1275 coinbase 0xb67eaa5e... BloXroute Max Profit
14104954 1 2975 1700 +1275 kiln 0xb26f9666... BloXroute Regulated
14102969 1 2974 1700 +1274 kiln 0x856b0004... Agnostic Gnosis
14104075 1 2974 1700 +1274 kiln 0xb26f9666... Titan Relay
14107632 1 2973 1700 +1273 whale_0x8ebd 0x823e0146... Flashbots
14103522 3 3007 1734 +1273 nethermind_lido 0x856b0004... Agnostic Gnosis
14103133 4 3024 1751 +1273 kiln 0x856b0004... Aestus
14106319 5 3041 1768 +1273 whale_0x8ebd 0x853b0078... Agnostic Gnosis
14103143 0 2954 1683 +1271 whale_0x8ebd 0x856b0004... Aestus
14105096 0 2953 1683 +1270 coinbase 0x853b0078... Agnostic Gnosis
14101906 0 2953 1683 +1270 blockdaemon 0x857b0038... Ultra Sound
14105630 1 2970 1700 +1270 coinbase 0xb26f9666... BloXroute Regulated
14103454 5 3037 1768 +1269 coinbase 0x853b0078... Agnostic Gnosis
14101643 0 2951 1683 +1268 coinbase 0x853b0078... BloXroute Max Profit
14103944 0 2949 1683 +1266 bitstamp 0x88a53ec4... BloXroute Max Profit
14106212 11 3137 1871 +1266 p2porg 0xb26f9666... BloXroute Max Profit
14108363 3 3000 1734 +1266 whale_0x8ebd 0x8527d16c... Ultra Sound
14103449 1 2965 1700 +1265 whale_0x8ebd 0x853b0078... Agnostic Gnosis
14105197 11 3135 1871 +1264 whale_0xedc6 0xb26f9666... BloXroute Max Profit
14104921 5 3032 1768 +1264 0xb7c5e609... BloXroute Max Profit
14108052 3 2997 1734 +1263 solo_stakers 0x850b00e0... BloXroute Regulated
14107236 0 2944 1683 +1261 coinbase 0x856b0004... Aestus
14102106 1 2961 1700 +1261 coinbase 0xb26f9666... BloXroute Max Profit
14106970 5 3029 1768 +1261 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14104739 5 3029 1768 +1261 kiln 0xb26f9666... Aestus
14107472 6 3045 1786 +1259 kiln 0xb67eaa5e... BloXroute Regulated
14105771 0 2941 1683 +1258 kiln 0x853b0078... Agnostic Gnosis
14102178 6 3043 1786 +1257 figment 0xac23f8cc... BloXroute Max Profit
14101562 6 3043 1786 +1257 coinbase 0x856b0004... Aestus
14103696 2 2974 1717 +1257 kiln 0x853b0078... Agnostic Gnosis
14104508 7 3059 1803 +1256 whale_0x8ebd 0x8527d16c... Ultra Sound
14103323 0 2939 1683 +1256 everstake 0xb26f9666... Titan Relay
14101253 0 2939 1683 +1256 kiln 0x853b0078... Agnostic Gnosis
14107891 4 3007 1751 +1256 everstake 0xb26f9666... Titan Relay
14105208 5 3024 1768 +1256 everstake 0xb26f9666... Titan Relay
14104343 6 3041 1786 +1255 kiln 0x88857150... Ultra Sound
14104549 0 2938 1683 +1255 everstake 0xb26f9666... Titan Relay
14107580 1 2955 1700 +1255 whale_0xd9e4 0x823e0146... Aestus
14107707 4 3006 1751 +1255 kiln 0x8db2a99d... BloXroute Max Profit
14105359 21 3296 2042 +1254 whale_0xedc6 0xb26f9666... BloXroute Regulated
14107636 5 3022 1768 +1254 kiln 0xb26f9666... BloXroute Regulated
14101824 9 3090 1837 +1253 coinbase 0x853b0078... Aestus
14108194 10 3107 1854 +1253 0x88a53ec4... BloXroute Max Profit
14105828 1 2953 1700 +1253 coinbase 0xb26f9666... BloXroute Regulated
14107267 5 3021 1768 +1253 kiln 0xb26f9666... Titan Relay
14106379 1 2952 1700 +1252 everstake 0x9129eeb4... Aestus
14103090 0 2934 1683 +1251 coinbase 0x805e28e6... Flashbots
14107315 5 3018 1768 +1250 kiln 0xb26f9666... Titan Relay
14103758 0 2932 1683 +1249 solo_stakers 0x856b0004... Aestus
14102269 5 3017 1768 +1249 everstake 0x88857150... Ultra Sound
14104096 1 2948 1700 +1248 okex 0x8a850621... Titan Relay
14103924 6 3032 1786 +1246 0xb26f9666... BloXroute Regulated
14102505 2 2963 1717 +1246 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14101644 5 3014 1768 +1246 coinbase 0x856b0004... Ultra Sound
14103291 6 3031 1786 +1245 whale_0x8ebd 0x856b0004... Ultra Sound
14106439 0 2928 1683 +1245 coinbase 0xb26f9666... BloXroute Regulated
14108026 3 2979 1734 +1245 everstake 0xb26f9666... Titan Relay
14106726 5 3012 1768 +1244 ether.fi 0xb67eaa5e... BloXroute Max Profit
14103689 0 2926 1683 +1243 whale_0x8ebd 0x853b0078... Aestus
14103049 0 2925 1683 +1242 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14104032 3 2976 1734 +1242 everstake 0x9129eeb4... Agnostic Gnosis
14104973 5 3009 1768 +1241 everstake 0xb67eaa5e... BloXroute Max Profit
14108388 6 3026 1786 +1240 everstake 0xb67eaa5e... BloXroute Max Profit
14104192 7 3043 1803 +1240 coinbase 0xb26f9666... Titan Relay
14102764 0 2921 1683 +1238 solo_stakers Local Local
14105394 4 2989 1751 +1238 everstake 0xb67eaa5e... BloXroute Max Profit
14106552 0 2920 1683 +1237 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14102219 2 2954 1717 +1237 kiln 0xac23f8cc... Flashbots
14105670 0 2919 1683 +1236 kiln 0xac23f8cc... BloXroute Max Profit
14105457 11 3107 1871 +1236 whale_0x8ebd 0x856b0004... Agnostic Gnosis
14105301 2 2953 1717 +1236 whale_0x8ebd 0x8527d16c... Ultra Sound
14106092 0 2918 1683 +1235 kiln 0x856b0004... Aestus
14102594 1 2935 1700 +1235 everstake 0x88a53ec4... BloXroute Regulated
14107997 7 3037 1803 +1234 everstake 0x88a53ec4... BloXroute Regulated
14106498 2 2951 1717 +1234 everstake 0xb26f9666... Aestus
14104835 0 2916 1683 +1233 whale_0x8ebd 0x853b0078... Agnostic Gnosis
14102084 2 2950 1717 +1233 kiln 0x9129eeb4... Agnostic Gnosis
14104512 0 2915 1683 +1232 everstake 0x850b00e0... BloXroute Max Profit
14105628 3 2966 1734 +1232 everstake 0x88a53ec4... BloXroute Max Profit
14103610 5 3000 1768 +1232 kiln 0x88a53ec4... BloXroute Regulated
14107514 6 3015 1786 +1229 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14102502 6 3015 1786 +1229 coinbase 0x8527d16c... Ultra Sound
14102870 1 2929 1700 +1229 coinbase 0xb26f9666... BloXroute Max Profit
14103353 11 3100 1871 +1229 coinbase 0x856b0004... Aestus
14106172 3 2963 1734 +1229 everstake 0x88a53ec4... BloXroute Max Profit
14103365 0 2911 1683 +1228 everstake 0xb26f9666... Titan Relay
14104836 1 2928 1700 +1228 everstake 0x850b00e0... BloXroute Max Profit
14103006 1 2928 1700 +1228 stader 0x853b0078... Agnostic Gnosis
14103125 8 3047 1820 +1227 0x856b0004... Ultra Sound
14101333 0 2910 1683 +1227 kiln 0x85fb0503... Aestus
14101527 1 2926 1700 +1226 kiln 0x85fb0503... BloXroute Max Profit
14106908 6 3010 1786 +1224 everstake 0x853b0078... Agnostic Gnosis
14104613 0 2907 1683 +1224 everstake 0xb26f9666... Titan Relay
14104285 0 2907 1683 +1224 everstake 0xb4ce6162... Ultra Sound
14108116 1 2924 1700 +1224 whale_0x8ebd 0x857b0038... Ultra Sound
14102802 9 3059 1837 +1222 everstake 0x88a53ec4... BloXroute Regulated
14102531 11 3093 1871 +1222 0x9129eeb4... Aestus
14106288 0 2904 1683 +1221 ether.fi 0xb67eaa5e... BloXroute Regulated
14106896 1 2921 1700 +1221 kiln 0x88857150... Ultra Sound
14107871 0 2903 1683 +1220 kiln 0x853b0078... Ultra Sound
14102048 0 2903 1683 +1220 whale_0xdc8d 0xac23f8cc... BloXroute Regulated
14107302 1 2920 1700 +1220 everstake 0x88857150... Ultra Sound
14106325 9 3056 1837 +1219 kiln 0xb26f9666... BloXroute Regulated
14101261 0 2902 1683 +1219 kiln 0x853b0078... Agnostic Gnosis
14102618 1 2919 1700 +1219 kiln 0x853b0078... Agnostic Gnosis
14103121 2 2936 1717 +1219 kiln 0x853b0078... Agnostic Gnosis
14105315 5 2987 1768 +1219 kiln 0x8527d16c... Ultra Sound
14107261 0 2901 1683 +1218 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14103008 0 2901 1683 +1218 solo_stakers Local Local
14101759 3 2951 1734 +1217 everstake 0x9129eeb4... Agnostic Gnosis
14103692 5 2985 1768 +1217 everstake 0xb67eaa5e... BloXroute Max Profit
14103781 0 2898 1683 +1215 everstake 0xb26f9666... Titan Relay
14107311 1 2913 1700 +1213 kiln 0x823e0146... Ultra Sound
14105813 0 2895 1683 +1212 ether.fi 0x88a53ec4... BloXroute Max Profit
14105053 5 2979 1768 +1211 everstake 0xb67eaa5e... BloXroute Max Profit
14108114 7 3013 1803 +1210 bitstamp 0x88a53ec4... BloXroute Max Profit
14102843 0 2893 1683 +1210 whale_0x8ebd 0xb58080ea... BloXroute Max Profit
14104056 5 2978 1768 +1210 kiln 0x8db2a99d... Flashbots
14102706 0 2892 1683 +1209 solo_stakers 0x8a850621... Titan Relay
14106601 5 2977 1768 +1209 kiln 0x853b0078... Agnostic Gnosis
14107464 6 2994 1786 +1208 kiln 0x8db2a99d... Flashbots
14104419 2 2925 1717 +1208 everstake 0xb26f9666... Titan Relay
14107269 12 3096 1888 +1208 kiln 0xb67eaa5e... BloXroute Regulated
14105339 5 2976 1768 +1208 coinbase 0xb67eaa5e... Aestus
14102378 6 2993 1786 +1207 everstake 0xb7c5e609... BloXroute Max Profit
14102681 2 2924 1717 +1207 whale_0x8ebd Local Local
14107231 0 2888 1683 +1205 everstake 0x8527d16c... Ultra Sound
14104568 1 2905 1700 +1205 kiln Local Local
14102960 5 2973 1768 +1205 everstake 0x856b0004... Aestus
14106788 8 3024 1820 +1204 coinbase 0x8db2a99d... Aestus
14108045 0 2887 1683 +1204 coinbase Local Local
14101308 0 2887 1683 +1204 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
14104154 0 2887 1683 +1204 everstake 0x9129eeb4... Agnostic Gnosis
14104905 0 2886 1683 +1203 everstake 0x805e28e6... BloXroute Max Profit
14105750 6 2988 1786 +1202 everstake 0xb67eaa5e... BloXroute Regulated
14105918 0 2884 1683 +1201 everstake 0xb26f9666... Titan Relay
14104395 1 2901 1700 +1201 everstake 0xb26f9666... Titan Relay
14103249 1 2901 1700 +1201 ether.fi 0xb67eaa5e... BloXroute Max Profit
14107382 5 2969 1768 +1201 0xb67eaa5e... BloXroute Max Profit
14107928 6 2986 1786 +1200 whale_0x8ebd 0x8db2a99d... Flashbots
14101727 0 2883 1683 +1200 kiln 0x85fb0503... BloXroute Max Profit
14104805 0 2883 1683 +1200 0x926b7905... Flashbots
14105734 0 2883 1683 +1200 kiln Local Local
14106967 0 2882 1683 +1199 everstake 0x88857150... Ultra Sound
14108099 0 2881 1683 +1198 kiln 0xb26f9666... BloXroute Max Profit
14104341 2 2915 1717 +1198 ether.fi 0xb67eaa5e... BloXroute Max Profit
14106907 5 2966 1768 +1198 kiln 0xb26f9666... BloXroute Max Profit
14105108 2 2914 1717 +1197 kiln 0x853b0078... Agnostic Gnosis
14102393 3 2931 1734 +1197 everstake 0xac23f8cc... Flashbots
14103910 6 2982 1786 +1196 nethermind_lido 0x856b0004... Aestus
14103230 5 2964 1768 +1196 kiln 0x85fb0503... Aestus
14105675 1 2895 1700 +1195 everstake 0xac23f8cc... Flashbots
14101784 11 3066 1871 +1195 kiln Local Local
14104820 3 2929 1734 +1195 everstake 0x850b00e0... BloXroute Max Profit
14104004 0 2877 1683 +1194 everstake 0xb26f9666... Aestus
14101575 1 2893 1700 +1193 solo_stakers 0x853b0078... Agnostic Gnosis
14108203 1 2893 1700 +1193 stader 0x88a53ec4... BloXroute Regulated
14101323 7 2995 1803 +1192 kiln Local Local
14108065 0 2874 1683 +1191 nethermind_lido 0xb26f9666... Aestus
14107035 3 2925 1734 +1191 kiln 0xb26f9666... BloXroute Regulated
14103540 5 2959 1768 +1191 solo_stakers 0x853b0078... Agnostic Gnosis
14105754 0 2873 1683 +1190 bitstamp 0x88a53ec4... BloXroute Max Profit
14102103 1 2890 1700 +1190 everstake 0xb26f9666... Titan Relay
14104839 1 2890 1700 +1190 everstake 0x853b0078... Agnostic Gnosis
14108008 4 2941 1751 +1190 0x823e0146... BloXroute Max Profit
14107403 6 2975 1786 +1189 kiln 0x853b0078... Agnostic Gnosis
14102215 0 2872 1683 +1189 kiln 0xb26f9666... BloXroute Max Profit
14103357 1 2889 1700 +1189 0xb26f9666... Aestus
14102275 5 2957 1768 +1189 solo_stakers 0xaceaea9f... Aestus
14106571 6 2974 1786 +1188 ether.fi 0x88a53ec4... BloXroute Max Profit
14101702 1 2888 1700 +1188 everstake 0xb26f9666... Titan Relay
14106628 0 2870 1683 +1187 everstake 0x8527d16c... Ultra Sound
14102884 5 2955 1768 +1187 everstake 0xb67eaa5e... BloXroute Max Profit
14105076 0 2868 1683 +1185 everstake 0x88a53ec4... BloXroute Regulated
14108034 0 2868 1683 +1185 everstake 0xb26f9666... Titan Relay
14108318 0 2867 1683 +1184 everstake 0xb26f9666... Titan Relay
14104414 0 2867 1683 +1184 stader 0xb26f9666... Titan Relay
14101271 6 2968 1786 +1182 everstake 0x9129eeb4... Agnostic Gnosis
14105388 9 3019 1837 +1182 kiln 0x853b0078... Agnostic Gnosis
14104186 0 2865 1683 +1182 everstake 0x8db2a99d... Flashbots
14106880 5 2950 1768 +1182 stader 0xb26f9666... Titan Relay
14101555 6 2966 1786 +1180 everstake 0xb26f9666... Titan Relay
14106165 1 2879 1700 +1179 bitstamp 0xb26f9666... Titan Relay
14101614 0 2861 1683 +1178 everstake 0x823e0146... BloXroute Max Profit
14103570 1 2878 1700 +1178 ether.fi 0xb67eaa5e... BloXroute Max Profit
14102611 1 2878 1700 +1178 ether.fi 0x88a53ec4... BloXroute Max Profit
14101661 1 2878 1700 +1178 whale_0x8ebd 0x857b0038... Ultra Sound
14105627 13 3082 1905 +1177 coinbase 0x853b0078... Agnostic Gnosis
14101892 6 2962 1786 +1176 everstake 0xb26f9666... Titan Relay
14106984 0 2859 1683 +1176 everstake 0xb67eaa5e... BloXroute Max Profit
14105468 1 2876 1700 +1176 everstake 0x8db2a99d... Aestus
14107762 1 2876 1700 +1176 kiln 0x850b00e0... BloXroute Max Profit
14102359 2 2893 1717 +1176 kiln 0x853b0078... Agnostic Gnosis
14102938 5 2944 1768 +1176 kiln 0x853b0078... Agnostic Gnosis
14104894 6 2961 1786 +1175 everstake 0x8db2a99d... BloXroute Max Profit
14101776 5 2943 1768 +1175 everstake 0x85fb0503... Aestus
14107207 0 2857 1683 +1174 everstake 0x853b0078... Agnostic Gnosis
14104339 10 3028 1854 +1174 kiln 0x9129eeb4... Agnostic Gnosis
14102952 1 2874 1700 +1174 everstake 0x8527d16c... Ultra Sound
14101376 0 2856 1683 +1173 kraken 0xa0366397... Flashbots
14106688 1 2873 1700 +1173 0x853b0078... Agnostic Gnosis
14106862 1 2873 1700 +1173 ether.fi 0xb67eaa5e... BloXroute Max Profit
14107416 11 3044 1871 +1173 coinbase 0x853b0078... Aestus
Total anomalies: 553

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