Sun, Feb 15, 2026

Propagation anomalies - 2026-02-15

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-15' AND slot_start_date_time < '2026-02-15'::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-15' AND slot_start_date_time < '2026-02-15'::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-15' AND slot_start_date_time < '2026-02-15'::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-15' AND slot_start_date_time < '2026-02-15'::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-15' AND slot_start_date_time < '2026-02-15'::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-15' AND slot_start_date_time < '2026-02-15'::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-15' AND slot_start_date_time < '2026-02-15'::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-15' AND slot_start_date_time < '2026-02-15'::date + INTERVAL 1 DAY
          AND event_date_time > '1970-01-01 00:00:01'
        GROUP BY slot, column_index
    )
    GROUP BY slot
)

SELECT
    s.slot AS slot,
    s.slot_start_date_time AS slot_start_date_time,
    pe.entity AS proposer_entity,

    -- Blob count
    coalesce(bc.blob_count, 0) AS blob_count,

    -- MEV bid timing (absolute and relative to slot start)
    fromUnixTimestamp64Milli(mb.first_bid_timestamp_ms) AS first_bid_at,
    mb.first_bid_timestamp_ms - toInt64(toUnixTimestamp(mb.slot_start_date_time)) * 1000 AS first_bid_ms,
    fromUnixTimestamp64Milli(mb.last_bid_timestamp_ms) AS last_bid_at,
    mb.last_bid_timestamp_ms - toInt64(toUnixTimestamp(mb.slot_start_date_time)) * 1000 AS last_bid_ms,

    -- Winning bid timing (from bid_trace, may be NULL if block hash not in bid_trace)
    if(wb.slot != 0, fromUnixTimestamp64Milli(wb.winning_bid_timestamp_ms), NULL) AS winning_bid_at,
    if(wb.slot != 0, wb.winning_bid_timestamp_ms - toInt64(toUnixTimestamp(s.slot_start_date_time)) * 1000, NULL) AS winning_bid_ms,

    -- MEV payload info (from proposer_payload_delivered, always present for MEV blocks)
    if(mp.is_mev = 1, mp.winning_bid_value, NULL) AS winning_bid_value,
    if(mp.is_mev = 1, mp.relay_names, []) AS winning_relays,
    if(mp.is_mev = 1, mp.winning_builder, NULL) AS winning_builder,

    -- Block gossip timing with spread
    bg.block_first_seen,
    dateDiff('millisecond', s.slot_start_date_time, bg.block_first_seen) AS block_first_seen_ms,
    bg.block_last_seen,
    dateDiff('millisecond', s.slot_start_date_time, bg.block_last_seen) AS block_last_seen_ms,
    dateDiff('millisecond', bg.block_first_seen, bg.block_last_seen) AS block_spread_ms,

    -- Column arrival timing (NULL when no blobs)
    if(coalesce(bc.blob_count, 0) = 0, NULL, cg.first_column_first_seen) AS first_column_first_seen,
    if(coalesce(bc.blob_count, 0) = 0, NULL, dateDiff('millisecond', s.slot_start_date_time, cg.first_column_first_seen)) AS first_column_first_seen_ms,
    if(coalesce(bc.blob_count, 0) = 0, NULL, cg.last_column_first_seen) AS last_column_first_seen,
    if(coalesce(bc.blob_count, 0) = 0, NULL, dateDiff('millisecond', s.slot_start_date_time, cg.last_column_first_seen)) AS last_column_first_seen_ms,
    if(coalesce(bc.blob_count, 0) = 0, NULL, dateDiff('millisecond', cg.first_column_first_seen, cg.last_column_first_seen)) AS column_spread_ms

FROM slots s
GLOBAL LEFT JOIN proposer_entity pe ON s.proposer_validator_index = pe.index
GLOBAL LEFT JOIN blob_count bc ON s.slot = bc.slot
GLOBAL LEFT JOIN mev_bids mb ON s.slot = mb.slot
GLOBAL LEFT JOIN mev_payload mp ON s.slot = mp.slot
GLOBAL LEFT JOIN winning_bid wb ON s.slot = wb.slot
GLOBAL LEFT JOIN block_gossip bg ON s.slot = bg.slot
GLOBAL LEFT JOIN column_gossip cg ON s.slot = cg.slot

ORDER BY s.slot DESC
Show code
df = load_parquet("block_production_timeline", target_date)

# Filter to valid blocks (exclude missed slots)
df = df[df["block_first_seen_ms"].notna()]
df = df[(df["block_first_seen_ms"] >= 0) & (df["block_first_seen_ms"] < 60000)]

# Flag MEV vs local blocks
df["has_mev"] = df["winning_bid_value"].notna()
df["block_type"] = df["has_mev"].map({True: "MEV", False: "Local"})

# Get max blob count for charts
max_blobs = df["blob_count"].max()

print(f"Total valid blocks: {len(df):,}")
print(f"MEV blocks: {df['has_mev'].sum():,} ({df['has_mev'].mean()*100:.1f}%)")
print(f"Local blocks: {(~df['has_mev']).sum():,} ({(~df['has_mev']).mean()*100:.1f}%)")
Total valid blocks: 7,190
MEV blocks: 6,719 (93.4%)
Local blocks: 471 (6.6%)

Anomaly detection method

The method:

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

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

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

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

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

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

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

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

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

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

fig = go.Figure()

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

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

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

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

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

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

All propagation anomalies

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

Show code
# All anomalies table with selectable text and Lab links
if n_anomalies > 0:
    df_table = df_outliers.sort_values("residual_ms", ascending=False)[
        ["slot", "blob_count", "block_first_seen_ms", "expected_ms", "residual_ms", "proposer", "builder", "relay"]
    ].copy()
    df_table["block_first_seen_ms"] = df_table["block_first_seen_ms"].round(0).astype(int)
    df_table["expected_ms"] = df_table["expected_ms"].round(0).astype(int)
    df_table["residual_ms"] = df_table["residual_ms"].round(0).astype(int)
    
    # Build HTML table
    html = '''
    <style>
    .anomaly-table { border-collapse: collapse; width: 100%; font-family: monospace; font-size: 13px; }
    .anomaly-table th { background: #2c3e50; color: white; padding: 8px 12px; text-align: left; position: sticky; top: 0; }
    .anomaly-table td { padding: 6px 12px; border-bottom: 1px solid #eee; }
    .anomaly-table tr:hover { background: #f5f5f5; }
    .anomaly-table .num { text-align: right; }
    .anomaly-table .delta { background: #ffebee; color: #c62828; font-weight: bold; }
    .anomaly-table a { color: #1976d2; text-decoration: none; }
    .anomaly-table a:hover { text-decoration: underline; }
    .table-container { max-height: 600px; overflow-y: auto; }
    </style>
    <div class="table-container">
    <table class="anomaly-table">
    <thead>
    <tr><th>Slot</th><th class="num">Blobs</th><th class="num">Actual (ms)</th><th class="num">Expected (ms)</th><th class="num">Δ (ms)</th><th>Proposer</th><th>Builder</th><th>Relay</th></tr>
    </thead>
    <tbody>
    '''
    
    for _, row in df_table.iterrows():
        slot_link = f'<a href="https://lab.ethpandaops.io/ethereum/slots/{row["slot"]}" target="_blank">{row["slot"]}</a>'
        html += f'''<tr>
            <td>{slot_link}</td>
            <td class="num">{row["blob_count"]}</td>
            <td class="num">{row["block_first_seen_ms"]}</td>
            <td class="num">{row["expected_ms"]}</td>
            <td class="num delta">+{row["residual_ms"]}</td>
            <td>{row["proposer"]}</td>
            <td>{row["builder"]}</td>
            <td>{row["relay"]}</td>
        </tr>'''
    
    html += '</tbody></table></div>'
    display(HTML(html))
    print(f"\nTotal anomalies: {len(df_table):,}")
else:
    print("No anomalies detected.")
SlotBlobsActual (ms)Expected (ms)Δ (ms)ProposerBuilderRelay
13690939 0 8326 1723 +6603 abyss_finance Local Local
13692544 0 4708 1723 +2985 upbit Local Local
13691616 4 4653 1781 +2872 Local Local
13695648 0 4511 1723 +2788 Local Local
13696689 0 4373 1723 +2650 paralinker 0x99dbe3e8... Ultra Sound
13693953 0 4185 1723 +2462 Local Local
13693463 0 4070 1723 +2347 rocketpool Local Local
13695264 0 4067 1723 +2344 stakefish Local Local
13696163 0 4034 1723 +2311 Local Local
13697609 11 4155 1884 +2271 ether.fi 0xb67eaa5e... EthGas
13696192 4 3932 1781 +2151 upbit Local Local
13694816 8 3978 1840 +2138 upbit Local Local
13696901 0 3828 1723 +2105 Local Local
13694488 0 3710 1723 +1987 0xa9bd259c... Ultra Sound
13694774 0 3641 1723 +1918 0xa0366397... Ultra Sound
13691846 0 3625 1723 +1902 revolut Local Local
13694866 0 3603 1723 +1880 blockdaemon_lido 0xb67eaa5e... Titan Relay
13691093 1 3615 1737 +1878 lido 0x823e0146... BloXroute Max Profit
13692514 1 3614 1737 +1877 whale_0xdc8d 0x8527d16c... Ultra Sound
13692089 4 3655 1781 +1874 0x8527d16c... Ultra Sound
13694555 5 3661 1796 +1865 0xb26f9666... Titan Relay
13696232 9 3689 1855 +1834 0xb26f9666... Titan Relay
13692918 0 3553 1723 +1830 blockdaemon 0xb26f9666... Titan Relay
13692274 3 3572 1767 +1805 revolut 0xb26f9666... Titan Relay
13690799 0 3526 1723 +1803 ether.fi 0x88857150... Ultra Sound
13693708 0 3525 1723 +1802 0x8527d16c... Ultra Sound
13696337 3 3567 1767 +1800 everstake 0x850b00e0... BloXroute Max Profit
13695776 0 3521 1723 +1798 everstake 0xb26f9666... Titan Relay
13695567 8 3638 1840 +1798 whale_0xdc8d 0xb26f9666... Titan Relay
13694198 0 3516 1723 +1793 everstake 0xa9bd259c... Ultra Sound
13693854 1 3528 1737 +1791 lido 0x850b00e0... BloXroute Max Profit
13696596 8 3623 1840 +1783 everstake 0x8527d16c... Ultra Sound
13695170 1 3510 1737 +1773 blockdaemon 0xb4ce6162... Ultra Sound
13690880 3 3522 1767 +1755 everstake 0xb26f9666... Aestus
13697294 0 3477 1723 +1754 whale_0xdd6c 0x8527d16c... Ultra Sound
13693938 1 3491 1737 +1754 everstake 0x88857150... Ultra Sound
13693425 5 3548 1796 +1752 0x88857150... Ultra Sound
13692650 3 3516 1767 +1749 revolut 0x853b0078... Ultra Sound
13696256 8 3587 1840 +1747 blockdaemon_lido 0xb26f9666... Titan Relay
13690859 9 3590 1855 +1735 blockdaemon 0xb26f9666... Titan Relay
13691510 5 3520 1796 +1724 revolut 0xb26f9666... BloXroute Regulated
13693381 0 3446 1723 +1723 everstake 0xb67eaa5e... BloXroute Max Profit
13691905 8 3556 1840 +1716 everstake 0x853b0078... Agnostic Gnosis
13694655 4 3494 1781 +1713 bloxstaking 0xb26f9666... Titan Relay
13692984 11 3590 1884 +1706 everstake 0x850b00e0... BloXroute Max Profit
13693027 8 3533 1840 +1693 everstake 0x8527d16c... Ultra Sound
13691399 3 3454 1767 +1687 blockdaemon 0xb26f9666... Titan Relay
13693646 0 3407 1723 +1684 nethermind_lido 0xb26f9666... Titan Relay
13695520 11 3556 1884 +1672 everstake 0x88857150... Ultra Sound
13697729 9 3524 1855 +1669 stakely_lido 0x8db2a99d... BloXroute Max Profit
13697706 19 3670 2002 +1668 0x8527d16c... Ultra Sound
13694225 4 3445 1781 +1664 nethermind_lido 0x853b0078... Agnostic Gnosis
13696940 9 3512 1855 +1657 everstake 0x8527d16c... Ultra Sound
13693272 6 3466 1811 +1655 nethermind_lido 0xb26f9666... Titan Relay
13696174 1 3391 1737 +1654 everstake 0xb7c5beef... Ultra Sound
13694775 11 3537 1884 +1653 everstake 0x8527d16c... Ultra Sound
13693974 0 3375 1723 +1652 0x87cc2536... Aestus
13691691 12 3543 1899 +1644 everstake 0x856b0004... Aestus
13697300 5 3440 1796 +1644 blockdaemon_lido 0xb26f9666... Titan Relay
13694247 1 3378 1737 +1641 ether.fi 0x856b0004... Agnostic Gnosis
13692896 0 3363 1723 +1640 everstake 0x8527d16c... Ultra Sound
13693903 4 3421 1781 +1640 everstake 0x860d4173... Flashbots
13692493 0 3360 1723 +1637 everstake 0x8527d16c... Ultra Sound
13695670 7 3458 1826 +1632 everstake 0xb26f9666... Titan Relay
13690888 10 3501 1870 +1631 0x850b00e0... BloXroute Regulated
13697974 0 3344 1723 +1621 everstake 0x88a53ec4... BloXroute Regulated
13696987 5 3415 1796 +1619 everstake 0x8527d16c... Ultra Sound
13692342 6 3429 1811 +1618 everstake 0x8527d16c... Ultra Sound
13691191 7 3439 1826 +1613 dappnode Local Local
13695755 6 3424 1811 +1613 everstake 0x853b0078... Agnostic Gnosis
13691241 1 3346 1737 +1609 0xb26f9666... BloXroute Max Profit
13697295 3 3373 1767 +1606 everstake 0x8db2a99d... Flashbots
13697430 5 3402 1796 +1606 everstake 0xb26f9666... Aestus
13694179 5 3392 1796 +1596 blockdaemon_lido 0x8527d16c... Ultra Sound
13691008 5 3390 1796 +1594 everstake 0xb67eaa5e... BloXroute Max Profit
13692652 4 3375 1781 +1594 everstake 0x8527d16c... Ultra Sound
13693791 5 3389 1796 +1593 everstake 0x88a53ec4... BloXroute Max Profit
13693563 16 3547 1958 +1589 everstake 0x88857150... Ultra Sound
13693404 11 3473 1884 +1589 everstake 0xb67eaa5e... BloXroute Max Profit
13692935 0 3311 1723 +1588 everstake 0x850b00e0... Flashbots
13691749 3 3354 1767 +1587 blockdaemon_lido 0x88857150... Ultra Sound
13692283 4 3368 1781 +1587 everstake 0xb26f9666... Titan Relay
13697856 7 3412 1826 +1586 gateway.fmas_lido 0x853b0078... Ultra Sound
13696361 0 3308 1723 +1585 nethermind_lido 0x8527d16c... Ultra Sound
13695530 0 3307 1723 +1584 everstake 0xb67eaa5e... BloXroute Max Profit
13697184 0 3307 1723 +1584 gateway.fmas_lido 0xb67eaa5e... BloXroute Max Profit
13694564 4 3363 1781 +1582 everstake 0x855b00e6... Flashbots
13695307 0 3302 1723 +1579 everstake 0xb26f9666... BloXroute Max Profit
13692036 0 3300 1723 +1577 everstake 0xb26f9666... Aestus
13691450 2 3325 1752 +1573 blockdaemon_lido 0xb26f9666... Titan Relay
13691547 0 3294 1723 +1571 0xb26f9666... Titan Relay
13693992 3 3338 1767 +1571 everstake 0xb26f9666... Titan Relay
13692269 1 3308 1737 +1571 0xb67eaa5e... Titan Relay
13693057 3 3337 1767 +1570 blockdaemon 0x850b00e0... BloXroute Regulated
13697843 3 3332 1767 +1565 everstake 0x88857150... Ultra Sound
13693582 1 3300 1737 +1563 luno 0x88510a78... BloXroute Regulated
13692378 1 3298 1737 +1561 blockdaemon_lido 0xb26f9666... Titan Relay
13692912 1 3297 1737 +1560 blockdaemon 0xac23f8cc... BloXroute Max Profit
13692207 3 3326 1767 +1559 whale_0xba8f Local Local
13696584 12 3458 1899 +1559 0x856b0004... Ultra Sound
13690997 3 3320 1767 +1553 everstake 0x860d4173... Flashbots
13690996 0 3273 1723 +1550 whale_0x8ebd 0xb4ce6162... Ultra Sound
13696952 1 3287 1737 +1550 everstake 0x8527d16c... Ultra Sound
13692118 5 3345 1796 +1549 blockdaemon 0x850b00e0... BloXroute Max Profit
13697897 0 3270 1723 +1547 everstake 0x8527d16c... Ultra Sound
13691949 2 3299 1752 +1547 everstake 0xb26f9666... BloXroute Max Profit
13694135 0 3267 1723 +1544 blockdaemon 0x823e0146... BloXroute Max Profit
13693664 5 3340 1796 +1544 stakingfacilities_lido 0x856b0004... Agnostic Gnosis
13693734 8 3382 1840 +1542 everstake 0xb7c5beef... BloXroute Max Profit
13692832 5 3336 1796 +1540 binance 0x856b0004... Ultra Sound
13691532 5 3335 1796 +1539 everstake 0x8527d16c... Ultra Sound
13692016 13 3449 1914 +1535 everstake 0x88a53ec4... BloXroute Max Profit
13692557 9 3388 1855 +1533 everstake 0x855b00e6... BloXroute Max Profit
13697667 8 3369 1840 +1529 everstake 0x8527d16c... Ultra Sound
13694638 0 3246 1723 +1523 blockdaemon 0xb26f9666... Titan Relay
13694850 0 3245 1723 +1522 revolut 0xb26f9666... Titan Relay
13691219 8 3362 1840 +1522 blockdaemon 0x88857150... Ultra Sound
13693206 3 3288 1767 +1521 blockdaemon 0xb26f9666... Titan Relay
13696404 5 3316 1796 +1520 0x850b00e0... BloXroute Regulated
13695505 7 3342 1826 +1516 blockdaemon_lido 0x853b0078... Ultra Sound
13691577 2 3268 1752 +1516 blockdaemon 0xa230e2cf... BloXroute Max Profit
13696559 0 3238 1723 +1515 0xb26f9666... Titan Relay
13696120 1 3249 1737 +1512 blockdaemon_lido 0x88857150... Ultra Sound
13692150 0 3234 1723 +1511 ether.fi 0xb26f9666... Titan Relay
13696632 1 3248 1737 +1511 blockdaemon 0xb26f9666... Titan Relay
13692869 5 3303 1796 +1507 Local Local
13694848 0 3229 1723 +1506 figment 0x88a53ec4... BloXroute Regulated
13691356 3 3271 1767 +1504 everstake 0xa230e2cf... Flashbots
13696023 5 3299 1796 +1503 blockdaemon 0x8527d16c... Ultra Sound
13695522 1 3239 1737 +1502 everstake 0xb67eaa5e... BloXroute Max Profit
13694613 2 3253 1752 +1501 blockdaemon_lido 0xb67eaa5e... BloXroute Regulated
13693963 5 3294 1796 +1498 everstake 0xb26f9666... Aestus
13696053 8 3337 1840 +1497 blockdaemon_lido 0x8527d16c... Ultra Sound
13697046 0 3218 1723 +1495 p2porg 0xb211df49... Agnostic Gnosis
13692015 8 3325 1840 +1485 everstake 0x850b00e0... Flashbots
13693689 4 3266 1781 +1485 blockdaemon 0x8527d16c... Ultra Sound
13696945 0 3207 1723 +1484 blockdaemon_lido 0x8527d16c... Ultra Sound
13696688 3 3250 1767 +1483 luno 0x8527d16c... Ultra Sound
13694513 1 3220 1737 +1483 revolut 0x8527d16c... Ultra Sound
13692863 8 3318 1840 +1478 everstake 0x8527d16c... Ultra Sound
13693807 7 3300 1826 +1474 blockdaemon 0xb26f9666... Titan Relay
13692994 6 3284 1811 +1473 blockdaemon_lido 0x8527d16c... Ultra Sound
13691283 9 3328 1855 +1473 luno 0x856b0004... Ultra Sound
13697304 1 3209 1737 +1472 whale_0x8ebd 0x8527d16c... Ultra Sound
13693558 4 3253 1781 +1472 blockdaemon 0x853b0078... Ultra Sound
13693904 5 3265 1796 +1469 rocketpool 0x88a53ec4... BloXroute Max Profit
13697478 6 3278 1811 +1467 luno 0x8527d16c... Ultra Sound
13696322 9 3322 1855 +1467 revolut 0x8527d16c... Ultra Sound
13692773 3 3233 1767 +1466 blockdaemon 0xb26f9666... Titan Relay
13693280 6 3277 1811 +1466 0xac23f8cc... Flashbots
13697718 18 3453 1987 +1466 nethermind_lido 0xb26f9666... Titan Relay
13693426 1 3199 1737 +1462 lido 0x8527d16c... Ultra Sound
13693915 0 3181 1723 +1458 blockdaemon 0xb67eaa5e... BloXroute Regulated
13696625 10 3327 1870 +1457 0x853b0078... Ultra Sound
13693890 1 3191 1737 +1454 nethermind_lido 0xac23f8cc... BloXroute Max Profit
13697691 6 3264 1811 +1453 0x850b00e0... BloXroute Regulated
13695605 0 3175 1723 +1452 nethermind_lido 0x852b0070... Agnostic Gnosis
13692276 5 3248 1796 +1452 everstake 0x856b0004... Aestus
13692733 3 3208 1767 +1441 blockdaemon 0x8527d16c... Ultra Sound
13695727 5 3237 1796 +1441 0xb67eaa5e... BloXroute Regulated
13696809 6 3251 1811 +1440 0x850b00e0... BloXroute Regulated
13692314 9 3294 1855 +1439 revolut 0xb26f9666... Titan Relay
13696087 11 3322 1884 +1438 luno 0x856b0004... Ultra Sound
13693185 0 3160 1723 +1437 blockdaemon_lido 0xb26f9666... Titan Relay
13691856 9 3292 1855 +1437 ether.fi 0x856b0004... Agnostic Gnosis
13696536 1 3173 1737 +1436 bitstamp 0xb26f9666... Aestus
13697539 8 3274 1840 +1434 nethermind_lido 0xb26f9666... Titan Relay
13695168 0 3156 1723 +1433 abyss_finance 0xb26f9666... BloXroute Max Profit
13695340 0 3151 1723 +1428 p2porg 0xb26f9666... Aestus
13691617 0 3150 1723 +1427 stakingfacilities_lido 0x8527d16c... Ultra Sound
13694975 5 3223 1796 +1427 lido Local Local
13695851 1 3163 1737 +1426 bitstamp 0x853b0078... Agnostic Gnosis
13696554 9 3278 1855 +1423 0x853b0078... Titan Relay
13692765 2 3175 1752 +1423 nethermind_lido 0x8db2a99d... BloXroute Max Profit
13691148 0 3145 1723 +1422 p2porg 0xb211df49... Ultra Sound
13696336 8 3262 1840 +1422 blockdaemon 0x8527d16c... Ultra Sound
13692701 0 3141 1723 +1418 blockdaemon_lido 0x8527d16c... Ultra Sound
13693172 2 3170 1752 +1418 gateway.fmas_lido 0x823e0146... Flashbots
13696996 1 3155 1737 +1418 everstake 0xb26f9666... Aestus
13690804 0 3140 1723 +1417 nethermind_lido 0x8527d16c... Ultra Sound
13694221 2 3169 1752 +1417 ether.fi 0x8db2a99d... BloXroute Max Profit
13696750 0 3139 1723 +1416 whale_0x8ebd 0x8a850621... Ultra Sound
13691966 0 3138 1723 +1415 everstake 0xb26f9666... Titan Relay
13696248 6 3226 1811 +1415 luno 0x8527d16c... Ultra Sound
13693109 6 3225 1811 +1414 nethermind_lido 0x8527d16c... Ultra Sound
13695690 3 3177 1767 +1410 0x850b00e0... BloXroute Max Profit
13694853 0 3131 1723 +1408 gateway.fmas_lido 0x851b00b1... Ultra Sound
13691858 5 3204 1796 +1408 0x8527d16c... Ultra Sound
13693486 9 3262 1855 +1407 0x850b00e0... BloXroute Max Profit
13693968 0 3129 1723 +1406 nethermind_lido 0xb7c5beef... Titan Relay
13691460 0 3129 1723 +1406 ether.fi 0x8527d16c... Ultra Sound
13694260 0 3128 1723 +1405 blockdaemon_lido 0x8527d16c... Ultra Sound
13692768 0 3128 1723 +1405 whale_0xdd6c 0x88a53ec4... BloXroute Max Profit
13691976 0 3128 1723 +1405 nethermind_lido 0xb26f9666... Aestus
13697015 3 3169 1767 +1402 everstake 0x8527d16c... Ultra Sound
13696556 17 3374 1973 +1401 p2porg 0x856b0004... Agnostic Gnosis
13690985 5 3197 1796 +1401 p2porg 0x850b00e0... BloXroute Regulated
13691056 0 3123 1723 +1400 rocketpool 0x88510a78... Ultra Sound
13696458 4 3181 1781 +1400 nethermind_lido 0x8db2a99d... BloXroute Max Profit
13694875 6 3209 1811 +1398 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
13695429 19 3400 2002 +1398 0x8db2a99d... BloXroute Max Profit
13694662 10 3266 1870 +1396 stakingfacilities_lido 0x8527d16c... Ultra Sound
13690881 6 3204 1811 +1393 bitstamp 0x8527d16c... Ultra Sound
13697301 6 3203 1811 +1392 0x8527d16c... Ultra Sound
13694712 18 3379 1987 +1392 blockdaemon_lido 0x853b0078... Ultra Sound
13691045 8 3232 1840 +1392 blockdaemon 0x88a53ec4... BloXroute Regulated
13690983 7 3217 1826 +1391 0x8527d16c... Ultra Sound
13692993 3 3158 1767 +1391 p2porg 0x8527d16c... Ultra Sound
13692424 3 3156 1767 +1389 blockdaemon 0x8527d16c... Ultra Sound
13691618 5 3183 1796 +1387 gateway.fmas_lido 0x855b00e6... BloXroute Max Profit
13695418 8 3227 1840 +1387 ether.fi 0xb26f9666... Titan Relay
13697122 0 3109 1723 +1386 gateway.fmas_lido 0x88857150... Ultra Sound
13692365 8 3223 1840 +1383 blockdaemon_lido 0x853b0078... Ultra Sound
13691006 6 3192 1811 +1381 p2porg 0x850b00e0... Flashbots
13691606 1 3116 1737 +1379 gateway.fmas_lido 0x8527d16c... Ultra Sound
13692635 5 3171 1796 +1375 0xb67eaa5e... BloXroute Regulated
13695466 3 3141 1767 +1374 0x88857150... Ultra Sound
13694578 0 3096 1723 +1373 whale_0x8ebd 0x853b0078... Ultra Sound
13692143 6 3184 1811 +1373 nethermind_lido 0x8527d16c... Ultra Sound
13696297 6 3184 1811 +1373 gateway.fmas_lido 0x8527d16c... Ultra Sound
13691014 3 3139 1767 +1372 gateway.fmas_lido 0x88857150... Ultra Sound
13693121 8 3212 1840 +1372 p2porg 0x850b00e0... BloXroute Max Profit
13697055 4 3153 1781 +1372 p2porg 0xb26f9666... Titan Relay
13696426 0 3094 1723 +1371 whale_0x8ebd 0x852b0070... BloXroute Max Profit
13692137 4 3152 1781 +1371 ether.fi 0xb26f9666... Titan Relay
13691735 0 3093 1723 +1370 gateway.fmas_lido 0xac23f8cc... Flashbots
13694235 8 3210 1840 +1370 p2porg 0x850b00e0... BloXroute Max Profit
13692284 1 3107 1737 +1370 gateway.fmas_lido 0xac23f8cc... Flashbots
13694766 3 3136 1767 +1369 nethermind_lido 0xb26f9666... Titan Relay
13695235 1 3106 1737 +1369 0xb26f9666... Titan Relay
13693503 6 3179 1811 +1368 p2porg 0x8527d16c... Ultra Sound
13693102 13 3281 1914 +1367 0xb67eaa5e... BloXroute Max Profit
13692355 8 3207 1840 +1367 p2porg 0x8527d16c... Ultra Sound
13697062 6 3176 1811 +1365 kelp 0x8527d16c... Ultra Sound
13694319 3 3129 1767 +1362 0x850b00e0... BloXroute Regulated
13697038 6 3173 1811 +1362 ether.fi 0x8527d16c... Ultra Sound
13692377 4 3143 1781 +1362 0x88857150... Ultra Sound
13695271 0 3083 1723 +1360 nethermind_lido 0x8527d16c... Ultra Sound
13691069 5 3156 1796 +1360 kelp 0x8527d16c... Ultra Sound
13693227 4 3141 1781 +1360 0xb26f9666... BloXroute Regulated
13695481 4 3140 1781 +1359 ether.fi 0x8527d16c... Ultra Sound
13691027 0 3081 1723 +1358 ether.fi 0x88857150... Ultra Sound
13696473 7 3183 1826 +1357 p2porg 0x850b00e0... BloXroute Regulated
13695273 3 3123 1767 +1356 everstake 0x8527d16c... Ultra Sound
13693704 1 3093 1737 +1356 everstake 0x853b0078... Ultra Sound
13696418 3 3122 1767 +1355 0x8527d16c... Ultra Sound
13694951 5 3151 1796 +1355 0x850b00e0... BloXroute Regulated
13696771 5 3151 1796 +1355 ether.fi 0xb26f9666... EthGas
13692029 5 3151 1796 +1355 0x8527d16c... Ultra Sound
13690977 4 3136 1781 +1355 nethermind_lido 0x8527d16c... Ultra Sound
13691827 6 3165 1811 +1354 ether.fi 0x8527d16c... Ultra Sound
13696705 16 3311 1958 +1353 mantle 0x8527d16c... Ultra Sound
13696250 11 3237 1884 +1353 gateway.fmas_lido 0x853b0078... Aestus
13695529 10 3222 1870 +1352 gateway.fmas_lido 0x855b00e6... Ultra Sound
13691031 1 3089 1737 +1352 0xb26f9666... Titan Relay
13691333 0 3074 1723 +1351 everstake 0xb26f9666... Titan Relay
13692138 5 3147 1796 +1351 p2porg 0x850b00e0... BloXroute Max Profit
13697499 0 3073 1723 +1350 p2porg 0x8527d16c... Ultra Sound
13693358 13 3264 1914 +1350 abyss_finance Local Local
13695190 3 3117 1767 +1350 p2porg 0xb67eaa5e... BloXroute Max Profit
13694871 9 3205 1855 +1350 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
13692645 15 3292 1943 +1349 0x856b0004... Agnostic Gnosis
13692803 12 3247 1899 +1348 ether.fi 0x8527d16c... Ultra Sound
13693243 5 3144 1796 +1348 ether.fi 0xb67eaa5e... BloXroute Max Profit
13691435 8 3187 1840 +1347 ether.fi 0x88857150... EthGas
13693273 0 3069 1723 +1346 p2porg 0xb26f9666... Titan Relay
13696948 3 3113 1767 +1346 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
13691202 8 3185 1840 +1345 0x850b00e0... BloXroute Regulated
13696276 0 3067 1723 +1344 everstake 0xb26f9666... Titan Relay
13694468 0 3066 1723 +1343 nethermind_lido 0x852b0070... Aestus
13694115 6 3154 1811 +1343 p2porg 0x88a53ec4... BloXroute Regulated
13691799 1 3078 1737 +1341 0x850b00e0... BloXroute Regulated
13694384 7 3163 1826 +1337 ether.fi 0xac23f8cc... Flashbots
13696515 1 3074 1737 +1337 mantle 0xb26f9666... Titan Relay
13693679 1 3074 1737 +1337 0x853b0078... Ultra Sound
13692864 0 3058 1723 +1335 whale_0x8ebd 0x852b0070... BloXroute Max Profit
13692942 5 3131 1796 +1335 gateway.fmas_lido 0x8527d16c... Ultra Sound
13693957 2 3086 1752 +1334 gateway.fmas_lido 0x853b0078... Ultra Sound
13691182 0 3056 1723 +1333 everstake 0x852b0070... Agnostic Gnosis
13691559 3 3100 1767 +1333 everstake 0x88857150... Ultra Sound
13693999 3 3100 1767 +1333 p2porg 0x850b00e0... BloXroute Regulated
13694861 0 3055 1723 +1332 0x88a53ec4... BloXroute Max Profit
13690914 0 3055 1723 +1332 0x8527d16c... Ultra Sound
13697555 3 3099 1767 +1332 ether.fi 0xb26f9666... Titan Relay
13695874 2 3084 1752 +1332 p2porg 0x850b00e0... BloXroute Regulated
13692987 5 3128 1796 +1332 p2porg 0x8527d16c... Ultra Sound
13691824 0 3053 1723 +1330 everstake 0x8527d16c... Ultra Sound
13697985 3 3096 1767 +1329 p2porg 0x8527d16c... Ultra Sound
13693303 5 3125 1796 +1329 p2porg 0x856b0004... Ultra Sound
13695444 8 3169 1840 +1329 everstake 0x850b00e0... BloXroute Max Profit
13697717 21 3360 2031 +1329 abyss_finance 0x8527d16c... Ultra Sound
13694133 11 3213 1884 +1329 nethermind_lido 0x8527d16c... Ultra Sound
13692105 9 3183 1855 +1328 p2porg 0x850b00e0... BloXroute Regulated
13697611 8 3168 1840 +1328 nethermind_lido 0x8527d16c... Ultra Sound
13694175 8 3168 1840 +1328 kelp 0x88857150... Ultra Sound
13695989 0 3050 1723 +1327 p2porg 0xb26f9666... BloXroute Max Profit
13696547 0 3049 1723 +1326 0xb26f9666... Titan Relay
13697101 4 3107 1781 +1326 whale_0x8ebd 0xb26f9666... Titan Relay
13694337 10 3195 1870 +1325 bitstamp 0x88857150... Ultra Sound
13696808 8 3165 1840 +1325 nethermind_lido 0x8527d16c... Ultra Sound
13691860 9 3179 1855 +1324 nethermind_lido 0xb26f9666... Titan Relay
13693126 0 3046 1723 +1323 p2porg 0x852b0070... BloXroute Max Profit
13697160 3 3090 1767 +1323 p2porg 0xb26f9666... Titan Relay
13697516 5 3119 1796 +1323 abyss_finance 0x8527d16c... Ultra Sound
13695362 9 3177 1855 +1322 0xb26f9666... BloXroute Max Profit
13694924 3 3088 1767 +1321 p2porg 0x853b0078... Aestus
13697594 5 3117 1796 +1321 everstake 0xb26f9666... Titan Relay
13693409 5 3117 1796 +1321 p2porg 0x8527d16c... Ultra Sound
13693994 4 3102 1781 +1321 p2porg 0x88a53ec4... BloXroute Max Profit
13694986 1 3057 1737 +1320 0x8527d16c... Ultra Sound
13697792 4 3101 1781 +1320 everstake 0x8527d16c... Ultra Sound
13695280 1 3056 1737 +1319 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
13695403 3 3085 1767 +1318 everstake 0x8527d16c... Ultra Sound
13696421 9 3173 1855 +1318 0xb26f9666... BloXroute Max Profit
13697157 1 3055 1737 +1318 p2porg 0xb26f9666... BloXroute Max Profit
13697692 8 3157 1840 +1317 ether.fi 0xb26f9666... Titan Relay
13692187 1 3054 1737 +1317 0x8527d16c... Ultra Sound
13691867 1 3053 1737 +1316 mantle 0xb26f9666... Titan Relay
13691096 3 3082 1767 +1315 whale_0x23be 0x856b0004... Ultra Sound
13693174 3 3082 1767 +1315 p2porg 0xb26f9666... BloXroute Max Profit
13694789 12 3214 1899 +1315 gateway.fmas_lido 0x8db2a99d... BloXroute Max Profit
13695722 0 3037 1723 +1314 0x853b0078... BloXroute Max Profit
13691480 5 3110 1796 +1314 ether.fi 0x88857150... Ultra Sound
13691785 7 3139 1826 +1313 mantle 0x88857150... Ultra Sound
13697171 0 3035 1723 +1312 p2porg 0x8527d16c... Ultra Sound
13693281 1 3049 1737 +1312 0x856b0004... Agnostic Gnosis
13696047 4 3093 1781 +1312 figment 0x8527d16c... Ultra Sound
13697680 0 3034 1723 +1311 0x852b0070... Agnostic Gnosis
13691194 0 3033 1723 +1310 0xb26f9666... BloXroute Max Profit
13691354 5 3106 1796 +1310 0x88a53ec4... BloXroute Max Profit
13691153 7 3135 1826 +1309 everstake 0x856b0004... Agnostic Gnosis
13691716 1 3046 1737 +1309 whale_0x7791 0x8527d16c... Ultra Sound
13696854 4 3090 1781 +1309 whale_0x8ebd 0x856b0004... Ultra Sound
13694035 3 3075 1767 +1308 p2porg 0xb67eaa5e... BloXroute Max Profit
13693007 3 3075 1767 +1308 kiln 0x8527d16c... Ultra Sound
13692562 0 3030 1723 +1307 everstake 0xb26f9666... Titan Relay
13692819 3 3074 1767 +1307 0x88857150... Ultra Sound
13692315 3 3074 1767 +1307 0xa230e2cf... Flashbots
13697496 1 3044 1737 +1307 0x823e0146... BloXroute Max Profit
13695985 0 3028 1723 +1305 everstake 0xb26f9666... Aestus
13695257 0 3028 1723 +1305 0x852b0070... Flashbots
13697613 5 3101 1796 +1305 kelp 0x88857150... Ultra Sound
13694994 4 3086 1781 +1305 kelp 0x8527d16c... Ultra Sound
13692555 5 3100 1796 +1304 gateway.fmas_lido 0x8527d16c... Ultra Sound
13691225 0 3026 1723 +1303 whale_0x8ebd 0xa9bd259c... Ultra Sound
13694473 0 3025 1723 +1302 everstake 0xb26f9666... Titan Relay
13697285 0 3025 1723 +1302 0x88857150... Ultra Sound
13692889 9 3157 1855 +1302 mantle 0x8527d16c... Ultra Sound
13695388 10 3171 1870 +1301 ether.fi 0x88a53ec4... BloXroute Max Profit
13692022 0 3024 1723 +1301 0x88857150... Ultra Sound
13693935 0 3024 1723 +1301 p2porg 0x852b0070... BloXroute Max Profit
13692403 9 3156 1855 +1301 stakingfacilities_lido 0x8527d16c... Ultra Sound
13695881 3 3067 1767 +1300 whale_0x8ebd 0x850b00e0... BloXroute Max Profit
13697098 5 3096 1796 +1300 0xb26f9666... BloXroute Max Profit
13696980 11 3184 1884 +1300 nethermind_lido 0x856b0004... Aestus
13693802 0 3022 1723 +1299 0xac23f8cc... BloXroute Max Profit
13696464 3 3066 1767 +1299 everstake 0x856b0004... Aestus
13694912 6 3110 1811 +1299 kraken 0xb7c5beef... Titan Relay
13691628 0 3021 1723 +1298 whale_0x7791 0xb26f9666... Titan Relay
13694450 0 3021 1723 +1298 everstake 0xb26f9666... Titan Relay
13693247 1 3035 1737 +1298 figment 0x8527d16c... Ultra Sound
13692465 10 3166 1870 +1296 gateway.fmas_lido 0x8527d16c... Ultra Sound
13696567 0 3019 1723 +1296 abyss_finance 0xb26f9666... Aestus
13694561 13 3210 1914 +1296 stakingfacilities_lido 0x8527d16c... Ultra Sound
13694266 0 3018 1723 +1295 origin_protocol 0x852b0070... Agnostic Gnosis
13695211 0 3018 1723 +1295 whale_0x8ebd 0x8527d16c... Ultra Sound
13690833 8 3135 1840 +1295 0x8527d16c... Ultra Sound
13694291 8 3135 1840 +1295 gateway.fmas_lido 0xb7c5beef... Ultra Sound
13693794 0 3017 1723 +1294 whale_0x8ebd 0x8527d16c... Ultra Sound
13694931 0 3017 1723 +1294 ether.fi 0xb26f9666... Titan Relay
13697946 3 3061 1767 +1294 0xb26f9666... Titan Relay
13691252 0 3016 1723 +1293 kelp 0xb26f9666... Titan Relay
13691406 6 3104 1811 +1293 kelp 0x88857150... Ultra Sound
13696983 3 3056 1767 +1289 everstake 0xb67eaa5e... BloXroute Regulated
13697238 8 3129 1840 +1289 whale_0x8ebd 0x856b0004... Ultra Sound
13694443 1 3026 1737 +1289 everstake 0x88a53ec4... BloXroute Max Profit
13692458 1 3026 1737 +1289 p2porg 0xb26f9666... BloXroute Regulated
13692125 0 3011 1723 +1288 0x823e0146... Flashbots
13695144 10 3157 1870 +1287 everstake 0x8527d16c... Ultra Sound
13692998 0 3010 1723 +1287 kelp 0x8527d16c... Ultra Sound
13695628 13 3201 1914 +1287 stakingfacilities_lido 0x8527d16c... Ultra Sound
13692192 4 3068 1781 +1287 whale_0x8ebd 0x8db2a99d... Flashbots
13694757 7 3111 1826 +1285 0xb26f9666... Titan Relay
13697799 0 3008 1723 +1285 p2porg 0x88a53ec4... BloXroute Max Profit
13693606 1 3022 1737 +1285 kelp 0x853b0078... Agnostic Gnosis
13697821 4 3066 1781 +1285 figment 0x860d4173... Flashbots
13693089 0 3007 1723 +1284 whale_0x8ebd 0xb26f9666... Titan Relay
13696912 9 3139 1855 +1284 abyss_finance 0xb26f9666... BloXroute Regulated
13693453 4 3064 1781 +1283 0x8527d16c... Ultra Sound
13696153 7 3108 1826 +1282 abyss_finance 0x856b0004... Aestus
13693640 0 3005 1723 +1282 p2porg 0x852b0070... Agnostic Gnosis
13692858 0 3005 1723 +1282 0xb26f9666... BloXroute Regulated
13693145 1 3019 1737 +1282 0x823e0146... Flashbots
13692213 4 3063 1781 +1282 0xb7c5beef... Titan Relay
13691673 7 3107 1826 +1281 ether.fi 0x8527d16c... Ultra Sound
13694854 4 3062 1781 +1281 everstake 0x8527d16c... Ultra Sound
13692320 5 3076 1796 +1280 0x8a850621... Ultra Sound
13694231 3 3046 1767 +1279 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
13691816 9 3134 1855 +1279 whale_0x8ebd 0x853b0078... Ultra Sound
13696938 0 3001 1723 +1278 0xa9bd259c... Ultra Sound
13696895 0 3001 1723 +1278 bitstamp 0x852b0070... Aestus
13697850 0 3001 1723 +1278 mantle 0xb26f9666... Titan Relay
13697364 3 3045 1767 +1278 0x88a53ec4... BloXroute Regulated
13695485 6 3089 1811 +1278 stakingfacilities_lido 0x856b0004... Ultra Sound
13693305 2 3030 1752 +1278 0xb26f9666... Aestus
13691734 5 3074 1796 +1278 p2porg 0xb67eaa5e... BloXroute Max Profit
13694845 1 3015 1737 +1278 0xb26f9666... BloXroute Max Profit
13695884 0 3000 1723 +1277 p2porg 0x853b0078... Agnostic Gnosis
13691941 0 3000 1723 +1277 0x856b0004... Agnostic Gnosis
13697728 6 3088 1811 +1277 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
13697786 12 3176 1899 +1277 whale_0x8ebd 0x856b0004... Ultra Sound
13695995 0 2999 1723 +1276 0xb26f9666... BloXroute Max Profit
13696058 0 2999 1723 +1276 ether.fi 0xb67eaa5e... BloXroute Max Profit
13694257 1 3013 1737 +1276 0x853b0078... BloXroute Max Profit
13696456 0 2998 1723 +1275 p2porg 0xb67eaa5e... BloXroute Max Profit
13695443 0 2998 1723 +1275 coinbase 0x8a850621... Ultra Sound
13695312 3 3041 1767 +1274 0xb67eaa5e... BloXroute Regulated
13696182 3 3041 1767 +1274 0xb67eaa5e... BloXroute Max Profit
Total anomalies: 418

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