本文转载自微信公众号《区块链研究实验室》,作者连三丰。转载本文请联系区块链研究实验室公众号。在本文中,我将介绍如何从以太坊中提取链上数据并将其流式传输到QuestDB以供进一步分析和可视化。先决条件用于访问以太坊链上数据的Python3.6+DockerInfura帐户Infura是一个由Consensys提供支持的开发平台,具有免费套餐(每天10万个请求),我们可以从以太坊主网和测试网中提取数据。注册一个免费帐户并在以太坊下创建一个新项目:记下主网的HTTPS端点(格式为https://mainnet.infura.io/v3/)。使用模式设置QuestDB我们将用于流式传输以太坊数据的ETL脚本提供以下链上信息:区块合约簿日志令牌传输传输,但所有可用链上数据的模式位于ethereum-etl-postgres/模式(需要将Postgres数据类型转换为Java数据类型)。此数据将在QuestDB中编制索引,以利用其高性能时间序列数据。使用Web控制台和Postgres端点启动QuestDB:$dockerrun-p9000:9000-p8812:8812questdb/questdb导航到Web控制台,localhost:9000并为块创建一个表:createtableblocks(timestampstring,numberbigint,hashstring,parent_hashstring,noncestring,sha3_unclesstring,logs_bloomstring,transactions_rootstring,state_rootstring,receipts_rootstring,minersymbol,difficultylong,total_difficultylong,sizelong,extra_datastring,gas_limitlong,gas_usedlong,transaction_countlong);以及用于token_transfers;createtabletoken_transfers(token_addresssymbol,from_addresssymbol,to_addresssymbol,valuefloat,transaction_hashstring,log_indexlong,block_timestampstring,block_numberlong,block_hashstring);刷新表列表后,您应该会看到两个都已填充:现在我们已准备好将Ethereum数据流式传输到我们的数据库。流式传输以太坊链上数据BlockchainETL提供了一个Python脚本来从Infura中提取数据并将其流式传输到GooglePub/Sub或Postgres。现在,我们需要先安装ethereumetl[streaming]:$pip3install"ethereum-etl[streaming]"现在,我们需要指定我们的QuestDB凭据以及InfuraAPI详细信息。Postgres输出采用postgresql+pg8000://:@:/的形式,APIURL通过--provider-uri指定。我们还可以指定起始块编号(或省略从头开始下载所有以太坊数据),以及我们感兴趣的模式:$ethereumetlstream--start-block600000-eblock,token_transfer--outputpostgresql+pg8000://admin:quest@localhost:8812/qdb--provider-urihttps://mainnet.infura.io/v3/
