轻松掌握将以太坊区块交易导入 csv 文件

1. 直接方式:获取以太坊交易 csv 文件

网站下载。下载地址 https://xblock.pro/#/

在这里插入图片描述

2. 定制化方式:通过 web3 将交易信息导入 csv 文件

  • 环境准备:

  1. web3 安装

pip install web3.py

  1. geth 下载安装

windows 环境

  1. 官网下载。下载地址: geth.ethereum.org/downloads/
  2. 软件安装。一直点击next,修改自己的安装路径后点击 install,geth完成安装
  3. 环境变量配置。右键 <我的电脑>,点击 <属性>,点击 <高级系统设置>,点击 <环境变量>, <系统变量 Path>,点击 <编辑>,点击 <新建>,输入 <刚才软件安装的路径>
  4. 安装成功检测。<windows + r> 输入 cmd 进入命令管理器,输入 geth version

在这里插入图片描述
在这里插入图片描述

ubuntu 安装

  1. sudo add-apt-repository -y ppa:ethereum/ethereum
  2. sudo apt-get update
  3. sudo apt-get install ethereum
  • 区块信息下载 (.blockchain 文件)

  1. 比如下载前 900 万区块的交易:http://elc.yonsei.ac.kr/usenix-atc21/0-9M.blockchain
  2. 如根据需要下载,比如前 100 万,将 0-9 改为 0-1;下载 100-200 万,0-9 改为 1-2,以此类推
  • 区块信息导入本地

  1. 比如一次性导入前 900 万区块交易,运行命令:geth --datadir dir_name(文件夹名字作为本地交易存放位置)import 0-9M.blockchain
  2. 注意事项:硬盘感觉要有1T以上空间,同时要做好数据同步过程要一两天的心理准备。
    要是只需要前100万个块,就更简单了,把上边命令中的 0-9M 改成 0-1M 就可以,如需导入1-2M,需先导入 0-1M
  • 本地运行以太坊

运行命令:geth --http --http.api web3,eth,net,db,personal --http.addr 0.0.0.0 --http.port 8545 --datadir dir_name(文件夹名字作为本地交易存放位置)

  • python 代码将交易信息写入 csv 文件

假设我们只记录交易以下字段:

在这里插入图片描述

python代码如下:

from web3 import Web3, HTTPProvider, IPCProvider, WebsocketProvider

import csv

# 连接本地运行的以太坊
web3 = Web3(Web3.HTTPProvider('http://localhost:8545'))

# 导入 200万 到 300万 区块间的交易
fileName = "2000000to2999999_BlockTransaction.csv"

# 设置 csv 文件属性头内容
data = {'blockHash': None, 'blockNumber': None, 'from': None, 'gas': None, 'gasPrice': None, 'hash': None, 'input': None, 'nonce': None, 'to': None, 'transactionIndex': None, 'value': None}

# 写入 csv 文件属性头内容
with open(fileName, 'w', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=data.keys())
    writer.writeheader()

# 交易数量
count = 0

with open(fileName, 'a', newline='') as csvfile:
    for num in range(2000000, 3000000):
        # 获取有交易详细记录的区块信息
        blockInfo = web3.eth.get_block(num, True)
        # 跳过不存在交易的区块
        if(not bool(blockInfo['transactions'])):
            continue
        else:
            for transactionList in blockInfo['transactions']:
                # 记录每一条交易信息
                transactionRow = {}
                for key, value in dict(transactionList).items():
                    # 可自主选择不记录的一些交易字段
                    if key == 'type' or key == 'v' or key == 'r' or key == 's':
                        continue
                    # 将字段信息的二进制表示为十六进制
                    elif key == 'blockHash' or key == 'hash' or key == 'input':
                        transactionRow[key] = value.hex()
                    else:
                        transactionRow[key] = value
                writer = csv.DictWriter(csvfile, fieldnames=transactionRow.keys())
                writer.writerow(transactionRow)
                print("当前区块:", num)
                count = count + 1

print("交易个数为:", count)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值