ethereum-etl学习2
ethereum-etl学习2
> ethereumetl export_token_transfers --start-block 0 --end-block 500000 \
--provider-uri file://$HOME/Library/Ethereum/geth.ipc --output token_transfers.csv
function export_token_transfers
def export_token_transfers(start_block, end_block, batch_size, output, max_workers, provider_uri, tokens):"""Exports ERC20/ERC721 transfers."""job = ExportTokenTransfersJob(start_block=start_block,end_block=end_block,batch_size=batch_size,web3=ThreadLocalProxy(lambda: build_web3(get_provider_from_uri(provider_uri))),item_exporter=token_transfers_item_exporter(output),max_workers=max_workers,tokens=tokens)job.run()
功能
获取ERC20/ERC721的交易信息(协议内容可以参照https://github.com/ethereum/EIPs/tree/master/EIPS)
主体
1.构建ExportTokenTransfersJob对象
2.调用run方法
class ExportTokenTransfersJob
class ExportTokenTransfersJob(BaseJob):
构造(部分)
web3 获取web3的连接对象
batch_work_executor 构造批处理的执行者
item_exporter 设置挖掘匹配的字段,以及存储文件
receipt_log_mapper 实现交易的log对象和json的转换解析
transaction_mapper 实现transaction对象和json的转换解析
token_transfer_extractor 一个EthTokenTransferExtractor对象,实现最后获取transaction的log解码为交易内容
run()方法调用
def _start(self):self.item_exporter.open()
准备存储block和transaction的文件
def _export(self):self.batch_work_executor.execute(range(self.start_block, self.end_block + 1),self._export_batch,total_items=self.end_block - self.start_block + 1)
调用batch_work_executor的execute方法
_export_batch批次获取以太坊的块中与TRANSFER事件匹配的TOPIC–‘0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef’
def _end(self):self.batch_work_executor.shutdown()self.item_exporter.close()
释放batch_work_executor对象,以及关闭存储block和transaction信息的文件
_export_batch方法
def _export_batch(self, block_number_batch):assert len(block_number_batch) > 0# https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_getfilterlogsfilter_params = {'fromBlock': block_number_batch[0],'toBlock': block_number_batch[-1],'topics': [TRANSFER_EVENT_TOPIC]}if self.tokens is not None and len(self.tokens) > 0:filter_params['address'] = self.tokensevent_filter = self.web3.eth.filter(filter_params)events = event_filter.get_all_entries()for event in events:log = self.receipt_log_mapper.web3_dict_to_receipt_log(event)token_transfer = self.token_transfer_extractor.extract_transfer_from_log(log)if token_transfer is not None:self.item_exporter.export_item(self.token_transfer_mapper.token_transfer_to_dict(token_transfer))self.web3.eth.uninstallFilter(event_filter.filter_id)
定义筛选的条件,对获取内容进行筛选,让对于log和transfer进行转化,最后完成所有筛选事件之后注销过滤器
ethereum-etl学习2相关推荐
- ETL学习之四:SQL Server Integration Services入门
ETL学习之四:SQL Server Integration Services入门 SSIS就是微软在SQL SERVER2005上对DTS的升级,不得不说,微软在BI上是花了很大功夫的,包括提供了S ...
- ETL学习心得:探求数据仓库关键环节ETL的本质【转】
ETL学习心得:探求数据仓库关键环节ETL的本质 做数据仓库系统,ETL是关键的一环.说大了,ETL是数据整合解决方案,说小了,就是倒数据的工具.回忆 一下工作这么些年来,处理数据迁移.转换的工作倒还 ...
- ETL学习总结(2)——ETL数据集成工具之kettle、sqoop、datax、streamSets 比较
前言 对于数据集成类应用,通常会采用ETL工具辅助完成.ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).交互转换(transfo ...
- ETL学习总结(1)——ETL 十大功能特性详解
前言 Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行.说白了就是,很有必要去理解一般ETL工具必备的特性和功能,这样才更好的掌握Kettle的使 ...
- ETL学习-前期准备
一.ETL (一).ETL是什么 ETL,Extract-Transform-Load的缩写,中文名为数据抽取.转换和加载.ETL 代表提取.转换和加载,是数据工程师用从不同来源提取数据.将数据转换为 ...
- ETL学习之五:创建新的 Integration Services 项目
在 Microsoft SQL Server 2005 Integration Services (SSIS) 中创建包的第一步就是创建一个 Integration Services 项目.此项目包含 ...
- 【从零开始的大数据学习】Flink官方教程学习笔记(一)
Flink官方教程学习笔记 学习资源 基础Scala语法 Scala数据结构专题 声明变量 代码块 函数(function) 方法(methods) Traits (接口) class(类) tupl ...
- 视频教程-Informatica PowerCenter 10.2 权威指南中文版-ETL
Informatica PowerCenter 10.2 权威指南中文版 2018 -- 今天 派客动力 CTO 2007-2018 Informatica 中国区技术总监 <Informati ...
- 以太坊开发者工具的最新清单
以太坊开发者工具的最新终极清单,用于在以太坊上开发应用程序的可用工具,组件,框架和平台的指南. 对于任何开发者,无论你是一个睁大眼睛的Web3新手还是一个头发灰白的OG加密无政府主义技术霸主,Gith ...
- 100个数据分析常用指标和术语
大家好,我是辰哥~ 有个朋友是金融行业产品经理,最近在对已有的站内用户做分层与标签分类,需要对用户进行聚类分析.一般从事数据分析行业的朋友对这类词并不陌生,但是像市场运营人员就会把这类些名词概念搞混, ...
最新文章
- 没有与制定类型匹配的重载函数 cv::Vec<_Tp 实例
- Drools 6.2.0.Final发布
- buffsize 缓冲区的大小多少合适_对于Redis性能指标监控!你了解多少?
- Javascript window.fetch API
- mysql主从复制实施流程_MySQL主从复制认识及实施操作
- 【kafka】kafka 执行 多个脚本 kafka-run-class.sh 导致 server 节点 时不时挂掉
- ToString(C2)转人民币金额时的相关问题
- Java程序低手之关于泛型(Generic)
- paip.为什么使用多线程的原因.
- 【信号检测】基于matlab双稳随机共振微弱信号检测【含Matlab源码 1701期】
- PS自学教程之色彩三原色RGB
- Apache运维中常用功能配置笔记梳理
- Vue——如何获取动态图片地址
- liteos源码中的哨兵函数思想
- C语言鼠标操作方法及源码
- if条件语句基本语法
- C++无名命名空间详解
- VB控件实现IObjectSafety安全接口(zt)
- 程序员童鞋们,眼睛疲劳了有没有,缓解下有没有,一起来做吧
- 【Linux】IFS是个什么鬼