Vitalik:绝对反对基础层价格预言机,以太坊L1层的功能要明确限制

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

Vitalik:绝对反对基础层价格预言机,以太坊L1层的功能要明确限制 (图左:Justin Drake 图右:Vitalik Buterin)

注:以下提案由Justin Drake提出:

Vitalik:绝对反对基础层价格预言机,以太坊L1层的功能要明确限制

简单地说,我们建议在信标链(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,其中:

PRICES_PER_ASSET = 8

# Type aliases Price = uint64 AssetPrices = Vector[Price, PRICES_PER_ASSET]

class PriceData(Container): # Currencies in the IMF SDR basket usd: AssetPrices # 0.01 USD price denomination eur: AssetPrices # 0.01 EUR price denomination cny: AssetPrices # 0.01 CNY price denomination jpy: AssetPrices # 1.00 JPY price denomination gbp: AssetPrices # 0.01 GBP price denomination

从以太坊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:绝对反对基础层价格预言机,以太坊L1层的功能要明确限制

“我持绝对反对意见!

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

另一方面,这个提议的目的是引入一个链属性,即使在原则上也不能在任何假设下通过编程进行验证。甚至在未来的世界里,人们对投入的正确价值也没有明显的共识(例如,上述一个国家发生内战,双方都声称自己的货币是“真正”的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的观点,你的看法又是什么呢?

写评论,请先登录