NEST Protocol:一种分布式价格预言机网络
在公链系统里,链上数据并未指明现实世界的“事实”,比如“地址A转给地址B若干数字资产”,除了这句话本身外,没有额外的信息,既不能指明是Bob转给了Alice,还是Alice转给了Jack,也没有任何链下的事实,因此一些依赖于事实的服务在链上便无法进行,比如抵押借贷需要依赖的平仓价格,在链上并不能自动产生,因此也就无法被引用。如何将链外的事实以一种有效的方式同步在链上产生,并使得二者保持一致且防范攻击,便是智能合约应用的终极挑战,这一方案往往被称之为预言机模型。我们在本文中提供一种全新的分布式价格预言机的解决方案。
由于一切金融衍生品都需要价格数据,特别像稳定币、期货等智能合约资产,更需要价格进行清算,可以说价格决定了金融衍生品的核心风险,因此本文提供的价格预言机方案,对未来链上金融的重要性毋庸置疑。
一、价格oracle的挑战目前行业常用的价格预言机,一般是由某些机构或者“可信”节点采纳中心化交易所的价格,以数据的形式上传到预言机合约,以备其它合约调用。此方案存在一个根本性的问题,即价格的验证并不是直接的,而是通过对上传者进行验证的方式间接保证了价格的真实有效,我们将此方案称之为间接预言机。间接预言机的另外一个问题是,节点的信用风险决定了价格的攻击成本,如果该价格衍生了 1 万亿单位的资产,则节点的信用也应当与之匹配,这在现实中显然是不可能的,无论采用怎样的节点随机性都无法保证,这是本质问题,不是技术问题,因此间接预言机只能用于小规模的、非金融属性的场景。
是否存在一种对价格直接进行验证的预言机方案,以保证价格的真实有效以及足够及时?其次,该方案是否能够将攻击成本提升到一个极高的程度(最好接近无穷大)?最后,该方案是分布式的,即不存在中心化的风险。
在解决这一问题前,我们可以对所需要的价格及预言机方案进行提炼:
1) 价格具备准确性:能真实反应市场价格
2) 价格具备灵敏性:对市场价格的反应足够快
3) 价格具备抗攻击性:扭曲或者影响真实价格的成本极高
4) 对价格进行直接验证:且验证者是任意第三方,同时不需要审查或门槛
5) 报价系统是分布式的:不需要审查或门槛,可以自由进入或退出
原则上,1-3 不可能同时完美实现,但我们可以在三者中某一点上做出适度让步,以换取 1-5 的成立。
二、NEST 的解决方案NEST 采用了一种分布式报价、套利者验证吃单、链式价格以及资产级数增长的方案来解决预言机的问题。考虑到当前金融资产最为集中的公链为以太坊,我们以以太坊网络为例,对整个方案进行说明,该方案由一整套 NEST Protocol 组成,包含以下模块:报价工厂合约、报价合约、价格合约、数据合约。由此预言机协议形成的价格为 NEST-PRICE,这是对整个行业基础设施的一个突破性设计。
1) 角色定义
这里有几个角色需要定义:
报价者:报价者分为两类,第一类为首次报价者,通过提供双向的资产,以及资产之间的价格关系,来获取报价奖励,即 NEST,这一类报价者需要支付一定的佣金。第二类为成交报价者,即通过与之前报价者的资产进行成交,并强制跟随报价的,这部分报价者和下面的套利者一般是同一类,不用支付佣金,也不参与挖矿。报价者的集合记为 O。
套利者:如果报价者的报价,偏离市场价格,套利者则可以通过与报价者报价进行成交并在交易所反向交易来完成套利。套利者在成交的同时,需要强制报价,该报价不用支付佣金也不参与挖矿。套利者集合记为 A。
价格引用者:由于 NEST-PRICE 在链上可被引用,且具备独特性,因此引用该价格者,即是 NEST-PRICE 用户,无论是 2B 还是 2C,价格引用者将为 NEST-PRICE 的使用付费。价格引用者的集合记为 C。
2) 报价挖矿
以 ETH 对 USDT 为例,某个首次报价者 o,打算提供的价格为 1ETH=100USDT,此时他需要将报价的资产,ETH 和 USDT 打到报价合约里,规模为 xETH 和 100xUSDT,支付的佣金为 αxETH,按照支付的佣金规模参与挖矿,获得 NEST。整个过程是完全开放的,即任何人都可以成为 o 的角色,价格和规模由其自主设定。
报价者一旦将资产和价格提交到报价合约后,任意套利者 A1 认为该价格有套利空间,便可以按照 O 报价 1ETH=100USDT,成交掉 ETH 或者 USDT。这一机制,保证了报价者的报价要么是市场上的公允价格,要么是自己认可的两种资产的等效价格(即在 o 看来,1ETH 和 100USDT 是等价的,所以无论套利者成交哪一种资产都是一样的),这一过程即价格的验证期,也是 3)里定义的价格生存周期。
用公式表达如下:报价者 o 报价 p,即 1ETH=pUSDT,资产规模为 xETH,则对应 USDT 数量= x * p,参与挖矿的佣金规模为 w = α * x,套利者 a 可以以价格 p 成交 xETH 或者 x * p 的 USDT。
3) 价格生存周期
报价者的资产并不是一直放在合约里等待成交,这是有风险的,因此验证期并不是无限的,而是在给定的时间内,这一时间周期决定了两点,其一是报价者承担的风险周期,其二是价格的灵敏度,我们将此周期称之为价格生存周期,记为 T0。一旦超过价格生存周期,没有被成交的价格才能被价格算法收录,也就是说,如果报价在价格生存周期内被其他人成交,则该价格将不被采纳。超过价格生存周期后,报价者的剩余资产,可以随时取回。
一般来说,按照当前对价格的需求,将 T0 设计成 10 分钟或者 5 分钟都是合理的(根据 ETH 性能和市场深度可以调整及优化,最佳的当然是 1 分钟以内了),因此每次调用的价格,原则上将相比市场即期价格(假设外部交易所存在这种即期市场价格,虽然其价格并不一定代表“市场”)延时 5-10 分钟,这对于金融衍生品是可以接受的(想想数万亿的股票抵押借贷选择的平仓价取的是各种20日、5日均价等,5-10分钟延时是高度灵敏的),也是前面提到,1-3 不可能同时满足,我们牺牲了 5-10 分钟的灵敏性以换取整个价格预言机的成立。而间接预言机也做不到随时随地的报价,其价格间隔时间往往更为迟钝,如果还要使用价格回滚检验,则更加迟钝。
4) 套利报价及价格链
根据上面约定,套利者在对某个报价者价格成交后,需要强制报一个新的价格(可以理解为,套利者销毁了一个报价,就需要留下一个新的报价),如 a1 与某报价者 o 的价格 p0 成交( o 的报价规模为 x),他需要立马报一个价格 p1 到合约内,其规模为 y1,即需要将 y1个ETH 以及 y1*p1个USDT打到合约中,但此时不必再支付佣金,也不参与挖矿。如果有套利者 a2,与 a1 的报价成交,他就需要立马报价 p2,其规模为 y2,如果类推,就形成了一个以 TO 为最大报价时间间隔的连续价格链:p0—p1—p2...,报价资产链为 x—y1—y2...
5) 抗攻击算法
考虑一种情况,即攻击者恶意篡改某个正常报价 p0,将其改变为 p1,或者攻击者恶意成交,以期望价格一直不会被采纳(因为价格被成交了就无法采纳),如果由该价格衍生的资产规模较大,攻击者就是牺牲掉 P1 与 P0 的价差,足以换来巨大收益,这样价格机制就会失效(不敢采纳)。如何防范此种攻击?
我们设计一种机制,通过提高攻击者的成本来实现。首先,价格链本身就是一种抗攻击机制,即攻击者攻击完价格后必须留下一个价格以及该价格对应的资产,也就是说,攻击者攻击后,要么留下正确的价格,要么留下一个套利空间,由市场来平抑。其次,我们为了放大攻击者的成本,对套利者套利后的报价规模进行如下安排:套利者成交的规模为 y1,则强制报价的规模 y2=βy1,其中 β>1,即套利者必须以成交规模的一倍以上规模报价。我们以 β=2 为例,初始报价为 x=1个ETH,则全部成交的情况下,y1=2,y2=4,y3=8...以此类推。恶意攻击者要么暴露给市场极大的套利机会(规模以级数上升),要么在平价(市场价格)的情况下不断动用极高的资产进行自成交,以延缓价格被采纳的机会。
目前在 ETH 上每个区块最多可以报价 5-10 笔,报价也是分布式随机进入,如果假设每个区块有1-2 笔进入,单笔平均规模是 10个ETH(最小1个ETH),T0=5 分钟,理论上攻击一个小时价格的资产规模,最大将接近 2^12 * 50 * 10 个 ETH,即近 200 万 ETH,这仅仅考虑套利者成交时间也需要 T0,如果套利者足够快,则规模将更大(如果合理套利者与攻击者轮流报价,且套利者迅速成交并留下正确价格,则该数据为 4^12 * 50 * 10)。如果 β=3,则该数据趋近于 ETH 的数量极限,这种抗攻击性是任何中心化交易所都做不到的。
6) 价格算法
价格算法是对度过生存周期的报价进行采用,并按照一定算法形成的,假设某一区块的报价中(包括原生挖矿报价和成交报价),在生存周期内存活的价格序列(即没有被成交)为 p1,p2,p3...,对应的资产为 y1,y2,y3...,则该区块价格 P = ∑pi*yi/∑yi,如果该区块没有报价,则沿用上一个区块价格。
我们同时提供两种均价供价格使用者引用:
连续 N 个区块的算术平均价格 Ps = ∑P/N
连续 N 个区块加权平均价格 Pm = ∑P*Y/∑Y,其中 Y = ∑yi,为上述生存报价。
7) 激励及经济
首次报价者通过支付 ETH 佣金,以及承担一定的价格波动风险来获得 NEST,而套利者则基于价格的偏差计算直接的获利,并承担成交报价的风险,因此对套利者而言,其成本收益相对较为清晰。对首次报价者而言,其报价挖矿的模型需要相应的经济学基础。
我们将挖矿者贡献的所有 ETH,记为 X,定期(一般按周)全部返还给 NEST 持有人。该过程构建了一个自动分配的模型,从而使得每个 NEST 具备了内在价值,该价值在链上可证。但仅仅依靠报价挖矿者的 ETH 是不足以完成逻辑的闭环的,这就回到我们构建价格预言机的初衷:链上的价格事实对所有的 DEFI 产品都是根本的需求,几乎可以说是 DEFI 的最重要的基础设施,因此任何DEFI开发者或用户在调用 NEST-PRICE 时候,都应该支付相应的费用,此部分收益记为 Z。因此 NEST 对应的价值记为 X+Z。而从总体上来说,获得 NEST 支付的成本为 X,即 NEST 从总体上是创造了价值的。
可以理解成 NEST 的整体价值大于整体成本,但对于每个挖矿者而言,它的成本是不确定的,因此这里就存在交易的空间,以及挖矿者的决策差异,因此不同成本的 NEST 所有者在整体价值大于整体成本的背景下,进行博弈,从而达到均衡,这种均衡类似于股票市场的均衡。
NEST 整个系统的所有 token 全部由挖矿产生,不预留或者预挖,因此所有产生 NEST 的成本全部返回给 NEST 持有人,NEST 只是用于激励。NEST 模型实现了完全的去中心化,不对任何人设置门槛,其特点与比特币类似。NEST 协议升级采用 DAO 的方式,即任意发起,社区投票,按照一定比例通过并运行,一般为 51% 。
三、NEST-PRICE 的应用当我们拥有了链上价格时,一些依赖于全局变量的DEFI产品便可以设计了,在这里我们简单列举几类:
均衡币:一种通过超额抵押,以及市场套利机制形成的代表了经济均衡的数字资产,该资产代表了价格之间的均衡兑换关系。均衡币可以视为链上的计价单位,由 token 生成合约,套利机制及反馈修正机制组成,除了其风险收益结构比较稳定外,其重要意义在于:首先是完全内生的经济单位,跟随整个公链如以太坊经济体变化而增加或减少;其次是在链上可证,且风险收益结构不同于 ETH。
去中心化交易:传统的去中心化交易以点对点报价撮合为主,此方向实为错误,因为现代交易所的核心是双边拍卖,拥有对报价双方的价格强制排序和强制成交的特点,而这一特点涉及的计算特点与区块链当前串行排队运算的机制不匹配。有意义的去中心化交易应该是做市商制度的,即对于报价的双向强制接纳,这一点在我们的报价机制里可以完美的实现。
自动结算型抵押借贷:由于拥有了链上价格,涉及到平仓或者自动结算的借贷合约,即可引用该价格完成某些约束条件的触发,使得借贷行为不局限于互换这一期权结构。
期货:一种分布式期货的模型,类似于均衡币,引入任意第三方的套利,能够放大对远期交易的交易规模,或者直接捕捉交易价格波动的收益。这在之前是不可能被设计出来的,一般意义的期货都需要中心化机构进行强制平仓等,但分布式期货不承担中心化风险。
以上仅以金融领域最基础的产品为例,通过 NEST-PRICE 的导入,实现了完全去中心化的金融产品,且不同于之前最简单的点对点的交易,因为有全局变量的引入,整个 DEFI 便进入快车道。至于为何 DEFI 需要全局变量,这是因为金融本质是一般均衡的,而非局部均衡,不是简单的局部供给需求关系决定,需要基于全市场的套利机制完成有效定价,不是商品经济的规律,因此简单的点对点交易并不能解决根本的金融问题,而既要不承担中心化风险,又要具备一般均衡特征,就需要类似价格等全局变量了,这一变量不能中心化的引入,因此我们的预言机方案是整个去中心化金融领域的根本性基础设施。
四、关于 NEST-PRICE 的引用风险和一切金融产品或者金融服务一样,NEST-PRICE 不可能没有风险,这里对 NEST-PRICE 的引用风险做出简单的描述,当然可能存在其它未被描述到或者认知到的风险:
1) 由于牺牲了有限的灵敏性,因此对于价格灵敏性要求极高的金融服务,在使用 NEST-PRICE 时,在极端情况下存在一定的价格波动风险。我们倾向于设计金融产品不要依赖于较为敏感的交易价格。
2) 市场套利机制的深度不够,即套利者不充分,明明巨大的机会,却没有人理会。这是需要市场接受度和认知度的,是行业发展深化的问题。
3) 虽然无法攻击价格,但可以通过攻击 NEST 来间接攻击价格机制,比如占有 51% 以上的 NEST,然后对重要参数进行修改,使得报价机制失效。这一问题可以通过必要参数被限定死,即使修改也无法改变整个报价激励机制,以及 NEST 规模导致难以实现 51% 攻击来解决。
-------
相关资料:
1、NEST Protocol 综述:
https://www.nestfans.com/wiki/nest_introduction2、NEST DAPP 官网:
https://nestdapp.io/3、NEST 爱好者论坛:
https://www.nestfans.com/