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相关推荐

  1. ETL学习之四:SQL Server Integration Services入门

    ETL学习之四:SQL Server Integration Services入门 SSIS就是微软在SQL SERVER2005上对DTS的升级,不得不说,微软在BI上是花了很大功夫的,包括提供了S ...

  2. ETL学习心得:探求数据仓库关键环节ETL的本质【转】

    ETL学习心得:探求数据仓库关键环节ETL的本质 做数据仓库系统,ETL是关键的一环.说大了,ETL是数据整合解决方案,说小了,就是倒数据的工具.回忆 一下工作这么些年来,处理数据迁移.转换的工作倒还 ...

  3. ETL学习总结(2)——ETL数据集成工具之kettle、sqoop、datax、streamSets 比较

    前言 对于数据集成类应用,通常会采用ETL工具辅助完成.ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).交互转换(transfo ...

  4. ETL学习总结(1)——ETL 十大功能特性详解

    前言 Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行.说白了就是,很有必要去理解一般ETL工具必备的特性和功能,这样才更好的掌握Kettle的使 ...

  5. ETL学习-前期准备

    一.ETL (一).ETL是什么 ETL,Extract-Transform-Load的缩写,中文名为数据抽取.转换和加载.ETL 代表提取.转换和加载,是数据工程师用从不同来源提取数据.将数据转换为 ...

  6. ETL学习之五:创建新的 Integration Services 项目

    在 Microsoft SQL Server 2005 Integration Services (SSIS) 中创建包的第一步就是创建一个 Integration Services 项目.此项目包含 ...

  7. 【从零开始的大数据学习】Flink官方教程学习笔记(一)

    Flink官方教程学习笔记 学习资源 基础Scala语法 Scala数据结构专题 声明变量 代码块 函数(function) 方法(methods) Traits (接口) class(类) tupl ...

  8. 视频教程-Informatica PowerCenter 10.2 权威指南中文版-ETL

    Informatica PowerCenter 10.2 权威指南中文版 2018 -- 今天 派客动力 CTO 2007-2018 Informatica 中国区技术总监 <Informati ...

  9. 以太坊开发者工具的最新清单

    以太坊开发者工具的最新终极清单,用于在以太坊上开发应用程序的可用工具,组件,框架和平台的指南. 对于任何开发者,无论你是一个睁大眼睛的Web3新手还是一个头发灰白的OG加密无政府主义技术霸主,Gith ...

  10. 100个数据分析常用指标和术语

    大家好,我是辰哥~ 有个朋友是金融行业产品经理,最近在对已有的站内用户做分层与标签分类,需要对用户进行聚类分析.一般从事数据分析行业的朋友对这类词并不陌生,但是像市场运营人员就会把这类些名词概念搞混, ...

最新文章

  1. 没有与制定类型匹配的重载函数 cv::Vec<_Tp 实例
  2. Drools 6.2.0.Final发布
  3. buffsize 缓冲区的大小多少合适_对于Redis性能指标监控!你了解多少?
  4. Javascript window.fetch API
  5. mysql主从复制实施流程_MySQL主从复制认识及实施操作
  6. 【kafka】kafka 执行 多个脚本 kafka-run-class.sh 导致 server 节点 时不时挂掉
  7. ToString(C2)转人民币金额时的相关问题
  8. Java程序低手之关于泛型(Generic)
  9. paip.为什么使用多线程的原因.
  10. 【信号检测】基于matlab双稳随机共振微弱信号检测【含Matlab源码 1701期】
  11. PS自学教程之色彩三原色RGB
  12. Apache运维中常用功能配置笔记梳理
  13. Vue——如何获取动态图片地址
  14. liteos源码中的哨兵函数思想
  15. C语言鼠标操作方法及源码
  16. if条件语句基本语法
  17. C++无名命名空间详解
  18. VB控件实现IObjectSafety安全接口(zt)
  19. 程序员童鞋们,眼睛疲劳了有没有,缓解下有没有,一起来做吧
  20. 【Linux】IFS是个什么鬼

热门文章

  1. 张瑞驰作文分享《蚕的自述》
  2. 11套宝藏特效视频素材大约263GB 免费分享
  3. html js页面加载前执行,Javascript代码在页面加载时的执行顺序介绍
  4. Intel 14nm工艺生产线即将上马
  5. 计算机网络相关术语概念名词汇总总结集合——摘自《计算机网络--自顶向下》第四章
  6. python PIL进行图像的crop,resize和save
  7. GL 日记帐分录的种类(中英文对照)
  8. Pytorch 之修改Tensor部分值
  9. @Transactional是什么意思
  10. 经济危机对生活搜索有负面影响?