深入了解The Graph(下)

在本文中,我们将深入探讨几个关键概念,包括Graph代币在索引器抵押,策展以及索引器通胀奖励中的作用。我还会介绍去中心化的Graph浏览器(一款与Graph网络进行交互的dApp),同时引入我们的支付和验证层。

深入了解The Graph(下)

发布时间:2019.10.21
原文作者:Brandon Ramirez
翻译:Chainslation
原文出处:
https://thegraph.com/blog/the-graph-network-in-depth-part-2
中文翻译出处:
https://zhuanlan.zhihu.com/p/213183052


本文为探讨The Graph网络原理的下篇。

我们在第一篇文章中简单介绍了The Graph网络以及它在高维度的工作原理。

在本文中,我们将深入探讨几个关键概念,包括Graph代币在索引器抵押,策展以及索引器通胀奖励中的作用。我还会介绍去中心化的Graph浏览器(一款与Graph网络进行交互的dApp),同时引入我们的支付和验证层。

索引器质押

The Graph采用应用型代币模型,其中索引器必须质押Graph代币才能在查询市场上提供服务。该服务的功能主要包括两方面:

  • 提供经济安全性。如果索引器做出恶意行为,则面临着GRT被罚没的风险。GRT一旦被质押后,只能经过一段解锁期才能取回,这一点为验证和解决争端提供了充足的空间。
  • 提供一个抵抗女巫攻击的机制。某个特定子图存在虚假或低质量的索引器会降低查找优质服务商的速度。因此我们只希望发现那些利益相关的索引器。

为了确保上述机制正常运行,有一点非常重要,就是对索引器进行激励,让他们持有的GRT与他们为网络所做出的的贡献大致相当。

一个最直接的方法是根据质押的GRT,在网络中为某个索引器分配一定量的任务。但这会带来两个问题:首先它为网络可执行的工作量设定了一个任意上限;其次,该方式几乎无法进行扩展,因为它要求所有工作都在链上进行集中协调。

0x团队首次提出了一种更好的方法,它对协议中的所有交易收取一定的协议费用,然后根据参与者的质押比例和网络收入的比例,利用Cobb-Douglas生产函数重新向参与者分配这些费用。

在我们的体系中,索引器i在某段时间获得的收益Yi为:

其中ωij是索引器i在子图j上投入的金额,Ω是网络质押的总量,θij是索引器i在子图j上为协议产生的协议费,Θ是协议获得的协议总费用。

但我们发现一点很有趣的是,在平衡状态下,一个理性决策者能够根据生产公式,用两个输入算出其花费的稳定的大致比例。在我们的情况中,也就是租用或持有GRT的成本与运行一个Graph节点涉及的运营费用,正是这一点决定了一个索引器接到更多任务,从而赚取更多的协议费用。

我们希望所有理性的索引器平衡状态下能作出相应的预算决策,因此我们期望索引器质押一定比例的GRT,相当于他们在网络中的任务比例。

该做法的好处在于,协议不需要强制要求它们质押特定比例的代币,索引器会从最符合自身的经济利益的角度作出决策。

策展信号

消费者要查询某个子图的话,这个子图必须先建立索引——该过程可能需要几个小时甚至几天。如果索引器盲目猜测应该在哪些子图建立索引,从而赚取查询费,那么市场就非常低效。

策展人信号是指将GRT质押到某个子图的联合曲线,从而为索引器指明该子图应当被索引的过程。

索引器信任这些信号,因为策展人将GRT质押到联合曲线,为各个子图创建策展信号,从而在未来从该子图赚取部分查询费用。出于个人利益,理性的策展人应当为子图质押GRT创建信号,他们期望从中获取费用。

在联合曲线(一种价格由函数所决定的算法做市商)中,策划的信号越强,GRT和策划的信号之间的汇率就越高。因此,成功的策展人如果认为未来策展费的价格已经回归价值,便可以立即获利。同样,如果他们认为市场对策展信号的价格定价过高,他们可以马上把GRT提现出来。

这种动态变化意味着对子图发出的GRT信号应当提供一个持续且有价值的市场信号,它随着市场对某个子图上的未来查询量而改变。

索引器通胀奖励

将索引器质押以及策展人信号联系起来的另一种机制是索引器膨胀奖励。

该奖励的目的是激励索引器为还没有具有大量查询量的子图建立索引。该做法有助于解决新子图的启动问题,它们在早期可能没有预先存在的需求来吸引索引器。

它的原理是根据子图占总策划信号的比例,对网络中的每个子图进行总网络膨胀奖励分配。相对应的,该部分分配给所有进行质押的索引器,数量按照它们贡献的质押比例。

在数学上,索引器i的索引器通胀奖励为:

其中ωij为索引器i质押到子图j上的数量,Ωj为质押子图j上的总量,ψj为分配子图j的GRT数量,Ψ为网络中的信号总量,Φ为整个网络以GRT计价的通胀奖励。

目前对通货膨胀率进行动态设置是一个有待探索的领域,但它可能会很低,为个位数。

该机制为索引器对策展人信号提供了额外的激励,让策展一种有意义的活动。

从长远来看,我们希望理性的索引器将GRT质押到子图上,他们从中获得通货膨胀奖励和查询费用。但是在网络启动早期,有些索引器存在着只进行质押但实际上未在任何子图上进行索引和服务查询的动机。

因此,在启动阶段会有一个协议治理设置的索引器监控服务。如果发现某个索引器质押到某个子图但不提供查询功能,那么监控服务有权将该索引器加到黑名单中。

由于存在着其他非恶意原因会导致无法提供服务,因此索引器被列入黑名单的唯一惩罚是取消获得通货膨胀奖励的资格,直到从黑名单中移除。被列入黑名单不会对质押的代币进行罚没。

Graph浏览器以及Graph域名服务

当涉及到有价值的子图时,为索引器策展子图才刚刚开始。我们还希望为开发人员展示有价值的子图。

这是The Graph的核心价值主张之一:帮助开发人员找到有用的可开发数据,让他们轻易将各种基础协议和去中心化数据源的数据整合到某一个应用中。

开发者目前可以通过导航到Graph浏览器来做到:

在Graph网络中,Graph浏览器是一个基于子图顶层的dApp,其中子图能够对Graph协议的智能合约(元数据,我知道!)进行索引,包括Graph域名服务(GNS,一个子图的链上注册表)。

子图是由子图清单定义的,该清单存储在IPFS上,不可篡改。不可篡改特性对于具有确定性和可复制性的查询进行验证和解决争端非常重要。GNS允许团队为子图添加一个名称,因此它的角色很重要,然后用户可以使用该名称指向连续、无法篡改的子图“版本”。

这种人性化的名称以及GNS中存储的其他元数据,让Graph浏览器的用户更好地理解子图的目标和可能的用途,而字母数字字符和已编译WASM字节码的随机字符串则无法做到这一点。

在Graph网络中,发现有用的子图更加重要,因为我们会调整子图的组成。与单纯支持dApp在多个单独的子图上构建不同,子图组合还能引入全新的子图,让它们直接引用现有子图中的实体。

让多个dApp和其他子图能重复使用相同的子图是Graph具备的核心效率之一。我们来对比一下现状,目前每个新的应用都会部署自己的数据库和API服务器,但他们通常没有得到充分利用。

限额小额付款

我们的支付层旨尽可能最小化消费者与索引器之间的信任。付款渠道是一项针对可扩展、链下、最小化信任付款而开发的技术。它涉及到交易双方,他们将资金锁定到链上托管,其中资金只能在它们之间进行链下的交易,除非提出从托管中提现资金的链上交易。

传统的支付渠道通常强调安全地在链下发送小额付款,而不考虑服务或商品实际上是否已经收到。

The Graph在一些数字商品或外包计算微支付的原子交换方面已经取得了一些成果,我们把该架构称为波浪锁(WAVE Lock)。 波浪代表了任务、证明、验证和到期时间,其总体设计如下:

  1. 任务。用户发送锁定的小额付款,同时指明需要执行的工作。该项工作即为小额付款的锁。
  2. 证明。服务提供商按照用户请求,返还数字商品或服务以及已正确完成任务的签名证明。
  1. 验证。使用某种方法对上述签名证明进行验证。如果无法正确执行任务,可能会存在一些惩罚(如罚没)。
  2. 到期时间。服务提供商必须在小额付款锁定到期之前收到用户收据确认,或者在链上提交证明,来获取他们的小额付款。

在付款渠道上进行锁定并非新鲜事,Lightning和Raiden的论文都探讨了通过哈希原象对小额支付进行解锁。该方法在多hop小额支付中特别有用,其中每个hop都用同一个哈希值锁定,通过一个原象值解锁,该数值会在输入到指定的哈希函数时生成。

虽然我们可以推出自己专门设计嵌入锁定机制的付款通道方案,但目前使用状态通道是最实际的。

我们可以将状态通道看成支付通道,将以太坊等智能合约区块链看成比特币。他们可以处理简单的支付场景,也可以编码更复杂的状态切换,同时保持着支付通道的可扩展性和安全性。

支付和状态通道的共同点在于,它们的基本形式是在预先认识的两个参与方之间进行价值交换或状态更新。在上文提到的多hop小额付款中,任何两个参与者之间进行支付都需要在多个其他参与者之间形成一个支付通道链,将两个原始参与方连接起来。

目前有许多不错的项目正在处理不同形式的Graph遍历,为任意两个参与者方提供小额付款。为简单起见,Graph网络最初会使用轴辐式(hub and spoke)的结构。

这意味着如果要用The Graph,用户需要通过状态通道轴在链上开启一个状态通道,该通道使用用户选择的稳定代币或ETH。同时索引器也要在轴开通一个状态通道来接收GRT。

状态通道轴需要质押GRT并设置付款面额与GRT之间的汇率,让所有小额付款都以同一单位结算。

验证

为了确保波浪锁的构造和索引器质押发挥效果,必须要有一个有效的验证机制,该机制能够重现索引器执行的任务、识别故障并惩罚恶意的索引器。

在Graph网络的第一阶段,这一点通过链上争议解决流程来处理,最终结果由仲裁院决定。

渔夫提出争议、保证金,以及由索引器签署的证明。如果发现索引器证明了错误的查询响应,则渔夫将获得一部分罚没金额作为奖励。相反,如果争议不成功,渔夫将会失去保证金。

有一点很重要,就是渔夫的奖励必须低于罚没金额。否则,恶意索引器可能(自己举报自己)大摇大摆绕过解冻期,或者避免被其他人罚没。

从长远来看,随着网络变得更加可靠,我们预期对活跃渔夫的奖励将逐渐降低到接近零。因此即使存在着渔夫的奖励,我们也认为该角色受到利他动机的激励。

因此The Graph最初有一个渔夫服务,消费者可以在上面发布证明,同时我们将负责验证查询响应并在链上提交争议。当然任何希望的人也可以扮演该角色。

此外,协议治理会在网络初期设置一个仲裁服务,它将充当争端解决中的唯一仲裁者。这能够让我们在软件漏洞、索引器丢失区块链事件或其他可能导致严重攻击的偶然因素而导致错误查询时做出判断。

最终,随着软件的成熟,索引器会逐渐发展,能够操作专有技术避免此类错误。

未来的工作

The Graph网络未来的规划包括探索新的市场机制以及对现有机制进行参数化,让查询市场更加动态和高效。后者将涉及对现有机制的设计进行基于代理的动态模拟,以及主网启动后的分析。

合约是支持升级的,因此The Graph协议在启动后可以进行持续迭代。

从长远来看,我们希望通过依靠经过验证的数据结构、共识算法和加密证明来完全消除渔夫和仲裁员两种角色。我们团队将持续对该领域进行探索,做到高效执行该操作,同时我们在接下来对对此进行更多介绍。

结论

感谢您花时间阅读本文!希望本文能够清楚解释我们设计网络时的基本原理以及团队在明年及未来的方向。