以太坊 2.0 研究员 Justin Drake 提议在信标链中添加价格预言机,Vitalik Buterin 反对并提出 6 个理由。

原文标题:《Vitalik:绝对反对基础层价格预言机,以太坊 L1 层的功能要明确限制
撰文:Vitalik Buterin、Justin Drake,前者系以太坊创始人、后者为以太坊 2.0 研究者
编译:洒脱喜

看完了比特币减半大戏,我们再来关注下以太坊,昨日,针对以太坊 2.0 研究者 Justin Drake 最新提出的基础层价格预言机提案,以太坊联合创始人 Vitalik Buterin 撰文表示坚决反对,并提出了六大反对理由,此外他还表示,以太坊生态系统得益于强大的应用层代币生态系统,而不是通过 L1 层垄断所有重要功能。这场以太坊 2.0 核心人物之间的 battle,你支持谁呢?

Vitalik Buterin:反对以太坊 2.0 信标链预言机,Layer 1 功能应明确限制图左:Justin Drake 图右:Vitalik Buterin


以下提案由 Justin Drake 提出:

Vitalik Buterin:反对以太坊 2.0 信标链预言机,Layer 1 功能应明确限制

简单地说,我们建议在信标链(beacon chain)中添加一个简单的喂价服务,以跟踪一小部分关键资产。该服务允许建立完全去中心化的预言机(oracle),在每个 epoch 周期边界(即 6.4 分钟)为每个跟踪资产产生一个价格。

感谢 @albert, @benjaminion, @dankrad, @danrobinson, @DCinvestor, @djrtwo, Eric Conner, Evan Van Ness, @karl, @khovratovich, Mehdi Zerouali, @mkoeppelmann, @paulhauner, @protolambda, @Robert, @ryanseanadams, @sassal, @scott_lew_is, @vbuterin 提供的反馈和讨论。

构造

将 price_data: PriceData 字段添加到 BeaconBlockBody,其中:

Vitalik Buterin:反对以太坊 2.0 信标链预言机,Layer 1 功能应明确限制

从以太坊 2.0 的共识观点来看,price_data 对象的处理方式类似于 graffiti 字符串。也就是说,price_data 可以是任意数据,其值被信标链状态转移函数和分叉选择规则忽略。

诚实的信标区块提出者,必须为 PriceData 中的每个跟踪资产,填充尽量最好的价格,而这些价格必须:

  1. 基线 —— 代表跟踪资产的 1 ETH;
  2. 快照 —— 以最近的 PRICES_PER_ASSET epoch 界限进行快照(在 AssetPrices vector 中按年龄顺序递增);
  3. 面值 —— 以最小的 ISO 4217 货币单位计价(例如,如果 1 ETH 为 213.09 美元,则设定为 Price(21309));
  4. 四舍五入 —— 用半下舍入法舍入(例如,如何 1 ETH 为 22,732.66 日元,则设定为 Price(22733));
  5. 上溢(overflow)—— 如果 uint64 溢出,则设置为 Price(2**64 - 1);
  6. 下溢(underflow)—— 价格为负时,设置为 Price(0);

示例:诚实多数 ETH-USD 预言机

我们可以在每个 epoch 周期边界建立一个多数诚实的 ETH-USD 预言机。

考虑一个智能合约,它取与给定 epoch 边界相对应的所有价格的中值(最高为 SLOTS_PER_epoch*prices_PER_ASSET=256 价格点)。

如果超过一半的相应信标区块是由诚实的验证者生成的,则中间价格就是安全的,即不可由不诚实的验证者操纵。

基本特征

以下是该喂价服务的基本功能:

  1. 共识极简主义 —— 通过将 price_data 视为与 graffiti 同等,实现对信标链状态转移函数和分叉选择规则影响的最小化。
  2. 补贴交付 —— 每个信标区块都包含一个专用的 PriceData 对象,绕过应用层区块空间限制和 gas 市场;
  3. 原价 —— 喂价是提供关于原价的一种低 level 服务,它们可与其他价格来源混合和匹配,以创建具有自定义逻辑的混合预言机;
  4. 带宽效率 —— 每个被跟踪的资产,为每个 BeaconBlock 的 320 字节开销,序列化为 type_byte_length(uint64) * PRICES_PER_ASSET = 64 字节。区块传播的带宽开销很小,特别是在网络压缩的情况下。
  5. 可被其他链使用 —— 这种服务不仅可供以太坊 1.0 和以太坊 2.0 使用,也可以供其他区块链使用。它也可以用于链外,例如通过完全去中心化的钱包来估算法币计价的 gas 成本。
  6. 初始部署 —— 这种喂价服务是可选的以太坊 2.0 基础设施,当其准备就绪时就可以进行部署。以太坊 1.0 的 DeFi 生态系统将从中受益,比如在 phase 1 阶段。

喂价治理

跟踪资产集的维护是一个治理问题,我们建议遵循以下社区规范:

  1. 最低可行性 —— 跟踪资产集应保持在最低可行水平,即仅纳入对以太坊的长期健康和成功至关重要的资产。5 项初始资产(美元、欧元、人民币、日元、英镑)反映了三项关键原则:(1、可信中立;2 高流动性;3、广泛的应用)
  2. 粗共识 —— 新资产(例如黄金、石油、比特币)可以通过粗共识驱动的硬分叉加入到跟踪集合中。
  3. 向后兼容性 —— 添加资产后的向后兼容性不能从跟踪集中移除,以保持向后兼容性。

验证运行者行为

我们讨论各种类型验证运行者的预期行为:

  1. 诚实运行者 —— 根据定义,诚实的运行者运行符合共识规则的验证节点,并报告正确的价格数据。
  2. 懒惰的运行者 —— 懒惰运行者(例如一个忙碌的业余质押者),其最懒惰的行为是运行默认的验证者客户端设置。因此,懒惰的运行者应该运行报告正确价格数据的验证节点。(由于贷款、CPU 时间、RAM、磁盘等方面的计算开销很小,因此不需要考虑计算延迟。)
  3. 理性的运行者 —— 理性运行者寻求最大化的收入,并将考虑价格数据操纵,以实现验证的最大化可提取价值(VEV,类似矿工可提取价值的概念)。然而,由于 PriceData 对象是公共和加密签名的,所以不诚实的验证者可以被社区识别出来。潜在的处罚包括:(1、失去声誉;2、验证余额遭到罚没;3、被孤立)

验证者客户端指南

验证客户端必须能够查询外部源以在 epoch 边界处导出价格。以下是客户端实施指南:

  1. 差异性 —— 必须查询各种价格来源以获得稳健性,包括链上来源(如 Uniswap V2、MakerDAO、Chainlink,请参阅 oracles.club)以及链外来源(如 Coinbase、CoinMarketCap);
  2. 安全性 —— 查询不受信任的 api 时产生的攻击向量,必须要仔细处理;
  3. 清楚外部问题 —— 必须充分处理异常源(例如,使用健全性检查和加权中位数);
  4. 可定制性 —— 客户端运行者应该能够轻松更改默认价格推导逻辑,并自定义其价格来源;
  5. 去相关 —— 实现应努力使价格推导逻辑最大化去相关(例如,跨实现、版本、slot);

DApp 指南

  1. 历史累加器 —— 每个 PriceData 对象,都可以根据 BeaconState 中的 historical_roots 进行验证。为了提高 gas 效率,可以有效地将 SHA256 Merkle 验证数据(witnesses)压缩成一个 SNARK (通过 plookup 等技术进行优化);
  2. 风险分析 —— dApp 必须仔细评估非诚实验证者的价格操纵风险,并作出知情的安全假设(例如验证者诚实假设);
  3. 混合预言机 —— dAppp 应该考虑将重要的喂价服务与其他价格来源相结合。喂价服务是一个基础设施,旨在增加以太坊生态系统的选择和健壮性;

下面,则是来自以太坊联合创始人 Vitalik buterin 发表的 battle 意见:
Vitalik Buterin:反对以太坊 2.0 信标链预言机,Layer 1 功能应明确限制

我持绝对反对意见!

首先,这是对区块链技术特性的一个根本性改变。现在,我们有了一个特性,即区块链进度的正确性可通过编程方式完全验证。有效性是一个确定性功能,可用性(即非审查)可以由在线节点进行验证,甚至还有针对低延迟在线节点的技术,以就区块链是否审查交易达成共识。

另一方面,这个提议的目的是引入一个链属性,即使在原则上也不能在任何假设下通过编程进行验证。甚至在未来的世界里,人们对投入的正确价值也没有明显的共识(例如,上述一个国家发生内战,双方都声称自己的货币是「真正」的 USD/CNY/JPY)。

第二,该提案依赖于诚实多数,但我们在以太坊 2.0 上面所做的很多事情,从根本上讲是要摆脱诚实多数的假设,并试图在诚实多数失败的情况下创建「第二道防线」,例如:

  1. 托管证明,试图将聚合的安全性假设从「必须诚实」更改为同时涵盖不邪恶,但懒惰的参与者;
  2. 数据可用性证明和欺诈证明(fraud proof),允许 51% 攻击链拒绝无效或不可用的区块;
  3. 用户可运行全节点,而不仅仅是轻节点;
  4. 上面提到的审查检测技术;
  5. 无活动泄露机制,及其在 >1/3 离线攻击发生的情况下进行恢复操作;

而做出一个依赖于诚实多数的设计,与所有以上这些进步的方向是相反的。

第三,它损害了协议的中立性,并为进一步的中立性妥协开辟了一条滑向深渊的道路。该提案(1)将「DeFi」提升为特权应用类,并(ii)提升一组特定的资产 / 价格指数。它还会引入底层治理的政治风险,比如必须要判断哪些货币是足够重要的,哪些应用类是足够重要的,如何判断紧急情况,等等。

第四,它关闭了预言机设计创新的大门,例如,这种设计的一个自然替代方案是,时间 T 时的价格,只应在时间 T+1 天时商定,以便为链上攻击、交易所在较长时间内停止工作的情况,以及通常功能性 api 意外出错的情况提供空间。有很多种方法可以设计预言机,而用 L1 的方法统治生态系统,似乎并不是正确的答案。

第五,它增加了 staking 验证者中心化的风险,因为客户端需要更多的自动更新来维护他们的预言机,这增加了验证者盲目遵循客户端开发者指示的风险(或者人们会彻底放弃自己当验证节点,而切换到验证池当中);

第六,与基于应用层 token 的预言机(例如 Augur 等)相比,它实际上并没有提供更多的安全性。MKR 的市值约为 200 万 ETH,因此应用层代币显然可以获得显著的市值。我们预计,以太坊 2.0 初始的 staking 币数,大约在 200 万 ETH 范围内(长期值可能达到 1000 万 ETH)。因此,基础层预言机的安全级别,并没有比应用层的预言机高多少,似乎充其量只是一个数量级的差异。

我实际上认为,我们应该朝相反的方向发展,明确限制底层的功能,以便故意为应用层生态系统留下空间,让应用层开发其他的工具。Augur 一直在很好地运行,其他预言机(UMA, MKR, Chainlink…)也同时存在着。

以太坊生态系统得益于强大的应用层代币生态系统,而不是 L1 层 /ETH 垄断所有重要功能。这是因为以太坊生态系统对公共产品有很大的需求,而准备提供这些公共产品的以太坊供应却有限(以太坊基金会持有的 59 万 ETH,以及一些鲸鱼持有的币),因此修改以太坊协议,以印刷更多以太坊用于这些目的,在政治上是困难的(出于正当理由)。然而,应用层 token 可以提供这些公共产品,例如 Gnosis 在智能合约钱包中做了很多工作,现在已经在其中维护了 openesom 等等。应用层 token 甚至可以直接用二次方融资方式来资助公共产品。因此,我们应刻意寻找并设计与此类应用层 token 的共生关系,而不是将它们视为基础层可吸收的一个试验地。


目前来看,大多数以太坊参与者似乎更支持 Vitalik 的观点,你的看法又是什么呢?

来源链接:ethresear.ch