前言
目的是提取以太坊的区块产生时间形成数据集,初步的思路有两种:
- 爬取以太坊区块浏览器中的时间数据,然后格式化形成数据集输出
- 同步以太坊的所有区块(头),利用以太坊本身提供的接口提取每个区块的时间戳信息,然后将时间戳转换为真实的日期格式形成数据集输出,时间戳转换在线工具
查询资料过程中,了解到谷歌已提供以太坊的区块信息数据集1。虽然数据集本身没有时间信息,但可以导出时间戳进行转换,了解到谷歌使用的工具是ethereum-etl,故最终的解决方案是:使用ethereum-etl导出时间戳,编写Python程序转换时间戳并导出数据集。
区块时间戳信息导出
系统环境为Ubuntu18.04,已安装python环境。安装Ethereum ETL:
| |
安装依赖模块
| |
导出区块信息,导出速度和国家有关,国内较慢。
| |
所有的参数使用可以通过-h参数查看,更多信息详见ethereum-etl。
| |
导出的blocks.csv数据集格式如下
| Column | Type |
|---|---|
| number | bigint |
| hash | hex_string |
| parent_hash | hex_string |
| nonce | hex_string |
| sha3_uncles | hex_string |
| logs_bloom | hex_string |
| transactions_root | hex_string |
| state_root | hex_string |
| receipts_root | hex_string |
| miner | address |
| difficulty | numeric |
| total_difficulty | numeric |
| size | bigint |
| extra_data | hex_string |
| gas_limit | bigint |
| gas_used | bigint |
| timestamp | bigint |
| transaction_count | bigint |
打开blocks.csv文件,删除无关项,保留number和timestamp两项。
时间戳转换及数据集生成
利用csv模块进行数据集逐行读取,利用time模块进行时间戳转换,利用numpy模块进行数据集重新写入,代码如下:
| |
生成的数据集格式如下,第一列为区块号,第二列为时间戳,第三列为转换后的时间信息,以逗号分隔,共20万条数据。在第一行手动添加表头。
注:此时的以太坊主链总区块数在750万个左右。
| |
也可以直接利用谷歌 BigQuery 获取和分析以太坊数据,见使用谷歌 BigQuery 分析以太坊数据
参考文献
How to interact with the Ethereum blockchain and create a database with Python and SQL
How do you work with Date and time on Ethereum platform
Google Cloud-Ethereum in BigQuery
Kaggle-Beyond Queries: Exploring the BigQuery API
Kaggle-Visualizing average Ether costs over time