Mon, Apr 20, 2026

Propagation anomalies - 2026-04-20

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

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

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

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

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

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

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

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

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

-- Column arrival timing: first arrival per column, then min/max of those
column_gossip AS (
    SELECT
        slot,
        min(first_seen) AS first_column_first_seen,
        max(first_seen) AS last_column_first_seen
    FROM (
        SELECT
            slot,
            column_index,
            min(event_date_time) AS first_seen
        FROM libp2p_gossipsub_data_column_sidecar
        WHERE meta_network_name = 'mainnet'
          AND slot_start_date_time >= '2026-04-20' AND slot_start_date_time < '2026-04-20'::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,192
MEV blocks: 6,840 (95.1%)
Local blocks: 352 (4.9%)

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 = 1671.4 + 19.77 × blob_count (R² = 0.011)
Residual σ = 627.7ms
Anomalies (>2σ slow): 434 (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
14154505 0 20073 1671 +18402 solo_stakers Local Local
14155552 0 4936 1671 +3265 ether.fi Local Local
14153600 0 4647 1671 +2976 upbit Local Local
14153696 0 4038 1671 +2367 upbit Local Local
14152164 0 3769 1671 +2098 solo_stakers Local Local
14153440 0 3726 1671 +2055 whale_0xd5e9 Local Local
14153504 0 3649 1671 +1978 blockdaemon 0x850b00e0... BloXroute Max Profit
14152257 1 3665 1691 +1974 stader 0x857b0038... BloXroute Regulated
14153889 2 3636 1711 +1925 lido 0xb26f9666... Titan Relay
14153132 1 3607 1691 +1916 blockdaemon 0x857b0038... BloXroute Regulated
14157958 0 3586 1671 +1915 solo_stakers Local Local
14157926 3 3602 1731 +1871 blockdaemon 0xb67eaa5e... BloXroute Regulated
14157928 5 3639 1770 +1869 blockdaemon 0xb4ce6162... Ultra Sound
14155530 5 3565 1770 +1795 blockdaemon 0x857b0038... Ultra Sound
14158246 0 3450 1671 +1779 solo_stakers 0xba003e46... Flashbots
14156096 0 3449 1671 +1778 bitstamp 0x8527d16c... Ultra Sound
14158003 0 3444 1671 +1773 blockdaemon_lido 0x851b00b1... BloXroute Max Profit
14157045 1 3455 1691 +1764 blockdaemon_lido 0xb67eaa5e... Titan Relay
14153136 0 3422 1671 +1751 coinbase 0x823e0146... Aestus
14157703 3 3479 1731 +1748 nethermind_lido 0x8db2a99d... Aestus
14157756 9 3597 1849 +1748 coinbase 0x88857150... Ultra Sound
14157183 5 3517 1770 +1747 blockdaemon 0x857b0038... Ultra Sound
14154571 2 3456 1711 +1745 blockdaemon_lido 0x850b00e0... Ultra Sound
14157795 1 3429 1691 +1738 ether.fi 0xb67eaa5e... Titan Relay
14153152 0 3399 1671 +1728 revolut 0x853b0078... Ultra Sound
14155390 1 3418 1691 +1727 whale_0x6ddb 0x857b0038... BloXroute Regulated
14155010 5 3497 1770 +1727 blockdaemon 0xb67eaa5e... BloXroute Regulated
14155943 1 3414 1691 +1723 ether.fi 0xb67eaa5e... Titan Relay
14152030 2 3433 1711 +1722 lido 0x8527d16c... Ultra Sound
14156770 0 3393 1671 +1722 nethermind_lido 0xb26f9666... Aestus
14156801 6 3510 1790 +1720 blockdaemon_lido 0x856b0004... BloXroute Max Profit
14153725 1 3407 1691 +1716 blockdaemon 0x8a850621... Titan Relay
14157753 3 3446 1731 +1715 blockdaemon 0x857b0038... Ultra Sound
14155760 6 3501 1790 +1711 blockdaemon 0x8a850621... Titan Relay
14154093 0 3381 1671 +1710 blockdaemon_lido 0xb26f9666... Titan Relay
14155824 5 3478 1770 +1708 ether.fi 0x8db2a99d... Ultra Sound
14156881 0 3374 1671 +1703 ether.fi 0x8db2a99d... Ultra Sound
14154112 0 3372 1671 +1701 revolut 0x82c466b9... Titan Relay
14156218 0 3370 1671 +1699 nethermind_lido 0xb26f9666... Aestus
14155876 0 3367 1671 +1696 nethermind_lido 0xb26f9666... Aestus
14154743 5 3465 1770 +1695 ether.fi 0xb67eaa5e... BloXroute Max Profit
14153525 5 3460 1770 +1690 blockdaemon_lido 0x823e0146... Ultra Sound
14158026 6 3479 1790 +1689 whale_0x4b5e 0x8527d16c... Ultra Sound
14158068 2 3398 1711 +1687 blockdaemon 0x857b0038... Ultra Sound
14158013 12 3595 1909 +1686 blockdaemon 0x8527d16c... Ultra Sound
14155119 3 3417 1731 +1686 blockdaemon 0x8a850621... Titan Relay
14157717 3 3416 1731 +1685 nethermind_lido 0xb26f9666... Aestus
14155981 0 3353 1671 +1682 whale_0x8ebd 0x857b0038... Ultra Sound
14155395 7 3485 1810 +1675 blockdaemon 0x857b0038... Ultra Sound
14154053 0 3343 1671 +1672 ether.fi 0xb26f9666... Titan Relay
14151925 1 3359 1691 +1668 ether.fi 0x8db2a99d... Flashbots
14152581 2 3377 1711 +1666 luno 0x88a53ec4... BloXroute Regulated
14157407 0 3337 1671 +1666 blockdaemon_lido 0xb26f9666... Titan Relay
14157992 7 3473 1810 +1663 blockdaemon 0xb67eaa5e... BloXroute Max Profit
14157431 8 3489 1830 +1659 blockdaemon 0x850b00e0... BloXroute Max Profit
14154788 0 3324 1671 +1653 blockdaemon 0x857b0038... Ultra Sound
14158481 1 3339 1691 +1648 whale_0xdc8d 0x856b0004... BloXroute Max Profit
14154737 4 3396 1751 +1645 ether.fi Local Local
14155634 0 3316 1671 +1645 blockdaemon 0x8a850621... Titan Relay
14157291 1 3332 1691 +1641 blockdaemon 0xb26f9666... Titan Relay
14152357 5 3409 1770 +1639 solo_stakers 0x853b0078... Flashbots
14153036 0 3309 1671 +1638 blockdaemon 0x8527d16c... Ultra Sound
14157007 1 3328 1691 +1637 ether.fi 0x8527d16c... Ultra Sound
14152383 1 3327 1691 +1636 blockdaemon 0x8a850621... Titan Relay
14157115 1 3324 1691 +1633 blockdaemon_lido 0xb26f9666... Titan Relay
14154886 6 3420 1790 +1630 nethermind_lido 0x88857150... Ultra Sound
14154643 0 3300 1671 +1629 whale_0xdc8d 0xb26f9666... Titan Relay
14154589 1 3318 1691 +1627 blockdaemon 0x856b0004... Ultra Sound
14153059 0 3298 1671 +1627 blockdaemon 0x857b0038... Ultra Sound
14152377 1 3312 1691 +1621 blockdaemon 0x82c466b9... Ultra Sound
14154611 1 3311 1691 +1620 ether.fi 0xb26f9666... BloXroute Max Profit
14153396 3 3349 1731 +1618 blockdaemon_lido 0x850b00e0... BloXroute Max Profit
14153120 7 3425 1810 +1615 blockdaemon_lido 0xb67eaa5e... BloXroute Regulated
14153337 3 3345 1731 +1614 0x853b0078... Ultra Sound
14151600 0 3284 1671 +1613 p2porg 0x851b00b1... Ultra Sound
14157738 0 3280 1671 +1609 blockdaemon 0x856b0004... Ultra Sound
14154852 5 3377 1770 +1607 blockdaemon 0x856b0004... Ultra Sound
14152548 5 3376 1770 +1606 whale_0xdc8d 0x850b00e0... BloXroute Max Profit
14155348 2 3316 1711 +1605 ether.fi 0x853b0078... Ultra Sound
14157082 5 3375 1770 +1605 whale_0xdc8d 0xb67eaa5e... BloXroute Regulated
14157210 7 3411 1810 +1601 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14158179 0 3269 1671 +1598 blockdaemon 0xb67eaa5e... BloXroute Regulated
14155208 5 3367 1770 +1597 blockdaemon_lido 0xb26f9666... Titan Relay
14151966 0 3268 1671 +1597 whale_0xdc8d 0xb67eaa5e... BloXroute Regulated
14154764 3 3326 1731 +1595 luno 0xb26f9666... Titan Relay
14157629 5 3363 1770 +1593 revolut 0x88a53ec4... BloXroute Max Profit
14153158 0 3264 1671 +1593 whale_0xdc8d 0xb67eaa5e... BloXroute Regulated
14154083 4 3343 1751 +1592 0x850b00e0... BloXroute Regulated
14155139 0 3263 1671 +1592 blockdaemon 0x88857150... Ultra Sound
14153715 1 3281 1691 +1590 revolut 0xb67eaa5e... BloXroute Max Profit
14152925 1 3281 1691 +1590 luno 0xb26f9666... Titan Relay
14156201 0 3261 1671 +1590 blockdaemon_lido 0x88857150... Ultra Sound
14158304 6 3378 1790 +1588 blockdaemon_lido 0xb26f9666... Titan Relay
14154542 4 3338 1751 +1587 revolut 0x853b0078... Ultra Sound
14158366 6 3374 1790 +1584 blockdaemon 0xb26f9666... Titan Relay
14154331 1 3275 1691 +1584 luno 0x856b0004... Ultra Sound
14155678 5 3352 1770 +1582 blockdaemon_lido 0x88857150... Ultra Sound
14157301 5 3352 1770 +1582 blockdaemon 0x88857150... Ultra Sound
14155963 2 3290 1711 +1579 blockdaemon_lido 0x853b0078... Ultra Sound
14155513 10 3443 1869 +1574 blockdaemon 0x856b0004... BloXroute Max Profit
14152346 5 3344 1770 +1574 blockdaemon_lido 0x88510a78... Ultra Sound
14157610 0 3245 1671 +1574 revolut 0xb67eaa5e... BloXroute Max Profit
14155546 6 3363 1790 +1573 blockdaemon_lido 0xb26f9666... Titan Relay
14155718 1 3264 1691 +1573 0xb67eaa5e... BloXroute Regulated
14152778 0 3242 1671 +1571 blockdaemon_lido 0x850b00e0... BloXroute Max Profit
14154676 6 3357 1790 +1567 0xb26f9666... Titan Relay
14153360 5 3336 1770 +1566 ether.fi 0xb26f9666... BloXroute Max Profit
14157704 1 3253 1691 +1562 whale_0x8914 0x850b00e0... BloXroute Regulated
14154200 6 3351 1790 +1561 whale_0xdc8d 0x88a53ec4... BloXroute Regulated
14157030 1 3250 1691 +1559 gateway.fmas_lido 0xb67eaa5e... BloXroute Regulated
14156852 1 3250 1691 +1559 0xb4ce6162... Ultra Sound
14153034 5 3329 1770 +1559 blockdaemon_lido 0x850b00e0... Ultra Sound
14157149 1 3249 1691 +1558 whale_0x8914 0x850b00e0... Ultra Sound
14154144 6 3346 1790 +1556 whale_0xd5e9 0x8527d16c... Ultra Sound
14154531 6 3346 1790 +1556 blockdaemon 0x8a850621... Titan Relay
14152417 0 3226 1671 +1555 0x851b00b1... Ultra Sound
14154519 1 3245 1691 +1554 blockdaemon_lido 0x88a53ec4... BloXroute Regulated
14157636 0 3221 1671 +1550 revolut 0xb26f9666... Titan Relay
14155317 4 3298 1751 +1547 blockdaemon 0x853b0078... Ultra Sound
14152863 1 3237 1691 +1546 whale_0xdc8d 0x8527d16c... Ultra Sound
14155983 7 3354 1810 +1544 revolut 0xb67eaa5e... BloXroute Regulated
14154096 1 3231 1691 +1540 revolut 0x856b0004... BloXroute Max Profit
14157504 0 3208 1671 +1537 nethermind_lido 0x8db2a99d... Ultra Sound
14155361 1 3227 1691 +1536 stader 0x853b0078... Ultra Sound
14157319 5 3306 1770 +1536 blockdaemon_lido 0xb67eaa5e... BloXroute Max Profit
14151765 8 3362 1830 +1532 blockdaemon 0xb67eaa5e... BloXroute Regulated
14158536 1 3222 1691 +1531 revolut 0xb26f9666... Titan Relay
14154998 0 3202 1671 +1531 whale_0x8914 0x851b00b1... Ultra Sound
14156488 6 3320 1790 +1530 revolut 0x88a53ec4... BloXroute Max Profit
14153780 5 3299 1770 +1529 whale_0xfd67 0xb67eaa5e... Titan Relay
14156465 8 3357 1830 +1527 blockdaemon_lido 0x850b00e0... Ultra Sound
14156597 5 3296 1770 +1526 blockdaemon_lido 0x88a53ec4... BloXroute Max Profit
14153377 1 3215 1691 +1524 revolut 0xb26f9666... Titan Relay
14156547 13 3452 1928 +1524 luno 0x88a53ec4... BloXroute Regulated
14155318 3 3249 1731 +1518 gateway.fmas_lido 0xb67eaa5e... BloXroute Regulated
14158663 0 3188 1671 +1517 whale_0x4b5e 0x850b00e0... Ultra Sound
14153220 3 3246 1731 +1515 0x850b00e0... Ultra Sound
14153261 1 3206 1691 +1515 gateway.fmas_lido 0xb67eaa5e... BloXroute Max Profit
14154005 3 3242 1731 +1511 gateway.fmas_lido 0x823e0146... BloXroute Max Profit
14153901 6 3301 1790 +1511 luno 0xb26f9666... Titan Relay
14156088 12 3418 1909 +1509 blockdaemon_lido 0xb67eaa5e... Titan Relay
14153918 1 3200 1691 +1509 blockdaemon 0x856b0004... Ultra Sound
14152699 5 3279 1770 +1509 whale_0x8914 0x88a53ec4... Aestus
14156495 8 3338 1830 +1508 luno 0xb26f9666... Titan Relay
14151770 1 3197 1691 +1506 blockdaemon_lido 0xb26f9666... Titan Relay
14157902 9 3355 1849 +1506 whale_0x8ebd 0x850b00e0... BloXroute Max Profit
14156107 5 3271 1770 +1501 whale_0xba40 0xb67eaa5e... Aestus
14151707 1 3190 1691 +1499 0xa965c911... Ultra Sound
14155146 5 3269 1770 +1499 coinbase 0xb67eaa5e... BloXroute Max Profit
14154484 7 3307 1810 +1497 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
14155888 1 3186 1691 +1495 whale_0x8914 0xb67eaa5e... Titan Relay
14156877 7 3299 1810 +1489 p2porg 0xb4ce6162... Ultra Sound
14151820 0 3160 1671 +1489 whale_0xfd67 0x851b00b1... Ultra Sound
14158115 3 3218 1731 +1487 blockdaemon 0x8527d16c... Ultra Sound
14153547 2 3196 1711 +1485 gateway.fmas_lido 0x88a53ec4... BloXroute Regulated
14157304 1 3176 1691 +1485 whale_0xfd67 0x850b00e0... Ultra Sound
14154174 1 3172 1691 +1481 whale_0x8914 0x850b00e0... Ultra Sound
14152134 1 3170 1691 +1479 0xb67eaa5e... BloXroute Regulated
14158027 0 3150 1671 +1479 coinbase 0x85fb0503... Aestus
14154882 5 3248 1770 +1478 blockdaemon 0xb67eaa5e... BloXroute Regulated
14155458 5 3247 1770 +1477 whale_0x8914 0x850b00e0... BloXroute Regulated
14156939 5 3246 1770 +1476 whale_0x8914 0xb67eaa5e... Titan Relay
14157152 0 3144 1671 +1473 p2porg 0x850b00e0... Flashbots
14156822 0 3143 1671 +1472 whale_0x8914 0xb67eaa5e... Titan Relay
14154456 0 3143 1671 +1472 whale_0xfd67 0x851b00b1... Ultra Sound
14152367 8 3298 1830 +1468 coinbase 0xb67eaa5e... BloXroute Max Profit
14152199 1 3159 1691 +1468 whale_0x8914 0xb67eaa5e... Titan Relay
14152271 3 3197 1731 +1466 whale_0x6ddb 0xb67eaa5e... Titan Relay
14158584 6 3255 1790 +1465 p2porg 0x8527d16c... Ultra Sound
14152670 0 3135 1671 +1464 blockdaemon_lido 0xb67eaa5e... BloXroute Regulated
14156401 5 3233 1770 +1463 kiln 0xb67eaa5e... BloXroute Regulated
14154464 1 3149 1691 +1458 whale_0x8ebd 0x8527d16c... Ultra Sound
14157317 0 3128 1671 +1457 p2porg 0x8db2a99d... Titan Relay
14152019 1 3147 1691 +1456 revolut 0x850b00e0... BloXroute Regulated
14153028 2 3166 1711 +1455 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
14157371 1 3145 1691 +1454 whale_0xfd67 0x850b00e0... BloXroute Regulated
14153080 2 3161 1711 +1450 coinbase 0x88a53ec4... BloXroute Max Profit
14157527 1 3140 1691 +1449 p2porg 0xb26f9666... Titan Relay
14154346 1 3139 1691 +1448 blockdaemon_lido 0xb26f9666... Titan Relay
14153279 1 3139 1691 +1448 gateway.fmas_lido 0x856b0004... Agnostic Gnosis
14157486 2 3155 1711 +1444 whale_0xfd67 0x850b00e0... BloXroute Regulated
14154667 1 3133 1691 +1442 p2porg 0xb26f9666... Titan Relay
14155588 0 3112 1671 +1441 p2porg 0x853b0078... Ultra Sound
14156277 6 3230 1790 +1440 p2porg 0x850b00e0... BloXroute Regulated
14156252 5 3208 1770 +1438 kiln Local Local
14155055 0 3109 1671 +1438 blockdaemon 0xb26f9666... Titan Relay
14157830 0 3109 1671 +1438 solo_stakers 0x851b00b1... BloXroute Max Profit
14153898 3 3167 1731 +1436 kiln 0xb26f9666... Ultra Sound
14154359 5 3203 1770 +1433 revolut 0x853b0078... Ultra Sound
14155493 0 3103 1671 +1432 blockdaemon 0x856b0004... Ultra Sound
14152820 0 3102 1671 +1431 whale_0x8ebd 0x857b0038... BloXroute Max Profit
14152730 2 3141 1711 +1430 p2porg 0x850b00e0... BloXroute Regulated
14155702 1 3119 1691 +1428 coinbase 0xb26f9666... Titan Relay
14156314 2 3137 1711 +1426 whale_0x8ebd 0xb26f9666... Titan Relay
14154944 1 3117 1691 +1426 p2porg 0x853b0078... Agnostic Gnosis
14156051 5 3195 1770 +1425 p2porg 0x850b00e0... BloXroute Regulated
14154064 1 3114 1691 +1423 p2porg 0xb26f9666... Titan Relay
14156038 8 3250 1830 +1420 p2porg 0x850b00e0... BloXroute Regulated
14156236 10 3289 1869 +1420 p2porg 0x850b00e0... BloXroute Regulated
14152329 1 3111 1691 +1420 coinbase 0xb67eaa5e... BloXroute Regulated
14155690 6 3208 1790 +1418 whale_0xfd67 0x850b00e0... Ultra Sound
14152982 0 3087 1671 +1416 figment 0xb26f9666... Titan Relay
14154662 4 3166 1751 +1415 coinbase 0xb67eaa5e... BloXroute Max Profit
14152638 2 3126 1711 +1415 p2porg 0x850b00e0... BloXroute Regulated
14154140 5 3185 1770 +1415 coinbase 0xb67eaa5e... BloXroute Regulated
14152822 0 3085 1671 +1414 solo_stakers 0x851b00b1... BloXroute Max Profit
14157455 5 3183 1770 +1413 p2porg 0x8db2a99d... Flashbots
14153750 2 3123 1711 +1412 p2porg 0x850b00e0... BloXroute Regulated
14151998 1 3103 1691 +1412 p2porg 0x850b00e0... BloXroute Max Profit
14156105 3 3142 1731 +1411 whale_0x8ebd 0x8527d16c... Ultra Sound
14157264 3 3142 1731 +1411 p2porg 0x850b00e0... BloXroute Regulated
14157081 6 3201 1790 +1411 p2porg 0x850b00e0... BloXroute Regulated
14156240 8 3240 1830 +1410 whale_0xfd67 0x88a53ec4... Aestus
14158658 6 3199 1790 +1409 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14155087 6 3198 1790 +1408 whale_0x3878 0xb67eaa5e... BloXroute Max Profit
14154870 1 3098 1691 +1407 kiln 0x850b00e0... BloXroute Max Profit
14155166 0 3076 1671 +1405 whale_0x6ddb 0xb67eaa5e... BloXroute Max Profit
14157828 0 3076 1671 +1405 0xb26f9666... BloXroute Max Profit
14152631 1 3095 1691 +1404 twinstake 0x88a53ec4... BloXroute Regulated
14155549 3 3133 1731 +1402 whale_0x8ebd 0x853b0078... Ultra Sound
14153630 1 3093 1691 +1402 0x850b00e0... BloXroute Max Profit
14157261 6 3191 1790 +1401 coinbase 0xb67eaa5e... BloXroute Regulated
14153719 0 3072 1671 +1401 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
14158100 0 3071 1671 +1400 blockdaemon 0x8527d16c... Ultra Sound
14153972 8 3229 1830 +1399 kiln 0x88a53ec4... BloXroute Regulated
14155274 0 3070 1671 +1399 0xb26f9666... BloXroute Max Profit
14153214 0 3069 1671 +1398 p2porg 0x88a53ec4... BloXroute Max Profit
14152471 0 3067 1671 +1396 p2porg 0xb26f9666... BloXroute Max Profit
14151605 5 3164 1770 +1394 whale_0x8ebd 0xb4ce6162... Ultra Sound
14154381 7 3201 1810 +1391 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
14153742 1 3082 1691 +1391 p2porg 0xb26f9666... BloXroute Max Profit
14156926 0 3062 1671 +1391 p2porg 0xb26f9666... Titan Relay
14152505 12 3299 1909 +1390 coinbase 0x88a53ec4... BloXroute Max Profit
14154573 6 3176 1790 +1386 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14152350 1 3077 1691 +1386 p2porg 0x853b0078... Aestus
14154929 6 3174 1790 +1384 coinbase 0xb67eaa5e... BloXroute Max Profit
14156249 14 3331 1948 +1383 kiln 0xb67eaa5e... BloXroute Max Profit
14154366 0 3054 1671 +1383 whale_0x8ebd 0x853b0078... Ultra Sound
14156878 0 3054 1671 +1383 p2porg 0x850b00e0... BloXroute Regulated
14155779 4 3132 1751 +1381 p2porg 0xb26f9666... Titan Relay
14153673 1 3070 1691 +1379 p2porg 0x850b00e0... BloXroute Regulated
14155364 3 3109 1731 +1378 coinbase 0xb67eaa5e... BloXroute Regulated
14156246 2 3089 1711 +1378 coinbase 0xb67eaa5e... BloXroute Regulated
14156498 1 3067 1691 +1376 kiln 0xb26f9666... BloXroute Max Profit
14152650 0 3047 1671 +1376 p2porg 0x853b0078... Agnostic Gnosis
14152879 0 3047 1671 +1376 p2porg 0x850b00e0... BloXroute Regulated
14155316 0 3045 1671 +1374 p2porg 0x853b0078... Aestus
14158753 0 3044 1671 +1373 whale_0x23be 0x85fb0503... Aestus
14155350 10 3241 1869 +1372 blockdaemon_lido 0xb26f9666... Titan Relay
14154138 0 3043 1671 +1372 p2porg 0x853b0078... Agnostic Gnosis
14153654 0 3043 1671 +1372 whale_0x8ebd 0x88510a78... Titan Relay
14157865 10 3240 1869 +1371 p2porg 0x850b00e0... BloXroute Regulated
14153462 0 3042 1671 +1371 p2porg 0xb26f9666... BloXroute Max Profit
14157691 0 3042 1671 +1371 whale_0x8ebd 0x851b00b1... BloXroute Max Profit
14153489 1 3060 1691 +1369 coinbase 0x856b0004... BloXroute Max Profit
14155809 0 3040 1671 +1369 0x856b0004... Ultra Sound
14152888 2 3079 1711 +1368 0x856b0004... BloXroute Max Profit
14153515 6 3158 1790 +1368 p2porg 0x88a53ec4... BloXroute Regulated
14154985 0 3039 1671 +1368 p2porg 0x805e28e6... Flashbots
14157350 5 3137 1770 +1367 p2porg 0x82c466b9... Titan Relay
14156384 4 3117 1751 +1366 coinbase 0xb26f9666... BloXroute Regulated
14158501 0 3037 1671 +1366 whale_0x8ebd 0x8db2a99d... Ultra Sound
14157758 0 3035 1671 +1364 coinbase 0x88a53ec4... BloXroute Max Profit
14154455 4 3114 1751 +1363 p2porg 0x8527d16c... Ultra Sound
14157847 3 3094 1731 +1363 coinbase 0x856b0004... Ultra Sound
14158159 1 3054 1691 +1363 p2porg 0x856b0004... Ultra Sound
14156097 3 3093 1731 +1362 figment 0xb26f9666... Titan Relay
14153210 0 3033 1671 +1362 coinbase 0xb67eaa5e... BloXroute Max Profit
14154564 7 3171 1810 +1361 kiln 0xb7c5e609... BloXroute Max Profit
14157372 6 3151 1790 +1361 0xb67eaa5e... BloXroute Regulated
14158097 1 3052 1691 +1361 0x856b0004... Ultra Sound
14152312 1 3052 1691 +1361 whale_0x8914 0x88a53ec4... BloXroute Regulated
14155950 4 3111 1751 +1360 p2porg 0x853b0078... Ultra Sound
14158210 2 3071 1711 +1360 p2porg 0xb26f9666... Titan Relay
14155517 6 3150 1790 +1360 coinbase 0x853b0078... Ultra Sound
14152082 14 3307 1948 +1359 blockdaemon_lido 0xb67eaa5e... BloXroute Regulated
14152279 0 3030 1671 +1359 coinbase 0x853b0078... Agnostic Gnosis
14158590 1 3049 1691 +1358 kiln 0xb26f9666... Titan Relay
14153653 0 3029 1671 +1358 coinbase 0x851b00b1... BloXroute Max Profit
14157198 3 3088 1731 +1357 coinbase 0x8db2a99d... Ultra Sound
14158345 7 3167 1810 +1357 whale_0x8ebd 0xb26f9666... BloXroute Max Profit
14156017 1 3047 1691 +1356 p2porg 0x856b0004... Ultra Sound
14157228 0 3027 1671 +1356 coinbase 0x8527d16c... Ultra Sound
14157508 17 3363 2008 +1355 whale_0xdc8d 0xb26f9666... Titan Relay
14152106 6 3145 1790 +1355 coinbase 0xb67eaa5e... BloXroute Regulated
14154925 5 3125 1770 +1355 coinbase 0x856b0004... Ultra Sound
14157385 1 3043 1691 +1352 coinbase 0xb26f9666... BloXroute Regulated
14152397 5 3122 1770 +1352 0x856b0004... Ultra Sound
14157472 5 3122 1770 +1352 coinbase 0x853b0078... Ultra Sound
14154015 4 3096 1751 +1345 p2porg 0x853b0078... Ultra Sound
14155098 3 3075 1731 +1344 kiln 0x856b0004... Ultra Sound
14153585 1 3035 1691 +1344 coinbase 0x856b0004... BloXroute Max Profit
14153753 1 3033 1691 +1342 whale_0x7c1b 0x857b0038... BloXroute Max Profit
14158008 2 3052 1711 +1341 coinbase Local Local
14157224 6 3131 1790 +1341 kiln 0xb67eaa5e... BloXroute Max Profit
14156958 1 3032 1691 +1341 whale_0x8ebd 0xb67eaa5e... Ultra Sound
14156202 0 3012 1671 +1341 p2porg 0xb26f9666... BloXroute Max Profit
14152402 3 3070 1731 +1339 p2porg 0x8527d16c... Ultra Sound
14156721 1 3030 1691 +1339 kiln 0xb26f9666... BloXroute Regulated
14158283 3 3069 1731 +1338 coinbase 0xb26f9666... Titan Relay
14158151 0 3009 1671 +1338 whale_0x8ebd 0x823e0146... Flashbots
14155449 10 3206 1869 +1337 whale_0x8ebd 0x8a850621... Titan Relay
14154207 1 3028 1691 +1337 whale_0x8ebd 0x856b0004... Agnostic Gnosis
14156430 0 3008 1671 +1337 coinbase 0x850b00e0... BloXroute Max Profit
14153355 4 3087 1751 +1336 p2porg 0xb26f9666... BloXroute Max Profit
14155485 6 3126 1790 +1336 figment 0xb26f9666... Titan Relay
14157884 0 3007 1671 +1336 kiln 0x851b00b1... Ultra Sound
14156307 2 3046 1711 +1335 p2porg 0xb26f9666... BloXroute Max Profit
14155834 7 3144 1810 +1334 figment 0xb26f9666... BloXroute Max Profit
14156530 5 3104 1770 +1334 whale_0x8ebd 0xb26f9666... Ultra Sound
14155205 5 3103 1770 +1333 coinbase 0x856b0004... Ultra Sound
14158410 0 3003 1671 +1332 coinbase 0x8527d16c... Ultra Sound
14157602 6 3121 1790 +1331 0xb26f9666... BloXroute Max Profit
14153126 0 3002 1671 +1331 kiln 0x88a53ec4... BloXroute Regulated
14154612 6 3120 1790 +1330 kiln 0xb67eaa5e... BloXroute Max Profit
14158683 1 3021 1691 +1330 coinbase 0xb26f9666... BloXroute Max Profit
14156539 5 3100 1770 +1330 kiln 0xb67eaa5e... BloXroute Regulated
14151889 5 3099 1770 +1329 p2porg 0x856b0004... BloXroute Max Profit
14152805 1 3019 1691 +1328 kiln 0x856b0004... Agnostic Gnosis
14157236 0 2997 1671 +1326 coinbase 0x8db2a99d... BloXroute Max Profit
14156501 0 2997 1671 +1326 kiln 0xb26f9666... Aestus
14153426 6 3115 1790 +1325 coinbase 0x850b00e0... BloXroute Max Profit
14153495 1 3015 1691 +1324 everstake 0xb26f9666... Titan Relay
14154693 0 2995 1671 +1324 solo_stakers 0x857b0038... Titan Relay
14156774 1 3014 1691 +1323 whale_0x8ebd 0xb26f9666... Titan Relay
14153946 3 3053 1731 +1322 coinbase 0x88a53ec4... BloXroute Regulated
14158300 5 3092 1770 +1322 coinbase 0xb26f9666... BloXroute Max Profit
14155078 3 3052 1731 +1321 whale_0x8ebd 0x853b0078... Ultra Sound
14155299 5 3091 1770 +1321 p2porg 0x853b0078... Titan Relay
14154062 3 3051 1731 +1320 abyss_finance 0xb26f9666... BloXroute Regulated
14151792 4 3070 1751 +1319 0x856b0004... BloXroute Max Profit
14158257 6 3109 1790 +1319 p2porg 0xb26f9666... BloXroute Max Profit
14158271 0 2989 1671 +1318 coinbase 0x8db2a99d... Ultra Sound
14157943 6 3106 1790 +1316 whale_0xa6fa 0x88a53ec4... Aestus
14156816 1 3007 1691 +1316 kiln 0x856b0004... BloXroute Max Profit
14151909 1 3007 1691 +1316 kiln 0x8527d16c... Ultra Sound
14155818 0 2987 1671 +1316 kiln 0x8527d16c... Ultra Sound
14154101 1 3006 1691 +1315 whale_0x8ebd 0x856b0004... Agnostic Gnosis
14157971 0 2986 1671 +1315 kiln 0x8527d16c... Ultra Sound
14158797 0 2986 1671 +1315 coinbase 0x85fb0503... Aestus
14153772 5 3083 1770 +1313 p2porg 0x856b0004... Ultra Sound
14156477 0 2983 1671 +1312 whale_0xedc6 0xb26f9666... BloXroute Max Profit
14157968 0 2983 1671 +1312 everstake 0x856b0004... Agnostic Gnosis
14154498 0 2982 1671 +1311 nethermind_lido 0xb26f9666... Aestus
14157354 1 3001 1691 +1310 whale_0x8ebd 0xb26f9666... BloXroute Max Profit
14156920 5 3080 1770 +1310 coinbase 0xb26f9666... Titan Relay
14154268 0 2981 1671 +1310 kiln 0x8527d16c... Ultra Sound
14156580 0 2981 1671 +1310 coinbase 0x88a53ec4... BloXroute Max Profit
14155243 10 3178 1869 +1309 p2porg 0xb26f9666... Titan Relay
14157944 1 3000 1691 +1309 kiln 0xb26f9666... Titan Relay
14155499 11 3196 1889 +1307 whale_0x8ebd 0x850b00e0... BloXroute Max Profit
14155074 1 2996 1691 +1305 kiln 0x8527d16c... Ultra Sound
14155197 8 3134 1830 +1304 whale_0x8ebd 0x8527d16c... Ultra Sound
14157368 1 2995 1691 +1304 everstake 0xb67eaa5e... BloXroute Regulated
14156968 1 2992 1691 +1301 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14155063 5 3071 1770 +1301 whale_0x8ebd 0xb26f9666... BloXroute Max Profit
14156840 5 3071 1770 +1301 whale_0x8ebd 0x856b0004... BloXroute Max Profit
14158011 0 2972 1671 +1301 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14158102 11 3189 1889 +1300 figment 0xb26f9666... Titan Relay
14155794 0 2971 1671 +1300 kiln 0x853b0078... Ultra Sound
14154020 3 3030 1731 +1299 coinbase 0x856b0004... BloXroute Max Profit
14156473 1 2988 1691 +1297 kiln 0xb26f9666... BloXroute Max Profit
14156873 0 2968 1671 +1297 kiln 0x823e0146... Flashbots
14155130 8 3126 1830 +1296 p2porg 0xb26f9666... Titan Relay
14153455 0 2967 1671 +1296 p2porg 0xb26f9666... BloXroute Max Profit
14154152 5 3065 1770 +1295 p2porg 0x85fb0503... Aestus
14158092 0 2966 1671 +1295 kiln 0x856b0004... Ultra Sound
14153493 4 3045 1751 +1294 p2porg 0x853b0078... Aestus
14156289 3 3025 1731 +1294 coinbase 0xb26f9666... BloXroute Max Profit
14152147 0 2965 1671 +1294 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14157038 9 3142 1849 +1293 0x853b0078... Ultra Sound
14155612 0 2964 1671 +1293 kiln 0xb26f9666... Aestus
14152749 6 3082 1790 +1292 kiln 0xb67eaa5e... Ultra Sound
14154437 5 3062 1770 +1292 kiln 0xb26f9666... BloXroute Max Profit
14154499 0 2963 1671 +1292 coinbase 0x805e28e6... Flashbots
14154119 6 3081 1790 +1291 whale_0x8ebd 0xb26f9666... BloXroute Max Profit
14155031 5 3061 1770 +1291 coinbase 0xb26f9666... Titan Relay
14156282 1 2981 1691 +1290 bitstamp 0x88a53ec4... BloXroute Regulated
14157140 0 2960 1671 +1289 whale_0x8ebd 0x853b0078... Agnostic Gnosis
14154638 0 2960 1671 +1289 nethermind_lido 0x823e0146... Aestus
14154291 0 2959 1671 +1288 kiln 0x856b0004... Ultra Sound
14158142 0 2959 1671 +1288 everstake 0x856b0004... Ultra Sound
14153764 16 3275 1988 +1287 figment 0x8527d16c... Ultra Sound
14156355 1 2977 1691 +1286 kiln 0x8527d16c... Ultra Sound
14157546 0 2957 1671 +1286 whale_0x8ebd 0xb26f9666... BloXroute Max Profit
14157661 0 2955 1671 +1284 everstake 0xb26f9666... Titan Relay
14153707 5 3053 1770 +1283 coinbase 0x8db2a99d... Aestus
14151731 0 2954 1671 +1283 kiln 0x8527d16c... Ultra Sound
14156460 5 3051 1770 +1281 whale_0x8ebd 0x856b0004... Aestus
14157292 0 2952 1671 +1281 kiln 0x856b0004... Agnostic Gnosis
14155141 0 2951 1671 +1280 whale_0x8ebd 0x83d6a6ab... Flashbots
14154098 6 3069 1790 +1279 whale_0x8ebd Local Local
14153093 0 2950 1671 +1279 everstake 0xb26f9666... Titan Relay
14154517 5 3048 1770 +1278 solo_stakers 0x856b0004... Ultra Sound
14152501 9 3127 1849 +1278 p2porg 0x853b0078... Ultra Sound
14157047 5 3047 1770 +1277 coinbase Local Local
14156069 5 3047 1770 +1277 kiln 0x9129eeb4... Ultra Sound
14152497 5 3047 1770 +1277 coinbase 0x82c466b9... Ultra Sound
14152352 1 2966 1691 +1275 everstake 0x850b00e0... BloXroute Max Profit
14155523 0 2945 1671 +1274 everstake 0x850b00e0... BloXroute Max Profit
14157010 3 3004 1731 +1273 everstake 0xb67eaa5e... BloXroute Max Profit
14155854 1 2963 1691 +1272 kiln 0x9129eeb4... Ultra Sound
14158626 1 2963 1691 +1272 0x856b0004... Ultra Sound
14158348 1 2963 1691 +1272 everstake 0xb26f9666... Titan Relay
14155474 0 2943 1671 +1272 whale_0x8ebd 0x856b0004... BloXroute Max Profit
14152920 1 2962 1691 +1271 0x85fb0503... Aestus
14156345 2 2981 1711 +1270 kiln 0xb26f9666... BloXroute Max Profit
14156118 5 3040 1770 +1270 kiln 0x8527d16c... Ultra Sound
14158120 0 2941 1671 +1270 whale_0x8ebd 0x851b00b1... BloXroute Max Profit
14157125 0 2941 1671 +1270 whale_0x8ebd Local Local
14152373 0 2941 1671 +1270 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14152549 1 2960 1691 +1269 coinbase 0xb26f9666... BloXroute Regulated
14156487 5 3039 1770 +1269 coinbase 0xb26f9666... BloXroute Regulated
14152463 5 3039 1770 +1269 p2porg 0x853b0078... Agnostic Gnosis
14153693 5 3039 1770 +1269 p2porg 0xb26f9666... BloXroute Max Profit
14152525 6 3058 1790 +1268 whale_0x8ebd 0x8db2a99d... Flashbots
14151841 4 3017 1751 +1266 ether.fi 0x850b00e0... BloXroute Max Profit
14156617 8 3096 1830 +1266 p2porg 0xb26f9666... Ultra Sound
14155383 0 2937 1671 +1266 everstake 0xb67eaa5e... BloXroute Max Profit
14153732 5 3035 1770 +1265 coinbase 0x856b0004... BloXroute Max Profit
14153043 1 2954 1691 +1263 stader 0x853b0078... Ultra Sound
14152896 0 2934 1671 +1263 everstake 0xb67eaa5e... BloXroute Regulated
14156421 3 2993 1731 +1262 everstake 0x850b00e0... BloXroute Max Profit
14152965 2 2973 1711 +1262 everstake 0xb26f9666... Titan Relay
14153358 6 3052 1790 +1262 coinbase 0xb7c5e609... BloXroute Max Profit
14153229 1 2953 1691 +1262 everstake 0xb26f9666... Titan Relay
14155308 9 3111 1849 +1262 kiln 0x8527d16c... Ultra Sound
14158667 4 3011 1751 +1260 coinbase 0x856b0004... Aestus
14158342 8 3090 1830 +1260 coinbase 0xb26f9666... BloXroute Max Profit
14153566 0 2931 1671 +1260 stader 0xb26f9666... Titan Relay
14151850 0 2930 1671 +1259 everstake 0xb26f9666... Titan Relay
14153272 1 2949 1691 +1258 everstake 0x850b00e0... BloXroute Max Profit
14152026 2 2968 1711 +1257 whale_0x8ebd 0xb26f9666... BloXroute Max Profit
14155089 2 2967 1711 +1256 everstake 0xb26f9666... Titan Relay
Total anomalies: 434

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