Tue, Apr 21, 2026

Propagation anomalies - 2026-04-21

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-21' AND slot_start_date_time < '2026-04-21'::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-21' AND slot_start_date_time < '2026-04-21'::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-21' AND slot_start_date_time < '2026-04-21'::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-21' AND slot_start_date_time < '2026-04-21'::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-21' AND slot_start_date_time < '2026-04-21'::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-21' AND slot_start_date_time < '2026-04-21'::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-21' AND slot_start_date_time < '2026-04-21'::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-21' AND slot_start_date_time < '2026-04-21'::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,184
MEV blocks: 6,810 (94.8%)
Local blocks: 374 (5.2%)

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 = 1672.2 + 17.88 × blob_count (R² = 0.011)
Residual σ = 591.8ms
Anomalies (>2σ slow): 587 (8.2%)
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
14162906 0 4022 1672 +2350 whale_0x8ebd Local Local
14160436 3 3962 1726 +2236 luno 0x857b0038... BloXroute Regulated
14160333 7 3936 1797 +2139 blockdaemon_lido 0x857b0038... BloXroute Max Profit
14165088 10 3887 1851 +2036 ether.fi 0x856b0004... Ultra Sound
14161126 6 3807 1779 +2028 kiln 0x857b0038... BloXroute Regulated
14164071 6 3791 1779 +2012 kraken 0x8db2a99d... BloXroute Max Profit
14163434 10 3843 1851 +1992 stakingfacilities_lido 0x88a53ec4... BloXroute Regulated
14160021 5 3724 1762 +1962 blockdaemon_lido 0x850b00e0... Ultra Sound
14161073 1 3604 1690 +1914 figment 0x8527d16c... Ultra Sound
14160222 0 3565 1672 +1893 nethermind_lido 0xb26f9666... Aestus
14165856 10 3738 1851 +1887 kraken 0x8527d16c... EthGas
14164590 0 3545 1672 +1873 whale_0xb83e 0x8db2a99d... Titan Relay
14164352 0 3527 1672 +1855 blockdaemon 0x8527d16c... Ultra Sound
14159782 1 3543 1690 +1853 blockdaemon_lido 0x88857150... Ultra Sound
14163733 3 3564 1726 +1838 blockdaemon 0xb67eaa5e... BloXroute Regulated
14160468 1 3516 1690 +1826 stakefish 0x853b0078... Ultra Sound
14159847 3 3542 1726 +1816 nethermind_lido 0xb26f9666... Aestus
14161422 8 3624 1815 +1809 whale_0xdc8d 0x8527d16c... Ultra Sound
14160751 6 3568 1779 +1789 blockdaemon_lido 0x88857150... Ultra Sound
14161022 5 3549 1762 +1787 blockdaemon 0x8527d16c... Ultra Sound
14164939 1 3469 1690 +1779 0x850b00e0... Ultra Sound
14160039 0 3444 1672 +1772 blockdaemon_lido 0x851b00b1... Ultra Sound
14161216 2 3475 1708 +1767 bitstamp 0x856b0004... Ultra Sound
14163355 0 3420 1672 +1748 blockdaemon_lido 0x850b00e0... Ultra Sound
14163961 2 3449 1708 +1741 blockdaemon_lido 0xb67eaa5e... Titan Relay
14160281 0 3409 1672 +1737 blockdaemon_lido 0x8527d16c... Ultra Sound
14161203 1 3421 1690 +1731 whale_0xdc8d 0x8527d16c... Ultra Sound
14160147 1 3416 1690 +1726 nethermind_lido 0x8db2a99d... BloXroute Max Profit
14162707 3 3450 1726 +1724 blockdaemon 0x857b0038... Ultra Sound
14164728 1 3413 1690 +1723 blockdaemon 0x88857150... Ultra Sound
14161870 6 3502 1779 +1723 blockdaemon 0x88857150... Ultra Sound
14160963 2 3430 1708 +1722 ether.fi 0x8527d16c... Ultra Sound
14163449 1 3412 1690 +1722 blockdaemon 0x853b0078... Ultra Sound
14163982 2 3425 1708 +1717 solo_stakers 0x856b0004... Agnostic Gnosis
14160382 0 3389 1672 +1717 blockdaemon 0x88510a78... Titan Relay
14162127 1 3406 1690 +1716 blockdaemon_lido 0x88857150... Ultra Sound
14163580 0 3383 1672 +1711 whale_0xdc8d 0x8527d16c... Ultra Sound
14164135 1 3396 1690 +1706 nethermind_lido 0xb26f9666... Aestus
14165070 1 3394 1690 +1704 blockdaemon 0x88a53ec4... BloXroute Max Profit
14159245 0 3374 1672 +1702 blockdaemon 0xb67eaa5e... BloXroute Regulated
14160878 1 3389 1690 +1699 blockdaemon 0xb4ce6162... Ultra Sound
14161072 1 3389 1690 +1699 ether.fi Local Local
14165680 0 3361 1672 +1689 ether.fi 0x88857150... Ultra Sound
14165268 5 3446 1762 +1684 blockdaemon_lido 0x850b00e0... BloXroute Max Profit
14159503 3 3403 1726 +1677 bridgetower_lido 0xb67eaa5e... BloXroute Max Profit
14162907 0 3345 1672 +1673 blockdaemon 0x8a2a4361... Ultra Sound
14158852 5 3432 1762 +1670 blockdaemon 0xb67eaa5e... BloXroute Max Profit
14161530 5 3432 1762 +1670 nethermind_lido 0xb26f9666... Aestus
14159873 12 3556 1887 +1669 blockdaemon_lido 0xb67eaa5e... Ultra Sound
14158799 1 3358 1690 +1668 blockdaemon 0xb26f9666... Titan Relay
14162248 6 3441 1779 +1662 bitcoinsuisse Local Local
14161666 0 3332 1672 +1660 whale_0xdc8d 0xb26f9666... Titan Relay
14160277 2 3367 1708 +1659 luno 0xb67eaa5e... BloXroute Regulated
14165380 6 3437 1779 +1658 nethermind_lido 0xb26f9666... Aestus
14160672 1 3342 1690 +1652 p2porg 0x8db2a99d... BloXroute Max Profit
14161761 6 3425 1779 +1646 0xb67eaa5e... BloXroute Regulated
14163828 0 3314 1672 +1642 coinbase 0xb67eaa5e... Aestus
14162898 1 3330 1690 +1640 ether.fi 0x853b0078... Ultra Sound
14159514 5 3400 1762 +1638 0xb67eaa5e... BloXroute Regulated
14164518 3 3363 1726 +1637 p2porg 0x850b00e0... BloXroute Regulated
14165006 2 3345 1708 +1637 blockdaemon 0x8db2a99d... Ultra Sound
14165436 0 3309 1672 +1637 blockdaemon_lido 0xb26f9666... Titan Relay
14164443 3 3354 1726 +1628 blockdaemon 0xb26f9666... Titan Relay
14159388 6 3407 1779 +1628 blockdaemon 0x857b0038... Ultra Sound
14164625 0 3298 1672 +1626 ether.fi 0x805e28e6... BloXroute Max Profit
14163034 1 3307 1690 +1617 ether.fi 0xb26f9666... Titan Relay
14164286 1 3296 1690 +1606 whale_0xf273 0xb67eaa5e... Aestus
14162928 0 3276 1672 +1604 whale_0xdc8d 0xb26f9666... Titan Relay
14160151 1 3293 1690 +1603 0x853b0078... Ultra Sound
14164282 9 3431 1833 +1598 blockdaemon 0x857b0038... BloXroute Max Profit
14162352 4 3340 1744 +1596 whale_0x8ebd 0xb4ce6162... Ultra Sound
14159025 6 3375 1779 +1596 blockdaemon 0x8527d16c... Ultra Sound
14164610 0 3265 1672 +1593 0xb26f9666... Titan Relay
14159649 3 3318 1726 +1592 p2porg 0xac23f8cc... Flashbots
14160818 1 3281 1690 +1591 whale_0x8ebd 0x8527d16c... Ultra Sound
14162000 0 3257 1672 +1585 blockdaemon 0x851b00b1... BloXroute Max Profit
14162095 1 3274 1690 +1584 0x857b0038... BloXroute Max Profit
14164750 1 3270 1690 +1580 p2porg 0x857b0038... BloXroute Regulated
14162520 4 3323 1744 +1579 blockdaemon_lido 0x88857150... Ultra Sound
14160376 4 3322 1744 +1578 blockdaemon_lido 0x88510a78... Titan Relay
14163819 7 3371 1797 +1574 whale_0xfd67 0x88857150... Ultra Sound
14161956 7 3371 1797 +1574 blockdaemon 0x857b0038... Ultra Sound
14162899 0 3244 1672 +1572 luno 0x8527d16c... Ultra Sound
14160166 6 3344 1779 +1565 blockdaemon 0x8a850621... Ultra Sound
14163291 6 3342 1779 +1563 whale_0x8914 0xb67eaa5e... Aestus
14163075 6 3339 1779 +1560 luno 0x8527d16c... Ultra Sound
14162456 1 3249 1690 +1559 0x857b0038... BloXroute Max Profit
14165015 5 3319 1762 +1557 revolut 0x853b0078... Ultra Sound
14159023 5 3319 1762 +1557 whale_0xdc8d 0xb26f9666... Titan Relay
14160165 0 3225 1672 +1553 revolut 0x853b0078... Ultra Sound
14165679 8 3366 1815 +1551 blockdaemon 0x8527d16c... Ultra Sound
14163082 8 3363 1815 +1548 whale_0xdc8d 0xb26f9666... Titan Relay
14164479 8 3360 1815 +1545 revolut 0xb67eaa5e... BloXroute Max Profit
14162364 5 3306 1762 +1544 blockdaemon_lido 0x88857150... Ultra Sound
14162701 8 3359 1815 +1544 blockdaemon 0x8527d16c... Ultra Sound
14162264 6 3322 1779 +1543 gateway.fmas_lido 0x850b00e0... BloXroute Max Profit
14160296 7 3339 1797 +1542 revolut 0x853b0078... Ultra Sound
14160266 0 3210 1672 +1538 whale_0x8ebd 0x8527d16c... Ultra Sound
14163953 6 3316 1779 +1537 luno 0x8527d16c... Ultra Sound
14162233 1 3225 1690 +1535 p2porg 0x850b00e0... BloXroute Regulated
14162890 4 3277 1744 +1533 solo_stakers 0x850b00e0... BloXroute Max Profit
14162557 7 3324 1797 +1527 blockdaemon 0x853b0078... Ultra Sound
14159154 0 3197 1672 +1525 whale_0xfd67 0xb67eaa5e... Titan Relay
14159550 0 3193 1672 +1521 revolut 0x88510a78... Titan Relay
14160104 6 3299 1779 +1520 blockdaemon 0xb67eaa5e... BloXroute Regulated
14161853 5 3281 1762 +1519 revolut 0xb67eaa5e... BloXroute Regulated
14160229 3 3245 1726 +1519 revolut 0xb26f9666... Titan Relay
14160505 2 3226 1708 +1518 whale_0x3878 0xb67eaa5e... Titan Relay
14164010 0 3189 1672 +1517 whale_0xfd67 0xb67eaa5e... Titan Relay
14163103 1 3206 1690 +1516 whale_0x8914 0x88a53ec4... BloXroute Regulated
14165376 5 3276 1762 +1514 p2porg 0xb26f9666... BloXroute Max Profit
14163184 5 3275 1762 +1513 revolut 0xb26f9666... Titan Relay
14160327 2 3221 1708 +1513 p2porg 0x853b0078... Aestus
14159243 1 3202 1690 +1512 revolut 0xb7c5e609... BloXroute Regulated
14161493 8 3324 1815 +1509 whale_0xdc8d 0xb26f9666... Titan Relay
14160342 3 3233 1726 +1507 figment 0xb26f9666... Titan Relay
14163729 0 3179 1672 +1507 blockdaemon_lido 0x851b00b1... BloXroute Max Profit
14160799 8 3322 1815 +1507 p2porg 0x850b00e0... Ultra Sound
14159013 1 3194 1690 +1504 whale_0xfd67 0x850b00e0... Titan Relay
14163035 9 3332 1833 +1499 blockdaemon_lido 0x88a53ec4... BloXroute Max Profit
14164770 0 3171 1672 +1499 gateway.fmas_lido 0x851b00b1... BloXroute Max Profit
14162006 5 3260 1762 +1498 blockdaemon_lido 0x853b0078... Ultra Sound
14164962 7 3295 1797 +1498 blockdaemon_lido 0xb67eaa5e... BloXroute Max Profit
14164445 5 3259 1762 +1497 revolut 0xb26f9666... Titan Relay
14159865 12 3381 1887 +1494 blockdaemon_lido 0xb26f9666... Titan Relay
14163931 1 3184 1690 +1494 p2porg 0xb67eaa5e... BloXroute Max Profit
14164018 7 3291 1797 +1494 whale_0x8ebd 0x850b00e0... Flashbots
14159050 1 3183 1690 +1493 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14163566 1 3183 1690 +1493 p2porg 0xa965c911... Ultra Sound
14164235 1 3181 1690 +1491 whale_0x8914 0x82c466b9... Titan Relay
14159958 0 3163 1672 +1491 whale_0xfd67 0xb67eaa5e... Titan Relay
14158882 5 3251 1762 +1489 whale_0x8914 0x85fb0503... Ultra Sound
14165684 5 3251 1762 +1489 blockdaemon_lido 0x850b00e0... BloXroute Max Profit
14163397 9 3321 1833 +1488 whale_0xdc8d 0x853b0078... Ultra Sound
14163933 1 3177 1690 +1487 p2porg 0x8db2a99d... Flashbots
14164892 1 3177 1690 +1487 p2porg 0x850b00e0... BloXroute Regulated
14162872 6 3266 1779 +1487 blockdaemon_lido 0xb26f9666... Titan Relay
14164907 0 3158 1672 +1486 p2porg 0xb67eaa5e... BloXroute Regulated
14161149 0 3157 1672 +1485 p2porg 0x850b00e0... BloXroute Regulated
14162246 0 3156 1672 +1484 bitstamp 0x8527d16c... Ultra Sound
14165872 5 3245 1762 +1483 0xb26f9666... Titan Relay
14159044 13 3386 1905 +1481 ether.fi 0xb26f9666... Titan Relay
14161663 1 3171 1690 +1481 gateway.fmas_lido 0x8527d16c... Ultra Sound
14163716 1 3170 1690 +1480 everstake 0x88857150... Ultra Sound
14161538 1 3169 1690 +1479 blockdaemon 0xb26f9666... Titan Relay
14160898 0 3151 1672 +1479 revolut 0x88857150... Ultra Sound
14159789 0 3149 1672 +1477 whale_0x8914 0x851b00b1... Ultra Sound
14160879 1 3166 1690 +1476 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14162745 2 3183 1708 +1475 p2porg 0x93b11bec... Flashbots
14162140 5 3236 1762 +1474 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14165126 0 3146 1672 +1474 whale_0xfd67 0x88857150... Ultra Sound
14162394 5 3235 1762 +1473 revolut 0x853b0078... Titan Relay
14163960 10 3324 1851 +1473 gateway.fmas_lido 0xb67eaa5e... BloXroute Max Profit
14159893 0 3143 1672 +1471 kiln Local Local
14165204 0 3142 1672 +1470 blockdaemon 0x88a53ec4... BloXroute Max Profit
14162679 0 3140 1672 +1468 0xb26f9666... BloXroute Regulated
14165414 5 3228 1762 +1466 whale_0x8914 0x850b00e0... Ultra Sound
14161813 1 3156 1690 +1466 whale_0x23be 0x850b00e0... BloXroute Max Profit
14161856 0 3138 1672 +1466 ether.fi Local Local
14161430 5 3227 1762 +1465 everstake 0xa965c911... Ultra Sound
14159549 6 3242 1779 +1463 coinbase 0xb26f9666... BloXroute Regulated
14163121 6 3242 1779 +1463 blockdaemon_lido 0xb26f9666... Titan Relay
14160087 6 3242 1779 +1463 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14159946 0 3133 1672 +1461 coinbase 0x8527d16c... Ultra Sound
14161424 3 3186 1726 +1460 p2porg 0x85fb0503... Aestus
14158825 11 3326 1869 +1457 blockdaemon_lido 0xb67eaa5e... BloXroute Max Profit
14160860 7 3254 1797 +1457 coinbase 0xb67eaa5e... BloXroute Max Profit
14162955 1 3146 1690 +1456 whale_0x8ebd 0xb26f9666... BloXroute Max Profit
14159099 2 3163 1708 +1455 p2porg 0xb26f9666... BloXroute Max Profit
14161552 1 3145 1690 +1455 blockdaemon 0xb26f9666... Titan Relay
14163481 8 3270 1815 +1455 whale_0x4b5e 0x82c466b9... Titan Relay
14163266 0 3125 1672 +1453 kiln 0xb26f9666... Aestus
14164066 13 3357 1905 +1452 blockdaemon_lido 0x8527d16c... Ultra Sound
14164053 7 3249 1797 +1452 whale_0xfd67 0x91b123d8... Titan Relay
14161328 5 3212 1762 +1450 coinbase 0x850b00e0... Flashbots
14163153 4 3193 1744 +1449 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14162868 14 3371 1923 +1448 ether.fi 0x853b0078... Ultra Sound
14161306 5 3209 1762 +1447 p2porg 0x850b00e0... Flashbots
14164970 2 3155 1708 +1447 whale_0x8914 0xb67eaa5e... Titan Relay
14160630 3 3171 1726 +1445 whale_0xfd67 0x850b00e0... Ultra Sound
14164464 5 3205 1762 +1443 coinbase 0x88a53ec4... BloXroute Regulated
14165486 5 3203 1762 +1441 whale_0x185d 0xb67eaa5e... BloXroute Max Profit
14158835 0 3113 1672 +1441 whale_0x8ebd 0xb26f9666... Titan Relay
14163838 0 3113 1672 +1441 whale_0x4b5e 0x88510a78... Titan Relay
14160598 0 3113 1672 +1441 p2porg 0xb26f9666... Titan Relay
14159382 2 3148 1708 +1440 coinbase 0xb67eaa5e... BloXroute Regulated
14162046 0 3112 1672 +1440 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14162271 1 3127 1690 +1437 whale_0x8ebd 0x8db2a99d... BloXroute Max Profit
14164987 7 3232 1797 +1435 solo_stakers 0xb67eaa5e... BloXroute Max Profit
14164813 7 3232 1797 +1435 kiln Local Local
14159079 2 3142 1708 +1434 whale_0x8ebd 0x85fb0503... Aestus
14162079 1 3124 1690 +1434 whale_0x8ebd 0xb4ce6162... Ultra Sound
14163182 9 3267 1833 +1434 whale_0xc611 0xb67eaa5e... BloXroute Max Profit
14161829 3 3157 1726 +1431 0xb67eaa5e... BloXroute Regulated
14163691 1 3121 1690 +1431 whale_0x8ebd 0xb26f9666... BloXroute Max Profit
14163905 5 3191 1762 +1429 gateway.fmas_lido 0x853b0078... BloXroute Max Profit
14165065 7 3226 1797 +1429 p2porg 0x853b0078... Ultra Sound
14159439 7 3226 1797 +1429 whale_0x8ebd 0x8527d16c... Ultra Sound
14164620 0 3100 1672 +1428 p2porg 0xb26f9666... Titan Relay
14160713 0 3099 1672 +1427 p2porg 0x850b00e0... BloXroute Regulated
14158985 0 3098 1672 +1426 whale_0x8ebd 0x8db2a99d... Flashbots
14165761 0 3097 1672 +1425 p2porg 0x853b0078... BloXroute Regulated
14163851 8 3240 1815 +1425 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14165929 0 3096 1672 +1424 gateway.fmas_lido 0x88a53ec4... BloXroute Regulated
14158833 10 3274 1851 +1423 blockdaemon_lido 0xb67eaa5e... Titan Relay
14162704 3 3147 1726 +1421 blockdaemon_lido 0xb26f9666... Titan Relay
14163560 0 3093 1672 +1421 whale_0x8ebd 0x856b0004... Agnostic Gnosis
14162488 12 3307 1887 +1420 whale_0x8914 0xb67eaa5e... Titan Relay
14164216 3 3146 1726 +1420 whale_0x8ebd 0x8527d16c... Ultra Sound
14160661 1 3110 1690 +1420 p2porg 0xb26f9666... Titan Relay
14163340 1 3106 1690 +1416 whale_0x8ebd 0x853b0078... Agnostic Gnosis
14159814 2 3121 1708 +1413 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14161074 10 3264 1851 +1413 whale_0x8914 0x850b00e0... Ultra Sound
14165324 0 3085 1672 +1413 blockdaemon_lido 0x88a53ec4... BloXroute Regulated
14163236 5 3174 1762 +1412 coinbase 0x88a53ec4... BloXroute Max Profit
14164041 6 3191 1779 +1412 figment 0xb26f9666... Titan Relay
14159063 4 3153 1744 +1409 whale_0xfd67 0x85fb0503... Ultra Sound
14159754 0 3079 1672 +1407 coinbase 0xb67eaa5e... BloXroute Regulated
14160386 7 3204 1797 +1407 whale_0xf273 0x850b00e0... Ultra Sound
14159139 0 3078 1672 +1406 p2porg 0xb67eaa5e... BloXroute Regulated
14163191 7 3203 1797 +1406 kiln 0x88a53ec4... BloXroute Regulated
14160951 5 3166 1762 +1404 p2porg 0x853b0078... Titan Relay
14163898 6 3182 1779 +1403 coinbase 0x856b0004... Ultra Sound
14161163 1 3092 1690 +1402 everstake 0x88857150... Ultra Sound
14164001 1 3091 1690 +1401 coinbase 0x8527d16c... Ultra Sound
14162813 1 3090 1690 +1400 kiln 0xb26f9666... BloXroute Max Profit
14163360 16 3358 1958 +1400 p2porg 0xb26f9666... Titan Relay
14164384 4 3143 1744 +1399 whale_0x3878 0xb67eaa5e... BloXroute Max Profit
14165582 0 3071 1672 +1399 p2porg 0xb26f9666... Titan Relay
14163508 0 3069 1672 +1397 whale_0xfd67 0x88a53ec4... BloXroute Max Profit
14158933 0 3068 1672 +1396 0x856b0004... Ultra Sound
14163739 0 3064 1672 +1392 p2porg 0x853b0078... BloXroute Max Profit
14160206 0 3064 1672 +1392 0x856b0004... Agnostic Gnosis
14164558 5 3153 1762 +1391 whale_0xfd67 0xb67eaa5e... Titan Relay
14160745 1 3081 1690 +1391 p2porg 0x8527d16c... Ultra Sound
14159694 6 3170 1779 +1391 whale_0xfd67 0x850b00e0... Ultra Sound
14161969 0 3061 1672 +1389 coinbase 0xb26f9666... Titan Relay
14160932 2 3096 1708 +1388 kiln 0x850b00e0... BloXroute Max Profit
14161224 5 3149 1762 +1387 p2porg 0xb26f9666... BloXroute Regulated
14163922 7 3183 1797 +1386 p2porg 0xb26f9666... Titan Relay
14160843 5 3147 1762 +1385 whale_0x8ebd 0x857b0038... Ultra Sound
14159026 0 3057 1672 +1385 blockdaemon_lido 0x8527d16c... Ultra Sound
14159877 2 3092 1708 +1384 0x85fb0503... Aestus
14160896 0 3056 1672 +1384 coinbase 0xb26f9666... Aestus
14165621 0 3056 1672 +1384 kiln 0xb26f9666... Aestus
14164250 0 3056 1672 +1384 coinbase 0xb67eaa5e... BloXroute Max Profit
14164621 3 3107 1726 +1381 whale_0x0000 0xb26f9666... BloXroute Regulated
14163038 5 3142 1762 +1380 kiln 0x88a53ec4... BloXroute Regulated
14163408 0 3052 1672 +1380 solo_stakers 0xb67eaa5e... BloXroute Max Profit
14165135 2 3086 1708 +1378 figment 0x853b0078... BloXroute Max Profit
14162879 8 3193 1815 +1378 whale_0xfd67 0xb67eaa5e... Titan Relay
14162082 7 3175 1797 +1378 whale_0x8ebd 0x8db2a99d... BloXroute Max Profit
14162596 1 3067 1690 +1377 kiln Local Local
14160179 1 3067 1690 +1377 kiln 0x853b0078... BloXroute Max Profit
14160150 1 3067 1690 +1377 whale_0x8ebd 0x8db2a99d... Flashbots
14162767 0 3047 1672 +1375 p2porg 0xb26f9666... BloXroute Max Profit
14164430 5 3133 1762 +1371 p2porg 0x856b0004... Ultra Sound
14160437 0 3043 1672 +1371 coinbase 0xb26f9666... Aestus
14164116 6 3150 1779 +1371 kiln 0x856b0004... BloXroute Max Profit
14159028 5 3132 1762 +1370 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14164009 1 3060 1690 +1370 coinbase 0xb26f9666... BloXroute Regulated
14165172 0 3042 1672 +1370 whale_0x8ebd 0xb26f9666... BloXroute Max Profit
14160040 1 3058 1690 +1368 coinbase 0x853b0078... Aestus
14163592 5 3127 1762 +1365 p2porg 0xb26f9666... Titan Relay
14165184 0 3037 1672 +1365 stakefish 0x88a53ec4... BloXroute Regulated
14162287 5 3125 1762 +1363 everstake 0x8527d16c... Ultra Sound
14160132 2 3071 1708 +1363 kiln 0x850b00e0... BloXroute Max Profit
14164272 4 3105 1744 +1361 coinbase 0xb26f9666... BloXroute Regulated
14164757 0 3032 1672 +1360 p2porg 0x88857150... Ultra Sound
14164347 2 3067 1708 +1359 p2porg 0x853b0078... BloXroute Max Profit
14162901 4 3102 1744 +1358 kiln 0xb67eaa5e... BloXroute Max Profit
14160045 3 3084 1726 +1358 coinbase 0x856b0004... Ultra Sound
14161920 0 3030 1672 +1358 everstake 0x856b0004... Ultra Sound
14164630 6 3137 1779 +1358 coinbase 0xb26f9666... BloXroute Max Profit
14160026 0 3029 1672 +1357 kiln 0xb67eaa5e... BloXroute Regulated
14162967 3 3082 1726 +1356 p2porg 0x853b0078... Ultra Sound
14161500 7 3152 1797 +1355 kiln 0x856b0004... BloXroute Max Profit
14158819 0 3025 1672 +1353 p2porg 0x85fb0503... Aestus
14160699 6 3131 1779 +1352 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14158993 0 3023 1672 +1351 coinbase 0x823e0146... Flashbots
14165788 7 3148 1797 +1351 kiln 0xb67eaa5e... BloXroute Regulated
14161965 2 3058 1708 +1350 0x850b00e0... BloXroute Max Profit
14160373 1 3040 1690 +1350 whale_0x8ebd 0x85fb0503... Aestus
14163079 1 3040 1690 +1350 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14160493 8 3165 1815 +1350 kiln 0xb67eaa5e... BloXroute Regulated
14160887 6 3129 1779 +1350 coinbase 0xb26f9666... BloXroute Max Profit
14160284 0 3021 1672 +1349 whale_0x8ebd 0x8527d16c... Ultra Sound
14159706 2 3055 1708 +1347 whale_0x8ebd 0x85fb0503... Aestus
14159122 1 3037 1690 +1347 p2porg 0x88857150... Ultra Sound
14164583 0 3018 1672 +1346 whale_0xedc6 0x8db2a99d... Ultra Sound
14160812 0 3018 1672 +1346 whale_0x8ebd 0x856b0004... BloXroute Max Profit
14159286 11 3214 1869 +1345 kraken 0x857b0038... BloXroute Max Profit
14160986 1 3035 1690 +1345 solo_stakers 0x8527d16c... Ultra Sound
14159903 0 3017 1672 +1345 whale_0x8ebd 0x85fb0503... Aestus
14160756 6 3123 1779 +1344 p2porg 0x853b0078... Titan Relay
14159859 6 3123 1779 +1344 whale_0x8ebd Local Local
14165253 2 3051 1708 +1343 coinbase 0x856b0004... BloXroute Max Profit
14161672 1 3033 1690 +1343 kiln 0xb26f9666... BloXroute Max Profit
14159718 0 3015 1672 +1343 coinbase 0xb26f9666... BloXroute Regulated
14162551 10 3193 1851 +1342 p2porg 0xb26f9666... BloXroute Max Profit
14160028 6 3121 1779 +1342 whale_0x8ebd Local Local
14162850 5 3103 1762 +1341 whale_0x8ebd 0x853b0078... BloXroute Max Profit
14160063 6 3120 1779 +1341 p2porg 0xb26f9666... Titan Relay
14161148 1 3030 1690 +1340 kiln 0xb26f9666... BloXroute Regulated
14165323 0 3012 1672 +1340 p2porg 0x805e28e6... BloXroute Max Profit
14161150 0 3011 1672 +1339 p2porg 0x8527d16c... Ultra Sound
14159246 5 3100 1762 +1338 whale_0x8ebd 0xb7c5e609... BloXroute Max Profit
14164391 11 3206 1869 +1337 whale_0x4b5e 0xb67eaa5e... Titan Relay
14161586 5 3098 1762 +1336 kiln 0xb26f9666... BloXroute Regulated
14163436 2 3044 1708 +1336 coinbase 0xb26f9666... Titan Relay
14165506 0 3008 1672 +1336 kiln 0xb67eaa5e... BloXroute Max Profit
14161803 1 3025 1690 +1335 solo_stakers 0x850b00e0... BloXroute Max Profit
14163971 5 3096 1762 +1334 coinbase 0x8527d16c... Ultra Sound
14159812 1 3023 1690 +1333 stader 0x8527d16c... Ultra Sound
14161332 0 3005 1672 +1333 coinbase 0xb67eaa5e... BloXroute Regulated
14162956 7 3130 1797 +1333 p2porg 0x853b0078... BloXroute Max Profit
14159188 1 3022 1690 +1332 kiln 0xb26f9666... BloXroute Max Profit
14165617 0 3004 1672 +1332 coinbase 0x860d4173... Aestus
14163155 8 3146 1815 +1331 p2porg 0x853b0078... Aestus
14165083 2 3038 1708 +1330 whale_0x8ebd 0x853b0078... BloXroute Max Profit
14161099 1 3020 1690 +1330 gateway.fmas_lido 0xb7c5e609... BloXroute Max Profit
14161029 9 3163 1833 +1330 coinbase Local Local
14164415 1 3019 1690 +1329 coinbase 0x85fb0503... Aestus
14161255 5 3090 1762 +1328 kiln 0xb67eaa5e... BloXroute Regulated
14165124 6 3106 1779 +1327 p2porg 0x853b0078... Ultra Sound
14164546 6 3105 1779 +1326 kiln 0xb67eaa5e... BloXroute Max Profit
14161266 5 3087 1762 +1325 solo_stakers 0xb67eaa5e... BloXroute Max Profit
14163569 3 3049 1726 +1323 whale_0x7275 0x853b0078... Ultra Sound
14159917 0 2995 1672 +1323 coinbase 0x805e28e6... BloXroute Max Profit
14158853 0 2995 1672 +1323 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14159523 6 3102 1779 +1323 solo_stakers 0x850b00e0... BloXroute Max Profit
14163014 5 3084 1762 +1322 kiln 0x850b00e0... Flashbots
14161366 5 3084 1762 +1322 coinbase 0xb26f9666... Titan Relay
14163271 3 3048 1726 +1322 kiln 0x856b0004... BloXroute Max Profit
14160700 1 3012 1690 +1322 coinbase Local Local
14159763 2 3028 1708 +1320 ether.fi 0xb7c5e609... BloXroute Max Profit
14161443 1 3010 1690 +1320 everstake 0xb67eaa5e... BloXroute Max Profit
14159157 0 2992 1672 +1320 kiln 0xb67eaa5e... BloXroute Max Profit
14162318 5 3081 1762 +1319 p2porg 0xb26f9666... BloXroute Max Profit
14162927 5 3081 1762 +1319 p2porg 0xb26f9666... BloXroute Max Profit
14161381 0 2991 1672 +1319 kiln 0x856b0004... Aestus
14160624 1 3008 1690 +1318 kiln Local Local
14163867 1 3008 1690 +1318 coinbase 0x856b0004... Ultra Sound
14164462 3 3043 1726 +1317 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14164006 1 3007 1690 +1317 coinbase 0x853b0078... Agnostic Gnosis
14165468 0 2989 1672 +1317 kiln 0x853b0078... Ultra Sound
14162742 4 3060 1744 +1316 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14160659 1 3006 1690 +1316 coinbase 0x853b0078... Agnostic Gnosis
14160428 1 3006 1690 +1316 everstake 0x850b00e0... BloXroute Max Profit
14162849 8 3131 1815 +1316 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14161316 1 3005 1690 +1315 kiln 0xb26f9666... BloXroute Regulated
14158922 0 2987 1672 +1315 coinbase 0x8db2a99d... Ultra Sound
14163267 6 3094 1779 +1315 figment 0x853b0078... Agnostic Gnosis
14161433 2 3022 1708 +1314 coinbase 0x853b0078... Aestus
14161977 2 3022 1708 +1314 kiln 0xb26f9666... BloXroute Max Profit
14162424 1 3004 1690 +1314 coinbase 0x8527d16c... Ultra Sound
14165854 1 3004 1690 +1314 0x856b0004... Agnostic Gnosis
14162645 0 2986 1672 +1314 p2porg 0xba003e46... Flashbots
14163639 8 3129 1815 +1314 kiln 0xb26f9666... BloXroute Max Profit
14163170 0 2985 1672 +1313 kiln 0x8527d16c... Ultra Sound
14159100 5 3074 1762 +1312 whale_0x8ebd 0xb26f9666... Titan Relay
14161794 0 2984 1672 +1312 everstake 0x85fb0503... Aestus
14165806 11 3180 1869 +1311 whale_0x8914 0xb67eaa5e... Titan Relay
14162623 5 3072 1762 +1310 everstake 0xb67eaa5e... BloXroute Max Profit
14165106 5 3071 1762 +1309 p2porg 0xb26f9666... BloXroute Max Profit
14163084 10 3160 1851 +1309 whale_0x8ebd 0xb26f9666... BloXroute Max Profit
14164992 5 3070 1762 +1308 coinbase 0xb26f9666... Titan Relay
14160089 3 3033 1726 +1307 coinbase 0xb26f9666... Titan Relay
14160845 0 2979 1672 +1307 kiln 0xb67eaa5e... BloXroute Max Profit
14164850 0 2978 1672 +1306 solo_stakers 0x857b0038... Titan Relay
14163649 0 2977 1672 +1305 solo_stakers 0x851b00b1... Ultra Sound
14164032 5 3065 1762 +1303 whale_0x8ebd 0xb26f9666... Titan Relay
14159431 0 2975 1672 +1303 whale_0xedc6 0xb26f9666... BloXroute Max Profit
14162902 6 3082 1779 +1303 p2porg 0xb26f9666... Aestus
14163984 10 3152 1851 +1301 p2porg 0xb26f9666... Titan Relay
14164251 1 2991 1690 +1301 kiln 0xb67eaa5e... BloXroute Regulated
14165716 1 2991 1690 +1301 coinbase 0x856b0004... Agnostic Gnosis
14164348 0 2973 1672 +1301 coinbase 0x8527d16c... Ultra Sound
14159116 0 2973 1672 +1301 kiln 0x8527d16c... Ultra Sound
14160721 5 3062 1762 +1300 kiln 0x8527d16c... Ultra Sound
14163533 5 3061 1762 +1299 coinbase 0x856b0004... Ultra Sound
14160691 0 2969 1672 +1297 kiln 0xb26f9666... Aestus
14159341 0 2968 1672 +1296 stader 0x94e8a339... BloXroute Max Profit
14162056 6 3075 1779 +1296 kiln 0xb26f9666... BloXroute Max Profit
14161922 5 3057 1762 +1295 kraken 0xb26f9666... EthGas
14161593 1 2984 1690 +1294 everstake 0x850b00e0... BloXroute Max Profit
14163807 0 2966 1672 +1294 0x805e28e6... Flashbots
14159661 6 3073 1779 +1294 coinbase 0x85fb0503... Aestus
14161129 0 2965 1672 +1293 kiln 0x88857150... Ultra Sound
14159919 1 2982 1690 +1292 everstake 0xb67eaa5e... BloXroute Max Profit
14161947 0 2964 1672 +1292 kiln 0x8db2a99d... Flashbots
14163147 1 2981 1690 +1291 everstake 0x88857150... Ultra Sound
14163669 0 2963 1672 +1291 kiln Local Local
14161738 0 2963 1672 +1291 coinbase 0x853b0078... BloXroute Max Profit
14162532 3 3016 1726 +1290 coinbase 0x856b0004... Aestus
14162757 2 2998 1708 +1290 kiln 0x853b0078... Agnostic Gnosis
14160105 1 2980 1690 +1290 kiln 0xb26f9666... BloXroute Max Profit
14162442 0 2962 1672 +1290 whale_0xedc6 0xb26f9666... BloXroute Max Profit
14160461 5 3051 1762 +1289 whale_0x8ebd 0x856b0004... Aestus
14159077 1 2979 1690 +1289 kiln 0x85fb0503... Aestus
14163772 7 3086 1797 +1289 coinbase 0x856b0004... BloXroute Max Profit
14158803 2 2995 1708 +1287 kiln 0x853b0078... Aestus
14163491 3 3012 1726 +1286 everstake 0xb26f9666... Titan Relay
14162935 1 2976 1690 +1286 kiln Local Local
14158919 0 2958 1672 +1286 whale_0x8ebd 0x8db2a99d... Aestus
14161133 6 3065 1779 +1286 kiln 0x8527d16c... Ultra Sound
14164084 6 3065 1779 +1286 whale_0x8ebd 0xb26f9666... Titan Relay
14164452 1 2975 1690 +1285 kiln 0x850b00e0... BloXroute Max Profit
14164236 6 3064 1779 +1285 whale_0x8ebd 0x853b0078... BloXroute Max Profit
14160739 3 3009 1726 +1283 coinbase 0x85fb0503... Aestus
14162210 2 2991 1708 +1283 everstake 0x856b0004... Aestus
14160017 0 2955 1672 +1283 kiln 0xb26f9666... BloXroute Max Profit
14165989 0 2955 1672 +1283 kiln 0xb4ce6162... Ultra Sound
14162060 0 2955 1672 +1283 coinbase 0x99cba505... Flashbots
14163144 8 3098 1815 +1283 everstake 0xb67eaa5e... BloXroute Regulated
14160994 10 3133 1851 +1282 kiln 0x88857150... Ultra Sound
14162678 17 3258 1976 +1282 whale_0x8914 0x850b00e0... Ultra Sound
14161891 0 2954 1672 +1282 kiln 0xb26f9666... Aestus
14161380 10 3132 1851 +1281 whale_0x8ebd 0x8527d16c... Ultra Sound
14159755 1 2971 1690 +1281 whale_0x8ebd 0x850b00e0... BloXroute Max Profit
14159229 2 2988 1708 +1280 kiln 0x8527d16c... Ultra Sound
14160501 1 2970 1690 +1280 kiln 0x856b0004... Aestus
14161078 1 2970 1690 +1280 kiln 0x853b0078... Agnostic Gnosis
14160187 5 3041 1762 +1279 kiln 0x88857150... Ultra Sound
14162730 3 3005 1726 +1279 solo_stakers Local Local
14160057 1 2969 1690 +1279 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14160601 2 2986 1708 +1278 kiln 0x85fb0503... Aestus
14161083 2 2986 1708 +1278 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14162739 1 2968 1690 +1278 whale_0x8ebd 0x8db2a99d... BloXroute Max Profit
14163420 0 2950 1672 +1278 coinbase 0x856b0004... BloXroute Max Profit
14165216 7 3075 1797 +1278 everstake 0x88a53ec4... BloXroute Regulated
14164897 2 2985 1708 +1277 everstake 0x88a53ec4... BloXroute Regulated
14165787 0 2949 1672 +1277 kiln 0xba003e46... BloXroute Max Profit
14162986 5 3037 1762 +1275 p2porg 0xb26f9666... BloXroute Max Profit
14164291 5 3035 1762 +1273 coinbase 0xb26f9666... Titan Relay
14160922 0 2945 1672 +1273 bitstamp 0x850b00e0... BloXroute Max Profit
14162269 5 3034 1762 +1272 kiln 0x88857150... Ultra Sound
14160348 4 3014 1744 +1270 nethermind_lido 0x8527d16c... Ultra Sound
14163695 4 3014 1744 +1270 coinbase 0x853b0078... BloXroute Max Profit
14161525 1 2960 1690 +1270 kiln 0x856b0004... Agnostic Gnosis
14160479 0 2942 1672 +1270 coinbase 0xb26f9666... BloXroute Regulated
14159871 7 3067 1797 +1270 everstake 0xb67eaa5e... BloXroute Regulated
14159896 6 3049 1779 +1270 coinbase 0x853b0078... Agnostic Gnosis
14160186 4 3013 1744 +1269 kiln 0x856b0004... Aestus
14165476 1 2959 1690 +1269 kiln 0x8527d16c... Ultra Sound
14164842 1 2957 1690 +1267 everstake 0xb26f9666... Titan Relay
14160850 1 2957 1690 +1267 everstake 0x850b00e0... Flashbots
14162268 0 2939 1672 +1267 kiln 0x853b0078... Agnostic Gnosis
14163581 0 2939 1672 +1267 everstake 0x851b00b1... BloXroute Max Profit
14163311 0 2938 1672 +1266 everstake 0xb26f9666... Titan Relay
14164562 0 2936 1672 +1264 solo_stakers 0x88a53ec4... BloXroute Max Profit
14163994 0 2936 1672 +1264 kiln 0x8527d16c... Ultra Sound
14159874 0 2936 1672 +1264 kiln 0x85fb0503... Aestus
14163088 5 3025 1762 +1263 whale_0x8ebd 0x850b00e0... BloXroute Max Profit
14161745 3 2989 1726 +1263 everstake 0xb26f9666... Titan Relay
14159115 2 2971 1708 +1263 nethermind_lido 0x856b0004... Agnostic Gnosis
14160708 9 3096 1833 +1263 kiln 0xb26f9666... BloXroute Max Profit
14159530 2 2970 1708 +1262 everstake 0xb26f9666... Aestus
14159644 4 3004 1744 +1260 coinbase 0x85fb0503... Aestus
14162189 0 2932 1672 +1260 everstake 0xb67eaa5e... BloXroute Regulated
14162932 0 2931 1672 +1259 coinbase 0xb26f9666... BloXroute Max Profit
14163490 1 2948 1690 +1258 ether.fi 0xb67eaa5e... BloXroute Regulated
14163958 0 2930 1672 +1258 everstake 0x9129eeb4... Agnostic Gnosis
14160293 5 3019 1762 +1257 ether.fi 0xb67eaa5e... BloXroute Regulated
14165695 2 2965 1708 +1257 solo_stakers 0x88a53ec4... BloXroute Max Profit
14161257 1 2947 1690 +1257 everstake 0xb26f9666... Titan Relay
14160500 6 3036 1779 +1257 kiln 0xb26f9666... BloXroute Max Profit
14163595 2 2963 1708 +1255 kiln 0x856b0004... BloXroute Max Profit
14163892 0 2927 1672 +1255 kiln 0x850b00e0... BloXroute Max Profit
14161759 1 2944 1690 +1254 everstake 0xb67eaa5e... BloXroute Regulated
14161736 0 2926 1672 +1254 coinbase 0x99cba505... BloXroute Max Profit
14165780 5 3015 1762 +1253 kiln 0x82c466b9... Titan Relay
14163386 5 3014 1762 +1252 coinbase 0xac23f8cc... Ultra Sound
14160527 1 2942 1690 +1252 stader 0x853b0078... Ultra Sound
14165023 0 2924 1672 +1252 everstake 0x850b00e0... BloXroute Max Profit
14163427 4 2995 1744 +1251 everstake 0xb67eaa5e... BloXroute Max Profit
14161751 0 2923 1672 +1251 stader 0xb26f9666... Titan Relay
14165653 5 3012 1762 +1250 everstake 0xb67eaa5e... BloXroute Regulated
14163606 19 3261 2012 +1249 coinbase 0xb26f9666... BloXroute Regulated
14160301 1 2938 1690 +1248 everstake 0xb26f9666... Titan Relay
14164246 0 2920 1672 +1248 everstake 0x850b00e0... BloXroute Max Profit
14160575 0 2920 1672 +1248 kiln 0x8db2a99d... Ultra Sound
14163400 6 3027 1779 +1248 everstake 0xb67eaa5e... BloXroute Max Profit
14161095 13 3152 1905 +1247 coinbase 0x856b0004... Aestus
14159854 10 3097 1851 +1246 coinbase 0xb26f9666... BloXroute Regulated
14162760 3 2971 1726 +1245 kiln 0xb26f9666... Aestus
14161468 11 3114 1869 +1245 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14164160 0 2917 1672 +1245 whale_0x8ebd 0xb26f9666... BloXroute Regulated
14160803 1 2933 1690 +1243 kiln 0xb26f9666... BloXroute Max Profit
14161809 1 2933 1690 +1243 everstake 0xb67eaa5e... BloXroute Regulated
14161847 4 2986 1744 +1242 everstake 0xb67eaa5e... BloXroute Max Profit
14161194 0 2914 1672 +1242 kiln 0xb26f9666... BloXroute Max Profit
14159775 6 3021 1779 +1242 everstake 0xb67eaa5e... BloXroute Max Profit
14158895 7 3038 1797 +1241 solo_stakers 0xac23f8cc... BloXroute Max Profit
14160814 0 2912 1672 +1240 nethermind_lido 0x823e0146... Flashbots
14161353 2 2946 1708 +1238 everstake 0xb26f9666... Titan Relay
14161357 0 2910 1672 +1238 whale_0x8ebd 0xb26f9666... BloXroute Max Profit
14159159 0 2910 1672 +1238 everstake 0x851b00b1... BloXroute Max Profit
14163290 0 2910 1672 +1238 coinbase Local Local
14163180 6 3017 1779 +1238 everstake 0xb67eaa5e... BloXroute Regulated
14162044 0 2909 1672 +1237 0xb26f9666... BloXroute Regulated
14165244 0 2909 1672 +1237 kiln 0x805e28e6... BloXroute Max Profit
14159517 3 2962 1726 +1236 0xb67eaa5e... BloXroute Max Profit
14162295 7 3032 1797 +1235 coinbase 0xb26f9666... Titan Relay
14163022 5 2996 1762 +1234 kiln 0x856b0004... BloXroute Max Profit
14161954 1 2923 1690 +1233 everstake 0x88857150... Ultra Sound
14160537 4 2976 1744 +1232 0x8527d16c... Ultra Sound
14163071 5 2993 1762 +1231 kiln 0x856b0004... BloXroute Max Profit
14165830 4 2974 1744 +1230 kiln 0x8db2a99d... BloXroute Max Profit
14161050 5 2990 1762 +1228 everstake 0x850b00e0... BloXroute Max Profit
14160895 1 2918 1690 +1228 everstake 0xb26f9666... Titan Relay
14161614 6 3007 1779 +1228 kiln 0xb26f9666... BloXroute Max Profit
14161894 6 3005 1779 +1226 whale_0x8ebd 0x8a850621... Titan Relay
14164243 11 3094 1869 +1225 stader 0xb67eaa5e... BloXroute Regulated
14164486 2 2933 1708 +1225 kiln 0xb26f9666... Aestus
14162252 9 3058 1833 +1225 kiln 0x8527d16c... Ultra Sound
14160594 2 2932 1708 +1224 everstake 0xb26f9666... Titan Relay
14159075 5 2985 1762 +1223 everstake 0xb67eaa5e... BloXroute Max Profit
14160068 10 3074 1851 +1223 whale_0x8ebd 0x857b0038... Ultra Sound
14165270 0 2894 1672 +1222 kiln 0x853b0078... BloXroute Max Profit
14164114 1 2910 1690 +1220 kiln 0x856b0004... BloXroute Max Profit
14159449 8 3035 1815 +1220 ether.fi 0xb67eaa5e... BloXroute Regulated
14163626 5 2981 1762 +1219 everstake 0x856b0004... Agnostic Gnosis
14163442 0 2891 1672 +1219 everstake 0xb67eaa5e... BloXroute Max Profit
14162712 4 2962 1744 +1218 everstake 0x8527d16c... Ultra Sound
14164331 4 2962 1744 +1218 ether.fi 0xb67eaa5e... BloXroute Max Profit
14164305 2 2926 1708 +1218 whale_0x8ebd 0xac23f8cc... Flashbots
14165269 0 2890 1672 +1218 everstake 0x88a53ec4... BloXroute Regulated
14161382 1 2907 1690 +1217 everstake 0x853b0078... Ultra Sound
14159498 0 2889 1672 +1217 everstake 0xb7c5e609... BloXroute Max Profit
14164585 0 2889 1672 +1217 solo_stakers 0x8527d16c... Ultra Sound
14161323 6 2995 1779 +1216 kiln 0x85fb0503... Aestus
14162492 0 2887 1672 +1215 everstake 0x853b0078... Aestus
14165586 1 2904 1690 +1214 everstake 0x88a53ec4... BloXroute Regulated
14165841 0 2885 1672 +1213 kiln 0x805e28e6... BloXroute Max Profit
14160603 1 2902 1690 +1212 everstake 0xb26f9666... Titan Relay
14163255 1 2902 1690 +1212 everstake 0x853b0078... Agnostic Gnosis
14162601 0 2884 1672 +1212 kiln 0xb26f9666... BloXroute Regulated
14161046 7 3009 1797 +1212 everstake 0x8527d16c... Ultra Sound
14165540 6 2989 1779 +1210 kiln 0x856b0004... Aestus
14158982 2 2917 1708 +1209 everstake 0x85fb0503... Aestus
14165616 0 2881 1672 +1209 kiln 0x856b0004... BloXroute Max Profit
14164366 0 2881 1672 +1209 kiln 0xb26f9666... BloXroute Regulated
14163160 1 2898 1690 +1208 everstake 0x853b0078... Ultra Sound
14164057 0 2880 1672 +1208 kiln 0x99cba505... Flashbots
14162695 0 2880 1672 +1208 everstake 0xb26f9666... Titan Relay
14160584 0 2880 1672 +1208 everstake 0xb26f9666... Titan Relay
14160081 0 2879 1672 +1207 everstake 0x8527d16c... Ultra Sound
14159642 0 2878 1672 +1206 everstake 0x853b0078... Aestus
14163556 0 2878 1672 +1206 everstake 0xb26f9666... Titan Relay
14159357 5 2967 1762 +1205 everstake 0x856b0004... Aestus
14164526 2 2913 1708 +1205 nethermind_lido 0xb26f9666... Aestus
14165165 0 2877 1672 +1205 solo_stakers 0xb26f9666... BloXroute Max Profit
14161157 6 2984 1779 +1205 kiln 0x856b0004... BloXroute Max Profit
14163367 1 2894 1690 +1204 ether.fi 0x8db2a99d... BloXroute Max Profit
14159194 0 2876 1672 +1204 everstake 0x926b7905... Flashbots
14165399 1 2893 1690 +1203 everstake 0xb26f9666... Titan Relay
14164988 9 3036 1833 +1203 kiln 0x856b0004... Ultra Sound
14159148 0 2875 1672 +1203 everstake 0xb26f9666... Titan Relay
14159263 0 2875 1672 +1203 everstake 0x853b0078... Ultra Sound
14164531 8 3018 1815 +1203 everstake 0xb67eaa5e... BloXroute Max Profit
14162363 0 2874 1672 +1202 everstake 0x8db2a99d... Flashbots
14163541 5 2963 1762 +1201 nethermind_lido 0x8527d16c... Ultra Sound
14163205 0 2873 1672 +1201 everstake 0x88a53ec4... BloXroute Regulated
14165863 6 2979 1779 +1200 everstake 0xb67eaa5e... BloXroute Regulated
14158984 5 2961 1762 +1199 stader 0x8527d16c... Ultra Sound
14162097 0 2870 1672 +1198 everstake 0xb26f9666... Titan Relay
14161852 0 2870 1672 +1198 everstake 0x853b0078... Aestus
14159038 0 2869 1672 +1197 kiln 0xb26f9666... BloXroute Regulated
14165224 12 3082 1887 +1195 kiln 0x8527d16c... Ultra Sound
14162650 3 2920 1726 +1194 nethermind_lido 0x853b0078... Agnostic Gnosis
14159647 5 2954 1762 +1192 bitstamp 0x8527d16c... Ultra Sound
14160429 2 2900 1708 +1192 everstake 0x853b0078... BloXroute Max Profit
14164555 1 2882 1690 +1192 everstake 0x853b0078... Ultra Sound
14159330 1 2882 1690 +1192 everstake 0xb26f9666... Titan Relay
14161997 0 2864 1672 +1192 everstake 0xb26f9666... Titan Relay
14161550 1 2881 1690 +1191 everstake 0xb26f9666... Titan Relay
14164400 0 2863 1672 +1191 ether.fi 0x823e0146... BloXroute Max Profit
14161597 0 2863 1672 +1191 coinbase 0x8a850621... Titan Relay
14160605 1 2880 1690 +1190 everstake 0xb26f9666... Titan Relay
14164538 0 2862 1672 +1190 bitstamp 0x851b00b1... BloXroute Max Profit
14165397 1 2879 1690 +1189 everstake 0x850b00e0... BloXroute Max Profit
14161467 0 2861 1672 +1189 everstake 0xb26f9666... Titan Relay
14163780 0 2860 1672 +1188 ether.fi 0x851b00b1... BloXroute Max Profit
14162441 0 2859 1672 +1187 everstake 0x8527d16c... Ultra Sound
14165894 0 2858 1672 +1186 everstake 0xb26f9666... Titan Relay
14161618 0 2857 1672 +1185 kiln 0xb26f9666... BloXroute Max Profit
Total anomalies: 587

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