Xatu数据集这个数据集包含了关于以太坊网络的丰富信息,包括信标链事件、内存池活动和规范链事件的详细数据。
这个 数据集 包含了关于 以太坊网络 的丰富信息,包括 信标链 事件、内存池 活动和 规范链 事件的详细数据。请在我们的 公告帖子 中了解更多信息。
<p xmlns:cc="http://creativecommons.org/ns#" >本作品采用 CC BY 4.0
数据集名称 | 模式 | 描述 | 前缀 | EthPandaOps Clickhouse | 公共 Parquet 文件 |
---|---|---|---|---|---|
信标 API 事件流 | 模式 | 从信标 API 事件流派生的事件 | beaconapi | ✅ | ✅ |
执行层 P2P | 模式 | 来自执行层 P2P 网络的事件 | mempool_ | ✅ | ✅ |
规范信标 | 模式 | 从最终确定的信标链派生的事件 | canonicalbeacon | ✅ | ✅ |
规范执行 | 模式 | 从执行层提取的数据 | canonicalexecution | ✅ | ✅ |
共识层 P2P | 模式 | 来自共识层 P2P 网络的事件 | libp2p_ | ✅ | ✅ |
MEV 中继 | 模式 | 从 MEV 中继派生的事件 | mevrelay | ✅ | ✅ |
注意:公共 Parquet 文件对所有人开放。 访问 EthPandaOps Clickhouse 受到限制。如果你需要访问,请通过 ethpandaops at ethereum.org 联系我们。
查看 提取过程 的可视化表示。
有关数据模式的详细描述,请参阅 模式文档。
公共数据以 Apache Parquet 文件的形式提供。你可以使用任何支持 Apache Parquet 格式的工具来查询数据。
如果你可以访问 EthPandaOps Clickhouse,你可以直接查询数据。跳到 使用 EthPandaOps Clickhouse。
有几种方法可以开始使用数据。 首先安装依赖项:
通过运行以下命令验证安装:
docker version
有三种选项可以开始使用数据,所有选项都使用 Clickhouse。
选项 1:设置你自己的 Clickhouse 服务器并导入数据。
推荐用于大多数用例。
适合较大、重复的查询或当你想以更复杂的方式查询数据时。
选项 2:直接查询公共 Parquet 文件。
适合小型一次性查询或当你不想设置自己的 Clickhouse 服务器时。
选项 3:使用 EthPandaOps Clickhouse。
适合快速和简单的查询。无需设置,但访问有限。
运行你自己的 Clickhouse 集群是大多数用例的推荐选择。此过程将指导你完成使用 Xatu Clickhouse 迁移设置集群并直接从公共 Parquet 文件导入数据的步骤。
克隆 Xatu 仓库
Xatu 包含一个 docker compose 文件,用于在本地运行 Clickhouse 集群。该服务器将自动应用正确的模式迁移。
步骤:
git clone https://github.com/ethpandaops/xatu.git;
cd xatu
docker compose --profile clickhouse up --detach
docker run --rm -it --net host clickhouse/clickhouse-server clickhouse client --query "SHOW TABLES FROM default" | grep -v local
这将显示你在默认数据库中可用的表。 例如:
...
beacon_api_eth_v1_beacon_committee
beacon_api_eth_v1_events_attestation
beacon_api_eth_v1_events_blob_sidecar
...
将数据加载到 Clickhouse
我们的 Clickhouse 集群正在运行,但没有数据!让我们导入一些数据。
步骤:
cd;
git clone https://github.com/ethpandaops/xatu-data.git
cd xatu-data;
curl https://clickhouse.com/ | sh
./import-clickhouse.sh mainnet default beacon_api_eth_v1_events_block 2024-03-20 2024-03-27
这将导入主网中 default.beacon_api_eth_v1_events_block
表在 2024 年 3 月 20 日至 2024 年 3 月 27 日的数据。
docker run --rm -it --net host \
clickhouse/clickhouse-server clickhouse client -q "SELECT toStartOfDay(slot_start_date_time) AS day, COUNT(*) FROM default.beacon_api_eth_v1_events_block GROUP BY day FORMAT Pretty"
此查询将显示每天的事件计数。
直接查询 Parquet 文件
另外,你可以直接查询 Parquet 文件而无需导入。如果你只需要查询数据的一个小子集,这很有用。
步骤:
# 基于日期的分区表
clickhouse local --query="SELECT * FROM url('https://data.ethpandaops.io/xatu/mainnet/databases/default/beacon_api_eth_v1_events_block/2024/3/20.parquet', 'Parquet') LIMIT 10 FORMAT Pretty"
20000000.parquet
块的前 10 行(块号在 20000000
和 20000999
之间)
# 基于整数的分区表
clickhouse local --query="SELECT * FROM url('https://data.ethpandaops.io/xatu/mainnet/databases/default/canonical_execution_block/1000/20000000.parquet', 'Parquet') LIMIT 10 FORMAT Pretty"
20000000
和 20010000
之间
# 基于日期的分区表
clickhouse local --query="SELECT COUNT(*) FROM url('https://data.ethpandaops.io/xatu/mainnet/databases/default/beacon_api_eth_v1_events_block/2024/3/{15..20}.parquet', 'Parquet') FORMAT Pretty"
# 基于整数的分区表
clickhouse local --query="SELECT COUNT(*) FROM url('https://data.ethpandaops.io/xatu/mainnet/databases/default/canonical_execution_block/1000/{20000..20010}000.parquet', 'Parquet') LIMIT 10 FORMAT Pretty"
EthPandaOps Clickhouse 集群已经加载了数据并应用了模式迁移。你可以直接查询数据。 如果你需要访问权限,请通过 ethpandaops@ethereum.org 联系我们。访问权限有限。
查询数据
步骤:
设置你的凭据
export CLICKHOUSE_USER=YOUR_USERNAME
export CLICKHOUSE_PASSWORD=YOUR_PASSWORD
执行查询
echo """
SELECT
*
FROM default.beacon_api_eth_v1_events_block FINAL
WHERE
slot_start_date_time >= NOW() - INTERVAL '1 HOUR'
LIMIT 3
FORMAT Pretty
""" | curl "https://clickhouse.xatu.ethpandaops.io" -u "$CLICKHOUSE_USER:$CLICKHOUSE_PASSWORD" --data-binary @-
查询公共 Parquet 文件是开始使用数据的好方法。我们建议你不要对较大的查询或将要重复运行的查询这样做。
示例:
docker run --rm -it clickhouse/clickhouse-server clickhouse local --query="
SELECT
count(*), meta_consensus_implementation
FROM url('https://data.ethpandaops.io/xatu/mainnet/databases/default/beacon_api_eth_v1_events_block/2024/3/20.parquet', 'Parquet')
GROUP BY meta_consensus_implementation
FORMAT Pretty
"
docker run --rm -it clickhouse/clickhouse-server clickhouse local --query="
SELECT
count(*),
extra_data_string
FROM url('https://data.ethpandaops.io/xatu/mainnet/databases/default/canonical_execution_block/1000/{20000..20010}000.parquet', 'Parquet')
WHERE
block_number BETWEEN 20000000 AND 20010000
GROUP BY extra_data_string
ORDER BY count(*) DESC
LIMIT 5
FORMAT Pretty
"
一旦你的 Clickhouse 服务器设置完成并导入了数据,你可以查询数据。
显示 2024 年 3 月 20 日在主网 01:20 到 01:30 之间由 nimbus 哨兵发送的所有区块事件
docker run --rm -it --net host -e CLICKHOUSE_USER=$CLICKHOUSE_USER -e CLICKHOUSE_PASSWORD=$CLICKHOUSE_PASSWORD -e CLICKHOUSE_HOST=$CLICKHOUSE_HOST clickhouse/clickhouse-server clickhouse client --query="""
SELECT
*
FROM beacon_api_eth_v1_events_block
WHERE
meta_network_name = 'mainnet'
AND slot_start_date_time BETWEEN '2024-03-20 01:20:00' AND '2024-03-20 01:30:00' -- 强烈建议按分区键(slot_start_date_time)过滤以提高查询性能
AND meta_consensus_implementation = 'nimbus'
FORMAT Pretty
"""
显示 2024 年 3 月 20 日到 27 日每天的第 90、50、05 百分位和最小到达时间
docker run --rm -it --net host -e CLICKHOUSE_USER=$CLICKHOUSE_USER -e CLICKHOUSE_PASSWORD=$CLICKHOUSE_PASSWORD -e CLICKHOUSE_HOST=$CLICKHOUSE_HOST clickhouse/clickhouse-server clickhouse client --query="""
SELECT
toStartOfDay(slot_start_date_time) AS day,
round(MIN(propagation_slot_start_diff)) AS min_ms,
round(quantile(0.05)(propagation_slot_start_diff)) AS p05_ms,
round(quantile(0.50)(propagation_slot_start_diff)) AS p50_ms,
round(quantile(0.90)(propagation_slot_start_diff)) AS p90_ms
FROM beacon_api_eth_v1_events_block
WHERE
slot_start_date_time BETWEEN '2024-03-20' AND '2024-03-27' -- 强烈建议按分区键(slot_start_date_time)过滤以提高查询性能
GROUP BY day
ORDER BY day AS
FORMAT Pretty
"""
显示 2024 年 3 月 20 日到 27 日每个哨兵看到区块的次数
docker run --rm -it --net host -e CLICKHOUSE_USER=$CLICKHOUSE_USER -e CLICKHOUSE_PASSWORD=$CLICKHOUSE_PASSWORD -e CLICKHOUSE_HOST=$CLICKHOUSE_HOST clickhouse/clickhouse-server clickhouse client --query="""
SELECT
meta_client_name AS client_name,
COUNT(*) AS count
FROM beacon_api_eth_v1_events_block
WHERE
slot_start_date_time BETWEEN '2024-03-20' AND '2024-03-27' -- 强烈建议按分区键(slot_start_date_time)过滤以提高查询性能
GROUP BY client_name
FORMAT Pretty
"""
显示 20000000 到 20010000 之间的前 5 个区块构建者的区块数量
docker run --rm -it --net host -e CLICKHOUSE_USER=$CLICKHOUSE_USER -e CLICKHOUSE_PASSWORD=$CLICKHOUSE_PASSWORD -e CLICKHOUSE_HOST=$CLICKHOUSE_HOST clickhouse/clickhouse-server clickhouse client --query="""
SELECT
count(*),
extra_data_string
FROM canonical_execution_block
WHERE
block_number BETWEEN 20000000 AND 20010000
GROUP BY extra_data_string
ORDER BY count(*) DESC
LIMIT 5
FORMAT Pretty
"""
在 examples/parquet 和 examples/clickhouse 目录中有一些关于 Parquet 和 Clickhouse 以及 SQLAlchemy 的示例。
我们很高兴地宣布,我们正在向以太坊社区开放 Xatu 数据收集管道!这一举措使社区成员能够为 Xatu 数据集贡献有价值的数据。
随着关于最大 blob 数量潜在增加的讨论持续进行,我们希望能阐明以太坊最关键参与者——家庭质押者的观点。
总结:
数据通过运行 Beacon 节点和 xatu sentry
边车收集。然后将数据发送到我们运行的管道,进一步匿名化和编辑数据。
graph TD
A1[家庭质押者 1] --> B1[Beacon 节点]
A2[你!] --> B2[Beacon 节点]
A3[家庭质押者 3] --> B3[Beacon 节点]
B1 --> X1[Xatu Sentry]
B2 --> X2[Xatu Sentry]
B3 --> X3[Xatu Sentry]
C[EthPandaOps]
C --> D[数据管道]
D --> E[公共 Parquet 文件]
X1 --> C
X2 --> C
X3 --> C
subgraph "数据收集"
A1
A2
A3
B1
B2
B3
X1
X2
X3
end
subgraph " "
C
D
end
subgraph " "
E
end
linkStyle 0 stroke:#f66,stroke-width:2px;
linkStyle 1 stroke:#f66,stroke-width:2px;
linkStyle 2 stroke:#f66,stroke-width:2px;
linkStyle 3 stroke:#f66,stroke-width:2px;
linkStyle 4 stroke:#f66,stroke-width:2px;
linkStyle 5 stroke:#f66,stroke-width:2px;
linkStyle 6 stroke:#f66,stroke-width:2px;
linkStyle 7 stroke:#f66,stroke-width:2px;
linkStyle 8 stroke:#f66,stroke-width:2px;
linkStyle 9 stroke:#f66,stroke-width:2px;
linkStyle 10 stroke:#f66,stroke-width:2px;
将收集以下事件:
<details> <summary>示例负载</summary>
data:
block: "0x43d85cfa70181f60971dbc59d60c0e82e2ff8aea995bc942dc9c27bb16a055ca"
current_duty_dependent_root: "0xc59a164bf477f138363db57e34f5b0e561c8bb1d30a0526f195b5575b2137513"
previous_duty_dependent_root: "0xbdbad239bcde3aa281edb7067a86ddba41f7f0a2e55b7ca61d628e57b6f1695f"
slot: "10098904"
state: "0xbcf7bbd9f5da8b88d09e3876834e93945edd98a258091339caedad2ec6764576"
event:
date_time: "2024-10-04T03:01:13.245589039Z"
id: "b6b13f23-6412-4e74-aa62-8639fc2fa04e"
name: "BEACON_API_ETH_V1_EVENTS_HEAD_V2"
additional_data:
epoch:
number: "315590"
start_date_time: "2024-10-04T02:56:23Z"
propagation:
slot_start_diff: "2245"
slot:
start_date_time: "2024-10-04T03:01:11Z"
</details>
beacon_api_eth_v1_events_block
<details> <summary>示例负载</summary>
data:
block: "0x7bb7f9e703896d516a0ee56d273dbe8fd71fd994a2f36cc489b8e1b825d74d44"
slot: "10098966"
event:
date_time: "2024-10-04T03:13:37.703055591Z"
id: "58ccd540-81c2-44ce-820d-e73b5af0bea7"
name: "BEACON_API_ETH_V1_EVENTS_BLOCK_V2"
additional_data:
epoch:
number: "315592"
start_date_time: "2024-10-04T03:09:11Z"
propagation:
slot_start_diff: "2703"
slot:
number: "10098966"
start_date_time: "2024-10-04T03:13:35Z"
</details>
beacon_api_eth_v1_events_blob_sidecar
<details> <summary>示例负载</summary>
data:
block_root: '0xc78adbc7ce7ab828bed85fedc6429989b4f4451d41aac8dc0c40b9f57839a3d7'
index: '0'
kzg_commitment: '0xa8de65da8d07703217d6879c75165a36973ff3ddace933907e7d400662b90e575812bb1302bfd4bb24691a550a0dc02a'
slot: '10099003'
versioned_hash: '0x0196e5bc26c289ff58a37c75f72b6824507d67ab0e43577495d1ad7b74716601'
event:
date_time: '2024-10-04T03:21:00.752889196Z'
id: adbf1ecb-4e52-404f-b3ba-6f83f6ffc4db
name: BEACON_API_ETH_V1_EVENTS_BLOB_SIDECAR
additional_data:
epoch:
number: '315593'
start_date_time: '2024-10-04T03:15:35Z'
propagation:
slot_start_diff: '1752'
slot:
number: '10099003'
start_date_time: '2024-10-04T03:20:59Z'
</details>
beacon_api_eth_v1_events_chain_reorg
<details> <summary>示例负载</summary>
data:
depth: '3'
epoch: '83615'
new_head_block: '0x4a99bc2dbb2c5640cf0798102588dcbc3c02d15989c7652bbcf4647e24a14881'
new_head_state: '0x3e5af57c5c3bd8fa394c21edd8ac5b07378ef1e143ed18a9ff695090c970b23f'
old_head_block: '0x28e85b3e33721ad20b86c671f35686c8c91b5a29c6fd0cb41698872048d1b8ed'
old_head_state: '0x00f61794f1da3817bb8ae4591bbc0bc9cc0c72f4a422d5fdda5cd584ee147cd3'
slot: '2675702'
event:
date_time: '2024-10-04T03:00:36.161478913Z'
id: b0db9607-a862-4dd2-b7e6-4faf77e3a949
name: BEACON_API_ETH_V1_EVENTS_CHAIN_REORG_V2
additional_data:
epoch:
number: '83615'
start_date_time: '2024-10-04T02:56:00Z'
propagation:
slot_start_diff: '12161'
slot:
start_date_time: '2024-10-04T03:00:24Z'
</details>
beacon_api_eth_v1_events_finalized_checkpoint
<details> <summary>示例负载</summary>
data:
block: '0x418645de30f82a71b7470dfc9831602f750a3b8e14e507e112791d53b3d3842e'
epoch: '188220'
state: '0x195dcdf004596c7afd999c39ff6f718f5bb631f3c8838b445fe87ea8f4f6de52'
event:
date_time: '2024-10-04T03:00:47.506914227Z'
id: 57e595a9-c79a-458c-be83-0d6dd58ee81c
name: BEACON_API_ETH_V1_EVENTS_FINALIZED_CHECKPOINT_V2
additional_data:
epoch:
number: '188220'
start_date_time: '2024-10-04T02:48:00Z'
</details>
每个事件都会发送以下附加元数据:
clock_drift: '2' # 主机机器的时钟漂移
ethereum:
consensus:
implementation: lighthouse # 信标节点实现
version: Lighthouse/v5.3.0-d6ba8c3/x86_64-linux # 信标节点版本
network:
id: '11155111' # 以太坊网络 ID
name: sepolia # 以太坊网络名称
id: 98df53c0-3de0-477c-a7c9-4ea9b17981c3 # 会话 ID。重启时重置
implementation: Xatu
module_name: SENTRY
name: b538bfd92sdv3 # 哨兵的名称。信标节点的节点 ID 的哈希。
os: linux # 运行哨兵的主机操作系统
version: v0.0.202-3645eb8 # Xatu 版本
一旦我们接收到事件,我们会进行一些额外处理以获取服务器元数据。添加到事件的数据是可根据用户配置的,允许用户仅披露他们感到舒适的数据。地理位置数据对于理解数据如何在网络中传播非常有用,但不是必需的。
server:
client:
geo:
# 可选字段
## 有关 ISP 的数据
autonomous_system_number: 24940 # 客户端的自治系统编号
autonomous_system_organization: "Hetzner Online GmbH" # 与自治系统相关的组织
## 有关位置的数据
city: "Helsinki" # 客户端所在城市
continent_code: "EU" # 客户端位置的大陆代码
country: "Finland" # 客户端所在国家
country_code: "FI" # 客户端位置的国家代码
### 始终被编辑
latitude: REDACTED # 客户端位置的纬度坐标
longitude: REDACTED # 客户端位置的经度坐标
group: "asn-city" # 客户端所属组
user: "simplefrog47" # 发送事件的伪用户名
# 始终被编辑
ip: "REDACTED" # 发送事件的客户端的 IP 地址
event:
received_date_time: "2024-10-04T03:00:48.533351629Z" # 接收事件的时间戳
注意:
client.name
字段使用只有 EthPandaOps 团队可以访问的盐重新哈希。这意味着客户端的原始名称不会被披露,并且无法将事件映射回特定的节点 ID。client.ip
、client.geo.latitude
和 client.geo.longitude
字段始终被编辑。隐私是我们的首要任务。我们创建了隐私组,以允许用户仅披露他们感到舒适的数据。
<details> <summary>无额外的 Geo/ASN 数据</summary>
autonomous_system_number: REDACTED # REDACTED
autonomous_system_organization: REDACTED # REDACTED
city: "REDACTED" # REDACTED
country: "REDACTED" # REDACTED
country_code: "REDACTED" # REDACTED
continent_code: "REDACTED"
</details>
<details> <summary>共享地理位置到城市级别</summary>
autonomous_system_number: 24940
autonomous_system_organization: "Hetzner Online GmbH"
city: "赫尔辛基"
continent_code: "EU"
country: "芬兰"
country_code: "FI"
</details>
<details> <summary>共享地理位置到国家级别</summary>
autonomous_system_number: 24940
autonomous_system_organization: "Hetzner Online GmbH"
continent_code: "EU"
country: "芬兰"
country_code: "FI"
city: "REDACTED" # REDACTED
</details>
<details> <summary>共享地理位置到大陆级别</summary>
autonomous_system_number: 24940
autonomous_system_organization: "Hetzner Online GmbH"
continent_code: "EU"
city: "REDACTED" # REDACTED
country: "REDACTED" # REDACTED
country_code: "REDACTED" # REDACTED
</details>
<details> <summary>不共享地理位置数据</summary>
autonomous_system_number: 24940
autonomous_system_organization: "Hetzner Online GmbH"
continent_code: "EU"
city: "REDACTED" # REDACTED
country: "REDACTED" # REDACTED
country_code: "REDACTED" # REDACTED
</details>
<details> <summary>不带 ASN 共享地理位置到城市级别</summary>
city: "赫尔辛基"
continent_code: "EU"
country: "芬兰"
country_code: "FI"
autonomous_system_number: REDACTED # REDACTED
autonomous_system_organization: REDACTED # REDACTED
</details>
<details> <summary>不带 ASN 共享地理位置到国家级别</summary>
continent_code: "EU"
country: "芬兰"
country_code: "FI"
autonomous_system_number: REDACTED # REDACTED
autonomous_system_organization: REDACTED # REDACTED
city: "REDACTED" # REDACTED
</details>
<details> <summary>不带 ASN 共享地理位置到大陆级别</summary>
continent_code: "EU"
autonomous_system_number: REDACTED # REDACTED
autonomous_system_organization: REDACTED # REDACTED
city: "REDACTED" # REDACTED
country: "REDACTED" # REDACTED
country_code: "REDACTED" # REDACTED
</details>
目前,贡献 Xatu 数据集仅限于已知社区成员。我们计划在未来向公众开放,但现在我们希望确保数据保持高质量,并与家庭质押者社区相关(换句话说:我们需要确保我们的管道能够处理增加的负载 😂)
如果你想为 Xatu 数据集做贡献,请 在此申请访问
一旦你获得访问权限,你将收到有关如何运行 xatu sentry
以及如何开始为数据集做贡献的说明。
如果你已经在运行一个信标节点,运行 xatu sentry
就像在你的节点上运行一个 docker 容器一样简单。例如:
docker run -d \
--name xatu-sentry \
--restart unless-stopped \
--cpus="0.5" \
--memory="1g" \
--read-only \
ethpandaops/xatu:latest sentry \
--preset ethpandaops \
--beacon-node-url=http://localhost:5052 \
--output-authorization=REDACTED
你可以从我们的 GitHub Releases 页面下载二进制文件或使用 安装脚本。
一旦你拥有 xatu
二进制文件,你可以使用以下命令运行它:
xatu sentry \
--preset ethpandaops \
--beacon-node-url=http://localhost:5052 \
--output-authorization=REDACTED
Sam - @samcmau Andrew - @savid
> [!IMPORTANT]
加入 Xatu 数据 Telegram 群组以获取最新信息:
https://t[dot]me/+JanoQFu_nO8yNzQ1
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!