Thu, Feb 26, 2026

Propagation anomalies - 2026-02-26

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

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

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

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

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

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

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

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

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

-- Column arrival timing: first arrival per column, then min/max of those
column_gossip AS (
    SELECT
        slot,
        min(first_seen) AS first_column_first_seen,
        max(first_seen) AS last_column_first_seen
    FROM (
        SELECT
            slot,
            column_index,
            min(event_date_time) AS first_seen
        FROM libp2p_gossipsub_data_column_sidecar
        WHERE meta_network_name = 'mainnet'
          AND slot_start_date_time >= '2026-02-26' AND slot_start_date_time < '2026-02-26'::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,198
MEV blocks: 6,743 (93.7%)
Local blocks: 455 (6.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 = 1736.1 + 17.89 × blob_count (R² = 0.015)
Residual σ = 621.5ms
Anomalies (>2σ slow): 432 (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
13770862 7 6031 1861 +4170 rocketpool Local Local
13771712 5 5726 1826 +3900 upbit Local Local
13774717 0 4950 1736 +3214 ether.fi Local Local
13773760 8 4670 1879 +2791 upbit Local Local
13774990 0 4350 1736 +2614 lido Local Local
13772203 0 4073 1736 +2337 solo_stakers Local Local
13776864 0 4008 1736 +2272 stakefish Local Local
13770336 1 3832 1754 +2078 whale_0x8ebd Local Local
13770627 6 3877 1843 +2034 whale_0xdd6c 0x82c466b9... Titan Relay
13773248 3 3791 1790 +2001 blockdaemon 0x88a53ec4... BloXroute Regulated
13770614 0 3737 1736 +2001 everstake 0xa0366397... Ultra Sound
13772153 1 3697 1754 +1943 ether.fi 0xb26f9666... Titan Relay
13770428 5 3732 1826 +1906 ether.fi 0x82c466b9... EthGas
13770642 9 3801 1897 +1904 everstake 0x8a850621... Titan Relay
13771623 1 3627 1754 +1873 lido 0x8a850621... Ultra Sound
13770240 5 3695 1826 +1869 stakefish 0x856b0004... BloXroute Max Profit
13775948 2 3637 1772 +1865 solo_stakers Local Local
13775061 9 3741 1897 +1844 coinbase 0x856b0004... Ultra Sound
13772491 4 3650 1808 +1842 blockdaemon 0x91b123d8... Titan Relay
13770484 0 3577 1736 +1841 everstake 0x852b0070... BloXroute Max Profit
13773887 2 3609 1772 +1837 coinbase 0x856b0004... Ultra Sound
13770468 9 3727 1897 +1830 stader 0x853b0078... Aestus
13773749 9 3725 1897 +1828 whale_0x2e07 0x856b0004... Ultra Sound
13773457 8 3699 1879 +1820 stader 0x8527d16c... Ultra Sound
13770677 15 3824 2004 +1820 ether.fi 0x82c466b9... EthGas
13770517 5 3639 1826 +1813 everstake 0x88a53ec4... BloXroute Max Profit
13775404 5 3622 1826 +1796 blockdaemon 0x856b0004... Ultra Sound
13773913 1 3541 1754 +1787 everstake 0x8527d16c... Ultra Sound
13770697 5 3612 1826 +1786 everstake 0x82c466b9... Titan Relay
13770720 0 3521 1736 +1785 revolut 0x91b123d8... BloXroute Regulated
13770681 1 3535 1754 +1781 solo_stakers 0xb26f9666... BloXroute Regulated
13775568 0 3515 1736 +1779 figment 0xb26f9666... Titan Relay
13773793 5 3578 1826 +1752 blockdaemon 0x8a850621... Titan Relay
13772128 6 3584 1843 +1741 blockdaemon 0x82c466b9... BloXroute Regulated
13775348 13 3700 1969 +1731 blockdaemon 0x853b0078... Ultra Sound
13775264 5 3556 1826 +1730 kiln Local Local
13770482 0 3466 1736 +1730 kiln 0xb26f9666... Titan Relay
13772922 0 3466 1736 +1730 everstake 0x82c466b9... Titan Relay
13769999 8 3604 1879 +1725 everstake 0x8527d16c... Ultra Sound
13773953 3 3511 1790 +1721 staked.us 0x8db2a99d... Ultra Sound
13773969 2 3480 1772 +1708 everstake 0x93b11bec... Flashbots
13774054 8 3586 1879 +1707 blockdaemon_lido 0x855b00e6... Ultra Sound
13770699 8 3554 1879 +1675 nethermind_lido 0xb26f9666... Titan Relay
13775648 1 3428 1754 +1674 bitstamp 0xac23f8cc... BloXroute Max Profit
13770685 7 3535 1861 +1674 ether.fi 0x82c466b9... EthGas
13772802 8 3550 1879 +1671 ether.fi 0x853b0078... Aestus
13773874 0 3389 1736 +1653 everstake 0xb67eaa5e... BloXroute Max Profit
13770592 5 3472 1826 +1646 blockdaemon_lido 0x850b00e0... BloXroute Regulated
13775260 6 3485 1843 +1642 everstake 0xac23f8cc... BloXroute Max Profit
13776810 8 3518 1879 +1639 everstake 0x853b0078... BloXroute Max Profit
13770048 0 3372 1736 +1636 whale_0xd5e9 0x8527d16c... Ultra Sound
13776225 1 3388 1754 +1634 blockdaemon 0xb26f9666... Titan Relay
13770848 0 3359 1736 +1623 gateway.fmas_lido 0x8527d16c... Ultra Sound
13771569 13 3589 1969 +1620 figment 0x850b00e0... BloXroute Regulated
13775924 0 3350 1736 +1614 0xb67eaa5e... BloXroute Regulated
13776894 6 3456 1843 +1613 blockdaemon 0xb67eaa5e... BloXroute Max Profit
13776528 0 3348 1736 +1612 everstake 0xb7c5e609... BloXroute Max Profit
13771744 0 3347 1736 +1611 stakingfacilities_lido 0x8527d16c... Ultra Sound
13772397 1 3363 1754 +1609 ether.fi 0x88510a78... Titan Relay
13773720 0 3339 1736 +1603 blockdaemon 0x8527d16c... Ultra Sound
13772908 0 3333 1736 +1597 blockdaemon_lido 0x851b00b1... Ultra Sound
13776950 5 3416 1826 +1590 everstake 0xb26f9666... Titan Relay
13776518 0 3319 1736 +1583 whale_0x8ebd Local Local
13771413 1 3336 1754 +1582 everstake 0x853b0078... BloXroute Max Profit
13776356 0 3316 1736 +1580 senseinode_lido 0x851b00b1... Flashbots
13770496 0 3315 1736 +1579 kraken 0x88510a78... Titan Relay
13773770 3 3366 1790 +1576 whale_0xdc8d 0x88a53ec4... BloXroute Regulated
13770631 10 3491 1915 +1576 blockdaemon 0x91b123d8... BloXroute Regulated
13776651 1 3329 1754 +1575 blockdaemon_lido 0x8527d16c... Ultra Sound
13775739 0 3306 1736 +1570 blockdaemon 0x926b7905... BloXroute Max Profit
13773029 0 3306 1736 +1570 everstake 0xb26f9666... Titan Relay
13770579 6 3400 1843 +1557 revolut 0x88857150... Ultra Sound
13770268 7 3417 1861 +1556 whale_0xdd6c 0xb26f9666... Titan Relay
13776132 6 3398 1843 +1555 stader 0x853b0078... Aestus
13772620 5 3380 1826 +1554 blockdaemon 0x88a53ec4... BloXroute Regulated
13774492 0 3290 1736 +1554 everstake 0xb67eaa5e... BloXroute Regulated
13770494 5 3379 1826 +1553 kraken 0x82c466b9... EthGas
13774287 0 3287 1736 +1551 blockdaemon 0xb7c5beef... Titan Relay
13771275 1 3304 1754 +1550 luno 0x850b00e0... BloXroute Regulated
13771245 8 3428 1879 +1549 ether.fi 0x88510a78... Titan Relay
13773598 5 3373 1826 +1547 everstake 0xb26f9666... Titan Relay
13772843 3 3333 1790 +1543 blockdaemon_lido 0xb26f9666... Titan Relay
13770022 0 3271 1736 +1535 0x853b0078... BloXroute Regulated
13775959 5 3354 1826 +1528 everstake 0x856b0004... Aestus
13775984 2 3299 1772 +1527 solo_stakers Local Local
13774625 0 3263 1736 +1527 everstake 0xb26f9666... Titan Relay
13774962 6 3366 1843 +1523 everstake 0xb26f9666... Titan Relay
13775694 0 3256 1736 +1520 blockdaemon_lido 0xa0366397... Ultra Sound
13775481 3 3309 1790 +1519 whale_0xdc8d 0x850b00e0... BloXroute Regulated
13772909 6 3362 1843 +1519 blockdaemon 0x8527d16c... Ultra Sound
13770979 5 3344 1826 +1518 0xb26f9666... Titan Relay
13771021 1 3272 1754 +1518 blockdaemon 0x82c466b9... BloXroute Regulated
13775861 6 3358 1843 +1515 blockdaemon_lido 0x88857150... Ultra Sound
13773696 5 3338 1826 +1512 ether.fi 0x853b0078... BloXroute Max Profit
13774546 0 3248 1736 +1512 everstake 0xb26f9666... Titan Relay
13772390 0 3248 1736 +1512 blockdaemon_lido 0xb67eaa5e... BloXroute Regulated
13772291 5 3336 1826 +1510 blockdaemon 0xb67eaa5e... BloXroute Regulated
13775402 0 3246 1736 +1510 blockdaemon_lido 0x823e0146... Ultra Sound
13773761 0 3245 1736 +1509 p2porg 0xb26f9666... BloXroute Regulated
13776212 7 3370 1861 +1509 everstake 0x856b0004... BloXroute Max Profit
13771007 3 3297 1790 +1507 blockdaemon 0xb67eaa5e... BloXroute Regulated
13770465 11 3440 1933 +1507 lido 0x88a53ec4... BloXroute Regulated
13777030 10 3422 1915 +1507 everstake 0x853b0078... BloXroute Max Profit
13772539 9 3402 1897 +1505 blockdaemon 0xb26f9666... Titan Relay
13775999 5 3330 1826 +1504 blockdaemon_lido 0x88a53ec4... BloXroute Max Profit
13774963 0 3238 1736 +1502 everstake 0x852b0070... BloXroute Max Profit
13775173 0 3237 1736 +1501 whale_0xdc8d 0xb7c5beef... Titan Relay
13770195 7 3361 1861 +1500 blockdaemon 0x8a850621... Titan Relay
13770109 1 3253 1754 +1499 everstake 0x8527d16c... Ultra Sound
13772831 4 3301 1808 +1493 revolut 0xb67eaa5e... BloXroute Regulated
13773347 0 3229 1736 +1493 revolut 0xb26f9666... Titan Relay
13772800 6 3336 1843 +1493 stakingfacilities_lido 0x8527d16c... Ultra Sound
13770415 5 3316 1826 +1490 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
13776801 2 3262 1772 +1490 stakingfacilities_lido 0xac23f8cc... Flashbots
13771653 2 3262 1772 +1490 luno 0x853b0078... Ultra Sound
13771816 0 3226 1736 +1490 everstake 0x88510a78... Titan Relay
13770780 0 3222 1736 +1486 everstake 0xb67eaa5e... BloXroute Regulated
13776905 3 3274 1790 +1484 everstake 0xa230e2cf... Flashbots
13774468 1 3237 1754 +1483 bitstamp 0x88a53ec4... BloXroute Regulated
13776870 0 3219 1736 +1483 blockdaemon 0xb26f9666... Titan Relay
13776329 5 3308 1826 +1482 kiln 0x88a53ec4... BloXroute Regulated
13774171 5 3308 1826 +1482 blockdaemon_lido 0x91b123d8... BloXroute Regulated
13773490 5 3307 1826 +1481 blockdaemon_lido 0x91b123d8... BloXroute Regulated
13770534 5 3307 1826 +1481 whale_0x8ebd 0x8a850621... Titan Relay
13770178 0 3216 1736 +1480 0x852b0070... Ultra Sound
13776041 0 3215 1736 +1479 everstake 0x852b0070... Agnostic Gnosis
13776242 12 3428 1951 +1477 0xb67eaa5e... BloXroute Regulated
13776913 10 3389 1915 +1474 whale_0xdc8d 0x853b0078... Ultra Sound
13775532 0 3210 1736 +1474 blockdaemon 0xb211df49... Ultra Sound
13773229 6 3317 1843 +1474 blockdaemon 0xb26f9666... Titan Relay
13770544 0 3209 1736 +1473 kraken 0xb26f9666... Titan Relay
13770793 0 3208 1736 +1472 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
13773309 3 3260 1790 +1470 blockdaemon 0x8527d16c... Ultra Sound
13774995 1 3223 1754 +1469 luno 0x88857150... Ultra Sound
13776221 0 3205 1736 +1469 stakingfacilities_lido 0x8527d16c... Ultra Sound
13775380 0 3205 1736 +1469 blockdaemon_lido 0x82c466b9... BloXroute Regulated
13771785 3 3258 1790 +1468 blockdaemon 0x853b0078... BloXroute Regulated
13775060 21 3580 2112 +1468 luno 0x850b00e0... Ultra Sound
13770639 4 3275 1808 +1467 solo_stakers 0x850b00e0... Flashbots
13773431 4 3275 1808 +1467 blockdaemon 0x88857150... Ultra Sound
13770412 5 3289 1826 +1463 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
13775376 6 3306 1843 +1463 0x8527d16c... Ultra Sound
13772222 5 3287 1826 +1461 everstake 0xb26f9666... Titan Relay
13770924 1 3215 1754 +1461 0x8527d16c... Ultra Sound
13770455 1 3214 1754 +1460 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
13776017 9 3356 1897 +1459 blockdaemon 0xb26f9666... Titan Relay
13771614 0 3194 1736 +1458 blockdaemon_lido 0x82c466b9... Titan Relay
13776187 0 3194 1736 +1458 blockdaemon_lido 0x851b00b1... Ultra Sound
13774755 3 3247 1790 +1457 blockdaemon_lido 0xb26f9666... Titan Relay
13773914 3 3246 1790 +1456 blockdaemon_lido 0xb26f9666... Titan Relay
13773706 0 3190 1736 +1454 blockdaemon 0xa9bd259c... Ultra Sound
13777094 6 3297 1843 +1454 blockdaemon_lido 0xb67eaa5e... BloXroute Regulated
13772236 0 3187 1736 +1451 luno 0x88857150... Ultra Sound
13776542 0 3184 1736 +1448 blockdaemon_lido 0xb26f9666... Titan Relay
13773330 7 3307 1861 +1446 blockdaemon 0xb26f9666... Titan Relay
13775507 5 3271 1826 +1445 stakingfacilities_lido 0x88a53ec4... BloXroute Max Profit
13775458 7 3306 1861 +1445 blockdaemon 0xb26f9666... Titan Relay
13776165 9 3340 1897 +1443 blockdaemon_lido 0xb26f9666... Titan Relay
13774642 0 3176 1736 +1440 revolut 0x8527d16c... Ultra Sound
13772063 10 3353 1915 +1438 blockdaemon_lido 0x82c466b9... Titan Relay
13770148 0 3173 1736 +1437 everstake 0xb26f9666... Aestus
13773143 0 3171 1736 +1435 blockdaemon_lido 0xb26f9666... Titan Relay
13770209 5 3260 1826 +1434 blockdaemon 0xb26f9666... Titan Relay
13776189 10 3348 1915 +1433 luno 0xb26f9666... Titan Relay
13775486 0 3167 1736 +1431 0xb26f9666... Aestus
13773961 0 3166 1736 +1430 stakingfacilities_lido 0x88857150... Ultra Sound
13772466 7 3290 1861 +1429 ether.fi 0x853b0078... Agnostic Gnosis
13774510 0 3164 1736 +1428 p2porg 0xb26f9666... Titan Relay
13774701 0 3160 1736 +1424 p2porg 0x852b0070... BloXroute Max Profit
13774776 5 3248 1826 +1422 gateway.fmas_lido 0x88a53ec4... BloXroute Max Profit
13774357 0 3156 1736 +1420 p2porg 0x850b00e0... BloXroute Regulated
13773838 5 3245 1826 +1419 whale_0x8ebd 0x8a850621... Ultra Sound
13775602 0 3155 1736 +1419 everstake 0x852b0070... Agnostic Gnosis
13770899 0 3155 1736 +1419 whale_0x8ebd 0xb7c5e609... BloXroute Max Profit
13771923 6 3262 1843 +1419 everstake 0x856b0004... Aestus
13774852 8 3296 1879 +1417 stakely_lido 0x8db2a99d... Agnostic Gnosis
13771845 6 3260 1843 +1417 blockdaemon 0x88857150... Ultra Sound
13775599 1 3170 1754 +1416 whale_0x8ebd 0x853b0078... Ultra Sound
13771420 1 3169 1754 +1415 gateway.fmas_lido 0x855b00e6... BloXroute Max Profit
13774009 7 3272 1861 +1411 everstake 0xb26f9666... Aestus
13770046 1 3164 1754 +1410 gateway.fmas_lido 0x856b0004... Ultra Sound
13770495 1 3164 1754 +1410 nethermind_lido 0x88857150... Ultra Sound
13771636 5 3235 1826 +1409 everstake 0xb26f9666... Titan Relay
13774787 1 3162 1754 +1408 gateway.fmas_lido 0x8527d16c... Ultra Sound
13772756 0 3144 1736 +1408 gateway.fmas_lido 0x852b0070... Ultra Sound
13772756 0 3144 1736 +1408 gateway.fmas_lido 0x852b0070... Ultra Sound
13773442 5 3233 1826 +1407 everstake 0xb26f9666... Titan Relay
13770414 5 3231 1826 +1405 p2porg 0x91b123d8... BloXroute Regulated
13770625 3 3195 1790 +1405 whale_0xbd47 0xb67eaa5e... Ultra Sound
13771330 1 3159 1754 +1405 gateway.fmas_lido 0x88857150... Ultra Sound
13771931 6 3248 1843 +1405 blockdaemon 0x8527d16c... Ultra Sound
13775910 6 3244 1843 +1401 kraken 0x82c466b9... EthGas
13775415 5 3225 1826 +1399 whale_0x8ebd 0x88a53ec4... BloXroute Regulated
13770410 3 3189 1790 +1399 everstake 0x88a53ec4... BloXroute Regulated
13770711 3 3188 1790 +1398 binance 0x857b0038... Ultra Sound
13774955 0 3134 1736 +1398 stakingfacilities_lido 0x88857150... Ultra Sound
13776128 5 3223 1826 +1397 nethermind_lido 0x88857150... Ultra Sound
13776283 8 3276 1879 +1397 blockdaemon 0xb26f9666... Titan Relay
13770311 10 3311 1915 +1396 whale_0xdc8d 0x8527d16c... Ultra Sound
13776665 6 3235 1843 +1392 whale_0xdc8d 0x8527d16c... Ultra Sound
13770238 5 3217 1826 +1391 everstake 0x88a53ec4... BloXroute Regulated
13776532 6 3233 1843 +1390 p2porg 0x88a53ec4... BloXroute Regulated
13773697 10 3303 1915 +1388 solo_stakers 0x853b0078... Agnostic Gnosis
13774676 0 3124 1736 +1388 stakingfacilities_lido 0x8527d16c... Ultra Sound
13771889 6 3231 1843 +1388 everstake 0x853b0078... Agnostic Gnosis
13773521 5 3213 1826 +1387 revolut 0xb26f9666... BloXroute Regulated
13770041 5 3212 1826 +1386 gateway.fmas_lido 0x853b0078... Ultra Sound
13773962 0 3122 1736 +1386 bitstamp 0x8527d16c... Ultra Sound
13773489 7 3247 1861 +1386 everstake 0x856b0004... Agnostic Gnosis
13770462 0 3121 1736 +1385 kiln 0xb26f9666... BloXroute Max Profit
13770651 2 3155 1772 +1383 stakingfacilities_lido 0x8527d16c... Ultra Sound
13775715 0 3118 1736 +1382 p2porg 0x852b0070... Ultra Sound
13770600 0 3118 1736 +1382 kelp 0xb211df49... Aestus
13776227 8 3261 1879 +1382 coinbase 0xb67eaa5e... Aestus
13776104 5 3207 1826 +1381 gateway.fmas_lido 0x88857150... Ultra Sound
13774760 0 3117 1736 +1381 gateway.fmas_lido 0x8527d16c... Ultra Sound
13771381 4 3188 1808 +1380 stakingfacilities_lido 0x88857150... Ultra Sound
13770531 1 3134 1754 +1380 whale_0x8ebd 0x855b00e6... BloXroute Max Profit
13770650 3 3169 1790 +1379 nethermind_lido 0x8527d16c... Ultra Sound
13775980 0 3113 1736 +1377 p2porg 0x8527d16c... Ultra Sound
13776133 0 3113 1736 +1377 whale_0x8ebd 0x805e28e6... Flashbots
13774730 9 3273 1897 +1376 gateway.fmas_lido 0x88a53ec4... BloXroute Regulated
13770441 1 3129 1754 +1375 stakingfacilities_lido 0x8527d16c... Ultra Sound
13770665 10 3290 1915 +1375 0xb26f9666... Titan Relay
13772823 0 3111 1736 +1375 gateway.fmas_lido 0x8527d16c... Ultra Sound
13771371 7 3235 1861 +1374 p2porg 0x850b00e0... BloXroute Regulated
13770469 6 3216 1843 +1373 stakingfacilities_lido 0x855b00e6... Ultra Sound
13772812 0 3108 1736 +1372 p2porg 0x91b123d8... Titan Relay
13770203 0 3107 1736 +1371 everstake 0xb26f9666... Titan Relay
13771389 6 3213 1843 +1370 gateway.fmas_lido 0x8db2a99d... Flashbots
13775074 14 3355 1987 +1368 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
13775711 5 3193 1826 +1367 gateway.fmas_lido 0xac23f8cc... BloXroute Max Profit
13776596 3 3157 1790 +1367 gateway.fmas_lido 0x8527d16c... Ultra Sound
13777147 6 3210 1843 +1367 everstake 0x860d4173... BloXroute Max Profit
13771613 8 3245 1879 +1366 everstake 0xb26f9666... Titan Relay
13774873 1 3119 1754 +1365 stakingfacilities_lido 0xb7c5beef... Ultra Sound
13776585 0 3101 1736 +1365 whale_0x8ebd 0xb26f9666... Titan Relay
13770587 0 3099 1736 +1363 whale_0x8ebd 0x852b0070... Ultra Sound
13776885 7 3224 1861 +1363 0x850b00e0... BloXroute Max Profit
13774199 10 3275 1915 +1360 blockdaemon_lido 0xb26f9666... Titan Relay
13775858 5 3185 1826 +1359 everstake 0x853b0078... BloXroute Max Profit
13772611 4 3166 1808 +1358 kiln 0x850b00e0... BloXroute Max Profit
13776713 7 3219 1861 +1358 gateway.fmas_lido 0x856b0004... Ultra Sound
13771164 0 3093 1736 +1357 stakingfacilities_lido 0x88857150... Ultra Sound
13777044 10 3270 1915 +1355 whale_0xdc8d 0x8527d16c... Ultra Sound
13770026 0 3091 1736 +1355 gateway.fmas_lido 0x8527d16c... Ultra Sound
13771784 0 3091 1736 +1355 p2porg 0x853b0078... Titan Relay
13772866 5 3179 1826 +1353 stakingfacilities_lido 0x8527d16c... Ultra Sound
13772804 0 3087 1736 +1351 p2porg 0x850b00e0... BloXroute Regulated
13772715 0 3086 1736 +1350 gateway.fmas_lido 0x852b0070... Ultra Sound
13770659 6 3193 1843 +1350 0xb26f9666... BloXroute Max Profit
13772630 10 3264 1915 +1349 whale_0xdc8d 0xb26f9666... Titan Relay
13771655 8 3228 1879 +1349 p2porg 0x850b00e0... BloXroute Regulated
13775587 5 3174 1826 +1348 gateway.fmas_lido 0x88857150... Ultra Sound
13775271 4 3156 1808 +1348 whale_0xedc6 0xac23f8cc... Flashbots
13776827 1 3101 1754 +1347 gateway.fmas_lido 0x8527d16c... Ultra Sound
13775964 0 3081 1736 +1345 p2porg 0x856b0004... Ultra Sound
13774840 8 3224 1879 +1345 p2porg 0x850b00e0... BloXroute Regulated
13773475 5 3170 1826 +1344 kiln 0x88a53ec4... BloXroute Regulated
13771365 0 3080 1736 +1344 gateway.fmas_lido 0x8527d16c... Ultra Sound
13773645 0 3080 1736 +1344 p2porg 0xb26f9666... Titan Relay
13770641 7 3205 1861 +1344 0xb26f9666... Aestus
13774278 3 3132 1790 +1342 gateway.fmas_lido 0xac23f8cc... Flashbots
13772847 0 3078 1736 +1342 gateway.fmas_lido 0x8527d16c... Ultra Sound
13777013 8 3221 1879 +1342 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
13772716 0 3076 1736 +1340 0x852b0070... Agnostic Gnosis
13770603 7 3201 1861 +1340 binance 0x857b0038... Ultra Sound
13773991 1 3093 1754 +1339 0xb26f9666... Titan Relay
13772388 5 3164 1826 +1338 kiln 0x88510a78... Titan Relay
13775661 6 3180 1843 +1337 gateway.fmas_lido 0x853b0078... Ultra Sound
13776266 11 3269 1933 +1336 everstake 0x8527d16c... Ultra Sound
13776359 6 3179 1843 +1336 stader 0x850b00e0... BloXroute Max Profit
13773612 5 3160 1826 +1334 p2porg 0xb67eaa5e... BloXroute Regulated
13774314 0 3069 1736 +1333 everstake 0x8a850621... Titan Relay
13771769 7 3194 1861 +1333 everstake 0x853b0078... Agnostic Gnosis
13774688 0 3068 1736 +1332 everstake 0x88a53ec4... BloXroute Regulated
13775425 0 3068 1736 +1332 whale_0x8ebd 0x88857150... Ultra Sound
13771253 0 3068 1736 +1332 p2porg 0x88a53ec4... BloXroute Regulated
13773123 2 3103 1772 +1331 p2porg 0xac23f8cc... BloXroute Max Profit
13771423 1 3085 1754 +1331 p2porg 0x91b123d8... BloXroute Regulated
13777046 5 3154 1826 +1328 whale_0x8ebd 0x8db2a99d... BloXroute Max Profit
13776655 0 3064 1736 +1328 ether.fi 0x851b00b1... Flashbots
13770162 0 3063 1736 +1327 stader 0xa1da2978... Ultra Sound
13773826 9 3224 1897 +1327 gateway.fmas_lido 0xac23f8cc... Flashbots
13770620 1 3080 1754 +1326 solo_stakers 0xb67eaa5e... Aestus
13771847 3 3115 1790 +1325 kiln 0xb26f9666... BloXroute Regulated
13775632 0 3061 1736 +1325 p2porg 0x856b0004... Agnostic Gnosis
13774883 3 3114 1790 +1324 ether.fi 0x88857150... Ultra Sound
13771250 11 3257 1933 +1324 whale_0xdc8d 0x853b0078... Ultra Sound
13772975 10 3239 1915 +1324 p2porg 0x850b00e0... BloXroute Regulated
13773172 6 3166 1843 +1323 gateway.fmas_lido 0x8db2a99d... Ultra Sound
13770917 5 3148 1826 +1322 gateway.fmas_lido 0x8527d16c... Ultra Sound
13774339 3 3112 1790 +1322 figment 0x853b0078... Ultra Sound
13773916 1 3075 1754 +1321 ether.fi 0x823e0146... Flashbots
13772260 6 3164 1843 +1321 kiln 0xb26f9666... BloXroute Regulated
13772954 0 3056 1736 +1320 kelp 0xb26f9666... Titan Relay
13771052 13 3287 1969 +1318 p2porg 0x850b00e0... BloXroute Regulated
13772576 0 3053 1736 +1317 whale_0x4685 0xb26f9666... Aestus
13770407 5 3142 1826 +1316 whale_0x8ebd 0x823e0146... Ultra Sound
13774215 0 3052 1736 +1316 0x93b11bec... Flashbots
13772033 3 3105 1790 +1315 gateway.fmas_lido 0x8527d16c... Ultra Sound
13775869 0 3051 1736 +1315 p2porg 0xb67eaa5e... BloXroute Regulated
13773040 0 3051 1736 +1315 whale_0x8ebd 0xa9bd259c... Flashbots
13776825 6 3158 1843 +1315 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
13774588 21 3426 2112 +1314 whale_0x8ebd Local Local
13770413 0 3050 1736 +1314 whale_0xedc6 0xb26f9666... Aestus
13773436 0 3050 1736 +1314 p2porg 0xb26f9666... BloXroute Regulated
13772845 9 3211 1897 +1314 kelp 0x850b00e0... Flashbots
13775626 6 3157 1843 +1314 gateway.fmas_lido 0x88857150... Ultra Sound
13776044 5 3139 1826 +1313 everstake 0x856b0004... Agnostic Gnosis
13771888 0 3047 1736 +1311 p2porg 0x852b0070... Ultra Sound
13770898 0 3047 1736 +1311 p2porg 0xb67eaa5e... BloXroute Max Profit
13770520 7 3171 1861 +1310 kiln 0x853b0078... Aestus
13775030 5 3135 1826 +1309 p2porg 0xb26f9666... Aestus
13773552 3 3099 1790 +1309 kiln 0x8db2a99d... Flashbots
13773235 0 3044 1736 +1308 p2porg 0x8527d16c... Ultra Sound
13770557 0 3044 1736 +1308 p2porg 0xb26f9666... BloXroute Max Profit
13771239 2 3079 1772 +1307 mantle 0x91b123d8... Titan Relay
13773910 5 3132 1826 +1306 p2porg 0x8527d16c... Ultra Sound
13772676 5 3131 1826 +1305 everstake 0x8a850621... Titan Relay
13775737 5 3130 1826 +1304 p2porg 0xb26f9666... Titan Relay
13772513 1 3058 1754 +1304 0xb26f9666... Titan Relay
13776112 0 3040 1736 +1304 p2porg 0x856b0004... Aestus
13771168 0 3039 1736 +1303 ether.fi 0x88a53ec4... BloXroute Regulated
13770830 7 3164 1861 +1303 gateway.fmas_lido 0x8527d16c... Ultra Sound
13774320 5 3128 1826 +1302 mantle 0x88a53ec4... BloXroute Max Profit
13773693 2 3073 1772 +1301 0x82c466b9... Titan Relay
13770385 10 3216 1915 +1301 p2porg 0x88a53ec4... BloXroute Max Profit
13775031 0 3037 1736 +1301 kiln 0x99dbe3e8... Aestus
13772484 8 3180 1879 +1301 kiln 0x82c466b9... Titan Relay
13776963 0 3035 1736 +1299 gateway.fmas_lido 0x8527d16c... Ultra Sound
13772124 8 3178 1879 +1299 p2porg 0x850b00e0... BloXroute Regulated
13770354 1 3052 1754 +1298 p2porg 0x8527d16c... Ultra Sound
13774842 6 3141 1843 +1298 whale_0x8ebd 0xb26f9666... Titan Relay
13772408 5 3123 1826 +1297 gateway.fmas_lido 0x853b0078... Ultra Sound
13773430 4 3105 1808 +1297 gateway.fmas_lido 0x8a850621... Ultra Sound
13776001 1 3051 1754 +1297 ether.fi 0xb26f9666... Titan Relay
13776506 0 3033 1736 +1297 kiln 0x88a53ec4... BloXroute Regulated
13770214 1 3050 1754 +1296 solo_stakers 0x88a53ec4... BloXroute Max Profit
13775439 0 3032 1736 +1296 kiln 0xb26f9666... Titan Relay
13774120 5 3121 1826 +1295 mantle 0x8527d16c... Ultra Sound
13773987 0 3031 1736 +1295 whale_0x8ebd 0x8527d16c... Ultra Sound
13773686 0 3031 1736 +1295 whale_0xedc6 0xb26f9666... BloXroute Max Profit
13774952 0 3030 1736 +1294 p2porg Local Local
13770491 17 3334 2040 +1294 kraken 0x82c466b9... EthGas
13770142 3 3083 1790 +1293 ether.fi 0xb26f9666... Titan Relay
13771920 1 3047 1754 +1293 mantle 0x853b0078... BloXroute Regulated
13775606 0 3029 1736 +1293 everstake 0x88857150... Ultra Sound
13770506 0 3029 1736 +1293 p2porg 0x860d4173... Flashbots
13771128 0 3029 1736 +1293 0x82c466b9... Titan Relay
13773664 12 3243 1951 +1292 origin_protocol 0x8527d16c... Ultra Sound
13772417 0 3028 1736 +1292 p2porg 0xb26f9666... BloXroute Max Profit
13775495 0 3027 1736 +1291 ether.fi 0x88857150... Ultra Sound
13776702 5 3116 1826 +1290 0x853b0078... Aestus
13773470 1 3044 1754 +1290 kelp 0xb26f9666... Titan Relay
13775313 0 3026 1736 +1290 ether.fi 0xb26f9666... Aestus
13775044 0 3026 1736 +1290 kelp 0xa0366397... Ultra Sound
13772178 10 3204 1915 +1289 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
13774265 0 3025 1736 +1289 0x88a53ec4... BloXroute Max Profit
13772211 1 3041 1754 +1287 p2porg 0x823e0146... Flashbots
13776531 0 3023 1736 +1287 kiln 0xb26f9666... Titan Relay
13775474 5 3112 1826 +1286 ether.fi 0x856b0004... Ultra Sound
13774149 1 3040 1754 +1286 mantle 0x8527d16c... Ultra Sound
13773058 0 3022 1736 +1286 p2porg 0x852b0070... Ultra Sound
13774350 9 3181 1897 +1284 p2porg 0x88857150... Ultra Sound
13773406 1 3037 1754 +1283 kiln 0xb26f9666... Aestus
13775725 0 3019 1736 +1283 kelp 0xb26f9666... Titan Relay
13773070 7 3144 1861 +1283 gateway.fmas_lido 0x8527d16c... Ultra Sound
13775989 5 3108 1826 +1282 p2porg 0x8db2a99d... Flashbots
13775537 4 3090 1808 +1282 p2porg 0x853b0078... BloXroute Max Profit
13774106 0 3018 1736 +1282 p2porg 0x8527d16c... Ultra Sound
13774574 0 3018 1736 +1282 p2porg 0xb26f9666... BloXroute Max Profit
13770765 3 3070 1790 +1280 ether.fi 0x856b0004... BloXroute Max Profit
13776675 1 3034 1754 +1280 ether.fi 0xb7c5beef... Titan Relay
13773244 1 3034 1754 +1280 kiln 0xb26f9666... Titan Relay
13776919 7 3141 1861 +1280 mantle 0x8527d16c... Ultra Sound
13774443 20 3373 2094 +1279 blockdaemon 0xb26f9666... Titan Relay
13774699 0 3015 1736 +1279 p2porg 0x8527d16c... Ultra Sound
13776343 0 3015 1736 +1279 kiln 0x8db2a99d... BloXroute Max Profit
13770440 1 3032 1754 +1278 nethermind_lido 0x88857150... Ultra Sound
13774632 1 3030 1754 +1276 whale_0x8ebd 0xb26f9666... Titan Relay
13776715 0 3012 1736 +1276 mantle 0xb26f9666... Titan Relay
13773907 0 3012 1736 +1276 mantle 0xb67eaa5e... BloXroute Max Profit
13772606 5 3101 1826 +1275 p2porg 0x88510a78... BloXroute Regulated
13776317 1 3029 1754 +1275 kiln 0xa230e2cf... BloXroute Max Profit
13775882 1 3027 1754 +1273 whale_0x7791 0xb26f9666... Titan Relay
13773077 3 3061 1790 +1271 figment 0x8527d16c... Ultra Sound
13771178 18 3328 2058 +1270 whale_0xdc8d 0x8527d16c... Ultra Sound
13773405 5 3095 1826 +1269 kiln 0x88a53ec4... BloXroute Max Profit
13772262 0 3005 1736 +1269 whale_0x8ebd 0x8a850621... Titan Relay
13772335 0 3005 1736 +1269 kelp 0x8a2a4361... Ultra Sound
13770072 0 3005 1736 +1269 ether.fi 0x8a2d9d9a... Flashbots
13776135 9 3166 1897 +1269 everstake 0xb26f9666... Titan Relay
13776111 6 3112 1843 +1269 kelp 0xb26f9666... Titan Relay
13772893 0 3004 1736 +1268 kiln 0x852b0070... BloXroute Max Profit
13772030 1 3021 1754 +1267 kiln 0xb26f9666... BloXroute Max Profit
13771402 0 3003 1736 +1267 kiln 0xb26f9666... Titan Relay
13776862 5 3091 1826 +1265 everstake 0x853b0078... Agnostic Gnosis
13771374 0 3001 1736 +1265 kiln 0x853b0078... Aestus
13777138 0 3000 1736 +1264 kiln 0x8527d16c... Ultra Sound
13771001 7 3125 1861 +1264 kiln 0xb26f9666... Titan Relay
13774383 0 2999 1736 +1263 whale_0x8ebd 0xb67eaa5e... BloXroute Regulated
13771207 5 3088 1826 +1262 p2porg 0x856b0004... Aestus
13776315 0 2997 1736 +1261 whale_0x8ebd 0x88857150... Ultra Sound
13771138 3 3050 1790 +1260 ether.fi 0x88a53ec4... BloXroute Max Profit
13770839 5 3085 1826 +1259 kiln 0xb26f9666... Titan Relay
13774399 3 3047 1790 +1257 kiln 0xb67eaa5e... BloXroute Regulated
13775556 7 3118 1861 +1257 p2porg 0x850b00e0... BloXroute Regulated
13772552 3 3046 1790 +1256 kiln 0x856b0004... Aestus
13771586 1 3010 1754 +1256 mantle 0xb26f9666... Titan Relay
13773737 0 2992 1736 +1256 kiln 0xac23f8cc... BloXroute Max Profit
13771145 7 3117 1861 +1256 ether.fi 0xb26f9666... Titan Relay
13776417 5 3081 1826 +1255 p2porg 0x853b0078... Aestus
13770730 1 3009 1754 +1255 binance 0x857b0038... Ultra Sound
13776469 6 3098 1843 +1255 kiln 0x8db2a99d... BloXroute Max Profit
13772149 0 2990 1736 +1254 kiln 0x852b0070... Agnostic Gnosis
13775366 0 2990 1736 +1254 kiln 0x823e0146... BloXroute Max Profit
13775167 2 3025 1772 +1253 kiln 0x853b0078... Aestus
13770561 1 3007 1754 +1253 solo_stakers 0x88857150... Ultra Sound
13774346 5 3078 1826 +1252 kiln 0x88a53ec4... BloXroute Regulated
13770090 0 2988 1736 +1252 stader 0x8db2a99d... Flashbots
13771230 6 3095 1843 +1252 whale_0x8ebd 0x88a53ec4... BloXroute Max Profit
13772482 0 2987 1736 +1251 whale_0x8ebd 0x8a850621... Titan Relay
13774837 5 3076 1826 +1250 p2porg 0x853b0078... BloXroute Max Profit
13771156 0 2986 1736 +1250 abyss_finance 0x855b00e6... BloXroute Max Profit
13770014 6 3093 1843 +1250 whale_0x8ebd 0xb26f9666... Titan Relay
13776204 0 2983 1736 +1247 whale_0x8ebd 0x8db2a99d... BloXroute Max Profit
13770701 6 3090 1843 +1247 kraken 0xb7c5beef... Titan Relay
13771108 0 2982 1736 +1246 kiln 0xb26f9666... BloXroute Max Profit
13775919 6 3089 1843 +1246 p2porg 0x8a850621... Ultra Sound
13775217 8 3124 1879 +1245 0x853b0078... Aestus
13770475 3 3033 1790 +1243 kiln 0xb26f9666... BloXroute Regulated
Total anomalies: 432

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