Mon, Apr 6, 2026

Propagation anomalies - 2026-04-06

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-06' AND slot_start_date_time < '2026-04-06'::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-06' AND slot_start_date_time < '2026-04-06'::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-06' AND slot_start_date_time < '2026-04-06'::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-06' AND slot_start_date_time < '2026-04-06'::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-06' AND slot_start_date_time < '2026-04-06'::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-06' AND slot_start_date_time < '2026-04-06'::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-06' AND slot_start_date_time < '2026-04-06'::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-06' AND slot_start_date_time < '2026-04-06'::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,177
MEV blocks: 6,656 (92.7%)
Local blocks: 521 (7.3%)

Anomaly detection method

The method:

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

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

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

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

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

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

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

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

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

print(f"Regression: block_ms = {intercept:.1f} + {slope:.2f} × blob_count (R² = {r_value**2:.3f})")
print(f"Residual σ = {residual_std:.1f}ms")
print(f"Anomalies (>2σ slow): {n_anomalies:,} ({pct_anomalies:.1f}%)")
Regression: block_ms = 1707.5 + 16.64 × blob_count (R² = 0.009)
Residual σ = 616.3ms
Anomalies (>2σ slow): 380 (5.3%)
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
14055195 0 15702 1707 +13995 csm_operator371_lido Local Local
14051464 0 4773 1707 +3066 lido Local Local
14052057 0 4764 1707 +3057 solo_stakers Local Local
14053600 0 4161 1707 +2454 stakefish Local Local
14054240 0 4054 1707 +2347 nethermind_lido Local Local
14051423 3 3888 1757 +2131 solo_stakers Local Local
14057367 7 3939 1824 +2115 whale_0x8ebd 0x856b0004... Agnostic Gnosis
14057124 0 3774 1707 +2067 nethermind_lido Local Local
14056520 5 3829 1791 +2038 kraken 0x8527d16c... Ultra Sound
14056523 2 3769 1741 +2028 ether.fi 0x850b00e0... BloXroute Max Profit
14056091 5 3800 1791 +2009 nethermind_lido 0x8527d16c... Ultra Sound
14052521 0 3692 1707 +1985 nethermind_lido 0x855b00e6... Flashbots
14053044 6 3783 1807 +1976 nethermind_lido 0x8527d16c... Ultra Sound
14056399 0 3676 1707 +1969 nethermind_lido 0xb26f9666... BloXroute Max Profit
14054045 9 3811 1857 +1954 nethermind_lido 0xac23f8cc... Flashbots
14051339 3 3685 1757 +1928 whale_0x8ebd 0x856b0004... Ultra Sound
14057369 6 3680 1807 +1873 nethermind_lido 0x88857150... Ultra Sound
14055976 3 3524 1757 +1767 binance 0x8db2a99d... Aestus
14056636 6 3564 1807 +1757 solo_stakers 0x88857150... Ultra Sound
14051418 0 3460 1707 +1753 blockdaemon 0xb67eaa5e... BloXroute Max Profit
14051587 0 3459 1707 +1752 ether.fi 0x855b00e6... BloXroute Max Profit
14055812 1 3449 1724 +1725 blockdaemon_lido 0x8527d16c... Ultra Sound
14053309 0 3432 1707 +1725 ether.fi 0x8527d16c... Ultra Sound
14051852 5 3514 1791 +1723 blockdaemon 0x855b00e6... BloXroute Max Profit
14050912 1 3437 1724 +1713 bitstamp 0x855b00e6... BloXroute Max Profit
14051126 1 3433 1724 +1709 whale_0x8ebd 0xb4ce6162... Ultra Sound
14053408 3 3459 1757 +1702 bitstamp 0x850b00e0... BloXroute Max Profit
14057663 3 3454 1757 +1697 ether.fi 0xb67eaa5e... Titan Relay
14052736 1 3419 1724 +1695 bitstamp 0x8527d16c... Ultra Sound
14054737 6 3502 1807 +1695 ether.fi 0xb26f9666... Aestus
14055677 1 3411 1724 +1687 blockdaemon 0x8a850621... Titan Relay
14050807 0 3385 1707 +1678 blockdaemon_lido 0xb67eaa5e... Titan Relay
14057238 0 3384 1707 +1677 blockdaemon 0xb4ce6162... Ultra Sound
14053110 5 3467 1791 +1676 lido 0x855b00e6... BloXroute Max Profit
14057696 0 3363 1707 +1656 gateway.fmas_lido 0x88a53ec4... BloXroute Regulated
14054560 0 3358 1707 +1651 blockdaemon_lido 0x8527d16c... Ultra Sound
14054944 2 3389 1741 +1648 p2porg 0x850b00e0... BloXroute Regulated
14052235 0 3354 1707 +1647 ether.fi 0x853b0078... BloXroute Regulated
14056864 0 3354 1707 +1647 nethermind_lido 0x88a53ec4... BloXroute Max Profit
14056840 1 3363 1724 +1639 blockdaemon_lido 0x850b00e0... BloXroute Max Profit
14055269 1 3362 1724 +1638 ether.fi 0xb26f9666... Titan Relay
14057496 4 3407 1774 +1633 whale_0x8ebd 0x853b0078... Agnostic Gnosis
14057718 0 3335 1707 +1628 blockdaemon 0x856b0004... BloXroute Max Profit
14054339 5 3413 1791 +1622 blockdaemon 0xb67eaa5e... BloXroute Regulated
14056217 10 3496 1874 +1622 blockdaemon 0xb67eaa5e... BloXroute Max Profit
14057921 6 3421 1807 +1614 whale_0x8ebd 0x8db2a99d... BloXroute Max Profit
14053889 1 3336 1724 +1612 blockdaemon 0x850b00e0... BloXroute Max Profit
14052287 0 3319 1707 +1612 blockdaemon 0xb26f9666... Titan Relay
14056036 0 3315 1707 +1608 0x9129eeb4... Ultra Sound
14051034 8 3446 1841 +1605 nethermind_lido 0x8527d16c... Ultra Sound
14053144 2 3346 1741 +1605 blockdaemon_lido 0x88857150... Ultra Sound
14054347 0 3306 1707 +1599 ether.fi 0xb26f9666... BloXroute Max Profit
14051527 5 3388 1791 +1597 nethermind_lido 0xb26f9666... Aestus
14053212 1 3319 1724 +1595 blockdaemon_lido 0xb67eaa5e... Titan Relay
14054600 1 3310 1724 +1586 nethermind_lido 0x8527d16c... Ultra Sound
14055352 6 3390 1807 +1583 blockdaemon_lido 0xb67eaa5e... BloXroute Max Profit
14051415 10 3455 1874 +1581 nethermind_lido 0x8527d16c... Ultra Sound
14051975 5 3369 1791 +1578 blockdaemon 0xb67eaa5e... BloXroute Regulated
14053904 3 3335 1757 +1578 nethermind_lido 0x8db2a99d... Aestus
14055497 4 3348 1774 +1574 blockdaemon 0x8a850621... Titan Relay
14054987 5 3360 1791 +1569 ether.fi 0x853b0078... Ultra Sound
14050881 6 3376 1807 +1569 p2porg 0x850b00e0... Ultra Sound
14057100 2 3307 1741 +1566 whale_0xdc8d 0x8527d16c... Ultra Sound
14052728 12 3473 1907 +1566 blockdaemon 0x8db2a99d... Ultra Sound
14051275 4 3339 1774 +1565 ether.fi 0x855b00e6... BloXroute Max Profit
14051831 0 3272 1707 +1565 blockdaemon_lido 0x88857150... Ultra Sound
14056135 5 3353 1791 +1562 nethermind_lido 0xb26f9666... Aestus
14054169 2 3302 1741 +1561 blockdaemon 0xb67eaa5e... BloXroute Regulated
14057463 4 3335 1774 +1561 whale_0xdc8d 0x88a53ec4... BloXroute Regulated
14052847 0 3266 1707 +1559 p2porg 0x8db2a99d... Flashbots
14056288 8 3396 1841 +1555 blockdaemon 0xb26f9666... Titan Relay
14054113 0 3261 1707 +1554 blockdaemon 0xb67eaa5e... BloXroute Max Profit
14050907 1 3277 1724 +1553 blockdaemon_lido 0xb26f9666... Titan Relay
14051856 0 3259 1707 +1552 blockdaemon_lido 0xb7c5e609... BloXroute Regulated
14054035 5 3342 1791 +1551 blockdaemon_lido 0xa965c911... Ultra Sound
14052753 6 3355 1807 +1548 blockdaemon 0x850b00e0... BloXroute Regulated
14053940 0 3255 1707 +1548 luno 0xb67eaa5e... BloXroute Regulated
14053404 0 3254 1707 +1547 blockdaemon 0x8527d16c... Ultra Sound
14050945 5 3336 1791 +1545 0x9129eeb4... Ultra Sound
14052828 0 3252 1707 +1545 blockdaemon 0x8a850621... BloXroute Regulated
14055053 5 3330 1791 +1539 whale_0xdc8d 0xb26f9666... Titan Relay
14057681 10 3410 1874 +1536 blockdaemon_lido 0x853b0078... BloXroute Max Profit
14051085 0 3243 1707 +1536 0xb67eaa5e... BloXroute Regulated
14051764 7 3357 1824 +1533 whale_0x8ebd 0x856b0004... Aestus
14054414 6 3339 1807 +1532 whale_0xdc8d 0x8527d16c... Ultra Sound
14057668 0 3239 1707 +1532 blockdaemon_lido 0xb67eaa5e... Titan Relay
14050806 0 3238 1707 +1531 revolut 0xb67eaa5e... BloXroute Regulated
14052425 5 3320 1791 +1529 blockdaemon 0x8527d16c... Ultra Sound
14056093 9 3384 1857 +1527 ether.fi 0xb67eaa5e... Ultra Sound
14056309 0 3232 1707 +1525 whale_0x8ebd 0x88857150... Ultra Sound
14055687 7 3347 1824 +1523 blockdaemon 0x853b0078... BloXroute Max Profit
14051350 1 3244 1724 +1520 revolut 0xb67eaa5e... BloXroute Regulated
14054595 6 3327 1807 +1520 blockdaemon_lido 0xb67eaa5e... Titan Relay
14057839 5 3309 1791 +1518 nethermind_lido 0x8527d16c... Ultra Sound
14051620 1 3240 1724 +1516 p2porg 0x8527d16c... Ultra Sound
14057011 4 3288 1774 +1514 blockdaemon_lido 0xb67eaa5e... Titan Relay
14053660 1 3238 1724 +1514 blockdaemon 0xb67eaa5e... BloXroute Max Profit
14057732 8 3350 1841 +1509 revolut 0xb26f9666... Titan Relay
14054887 5 3300 1791 +1509 nethermind_lido 0xb67eaa5e... BloXroute Max Profit
14054038 3 3266 1757 +1509 blockdaemon_lido 0x8527d16c... Ultra Sound
14051933 5 3295 1791 +1504 blockdaemon_lido 0xb26f9666... Titan Relay
14050814 0 3211 1707 +1504 blockdaemon_lido 0xb67eaa5e... Titan Relay
14052163 0 3209 1707 +1502 gateway.fmas_lido 0x851b00b1... BloXroute Max Profit
14057470 1 3223 1724 +1499 blockdaemon_lido 0xb67eaa5e... Titan Relay
14052261 6 3304 1807 +1497 whale_0xdc8d 0x88857150... Ultra Sound
14054930 0 3201 1707 +1494 nethermind_lido 0x851b00b1... BloXroute Max Profit
14054382 5 3280 1791 +1489 gateway.fmas_lido 0x855b00e6... BloXroute Max Profit
14055086 0 3196 1707 +1489 whale_0x8ebd 0xb73d7672... Flashbots
14051711 8 3327 1841 +1486 0x855b00e6... BloXroute Max Profit
14053417 5 3277 1791 +1486 whale_0x8ebd 0x856b0004... Agnostic Gnosis
14052852 5 3275 1791 +1484 blockdaemon_lido 0xb67eaa5e... BloXroute Regulated
14053382 11 3374 1891 +1483 blockdaemon 0xb67eaa5e... BloXroute Regulated
14054870 9 3335 1857 +1478 nethermind_lido 0x88a53ec4... BloXroute Max Profit
14053489 3 3235 1757 +1478 blockdaemon_lido 0xb26f9666... Titan Relay
14055112 0 3183 1707 +1476 revolut 0x88a53ec4... BloXroute Regulated
14054460 4 3246 1774 +1472 nethermind_lido 0x8527d16c... Ultra Sound
14057890 4 3246 1774 +1472 blockdaemon_lido 0x8527d16c... Ultra Sound
14054275 1 3195 1724 +1471 p2porg 0xb67eaa5e... BloXroute Max Profit
14051759 0 3177 1707 +1470 blockdaemon 0x823e0146... BloXroute Max Profit
14052356 5 3260 1791 +1469 revolut 0x8527d16c... Ultra Sound
14056009 10 3343 1874 +1469 whale_0xdc8d 0x853b0078... BloXroute Regulated
14051589 1 3193 1724 +1469 revolut 0xb26f9666... Titan Relay
14057326 5 3258 1791 +1467 0x88a53ec4... BloXroute Max Profit
14057726 0 3174 1707 +1467 gateway.fmas_lido 0x88a53ec4... BloXroute Max Profit
14053664 5 3257 1791 +1466 p2porg 0xb26f9666... Titan Relay
14051966 0 3169 1707 +1462 revolut 0xb26f9666... Titan Relay
14051435 0 3168 1707 +1461 blockdaemon_lido 0x850b00e0... Ultra Sound
14054806 0 3168 1707 +1461 nethermind_lido 0x88a53ec4... BloXroute Max Profit
14057242 8 3299 1841 +1458 figment 0x8527d16c... Ultra Sound
14053267 1 3181 1724 +1457 whale_0x8ebd 0x8527d16c... Ultra Sound
14055152 0 3162 1707 +1455 blockdaemon 0x88857150... Ultra Sound
14055175 10 3327 1874 +1453 kiln Local Local
14056244 9 3308 1857 +1451 bitstamp 0x850b00e0... BloXroute Max Profit
14050826 5 3237 1791 +1446 kiln 0xb67eaa5e... BloXroute Regulated
14056637 10 3318 1874 +1444 p2porg 0x823e0146... Ultra Sound
14054953 7 3267 1824 +1443 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14054098 0 3150 1707 +1443 whale_0x8ebd 0x856b0004... Agnostic Gnosis
14054501 0 3150 1707 +1443 blockdaemon_lido 0xb67eaa5e... BloXroute Regulated
14057560 8 3283 1841 +1442 blockdaemon_lido 0x855b00e6... BloXroute Max Profit
14054086 0 3149 1707 +1442 blockdaemon_lido 0xb26f9666... Titan Relay
14055284 0 3148 1707 +1441 coinbase 0xb26f9666... Aestus
14055127 7 3264 1824 +1440 gateway.fmas_lido 0x88a53ec4... BloXroute Max Profit
14053438 6 3247 1807 +1440 revolut 0x9129eeb4... Ultra Sound
14054983 0 3146 1707 +1439 gateway.fmas_lido 0x88a53ec4... BloXroute Max Profit
14056195 0 3146 1707 +1439 coinbase 0x8db2a99d... Aestus
14057988 0 3146 1707 +1439 gateway.fmas_lido 0x851b00b1... BloXroute Max Profit
14051581 0 3142 1707 +1435 gateway.fmas_lido 0x851b00b1... BloXroute Max Profit
14052588 8 3275 1841 +1434 revolut 0x8527d16c... Ultra Sound
14056134 3 3191 1757 +1434 p2porg 0xb67eaa5e... BloXroute Regulated
14055226 15 3389 1957 +1432 kiln 0x88a53ec4... BloXroute Max Profit
14057232 3 3188 1757 +1431 p2porg 0x850b00e0... BloXroute Regulated
14056553 0 3137 1707 +1430 p2porg 0xb26f9666... Titan Relay
14054857 11 3320 1891 +1429 0x8db2a99d... Ultra Sound
14051199 1 3153 1724 +1429 gateway.fmas_lido 0xb67eaa5e... BloXroute Max Profit
14050953 1 3153 1724 +1429 gateway.fmas_lido 0x853b0078... Agnostic Gnosis
14052801 2 3169 1741 +1428 p2porg 0x850b00e0... BloXroute Regulated
14055829 6 3235 1807 +1428 whale_0x8ebd 0xb7c5e609... BloXroute Max Profit
14055245 3 3182 1757 +1425 whale_0x8ebd 0xb7c5e609... BloXroute Max Profit
14056963 7 3248 1824 +1424 whale_0x8ebd 0x8db2a99d... Ultra Sound
14057505 6 3230 1807 +1423 0x88a53ec4... Aestus
14051326 3 3177 1757 +1420 gateway.fmas_lido 0x8db2a99d... Flashbots
14055088 8 3260 1841 +1419 blockdaemon_lido 0xb26f9666... Titan Relay
14052861 2 3160 1741 +1419 p2porg 0x850b00e0... BloXroute Regulated
14056510 0 3126 1707 +1419 gateway.fmas_lido 0x823e0146... BloXroute Max Profit
14051514 3 3174 1757 +1417 coinbase 0x856b0004... Agnostic Gnosis
14053001 0 3123 1707 +1416 blockdaemon 0x9129eeb4... Ultra Sound
14053847 6 3221 1807 +1414 gateway.fmas_lido 0x8527d16c... Ultra Sound
14055336 0 3118 1707 +1411 gateway.fmas_lido 0x8527d16c... Ultra Sound
14057649 5 3200 1791 +1409 gateway.fmas_lido 0x8527d16c... Ultra Sound
14053956 1 3132 1724 +1408 whale_0x8ebd 0xb26f9666... BloXroute Max Profit
14057684 1 3131 1724 +1407 p2porg 0x853b0078... BloXroute Regulated
14053234 9 3263 1857 +1406 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14055685 11 3296 1891 +1405 gateway.fmas_lido 0xb67eaa5e... BloXroute Regulated
14057300 5 3192 1791 +1401 figment 0xb26f9666... Titan Relay
14052029 5 3192 1791 +1401 gateway.fmas_lido 0xb67eaa5e... BloXroute Max Profit
14053805 7 3225 1824 +1401 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14052475 1 3125 1724 +1401 whale_0x8ebd 0x8527d16c... Ultra Sound
14057911 0 3108 1707 +1401 gateway.fmas_lido 0xb26f9666... Aestus
14052028 1 3123 1724 +1399 whale_0x8ebd 0x853b0078... Agnostic Gnosis
14052552 1 3122 1724 +1398 kiln 0xb5a65d00... Aestus
14052464 7 3221 1824 +1397 whale_0x8ebd 0x8527d16c... Ultra Sound
14057506 0 3098 1707 +1391 kiln 0xb67eaa5e... BloXroute Max Profit
14055865 1 3114 1724 +1390 p2porg 0x850b00e0... BloXroute Regulated
14055975 0 3095 1707 +1388 gateway.fmas_lido 0x8527d16c... Ultra Sound
14054700 2 3128 1741 +1387 p2porg 0x853b0078... Agnostic Gnosis
14051728 5 3177 1791 +1386 p2porg 0xb67eaa5e... BloXroute Max Profit
14053099 0 3093 1707 +1386 p2porg 0x853b0078... Agnostic Gnosis
14053095 6 3192 1807 +1385 gateway.fmas_lido 0xb26f9666... Aestus
14056260 5 3173 1791 +1382 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
14051428 1 3106 1724 +1382 p2porg 0xb26f9666... BloXroute Max Profit
14053462 0 3088 1707 +1381 p2porg 0x853b0078... Agnostic Gnosis
14056345 6 3187 1807 +1380 kiln 0x850b00e0... BloXroute Max Profit
14055210 5 3170 1791 +1379 kiln 0x88a53ec4... BloXroute Max Profit
14050983 7 3203 1824 +1379 coinbase 0xb67eaa5e... BloXroute Max Profit
14056328 2 3119 1741 +1378 p2porg 0x850b00e0... BloXroute Regulated
14053944 2 3117 1741 +1376 p2porg 0xb26f9666... Titan Relay
14054440 8 3215 1841 +1374 whale_0x8ebd 0xb26f9666... Titan Relay
14053055 6 3181 1807 +1374 0xb26f9666... Titan Relay
14054513 0 3080 1707 +1373 p2porg 0x850b00e0... BloXroute Regulated
14057862 0 3078 1707 +1371 gateway.fmas_lido 0x8db2a99d... Ultra Sound
14056239 6 3177 1807 +1370 p2porg 0x856b0004... BloXroute Max Profit
14056043 5 3160 1791 +1369 p2porg 0x856b0004... Ultra Sound
14055203 3 3126 1757 +1369 kiln 0x88a53ec4... BloXroute Regulated
14054142 5 3159 1791 +1368 whale_0x8ebd 0x823e0146... Ultra Sound
14057877 2 3109 1741 +1368 kiln 0x8db2a99d... Aestus
14057073 1 3092 1724 +1368 p2porg 0x850b00e0... Flashbots
14056357 1 3092 1724 +1368 p2porg 0x850b00e0... BloXroute Regulated
14053056 3 3125 1757 +1368 kiln 0xb26f9666... Titan Relay
14055718 5 3158 1791 +1367 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
14057905 1 3090 1724 +1366 coinbase 0xb67eaa5e... BloXroute Max Profit
14057249 0 3073 1707 +1366 gateway.fmas_lido 0x8527d16c... Ultra Sound
14054813 1 3087 1724 +1363 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14055647 6 3170 1807 +1363 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
14051645 0 3069 1707 +1362 whale_0x8ebd 0x85fb0503... Aestus
14053948 0 3068 1707 +1361 blockdaemon_lido 0xb26f9666... Titan Relay
14054707 4 3134 1774 +1360 whale_0xedc6 0x853b0078... Aestus
14053338 0 3066 1707 +1359 figment 0x9129eeb4... Agnostic Gnosis
14054250 0 3066 1707 +1359 kiln 0xb26f9666... Titan Relay
14051482 14 3299 1940 +1359 revolut 0xb26f9666... Titan Relay
14055743 1 3081 1724 +1357 kiln 0x850b00e0... BloXroute Max Profit
14052953 7 3180 1824 +1356 gateway.fmas_lido 0x850b00e0... BloXroute Max Profit
14054704 6 3162 1807 +1355 gateway.fmas_lido Local Local
14053000 0 3061 1707 +1354 whale_0x23be 0x851b00b1... Flashbots
14051080 0 3060 1707 +1353 kiln 0x85fb0503... Aestus
14055884 0 3060 1707 +1353 kiln 0x88a53ec4... BloXroute Max Profit
14054065 5 3142 1791 +1351 gateway.fmas_lido 0x8527d16c... Ultra Sound
14051834 1 3075 1724 +1351 coinbase 0x85fb0503... Aestus
14056060 3 3107 1757 +1350 p2porg 0xb26f9666... Aestus
14053834 0 3057 1707 +1350 p2porg 0xa965c911... Ultra Sound
14057301 2 3090 1741 +1349 coinbase 0xb26f9666... Titan Relay
14057874 5 3139 1791 +1348 p2porg 0xb26f9666... Titan Relay
14051324 1 3071 1724 +1347 p2porg 0x856b0004... Agnostic Gnosis
14055637 1 3071 1724 +1347 whale_0x8ebd 0xb26f9666... Titan Relay
14053644 3 3104 1757 +1347 p2porg 0x853b0078... Agnostic Gnosis
14055840 8 3185 1841 +1344 blockdaemon 0x8a850621... Titan Relay
14056373 1 3067 1724 +1343 coinbase 0xb26f9666... Titan Relay
14056127 6 3150 1807 +1343 coinbase 0x88a53ec4... BloXroute Max Profit
14052554 1 3064 1724 +1340 whale_0x8ebd 0x8db2a99d... Ultra Sound
14051622 0 3046 1707 +1339 blockdaemon_lido 0xb26f9666... Titan Relay
14054418 0 3045 1707 +1338 whale_0xedc6 0xb26f9666... BloXroute Max Profit
14052518 5 3128 1791 +1337 coinbase 0xb67eaa5e... BloXroute Max Profit
14054377 6 3144 1807 +1337 p2porg 0x8527d16c... Ultra Sound
14057659 1 3060 1724 +1336 0x88a53ec4... BloXroute Regulated
14054966 3 3093 1757 +1336 kiln 0xb67eaa5e... BloXroute Max Profit
14053825 0 3041 1707 +1334 whale_0xedc6 0x8db2a99d... Aestus
14053113 2 3074 1741 +1333 p2porg 0x8db2a99d... Ultra Sound
14053014 0 3040 1707 +1333 ether.fi 0xac23f8cc... Ultra Sound
14054559 1 3054 1724 +1330 kiln 0x853b0078... Aestus
14051279 1 3054 1724 +1330 p2porg 0x85fb0503... Aestus
14056117 6 3137 1807 +1330 coinbase 0x8db2a99d... Aestus
14055135 1 3053 1724 +1329 p2porg 0x9129eeb4... Agnostic Gnosis
14056866 6 3135 1807 +1328 p2porg 0x8527d16c... Ultra Sound
14054215 2 3068 1741 +1327 coinbase 0xb26f9666... Titan Relay
14055686 1 3051 1724 +1327 coinbase 0xb26f9666... Titan Relay
14050932 1 3051 1724 +1327 whale_0x8ebd 0x85fb0503... Aestus
14056413 1 3050 1724 +1326 whale_0xedc6 0xb67eaa5e... Aestus
14056082 0 3033 1707 +1326 p2porg 0xb67eaa5e... Aestus
14052491 8 3165 1841 +1324 p2porg 0x823e0146... Ultra Sound
14057866 0 3031 1707 +1324 gateway.fmas_lido 0x8527d16c... Ultra Sound
14052897 1 3047 1724 +1323 coinbase 0xb26f9666... Titan Relay
14052468 1 3046 1724 +1322 coinbase 0x8db2a99d... Ultra Sound
14056194 0 3029 1707 +1322 coinbase 0xac23f8cc... Flashbots
14051306 0 3028 1707 +1321 kiln 0xb26f9666... Aestus
14054106 3 3077 1757 +1320 coinbase 0xb26f9666... Titan Relay
14057138 1 3042 1724 +1318 p2porg 0xb26f9666... Aestus
14054425 4 3091 1774 +1317 whale_0x8ebd 0x88857150... Ultra Sound
14057351 1 3041 1724 +1317 coinbase 0x88a53ec4... BloXroute Max Profit
14051260 1 3041 1724 +1317 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14055768 8 3157 1841 +1316 whale_0x8ebd 0xb26f9666... Titan Relay
14056141 7 3140 1824 +1316 kiln 0xb67eaa5e... BloXroute Regulated
14057624 0 3022 1707 +1315 p2porg 0x853b0078... BloXroute Regulated
14057221 0 3022 1707 +1315 kiln 0xb67eaa5e... BloXroute Max Profit
14051088 0 3022 1707 +1315 p2porg 0xb26f9666... BloXroute Max Profit
14056497 1 3037 1724 +1313 0x88a53ec4... BloXroute Regulated
14054623 5 3103 1791 +1312 p2porg 0x855b00e6... BloXroute Max Profit
14051552 7 3136 1824 +1312 gateway.fmas_lido 0x8527d16c... Ultra Sound
14057721 15 3267 1957 +1310 p2porg 0x850b00e0... Ultra Sound
14057604 3 3067 1757 +1310 coinbase 0x88a53ec4... BloXroute Regulated
14056890 6 3116 1807 +1309 coinbase 0x9129eeb4... Agnostic Gnosis
14052662 0 3016 1707 +1309 coinbase 0xb26f9666... Titan Relay
14050963 0 3015 1707 +1308 p2porg 0x853b0078... Titan Relay
14053231 0 3014 1707 +1307 coinbase 0xb67eaa5e... BloXroute Regulated
14051768 1 3028 1724 +1304 whale_0x8ebd 0xb67eaa5e... BloXroute Max Profit
14057745 0 3010 1707 +1303 kiln 0x88a53ec4... BloXroute Regulated
14052196 0 3010 1707 +1303 coinbase 0xac23f8cc... Aestus
14056770 8 3143 1841 +1302 whale_0x8ebd 0x823e0146... BloXroute Max Profit
14057401 10 3176 1874 +1302 nethermind_lido 0xb67eaa5e... BloXroute Max Profit
14052802 0 3008 1707 +1301 coinbase 0xb26f9666... Titan Relay
14054327 5 3090 1791 +1299 kiln 0xb67eaa5e... BloXroute Regulated
14056376 4 3073 1774 +1299 coinbase 0xb26f9666... BloXroute Regulated
14052844 2 3038 1741 +1297 whale_0x8ebd 0x856b0004... Aestus
14053128 3 3053 1757 +1296 0x8db2a99d... Flashbots
14057201 0 3003 1707 +1296 coinbase 0x88a53ec4... BloXroute Max Profit
14053955 5 3086 1791 +1295 coinbase 0xb26f9666... BloXroute Max Profit
14053225 2 3036 1741 +1295 p2porg 0x856b0004... Ultra Sound
14057055 3 3052 1757 +1295 coinbase 0x856b0004... Ultra Sound
14054216 4 3067 1774 +1293 coinbase 0x853b0078... Agnostic Gnosis
14054457 2 3033 1741 +1292 kiln 0xb26f9666... Titan Relay
14057704 0 2999 1707 +1292 coinbase 0xb67eaa5e... BloXroute Max Profit
14057728 0 2998 1707 +1291 whale_0x8ebd Local Local
14056193 1 3014 1724 +1290 whale_0x8ebd 0x853b0078... BloXroute Max Profit
14051149 6 3097 1807 +1290 coinbase 0x9129eeb4... Agnostic Gnosis
14056896 0 2997 1707 +1290 whale_0x8ebd 0x805e28e6... BloXroute Max Profit
14053933 0 2995 1707 +1288 coinbase 0xb26f9666... Aestus
14057060 0 2994 1707 +1287 coinbase 0xb5a65d00... Ultra Sound
14051465 0 2993 1707 +1286 kiln 0x805e28e6... BloXroute Max Profit
14054173 5 3076 1791 +1285 whale_0x8ebd 0x8db2a99d... Flashbots
14051313 3 3041 1757 +1284 kiln 0x856b0004... Aestus
14056426 0 2991 1707 +1284 kiln 0xb26f9666... Titan Relay
14054429 8 3124 1841 +1283 kiln 0x856b0004... Aestus
14052120 2 3024 1741 +1283 0xb26f9666... Aestus
14054511 13 3206 1924 +1282 blockdaemon 0x853b0078... Titan Relay
14056398 5 3072 1791 +1281 kiln 0x9129eeb4... Agnostic Gnosis
14051747 0 2988 1707 +1281 0xb26f9666... BloXroute Max Profit
14054691 13 3204 1924 +1280 whale_0xedc6 0x853b0078... Ultra Sound
14054604 0 2987 1707 +1280 coinbase 0x8527d16c... Ultra Sound
14051820 6 3084 1807 +1277 coinbase 0xb67eaa5e... BloXroute Max Profit
14051580 5 3067 1791 +1276 kiln 0x8527d16c... Ultra Sound
14054563 5 3067 1791 +1276 coinbase 0xb26f9666... Titan Relay
14055621 2 3017 1741 +1276 0xb26f9666... Titan Relay
14053898 2 3017 1741 +1276 0xb26f9666... BloXroute Regulated
14055111 0 2983 1707 +1276 kiln 0xb67eaa5e... BloXroute Regulated
14056439 5 3066 1791 +1275 whale_0xedc6 0x856b0004... BloXroute Max Profit
14052525 7 3099 1824 +1275 kiln 0xb67eaa5e... BloXroute Max Profit
14052101 0 2980 1707 +1273 kiln 0x8527d16c... Ultra Sound
14051205 0 2980 1707 +1273 coinbase 0xb67eaa5e... BloXroute Regulated
14056838 5 3062 1791 +1271 coinbase 0x88a53ec4... BloXroute Max Profit
14052257 5 3060 1791 +1269 whale_0x8ebd 0x8527d16c... Ultra Sound
14057686 11 3158 1891 +1267 0x88a53ec4... BloXroute Regulated
14051999 5 3058 1791 +1267 coinbase 0xb26f9666... Aestus
14053922 4 3041 1774 +1267 whale_0x8ebd 0xb26f9666... Titan Relay
14057013 12 3173 1907 +1266 coinbase 0x8db2a99d... Ultra Sound
14051002 3 3023 1757 +1266 kiln 0xb67eaa5e... BloXroute Max Profit
14054807 0 2973 1707 +1266 nethermind_lido 0x88a53ec4... BloXroute Max Profit
14051202 0 2972 1707 +1265 p2porg 0xb26f9666... BloXroute Max Profit
14053176 2 3005 1741 +1264 coinbase 0xb26f9666... BloXroute Max Profit
14054853 0 2971 1707 +1264 kiln 0xb67eaa5e... BloXroute Regulated
14051639 0 2969 1707 +1262 kiln 0x8db2a99d... Flashbots
14057091 2 3002 1741 +1261 everstake 0xa965c911... Ultra Sound
14052856 1 2985 1724 +1261 coinbase 0xb67eaa5e... BloXroute Max Profit
14051352 6 3068 1807 +1261 p2porg 0x85fb0503... Aestus
14054546 3 3018 1757 +1261 coinbase 0xb26f9666... BloXroute Max Profit
14055509 7 3083 1824 +1259 solo_stakers 0x88a53ec4... BloXroute Max Profit
14050887 2 2996 1741 +1255 coinbase 0xb26f9666... BloXroute Max Profit
14055063 7 3078 1824 +1254 coinbase 0x853b0078... Aestus
14054393 1 2978 1724 +1254 coinbase 0x856b0004... BloXroute Max Profit
14052906 0 2960 1707 +1253 kiln 0x853b0078... Agnostic Gnosis
14057051 6 3059 1807 +1252 kiln 0x88a53ec4... BloXroute Max Profit
14052241 0 2959 1707 +1252 everstake 0x855b00e6... Flashbots
14053363 0 2958 1707 +1251 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14056895 8 3090 1841 +1249 p2porg 0xb26f9666... BloXroute Max Profit
14055574 7 3072 1824 +1248 kiln 0x856b0004... Aestus
14053098 1 2972 1724 +1248 kiln 0x856b0004... Aestus
14050991 9 3105 1857 +1248 p2porg 0xb26f9666... Titan Relay
14054607 4 3021 1774 +1247 stakingfacilities_lido 0x856b0004... Ultra Sound
14054413 0 2954 1707 +1247 everstake 0x853b0078... BloXroute Max Profit
14055926 11 3137 1891 +1246 p2porg 0x853b0078... Titan Relay
14052848 10 3120 1874 +1246 kiln 0x853b0078... Aestus
14057636 5 3036 1791 +1245 0xb26f9666... Titan Relay
14056103 13 3169 1924 +1245 whale_0x8ebd 0xb26f9666... Titan Relay
14051432 4 3019 1774 +1245 whale_0x8ebd Local Local
14052438 1 2969 1724 +1245 solo_stakers 0x856b0004... Agnostic Gnosis
14051148 0 2952 1707 +1245 kiln 0xb67eaa5e... BloXroute Regulated
14055617 1 2965 1724 +1241 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
14054841 2 2981 1741 +1240 everstake 0xb26f9666... Aestus
14051203 0 2947 1707 +1240 kiln 0x85fb0503... Agnostic Gnosis
14055184 1 2963 1724 +1239 kiln 0xb26f9666... BloXroute Regulated
14053549 0 2946 1707 +1239 whale_0x8ebd Local Local
14057210 5 3029 1791 +1238 everstake 0x850b00e0... BloXroute Max Profit
14054149 5 3029 1791 +1238 kiln 0xb26f9666... BloXroute Regulated
14053745 1 2962 1724 +1238 everstake 0xb26f9666... Titan Relay
14055246 1 2960 1724 +1236 coinbase 0xb26f9666... BloXroute Max Profit
14052391 1 2959 1724 +1235 whale_0x8ebd 0x857b0038... Ultra Sound
14056958 6 3042 1807 +1235 coinbase 0x856b0004... Aestus
14053498 0 2942 1707 +1235 kiln 0xb26f9666... BloXroute Max Profit
14057629 5 3025 1791 +1234 ether.fi 0x850b00e0... Flashbots
14056763 2 2975 1741 +1234 kiln 0x8527d16c... Ultra Sound
14050947 2 2975 1741 +1234 stakingfacilities_lido 0x856b0004... Agnostic Gnosis
14053605 9 3090 1857 +1233 ether.fi 0x850b00e0... BloXroute Max Profit
14055714 6 3040 1807 +1233 coinbase 0x856b0004... Aestus
Total anomalies: 380

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