2020年2月16日,在以太坊区块高度9484688上,DeFi协议bZx遭到“攻击”,攻击者操纵多个DeFi项目上代币的价格,从而实现15秒内套利36万美元。
2020年2月18日,在以太坊区块高度9504627上,bZx再次遭到“攻击”,攻击者在bZx关闭了Fulcrum平台进行维护的情况下,借助Synthetix进行交易,最终获得64.4万美元收益。这一事件在整个DeFi世界引起巨大轰动,因为从整个操作上来说,攻击者所有操作无技术难度,使用的也都是所有人可重复操作的产品,只是利用了当时DeFi产品,尤其是bZx的规则漏洞。
从后续的各类技术分析来看,这两次事件一次是因为bZx本身产品漏洞,一次是因为被预言机攻击,但是两次攻击都将问题指向一个非常重要的DeFi基础设施-预言机。bZx是一个保证金交易协议,用户可以抵押一种币作为保证金,在某个杠杆下借出另一种币,其汇率由预言机提供。
在事件发生之前,bZx的这一预言机是由Kyber来作为预言机的,Kyber是一个去中心化自动化交易所,而目前基于AMM形式的去中心化交易所在资金池不足的情况下是非常容易被操纵兑换价格的,此次事件的攻击者也正是通过Kyber集成的Uniswap兑换池来操纵WBTC兑ETH的相对价格的。
2018年10月至11月,EOS生态在承接了以太坊Fomo3D类游戏后,大大小小的各类Dice项目纷纷出现,但同时也出现了非常多因为随机数问题而产生的被盗币事件。通过对事件进行分析发现,目前关于抽奖模块的开发,以太坊和EOS官方均未提供随机数接口,开发者需要编写随机数生成函数,这些函数往往利用区块信息作为参数,然后通过一系列运算得到“随机数”。
但是由于区块链项目基本都是开源,且大部分随机数函数都采用区块信息作为参数,导致了在同一个区块上,使用相同算法的随机函数将会得到同样的结果,攻击者可以利用这一特点,部署中间合约,不停尝试生成随机数,直到生成满意的随机数,再通过中间合约参与游戏获得收益。
Themis预言机作为连接传统世界和加密世界的重要基础设施,主要针对随机数预言机、链上资产预言机和可验证算力等场景。Themis Protocol是一个分布式预言机协议,协议包含如何成为数据提供者、数据指认验证、抗攻击算法和可验证随机函数VRF、仲裁协议等模块。
在随机数预言方面,Themis主要采用可验证随机函数VRF来进行结果输出:
数据提供者使用可验证随机函数生成随机数,将该随机数结果和质押的Themis原生代币一同发送到智能合约,从数据提交到预言机时间算起,任何一次数据提交的验证期都是有限的。验证期过后,没有被挑战的数据称之为生效数据。数据有效期内,按时间排续,用完后,后续请求拒绝。
对于数据提供者提供的数据,验证者可以随机进行验证,并将结果传入仲裁节点,仲裁节点对验证结果进行冲裁,通过则成为最终的预言机输出结果,无法通过验证则剔除该结果并罚没数据提供者质押的Themis原生代币作为数据验证者和仲裁节点的奖励。数据提供者提供的数据最终成为Themis预言机输出结果后,将可以获得Themis原生代币作为奖励。
关于可验证随机函数VRF的工作原理,可以理解为结合了非对称密钥技术的哈希函数。常规的哈希函数如SHA256是通过将数据进行函数运算后得到一个256位的2进制数字,用来验证数据间是否相等。但是对于一个理想的哈希函数,其值域应该是离散的、均匀分布的,给定不同的输入值,其输出值应该是没有规律且随机分布在值域区间内的。
同时有一种简单的哈希函数变种,即结合了密钥SECret的哈希函数,比如result = SHA256(secret,info),那么要得到结果result,仅仅拥有info是不够的,必须要知道secret才能计算出来,这就是带密钥的哈希函数。
可验证随机函数Verifiable Random Function(VRF)。简单来说,也就是结合了非对称密钥技术的哈希函数,比如result = VRF_Hash(SK,info),SK是私钥,不公开,秘密保存,和SK配对的PK是公钥,需公开给验证者。
具体的操作流程如下:
1、数据提供者生成一对密钥,PK、SK;
2、数据提供者计算result = VRF_Hash(SK,info);
3、数据提供者计算proof = VRF_Proof(SK,info);
4、数据提供者把result和proof递交给数据验证者;
5、数据提供者把PK,info递交给验证者;
6、数据验证者计算result = VRF_P2H(proof)是否成立,若成立,继续下面的步骤,否则中止;
7、 数据验证者计算True/False = VRF_Verify(PK, info, proof) ,True表示验证通过,False表示验证未通过。
所谓的验证通过,就是指proof是否是通过info生成的,通过proof是否可以计算出result,从而推导出info和result是否对应匹配、证明者给出的材料是否有问题。在整个操作流程中,证明者始终没有出示自己的私钥SK,验证者却可以推导出info和result是否对应匹配。
鉴于目前在区块链上无法进行有效的随机数生成,Themis的这一随机数预言机功能将可以为各类基于随机数为核心开发的DApp提供外部数据支持,让这类DApp在核心算法机制更加有保障。
在链上资产价格方面,Themis设计了一套完整机制来保证预言机最终价格的真实性:
1.报价者约束机制。Themis生态中任何人都可以成为报价者,但是报价者需要在提交资产价格的同时将Themis原生代币一同质押到智能合约,任何验证者认为该价格有问题都可以提出质疑。仲裁节点会根据报价所在区块确定报价时间,根据时间查询当前头部交易所在这一时间真实价格,若价格提供者的价格与真实值偏差大于阀值,将罚没该数据提供者所质押的原生代币作为生态奖励。若有恶意报价者想通过报价者这一身份影响最终预言机输出结果,则需要使用大量报价者身份并质押大量原生代币来进行操纵,但由于验证者和仲裁节点的存在,将使得恶意报价者最终损失所有质押的原生代币和其提交的虚假价格信息。
2.验证者约束机制。对于任何报价者提供的数据,验证者都可以进行质疑并提交仲裁,为了提高Themis的正常报价效率并惩罚恶意验证者,Themis Protocol要求任何验证者进行质疑时必须质押原生代币并提供一个新的价格数据和资产。同时,为了放大攻击者的成本,所有验证者的质押规模与前一轮报价者的质押规模之间采用倍数放大,倍数通常是个固定的常数,但Themis生态可以根据实际运行情况进行调整。以倍数为2举例,最初报价者质押资产规模n1,则针对其报价进行质疑的验证者在提出质疑时需要质押的资产规模为n2=2n1,针对该验证者的报价进行再次质疑时需要质押的资产规模为n3=2n2=4n1。随着挑战轮数的不断增加,恶意验证者为了维持其期望的恶意价格所付出的代价也会越来越高,且最终将损失全部质押资产。通过这一机制,验证者进行质疑后,要么留下正确的数据,要么损失更多质押的原生代币,市场上必然会有其他验证者来套利并修正数据。
代币经济
Themis通过设置数据提供者、数据验证者和仲裁节点并通过对应的代币奖惩机制来确保Themis预言机的数据是真实可靠的。MIS是Themis Protocol原生代币,主要用作数据提供者和验证者在生态中提供和验证数据时的资产质押和激励,同时也是外数据调用者调取Themis预言机数据时支付的资产,这部分收益将按比例分给数据提供者。
MIS总量10亿,其中10%用于早期项目推广和供数据提供者和验证者兑换以进行数据提供和验证,剩余90%全部由挖矿产出,其中75%直接奖励数据提供者和验证者,10%奖励开发者,5%作为仲裁节点奖励和生态激励。同时,Themis设计了累积奖金的机制:仲裁节点会随机选择部分提案,作为数据提供者给出错误的数据,当有验证者提出挑战时,系统不对数据提供者进行惩罚,而仅会用累积奖金奖励数据验证者。
挖矿经济
MIS总量中的90%全部由挖矿产出,75%由数据提供者和数据验证者获得,10%奖励开发者,5%作为仲裁节点奖励和生态激励。全部挖自以太坊1051499区块正式开启,开发者和仲裁节点及生态激励初始奖励25MIS/block,数据提供者和数据验证者初始奖励为20MIS/block。
开发者、仲裁节点及生态激励释放计划如下:
(每隔400万区块,单位区块奖励降低10%)
数据提供者及验证者激励释放计划如下:
对于数据提供者,可以通过提供可验证随机数或者对链上资产进行报价的方式获取MIS,调用Themis合约不需要支付费用,单需要支付以太坊gas费,每次调用合约需要质押最少100枚MIS,数据提供者可以获得挖矿的MIS计算如下:
N:当前区块包含的挖矿奖励数量;
y:当前区块与上一个含有挖矿交易区块高度差;
X:数据提供者MIS质押数量在当前区块排名;
M:数据提供者挖矿获得MIS数量;
假设一个区块中有12笔挖矿交易,根据每笔交易质押的MIS进行排名:
(MIS质押排名示意图)
持币排名是根据跳跃排名加权算法而不是用户持币量加权平均的,这是为了避免MIS被少数人所控制,避免垄断,打散大户。做到尽最大努力实现Themis的社区共赢。
(排名各分区示意图)
位于最佳排名区的用户将获得最大收益,这对于吸引更多的用户参与挖矿提供了很好的机制保障,同时也有利于数据提供者更加分散,从而确保了预言机体系的去中心化。