EthPandaOps 团队宣布,Xatu 共识层 P2P 表的部分数据现已公开发布,采用 Apache Parquet 格式。这些数据通过 Probelab 的 Hermes 项目和 Xatu 从共识层 P2P 网络直接捕获,旨在提供对 Ethereum 网络 P2P 层行为的深入分析和研究。文章还提供了使用 Clickhouse 查询数据的示例。
我们很高兴地宣布,一些 Xatu 共识层 P2P 表格现在以 Parquet 格式公开提供!
所有数据都是通过利用 Probelab's 的 Hermes 项目和 Xatu 直接从共识层 P2P 网络捕获的。实例由 EthPandaOps 团队在 2 个区域运行。
概要:
通过提供这些数据,我们希望能够对以太坊网络在 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 表格结合使用,以解决关于以太坊网络的有趣问题。
在主网上,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 │
└──────────────┴─────────┘
哪些区块在截止日期前被看到,但仍然没有进入主网上的最终链?
答案:我们可以检查 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 │
└─────────┴───────────────────┘
在 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 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!