Xatu共识层P2P表现已可用

EthPandaOps 团队宣布,Xatu 共识层 P2P 表的部分数据现已公开发布,采用 Apache Parquet 格式。这些数据通过 Probelab 的 Hermes 项目和 Xatu 从共识层 P2P 网络直接捕获,旨在提供对 Ethereum 网络 P2P 层行为的深入分析和研究。文章还提供了使用 Clickhouse 查询数据的示例。

Xatu 共识层 P2P 表现已可用

我们很高兴地宣布,一些 Xatu 共识层 P2P 表格现在以 Parquet 格式公开提供!

所有数据都是通过利用 Probelab'sHermes 项目和 Xatu 直接从共识层 P2P 网络捕获的。实例由 EthPandaOps 团队在 2 个区域运行。

概要:

  • 数据根据 CC BY 4.0 许可专门用于公共领域
  • 数据按小时或天数在 Apache Parquet 文件中进行分区
  • 我们已经收集这些数据好几个月了!

通过提供这些数据,我们希望能够对以太坊网络在 P2P 级别的行为进行更深入的分析和研究。

表格

注意: 这些表中的数据仅从一小部分节点捕获,并不提供网络的完整视图。

关于这些数据

与通过信标 API 事件流收集的数据相比,这些数据捕获更接近线路。因此,它未经任何方式验证。这意味着具有无效签名或其他问题的消息不会被过滤掉。这允许更全面地了解网络,包括可能在更高层被过滤掉的潜在恶意或错误行为,但会牺牲一些数据质量。

这是一个简化的图表,显示了区块提议如何在信标 API 和 libp2p 表格中落地:

区块提议

已盖时间戳

已盖时间戳

信标节点 A

P2P 网络

信标节点 B

区块处理

信标 API 事件流

Xatu

beacon_api_eth_v1_events_block

带有 Hermes 的 Xatu

libp2p_gossipsub_beacon_block

开始使用

入门的最简单方法是安装 Clickhouse 客户端并使用 clickhouse local 查询数据。处理数据 提供了更多详细信息。

例子

以下示例演示了如何独立使用这些新提供的表格以及如何与我们现有的 Xatu 表格结合使用,以解决关于以太坊网络的有趣问题。

示例 1

在主网上,8 月 15 日哪个 3 个 slot 的区块提议到达速度最快?

答案:我们可以使用 libp2p_gossipsub_beacon_block 表来查找每个 slot 的首次看到时间,然后按该值排序。

clickhouse local -q "
    SELECT
        min(propagation_slot_start_diff) as slot_time_ms,
        slot
    FROM
        url('https://data.ethpandaops.io/xatu/mainnet/databases/default/libp2p_gossipsub_beacon_block/2024/8/15.parquet', 'Parquet')
    GROUP BY
        slot
    ORDER BY
        slot_time_ms
    LIMIT 3
    FORMAT PrettyCompact
"
┌─slot_time_ms─┬────slot─┐
│          209 │ 9738557 │
│          229 │ 9742293 │
│          233 │ 9745006 │
└──────────────┴─────────┘

示例 2

哪些区块在截止日期前被看到,但仍然没有进入主网上的最终链?

答案:我们可以检查 libp2p_gossipsub_beacon_block 表中在 P2P 网络上的截止日期前被看到的区块,然后检查 canonical_beacon_block 表中已最终确定的区块。

clickhouse local -q "
    WITH p2p_blocks AS (
        SELECT
            block AS block_hash,
            min(propagation_slot_start_diff) as first_seen_ms,
            slot_start_date_time,
            slot
        FROM
            url('https://data.ethpandaops.io/xatu/mainnet/databases/default/libp2p_gossipsub_beacon_block/2024/8/15.parquet', 'Parquet')
        GROUP BY
            block, slot_start_date_time, slot
        HAVING
            first_seen_ms < 4000
    ),
    canonical_counts AS (
        SELECT
            block_root AS block_hash,
            COUNT(*) AS count
        FROM
            url('https://data.ethpandaops.io/xatu/mainnet/databases/default/canonical_beacon_block/2024/8/{14..16}.parquet', 'Parquet')
        GROUP BY
            block_root
    ),
    blocks_with_zero_count AS (
        SELECT block_hash
        FROM canonical_counts
        WHERE count = 0
    )

    SELECT
        p2p.slot as slot,
        p2p.first_seen_ms
    FROM p2p_blocks p2p
    LEFT JOIN canonical_counts c ON p2p.block_hash = c.block_hash
    LEFT JOIN blocks_with_zero_count b ON p2p.block_hash = b.block_hash
    WHERE COALESCE(c.count, 0) = 0
    ORDER BY p2p.first_seen_ms ASC
    LIMIT 10
    FORMAT PrettyCompact
"
┌────slot─┬─p2p.first_seen_ms─┐
│ 9743140 │               924 │
│ 9743136 │              3053 │
│ 9738789 │              3476 │
│ 9738302 │              3725 │
│ 9743407 │              3837 │
└─────────┴───────────────────┘

示例 3

在 Sepolia 网络中,验证器 0 的证明包含在链上的时间是多久?它们何时首次在 P2P 网络上被看到?

答案: 我们可以比较在 Sepolia P2P 网络上看到证明的时间与它们包含在链上的时间。我们将使用 libp2p_gossipsub_beacon_attestation 表用于 P2P 数据,并使用 canonical_beacon_elaborated_attestation 表用于它们包含在链上的时间,并基于区块根将它们连接起来。

注意:证明文件可能很大,因此我们只查看一小时的证明数据。

clickhouse local -q "
    WITH attestations AS (
        SELECT
            slot,
            min(propagation_slot_start_diff) as first_seen_ms
        FROM
            url('https://data.ethpandaops.io/xatu/sepolia/databases/default/libp2p_gossipsub_beacon_attestation/2024/8/8/0.parquet', 'Parquet')
        WHERE attesting_validator_index = 0
        GROUP BY slot
    ),
    on_chain_attestations AS (
        SELECT
            slot,
            min(block_slot) as first_seen_slot
        FROM
            url('https://data.ethpandaops.io/xatu/sepolia/databases/default/canonical_beacon_elaborated_attestation/2024/8/8.parquet', 'Parquet')
        WHERE has(validators, 0)
        GROUP BY slot
    )
    SELECT
        a.slot,
        a.first_seen_ms as p2p_first_seen_ms,
        o.first_seen_slot - a.slot AS inclusion_delay_slots
    FROM attestations a
    LEFT JOIN on_chain_attestations o ON a.slot = o.slot
    ORDER BY a.slot ASC
    FORMAT PrettyCompact
"
┌────slot─┬─p2p_first_seen_ms─┬─inclusion_delay_slots─┐
│ 5611821 │              1036 │                     1 │
│ 5611852 │               885 │                     1 │
│ 5611890 │              4188 │                     1 │
│ 5611920 │               701 │                     1 │
│ 5611960 │              4145 │                     2 │
│ 5611985 │               580 │                     1 │
│ 5612027 │              4153 │                     2 │
│ 5612037 │               764 │                     1 │
│ 5612067 │               534 │                     1 │
└─────────┴───────────────────┴───────────────────────┘

总结

我们希望你发现这些数据有用,并期待看到你使用它构建的内容!如果你有任何问题或反馈,请通过 Twitter 与我们联系,或加入 Xatu Telegram Group

查询愉快!

爱,

EthPandaOps 团队 ❤️

  • 原文链接: ethpandaops.io/posts/xat...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
EthPandaOps
EthPandaOps
https://ethpandaops.io