从安全性和时效两个维度比较 MakerDAO、Aave 与 Compound 的预言机原理差异。
预言机在去中心化金融系统中的资产定价环节尤为重要,预言机报价的安全性、时效、准确度、成本是我们应当重点关注的维度。本文全面解析主流去中心化借贷产品采用的预言机原理并从安全性和时效这两个维度进行对比。
广义预言机及其信息源形式
预言机作为一种重要基础设施已被广泛讨论,过去一般狭义地指代为区块链提供链外可信数据的模块,本文探讨更为广义的预言机——依赖信息源为去中心化系统输送信息的机器。输送的信息不一而足,可能是用于交易市场的价格、指数、宏观参数等信息;或是用于预测市场的气候、选举等信息。而依赖的信息源可来自链上或链外,具有不同的去中心化程度。
图 1. 不同类型的信息源和预言机示例
图 1 给出了几个示例:Coinbase 交易所提供的经签名认证的 API 是典型的由权威声誉背书的中心化链外信息源;Uniswap 作为链上原生的去中心化交易所,提供的 TWAP 预言机是典型的去中心化链上信息源。
这两类信息源各有优劣,中心化链外信息源存在运营方信用风险,但能覆盖的信息类型比较全面且一般时效性好、准确度高;去中心化链上信息源利用区块链去除了信用风险,但目前以 AMM 价格预言机为主,类型单一,且出现过多起被操纵事件。
它们均可以作为广义预言机的基石,通过聚合、相互锚定等方式使之更具鲁棒性和安全性,并参与去中心系统的运转。例如,
MakerDAO 构建了一个联盟预言机系统,授权若干第三方链外信息源组成联盟为资产提供价格信息,能一定程度抵御个别中心化信息源的信用问题,但不排除联盟合谋腐败风险,目前依赖治理和激励机制加以管理。
Chainlink 提出了更为去中心化的预言机系统,通过经济激励机制和声誉系统管理无需许可的信息源。
Compound 提出一种将中心化链外信息锚定去中心化链上信息的方案,在保留中心化信息源优势的同时强化风控。
本文从价格预言机出发探究目前排名前三的去中心化借贷产品的采纳情况(如表 1 所示),并对其原理及性能进行展开分析及对比。
表 1. Top3 去中心化借贷产品采用的预言机形式及信息源
MakerDAO 的联盟预言机
MakerDAO 作为老牌 DeFi 项目,在 2017 年 6 月推出了单一锚定 ETH 的稳定币 DAI (现更名为 SAI),并基于其自建的第一版预言机为抵押品 ETH 进行报价。该版预言机由 14 个获得 MakerDAO 许可的个人匿名信息源(Feeds)提供 ETHUSD 的报价,并通过一个聚合合约获得报价的中位数,最终喂价给 MakerDAO 系统的主合约。通过匿名性抵御信息源节点被操纵或勒索的风险。由 MakerDAO 治理组织对信息源的选聘、信息源数量等配置参数进行管理。
MakerDAO 在 2019 年 9 月推出 第二版预言机 ,相较第一版,除了支持多币种报价的功能改进和性能提升外,主要改进点在于:
提议添加 DeFi 合作伙伴作为机构信息源(包括 dYdX、0x、Set Protocol、Gnosis);
提议创建预言机团队角色及构建预言机治理框架;
提出优化的预言机激励机制。
联盟预言机的风险在于使用者需信赖信息源和治理机构,上述改进致力于使 MakerDAO 预言机更加去中心化:引入去中心化信息源能一定程度缓解中心化信息源的信用风险,但可能会引入更多被第三方操纵的风险;而治理机制和激励机制的改进对系统的影响往往是长程的,无法立竿见影。
MakerDAO 预言机原理
图 2 从左往右展示了 MakerDAO 预言机依赖链下许可信息源报价的流程(关于 DeFi 合作伙伴机构信息源的获取方式尚未找到官方说明,有待进一步跟踪报道)。
图 2. MakerDAO 预言机架构(来源:MakerDAO 官网 Docs)
为了保证链下数据安全地传输到链上,每个获得许可的信息源节点运行一个客户端(Omnia Feed Client),将用以太坊私钥签过名的价格信息通过名为 scuttlebutt 的分布式 gossip 协议广播到中继器(Omnia Relayer Network) 。
中继器监听这些签过名的消息,检查其活性(liveness),并将价格数据和签名打包成一条以太坊交易,广播到以太坊网络,由链上预言机模组进一步处理价格信息。
链上预言机模组主要包括 Median 和 OSM 两个合约。Median 合约主要任务是根据第 2 步推送的价格及签名序列,验证时间戳、信息源是否在白名单、价格序列是否按递增排序、用布隆过滤器验证价格来自不同的信息源,上述验证均通过后计算中位数并替代原值。Median 合约内维护了一个信息源白名单,用于检查价格信息更新是否来自许可地址。MakerDAO 治理机构通过更新白名单来调整信息源,并有权更新计算中位数所需最少信息源数目(目前设定是 13)。
OSM 是进一步提升预言机安全性的智能合约,主要用于对报价设置延时机制从而为识别和响应潜在的安全事件预留时间。OSM 合约内维护了一个价格队列,最新的价格信息只有在 1 个小时之后才会被“中间人”Spotter 合约采用并供主合约(Vat)调取。
紧急预言机
紧急预言机是 MakerDAO 抵御攻击的最后一道防线,由 MKR 持有人投票选定。紧急预言机有权单方面触发紧急关停(Emergency Shutdown),故而能通过冻结单个预言机来缓解挤兑风险。
MakerDAO 预言机的时效
通过上面的流程分析,我们可以发现 MakerDAO 预言机的工作时效主要受以下环节影响:
信息源更新频率
信息源基于两个原则提交价格更新信息:a) 当前价格与上次提交价格差别大于规定阈值(目前设定为 1%);b) 当上次提交价格超过 6 个小时。
Median 合约更新频率
即时,取决于中继器传送频率。Median 合约每当接收到中继器传送过来的价格序列,就会马上执行验证流程并在通过检查后更新中位数。
OSM 合约更新频率
每隔大约 1 小时(至少)。一个外部 EOA 地址通过调用一个名为 MegaPoker 的公共合约,能批量执行 OSM 合约内的 poke() 方法完成各抵押资产 OSM 合约内价格队列的更新,接着依次触发 Spotter 合约读取最新价格。为了维持这一更新频率,OSM 合约内 poke() 方法限定了只有在区块时间戳间隔满足大于等于 3600 秒时才能被再次调用。图 3 展示了目前 MakerDAO 预言机支持的 24 种抵押资产的 OSM 合约地址及 Spotter 合约地址。
网络传输和区块生成时滞
这两个延时都在秒级,相对 OSM 一个小时延时可忽略不计。
图 3. MakerDAO 预言机支持的 24 种资产 OSM 合约地址及 Spotter 地址(来源:MegaPoker 合约:0x7472e5830dc6402c22bb5b3abbca14d6a058e482)
可见 MakerDAO 预言机的价格更新频率最快是 1 小时一次,但会在木桶效应下受制于 Median 合约内价格更新频率。我们可以通过 ETHUSD 的 Median 合约交易记录测量其更新频率。从图 3 可以看出,该合约更新报价的时间间隔在 9 分钟和 219 分钟左右出现峰值,有 70% 的概率在 60 分钟内更新报价,即对应于 OSM 合约每隔 1 小时获得的报价是 1 小时前更新过的;而剩下 30% 的概率超过 1 小时,3.65 小时是大多数情况下该预言机价格更新延时的上限。
图 3. MakerDAO 预言机 ETHUSD Median 合约 LogMedianPrice 事件时间间隔分布(来源:Median 合约:0x64DE91F5A373Cd4c28de3600cB34C7C6cE410C85)
Aave 采用 Chainlink 报价
Chainlink 预言机的原理
Chainlink 预言机与 MakerDAO 预言机的架构实际上非常类似,最大的区别在于信息源无需获得 Chainlink 许可,其原理和经济激励机制在其它研报多有提及,在此不展开详述。Chainlink 系统可简述为两类节点的工作:
链外节点
响应聚合合约的请求,将链外信息通过发送以太坊链上交易的方式传输给聚合合约,聚合合约在收集到指定阈值数量的链外节点回复方生成聚合价格。
链上节点
在以太坊上运行智能合约,一般由社区用户自行赞助组建,主要包括 p 代理合约(Proxy)和聚合合约(Aggregator),Proxy 内部存储了各个报价资产的最新 Aggregator 合约地址,接到用户合约的链上请求便访问相应 Aggregator 获得其存储的最新价格,并在同一笔链上交易内将报价反馈至用户合约。
图 4. 用户调用 Chainlink 预言机流程(来自官方 docs)
触发 Aggregator 合约开启新一轮聚合报价的因素有两个:
距离上次聚合报价延时超过一定阈值;
合约会监听一些信息源的报价并与上次聚合报价对比,当价差偏离一定阈值时触发。
图 4. Chainlink 预言机关于 ETH/USD 价格数据的聚合界面(来源:https://data.chain.link/eth-usd)
图 4 是 Chainlink 对 ETH/USD 的聚合报价页面,可见目前有 21 个链外节点参与工作,价格偏差阈值是 0.5%,延时阈值 3 小时。根据 ETHUSD 的 Aggregator 合约 NewRound 日志记录频率,我们可以测试实际的价格更新频率。如图 5 所示,更新间隔峰值为 10 个区块(约 2.5 分钟),70% 的概率在 10 分钟内更新,最高上限约 70 分钟。
图 5. Chainlink 预言机 ETHUSD Aggregator 合约 NewRound 事件区块间隔分布(来源:Aggregator 合约:0x00c7A37B03690fb9f41b5C5AF8131735C7275446)
Compound 的锚定式预言机
Compound 设计了一个名为 OpenPriceFeed 的预言机系统,该系统与上述联盟预言机和去中心化预言机有所不同,采用了中心化信息源锚定 AMM 链上价格的组合形式,主要有两个合约。
OpenOraclePriceData
任意中心化信息源(Reporters)可向 OpenOraclePriceData 合约传送用私钥签名的价格数据,OpenOraclePriceData 合约负责中立地接收这些价格及签名信息并开放给第三方免许可调用。
UniswapAnchoredView
目前 Compound 自身系统只采纳了 Coinbase Pro 提供的 API 数据。通过 UniswapAnchoredView 合约对 OpenOraclePriceData 存储的签名价格进行验证筛选,只有 Coinbase 签发、并且价格位于 Uniswap 的 TWAP 预言机报价一定区间内,该合约才接受并更新。目前价格区间设定为最大偏离锚定价格的±20%。
值得说明的是,任何人都可访问 Coinbase Pro API 接口获取时间戳、价格、签名信息,并将其提交至 UniswapAnchoredView 合约,只要能通过其验证,用户可获得即时价格。也就是时效是三种预言机里最好的,但是在 2020 年 11 月 26 日发生的 Compound 大规模清算事件中,Coinbase 交易所内 DAI 的价格发生剧烈波动,清算机器人利用这个价差,在一笔交易内完成了抵押物价格更新和清算流程。
预言机性能对比
三款借贷产品各自采用了不同的机制来对中心化信息源的信用风险、单点攻击风险进行风控,但预言机安全性和时效似乎是鱼与熊掌不可兼得。MakerDAO 以较为保守的方式为处理突发事件预留时间,导致报价有至少 1 个小时的延时;Chainlink 的报价频率相对较高,目前参与报价的去中心化节点还比较少。这两者的耗时主要受制于于多个信息源的聚合阶段。Compound 的预言机目前只信任一个中心化信息源,不存在聚合过程,并允许任意第三方触发价格更新,获得最优时效。但锚定机制设定的波动范围在±20%,在市场出现极端行情下单个交易所的异常报价容易被利用;且中心化信息源发生单点故障或被攻击时,虽然可以自动弃用而依赖 AMM 预言机的报价,但这又将风险点转嫁到 AMM 预言机上了。
表 2. Top3 去中心化借贷产品采用的预言机风控机制和时效对比
总结与思考
预言机作为重要的基础设施已被广泛提及,预言机的安全性决定了去中心化系统的抗击风险能力和运行的鲁棒性,预言机报价的准确性和时效对 DeFi 业务的运营起到了至关重要的作用,特别是以借贷产品为代表的项目很多依赖超额抵押模式,预言机对抵押物价值的评估直接决定了是否以及何时触发清算。通过对去中心化借贷产品预言机安全和时效性的分析,可见提高安全性的机制一定程度上会削弱时效,综合对比 Chainlink 的架构有望在这两个维度获得最优权衡,但仍需更多链下节点加入来提高其去中心化特性。在 Compound 的锚定预言机模式下,增加要求的信息源数量,并保留锚定 AMM 预言机的特性,减少波动带宽,可能是改进方向。
撰文:曹一新,就职于 HashKey Capital Research