Thu, Feb 12, 2026

Propagation anomalies - 2026-02-12

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-02-12' AND slot_start_date_time < '2026-02-12'::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-02-12' AND slot_start_date_time < '2026-02-12'::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-02-12' AND slot_start_date_time < '2026-02-12'::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-02-12' AND slot_start_date_time < '2026-02-12'::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-02-12' AND slot_start_date_time < '2026-02-12'::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-02-12' AND slot_start_date_time < '2026-02-12'::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-02-12' AND slot_start_date_time < '2026-02-12'::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-02-12' AND slot_start_date_time < '2026-02-12'::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,179
MEV blocks: 6,742 (93.9%)
Local blocks: 437 (6.1%)

Anomaly detection method

The method:

  1. Fit linear regression: block_first_seen_ms ~ blob_count
  2. Calculate residuals (actual - expected)
  3. Flag blocks with residuals > 2σ as anomalies

Points above the ±2σ band propagated slower than expected given their blob count.

Show code
# Conditional outliers: blocks slow relative to their blob count
df_anomaly = df.copy()

# Fit regression: block_first_seen_ms ~ blob_count
slope, intercept, r_value, p_value, std_err = stats.linregress(
    df_anomaly["blob_count"].astype(float), df_anomaly["block_first_seen_ms"]
)

# Calculate expected value and residual
df_anomaly["expected_ms"] = intercept + slope * df_anomaly["blob_count"].astype(float)
df_anomaly["residual_ms"] = df_anomaly["block_first_seen_ms"] - df_anomaly["expected_ms"]

# Calculate residual standard deviation
residual_std = df_anomaly["residual_ms"].std()

# Flag anomalies: residual > 2σ (unexpectedly slow)
df_anomaly["is_anomaly"] = df_anomaly["residual_ms"] > 2 * residual_std

n_anomalies = df_anomaly["is_anomaly"].sum()
pct_anomalies = n_anomalies / len(df_anomaly) * 100

# Prepare outliers dataframe
df_outliers = df_anomaly[df_anomaly["is_anomaly"]].copy()
df_outliers["relay"] = df_outliers["winning_relays"].apply(lambda x: x[0] if len(x) > 0 else "Local")
df_outliers["proposer"] = df_outliers["proposer_entity"].fillna("Unknown")
df_outliers["builder"] = df_outliers["winning_builder"].apply(
    lambda x: f"{x[:10]}..." if pd.notna(x) and x else "Local"
)

print(f"Regression: block_ms = {intercept:.1f} + {slope:.2f} × blob_count (R² = {r_value**2:.3f})")
print(f"Residual σ = {residual_std:.1f}ms")
print(f"Anomalies (>2σ slow): {n_anomalies:,} ({pct_anomalies:.1f}%)")
Regression: block_ms = 1707.7 + 17.69 × blob_count (R² = 0.014)
Residual σ = 631.7ms
Anomalies (>2σ slow): 431 (6.0%)
Show code
# Create scatter plot with regression band
x_range = np.array([0, int(max_blobs)])
y_pred = intercept + slope * x_range
y_upper = y_pred + 2 * residual_std
y_lower = y_pred - 2 * residual_std

fig = go.Figure()

# Add ±2σ band
fig.add_trace(go.Scatter(
    x=np.concatenate([x_range, x_range[::-1]]),
    y=np.concatenate([y_upper, y_lower[::-1]]),
    fill="toself",
    fillcolor="rgba(100,100,100,0.2)",
    line=dict(width=0),
    name="±2σ band",
    hoverinfo="skip",
))

# Add regression line
fig.add_trace(go.Scatter(
    x=x_range,
    y=y_pred,
    mode="lines",
    line=dict(color="white", width=2, dash="dash"),
    name="Expected",
))

# Normal points (sample to avoid overplotting)
df_normal = df_anomaly[~df_anomaly["is_anomaly"]]
if len(df_normal) > 2000:
    df_normal = df_normal.sample(2000, random_state=42)

fig.add_trace(go.Scatter(
    x=df_normal["blob_count"],
    y=df_normal["block_first_seen_ms"],
    mode="markers",
    marker=dict(size=4, color="rgba(100,150,200,0.4)"),
    name=f"Normal ({len(df_anomaly) - n_anomalies:,})",
    hoverinfo="skip",
))

# Anomaly points
fig.add_trace(go.Scatter(
    x=df_outliers["blob_count"],
    y=df_outliers["block_first_seen_ms"],
    mode="markers",
    marker=dict(
        size=7,
        color="#e74c3c",
        line=dict(width=1, color="white"),
    ),
    name=f"Anomalies ({n_anomalies:,})",
    customdata=np.column_stack([
        df_outliers["slot"],
        df_outliers["residual_ms"].round(0),
        df_outliers["relay"],
    ]),
    hovertemplate="<b>Slot %{customdata[0]}</b><br>Blobs: %{x}<br>Actual: %{y:.0f}ms<br>+%{customdata[1]}ms vs expected<br>Relay: %{customdata[2]}<extra></extra>",
))

fig.update_layout(
    margin=dict(l=60, r=30, t=30, b=60),
    xaxis=dict(title="Blob count", range=[-0.5, int(max_blobs) + 0.5]),
    yaxis=dict(title="Block first seen (ms from slot start)"),
    legend=dict(orientation="h", yanchor="bottom", y=1.02, xanchor="right", x=1),
    height=500,
)
fig.show(config={"responsive": True})

All propagation anomalies

Blocks that propagated much slower than expected given their blob count, sorted by residual (worst first).

Show code
# All anomalies table with selectable text and Lab links
if n_anomalies > 0:
    df_table = df_outliers.sort_values("residual_ms", ascending=False)[
        ["slot", "blob_count", "block_first_seen_ms", "expected_ms", "residual_ms", "proposer", "builder", "relay"]
    ].copy()
    df_table["block_first_seen_ms"] = df_table["block_first_seen_ms"].round(0).astype(int)
    df_table["expected_ms"] = df_table["expected_ms"].round(0).astype(int)
    df_table["residual_ms"] = df_table["residual_ms"].round(0).astype(int)
    
    # Build HTML table
    html = '''
    <style>
    .anomaly-table { border-collapse: collapse; width: 100%; font-family: monospace; font-size: 13px; }
    .anomaly-table th { background: #2c3e50; color: white; padding: 8px 12px; text-align: left; position: sticky; top: 0; }
    .anomaly-table td { padding: 6px 12px; border-bottom: 1px solid #eee; }
    .anomaly-table tr:hover { background: #f5f5f5; }
    .anomaly-table .num { text-align: right; }
    .anomaly-table .delta { background: #ffebee; color: #c62828; font-weight: bold; }
    .anomaly-table a { color: #1976d2; text-decoration: none; }
    .anomaly-table a:hover { text-decoration: underline; }
    .table-container { max-height: 600px; overflow-y: auto; }
    </style>
    <div class="table-container">
    <table class="anomaly-table">
    <thead>
    <tr><th>Slot</th><th class="num">Blobs</th><th class="num">Actual (ms)</th><th class="num">Expected (ms)</th><th class="num">Δ (ms)</th><th>Proposer</th><th>Builder</th><th>Relay</th></tr>
    </thead>
    <tbody>
    '''
    
    for _, row in df_table.iterrows():
        slot_link = f'<a href="https://lab.ethpandaops.io/ethereum/slots/{row["slot"]}" target="_blank">{row["slot"]}</a>'
        html += f'''<tr>
            <td>{slot_link}</td>
            <td class="num">{row["blob_count"]}</td>
            <td class="num">{row["block_first_seen_ms"]}</td>
            <td class="num">{row["expected_ms"]}</td>
            <td class="num delta">+{row["residual_ms"]}</td>
            <td>{row["proposer"]}</td>
            <td>{row["builder"]}</td>
            <td>{row["relay"]}</td>
        </tr>'''
    
    html += '</tbody></table></div>'
    display(HTML(html))
    print(f"\nTotal anomalies: {len(df_table):,}")
else:
    print("No anomalies detected.")
SlotBlobsActual (ms)Expected (ms)Δ (ms)ProposerBuilderRelay
13672766 0 6196 1708 +4488 whale_0x3212 Local Local
13674528 0 5382 1708 +3674 abyss_finance Local Local
13674368 0 5031 1708 +3323 piertwo Local Local
13674035 15 4905 1973 +2932 ether.fi Local Local
13671552 0 4450 1708 +2742 upbit Local Local
13672000 0 4432 1708 +2724 upbit Local Local
13671424 12 4409 1920 +2489 bridgetower_lido Local Local
13671347 0 4132 1708 +2424 ether.fi Local Local
13672405 0 3923 1708 +2215 rocketpool Local Local
13675904 0 3884 1708 +2176 0x88a53ec4... BloXroute Regulated
13671028 1 3721 1725 +1996 everstake 0x88a53ec4... BloXroute Max Profit
13670390 2 3682 1743 +1939 everstake 0xb26f9666... Aestus
13672308 5 3725 1796 +1929 lido 0xb67eaa5e... BloXroute Regulated
13672590 11 3831 1902 +1929 0xb4ce6162... Ultra Sound
13669421 0 3571 1708 +1863 0x856b0004... Ultra Sound
13675395 10 3741 1885 +1856 0xb67eaa5e... Titan Relay
13672768 8 3703 1849 +1854 blockdaemon 0x8527d16c... Ultra Sound
13670994 5 3640 1796 +1844 solo_stakers Local Local
13670433 1 3567 1725 +1842 0x88857150... Ultra Sound
13670171 8 3683 1849 +1834 blockdaemon 0x853b0078... Ultra Sound
13674349 1 3556 1725 +1831 everstake 0x855b00e6... Flashbots
13675036 2 3567 1743 +1824 0x8527d16c... Ultra Sound
13672563 5 3620 1796 +1824 0x88857150... Ultra Sound
13672799 5 3594 1796 +1798 everstake 0x8527d16c... Ultra Sound
13670844 8 3645 1849 +1796 0x855b00e6... Ultra Sound
13672117 6 3602 1814 +1788 0x8527d16c... Ultra Sound
13669364 0 3495 1708 +1787 0xb67eaa5e... BloXroute Regulated
13675043 3 3548 1761 +1787 revolut 0x8527d16c... Ultra Sound
13676079 1 3508 1725 +1783 everstake 0x853b0078... Agnostic Gnosis
13676037 3 3526 1761 +1765 revolut 0x88857150... Ultra Sound
13671313 6 3577 1814 +1763 0x853b0078... Ultra Sound
13670505 6 3562 1814 +1748 lido 0x88857150... Ultra Sound
13670698 11 3645 1902 +1743 0x88510a78... BloXroute Regulated
13671971 3 3502 1761 +1741 everstake 0x88a53ec4... BloXroute Regulated
13670883 11 3639 1902 +1737 0x8527d16c... Ultra Sound
13673434 8 3580 1849 +1731 everstake 0x88857150... Ultra Sound
13672166 0 3432 1708 +1724 everstake 0x88857150... Ultra Sound
13669510 1 3446 1725 +1721 everstake 0xb26f9666... Aestus
13671148 0 3427 1708 +1719 0x857b0038... Ultra Sound
13673658 3 3476 1761 +1715 whale_0xb83e 0xb26f9666... Titan Relay
13675564 0 3416 1708 +1708 nethermind_lido 0xb26f9666... Titan Relay
13670019 1 3431 1725 +1706 everstake 0xb26f9666... Aestus
13674990 0 3411 1708 +1703 everstake 0x88a53ec4... BloXroute Regulated
13674490 1 3428 1725 +1703 everstake 0xb26f9666... Titan Relay
13674711 8 3548 1849 +1699 0x8db2a99d... BloXroute Max Profit
13672064 0 3401 1708 +1693 everstake 0xb67eaa5e... BloXroute Max Profit
13670105 6 3494 1814 +1680 0x853b0078... Ultra Sound
13672081 6 3491 1814 +1677 0x88a53ec4... BloXroute Regulated
13675588 1 3399 1725 +1674 0x850b00e0... BloXroute Max Profit
13675414 0 3370 1708 +1662 blockdaemon 0x88857150... Ultra Sound
13669283 1 3386 1725 +1661 nethermind_lido 0xb26f9666... Titan Relay
13673070 1 3380 1725 +1655 0x88857150... Ultra Sound
13669925 0 3361 1708 +1653 everstake 0x88a53ec4... BloXroute Max Profit
13672077 13 3590 1938 +1652 0x857b0038... Ultra Sound
13674013 0 3357 1708 +1649 everstake 0x852b0070... BloXroute Max Profit
13674597 12 3569 1920 +1649 nethermind_lido 0xb26f9666... Titan Relay
13675257 5 3445 1796 +1649 everstake 0x855b00e6... BloXroute Max Profit
13674067 1 3371 1725 +1646 nethermind_lido 0xb26f9666... Aestus
13672883 6 3459 1814 +1645 everstake 0xb67eaa5e... BloXroute Max Profit
13671027 6 3457 1814 +1643 blockdaemon_lido 0x850b00e0... BloXroute Regulated
13669292 7 3471 1832 +1639 everstake 0x8527d16c... Ultra Sound
13675581 11 3537 1902 +1635 everstake 0x8527d16c... Ultra Sound
13673436 2 3375 1743 +1632 blockdaemon_lido 0x850b00e0... BloXroute Regulated
13674148 0 3333 1708 +1625 everstake 0xb26f9666... Titan Relay
13673513 3 3384 1761 +1623 0x88857150... Ultra Sound
13672339 6 3437 1814 +1623 everstake 0x855b00e6... BloXroute Max Profit
13675844 0 3330 1708 +1622 solo_stakers 0x851b00b1... Ultra Sound
13669501 20 3682 2062 +1620 0x8527d16c... Ultra Sound
13670223 8 3464 1849 +1615 everstake 0x856b0004... Ultra Sound
13674038 3 3369 1761 +1608 p2porg 0xb26f9666... BloXroute Max Profit
13669601 3 3367 1761 +1606 blockdaemon 0x853b0078... Ultra Sound
13675500 3 3367 1761 +1606 everstake 0xb26f9666... Titan Relay
13670184 0 3313 1708 +1605 everstake 0xac23f8cc... Flashbots
13671853 5 3400 1796 +1604 everstake 0xb26f9666... Titan Relay
13676264 8 3453 1849 +1604 everstake 0x8527d16c... Ultra Sound
13669264 13 3541 1938 +1603 0x8a850621... Ultra Sound
13672622 1 3327 1725 +1602 everstake 0x88a53ec4... BloXroute Max Profit
13672664 0 3309 1708 +1601 0x8527d16c... Ultra Sound
13675372 6 3413 1814 +1599 0x850b00e0... BloXroute Max Profit
13669274 5 3394 1796 +1598 everstake 0xb26f9666... Titan Relay
13669700 0 3305 1708 +1597 everstake 0x852b0070... Aestus
13672886 6 3402 1814 +1588 everstake 0x88a53ec4... BloXroute Max Profit
13676097 8 3433 1849 +1584 everstake 0x856b0004... Aestus
13671545 2 3326 1743 +1583 0xb67eaa5e... BloXroute Regulated
13672474 5 3379 1796 +1583 blockdaemon 0xb4ce6162... Ultra Sound
13670526 1 3307 1725 +1582 everstake 0x856b0004... Agnostic Gnosis
13672572 13 3517 1938 +1579 0x8a850621... Titan Relay
13673666 1 3303 1725 +1578 luno 0xb26f9666... Titan Relay
13676315 9 3441 1867 +1574 everstake 0xb26f9666... Titan Relay
13674702 0 3279 1708 +1571 everstake 0xb26f9666... Aestus
13676383 8 3417 1849 +1568 everstake 0x8527d16c... Ultra Sound
13674191 3 3324 1761 +1563 whale_0xdd6c 0xb26f9666... Titan Relay
13672152 4 3337 1778 +1559 blockdaemon 0x88857150... Ultra Sound
13676115 0 3264 1708 +1556 blockdaemon 0x8a850621... Titan Relay
13671382 0 3262 1708 +1554 whale_0xdd6c 0x83bee517... Flashbots
13669395 4 3329 1778 +1551 blockdaemon 0xb67eaa5e... BloXroute Regulated
13670538 0 3254 1708 +1546 nethermind_lido 0x823e0146... Flashbots
13675870 4 3324 1778 +1546 blockdaemon 0xb67eaa5e... BloXroute Regulated
13671186 1 3270 1725 +1545 solo_stakers 0xb26f9666... Aestus
13676094 7 3376 1832 +1544 everstake 0x853b0078... Aestus
13673328 6 3356 1814 +1542 blockdaemon 0xb67eaa5e... Titan Relay
13671046 9 3405 1867 +1538 everstake 0x853b0078... BloXroute Max Profit
13674561 9 3405 1867 +1538 everstake 0xb26f9666... Titan Relay
13675262 0 3243 1708 +1535 blockdaemon_lido 0xb67eaa5e... Titan Relay
13671333 2 3278 1743 +1535 blockdaemon_lido 0x8527d16c... Ultra Sound
13676057 5 3329 1796 +1533 nethermind_lido 0x853b0078... Ultra Sound
13675114 13 3469 1938 +1531 everstake 0x8527d16c... Ultra Sound
13672233 0 3238 1708 +1530 nethermind_lido 0x91a8729e... BloXroute Max Profit
13673676 3 3291 1761 +1530 luno 0x856b0004... Ultra Sound
13670086 11 3430 1902 +1528 everstake 0x855b00e6... BloXroute Max Profit
13673439 1 3253 1725 +1528 luno 0x88510a78... BloXroute Regulated
13670143 3 3286 1761 +1525 blockdaemon_lido 0xb67eaa5e... BloXroute Regulated
13673500 1 3249 1725 +1524 blockdaemon_lido 0x88857150... Ultra Sound
13676336 0 3231 1708 +1523 0x8a850621... BloXroute Regulated
13669680 8 3371 1849 +1522 everstake 0xb26f9666... Aestus
13671967 14 3472 1955 +1517 everstake 0x8527d16c... Ultra Sound
13670794 3 3277 1761 +1516 luno 0x88a53ec4... BloXroute Regulated
13669787 2 3259 1743 +1516 0xb26f9666... Titan Relay
13670305 3 3273 1761 +1512 stakingfacilities_lido 0x88a53ec4... BloXroute Regulated
13674269 6 3325 1814 +1511 0x857b0038... Ultra Sound
13669600 7 3341 1832 +1509 p2porg 0x853b0078... Aestus
13675073 0 3216 1708 +1508 0xb26f9666... Titan Relay
13674097 0 3216 1708 +1508 blockdaemon 0x8527d16c... Ultra Sound
13675982 3 3269 1761 +1508 blockdaemon_lido 0xb26f9666... Titan Relay
13673906 3 3268 1761 +1507 blockdaemon 0xb7c5c39a... BloXroute Regulated
13675389 8 3356 1849 +1507 nethermind_lido 0x853b0078... Aestus
13672050 7 3337 1832 +1505 blockdaemon 0x8527d16c... Ultra Sound
13674412 0 3213 1708 +1505 blockdaemon_lido 0x8527d16c... Ultra Sound
13672813 8 3354 1849 +1505 blockdaemon 0x8527d16c... Ultra Sound
13675242 0 3211 1708 +1503 everstake 0x856b0004... Ultra Sound
13672492 5 3299 1796 +1503 0xb26f9666... Titan Relay
13674621 1 3228 1725 +1503 blockdaemon_lido 0xb26f9666... Titan Relay
13671820 0 3210 1708 +1502 0x88857150... Ultra Sound
13675873 6 3312 1814 +1498 everstake 0xb26f9666... Titan Relay
13669269 8 3346 1849 +1497 0xb26f9666... Titan Relay
13675323 0 3202 1708 +1494 everstake 0x8db2a99d... Flashbots
13673108 11 3389 1902 +1487 everstake 0xb26f9666... Titan Relay
13672054 5 3281 1796 +1485 0xb26f9666... EthGas
13674613 4 3262 1778 +1484 blockdaemon 0xb26f9666... Titan Relay
13672710 9 3350 1867 +1483 blockdaemon 0x8527d16c... Ultra Sound
13669377 3 3242 1761 +1481 blockdaemon 0xb26f9666... Titan Relay
13673472 1 3205 1725 +1480 bitstamp 0x8527d16c... Ultra Sound
13669711 4 3258 1778 +1480 0xb67eaa5e... BloXroute Max Profit
13674407 10 3363 1885 +1478 blockdaemon 0x8527d16c... Ultra Sound
13675649 8 3327 1849 +1478 revolut 0x850b00e0... BloXroute Regulated
13672326 5 3273 1796 +1477 0x8527d16c... Ultra Sound
13670743 1 3201 1725 +1476 revolut 0x8527d16c... Ultra Sound
13674075 16 3464 1991 +1473 everstake 0xb26f9666... Titan Relay
13672355 1 3194 1725 +1469 0x88a53ec4... BloXroute Max Profit
13674736 5 3264 1796 +1468 blockdaemon_lido 0x850b00e0... BloXroute Regulated
13675143 2 3210 1743 +1467 luno 0x8527d16c... Ultra Sound
13672495 5 3262 1796 +1466 blockdaemon_lido 0xb67eaa5e... BloXroute Max Profit
13671857 0 3173 1708 +1465 bitstamp 0xb26f9666... Titan Relay
13672960 0 3171 1708 +1463 gateway.fmas_lido 0x823e0146... BloXroute Max Profit
13671290 9 3325 1867 +1458 everstake 0x853b0078... Ultra Sound
13669491 4 3236 1778 +1458 solo_stakers Local Local
13674649 9 3322 1867 +1455 ether.fi 0x8db2a99d... BloXroute Max Profit
13669928 0 3162 1708 +1454 0x8527d16c... Ultra Sound
13670089 8 3303 1849 +1454 0xb67eaa5e... BloXroute Max Profit
13674402 0 3159 1708 +1451 blockdaemon_lido 0x88a53ec4... BloXroute Regulated
13670048 9 3317 1867 +1450 whale_0x23be 0xb26f9666... BloXroute Max Profit
13674360 9 3317 1867 +1450 p2porg 0x8527d16c... Ultra Sound
13669366 8 3298 1849 +1449 ether.fi 0xb67eaa5e... BloXroute Regulated
13669348 11 3349 1902 +1447 0x850b00e0... BloXroute Regulated
13673966 0 3154 1708 +1446 0x852b0070... BloXroute Max Profit
13674174 8 3294 1849 +1445 ether.fi 0x8527d16c... Ultra Sound
13670362 5 3240 1796 +1444 0xb67eaa5e... BloXroute Max Profit
13673785 3 3202 1761 +1441 p2porg 0xb26f9666... Titan Relay
13675108 11 3343 1902 +1441 blockdaemon 0x850b00e0... BloXroute Regulated
13676060 1 3165 1725 +1440 0x88a53ec4... BloXroute Max Profit
13674858 7 3271 1832 +1439 blockdaemon 0x88857150... Ultra Sound
13675249 11 3338 1902 +1436 blockdaemon 0x853b0078... Ultra Sound
13674673 11 3336 1902 +1434 blockdaemon 0xb26f9666... Titan Relay
13675174 0 3141 1708 +1433 nethermind_lido 0x8527d16c... Ultra Sound
13675261 14 3388 1955 +1433 0x8db2a99d... BloXroute Max Profit
13675623 9 3298 1867 +1431 0xb67eaa5e... BloXroute Max Profit
13674796 5 3227 1796 +1431 0x8527d16c... Ultra Sound
13675672 10 3308 1885 +1423 0x88a53ec4... BloXroute Regulated
13675881 0 3131 1708 +1423 bitstamp 0x88a53ec4... BloXroute Regulated
13673783 14 3375 1955 +1420 everstake 0x88857150... Ultra Sound
13670276 0 3127 1708 +1419 abyss_finance 0x99dbe3e8... Ultra Sound
13671883 6 3233 1814 +1419 0x856b0004... Ultra Sound
13671582 1 3143 1725 +1418 figment 0xb26f9666... Titan Relay
13674474 6 3227 1814 +1413 nethermind_lido 0xb26f9666... Titan Relay
13672345 11 3315 1902 +1413 blockdaemon 0x853b0078... Ultra Sound
13670894 6 3222 1814 +1408 blockdaemon_lido 0xb26f9666... Titan Relay
13674041 6 3220 1814 +1406 0xb67eaa5e... BloXroute Max Profit
13675116 3 3162 1761 +1401 nethermind_lido 0x8db2a99d... Flashbots
13675439 3 3160 1761 +1399 kelp 0x88a53ec4... BloXroute Max Profit
13675313 0 3106 1708 +1398 everstake 0xb26f9666... Titan Relay
13674725 6 3212 1814 +1398 p2porg 0xb26f9666... Titan Relay
13670464 0 3105 1708 +1397 everstake 0xb26f9666... Titan Relay
13676347 0 3105 1708 +1397 everstake 0xb26f9666... Titan Relay
13675960 0 3105 1708 +1397 ether.fi 0x8527d16c... Ultra Sound
13674414 5 3193 1796 +1397 nethermind_lido 0xb26f9666... Titan Relay
13674107 13 3334 1938 +1396 0xb67eaa5e... BloXroute Max Profit
13670208 8 3245 1849 +1396 p2porg 0xb26f9666... BloXroute Max Profit
13671277 1 3120 1725 +1395 nethermind_lido 0x853b0078... Ultra Sound
13671072 10 3277 1885 +1392 nethermind_lido 0xb26f9666... Titan Relay
13671349 21 3470 2079 +1391 blockdaemon_lido 0x850b00e0... BloXroute Regulated
13673701 3 3149 1761 +1388 p2porg 0x850b00e0... BloXroute Regulated
13669721 6 3202 1814 +1388 p2porg 0x853b0078... Titan Relay
13675288 0 3094 1708 +1386 0x853b0078... Ultra Sound
13671787 0 3094 1708 +1386 0x83bee517... Flashbots
13671105 10 3270 1885 +1385 0x88a53ec4... BloXroute Max Profit
13672930 4 3163 1778 +1385 everstake 0x8527d16c... Ultra Sound
13671910 0 3092 1708 +1384 nethermind_lido 0x8527d16c... Ultra Sound
13669913 6 3198 1814 +1384 nethermind_lido 0xb26f9666... Titan Relay
13669262 1 3106 1725 +1381 everstake 0x8527d16c... Ultra Sound
13673366 19 3424 2044 +1380 p2porg 0xb26f9666... BloXroute Max Profit
13675454 5 3174 1796 +1378 0xb67eaa5e... BloXroute Regulated
13669495 8 3227 1849 +1378 0xb67eaa5e... BloXroute Max Profit
13675842 6 3191 1814 +1377 0x8db2a99d... Flashbots
13671611 0 3083 1708 +1375 everstake 0xb26f9666... Titan Relay
13673657 9 3242 1867 +1375 solo_stakers 0xb26f9666... Aestus
13673068 1 3099 1725 +1374 everstake 0xb26f9666... Titan Relay
13675893 0 3081 1708 +1373 0x8527d16c... Ultra Sound
13669299 6 3187 1814 +1373 p2porg 0xb26f9666... BloXroute Max Profit
13676006 8 3222 1849 +1373 0xb26f9666... BloXroute Regulated
13673927 0 3080 1708 +1372 everstake 0x8527d16c... Ultra Sound
13671687 12 3292 1920 +1372 0x8527d16c... Ultra Sound
13673264 1 3097 1725 +1372 kelp 0x88857150... Ultra Sound
13675091 13 3309 1938 +1371 p2porg 0x8db2a99d... BloXroute Max Profit
13675905 6 3185 1814 +1371 bitstamp 0x8527d16c... Ultra Sound
13669496 1 3096 1725 +1371 0x853b0078... BloXroute Max Profit
13675385 3 3131 1761 +1370 everstake 0xb26f9666... Titan Relay
13670778 1 3093 1725 +1368 p2porg 0x8527d16c... Ultra Sound
13672692 6 3180 1814 +1366 p2porg 0x853b0078... BloXroute Max Profit
13670031 5 3162 1796 +1366 abyss_finance 0xb67eaa5e... BloXroute Max Profit
13674047 18 3392 2026 +1366 blockdaemon_lido 0x8527d16c... Ultra Sound
13672857 3 3126 1761 +1365 0x8527d16c... Ultra Sound
13674286 15 3336 1973 +1363 0xb26f9666... Titan Relay
13673939 0 3069 1708 +1361 p2porg 0x856b0004... Ultra Sound
13673969 0 3068 1708 +1360 origin_protocol 0x8527d16c... Ultra Sound
13669852 7 3191 1832 +1359 p2porg 0x856b0004... Aestus
13670239 0 3067 1708 +1359 ether.fi 0x91a8729e... Ultra Sound
13672982 6 3173 1814 +1359 0x850b00e0... BloXroute Regulated
13673038 3 3119 1761 +1358 abyss_finance 0x853b0078... Ultra Sound
13676270 3 3119 1761 +1358 0x8527d16c... Ultra Sound
13671641 14 3313 1955 +1358 p2porg 0x8527d16c... Ultra Sound
13673944 4 3136 1778 +1358 p2porg 0x8db2a99d... BloXroute Max Profit
13671443 1 3081 1725 +1356 ether.fi 0x8527d16c... Ultra Sound
13674457 0 3063 1708 +1355 0x852b0070... BloXroute Max Profit
13672605 2 3097 1743 +1354 nethermind_lido 0x8db2a99d... Flashbots
13674571 10 3238 1885 +1353 lido 0x823e0146... Flashbots
13670419 8 3201 1849 +1352 everstake 0x88a53ec4... BloXroute Regulated
13675424 1 3077 1725 +1352 everstake 0x8db2a99d... Flashbots
13669551 8 3199 1849 +1350 stakingfacilities_lido 0xb26f9666... Titan Relay
13669619 9 3216 1867 +1349 p2porg 0xb67eaa5e... BloXroute Max Profit
13674675 0 3055 1708 +1347 p2porg 0x8527d16c... Ultra Sound
13672221 3 3108 1761 +1347 ether.fi 0x853b0078... Agnostic Gnosis
13672685 2 3089 1743 +1346 0x88510a78... BloXroute Regulated
13669880 1 3071 1725 +1346 0x88a53ec4... BloXroute Regulated
13673320 0 3053 1708 +1345 everstake 0x853b0078... Aestus
13675466 3 3105 1761 +1344 0x8527d16c... Ultra Sound
13669530 0 3051 1708 +1343 nethermind_lido 0x852b0070... Aestus
13674221 4 3121 1778 +1343 0x853b0078... Titan Relay
13669946 9 3209 1867 +1342 p2porg 0xb26f9666... Titan Relay
13672333 4 3120 1778 +1342 p2porg 0x88857150... Ultra Sound
13669957 0 3049 1708 +1341 0x88a53ec4... BloXroute Regulated
13673965 9 3207 1867 +1340 stader 0x8527d16c... Ultra Sound
13672219 12 3260 1920 +1340 stakingfacilities_lido 0x856b0004... Ultra Sound
13675005 4 3118 1778 +1340 stader 0x856b0004... Ultra Sound
13672229 13 3277 1938 +1339 stakingfacilities_lido 0x88a53ec4... BloXroute Max Profit
13675944 0 3046 1708 +1338 0x8527d16c... Ultra Sound
13675730 0 3045 1708 +1337 0x856b0004... BloXroute Max Profit
13672479 1 3062 1725 +1337 mantle 0x8527d16c... Ultra Sound
13673957 0 3043 1708 +1335 kelp 0xb26f9666... Titan Relay
13671706 0 3043 1708 +1335 0xb26f9666... Titan Relay
13674873 1 3060 1725 +1335 everstake 0xb26f9666... Titan Relay
13670392 10 3219 1885 +1334 p2porg 0xb26f9666... BloXroute Max Profit
13674234 2 3077 1743 +1334 everstake 0x88857150... Ultra Sound
13674821 5 3130 1796 +1334 kelp 0x8527d16c... Ultra Sound
13671953 1 3059 1725 +1334 everstake 0xb26f9666... Titan Relay
13676032 0 3041 1708 +1333 everstake 0xb26f9666... Titan Relay
13670506 3 3094 1761 +1333 0x8527d16c... Ultra Sound
13671259 7 3164 1832 +1332 0x853b0078... Aestus
13672430 10 3217 1885 +1332 origin_protocol 0x88857150... Ultra Sound
13675996 0 3040 1708 +1332 0xb26f9666... Aestus
13675652 10 3216 1885 +1331 0x8527d16c... Ultra Sound
13671960 3 3092 1761 +1331 everstake 0x8527d16c... Ultra Sound
13669699 3 3092 1761 +1331 everstake 0xb26f9666... Titan Relay
13669914 3 3091 1761 +1330 everstake 0x8527d16c... Ultra Sound
13672230 5 3125 1796 +1329 0x88a53ec4... BloXroute Max Profit
13672387 0 3036 1708 +1328 everstake 0x8527d16c... Ultra Sound
13669335 3 3089 1761 +1328 0x88857150... Ultra Sound
13670805 20 3389 2062 +1327 0x88a53ec4... BloXroute Max Profit
13669611 5 3123 1796 +1327 p2porg 0x8527d16c... Ultra Sound
13669867 7 3158 1832 +1326 0x8527d16c... Ultra Sound
13673843 6 3140 1814 +1326 0xb67eaa5e... BloXroute Regulated
13670764 3 3086 1761 +1325 figment 0x8527d16c... Ultra Sound
13673091 9 3192 1867 +1325 0x88a53ec4... BloXroute Max Profit
13672026 0 3032 1708 +1324 everstake 0x852b0070... BloXroute Max Profit
13676169 2 3067 1743 +1324 mantle 0xb26f9666... Titan Relay
13670880 5 3119 1796 +1323 0x88857150... Ultra Sound
13669537 8 3171 1849 +1322 p2porg 0x88a53ec4... BloXroute Max Profit
13671212 17 3330 2009 +1321 0xac23f8cc... BloXroute Max Profit
13672725 16 3312 1991 +1321 p2porg 0x856b0004... Aestus
13672416 7 3152 1832 +1320 kelp 0x88a53ec4... BloXroute Max Profit
13671838 0 3028 1708 +1320 0x852b0070... BloXroute Max Profit
13671707 0 3028 1708 +1320 nethermind_lido 0x91a8729e... BloXroute Max Profit
13671624 0 3028 1708 +1320 0xb26f9666... Aestus
13672380 6 3134 1814 +1320 figment 0x823e0146... Flashbots
13673870 5 3114 1796 +1318 0x88a53ec4... BloXroute Max Profit
13673095 5 3114 1796 +1318 0xb26f9666... Titan Relay
13673960 5 3114 1796 +1318 everstake 0xb67eaa5e... BloXroute Regulated
13669944 1 3043 1725 +1318 figment 0x823e0146... BloXroute Max Profit
13675224 1 3043 1725 +1318 nethermind_lido 0xb26f9666... Titan Relay
13676261 0 3025 1708 +1317 nethermind_lido 0xb67eaa5e... BloXroute Max Profit
13674602 0 3024 1708 +1316 everstake 0xb211df49... Ultra Sound
13676109 0 3023 1708 +1315 everstake 0x8527d16c... Ultra Sound
13671120 0 3023 1708 +1315 0x852b0070... BloXroute Max Profit
13673610 5 3111 1796 +1315 whale_0x4685 0x88857150... Ultra Sound
13674418 4 3092 1778 +1314 0x8527d16c... Ultra Sound
13673669 7 3145 1832 +1313 0x853b0078... Ultra Sound
13673256 0 3021 1708 +1313 0xb67eaa5e... BloXroute Max Profit
13673303 3 3074 1761 +1313 p2porg 0x8527d16c... Ultra Sound
13675977 5 3109 1796 +1313 0x8527d16c... Ultra Sound
13671667 0 3019 1708 +1311 p2porg 0x8527d16c... Ultra Sound
13669314 3 3072 1761 +1311 0x856b0004... Ultra Sound
13674116 3 3072 1761 +1311 0x88a53ec4... BloXroute Max Profit
13674029 19 3355 2044 +1311 blockdaemon_lido 0xb26f9666... Titan Relay
13673449 5 3107 1796 +1311 everstake 0x8527d16c... Ultra Sound
13670348 3 3071 1761 +1310 0xb26f9666... Titan Relay
13674400 0 3017 1708 +1309 nethermind_lido 0xb67eaa5e... BloXroute Regulated
13673764 5 3105 1796 +1309 p2porg 0xb26f9666... BloXroute Regulated
13670892 3 3069 1761 +1308 0xb26f9666... Titan Relay
13672533 3 3069 1761 +1308 everstake 0x8527d16c... Ultra Sound
13673025 0 3015 1708 +1307 stakingfacilities_lido 0x8527d16c... Ultra Sound
13673393 4 3084 1778 +1306 0x853b0078... Ultra Sound
13671227 3 3066 1761 +1305 everstake 0x8527d16c... Ultra Sound
13672629 4 3083 1778 +1305 0x850b00e0... BloXroute Max Profit
13669887 8 3153 1849 +1304 figment 0x850b00e0... BloXroute Max Profit
13669266 0 3011 1708 +1303 p2porg 0xb67eaa5e... BloXroute Max Profit
13669610 2 3046 1743 +1303 nethermind_lido 0xb26f9666... BloXroute Max Profit
13675361 5 3099 1796 +1303 everstake 0xac23f8cc... Flashbots
13669307 8 3152 1849 +1303 0xb26f9666... BloXroute Max Profit
13675235 1 3028 1725 +1303 0xac23f8cc... Flashbots
13672323 7 3134 1832 +1302 0x850b00e0... BloXroute Max Profit
13675003 0 3010 1708 +1302 0xb26f9666... Titan Relay
13669544 0 3010 1708 +1302 p2porg 0x850b00e0... Flashbots
13676398 3 3063 1761 +1302 0xb67eaa5e... BloXroute Regulated
13673177 5 3098 1796 +1302 mantle 0x856b0004... Agnostic Gnosis
13675823 8 3150 1849 +1301 kelp 0x853b0078... Ultra Sound
13670002 0 3008 1708 +1300 0xb67eaa5e... BloXroute Regulated
13674540 0 3008 1708 +1300 0x852b0070... Agnostic Gnosis
13673485 5 3096 1796 +1300 0x8527d16c... Ultra Sound
13673376 4 3078 1778 +1300 0xb26f9666... BloXroute Max Profit
13675302 9 3166 1867 +1299 0xb4ce6162... Ultra Sound
13671172 0 3006 1708 +1298 everstake 0x8527d16c... Ultra Sound
13670099 0 3006 1708 +1298 p2porg 0xb26f9666... BloXroute Regulated
13670732 16 3289 1991 +1298 ether.fi 0x8527d16c... Ultra Sound
13672063 5 3094 1796 +1298 abyss_finance 0xb26f9666... Titan Relay
13675130 4 3076 1778 +1298 ether.fi 0x88857150... Ultra Sound
13672491 7 3129 1832 +1297 nethermind_lido 0x8527d16c... Ultra Sound
13669883 3 3057 1761 +1296 p2porg 0x860d4173... Flashbots
13672959 2 3039 1743 +1296 blockscape_lido 0x8527d16c... Ultra Sound
13669344 15 3269 1973 +1296 0x823e0146... BloXroute Max Profit
13669419 4 3074 1778 +1296 0x853b0078... Ultra Sound
13671975 0 3003 1708 +1295 ether.fi 0x852b0070... Ultra Sound
13676175 5 3090 1796 +1294 p2porg 0x823e0146... Flashbots
13673635 0 3001 1708 +1293 0xb26f9666... Aestus
13669892 3 3054 1761 +1293 0x850b00e0... BloXroute Max Profit
13669961 6 3107 1814 +1293 0xb67eaa5e... BloXroute Regulated
13673284 7 3124 1832 +1292 ether.fi 0x856b0004... Aestus
13671864 2 3035 1743 +1292 everstake 0x853b0078... Aestus
13673144 1 3017 1725 +1292 abyss_finance 0xb26f9666... BloXroute Max Profit
13671875 1 3017 1725 +1292 0x853b0078... Agnostic Gnosis
13674070 3 3052 1761 +1291 0x88a53ec4... BloXroute Regulated
13674256 5 3087 1796 +1291 everstake 0xb26f9666... Titan Relay
13674626 0 2998 1708 +1290 0x852b0070... Ultra Sound
13670248 5 3086 1796 +1290 ether.fi 0xac23f8cc... BloXroute Max Profit
13675494 1 3015 1725 +1290 everstake 0xb67eaa5e... BloXroute Regulated
13674322 0 2996 1708 +1288 0xb26f9666... Aestus
13675133 0 2996 1708 +1288 0xb26f9666... BloXroute Max Profit
13676295 4 3066 1778 +1288 nethermind_lido 0x8527d16c... Ultra Sound
13673996 5 3083 1796 +1287 p2porg 0xb26f9666... BloXroute Regulated
13669576 5 3083 1796 +1287 0xb26f9666... Titan Relay
13670004 8 3136 1849 +1287 p2porg 0xb26f9666... BloXroute Max Profit
13675227 0 2994 1708 +1286 figment 0xb67eaa5e... BloXroute Regulated
13675640 3 3047 1761 +1286 0xb26f9666... Titan Relay
13669560 0 2993 1708 +1285 p2porg 0x8527d16c... Ultra Sound
13672761 7 3116 1832 +1284 0x853b0078... Aestus
13670050 0 2992 1708 +1284 nethermind_lido 0x91a8729e... BloXroute Max Profit
13670435 6 3098 1814 +1284 everstake 0x8527d16c... Ultra Sound
13670066 6 3098 1814 +1284 nethermind_lido 0x8527d16c... Ultra Sound
13671315 0 2990 1708 +1282 p2porg 0x91a8729e... BloXroute Max Profit
13670314 6 3096 1814 +1282 ether.fi 0x88857150... Ultra Sound
13675914 0 2989 1708 +1281 everstake 0x852b0070... BloXroute Max Profit
13675690 0 2989 1708 +1281 0x855b00e6... BloXroute Max Profit
13670952 0 2988 1708 +1280 0x8db2a99d... BloXroute Max Profit
13669705 0 2988 1708 +1280 everstake 0xb26f9666... Titan Relay
13669440 5 3076 1796 +1280 abyss_finance 0xb26f9666... Titan Relay
13674785 0 2986 1708 +1278 0x88a53ec4... BloXroute Max Profit
13670394 0 2986 1708 +1278 everstake 0x91a8729e... BloXroute Max Profit
13672893 3 3039 1761 +1278 0x8527d16c... Ultra Sound
13670482 5 3074 1796 +1278 0x855b00e6... Flashbots
13673866 7 3109 1832 +1277 0x856b0004... Aestus
13674087 0 2985 1708 +1277 kelp 0xb26f9666... Aestus
13673301 7 3108 1832 +1276 0x853b0078... Ultra Sound
13669795 6 3090 1814 +1276 everstake 0xb26f9666... Titan Relay
13673200 8 3125 1849 +1276 0x853b0078... Ultra Sound
13673949 1 3001 1725 +1276 abyss_finance 0xb67eaa5e... BloXroute Max Profit
13670438 3 3036 1761 +1275 everstake 0x8db2a99d... Flashbots
13673253 9 3142 1867 +1275 0x88a53ec4... BloXroute Max Profit
13670042 9 3142 1867 +1275 nethermind_lido 0x88857150... Ultra Sound
13671165 5 3071 1796 +1275 everstake 0x88a53ec4... BloXroute Max Profit
13669942 11 3177 1902 +1275 everstake 0xb67eaa5e... BloXroute Max Profit
13674108 7 3106 1832 +1274 0xb26f9666... Aestus
13673115 4 3052 1778 +1274 ether.fi 0x8db2a99d... Flashbots
13675081 7 3105 1832 +1273 0xb67eaa5e... BloXroute Max Profit
13675334 6 3087 1814 +1273 everstake 0x856b0004... Aestus
13669288 9 3140 1867 +1273 0x8527d16c... Ultra Sound
13671890 0 2979 1708 +1271 0xb67eaa5e... BloXroute Max Profit
13672312 3 3032 1761 +1271 stader 0x8527d16c... Ultra Sound
13670266 9 3138 1867 +1271 everstake 0x853b0078... Ultra Sound
13674261 1 2996 1725 +1271 everstake Local Local
13672231 5 3066 1796 +1270 0x8527d16c... Ultra Sound
13669532 8 3118 1849 +1269 everstake 0xb67eaa5e... BloXroute Max Profit
13676121 6 3082 1814 +1268 0x856b0004... Aestus
13671762 6 3081 1814 +1267 0x8db2a99d... BloXroute Max Profit
13673803 0 2974 1708 +1266 everstake 0x8527d16c... Ultra Sound
13672945 5 3062 1796 +1266 nethermind_lido 0xac23f8cc... BloXroute Max Profit
13670387 1 2991 1725 +1266 0x853b0078... BloXroute Max Profit
13671232 1 2991 1725 +1266 abyss_finance 0xb26f9666... BloXroute Regulated
13671398 0 2973 1708 +1265 0xb26f9666... BloXroute Regulated
13674258 3 3026 1761 +1265 0x856b0004... Ultra Sound
13669527 6 3079 1814 +1265 0xb67eaa5e... BloXroute Max Profit
13673413 15 3238 1973 +1265 stakingfacilities_lido 0x88857150... Ultra Sound
13674769 9 3131 1867 +1264 0x853b0078... Agnostic Gnosis
13672509 5 3060 1796 +1264 everstake 0x85fb0503... BloXroute Max Profit
Total anomalies: 431

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