第二部分
作者 Brandon Ramirez 2019年10月21日
这是探讨The Graph Network设计的两部分文章的第二部分,你可以在这里阅读第一部分。
在第一篇文章中,我们概述了什么是图谱网络,从终端用户的角度来看它的外观以及它在高层次上的工作方式。
在这篇文章中,我们将深入探讨几个关键的概念,包括图谱代币如何用于索引器的质押、策展和索引器的奖励。我还将介绍Graph浏览器——一个与图谱网络交互的dApp——并描述我们的支付和验证层。
索引器质押
Graph采用了工作代币模式,索引器必须质押Graph tokens才能在查询市场上出售其服务。这有两个主要功能:
它提供了经济安全性,因为如果索引器恶意地执行其工作,质押的GRT可能被削减。一旦GRT被质押了,就只能在解冻期后撤回,这为验证和解决争议提供了充足的机会。
它提供了一个Sybil抗性机制。在一个给定的子图上使用虚假或低质量的索引器会使查找优质服务提供商速度变慢。出于这个原因,我们只希望在游戏中拥有皮肤的索引器能够被发现。
为了使上述机制正常运作,重要的是激励索引器持有与他们在网络中所做的有用工作的数量大致成比例的GRT。
一个天真的方法是尝试让每个质押的GRT都授权一个索引器在网络上执行制定数量的工作。这有两个问题:首先,它对网络可以执行的工作量设定了一个任意上限;其次,几乎不可能以可扩展的方式执行,因为它要求所有的工作都在链上集中协调。
0x的团队开创了一种更好的方法,它涉及对协议中的所有交易收取协议费,然后根据参与者的股权比例和为网络收取的费用比例,使用科布-道格拉斯生产函数将这些费用返还给参与者。
在我们的结构中,一个索引器i在一个时间段内收到的回扣池的份额为

其中 ωij 是索引器i 分配给子图 j 的质押量,Ω 是网络中质押的总量,θij 是索引器 i 为子图 j 上的回扣池产生的查询费用,Θ 是总量 协议收取的查询费用。
我建议阅读这篇论文——但对于我们的目的来说,有趣的是,在均衡状态下,理性的决策者应该在生产函数的两个投入之间做出稳定比例的支出预算。在我们的案例中,这将是租用或拥有GRT的成本以及与运行图形节点相关的运营费用,这允许索引器执行更多工作,并通过扩展为网络收取更多的查询费用。
因为我们希望所有理性的索引器做出同等的预算决策,在均衡状态下,我们应该期望索引器抵押总GRT的一部分,相当于他们为网络执行的工作的比例。
美妙之处在于,这种股权分配不需要在协议中强制执行,相反,而是由索引器根据自己的最佳经济利益做出决定后自然产生的。
委托
对于那些不希望出售他们的Graph代币,但希望将他们的代币用于保护网络的生产性用途的代币持有者,该协议引入了委托。
委托人可以将他们的GRT “借给”索引器,以换取索引器指定的查询费用和索引器奖励的份额。
除了增加代币的参与度外,委托还为规模较小、资本受限的索引商提供了机会,通过提供高质量的服务和吸引委托人,在去中心化网络中更具竞争力。
关于委托,质押协议必须做出的一个重要的选择是,由于索引器的不当行为,是否可以削减委托的质押。在The Graph中,委托的权益不会被削减,因为这会鼓励了委托人和索引器之间的信任关系,这可能会导致赢家通吃的机制并损害去中心化。
与做出这种选择的其他协议类似,The Graph将强制索引器可以接受每个单位的委托权益。这种“委托能力”可确保了索引器始终将最低数额的资金用于参与网络。
策展人信号
消费者要查询子图,首先必须对该子图进行索引——这个过程可能需要数小时甚至几天。如果索引器不得不盲目地猜测他们应该对索引哪些子图,而他们可能会获得查询费用,那么市场就不会很有效率。
策展人信号是将GRT存入子图的结合曲线中以向索引器指示该子图应被索引的过程。
索引器可以信任该信号,因为当策展人将GRT存入联合曲线时,他们为各自的子图创造了了策展份额,从而使他们有权获得该子图上收集的未来查询费用的一部分。一个理性自利的策展人应该向他们预测会给网络带来费用的子图发出GRT信号。

使用联合曲线(一种由函数决定价格的算法做市商)意味着铸造的管理份额越多,GRT和管理份额之间的汇率就越高。因此,如果成功的策展人认为未来策展费用的价值已经被正确定价,他们可以立即获利。同样,如果他们认为市场对策展股份的价值定价过高,他们应该撤回其GRT。
这种动态意味着向子图发出的信号的GRT量应提供持续而有价值的市场信号,以反映市场对子图上未来查询量的预测。
索引器奖励
我们采用的与索引器质押和策展人信号相关的另一种机制是索引者奖励。
这种奖励是通过新的代币发行支付,旨在激励索引器索引尚未具有大量查询量的子图。这有助于解决新子图的引导问题,这些子图可能没有预先存在的吸引索引者的需求。
它的工作方式是网络中的每个子图都被分配了总网络代币发行的一部分,基于子图具有的总管理信号的比例量。反过来,该金额在该子图上的所有索引器之间按比例分配,与他们所贡献的股份数量成正比。
更正式地说,索引器i的索引器膨胀奖励是

其中 ωij 是索引器i 在子图 j 上的质押量,Ωj是在子图 j 上质押的总量,ψj是为子图 j 发出信号的 GRT 量,Ψ是网络中发出信号的总量,Φ是整个网络 以 GRT 计价的索引器奖励。
以最佳方式动态设置发行率是一个正在研究的领域,可以说它会很低,很可能是个位数。
这种机制为索引器提供了额外的激励,以响应策展人提供的信号,使策展成为一项更有用的活动。
可验证的索引
鉴于协议通过索引者奖励对子图索引进行补贴,因此该机制用来补贴有用的工作非常重要。为此,我们介绍了索引证明和子图可用性指示。
这两种机制的目的是减轻可能的经济攻击,其中索引器试图收集索引器奖励而不为网络提供有用的工作。这可以采取以下形式:
- 实际上没有对你正在收集奖励的子图进行索引。
- 索引损坏的子图或其子图清单不可用。
为了缓解#1和#2的一些情况,该协议引入了索引证明。在他们目前的形式下,这些只是一个消息摘要上的签名,该签名是在对一个子图进行索引时产生的。每次子图的状态被更新时,消息摘要也会被更新。
当索引器在一个给定子图上索取索引器奖励时,他们必须提供最近的索引证明才能索取奖励。因为索引证明(PoI)是根据索引器的签名计算的,所以每个索引器必须提交一个专门特定的PoI。由于索引器在给定子图上竞争索引器奖励,因此在没有实际工作的情况下,串通起来帮助彼此生成正确的PoI并不符合索引器的最佳利益。
这些PoIs被乐观地接受,因为它们可以立即解锁奖励,但是如果发现它们的格式不正确,它们可以在以后用于削减索引器。削减的条件可能包括确定性可归因的故障,例如:
- 代表子图的错误状态的PoI
- 在无效的子图上提供PoI
在网络的第一个版本中,通过治理设置的仲裁员将决定争议,并且如果故障无法明确归因,或者是由软件错误而非恶意行为导致的情况下,则有权以 "平局 "结束争议。仲裁员的决定将基于协议规范以及概述了应如何解决争端的“仲裁章程”。
另一种故障是子图清单是否可用,由于扬声器/听众故障的等同性,这种故障是完全主观的。如果子图清单不可用,那么仲裁员就无法解决该子图的任何其他争议,并且其他索引者也无法在该子图上竞争索引者奖励。
对于这个用例,我们引入了同样通过治理来设置的子图可用性。预言机将查看几个突出的IPFS端点,如Cloudflare IPFS网关,以确定子图清单是否可用。如果子图清单不可用,则相应的子图将没有资格获得任何索引器奖励。
图形浏览器和图形名称服务
当呈现有价值的子图时,为索引器策划子图只是故事的一半。我们还想为开发者展示有价值的子图。
这是The Graph的核心价值主张之一——帮助开发者找到有用的数据来构建,并毫不费力地将来自各种底层协议和去中心化数据源的数据整合到单一的应用程序。
目前,开发人员通过导航到Graph Explorer来完成此操作。

在The Graph Network中,Graph Explorer将是一个dApp,建立在一个索引The Graph协议智能合约的子图之上(元,我知道!)——包括Graph Name Service(GNS)——一个子图的链上注册表。
子图由子图清单定义,该清单是不可改变的并存储在IPFS上。不变性对于具有确定性和可重复性的查询以进行验证和解决争议非常重要。GNS通过允许团队将名称附加到子图上来执行非常重要的角色,然后可以使用该名称指向连续的不可变子图“版本”。
这些人类可读的名称,以及存储在GNS中的其他元数据,让Graph Explorer的用户能够更好地了解子图的目的和可能的实用性,而随机的字母数字字符串和编译的WASM字节码不会。
在The Graph Network中,发现有用的子图将更加重要,因为该协议的一个提议未来更新是子图组成。不是简单地让dApps建立在多个子图上,而是允许建立全新的子图,直接引用现有子图的实体。
在许多dApp和其他子图中重复使用相同的子图是The Graph解锁的核心效率之一。将这种方法与目前世界上每个新的应用程序都部署自己的数据库和API服务器的状况相比较,这些服务器通常未被充分利用。
信号迁移
图形名称服务(GNS)也还公开了策划功能。然而,与核心协议中的不可变子图上的信令不同,GNS支持可变子图名称上的信令。当子图所有者更新版本时,在子图名称上发出信号的令牌会自动迁移到最新版本。这类似于将信号委托给命名子图的所有者(不要与委托给索引器的权益相混淆)。
这可以为策展人和子图开发人员带来好处。与仅使用自己的信号相比,子图开发人员能够吸引更多的索引器来索引他们的新子图版本。同时,保证始终在子图开发人员打算将查询流量定向到的版本上向策展人发出信号。
然而,在名称上发出信号也有风险。首先,在升级时向策展人和子图所有者收取策展税。通常,这种税只由策展人支付押金,但策展人可以控制他们何时发出信号和取消信号。虽然重复升级版本不符合子图所有者的最佳利益——如果他们被迫这样做,例如修复子图中的错误,这将在每次迁移时耗费馆长的一部分信号。
另一个风险是,子图所有者无法控制子图上的查询流量的主要来源。在这种情况下,策展人的信号自动迁移到一个新的版本,可能会错过仍被发送到子图上一个版本的查询费用的份额。
有条件的小额支付
我们的支付层旨在最大限度地减少消费者和索引器之间的信任。支付渠道是一项为可扩展、链下、信任最小化的支付而开发的技术。它涉及到双方在托管中锁定链上资金,其中资金只能用于双方在交换链下交换,直到在链上提交交易以从托管处提取资金。
传统上,支付渠道的设计强调安全地将小额支付发送到链外,而不考虑是否实际收到了所支付的服务或物品。
然而,已经有一些工作针对一些数字商品或外包计算的小额支付的院子交换,我们在此基础上进行。我们把我们的结构称为WAVE锁。WAVE代表工作、证明、验证、过期,一般设计如下:
- 工作。消费者发送带有待执行的工作描述的锁定小额支付。该工作说明充当了小额支付的锁。
- 证明。服务提供商以所要求的数字产品或服务以及工作已正确执行的签名证明作为响应。假设证明是正确的,这就可以乐观地解锁小额支付。
- 验证。使用某种验证方法对证明进行验证。证明不正确执行的工作可能会受到处罚,如罚没。证明的验证发生在渠道外。
- 过期。服务提供者必须要么收到消费者的收据确认,要么在链上提交他们的证明,以便在锁定的小额付款到期前收到他们的小额支付。
在支付渠道中使用锁并不新鲜。Lightning和Raiden的论文都讨论了使用哈希原像来解锁小额支付。这对多跳小额支付特别有用,在这种情况下,每个“跳”都用相同的哈希值锁定,并且可以通过一个值(原像)解锁,该值在输入到指定的哈希函数时会产生该哈希。

使用哈希原像解锁支付的多跳支付渠道示例:
虽然我们可以推出我们自己的支付渠道解决方案,该解决方案是专门为这个新的锁定机制而设计的,但更实用的解决方案是使用状态渠道。
我们可以把状态通道看作是支付通道,就像以太坊等智能合约区块链对比特币一样。他们可以处理简单的支付用例,但也可以编写更复杂的状态转换,同时保持与支付渠道相同的可扩展性和安全性。
然而,支付通道和状态通道的共同点是,在其最基本的形式下两个参与者之间交换价值或状态更新的一种手段,这都是提前知道的。正如上面提到的多跳小额支付,任何两个参与者之间的发送都需要能够在其他多个参与者形成一个支付通道链,将两个原始参与者连接起来。

Graph协议将支持消费者和索引器通过直接通道或通过状态通道节点的网络进行连接,如上图所示。为简单起见,启动时的默认客户端实现将使用直接通道。
除了可扩展性的优势之外,拥有可用状态通道网络的一个优势是,消费者可以使用第三方链下做市商购买GRT以换取ETH或他们选择的稳定币,及时支付查询费用。这降低了偏好持有价值不波动的资产的消费者的资产负债表风险。
查询验证
为了使WAVE锁的构建和索引器质押有意义,必须有一种有效的验证机制,能够重现索引器执行的工作,识别故障并削减有问题的索引器。
在The Graph Network的第一阶段,这是通过链上争议解决程序来处理的,通过仲裁来决定。
对于查询,我们支持两种类型的争议:
- 单一证明的争议
- 冲突的证明争议
在单一证明争议中,渔民在提交争议连同保证金,还要提交一份由索引器签署的证明。如果索引器被发现证明了不正确的查询响应,渔民会收到一部分削减金额作为奖励。反之,如果争议不成功,渔民的保证金将被没收。
重要的是,渔民的奖励必须少于削减的金额。否则,恶意的索引器可以简单地削减自己以避开解冻期或避免被别人削减。
对于单一证明争议,渔民被假定为通过某些额外协议手段(例如第三方日志服务)获得手的参与者。
我们预计更常见的使用情况是相互冲突的证明争议。在这种情况下,渔民可以为同一个查询提交两个证明,由两个不同的索引器签署。如果证明不一致,则可以保证一个或两个索引器犯了错误。
消费者在查询The Graph时,可能会选择间歇性地查询多个索引器以获得相同的查询结果——以获得额外的安全性,并有机会赢得部分被削减的赌注作为奖励。随着子图上唯一的索引器数量的增加,这种策略效果更好。
在网络的第一个版本中,将通过协议治理设置一个仲裁员,它将决定争议的结果。与索引争议类似,当由于软件中的错误、索引器丢失区块链中的事件或其他可能导致犯罪的意外因素而导致错误查询时,仲裁员可能会做出判断。仲裁应根据协议规范以及上述的仲裁章程来解决争议。
最终,随着软件的成熟,索引器将有望开发出避免此类错误的操作技术。
未来的工作
在网络启动后,The Graph核心团队将把它作为协议的唯一管理者传递给链上的名为The Graph委员会的链上去中心化治理。你可以在这篇博文中了解到更多信息,但TLDR是协议的未来改进将通过一个分散的提案过程,我们将在该流程中积极参与。
下面概述的未来工作代表了协议的愿景,我们将作为该去中心化进程的参与者倡导,但不能保证协议将采取的路径,这最终取决于协议的利益相关者。
子图组成
它应该可以查询跨子图的实体关系,还可以构建处理其他子图数据的子图。这将对Web3的开放数据层带来智能合约和“金钱乐高”对DeFi的影响。
多区块链支持
Graph托管服务目前支持多个以太坊兼容链和第二层,但部署到以太坊主网的Graph协议最初仅支持索引以太坊主网。确保协议激励机制能够发挥作用,而不是可玩性,以便在其他链上的索引和提供查询是未来研究的一个领域。
索引证明的优化卷积/Truebit式验证
索引子图的大部分工作已经在WASM或可以编译为WASM的语言中进行了。这使得我们可以在第二层进行可验证的计算,使用某种形式的二分协议和裁判游戏,就像在Optimistic Rollup和Truebit中所做的那样。这将使我们能够消除仲裁员在索引争议中的作用。
可验证查询
与其依靠仲裁来解决查询争议,不如用加密证明来保证查询的有效性。一个好的第一步是实现可验证的索引证明,如上一段所讨论的。这为PoIs的设计奠定了基础,使其从摘要的简单签名发展为验证查询的有用输入(如多项式承诺、Merkle树或其他一些认证的数据结构)。
乐观卷积/第二层的协议经济学
该协议目前对状态通道的使用使网络对以太坊气体成本的增加相当稳健,这意味着天然气成本不会随着网络使用的增加而急剧增加。也就是说,能够更频繁地结算状态通道并定期地执行奖励计算是有好处的,这在第二层链上是可行的。
GraphQL突变
与智能合约ABI相比,GraphQL突变提供了一种更有意义的方式——与协议交互的语义,因为智能合约ABI是低级别的,其方法并不总是映射到单一的概念操作。将GraphQL突变与子图捆绑在一起,将使新的开发人员更容易开始与链上协议进行互动,就像The Graph已经降低了使用来自上述协议的数据的标准一样。
GraphQL API V2
我们根据子图开发者的需求确定了一些改进措施,其中包括更有效的分页、嵌套排序和过滤以及分析功能,如时间序列分桶。
协议建模与模拟
我们将继续在今年早些时候与BlockScience团队合作开展工作,更好地建立协议模型,模拟不同的协议参数选择和可能的升级。作为目前活跃的任务控制测试网的一部分,正在收集的数据将在这个过程中发挥重要作用。
自动化的货币政策
在网络的第一个版本中,用于支付索引者奖励的Graph代币的发行率是通过治理来设定的。从长远来看,我们的目标是尽可能地减少治理的表面积。上述建模和仿真工作将有助于实现这一目标。货币政策有可能使某些利益相关者比其他利益相关者更有优势,是一个成熟的目标,是一个可以从治理中移除控制的自动化规则,符合The Graph理事会介绍性博文中介绍的“逐步最小化”的管理原则。
总结
谢谢你的阅读!我希望这能阐明我们在设计网络时所做选择背后的基本原理,并解释The Graph在主网上推出时的期待。
如果你有任何问题,或者想今天就开始建立一个子图,请加入The Graph Discord。
原文链接:https://thegraph.com/blog/the-graph-network-in-depth-part-2
---煤油灯科技victorlamp.com翻译整理---