# Covalent, the indexing of Blockchain

By [CCONQUEROR](https://paragraph.com/@cconqueror) · 2021-10-29

---

最近花时间读完了Covalent的白皮书，来分享下项目的设计细节，进度，还有我的看法。

项目内容
----

Covalent提供的服务，可以让用户（比如dapp开发者），很简单的使用SQL一样的语法检索所有的链上数据。举例子的话，比如搜索出所有Eth链上持有XX nft的地址，再按持有时间排个序等等。

这种检索，现在想要做到，只能自己写代码，一个区块一个区块的扒拉，然后自己设计数据库，自己存，自己索引。不仅对用户来说门槛很高，花费也很高（运行代码+aws 数据库都是要花钱的）。但是有了Covalent的服务之后，只需要写常规的RPC，或者Json的API，然后按照API 访问频率收费就可以了，搜索链上数据变得简单且方便。

代币模型
----

这个项目是发币了的$CQT。主要是个功能性代币。具体使用场景如下：

1.  当做奖励。 不同的结点有不同的功能，当不同的结点正确的做了该做的事，那么CQT就会用来当做奖励。
    
    1.  爬虫结点(Block Specimen Producer Node),也就是负责把各个链上数据转换成固定格式数据的结点，正确转换之后，可以得到奖励。错误的话，结点内部stake的所有$CQT会被验证者(Validator)，收走。作为对Validator的奖励。
        
    2.  索引结点(Indexer Node)， 负责给爬虫结点转换的数据，增加索引。正确索引之后，可以得到奖励。错误的话内部stake的$CQT会被收走。
        
    3.  存储结点(Storage Node)， 负责存储索引好的数据，响应外界的搜索要求。正确回复外界搜索之后，会得到奖励。
        
    4.  性能差的结点，比如availability低的，会被惩罚。但是性能好的，会被奖励。
        
2.  买数据。 一些特殊的数据的买卖，可以使用$CQT交易。
    
3.  用来DAO的管理。 可以用来投票，比如是否增加新的功能之类的。$CQT相关的投票只涉及功能方面，不涉及股权，团队分红等方面。
    

注意，作为普通用户，使用CQT的索引数据，比如搜索多少地址持有XXX NFT，不是花费$CQT，而是稳定币。这样是为了签订服务合同的时候，避开$CQT价格波动的影响。

整体架构
----

![Overview of Covalent](https://storage.googleapis.com/papyrus_images/d3ae5b6465484f6fb5476c98a5f7f8e401383336aa2a9b7587e3643dfdcf61dd.png)

Overview of Covalent

上图中，蓝色为Covalent网络里不同的角色，黄色是数据转换过程。从区块链数据，变为用户可搜索的数据，整个网络里需要4种结点。有两个特殊的结点角色画不下了，它们是：

1.  验证结点(Validator) 每一步新数据的产生，都可以被质疑，依据Validator的验证结果，要么结点会被关闭(做了坏数据)，所有stake的$CQT被没收; 要么结点安然无恙，质疑者的$CQT被没收。
    
2.  路由结点(Directory Service Node) 每个存储结点存的内容并不一样，比如有的可以只存BSC的数据，有的只存ETH的数据，那么用户的搜索需要被引导到哪个存储结点，就是路由结点的功能。
    

当前进度
----

根据白皮书，最终的设想是完全分布式。也就是团队只负责开发运行各种结点需要的SDK，但是结点本身由各个不同身份的社区成员运行。但是在上线的时候，大部分的结点目前为止还是由团队运行的。可以理解为现在还是一个中心化的网络。

当前支持的链：

[https://www.covalenthq.com/docs/api/#tag--Class-B](https://www.covalenthq.com/docs/api/#tag--Class-B)

设计细节
----

1.  想成为任意一种结点，几乎都需要质押一部分$CQT。
    
2.  爬虫结点
    
    1.  想成为爬虫结点，需要跑一个SDK(extract and norm worker)。
        
    2.  爬虫结点转换完数据之后，会提交一个工作证明给CQT 主网。第一个被接受的结点，会被奖励$CQT。此过程类似于挖矿。
        
    3.  一般一个爬虫结点同时会兼任验证者的职能。因此整个网络里验证者至少和原始数据生产者数量一致。
        
3.  索引结点。
    
    1.  需要跑一个SDK (stateless tracker).
        
    2.  产生的新数据结构被称为trace specimen.产生的结果会存到存储结点，并且发一个结果的hash值给主网，第一个被接受的结点，会被奖励$CQT, 依旧类似于挖矿。
        
    3.  索引结点最好自己同时也是存储结点，不然把结果存储到另一个结点的花费会比较高。
        
4.  存储结点。
    
    1.  主要处理内部的request，对于每一个request，存储结点都可以收费。内部的request主要是索引结点发起的，目的是找到最经济实惠的存储地址。
        
    2.  他们需要告诉路由结点，自己的费用，自己存什么样的数据。
        
5.  搜索结点。
    
    1.  会需要跑一个Covalent ETL worker，预先从搜索结点加载一些数据，放到本地，以便拥有更快的响应速度。
        
    2.  (QQ??) query node收谁的钱？？用户付钱不是付的stable coin嘛？？
        

质疑点
---

1.  现在项目的近况如何了？每种node都有多少个？
    
2.  由于用户不会直接使用$CQT支付搜索费用, 那么什么情况下$CQT价格会升高？ (Those making requests for data (as customers) will however **never interact with the CQT economy.** Instead, their payments will be made in **standard dollar figures and charged in stablecoins**. This makes it possible for standard agreements and pre-set pricing to be made when a company chooses to use the Covalent Network for running its operations. It also protects them from speculating on the underlying currency.)
    

个人思考
----

1.  项目设计的不错。不像是圈钱就要跑的。
    
2.  作为一个数据库，最重要的性能就是两个，Availability(不能宕机，用户使用的时候最好永远在线，像Google一样) and Durability(数据不能丢)。这两个性能在这个系统里，极大取决于负责读取的结点的个数，也就是存储结点，搜索结点，和路由结点。
    
3.  还没太想明白CQT用户增多和$CQT价格上涨之间的关系。感觉其实可以没什么关系？ 越多的用户 -→ 越多的搜索需求 -→ 越多的stable coin和美元订单 -→团队更多钱。但是不知道团队更多钱和$CQT价格上涨有啥关系。感觉可以毫无关系…

---

*Originally published on [CCONQUEROR](https://paragraph.com/@cconqueror/covalent-the-indexing-of-blockchain)*
