Tue, Apr 14, 2026

Propagation anomalies - 2026-04-14

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-14' AND slot_start_date_time < '2026-04-14'::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-14' AND slot_start_date_time < '2026-04-14'::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-14' AND slot_start_date_time < '2026-04-14'::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-14' AND slot_start_date_time < '2026-04-14'::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-14' AND slot_start_date_time < '2026-04-14'::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-14' AND slot_start_date_time < '2026-04-14'::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-14' AND slot_start_date_time < '2026-04-14'::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-14' AND slot_start_date_time < '2026-04-14'::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,190
MEV blocks: 6,748 (93.9%)
Local blocks: 442 (6.1%)

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 = 1666.5 + 20.77 × blob_count (R² = 0.016)
Residual σ = 588.0ms
Anomalies (>2σ slow): 575 (8.0%)
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
14114033 0 4766 1667 +3099 whale_0x2f38 Local Local
14111680 0 4458 1667 +2791 upbit Local Local
14110936 0 4314 1667 +2647 whale_0x8ebd Local Local
14112145 0 3996 1667 +2329 kraken Local Local
14115035 1 3717 1687 +2030 myetherwallet 0x88a53ec4... BloXroute Regulated
14112352 13 3925 1937 +1988 stakefish 0x88857150... Ultra Sound
14112039 0 3630 1667 +1963 ether.fi 0x8db2a99d... Aestus
14109610 0 3595 1667 +1928 ether.fi 0xb26f9666... Aestus
14114915 6 3688 1791 +1897 kraken 0xb26f9666... Titan Relay
14113553 5 3663 1770 +1893 blockdaemon 0xb4ce6162... Ultra Sound
14110109 11 3773 1895 +1878 coinbase 0xac23f8cc... Aestus
14114556 5 3642 1770 +1872 luno 0x88857150... Ultra Sound
14109749 1 3511 1687 +1824 blockdaemon_lido 0x8527d16c... Ultra Sound
14114304 5 3578 1770 +1808 gateway.fmas_lido 0xb67eaa5e... BloXroute Max Profit
14111134 1 3481 1687 +1794 0x823e0146... Aestus
14111051 5 3564 1770 +1794 blockdaemon 0x8a850621... Titan Relay
14113034 5 3529 1770 +1759 ether.fi 0xb26f9666... Titan Relay
14109801 1 3425 1687 +1738 revolut 0x850b00e0... BloXroute Max Profit
14113896 0 3399 1667 +1732 blockdaemon 0x88857150... Ultra Sound
14109416 1 3412 1687 +1725 coinbase 0xac23f8cc... Aestus
14114598 0 3378 1667 +1711 luno 0xb26f9666... Titan Relay
14111074 5 3481 1770 +1711 blockdaemon 0x88857150... Ultra Sound
14115350 0 3366 1667 +1699 ether.fi 0x8db2a99d... Flashbots
14111105 0 3353 1667 +1686 whale_0xdc8d 0x88857150... Ultra Sound
14112731 1 3373 1687 +1686 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
14114699 0 3341 1667 +1674 p2porg 0x851b00b1... Ultra Sound
14111108 0 3336 1667 +1669 blockdaemon 0xb67eaa5e... BloXroute Regulated
14113045 1 3349 1687 +1662 luno 0xb26f9666... Titan Relay
14110110 1 3348 1687 +1661 blockdaemon_lido 0xb67eaa5e... BloXroute Regulated
14114207 0 3327 1667 +1660 whale_0x8ebd 0x8527d16c... Ultra Sound
14114874 0 3325 1667 +1658 blockdaemon 0xb26f9666... Titan Relay
14114240 5 3423 1770 +1653 revolut 0x850b00e0... BloXroute Regulated
14113466 0 3311 1667 +1644 whale_0x8914 0x88857150... Ultra Sound
14111697 0 3302 1667 +1635 luno 0x851b00b1... BloXroute Max Profit
14114870 0 3302 1667 +1635 solo_stakers 0x851b00b1... BloXroute Max Profit
14112500 0 3297 1667 +1630 blockdaemon 0xb67eaa5e... BloXroute Max Profit
14114351 5 3397 1770 +1627 blockdaemon_lido 0x850b00e0... BloXroute Regulated
14111382 0 3292 1667 +1625 blockdaemon_lido 0xb67eaa5e... BloXroute Regulated
14115523 1 3311 1687 +1624 whale_0x8914 0xb67eaa5e... Aestus
14113708 0 3285 1667 +1618 blockdaemon 0x8527d16c... Ultra Sound
14112040 5 3388 1770 +1618 whale_0xdc8d 0xb26f9666... Titan Relay
14115395 0 3284 1667 +1617 0x8527d16c... Ultra Sound
14109662 5 3387 1770 +1617 coinbase 0x88a53ec4... Aestus
14113064 7 3428 1812 +1616 blockdaemon_lido 0x88a53ec4... BloXroute Regulated
14110022 2 3322 1708 +1614 blockdaemon 0x8db2a99d... BloXroute Max Profit
14115311 6 3399 1791 +1608 p2porg 0x857b0038... BloXroute Max Profit
14111101 8 3439 1833 +1606 blockdaemon 0x8527d16c... Ultra Sound
14112038 3 3335 1729 +1606 ether.fi 0x856b0004... Ultra Sound
14110049 7 3418 1812 +1606 blockdaemon 0xb67eaa5e... BloXroute Regulated
14108678 0 3272 1667 +1605 gateway.fmas_lido 0x851b00b1... BloXroute Max Profit
14109078 3 3328 1729 +1599 revolut 0x850b00e0... BloXroute Regulated
14111693 8 3431 1833 +1598 blockdaemon_lido 0x850b00e0... BloXroute Max Profit
14114499 8 3430 1833 +1597 blockdaemon 0x856b0004... BloXroute Max Profit
14114126 6 3388 1791 +1597 blockdaemon 0x8527d16c... Ultra Sound
14109567 1 3284 1687 +1597 blockdaemon_lido 0x8db2a99d... BloXroute Regulated
14111059 0 3262 1667 +1595 solo_stakers 0x851b00b1... BloXroute Max Profit
14113949 6 3386 1791 +1595 whale_0xdc8d 0xb26f9666... Titan Relay
14110178 6 3379 1791 +1588 lido Local Local
14111431 5 3355 1770 +1585 blockdaemon 0x8db2a99d... BloXroute Max Profit
14109278 2 3291 1708 +1583 0x8db2a99d... BloXroute Regulated
14111545 5 3353 1770 +1583 blockdaemon 0xb67eaa5e... BloXroute Regulated
14114295 1 3268 1687 +1581 whale_0x8ebd 0x8527d16c... Ultra Sound
14111532 0 3243 1667 +1576 whale_0xfd67 0x851b00b1... Flashbots
14114521 1 3263 1687 +1576 whale_0xdc8d 0x8db2a99d... Ultra Sound
14115023 5 3346 1770 +1576 gateway.fmas_lido 0x850b00e0... BloXroute Max Profit
14113304 0 3237 1667 +1570 whale_0x8914 0x88857150... Ultra Sound
14115521 0 3233 1667 +1566 blockdaemon_lido Local Local
14113444 4 3315 1750 +1565 blockdaemon_lido 0x8527d16c... Ultra Sound
14109351 1 3251 1687 +1564 luno 0x8527d16c... Ultra Sound
14112128 4 3312 1750 +1562 p2porg 0x850b00e0... BloXroute Regulated
14112888 7 3374 1812 +1562 whale_0xdc8d 0xb26f9666... Titan Relay
14112224 1 3248 1687 +1561 p2porg 0xb26f9666... Titan Relay
14114089 1 3245 1687 +1558 blockdaemon 0x88a53ec4... BloXroute Max Profit
14115496 0 3222 1667 +1555 blockdaemon_lido 0xb26f9666... Titan Relay
14112193 0 3222 1667 +1555 0xb5a65d00... Ultra Sound
14112797 6 3343 1791 +1552 luno 0xb26f9666... Titan Relay
14113386 6 3341 1791 +1550 blockdaemon_lido 0x856b0004... BloXroute Max Profit
14108768 1 3236 1687 +1549 p2porg 0x850b00e0... Flashbots
14115469 5 3319 1770 +1549 blockdaemon 0x856b0004... BloXroute Max Profit
14114968 5 3314 1770 +1544 bridgetower_lido 0x857b0038... BloXroute Max Profit
14111364 0 3207 1667 +1540 blockdaemon_lido 0x82c466b9... Ultra Sound
14110279 11 3435 1895 +1540 blockdaemon_lido 0xb67eaa5e... BloXroute Max Profit
14113965 2 3247 1708 +1539 gateway.fmas_lido 0x850b00e0... BloXroute Max Profit
14115280 0 3204 1667 +1537 coinbase 0xb26f9666... Titan Relay
14108857 8 3369 1833 +1536 blockdaemon_lido 0x88857150... Ultra Sound
14111968 5 3306 1770 +1536 coinbase 0xb26f9666... Titan Relay
14109931 1 3212 1687 +1525 blockdaemon_lido 0xb67eaa5e... BloXroute Max Profit
14115411 1 3211 1687 +1524 p2porg 0x857b0038... BloXroute Regulated
14112498 5 3288 1770 +1518 revolut 0xb67eaa5e... BloXroute Regulated
14112440 1 3200 1687 +1513 revolut 0xb67eaa5e... BloXroute Regulated
14113391 1 3199 1687 +1512 gateway.fmas_lido 0x850b00e0... BloXroute Max Profit
14114012 6 3302 1791 +1511 coinbase 0xb67eaa5e... BloXroute Max Profit
14109437 1 3198 1687 +1511 kiln Local Local
14112187 8 3342 1833 +1509 blockdaemon 0xb26f9666... Titan Relay
14108895 6 3299 1791 +1508 blockdaemon_lido 0x8527d16c... Ultra Sound
14109967 7 3318 1812 +1506 blockdaemon_lido 0xb26f9666... Titan Relay
14109370 6 3297 1791 +1506 whale_0xfd67 0xa965c911... Ultra Sound
14111475 1 3192 1687 +1505 whale_0x8914 0xb4ce6162... Ultra Sound
14113546 6 3295 1791 +1504 blockdaemon 0xa965c911... Ultra Sound
14112089 1 3191 1687 +1504 bitstamp 0x8527d16c... Ultra Sound
14114830 1 3187 1687 +1500 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
14111748 0 3164 1667 +1497 gateway.fmas_lido 0xb67eaa5e... BloXroute Regulated
14115566 6 3288 1791 +1497 p2porg 0x850b00e0... BloXroute Regulated
14114654 1 3184 1687 +1497 coinbase 0xb26f9666... Titan Relay
14109361 0 3162 1667 +1495 gateway.fmas_lido 0xb67eaa5e... BloXroute Max Profit
14114288 0 3161 1667 +1494 whale_0x23be 0xb67eaa5e... Aestus
14114136 0 3161 1667 +1494 whale_0x8ebd 0xb67eaa5e... Aestus
14109174 7 3305 1812 +1493 0x8db2a99d... BloXroute Regulated
14115022 1 3179 1687 +1492 whale_0x8914 0xb67eaa5e... BloXroute Max Profit
14108463 1 3179 1687 +1492 blockdaemon_lido 0x850b00e0... BloXroute Max Profit
14110096 4 3241 1750 +1491 gateway.fmas_lido 0xb67eaa5e... BloXroute Max Profit
14111505 6 3282 1791 +1491 gateway.fmas_lido 0x850b00e0... BloXroute Max Profit
14110590 9 3343 1853 +1490 blockdaemon_lido 0xb26f9666... Titan Relay
14110613 3 3218 1729 +1489 whale_0x8914 0x8527d16c... Ultra Sound
14112834 1 3173 1687 +1486 blockdaemon_lido 0x88857150... Ultra Sound
14115158 0 3152 1667 +1485 gateway.fmas_lido 0x8527d16c... Ultra Sound
14112718 5 3255 1770 +1485 gateway.fmas_lido 0x88a53ec4... BloXroute Max Profit
14114893 1 3170 1687 +1483 whale_0x8ebd 0x856b0004... BloXroute Max Profit
14110619 5 3252 1770 +1482 coinbase 0xb26f9666... BloXroute Regulated
14111337 7 3289 1812 +1477 gateway.fmas_lido 0xb67eaa5e... BloXroute Regulated
14112037 5 3247 1770 +1477 whale_0x8914 0xb67eaa5e... Aestus
14113549 0 3143 1667 +1476 coinbase 0xb26f9666... Titan Relay
14108719 6 3267 1791 +1476 blockdaemon_lido 0xb67eaa5e... BloXroute Max Profit
14113598 5 3246 1770 +1476 coinbase 0xb67eaa5e... BloXroute Regulated
14112604 3 3204 1729 +1475 p2porg 0x8527d16c... Ultra Sound
14113062 9 3327 1853 +1474 0x8527d16c... Ultra Sound
14110503 0 3139 1667 +1472 0xb67eaa5e... BloXroute Regulated
14115421 5 3242 1770 +1472 p2porg 0x850b00e0... BloXroute Regulated
14113333 0 3138 1667 +1471 gateway.fmas_lido 0xac23f8cc... BloXroute Max Profit
14113138 2 3179 1708 +1471 coinbase 0x8db2a99d... Aestus
14109504 1 3158 1687 +1471 p2porg 0x85fb0503... Aestus
14110818 3 3199 1729 +1470 gateway.fmas_lido 0x8527d16c... Ultra Sound
14108995 1 3157 1687 +1470 whale_0x4b5e 0x88857150... Ultra Sound
14114707 6 3260 1791 +1469 coinbase 0xb67eaa5e... BloXroute Max Profit
14108923 5 3237 1770 +1467 whale_0xf273 0xb67eaa5e... Aestus
14110036 6 3257 1791 +1466 kiln 0x850b00e0... BloXroute Max Profit
14111254 5 3236 1770 +1466 blockdaemon_lido 0x88510a78... Titan Relay
14111639 7 3274 1812 +1462 gateway.fmas_lido 0xb67eaa5e... BloXroute Max Profit
14109050 0 3128 1667 +1461 gateway.fmas_lido 0x8527d16c... Ultra Sound
14111217 12 3377 1916 +1461 whale_0xdc8d 0xb26f9666... Titan Relay
14114327 1 3148 1687 +1461 whale_0x8ebd 0x850b00e0... BloXroute Max Profit
14111850 10 3333 1874 +1459 coinbase 0xb67eaa5e... BloXroute Regulated
14109330 1 3146 1687 +1459 whale_0x8914 0x85fb0503... Ultra Sound
14115159 6 3249 1791 +1458 whale_0x8ebd 0x850b00e0... BloXroute Regulated
14109894 0 3124 1667 +1457 gateway.fmas_lido 0x88857150... Ultra Sound
14112615 2 3164 1708 +1456 gateway.fmas_lido 0xb26f9666... Aestus
14111849 9 3308 1853 +1455 blockdaemon_lido 0xb67eaa5e... BloXroute Regulated
14112520 19 3515 2061 +1454 blockdaemon_lido 0xb67eaa5e... Titan Relay
14112642 0 3118 1667 +1451 figment 0xb26f9666... Titan Relay
14114694 6 3242 1791 +1451 whale_0x8ebd 0xb26f9666... Titan Relay
14109011 8 3281 1833 +1448 blockdaemon 0x88857150... Ultra Sound
14113335 0 3114 1667 +1447 p2porg 0xb26f9666... Titan Relay
14115376 0 3113 1667 +1446 figment 0xb26f9666... Titan Relay
14111299 6 3237 1791 +1446 whale_0x8914 0xb67eaa5e... Aestus
14111762 3 3173 1729 +1444 gateway.fmas_lido 0x8527d16c... Ultra Sound
14111685 2 3152 1708 +1444 blockdaemon 0x8db2a99d... BloXroute Max Profit
14110133 3 3172 1729 +1443 coinbase 0x8527d16c... Ultra Sound
14108431 5 3213 1770 +1443 blockdaemon 0x88a53ec4... BloXroute Max Profit
14115107 12 3355 1916 +1439 kiln 0xb67eaa5e... BloXroute Max Profit
14113665 0 3102 1667 +1435 p2porg 0x851b00b1... BloXroute Max Profit
14108441 6 3226 1791 +1435 revolut 0x853b0078... Ultra Sound
14113381 1 3122 1687 +1435 p2porg 0xb26f9666... Titan Relay
14115562 5 3205 1770 +1435 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14115019 0 3101 1667 +1434 0x850b00e0... Flashbots
14110923 6 3225 1791 +1434 p2porg 0x850b00e0... BloXroute Max Profit
14112001 5 3204 1770 +1434 p2porg 0xb26f9666... Titan Relay
14114401 1 3118 1687 +1431 whale_0xedc6 0x853b0078... Ultra Sound
14112591 6 3219 1791 +1428 gateway.fmas_lido 0x8527d16c... Ultra Sound
14111910 5 3197 1770 +1427 kiln 0x853b0078... Agnostic Gnosis
14112721 1 3113 1687 +1426 p2porg 0x850b00e0... BloXroute Regulated
14110064 0 3092 1667 +1425 solo_stakers 0x8db2a99d... BloXroute Max Profit
14108789 13 3362 1937 +1425 blockdaemon 0x850b00e0... BloXroute Max Profit
14110472 1 3110 1687 +1423 whale_0x6ddb 0x850b00e0... BloXroute Regulated
14114697 6 3213 1791 +1422 kiln 0xb67eaa5e... BloXroute Regulated
14113505 5 3192 1770 +1422 whale_0x23be 0x850b00e0... BloXroute Max Profit
14113339 0 3088 1667 +1421 gateway.fmas_lido 0x8527d16c... Ultra Sound
14112787 2 3127 1708 +1419 p2porg 0xb26f9666... Titan Relay
14111249 0 3085 1667 +1418 p2porg 0xaceaea9f... Ultra Sound
14115032 1 3105 1687 +1418 coinbase 0x8527d16c... Ultra Sound
14110117 0 3082 1667 +1415 blockdaemon_lido 0xb26f9666... Titan Relay
14111814 3 3144 1729 +1415 whale_0x2d2a 0x857b0038... Ultra Sound
14111803 1 3102 1687 +1415 figment 0xb26f9666... BloXroute Max Profit
14112989 1 3100 1687 +1413 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
14114329 5 3183 1770 +1413 gateway.fmas_lido 0x8527d16c... Ultra Sound
14110955 2 3118 1708 +1410 stader 0xb67eaa5e... BloXroute Max Profit
14114596 0 3075 1667 +1408 kiln 0x9129eeb4... Agnostic Gnosis
14115334 0 3075 1667 +1408 coinbase 0x8527d16c... Ultra Sound
14108941 0 3075 1667 +1408 0x857b0038... Ultra Sound
14115520 4 3158 1750 +1408 coinbase 0xb26f9666... Titan Relay
14109674 1 3095 1687 +1408 coinbase 0x823e0146... BloXroute Max Profit
14112502 0 3074 1667 +1407 p2porg 0xba003e46... BloXroute Max Profit
14112005 2 3115 1708 +1407 p2porg 0x8db2a99d... Flashbots
14109141 1 3094 1687 +1407 whale_0x8914 0x88a53ec4... BloXroute Regulated
14109019 3 3135 1729 +1406 whale_0x8914 0x853b0078... Agnostic Gnosis
14112353 0 3072 1667 +1405 whale_0x8ebd 0xb26f9666... Titan Relay
14110156 3 3134 1729 +1405 coinbase 0xb26f9666... Titan Relay
14113769 6 3196 1791 +1405 gateway.fmas_lido 0x88857150... Ultra Sound
14114344 0 3071 1667 +1404 gateway.fmas_lido 0x823e0146... Flashbots
14109787 7 3216 1812 +1404 whale_0x8ebd 0x88857150... Ultra Sound
14114172 1 3091 1687 +1404 coinbase 0x88a53ec4... BloXroute Max Profit
14112048 0 3068 1667 +1401 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14114886 9 3254 1853 +1401 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14115335 0 3066 1667 +1399 whale_0x8914 0x88a53ec4... BloXroute Max Profit
14114063 0 3065 1667 +1398 kiln 0x88a53ec4... BloXroute Regulated
14111695 1 3084 1687 +1397 p2porg 0x850b00e0... BloXroute Regulated
14113746 1 3084 1687 +1397 p2porg 0x853b0078... Ultra Sound
14111585 0 3063 1667 +1396 coinbase 0xb26f9666... Titan Relay
14110946 0 3063 1667 +1396 coinbase 0xb26f9666... BloXroute Max Profit
14111474 1 3083 1687 +1396 coinbase 0xac23f8cc... BloXroute Max Profit
14110252 0 3062 1667 +1395 coinbase 0xb26f9666... Titan Relay
14111499 3 3122 1729 +1393 coinbase 0xb67eaa5e... BloXroute Max Profit
14114844 6 3184 1791 +1393 gateway.fmas_lido 0x8db2a99d... Flashbots
14112376 0 3059 1667 +1392 p2porg 0xb26f9666... BloXroute Regulated
14108865 4 3142 1750 +1392 stader 0x856b0004... Aestus
14113520 7 3201 1812 +1389 0x8db2a99d... Flashbots
14111824 1 3076 1687 +1389 coinbase 0xb67eaa5e... BloXroute Max Profit
14109289 1 3075 1687 +1388 coinbase 0x88a53ec4... BloXroute Max Profit
14108526 0 3054 1667 +1387 kiln 0xb26f9666... Aestus
14115221 0 3054 1667 +1387 kiln 0xb26f9666... Aestus
14111523 6 3178 1791 +1387 coinbase 0x856b0004... Aestus
14110034 9 3240 1853 +1387 p2porg 0x8527d16c... Ultra Sound
14114262 0 3052 1667 +1385 kiln 0x8527d16c... Ultra Sound
14111476 6 3176 1791 +1385 whale_0x8914 0xb67eaa5e... Ultra Sound
14112162 0 3051 1667 +1384 coinbase 0x88857150... Ultra Sound
14113925 4 3133 1750 +1383 p2porg 0x850b00e0... BloXroute Max Profit
14112150 16 3382 1999 +1383 whale_0x8914 0xb67eaa5e... Aestus
14112407 2 3091 1708 +1383 p2porg 0x853b0078... Agnostic Gnosis
14110972 10 3257 1874 +1383 kiln 0xb67eaa5e... BloXroute Max Profit
14111452 10 3257 1874 +1383 0xb67eaa5e... BloXroute Max Profit
14109867 1 3069 1687 +1382 p2porg 0x9129eeb4... Agnostic Gnosis
14108473 6 3172 1791 +1381 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14114064 0 3047 1667 +1380 whale_0x8ebd 0xb26f9666... Titan Relay
14114939 6 3170 1791 +1379 whale_0xfd67 0x8527d16c... Ultra Sound
14113966 1 3066 1687 +1379 coinbase 0xb26f9666... Titan Relay
14111854 0 3045 1667 +1378 whale_0xfd67 0xb67eaa5e... BloXroute Regulated
14113990 6 3167 1791 +1376 p2porg 0x823e0146... BloXroute Regulated
14111444 0 3042 1667 +1375 whale_0x8ebd 0x8527d16c... Ultra Sound
14109881 2 3081 1708 +1373 whale_0x8ebd 0x8db2a99d... BloXroute Max Profit
14111064 1 3059 1687 +1372 p2porg 0x88857150... Ultra Sound
14112011 0 3038 1667 +1371 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14113228 0 3038 1667 +1371 0xb67eaa5e... BloXroute Max Profit
14114117 1 3058 1687 +1371 p2porg 0x853b0078... Agnostic Gnosis
14113232 1 3058 1687 +1371 p2porg 0x8527d16c... Ultra Sound
14108852 1 3058 1687 +1371 coinbase 0x853b0078... Agnostic Gnosis
14111311 0 3037 1667 +1370 p2porg 0xb26f9666... Titan Relay
14111593 0 3036 1667 +1369 figment 0xb26f9666... BloXroute Max Profit
14110554 1 3056 1687 +1369 0xb67eaa5e... BloXroute Max Profit
14109061 0 3035 1667 +1368 coinbase 0xb7c5e609... BloXroute Max Profit
14109270 13 3305 1937 +1368 0x88a53ec4... BloXroute Max Profit
14109450 0 3034 1667 +1367 p2porg 0xb26f9666... BloXroute Regulated
14109168 0 3034 1667 +1367 whale_0x4b5e 0xb67eaa5e... BloXroute Regulated
14115412 6 3157 1791 +1366 whale_0x23be 0x850b00e0... BloXroute Regulated
14112120 1 3051 1687 +1364 p2porg 0x856b0004... Ultra Sound
14108777 1 3051 1687 +1364 whale_0x8ebd 0x85fb0503... Aestus
14111825 0 3030 1667 +1363 coinbase 0x823e0146... Flashbots
14111615 4 3113 1750 +1363 whale_0x8ebd 0xb7c5e609... BloXroute Max Profit
14110504 11 3258 1895 +1363 whale_0x8914 0x88857150... Ultra Sound
14111116 10 3237 1874 +1363 whale_0xfd67 0x88857150... Ultra Sound
14114593 1 3050 1687 +1363 coinbase 0xb67eaa5e... BloXroute Regulated
14111623 6 3153 1791 +1362 coinbase 0x8527d16c... Ultra Sound
14114996 0 3028 1667 +1361 p2porg 0x8db2a99d... Flashbots
14114162 0 3027 1667 +1360 whale_0xfd67 0x88a53ec4... BloXroute Regulated
14113754 5 3129 1770 +1359 gateway.fmas_lido 0x8db2a99d... Flashbots
14114356 0 3022 1667 +1355 kiln 0xac23f8cc... Aestus
14114943 0 3022 1667 +1355 0x8db2a99d... Ultra Sound
14114811 7 3167 1812 +1355 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14111950 9 3208 1853 +1355 whale_0xfd67 0x8db2a99d... Agnostic Gnosis
14115355 0 3021 1667 +1354 p2porg 0xba003e46... BloXroute Max Profit
14112301 1 3041 1687 +1354 kiln 0xb26f9666... Aestus
14109782 0 3020 1667 +1353 kiln 0xb26f9666... Titan Relay
14112505 0 3020 1667 +1353 coinbase 0x83bee517... Flashbots
14113494 8 3185 1833 +1352 p2porg 0x853b0078... Agnostic Gnosis
14110026 1 3038 1687 +1351 whale_0x8ebd 0x88857150... Ultra Sound
14115017 6 3141 1791 +1350 blockdaemon 0x82c466b9... Ultra Sound
14115572 7 3161 1812 +1349 p2porg 0x850b00e0... BloXroute Max Profit
14108605 6 3140 1791 +1349 solo_stakers 0xb67eaa5e... BloXroute Max Profit
14110454 1 3036 1687 +1349 figment 0x82c466b9... Ultra Sound
14110786 2 3056 1708 +1348 kiln 0x850b00e0... Flashbots
14108543 8 3180 1833 +1347 gateway.fmas_lido 0x85fb0503... Aestus
14109269 6 3138 1791 +1347 gateway.fmas_lido 0x85fb0503... Aestus
14114829 6 3137 1791 +1346 blockdaemon_lido 0x8527d16c... Ultra Sound
14110182 6 3137 1791 +1346 whale_0xc611 0xb67eaa5e... BloXroute Max Profit
14111631 1 3033 1687 +1346 everstake 0x850b00e0... BloXroute Max Profit
14110764 3 3074 1729 +1345 kiln 0xb26f9666... Titan Relay
14114309 5 3115 1770 +1345 whale_0xedc6 0x856b0004... Ultra Sound
14111097 2 3052 1708 +1344 0x853b0078... Agnostic Gnosis
14110799 1 3031 1687 +1344 p2porg 0xb26f9666... BloXroute Max Profit
14109815 5 3113 1770 +1343 coinbase 0xac23f8cc... Aestus
14112532 5 3113 1770 +1343 p2porg 0xb26f9666... Titan Relay
14110515 0 3009 1667 +1342 coinbase 0xb26f9666... BloXroute Regulated
14111430 1 3029 1687 +1342 coinbase 0x8527d16c... Ultra Sound
14112015 7 3153 1812 +1341 figment 0x853b0078... Agnostic Gnosis
14113647 2 3049 1708 +1341 0xb67eaa5e... Aestus
14109037 0 3007 1667 +1340 p2porg 0x8527d16c... Ultra Sound
14112750 7 3151 1812 +1339 0x88a53ec4... BloXroute Max Profit
14108596 0 3005 1667 +1338 coinbase 0x85fb0503... Aestus
14111063 0 3005 1667 +1338 kiln 0xb67eaa5e... BloXroute Regulated
14114259 16 3337 1999 +1338 whale_0x3878 0x88a53ec4... BloXroute Regulated
14115530 1 3025 1687 +1338 whale_0xedc6 0xb26f9666... BloXroute Max Profit
14111319 1 3024 1687 +1337 coinbase 0xaceaea9f... Ultra Sound
14113380 0 3003 1667 +1336 everstake 0xb26f9666... Titan Relay
14109895 0 3003 1667 +1336 p2porg 0xb26f9666... BloXroute Max Profit
14113103 0 3003 1667 +1336 coinbase 0x8db2a99d... Flashbots
14113786 1 3023 1687 +1336 coinbase 0xac23f8cc... Flashbots
14114196 0 3002 1667 +1335 coinbase 0xac23f8cc... Flashbots
14114548 6 3126 1791 +1335 coinbase 0x8527d16c... Ultra Sound
14115371 0 3000 1667 +1333 coinbase 0x856b0004... Aestus
14112345 10 3207 1874 +1333 whale_0xfd67 0x8527d16c... Ultra Sound
14109586 5 3103 1770 +1333 coinbase 0x8db2a99d... Flashbots
14108778 8 3165 1833 +1332 gateway.fmas_lido 0x85fb0503... Aestus
14110301 0 2998 1667 +1331 everstake 0x88857150... Ultra Sound
14112189 1 3016 1687 +1329 coinbase 0x850b00e0... Flashbots
14109073 5 3099 1770 +1329 kiln 0x8527d16c... Ultra Sound
14115390 0 2995 1667 +1328 whale_0x8914 0x88a53ec4... BloXroute Regulated
14109136 7 3140 1812 +1328 solo_stakers 0xac23f8cc... Ultra Sound
14109191 5 3097 1770 +1327 whale_0xfd67 0x8db2a99d... BloXroute Regulated
14114466 11 3220 1895 +1325 blockdaemon 0xb26f9666... Titan Relay
14110097 2 3033 1708 +1325 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14112784 0 2991 1667 +1324 abyss_finance 0x82c466b9... Flashbots
14108914 0 2990 1667 +1323 kiln 0xb67eaa5e... BloXroute Regulated
14109551 0 2989 1667 +1322 coinbase 0x8db2a99d... BloXroute Max Profit
14111335 7 3134 1812 +1322 whale_0x8ebd 0xb7c5e609... BloXroute Max Profit
14110982 6 3112 1791 +1321 kiln 0xb67eaa5e... BloXroute Regulated
14112139 5 3090 1770 +1320 p2porg 0x8527d16c... Ultra Sound
14109446 0 2986 1667 +1319 whale_0x8ebd 0x8db2a99d... Flashbots
14110274 5 3089 1770 +1319 coinbase 0xb5a65d00... Ultra Sound
14111088 3 3047 1729 +1318 coinbase 0x8db2a99d... Flashbots
14114726 6 3107 1791 +1316 whale_0x8ebd 0xb26f9666... Titan Relay
14113283 0 2982 1667 +1315 solo_stakers 0x850b00e0... BloXroute Max Profit
14112146 0 2982 1667 +1315 everstake 0x8ef8714b... BloXroute Max Profit
14108708 4 3064 1750 +1314 kiln 0xb26f9666... BloXroute Max Profit
14111345 4 3063 1750 +1313 kiln 0xb26f9666... Aestus
14114427 1 3000 1687 +1313 everstake 0xb26f9666... Titan Relay
14108529 5 3083 1770 +1313 kiln 0xb67eaa5e... BloXroute Max Profit
14114014 11 3207 1895 +1312 kiln 0xac23f8cc... BloXroute Max Profit
14115378 0 2978 1667 +1311 kiln 0x823e0146... Aestus
14114094 0 2978 1667 +1311 coinbase 0xac23f8cc... Ultra Sound
14108418 6 3102 1791 +1311 everstake 0x88a53ec4... BloXroute Max Profit
14110821 2 3018 1708 +1310 everstake 0xb26f9666... Titan Relay
14111598 1 2997 1687 +1310 whale_0x8ebd 0x8a850621... Titan Relay
14115426 5 3080 1770 +1310 whale_0x288c 0x857b0038... BloXroute Regulated
14113529 6 3099 1791 +1308 ether.fi 0x850b00e0... BloXroute Max Profit
14112092 1 2995 1687 +1308 everstake 0x850b00e0... Flashbots
14114252 0 2971 1667 +1304 coinbase 0x88a53ec4... BloXroute Regulated
14112998 2 3012 1708 +1304 kiln 0xb67eaa5e... BloXroute Max Profit
14113900 6 3094 1791 +1303 whale_0x8ebd 0xb5a65d00... Ultra Sound
14110017 1 2990 1687 +1303 whale_0x8ebd 0xac23f8cc... BloXroute Max Profit
14113513 1 2990 1687 +1303 coinbase 0x856b0004... Ultra Sound
14113481 5 3073 1770 +1303 ether.fi 0x850b00e0... BloXroute Max Profit
14114002 6 3093 1791 +1302 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
14111402 5 3070 1770 +1300 kiln 0x8527d16c... Ultra Sound
14112767 0 2966 1667 +1299 kiln 0xb26f9666... BloXroute Max Profit
14114663 6 3090 1791 +1299 kiln 0xb26f9666... Titan Relay
14111018 0 2965 1667 +1298 everstake 0xb67eaa5e... BloXroute Max Profit
14110851 7 3110 1812 +1298 everstake 0xb67eaa5e... BloXroute Regulated
14111315 0 2964 1667 +1297 everstake 0xb26f9666... Titan Relay
14112643 5 3066 1770 +1296 kiln 0xb26f9666... BloXroute Max Profit
14109655 0 2961 1667 +1294 kiln 0x8db2a99d... Flashbots
14111561 6 3085 1791 +1294 solo_stakers 0x8527d16c... Ultra Sound
14108483 5 3064 1770 +1294 kiln 0x856b0004... Aestus
14113402 13 3230 1937 +1293 solo_stakers 0x850b00e0... BloXroute Max Profit
14113295 9 3146 1853 +1293 p2porg 0x8527d16c... Ultra Sound
14112796 0 2959 1667 +1292 everstake 0xb26f9666... Titan Relay
14114053 5 3062 1770 +1292 everstake 0xb67eaa5e... BloXroute Max Profit
14112469 11 3185 1895 +1290 whale_0x7275 0xb67eaa5e... BloXroute Regulated
14109611 6 3081 1791 +1290 whale_0x8ebd 0xb4ce6162... Ultra Sound
14114759 5 3060 1770 +1290 coinbase 0x823e0146... Ultra Sound
14113431 1 2976 1687 +1289 kiln 0x856b0004... Ultra Sound
14109854 8 3121 1833 +1288 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
14111010 0 2954 1667 +1287 kiln 0xb26f9666... Titan Relay
14110847 0 2954 1667 +1287 kiln 0x8db2a99d... Flashbots
14114977 10 3161 1874 +1287 bitstamp 0xac23f8cc... BloXroute Max Profit
14110866 1 2974 1687 +1287 coinbase 0xb26f9666... BloXroute Max Profit
14108697 8 3119 1833 +1286 coinbase 0x856b0004... Aestus
14109305 6 3077 1791 +1286 kiln 0x88a53ec4... BloXroute Regulated
14115522 6 3077 1791 +1286 whale_0x7669 0x8a850621... Titan Relay
14108436 6 3076 1791 +1285 p2porg 0x8db2a99d... Flashbots
14112728 1 2971 1687 +1284 everstake 0xb26f9666... Titan Relay
14108939 5 3053 1770 +1283 kiln 0xb26f9666... Aestus
14113067 5 3053 1770 +1283 whale_0x8ebd 0x850b00e0... BloXroute Max Profit
14115517 0 2949 1667 +1282 kiln 0xac23f8cc... Flashbots
14113477 0 2948 1667 +1281 kiln 0xb26f9666... BloXroute Regulated
14108559 2 2988 1708 +1280 kiln 0x856b0004... Aestus
14108932 1 2966 1687 +1279 everstake 0x85fb0503... Aestus
14113615 1 2966 1687 +1279 kiln 0xac23f8cc... BloXroute Max Profit
14113320 8 3111 1833 +1278 whale_0x8914 0xb67eaa5e... BloXroute Max Profit
14109699 1 2965 1687 +1278 solo_stakers 0xb26f9666... BloXroute Regulated
14108975 5 3048 1770 +1278 coinbase Local Local
14109040 9 3131 1853 +1278 coinbase 0x8527d16c... Ultra Sound
14109314 0 2943 1667 +1276 whale_0x8ebd 0x85fb0503... BloXroute Max Profit
14111067 2 2984 1708 +1276 kiln 0xa965c911... Ultra Sound
14111659 1 2963 1687 +1276 coinbase 0xb26f9666... BloXroute Max Profit
14110790 0 2942 1667 +1275 kiln 0x805e28e6... BloXroute Max Profit
14113072 0 2942 1667 +1275 kiln 0x856b0004... Agnostic Gnosis
14115166 1 2962 1687 +1275 bitstamp 0x88857150... Ultra Sound
14113357 0 2940 1667 +1273 everstake 0xb26f9666... Aestus
14111046 0 2939 1667 +1272 everstake 0xb67eaa5e... BloXroute Max Profit
14110194 11 3167 1895 +1272 coinbase 0xb67eaa5e... BloXroute Regulated
14112286 11 3166 1895 +1271 kiln 0xb26f9666... BloXroute Regulated
14115416 6 3062 1791 +1271 p2porg 0x8db2a99d... Flashbots
14110391 5 3041 1770 +1271 coinbase 0x856b0004... Aestus
14114778 11 3164 1895 +1269 coinbase Local Local
14115506 6 3060 1791 +1269 coinbase 0x8527d16c... Ultra Sound
14110142 1 2956 1687 +1269 solo_stakers 0x8db2a99d... BloXroute Max Profit
14115451 0 2935 1667 +1268 everstake 0xb26f9666... Titan Relay
14114706 2 2976 1708 +1268 everstake 0xb26f9666... Titan Relay
14112126 1 2955 1687 +1268 0xb26f9666... BloXroute Max Profit
14110277 1 2954 1687 +1267 solo_stakers 0x8527d16c... Ultra Sound
14114415 1 2953 1687 +1266 everstake 0xb26f9666... Titan Relay
14110223 3 2994 1729 +1265 everstake 0x850b00e0... BloXroute Max Profit
14114305 1 2952 1687 +1265 whale_0x8ebd 0x857b0038... Ultra Sound
14113236 0 2931 1667 +1264 solo_stakers 0x851b00b1... BloXroute Max Profit
14113945 1 2951 1687 +1264 kiln 0xac23f8cc... Flashbots
14111104 0 2930 1667 +1263 everstake 0xb26f9666... Titan Relay
14108804 0 2930 1667 +1263 everstake 0x85fb0503... Aestus
14110162 0 2929 1667 +1262 kiln 0x8527d16c... Ultra Sound
14108673 2 2970 1708 +1262 whale_0x8ebd 0xb26f9666... BloXroute Max Profit
14109495 6 3053 1791 +1262 coinbase 0x85fb0503... Aestus
14109053 1 2949 1687 +1262 kiln 0x85fb0503... BloXroute Max Profit
14108620 6 3052 1791 +1261 figment 0x85fb0503... Aestus
14113731 6 3052 1791 +1261 coinbase 0x8527d16c... Ultra Sound
14115137 1 2948 1687 +1261 bitgo 0x857b0038... Titan Relay
14110167 12 3176 1916 +1260 0xb67eaa5e... Ultra Sound
14115193 7 3071 1812 +1259 solo_stakers 0x850b00e0... BloXroute Max Profit
14113517 6 3050 1791 +1259 kiln 0xac23f8cc... BloXroute Max Profit
14110222 6 3050 1791 +1259 0xb26f9666... Titan Relay
14110878 1 2946 1687 +1259 kiln 0xb26f9666... BloXroute Max Profit
14114745 4 3007 1750 +1257 gateway.fmas_lido 0x857b0038... BloXroute Max Profit
14110075 1 2944 1687 +1257 everstake 0xb67eaa5e... BloXroute Max Profit
14114217 1 2944 1687 +1257 everstake 0xb26f9666... Titan Relay
14114496 0 2922 1667 +1255 everstake 0x9129eeb4... Ultra Sound
14111021 8 3088 1833 +1255 everstake 0x8527d16c... Ultra Sound
14110387 0 2921 1667 +1254 nethermind_lido 0xb26f9666... Aestus
14110528 1 2941 1687 +1254 everstake 0xb26f9666... Titan Relay
14113650 0 2920 1667 +1253 everstake 0xb67eaa5e... BloXroute Regulated
14114862 0 2920 1667 +1253 kiln 0xb26f9666... BloXroute Max Profit
14112382 0 2920 1667 +1253 kiln 0xb26f9666... BloXroute Regulated
14110746 3 2982 1729 +1253 everstake 0xb67eaa5e... BloXroute Max Profit
14108482 1 2940 1687 +1253 kiln 0xb26f9666... BloXroute Max Profit
14113832 5 3023 1770 +1253 stader 0x8527d16c... Ultra Sound
14111078 0 2919 1667 +1252 coinbase 0x853b0078... Agnostic Gnosis
14111069 3 2981 1729 +1252 everstake 0xb67eaa5e... BloXroute Max Profit
14109321 15 3229 1978 +1251 kiln 0xb26f9666... BloXroute Regulated
14110798 0 2917 1667 +1250 kiln 0xb26f9666... BloXroute Max Profit
14111914 0 2917 1667 +1250 everstake 0x851b00b1... BloXroute Max Profit
14114360 0 2916 1667 +1249 everstake 0x88a53ec4... BloXroute Regulated
14111024 2 2957 1708 +1249 everstake 0xb67eaa5e... BloXroute Max Profit
14115253 5 3019 1770 +1249 nethermind_lido 0x8527d16c... Ultra Sound
14114111 0 2915 1667 +1248 everstake 0x9129eeb4... Ultra Sound
14113982 0 2914 1667 +1247 nethermind_lido 0xb26f9666... Aestus
14114986 6 3037 1791 +1246 kiln 0x856b0004... BloXroute Max Profit
14111032 0 2912 1667 +1245 solo_stakers 0xb26f9666... BloXroute Max Profit
14112428 1 2932 1687 +1245 everstake 0xb26f9666... Titan Relay
14111781 1 2932 1687 +1245 coinbase 0xb26f9666... BloXroute Regulated
14115333 2 2952 1708 +1244 everstake 0xb26f9666... Titan Relay
14114066 0 2910 1667 +1243 everstake 0xb26f9666... Titan Relay
14110591 2 2951 1708 +1243 everstake 0x850b00e0... BloXroute Max Profit
14110671 1 2929 1687 +1242 kiln Local Local
14113271 6 3031 1791 +1240 everstake 0x850b00e0... BloXroute Max Profit
14110549 1 2927 1687 +1240 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14114815 5 3010 1770 +1240 kiln 0x853b0078... BloXroute Max Profit
14111961 8 3071 1833 +1238 whale_0x8ebd 0xb26f9666... Titan Relay
14111956 8 3071 1833 +1238 everstake 0xb67eaa5e... BloXroute Max Profit
14112567 1 2925 1687 +1238 kiln 0xb26f9666... BloXroute Regulated
14109968 0 2904 1667 +1237 kiln 0xb26f9666... BloXroute Regulated
14111650 9 3090 1853 +1237 coinbase 0xb26f9666... BloXroute Regulated
14113221 7 3047 1812 +1235 kiln 0xb67eaa5e... BloXroute Regulated
14112729 1 2922 1687 +1235 kiln Local Local
14108860 5 3005 1770 +1235 everstake 0xb67eaa5e... BloXroute Max Profit
14114294 0 2901 1667 +1234 whale_0x8ebd 0xac23f8cc... Ultra Sound
14111901 2 2942 1708 +1234 everstake 0xb67eaa5e... BloXroute Max Profit
14113927 1 2919 1687 +1232 everstake 0xb67eaa5e... BloXroute Max Profit
14112022 1 2919 1687 +1232 kiln 0xb67eaa5e... BloXroute Max Profit
14114256 2 2939 1708 +1231 kiln 0xb26f9666... Aestus
14113687 0 2897 1667 +1230 nethermind_lido 0x8db2a99d... Flashbots
14111989 1 2917 1687 +1230 nethermind_lido 0xb26f9666... Aestus
14108844 0 2895 1667 +1228 kiln 0x8527d16c... Ultra Sound
14109615 0 2894 1667 +1227 everstake 0xb26f9666... Aestus
14109403 0 2894 1667 +1227 stader 0xb67eaa5e... BloXroute Max Profit
14112332 0 2894 1667 +1227 everstake 0xb26f9666... Titan Relay
14110534 0 2894 1667 +1227 everstake 0xb26f9666... Titan Relay
14115413 0 2892 1667 +1225 whale_0x8ebd 0xac23f8cc... Flashbots
14109789 1 2911 1687 +1224 everstake 0xb26f9666... Titan Relay
14108495 14 3181 1957 +1224 whale_0xbfd8 0x88a53ec4... BloXroute Max Profit
14114132 0 2890 1667 +1223 everstake 0xb26f9666... Aestus
14113117 0 2890 1667 +1223 coinbase 0xb26f9666... BloXroute Max Profit
14114153 0 2890 1667 +1223 everstake 0xb26f9666... Titan Relay
14114576 0 2889 1667 +1222 kiln 0xb26f9666... BloXroute Max Profit
14109149 0 2889 1667 +1222 everstake 0xb67eaa5e... BloXroute Regulated
14110837 5 2992 1770 +1222 everstake 0xb26f9666... Titan Relay
14115179 0 2888 1667 +1221 bitstamp 0x857b0038... BloXroute Regulated
14109924 5 2991 1770 +1221 stader 0x8527d16c... Ultra Sound
14113437 3 2949 1729 +1220 coinbase 0x853b0078... Agnostic Gnosis
14113877 8 3051 1833 +1218 whale_0x8ebd 0xb26f9666... Titan Relay
14110560 0 2882 1667 +1215 everstake 0xb67eaa5e... BloXroute Max Profit
14115382 1 2902 1687 +1215 nethermind_lido 0x823e0146... Aestus
14110292 1 2901 1687 +1214 everstake 0xb26f9666... Titan Relay
14109604 0 2879 1667 +1212 everstake 0x823e0146... Flashbots
14112472 6 3003 1791 +1212 kiln 0xb26f9666... Aestus
14113777 1 2899 1687 +1212 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14110250 0 2878 1667 +1211 0xb26f9666... Titan Relay
14114678 0 2878 1667 +1211 0x853b0078... BloXroute Max Profit
14109773 0 2877 1667 +1210 nethermind_lido 0xb26f9666... Aestus
14111350 0 2877 1667 +1210 everstake 0xb26f9666... Titan Relay
14113369 13 3147 1937 +1210 p2porg 0x8527d16c... Ultra Sound
14115438 2 2917 1708 +1209 whale_0x8ebd 0x8a850621... Titan Relay
14111077 2 2917 1708 +1209 solo_stakers 0x850b00e0... Titan Relay
14109764 1 2896 1687 +1209 solo_stakers 0x9129eeb4... Ultra Sound
14113244 0 2875 1667 +1208 everstake 0x88a53ec4... BloXroute Max Profit
14110696 1 2895 1687 +1208 kiln 0xb26f9666... BloXroute Max Profit
14113996 9 3061 1853 +1208 coinbase 0x853b0078... Agnostic Gnosis
14113033 0 2874 1667 +1207 solo_stakers 0x853b0078... Agnostic Gnosis
14114188 7 3019 1812 +1207 ether.fi 0x850b00e0... BloXroute Max Profit
14110882 6 2998 1791 +1207 nethermind_lido 0x8527d16c... Ultra Sound
14109904 6 2998 1791 +1207 kiln 0xb26f9666... Aestus
14113439 9 3060 1853 +1207 0x856b0004... Aestus
14111823 6 2997 1791 +1206 everstake 0xb67eaa5e... BloXroute Max Profit
14109933 6 2997 1791 +1206 kiln 0xb26f9666... Aestus
14111684 5 2976 1770 +1206 coinbase 0x853b0078... Agnostic Gnosis
14109510 0 2872 1667 +1205 everstake 0xa965c911... Ultra Sound
14112540 5 2975 1770 +1205 everstake 0xb67eaa5e... BloXroute Max Profit
14108406 0 2871 1667 +1204 coinbase 0xb26f9666... BloXroute Max Profit
14112446 0 2871 1667 +1204 everstake 0xb67eaa5e... BloXroute Regulated
14108615 0 2870 1667 +1203 kiln 0xb26f9666... BloXroute Regulated
14113561 8 3036 1833 +1203 whale_0x8ebd 0x856b0004... Aestus
14110300 3 2932 1729 +1203 stader 0x8db2a99d... Ultra Sound
14112198 0 2869 1667 +1202 everstake 0xb26f9666... Aestus
14110258 4 2952 1750 +1202 kiln 0xb26f9666... Aestus
14109996 1 2888 1687 +1201 solo_stakers 0xb26f9666... BloXroute Max Profit
14113237 8 3032 1833 +1199 everstake 0xb67eaa5e... BloXroute Max Profit
14109874 5 2968 1770 +1198 kiln 0x8db2a99d... BloXroute Max Profit
14110073 5 2968 1770 +1198 coinbase 0x853b0078... Agnostic Gnosis
14112726 3 2926 1729 +1197 nethermind_lido 0xb26f9666... Aestus
14112649 11 3092 1895 +1197 coinbase 0x853b0078... Ultra Sound
14114686 2 2904 1708 +1196 solo_stakers 0x853b0078... BloXroute Max Profit
14115155 2 2904 1708 +1196 everstake 0xb26f9666... Titan Relay
14114269 1 2883 1687 +1196 kiln 0x853b0078... Agnostic Gnosis
14111224 8 3028 1833 +1195 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14109229 6 2985 1791 +1194 whale_0x8ebd 0x8db2a99d... Flashbots
14114508 1 2881 1687 +1194 kiln 0xb26f9666... BloXroute Regulated
14111896 5 2964 1770 +1194 0xac23f8cc... Ultra Sound
14114158 9 3047 1853 +1194 everstake 0xb67eaa5e... BloXroute Max Profit
14108567 0 2860 1667 +1193 everstake 0x8db2a99d... Flashbots
14108934 2 2901 1708 +1193 stader 0x85fb0503... Aestus
14110707 2 2901 1708 +1193 everstake 0xb26f9666... Titan Relay
14110114 5 2963 1770 +1193 kiln 0xb26f9666... BloXroute Max Profit
14112798 5 2962 1770 +1192 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
14115575 1 2878 1687 +1191 kiln 0x856b0004... BloXroute Max Profit
14113788 1 2878 1687 +1191 solo_stakers 0x853b0078... Agnostic Gnosis
14113296 0 2857 1667 +1190 kiln 0x853b0078... Agnostic Gnosis
14114417 5 2960 1770 +1190 kiln 0xb26f9666... Aestus
14109459 1 2876 1687 +1189 everstake 0xb26f9666... Aestus
14111887 2 2896 1708 +1188 everstake 0x8527d16c... Ultra Sound
14110538 0 2854 1667 +1187 everstake 0xb26f9666... Titan Relay
14111090 3 2916 1729 +1187 kiln 0x853b0078... Agnostic Gnosis
14111590 6 2978 1791 +1187 everstake 0xb26f9666... Titan Relay
14108749 17 3206 2020 +1186 stader 0x8db2a99d... BloXroute Max Profit
14108839 8 3019 1833 +1186 whale_0x8ebd 0x85fb0503... Aestus
14109706 5 2956 1770 +1186 solo_stakers 0x88a53ec4... BloXroute Regulated
14110678 5 2955 1770 +1185 everstake 0xb26f9666... Titan Relay
14113209 7 2996 1812 +1184 gateway.fmas_lido 0x856b0004... Aestus
14113974 10 3058 1874 +1184 coinbase 0xac23f8cc... BloXroute Max Profit
14114727 1 2871 1687 +1184 kiln Local Local
14113179 5 2954 1770 +1184 kiln 0xb26f9666... BloXroute Max Profit
14109969 0 2850 1667 +1183 everstake 0xb26f9666... Titan Relay
14110828 5 2953 1770 +1183 kiln 0xb26f9666... BloXroute Regulated
14112912 0 2849 1667 +1182 kiln 0xb26f9666... BloXroute Max Profit
14114659 6 2972 1791 +1181 everstake 0xb26f9666... Titan Relay
14112953 6 2972 1791 +1181 whale_0x8ebd 0xb4ce6162... Ultra Sound
14110938 6 2972 1791 +1181 everstake 0x856b0004... Aestus
14114397 6 2972 1791 +1181 nethermind_lido 0xb26f9666... Aestus
14108855 4 2929 1750 +1179 everstake 0x8527d16c... Ultra Sound
14114865 2 2887 1708 +1179 everstake 0x853b0078... Agnostic Gnosis
14110732 0 2844 1667 +1177 everstake 0xb26f9666... Titan Relay
14112662 0 2844 1667 +1177 bitstamp 0x88a53ec4... BloXroute Max Profit
Total anomalies: 575

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