原文标题:Staking & oracles

作者:Saša Milić

字数:1436

这是我们系列文章《在区块链上获取 API》中的第五篇。

这篇文章貌似看起来有点和本系列不相干,让我提供一些背景信息。前面我们讨论了 API 的重要性和连接现有 API 到区块链的一些问题,接着,我们开始通过定义第一方预言机 (特别是与第三方预言比较) 来介绍我们解决方案的一些组件。

那么现在,我们为什么要讨论 Staking 呢?因为当我们介绍 API 连接性问题解决方案的组件时,最终我会阐明我们选择的安全模型,特别是我们不再使用预言机级别的 Staking 作为一种安全性方法。本文给出了一个相对简短和非正式的论点。(建议你参考我们的白皮书进行更正式的讨论。)

原子的玻尔模型(左)和原子的量子模型(右)的视觉呈现。这是科学上许多复杂性跃升的例子之一,当我们从对离散的确定性系统进行建模到对连续性和随机性进行建模时,就会发生这种变化。 (照片来源:dani3315 / Shutterstock)

Staking

尽管我相信阅读本文的人可能都对 Staking 非常熟悉,不过我还是希望提供一个快速温顾。Staking 的概念起源于 Proof of Stake¹,它为工作量证明 (Proof of Work) 机制提供了一种替代方案,工作量证明机制是比特币的 Satoshi 共识算法的原动力²。

一般来说,[X] 证明是选择矿工验证若干交易,然后以"块"的形式将其添加到区块链的机制的一部分。在 POW 的模式下,矿工表明他们提前做了必要的,计算密集型的工作(创建一个新的块,而且重要的是,他是第一个这样做)。相比之下,POS 提供了一种 "游戏中的皮肤" 方法来选择下一个块的创建者:矿工抵押代币 (他们的"Stake"),通常根据其股份大小的某些功能进行选择。重要的是,如果矿工作恶,不制造诚实的区块,那么矿工所抵押的这部分股份就会被 "砍掉"。

当然,上述定义中遗漏了很多细节,不过我认为已经足以解释 Staking 了。划重点:其最终目的均是:使用加密/区块链系统作为惩罚恶意行为的机制 (反之亦然,激励诚实行为)。

此后,Stake 在意义上有所扩展,它不仅用于 POS 的区块链网络,而且从原始定义中我们可以做一个延伸,即,Sstaking 提供了一种机制,通过直接的财务损失来惩罚不诚实 (或怠工/风险) 行为,并通过直接的经济利益奖励诚实,对系统有益的行为。

关于共识的简短说明

Photo: Rubberball/Mike Kemp via Getty Images

某些恶意行为会在区块链中引起 “分裂”³。通过网络参与者之间的先验协议达成共识,即最长的区块链是正确的。最长链的正确性由创建链的工作量 (工作证明) 或“游戏中的皮肤”(利害关系证明) 的数量来证实。

完整性:这也说明了为什么区块链 (在某些情况下) 可以防止双花事件,因为最终只有一个有效的链条获胜。

从量子跃迁到连续数字

Detail of The Garden of Earthly Delights (1515) by Hieronymus Bosch, left side pixelated by author.

去中心化的预言机网络延伸了共识的概念。我们应该谨慎地认为预言机 “同意” 一个价格 (通过一些聚合方法) 与交易有效性的共识非常相似 (正如现有的基于区块链的共识算法一样)。

当我们从处理离散数据 (经常甚至是更简单的二进制决策) 到处理真实的、连续的数据时,复杂性有了一个飞跃,而这些数据本身并不存在于区块链上。

让我们看一个例子。

检测喂价中的恶意行为

喂价是目前使用最广泛的将链外数据馈送到链上消耗的例子。考虑由 n 甲骨文提供的价格馈送与一些聚合合同的常见架构。你可以想象一下由一些预言机和一些聚合合约服务的喂价通用架构。

如何定义这样一个系统中的恶意行为?有人可能会说:虚报价格。但那是什么样子的呢?如果数据不是以原生方式存在于区块链上,我们怎么知道有误报?

如果我们试图在聚合时检测恶意行为,我们唯一可以使用的信息就是预言机的响应本身。即,我们只能比较预言机对彼此的反应,因为它们报告了链外数据,我们无法将其响应与任何链上的 "金本位" 进行比较。

因此我们只剩下“异常检测”,然而关键是:离群值并不意味着一个行为不当的节点。

引用前一篇文章中的一段话:

预言机有动机收集那些廉价且易于访问的数据,因为没有任何措施强制或激励他们不这样做(强调一下,它们不会以任何方式强制要求语言及节点报告其信息源)。这就制造了一个围绕廉价和容易获得的数据的谢林点(Schelling poin)。此外,这也使得在此类系统中进行质押变得困难 (如果不是不可能的话),因为现在高质量的精选数据源变成了异常值。(本系列稍后的文章中将更详细地介绍此类系统中的质押问题)。

此外,以下是最近 ETH-USD 喂价中一些预汇总结果的分布图。哪些预言机的行为不端或是恶意的?哪些回应值得高"声誉评分"?答案是:我们没有足够的信息可以证明。

用于生成这些图的代码可以在这里找到。

此外,由于所有异常检测技术最终都是数据传播的函数:即使有一个异常检测机制到位,恶意预言机仍然可以扭曲响应,并保持不被发现。可以想象,一个潜在的攻击者滥用 "随机性迷雾 (fog of randomness)" (对真实价值样本的一定数量的错误、随机性和变化的预期) 来攻击系统,即扭曲总结果。这与最近网络物理系统中一项被称为隐身攻击的研究工作类似。

此外,在我们将此类"轻微"误报视为微不足道之前,我们应该谨慎看待。试想一下,当 ETH 价格接近触发大规模清算的情况,报告价格略有向上/向下的倾斜均可能会触发清算,从而导致不成比例的影响。

系统机制中的线性和连续性决定了它对输入数据误差的敏感程度。

还有一种更糟糕的情况,假设有一个攻击者 (或者一群合谋的攻击者) 控制大多数节点,在这种情况下,他们可以控制总的聚合结果,导致诚实的节点无济于事。

并不是说不可能在响应时间内检测到任何恶意行为。只是这里有很多细微的差别和复杂性,让节点对真实价值的连续数据达成“共识”与对二元值 (或一小组离散值) 达成共识截然不同,就像共识算法一样,直到计算机科学史演进到这一刻。

基于时间的检测框架

我们可以考虑两种可能性来检测一个由预言机提供服务的数据源中的恶意/不良行为:我们可以在现在或将来检测这种行为。或者更细粒度的,我们可以选择在某个点 t ≥0 检测恶意行为,其中 t = 0 是上面提到的特例。(注意: 这里我们为了力求简洁,忽略了区块链上关于“时间”的一些细微差别,不过它与这里的高级别讨论还没有关系。)

基于上述原因,特别是离群数据≠恶意数据,我们认为在 t = 0 时检测恶意预言机行为是无效的,除了在少数受限的情况下。

为了适应链条上的所有丰富数据类型,惩罚恶意行为需要一种只能在事件发生后才能执行的定制方法。即,我们采用 t>0 检测方法。

结论及下一篇文章

当我们从关于一些离散值的去中心化共识过渡到连续、真实价值观的去中心化共识时,我们在复杂性上实现了质的飞跃,我们不再处理同样的问题了。这种不连续的飞跃需要一种全新的方法。

下周我们将讨论可量化的安全性,以及数据源保险意味着什么。

脚注

[1]: https://www.peercoin.net/whitepapers/peercoin-paper.pdf

[2]: https://bitcoin.org/bitcoin.pdf

[3]: 请注意,由于网络中的异步性,非恶意行为有时也会导致区块链中的这些分裂。