Sat, May 30, 2026

Propagation anomalies - 2026-05-30

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

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

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

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

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

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

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

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

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

-- Column arrival timing: first arrival per column, then min/max of those
column_gossip AS (
    SELECT
        slot,
        min(first_seen) AS first_column_first_seen,
        max(first_seen) AS last_column_first_seen
    FROM (
        SELECT
            slot,
            column_index,
            min(event_date_time) AS first_seen
        FROM libp2p_gossipsub_data_column_sidecar
        WHERE meta_network_name = 'mainnet'
          AND slot_start_date_time >= '2026-05-30' AND slot_start_date_time < '2026-05-30'::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,173
MEV blocks: 6,627 (92.4%)
Local blocks: 546 (7.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 = 1676.0 + 19.26 × blob_count (R² = 0.011)
Residual σ = 624.3ms
Anomalies (>2σ slow): 563 (7.8%)
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
14442912 0 7119 1676 +5443 upbit Local Local
14443584 0 6965 1676 +5289 upbit Local Local
14444896 0 6846 1676 +5170 upbit Local Local
14446240 5 6845 1772 +5073 upbit Local Local
14441568 16 6976 1984 +4992 upbit Local Local
14441504 0 6237 1676 +4561 upbit Local Local
14444320 0 6116 1676 +4440 upbit Local Local
14441229 0 5809 1676 +4133 solo_stakers Local Local
14442432 0 5739 1676 +4063 upbit Local Local
14446784 0 5553 1676 +3877 upbit Local Local
14446287 0 3725 1676 +2049 whale_0x2f38 Local Local
14443296 6 3779 1792 +1987 solo_stakers 0x88a53ec4... BloXroute Regulated
14443705 5 3692 1772 +1920 nethermind_lido 0x856b0004... BloXroute Max Profit
14444032 3 3649 1734 +1915 whale_0x1435 0x88a53ec4... BloXroute Regulated
14443424 1 3603 1695 +1908 blockdaemon 0x8a850621... Ultra Sound
14441307 13 3801 1926 +1875 nethermind_lido 0x853b0078... BloXroute Max Profit
14446049 6 3659 1792 +1867 whale_0x9212 0xb67eaa5e... BloXroute Max Profit
14446654 0 3510 1676 +1834 solo_stakers Local Local
14440480 0 3502 1676 +1826 lido Local Local
14444597 6 3586 1792 +1794 blockdaemon 0x8a850621... Titan Relay
14440771 5 3544 1772 +1772 blockdaemon 0x8a850621... Ultra Sound
14445507 0 3438 1676 +1762 coinbase 0x8a850621... Titan Relay
14446614 3 3478 1734 +1744 blockdaemon 0xa230e2cf... BloXroute Max Profit
14441442 2 3447 1715 +1732 0x8527d16c... Ultra Sound
14444321 6 3516 1792 +1724 blockdaemon 0xb72cae2f... Ultra Sound
14442592 5 3490 1772 +1718 revolut 0x8527d16c... Ultra Sound
14443221 8 3538 1830 +1708 blockdaemon 0x8a850621... Ultra Sound
14443443 1 3396 1695 +1701 ether.fi 0x88857150... Ultra Sound
14441609 0 3373 1676 +1697 blockdaemon_lido 0x88a53ec4... BloXroute Regulated
14445449 7 3501 1811 +1690 blockdaemon 0x8a850621... Titan Relay
14441760 7 3501 1811 +1690 blockdaemon 0x8527d16c... Ultra Sound
14442213 0 3364 1676 +1688 blockdaemon_lido 0x851b00b1... Ultra Sound
14444376 1 3378 1695 +1683 blockdaemon_lido 0xb67eaa5e... Titan Relay
14446175 0 3358 1676 +1682 blockdaemon 0xb67eaa5e... Ultra Sound
14445899 4 3434 1753 +1681 solo_stakers Local Local
14441397 6 3470 1792 +1678 blockdaemon_lido 0x88857150... Ultra Sound
14441659 5 3449 1772 +1677 blockdaemon 0x8a850621... Titan Relay
14445576 2 3389 1715 +1674 blockdaemon_lido 0x823e0146... Ultra Sound
14445862 2 3385 1715 +1670 blockdaemon 0x856b0004... BloXroute Max Profit
14443623 4 3423 1753 +1670 blockdaemon 0x857b0038... Ultra Sound
14441580 0 3342 1676 +1666 blockdaemon 0x8a850621... Ultra Sound
14441679 3 3399 1734 +1665 blockdaemon 0x8a850621... Titan Relay
14446731 1 3357 1695 +1662 whale_0xdc8d 0x8527d16c... Ultra Sound
14445565 1 3354 1695 +1659 0xb26f9666... Ultra Sound
14440749 1 3353 1695 +1658 blockdaemon_lido 0x88a53ec4... BloXroute Max Profit
14440212 1 3351 1695 +1656 blockdaemon_lido 0x8c852572... BloXroute Max Profit
14443630 1 3349 1695 +1654 blockdaemon 0x88a53ec4... BloXroute Max Profit
14444518 0 3328 1676 +1652 blockdaemon 0xb4ce6162... Ultra Sound
14443060 8 3478 1830 +1648 blockdaemon 0x8a850621... Ultra Sound
14442191 8 3476 1830 +1646 blockdaemon 0x88a53ec4... BloXroute Max Profit
14446745 1 3340 1695 +1645 blockdaemon 0x8a850621... Ultra Sound
14444901 11 3532 1888 +1644 Local Local
14446473 0 3315 1676 +1639 blockdaemon 0x8527d16c... Ultra Sound
14446246 0 3314 1676 +1638 whale_0xdc8d 0x88a53ec4... BloXroute Max Profit
14446097 6 3429 1792 +1637 0x8a850621... Ultra Sound
14445392 3 3371 1734 +1637 0x8527d16c... Ultra Sound
14445580 0 3311 1676 +1635 blockdaemon_lido 0xb67eaa5e... BloXroute Max Profit
14444188 2 3349 1715 +1634 whale_0xdc8d 0x8527d16c... Ultra Sound
14440370 5 3405 1772 +1633 0xb67eaa5e... BloXroute Max Profit
14442359 5 3394 1772 +1622 blockdaemon_lido 0xb26f9666... Titan Relay
14446760 1 3316 1695 +1621 0x8527d16c... Ultra Sound
14442013 5 3391 1772 +1619 blockdaemon 0x8527d16c... Ultra Sound
14444496 3 3351 1734 +1617 blockdaemon_lido 0x8527d16c... Ultra Sound
14442114 1 3309 1695 +1614 0x8527d16c... Ultra Sound
14441453 5 3384 1772 +1612 revolut 0x88a53ec4... BloXroute Max Profit
14446105 1 3303 1695 +1608 0x885c17ef... BloXroute Max Profit
14440231 5 3378 1772 +1606 blockdaemon_lido 0xb26f9666... Ultra Sound
14443576 1 3298 1695 +1603 luno 0x856b0004... BloXroute Max Profit
14441020 5 3375 1772 +1603 blockdaemon 0x8a850621... Titan Relay
14446056 3 3333 1734 +1599 blockdaemon 0x8a850621... Titan Relay
14446587 5 3371 1772 +1599 blockdaemon 0x8527d16c... Ultra Sound
14443534 0 3274 1676 +1598 whale_0xdc8d 0x8527d16c... Ultra Sound
14446001 1 3293 1695 +1598 blockdaemon 0x8527d16c... Ultra Sound
14439924 3 3331 1734 +1597 everstake 0x857b0038... BloXroute Max Profit
14443720 4 3350 1753 +1597 blockdaemon 0x8a850621... Ultra Sound
14445853 5 3367 1772 +1595 blockdaemon_lido 0x8527d16c... Ultra Sound
14443368 5 3367 1772 +1595 revolut 0x853b0078... BloXroute Max Profit
14441975 7 3404 1811 +1593 revolut 0x88a53ec4... BloXroute Max Profit
14446299 6 3384 1792 +1592 blockdaemon 0xa230e2cf... BloXroute Max Profit
14440794 6 3381 1792 +1589 blockdaemon 0x8527d16c... Ultra Sound
14442136 6 3378 1792 +1586 blockdaemon 0x8db2a99d... Titan Relay
14440954 0 3261 1676 +1585 whale_0xfd67 0x851b00b1... Ultra Sound
14441900 5 3355 1772 +1583 blockdaemon_lido 0x88857150... Ultra Sound
14443429 0 3258 1676 +1582 blockdaemon 0x8527d16c... Ultra Sound
14446307 3 3315 1734 +1581 whale_0xdc8d 0x8527d16c... Ultra Sound
14444591 8 3410 1830 +1580 p2porg 0x857b0038... BloXroute Regulated
14441789 4 3331 1753 +1578 blockdaemon 0x8db2a99d... Ultra Sound
14440392 5 3347 1772 +1575 blockdaemon 0x8527d16c... Ultra Sound
14443382 5 3345 1772 +1573 blockdaemon_lido 0x856b0004... BloXroute Max Profit
14446107 2 3283 1715 +1568 blockdaemon 0xb26f9666... Titan Relay
14445043 0 3244 1676 +1568 whale_0x8914 0x88857150... Ultra Sound
14446074 2 3279 1715 +1564 blockdaemon 0xb4ce6162... Ultra Sound
14444414 3 3292 1734 +1558 revolut 0x8527d16c... Ultra Sound
14443711 0 3234 1676 +1558 blockdaemon_lido 0xb67eaa5e... Titan Relay
14446114 9 3407 1849 +1558 0xb26f9666... Ultra Sound
14442986 6 3346 1792 +1554 gateway.fmas_lido 0x88a53ec4... BloXroute Regulated
14444360 0 3230 1676 +1554 whale_0xdc8d 0xb26f9666... Titan Relay
14442685 6 3343 1792 +1551 blockdaemon 0xb4ce6162... Ultra Sound
14445399 5 3323 1772 +1551 blockdaemon 0x8527d16c... Ultra Sound
14441794 0 3226 1676 +1550 whale_0xfd67 0x851b00b1... Ultra Sound
14444800 6 3341 1792 +1549 stakefish 0xb26f9666... Titan Relay
14441515 0 3225 1676 +1549 whale_0x8914 0x8527d16c... Ultra Sound
14442676 5 3321 1772 +1549 whale_0xdc8d 0x88857150... Ultra Sound
14443597 5 3319 1772 +1547 blockdaemon 0x88a53ec4... BloXroute Regulated
14440329 7 3357 1811 +1546 luno 0x8527d16c... Ultra Sound
14445559 5 3317 1772 +1545 blockdaemon_lido 0x8db2a99d... BloXroute Max Profit
14445911 3 3274 1734 +1540 whale_0x8ebd 0x85fb0503... BloXroute Max Profit
14445771 3 3272 1734 +1538 blockdaemon 0x8527d16c... Ultra Sound
14443662 6 3329 1792 +1537 blockdaemon_lido 0xb67eaa5e... Ultra Sound
14444242 6 3329 1792 +1537 revolut 0x8527d16c... Ultra Sound
14441692 5 3309 1772 +1537 revolut 0x856b0004... BloXroute Max Profit
14443210 6 3328 1792 +1536 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
14443927 0 3211 1676 +1535 gateway.fmas_lido 0x851b00b1... BloXroute Max Profit
14440680 0 3211 1676 +1535 gateway.fmas_lido 0xb67eaa5e... BloXroute Regulated
14444028 0 3211 1676 +1535 solo_stakers Local Local
14442513 2 3246 1715 +1531 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14444169 12 3437 1907 +1530 blockdaemon 0x8a850621... Titan Relay
14445512 5 3301 1772 +1529 blockdaemon_lido 0x853b0078... BloXroute Max Profit
14444486 0 3202 1676 +1526 p2porg 0x851b00b1... BloXroute Max Profit
14444164 1 3220 1695 +1525 p2porg_lido 0xb67eaa5e... Titan Relay
14440819 5 3294 1772 +1522 0x8527d16c... Ultra Sound
14440315 0 3197 1676 +1521 p2porg 0x851b00b1... BloXroute Max Profit
14446453 6 3309 1792 +1517 gateway.fmas_lido 0xb67eaa5e... BloXroute Regulated
14440206 0 3192 1676 +1516 gateway.fmas_lido 0x8527d16c... Ultra Sound
14443618 14 3461 1946 +1515 0xac23f8cc... Ultra Sound
14444963 0 3190 1676 +1514 whale_0x6ddb 0x851b00b1... Ultra Sound
14444967 10 3382 1869 +1513 whale_0xdc8d 0x8527d16c... Ultra Sound
14445261 2 3227 1715 +1512 blockdaemon_lido 0xac23f8cc... BloXroute Max Profit
14443398 3 3246 1734 +1512 solo_stakers Local Local
14440051 0 3188 1676 +1512 blockdaemon 0x83d6a6ab... BloXroute Max Profit
14446342 0 3186 1676 +1510 blockdaemon_lido 0xb67eaa5e... BloXroute Max Profit
14439630 1 3205 1695 +1510 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
14439854 5 3281 1772 +1509 revolut 0x853b0078... BloXroute Max Profit
14445277 0 3182 1676 +1506 p2porg 0x857b0038... BloXroute Regulated
14440733 0 3178 1676 +1502 whale_0x4b5e 0x8527d16c... Ultra Sound
14439709 0 3176 1676 +1500 gateway.fmas_lido 0x8db2a99d... Ultra Sound
14439669 8 3329 1830 +1499 revolut 0x853b0078... BloXroute Max Profit
14441897 6 3290 1792 +1498 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
14445088 0 3173 1676 +1497 p2porg_lido 0x8527d16c... Ultra Sound
14443002 1 3191 1695 +1496 nethermind_lido 0x88a53ec4... BloXroute Regulated
14444564 1 3186 1695 +1491 blockdaemon_lido 0x8527d16c... Ultra Sound
14441196 9 3340 1849 +1491 whale_0x8914 0x8db2a99d... Ultra Sound
14443217 1 3185 1695 +1490 p2porg_lido 0xb67eaa5e... Titan Relay
14446702 11 3377 1888 +1489 whale_0x8ebd 0x885c17ef... BloXroute Max Profit
14443487 1 3184 1695 +1489 nethermind_lido 0xb67eaa5e... BloXroute Max Profit
14445790 14 3434 1946 +1488 whale_0xdc8d 0x856b0004... BloXroute Max Profit
14445937 4 3241 1753 +1488 revolut 0xa230e2cf... BloXroute Max Profit
14442721 0 3163 1676 +1487 whale_0x3878 0x88857150... Ultra Sound
14439893 0 3163 1676 +1487 blockdaemon_lido 0x88a53ec4... BloXroute Max Profit
14440885 1 3182 1695 +1487 nethermind_lido 0x88a53ec4... BloXroute Max Profit
14442078 5 3259 1772 +1487 blockdaemon_lido 0x885c17ef... BloXroute Max Profit
14445358 0 3162 1676 +1486 whale_0x8914 0x88857150... Ultra Sound
14446497 2 3200 1715 +1485 whale_0x9212 0x88857150... Ultra Sound
14443582 4 3238 1753 +1485 revolut 0x853b0078... BloXroute Max Profit
14443536 0 3159 1676 +1483 gateway.fmas_lido 0x851b00b1... BloXroute Max Profit
14442090 0 3158 1676 +1482 p2porg_lido 0x823e0146... Titan Relay
14443558 4 3234 1753 +1481 whale_0x6ddb 0x850b00e0... Ultra Sound
14440075 0 3156 1676 +1480 whale_0x8914 0x88857150... Ultra Sound
14443109 1 3174 1695 +1479 kraken 0x8a850621... EthGas
14440307 5 3244 1772 +1472 coinbase 0x88a53ec4... BloXroute Regulated
14442970 0 3147 1676 +1471 nethermind_lido 0x851b00b1... BloXroute Max Profit
14443616 1 3164 1695 +1469 coinbase 0x8527d16c... Ultra Sound
14443615 5 3241 1772 +1469 gateway.fmas_lido 0xb67eaa5e... BloXroute Regulated
14443602 3 3202 1734 +1468 whale_0x8ebd 0x8db2a99d... BloXroute Max Profit
14440245 1 3163 1695 +1468 p2porg 0x850b00e0... Flashbots
14445835 1 3162 1695 +1467 solo_stakers 0x85fb0503... BloXroute Max Profit
14439788 0 3141 1676 +1465 whale_0x8ebd 0x8527d16c... Ultra Sound
14442683 0 3141 1676 +1465 blockdaemon_lido 0x88857150... Ultra Sound
14440884 6 3256 1792 +1464 gateway.fmas_lido 0x88a53ec4... BloXroute Max Profit
14443396 1 3158 1695 +1463 gateway.fmas_lido 0x8527d16c... Ultra Sound
14443422 1 3158 1695 +1463 gateway.fmas_lido 0xac23f8cc... Flashbots
14440247 0 3138 1676 +1462 blockdaemon_lido 0x8527d16c... Ultra Sound
14443125 1 3157 1695 +1462 whale_0x8ebd 0xb4ce6162... Ultra Sound
14442983 0 3135 1676 +1459 gateway.fmas_lido 0x8527d16c... Ultra Sound
14443167 2 3172 1715 +1457 blockdaemon 0x823e0146... BloXroute Max Profit
14440556 6 3249 1792 +1457 revolut 0x8527d16c... Ultra Sound
14443995 6 3249 1792 +1457 nethermind_lido 0x88a53ec4... BloXroute Regulated
14441594 6 3247 1792 +1455 revolut 0x8527d16c... Ultra Sound
14441130 5 3227 1772 +1455 whale_0xfd67 0xb67eaa5e... Titan Relay
14446180 0 3128 1676 +1452 gateway.fmas_lido 0x8527d16c... Ultra Sound
14446475 0 3128 1676 +1452 p2porg 0x851b00b1... BloXroute Max Profit
14441904 0 3126 1676 +1450 whale_0x8ebd 0x8db2a99d... BloXroute Max Profit
14441546 1 3144 1695 +1449 p2porg 0xb67eaa5e... BloXroute Regulated
14440525 2 3163 1715 +1448 whale_0xfd67 0x88a53ec4... Aestus
14440241 0 3123 1676 +1447 p2porg 0x851b00b1... BloXroute Max Profit
14442098 5 3218 1772 +1446 0x850b00e0... Flashbots
14445879 0 3121 1676 +1445 gateway.fmas_lido 0x850b00e0... Flashbots
14445679 0 3121 1676 +1445 blockdaemon_lido 0x860d4173... BloXroute Max Profit
14446706 5 3216 1772 +1444 whale_0xfd67 0xb67eaa5e... Titan Relay
14441077 13 3370 1926 +1444 p2porg 0x850b00e0... BloXroute Regulated
14445574 4 3196 1753 +1443 everstake 0x88a53ec4... BloXroute Regulated
14444456 2 3157 1715 +1442 gateway.fmas_lido 0x8db2a99d... BloXroute Max Profit
14445425 0 3118 1676 +1442 whale_0x8ebd 0x8527d16c... Ultra Sound
14445471 0 3117 1676 +1441 p2porg 0x851b00b1... BloXroute Max Profit
14439695 3 3174 1734 +1440 p2porg 0x853b0078... Aestus
14439950 0 3116 1676 +1440 gateway.fmas_lido 0x8527d16c... Ultra Sound
14443847 2 3154 1715 +1439 figment 0x823e0146... BloXroute Max Profit
14443741 0 3115 1676 +1439 stader 0xb67eaa5e... BloXroute Regulated
14445553 1 3133 1695 +1438 gateway.fmas_lido 0xb26f9666... BloXroute Max Profit
14442626 5 3210 1772 +1438 p2porg 0x8db2a99d... BloXroute Max Profit
14440776 6 3229 1792 +1437 p2porg 0xb67eaa5e... BloXroute Max Profit
14446688 0 3111 1676 +1435 whale_0x8ebd 0x8527d16c... Ultra Sound
14442531 1 3128 1695 +1433 coinbase 0xb26f9666... Titan Relay
14444109 1 3128 1695 +1433 p2porg 0x88a53ec4... BloXroute Regulated
14440293 2 3147 1715 +1432 p2porg 0x88a53ec4... BloXroute Regulated
14445592 1 3127 1695 +1432 coinbase 0x885c17ef... BloXroute Max Profit
14444485 5 3204 1772 +1432 gateway.fmas_lido 0x8527d16c... Ultra Sound
14444448 4 3183 1753 +1430 coinbase 0x88a53ec4... BloXroute Max Profit
14439762 7 3240 1811 +1429 blockdaemon 0x88857150... Ultra Sound
14446574 0 3105 1676 +1429 0xa230e2cf... BloXroute Max Profit
14439794 7 3239 1811 +1428 whale_0xfd67 0xb67eaa5e... BloXroute Regulated
14440140 4 3180 1753 +1427 0x857b0038... BloXroute Regulated
14445839 1 3121 1695 +1426 whale_0x8ebd 0x8527d16c... Ultra Sound
14445718 5 3197 1772 +1425 p2porg 0x885c17ef... BloXroute Max Profit
14446690 1 3119 1695 +1424 whale_0x8ebd 0x885c17ef... BloXroute Max Profit
14441793 1 3119 1695 +1424 whale_0x8ebd 0x8527d16c... Ultra Sound
14444454 3 3157 1734 +1423 p2porg 0x853b0078... BloXroute Regulated
14445770 1 3118 1695 +1423 p2porg 0xb26f9666... Titan Relay
14441773 6 3213 1792 +1421 p2porg 0x850b00e0... BloXroute Max Profit
14440675 1 3116 1695 +1421 kiln 0x853b0078... BloXroute Max Profit
14441543 2 3135 1715 +1420 blockdaemon 0x8527d16c... Ultra Sound
14445561 2 3135 1715 +1420 whale_0x8914 0x88a53ec4... BloXroute Max Profit
14444979 7 3228 1811 +1417 p2porg 0x853b0078... BloXroute Regulated
14440054 2 3131 1715 +1416 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
14443559 0 3092 1676 +1416 coinbase 0x8db2a99d... Titan Relay
14440319 0 3092 1676 +1416 whale_0xedc6 0x851b00b1... BloXroute Max Profit
14446228 3 3149 1734 +1415 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14443968 0 3091 1676 +1415 p2porg_lido 0x8527d16c... Ultra Sound
14446586 0 3091 1676 +1415 blockdaemon_lido 0xb26f9666... Titan Relay
14445502 5 3185 1772 +1413 p2porg 0xb26f9666... Titan Relay
14446154 8 3242 1830 +1412 blockdaemon_lido 0x85fb0503... BloXroute Max Profit
14445739 0 3087 1676 +1411 p2porg 0xa230e2cf... BloXroute Max Profit
14445668 0 3086 1676 +1410 p2porg_lido 0xb26f9666... Titan Relay
14441439 7 3220 1811 +1409 p2porg 0x850b00e0... BloXroute Max Profit
14439971 0 3085 1676 +1409 p2porg 0x851b00b1... BloXroute Max Profit
14444956 3 3142 1734 +1408 p2porg_lido 0xa03781b9... Ultra Sound
14440034 0 3083 1676 +1407 coinbase 0x8527d16c... Ultra Sound
14443484 8 3237 1830 +1407 whale_0x3878 0x88857150... Ultra Sound
14441133 1 3102 1695 +1407 p2porg 0x853b0078... Agnostic Gnosis
14443791 3 3138 1734 +1404 whale_0x8ebd 0x8527d16c... Ultra Sound
14443656 14 3349 1946 +1403 blockdaemon 0x8527d16c... Ultra Sound
14445791 0 3079 1676 +1403 whale_0x8ebd 0x823e0146... Flashbots
14442014 2 3117 1715 +1402 coinbase 0x88a53ec4... BloXroute Max Profit
14446269 2 3117 1715 +1402 abyss_finance 0x850b00e0... Flashbots
14443238 6 3194 1792 +1402 0x88a53ec4... BloXroute Max Profit
14443726 6 3194 1792 +1402 gateway.fmas_lido 0x8527d16c... Ultra Sound
14441633 0 3077 1676 +1401 whale_0x8ebd 0x856b0004... BloXroute Max Profit
14444473 6 3192 1792 +1400 kiln 0x8527d16c... Ultra Sound
14439624 0 3076 1676 +1400 kiln 0x851b00b1... Flashbots
14442103 0 3076 1676 +1400 nethermind_lido 0x88a53ec4... BloXroute Regulated
14443157 2 3113 1715 +1398 p2porg 0x853b0078... BloXroute Max Profit
14445434 5 3170 1772 +1398 whale_0x8914 0x88857150... Ultra Sound
14441045 5 3169 1772 +1397 coinbase 0x8527d16c... Ultra Sound
14445056 5 3168 1772 +1396 whale_0x3878 0x8527d16c... Ultra Sound
14443989 5 3168 1772 +1396 whale_0x8ee5 0xb67eaa5e... BloXroute Max Profit
14442160 2 3109 1715 +1394 0x885c17ef... BloXroute Max Profit
14440449 6 3186 1792 +1394 0x8527d16c... Ultra Sound
14442855 0 3070 1676 +1394 p2porg 0x8db2a99d... Titan Relay
14440905 8 3223 1830 +1393 whale_0xfd67 0xb67eaa5e... Titan Relay
14446208 3 3126 1734 +1392 whale_0x8ebd 0x8527d16c... Ultra Sound
14446141 6 3183 1792 +1391 gateway.fmas_lido 0x8527d16c... Ultra Sound
14445137 1 3086 1695 +1391 whale_0x8ebd 0x856b0004... BloXroute Max Profit
14444411 3 3124 1734 +1390 coinbase 0x8527d16c... Ultra Sound
14439913 5 3162 1772 +1390 gateway.fmas_lido 0x856b0004... BloXroute Max Profit
14439626 6 3181 1792 +1389 whale_0x8914 0x88857150... Ultra Sound
14441396 7 3200 1811 +1389 blockdaemon_lido 0x88857150... Ultra Sound
14445176 1 3084 1695 +1389 p2porg 0x823e0146... BloXroute Max Profit
14442949 5 3161 1772 +1389 p2porg_lido 0x8527d16c... Ultra Sound
14446370 2 3103 1715 +1388 p2porg 0x853b0078... BloXroute Max Profit
14445299 1 3083 1695 +1388 coinbase 0xb7c5c39a... BloXroute Max Profit
14444225 5 3159 1772 +1387 stader 0x8527d16c... Ultra Sound
14440453 0 3062 1676 +1386 coinbase 0x8527d16c... Ultra Sound
14443442 8 3215 1830 +1385 gateway.fmas_lido 0x8527d16c... Ultra Sound
14442487 1 3078 1695 +1383 coinbase 0x8527d16c... Ultra Sound
14440891 0 3058 1676 +1382 abyss_finance 0x853b0078... Flashbots
14441029 1 3076 1695 +1381 blockdaemon 0x8527d16c... Ultra Sound
14441634 5 3153 1772 +1381 p2porg_lido 0x8527d16c... Ultra Sound
14443869 7 3191 1811 +1380 whale_0xfd67 0xb67eaa5e... Titan Relay
14440849 0 3056 1676 +1380 whale_0x8ebd 0x856b0004... BloXroute Max Profit
14445526 0 3056 1676 +1380 p2porg 0x851b00b1... BloXroute Max Profit
14443766 0 3056 1676 +1380 whale_0xedc6 0x851b00b1... BloXroute Max Profit
14444052 0 3056 1676 +1380 whale_0xedc6 0x851b00b1... BloXroute Max Profit
14444260 4 3132 1753 +1379 p2porg_lido 0x8527d16c... Ultra Sound
14440895 4 3131 1753 +1378 whale_0x8ebd Local Local
14441388 1 3073 1695 +1378 p2porg_lido 0x823e0146... Flashbots
14441877 6 3169 1792 +1377 p2porg 0x88a53ec4... BloXroute Max Profit
14441930 2 3091 1715 +1376 everstake 0x885c17ef... BloXroute Max Profit
14443415 7 3187 1811 +1376 coinbase 0x88a53ec4... BloXroute Regulated
14441162 1 3071 1695 +1376 coinbase 0xac23f8cc... BloXroute Max Profit
14446495 7 3186 1811 +1375 coinbase 0xa230e2cf... BloXroute Max Profit
14444641 0 3051 1676 +1375 p2porg 0xac23f8cc... BloXroute Max Profit
14442215 1 3070 1695 +1375 0x8db2a99d... Agnostic Gnosis
14446298 0 3049 1676 +1373 0x88a53ec4... BloXroute Regulated
14441565 2 3087 1715 +1372 kiln 0x88a53ec4... BloXroute Max Profit
14440229 0 3048 1676 +1372 whale_0x8ebd 0x8527d16c... Ultra Sound
14443054 1 3066 1695 +1371 figment 0xb26f9666... BloXroute Max Profit
14445785 1 3065 1695 +1370 p2porg_lido 0x8527d16c... Ultra Sound
14441798 1 3064 1695 +1369 0x8527d16c... Ultra Sound
14444980 1 3064 1695 +1369 kiln 0xb26f9666... BloXroute Max Profit
14440483 6 3160 1792 +1368 p2porg 0x853b0078... BloXroute Regulated
14440859 0 3044 1676 +1368 whale_0x8ebd 0x851b00b1... BloXroute Max Profit
14446283 1 3063 1695 +1368 coinbase 0xa230e2cf... BloXroute Max Profit
14441510 0 3043 1676 +1367 p2porg_lido 0x823e0146... Flashbots
14442472 5 3139 1772 +1367 blockdaemon_lido 0xb26f9666... Titan Relay
14439775 2 3081 1715 +1366 0x8527d16c... Ultra Sound
14446177 6 3158 1792 +1366 p2porg 0xb67eaa5e... BloXroute Max Profit
14442293 0 3042 1676 +1366 p2porg_lido 0x8527d16c... Ultra Sound
14440751 2 3080 1715 +1365 p2porg_lido 0x8527d16c... Ultra Sound
14444430 0 3041 1676 +1365 coinbase 0x8527d16c... Ultra Sound
14442130 1 3060 1695 +1365 figment 0x853b0078... BloXroute Max Profit
14443197 5 3137 1772 +1365 whale_0x8ebd 0x8527d16c... Ultra Sound
14440019 2 3079 1715 +1364 p2porg_lido 0x8527d16c... Ultra Sound
14446289 8 3194 1830 +1364 gateway.fmas_lido 0x8527d16c... Ultra Sound
14444111 8 3194 1830 +1364 p2porg 0x853b0078... BloXroute Regulated
14445533 1 3057 1695 +1362 kiln 0xb67eaa5e... BloXroute Regulated
14443304 0 3037 1676 +1361 kiln 0x851b00b1... BloXroute Max Profit
14441763 4 3114 1753 +1361 p2porg_lido 0x8527d16c... Ultra Sound
14443844 6 3152 1792 +1360 whale_0x8914 0x88857150... Ultra Sound
14446552 5 3132 1772 +1360 whale_0x8ebd 0x8527d16c... Ultra Sound
14445551 0 3034 1676 +1358 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14440428 0 3034 1676 +1358 0x850b00e0... Flashbots
14442446 5 3130 1772 +1358 coinbase 0x88857150... Ultra Sound
14440360 2 3072 1715 +1357 coinbase 0x856b0004... BloXroute Max Profit
14441033 0 3033 1676 +1357 coinbase 0x88857150... Ultra Sound
14440185 9 3206 1849 +1357 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
14446769 2 3071 1715 +1356 coinbase 0x856b0004... BloXroute Max Profit
14441577 0 3032 1676 +1356 0x8527d16c... Ultra Sound
14442723 0 3032 1676 +1356 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
14443520 0 3030 1676 +1354 whale_0x8ebd 0x8527d16c... Ultra Sound
14444674 0 3030 1676 +1354 whale_0x8ebd 0x8527d16c... Ultra Sound
14443933 0 3029 1676 +1353 coinbase 0x8527d16c... Ultra Sound
14440342 8 3183 1830 +1353 whale_0x4b5e 0x8527d16c... Ultra Sound
14444050 1 3047 1695 +1352 coinbase 0x8527d16c... Ultra Sound
14443592 9 3201 1849 +1352 figment 0x853b0078... BloXroute Max Profit
14444498 0 3026 1676 +1350 whale_0x8ebd 0x8527d16c... Ultra Sound
14444202 6 3141 1792 +1349 coinbase 0x88a53ec4... BloXroute Max Profit
14439976 0 3025 1676 +1349 0xba003e46... BloXroute Max Profit
14441562 1 3044 1695 +1349 coinbase 0x8527d16c... Ultra Sound
14443700 5 3120 1772 +1348 coinbase 0x8527d16c... Ultra Sound
14443299 6 3139 1792 +1347 whale_0x8ebd 0x8527d16c... Ultra Sound
14442744 1 3041 1695 +1346 0x8527d16c... Ultra Sound
14444018 5 3117 1772 +1345 coinbase 0x8527d16c... Ultra Sound
14446384 0 3020 1676 +1344 p2porg_lido 0x8527d16c... Ultra Sound
14440971 1 3039 1695 +1344 p2porg_lido 0x8527d16c... Ultra Sound
14441780 1 3039 1695 +1344 coinbase 0x8527d16c... Ultra Sound
14443241 5 3116 1772 +1344 kiln 0x8527d16c... Ultra Sound
14440145 0 3019 1676 +1343 kiln 0x8527d16c... Ultra Sound
14440515 0 3019 1676 +1343 whale_0x8ebd 0x8527d16c... Ultra Sound
14441648 2 3057 1715 +1342 p2porg 0x853b0078... BloXroute Max Profit
14441117 3 3076 1734 +1342 whale_0x8ebd 0x8527d16c... Ultra Sound
14441817 4 3095 1753 +1342 kiln 0x823e0146... Titan Relay
14445610 1 3037 1695 +1342 kiln 0xa230e2cf... BloXroute Max Profit
14440559 5 3114 1772 +1342 p2porg 0x853b0078... BloXroute Max Profit
14445887 11 3229 1888 +1341 kiln 0x885c17ef... BloXroute Max Profit
14445588 6 3132 1792 +1340 coinbase 0xb26f9666... Titan Relay
14446515 1 3035 1695 +1340 kiln 0x8527d16c... Ultra Sound
14443914 5 3111 1772 +1339 coinbase 0x8527d16c... Ultra Sound
14444130 9 3188 1849 +1339 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14440170 0 3014 1676 +1338 everstake 0xb26f9666... Titan Relay
14444532 0 3014 1676 +1338 kiln 0x8527d16c... Ultra Sound
14446338 0 3012 1676 +1336 p2porg_lido 0x8527d16c... Ultra Sound
14445638 1 3031 1695 +1336 p2porg_lido 0x88857150... Ultra Sound
14442367 9 3185 1849 +1336 coinbase 0x88a53ec4... BloXroute Max Profit
14442026 2 3050 1715 +1335 p2porg 0x853b0078... BloXroute Max Profit
14445271 6 3127 1792 +1335 whale_0x8ebd 0xa230e2cf... BloXroute Max Profit
14442761 0 3011 1676 +1335 p2porg_lido 0x8527d16c... Ultra Sound
14445135 5 3107 1772 +1335 piertwo Local Local
14443839 1 3029 1695 +1334 coinbase 0x88857150... Ultra Sound
14446195 6 3125 1792 +1333 coinbase 0x8527d16c... Ultra Sound
14444795 0 3009 1676 +1333 whale_0x8ebd 0x805e28e6... BloXroute Max Profit
14445115 0 3009 1676 +1333 everstake 0xb26f9666... Titan Relay
14441825 6 3124 1792 +1332 whale_0x8ebd 0xb26f9666... BloXroute Max Profit
14444865 0 3008 1676 +1332 coinbase 0x8527d16c... Ultra Sound
14445318 8 3162 1830 +1332 p2porg 0x88a53ec4... BloXroute Regulated
14443258 5 3104 1772 +1332 whale_0x8ebd 0x8527d16c... Ultra Sound
14446506 0 3007 1676 +1331 coinbase 0x8527d16c... Ultra Sound
14440763 0 3007 1676 +1331 p2porg_lido 0xa03781b9... Ultra Sound
14444880 8 3161 1830 +1331 coinbase 0xb67eaa5e... BloXroute Max Profit
14443980 1 3025 1695 +1330 coinbase 0x88857150... Ultra Sound
14442436 0 3004 1676 +1328 whale_0x8ebd 0x8527d16c... Ultra Sound
14444113 1 3023 1695 +1328 coinbase 0x8527d16c... Ultra Sound
14440153 5 3100 1772 +1328 whale_0x8ebd 0x8527d16c... Ultra Sound
14443915 5 3100 1772 +1328 coinbase 0x8527d16c... Ultra Sound
14442218 4 3080 1753 +1327 p2porg 0x8db2a99d... Titan Relay
14442599 0 3002 1676 +1326 whale_0x8ebd 0x805e28e6... Ultra Sound
14443861 1 3021 1695 +1326 coinbase 0xb26f9666... BloXroute Regulated
14441632 6 3117 1792 +1325 coinbase 0x856b0004... BloXroute Max Profit
14442321 0 3001 1676 +1325 whale_0x8ebd 0x8527d16c... Ultra Sound
14442394 1 3020 1695 +1325 kiln 0x8db2a99d... BloXroute Max Profit
14444217 6 3116 1792 +1324 coinbase 0x8527d16c... Ultra Sound
14440138 10 3193 1869 +1324 p2porg_lido 0x8527d16c... Ultra Sound
14441558 0 3000 1676 +1324 everstake 0xb67eaa5e... BloXroute Max Profit
14443024 0 3000 1676 +1324 coinbase 0x88857150... Ultra Sound
14440750 1 3019 1695 +1324 coinbase 0x823e0146... BloXroute Max Profit
14440283 5 3096 1772 +1324 0x823e0146... Ultra Sound
14443627 0 2998 1676 +1322 0x851b00b1... BloXroute Max Profit
14443545 2 3036 1715 +1321 whale_0x8ebd 0x8527d16c... Ultra Sound
14443196 6 3113 1792 +1321 kiln 0xa230e2cf... BloXroute Max Profit
14441717 0 2997 1676 +1321 kiln 0x823e0146... Ultra Sound
14444642 5 3093 1772 +1321 p2porg 0x853b0078... BloXroute Max Profit
14443353 11 3208 1888 +1320 kiln Local Local
14441279 9 3169 1849 +1320 kiln 0x856b0004... BloXroute Max Profit
14440396 3 3053 1734 +1319 whale_0x8ebd 0x8527d16c... Ultra Sound
14440674 0 2995 1676 +1319 p2porg_lido 0x88857150... Ultra Sound
14446652 8 3149 1830 +1319 coinbase 0x8527d16c... Ultra Sound
14445247 12 3226 1907 +1319 gateway.fmas_lido 0x8527d16c... Ultra Sound
14444281 1 3014 1695 +1319 p2porg_lido 0x8db2a99d... BloXroute Max Profit
14441312 5 3091 1772 +1319 coinbase 0x8527d16c... Ultra Sound
14446155 1 3013 1695 +1318 whale_0x8ebd 0x8db2a99d... BloXroute Max Profit
14445796 5 3090 1772 +1318 p2porg_lido 0x8527d16c... Ultra Sound
14442664 5 3090 1772 +1318 stakingfacilities_lido 0xb26f9666... Titan Relay
14445431 1 3012 1695 +1317 coinbase 0x8db2a99d... BloXroute Max Profit
14441076 1 3012 1695 +1317 whale_0x8ebd 0x8527d16c... Ultra Sound
14445809 2 3029 1715 +1314 kiln 0xb26f9666... BloXroute Max Profit
14444825 7 3125 1811 +1314 whale_0x8ebd 0x856b0004... BloXroute Max Profit
14446623 0 2990 1676 +1314 p2porg_lido 0x8527d16c... Ultra Sound
14440609 1 3009 1695 +1314 p2porg 0x856b0004... BloXroute Max Profit
14443701 5 3085 1772 +1313 coinbase 0x8527d16c... Ultra Sound
14440932 0 2988 1676 +1312 coinbase 0x8527d16c... Ultra Sound
14443471 5 3083 1772 +1311 p2porg_lido 0x8527d16c... Ultra Sound
14445033 10 3179 1869 +1310 blockdaemon 0x8527d16c... Ultra Sound
14440726 5 3082 1772 +1310 whale_0x8ebd 0x823e0146... Flashbots
14440923 6 3101 1792 +1309 p2porg 0x8db2a99d... Titan Relay
14442948 0 2985 1676 +1309 whale_0x8ebd 0x8527d16c... Ultra Sound
14443555 3 3041 1734 +1307 coinbase 0x8527d16c... Ultra Sound
14442018 0 2983 1676 +1307 everstake 0x88a53ec4... BloXroute Regulated
14445270 5 3079 1772 +1307 whale_0x8ebd 0x8527d16c... Ultra Sound
14440361 2 3021 1715 +1306 everstake 0x88a53ec4... BloXroute Regulated
14441660 3 3040 1734 +1306 0xb26f9666... BloXroute Max Profit
14444911 5 3078 1772 +1306 coinbase 0x8527d16c... Ultra Sound
14446068 0 2980 1676 +1304 kiln 0xb26f9666... BloXroute Max Profit
14441142 5 3076 1772 +1304 whale_0x8ebd 0x8db2a99d... BloXroute Max Profit
14440433 5 3076 1772 +1304 kiln 0x8527d16c... Ultra Sound
14444353 3 3037 1734 +1303 0x853b0078... BloXroute Max Profit
14440718 0 2979 1676 +1303 kiln 0x8527d16c... Ultra Sound
14443229 0 2978 1676 +1302 coinbase 0x88857150... Ultra Sound
14442380 0 2978 1676 +1302 kiln 0x8527d16c... Ultra Sound
14443585 1 2997 1695 +1302 kraken Local Local
14446121 2 3016 1715 +1301 kiln 0xac23f8cc... Ultra Sound
14439992 5 3073 1772 +1301 whale_0x8ebd 0x8527d16c... Ultra Sound
14440714 4 3053 1753 +1300 whale_0x8ebd 0x853b0078... BloXroute Max Profit
14441146 5 3072 1772 +1300 kiln 0x88a53ec4... BloXroute Max Profit
14445562 6 3091 1792 +1299 kiln 0xb26f9666... BloXroute Max Profit
14444280 5 3071 1772 +1299 whale_0x8ebd 0x856b0004... BloXroute Max Profit
14439619 6 3090 1792 +1298 figment 0x856b0004... BloXroute Max Profit
14439726 6 3090 1792 +1298 whale_0x8ee5 0x8527d16c... Ultra Sound
14439836 0 2973 1676 +1297 0xb26f9666... BloXroute Max Profit
14446129 5 3069 1772 +1297 whale_0x8ebd 0xb26f9666... Titan Relay
14443998 5 3069 1772 +1297 whale_0x8ebd 0x8527d16c... Ultra Sound
14441532 16 3280 1984 +1296 whale_0x4b5e 0x88857150... Ultra Sound
14443315 0 2971 1676 +1295 kiln 0x8527d16c... Ultra Sound
14443841 5 3067 1772 +1295 p2porg_lido 0x8527d16c... Ultra Sound
14443137 6 3086 1792 +1294 p2porg 0x8527d16c... Ultra Sound
14443916 0 2970 1676 +1294 coinbase 0x8db2a99d... BloXroute Max Profit
14439993 8 3124 1830 +1294 coinbase 0x8527d16c... Ultra Sound
14445652 1 2989 1695 +1294 coinbase 0xb26f9666... BloXroute Max Profit
14445459 1 2989 1695 +1294 coinbase 0x8527d16c... Ultra Sound
14444716 1 2989 1695 +1294 kiln 0x8527d16c... Ultra Sound
14444285 6 3085 1792 +1293 nethermind_lido 0x856b0004... BloXroute Max Profit
14445749 7 3104 1811 +1293 coinbase 0x8db2a99d... Ultra Sound
14441369 7 3104 1811 +1293 coinbase 0x8527d16c... Ultra Sound
14445314 8 3123 1830 +1293 p2porg 0xb26f9666... Titan Relay
14443335 1 2988 1695 +1293 kiln 0x8527d16c... Ultra Sound
14441059 3 3025 1734 +1291 coinbase 0x85fb0503... BloXroute Max Profit
14440317 6 3082 1792 +1290 kiln 0x8527d16c... Ultra Sound
14446581 1 2985 1695 +1290 everstake 0xb26f9666... Titan Relay
14441483 6 3081 1792 +1289 coinbase 0x88a53ec4... BloXroute Regulated
14446686 6 3081 1792 +1289 0x85fb0503... BloXroute Max Profit
14445616 5 3060 1772 +1288 p2porg 0x856b0004... BloXroute Max Profit
14443413 0 2963 1676 +1287 coinbase 0x8527d16c... Ultra Sound
14444915 5 3059 1772 +1287 nethermind_lido 0x88a53ec4... BloXroute Regulated
14442042 3 3020 1734 +1286 p2porg_lido 0x8527d16c... Ultra Sound
14441371 0 2961 1676 +1285 kiln 0x8db2a99d... BloXroute Max Profit
14444698 2 2999 1715 +1284 kiln 0x8527d16c... Ultra Sound
14441171 0 2960 1676 +1284 kiln 0x88a53ec4... BloXroute Max Profit
14444950 5 3056 1772 +1284 coinbase 0x8527d16c... Ultra Sound
14442568 0 2959 1676 +1283 everstake 0x8527d16c... Ultra Sound
14443022 1 2978 1695 +1283 kiln 0x8527d16c... Ultra Sound
14443526 3 3016 1734 +1282 coinbase 0x8527d16c... Ultra Sound
14443001 7 3093 1811 +1282 whale_0x8ebd 0x8527d16c... Ultra Sound
14443166 5 3054 1772 +1282 coinbase 0x8527d16c... Ultra Sound
14443785 6 3073 1792 +1281 kiln 0x8527d16c... Ultra Sound
14440724 0 2957 1676 +1281 everstake 0x8527d16c... Ultra Sound
14439785 6 3072 1792 +1280 coinbase 0x8527d16c... Ultra Sound
14446202 0 2956 1676 +1280 everstake 0x8527d16c... Ultra Sound
14442328 1 2975 1695 +1280 coinbase 0x8527d16c... Ultra Sound
14445786 9 3129 1849 +1280 nethermind_lido 0x88a53ec4... BloXroute Max Profit
14441429 0 2955 1676 +1279 everstake 0x8527d16c... Ultra Sound
14445377 5 3051 1772 +1279 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14442597 2 2993 1715 +1278 everstake 0xb26f9666... Titan Relay
14443381 6 3070 1792 +1278 kiln 0x856b0004... Aestus
14444295 3 3012 1734 +1278 kiln 0x8527d16c... Ultra Sound
14446513 5 3049 1772 +1277 p2porg 0xb26f9666... BloXroute Max Profit
14445756 0 2952 1676 +1276 nethermind_lido 0x85fb0503... BloXroute Max Profit
14442596 5 3048 1772 +1276 0x823e0146... BloXroute Max Profit
14444925 5 3048 1772 +1276 kiln 0x88857150... Ultra Sound
14443366 6 3067 1792 +1275 coinbase 0x8527d16c... Ultra Sound
14446526 11 3163 1888 +1275 coinbase 0xb26f9666... BloXroute Max Profit
14439925 0 2951 1676 +1275 coinbase 0xa03781b9... Ultra Sound
14441387 0 2951 1676 +1275 everstake 0x8527d16c... Ultra Sound
14442196 1 2970 1695 +1275 kiln 0x8527d16c... Ultra Sound
14445356 6 3066 1792 +1274 p2porg 0x823e0146... Titan Relay
14442832 0 2950 1676 +1274 kiln 0x8527d16c... Ultra Sound
14441765 10 3142 1869 +1273 p2porg_lido 0x8527d16c... Ultra Sound
14444416 14 3219 1946 +1273 p2porg_lido 0x8527d16c... Ultra Sound
14444357 1 2968 1695 +1273 kiln 0x8527d16c... Ultra Sound
14445861 5 3045 1772 +1273 kiln 0x8527d16c... Ultra Sound
14440043 0 2948 1676 +1272 kiln 0x8527d16c... Ultra Sound
14440768 0 2948 1676 +1272 everstake 0x8527d16c... Ultra Sound
14442857 1 2967 1695 +1272 kiln 0x8527d16c... Ultra Sound
14440683 2 2985 1715 +1270 everstake 0x88857150... Ultra Sound
14442873 3 3004 1734 +1270 coinbase 0xac23f8cc... Ultra Sound
14443981 7 3080 1811 +1269 kiln 0x88a53ec4... BloXroute Max Profit
14441957 0 2945 1676 +1269 everstake 0x8527d16c... Ultra Sound
14446351 6 3060 1792 +1268 everstake 0x8527d16c... Ultra Sound
14443063 2 2982 1715 +1267 kiln 0x8527d16c... Ultra Sound
14444802 0 2943 1676 +1267 everstake 0xb26f9666... Titan Relay
14444009 0 2942 1676 +1266 kiln 0x8527d16c... Ultra Sound
14441488 6 3057 1792 +1265 coinbase 0x88857150... Ultra Sound
14439873 7 3075 1811 +1264 p2porg_lido 0x8527d16c... Ultra Sound
14444118 5 3035 1772 +1263 kiln 0x8527d16c... Ultra Sound
14443797 5 3034 1772 +1262 0x8527d16c... Ultra Sound
14442184 6 3053 1792 +1261 everstake 0x88a53ec4... BloXroute Max Profit
14445316 0 2937 1676 +1261 coinbase 0xb26f9666... BloXroute Regulated
14442225 7 3071 1811 +1260 p2porg_lido 0x8527d16c... Ultra Sound
14444197 0 2936 1676 +1260 kiln 0x8527d16c... Ultra Sound
14440413 1 2955 1695 +1260 kiln 0x8527d16c... Ultra Sound
14441723 0 2935 1676 +1259 everstake 0x8527d16c... Ultra Sound
14445403 6 3050 1792 +1258 0x88857150... Ultra Sound
14445989 11 3146 1888 +1258 nethermind_lido 0x8c852572... BloXroute Max Profit
14446578 0 2934 1676 +1258 kiln 0x8527d16c... Ultra Sound
14440292 0 2934 1676 +1258 everstake 0xb67eaa5e... BloXroute Max Profit
14440228 0 2934 1676 +1258 whale_0x8ebd 0xb4ce6162... Ultra Sound
14443667 1 2953 1695 +1258 coinbase 0x8527d16c... Ultra Sound
14440258 1 2953 1695 +1258 everstake 0x8527d16c... Ultra Sound
14441862 5 3030 1772 +1258 p2porg_lido 0x8527d16c... Ultra Sound
14443888 9 3107 1849 +1258 coinbase 0x8527d16c... Ultra Sound
14444686 6 3049 1792 +1257 whale_0x8ebd 0x856b0004... Ultra Sound
14442648 8 3087 1830 +1257 whale_0x8ebd 0x8527d16c... Ultra Sound
14440095 1 2952 1695 +1257 everstake 0x88a53ec4... BloXroute Max Profit
14443360 1 2952 1695 +1257 everstake 0x88857150... Ultra Sound
14445474 0 2932 1676 +1256 everstake 0xb26f9666... Titan Relay
14440864 0 2932 1676 +1256 solo_stakers 0x88a53ec4... BloXroute Regulated
14445364 5 3027 1772 +1255 kiln 0x856b0004... BloXroute Max Profit
14443023 5 3027 1772 +1255 kiln 0x8527d16c... Ultra Sound
14442919 0 2930 1676 +1254 everstake 0x8527d16c... Ultra Sound
14444346 8 3084 1830 +1254 whale_0x8ebd 0x8527d16c... Ultra Sound
14442176 1 2949 1695 +1254 everstake 0x8527d16c... Ultra Sound
14440298 11 3141 1888 +1253 p2porg_lido 0x8527d16c... Ultra Sound
14440541 5 3025 1772 +1253 kiln 0xb26f9666... BloXroute Regulated
14441284 10 3121 1869 +1252 coinbase 0x8527d16c... Ultra Sound
14440829 7 3063 1811 +1252 p2porg_lido 0x8527d16c... Ultra Sound
14445357 0 2928 1676 +1252 everstake 0xb26f9666... Titan Relay
14445072 5 3024 1772 +1252 kiln 0xac23f8cc... Titan Relay
14445054 1 2946 1695 +1251 everstake 0x8527d16c... Ultra Sound
14443178 5 3023 1772 +1251 kiln 0x8527d16c... Ultra Sound
14440937 0 2926 1676 +1250 kiln 0x8527d16c... Ultra Sound
14441958 0 2926 1676 +1250 kiln 0xb72cae2f... Ultra Sound
14444505 0 2926 1676 +1250 everstake 0x8527d16c... Ultra Sound
14446717 0 2926 1676 +1250 everstake 0x85fb0503... BloXroute Max Profit
14439708 0 2925 1676 +1249 whale_0x8ebd 0xb4ce6162... Ultra Sound
14442741 8 3079 1830 +1249 kraken 0x8a850621... EthGas
14442901 5 3021 1772 +1249 everstake 0x88a53ec4... BloXroute Regulated
Total anomalies: 563

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