导言:DeepWiki 提供了一个革命性的Code2Doc工具,扫清了理解中大型项目的一大障碍。原来接触此类项目,一般依赖项目现有的、人为维护的文档(95%的项目在这块做的比较一般),然后自行梳理出一个大概框架,基于此框架逐步阅读核心代码,最后从核心代码转移到边缘代码。DeepWiki横空出世后,补足了人为维护的文档不全面、不系统、不更新的短板
币安Alpha吸引了无数流量,币安Alpha支持了诸多公链,其中又以EVM兼容链最多,尤其是BNB链,Alpha中最正统的公链。为了构建量化基础数据,高效的扫链必不可少,本文将基于DeepWiki,对DefiLlama出品的EVM Indexer项目进行抽丝剥茧,逐步探究如下内容:
DeepWiki的内容由几块组成,分别是:
DeepWiki贴心的将内容纲要分成了如下几部分:
从数据角度来看,整个系统由三个主要模块组成,其共同作用,提供区块链数据索引功能:
从代码模块来看,分成两个主要模块和若干个模块:
从数据流角度来看,从原始数据到解析后的数据分成了多阶段:
系统划分成了4个数据表,从上至下分别是:
系统核心组件主要有索引器、解析器和ABI读取器三块,上面已经做过简单介绍,接下来详细介绍各部分的功能和逻辑
首先是索引器,索引器负责从RPC节点读取链上原始数据:
接下来介绍解析器,解析器负责进一步处理索引器保存的原始数据,包含三个不同用途的解析器:
最后介绍ABI获取器,其负责获取并处理智能合约的ABI:
DeepWiki提供了一个数据流图,展示了整个系统的数据流向:
系统支持两种安装方式:
关于配置信息,DeepWiki贴心的将环境变量分成了必选和可选两大类:
链的配置结构包含诸多属性:
配置结构体
不支持批量获取receipt的链如下,该特性通过supports_blocks_receipts进行配置,如果为false,将会逐一获取交易receipt,相对支持批量的链,索引效率略低一点:
链的配置在系统中广泛,get_chain方法用于获取链配置信息结构,各个主要组件均用到此方法:
模型类型 | 描述 |
DatabaseBlock | Block header information including number, hash, and timestamp |
DatabaseTransaction | Transaction details such as hash, from/to addresses, value, and input data |
DatabaseReceipt | Transaction execution results including status, gas used, and contract address |
DatabaseLog | Event logs emitted during transaction execution |
DatabaseContract | Information about newly created contracts |
DatabaseChainIndexedState | Metadata about indexing progress |