话说员外在2020年,有一天想带着自己的两房老婆去法国走走,结果飞机延误,耽误了半天时间。正在恼羞成怒的时候,员外的钱包里突然收到一笔转账,定睛一看,10个EOS,不仅火气全无,反而欣喜若狂,因为2020年的时候,EOS已经高达500美元了。员外细心一想,不对呀,这EOS哪来的?谁给我转的?
原来员外乘坐的这趟航班,是有一个智能合约协议的,只要航班延误超过半天,乘客就可获得 10 个EOS的补偿。
可是这个智能合约是怎么知道这趟航班延误了多久呢?这就是我们今天要说的 预言机(Oracle)。
我们之前已经讲过了智能合约,但是没有说到的是智能合约是在区块链提供的沙盒环境中运行的,而这个沙盒是一个封闭的环境,在这个环境中,智能合约是无法获取到链外数据,也就是区块链之外的信息。这使得区块链与外界之间仿佛隔了一道高墙,大大减弱了区块链与智能合约的实用性。
区块链上的数据都是标准化的,但是现实世界的数据则杂乱无章,最主要的是信息的可信度难以判断。但区块链是去中心化的,没有一个节点可以具有筛选和验证信息真伪的功能,这也是智能合约发展的一大阻碍。
为了能让区块链与真实世界产生关联,当现实世界的某些数据发生变化时,就能自动触发智能合约执行某些提前写好的功能,所以就需要一种能能监测到现实世界的数据、还可以把监测到的数据真实的发送给智能合约的这么一种机制,这种机制就叫 预言机。
有一句话流传的很广:我们不生产数据,只是数据的搬运工,但是我凭什么相信预言机提供的数据就真实有效呢?
我们都知道在 POW 机制中,如果矿工想作恶,那么它提供的数据会遭到其他节点的拒绝,而浪费掉自己的电力和时间。在 POS 机制中,因为需要交纳保证金,所以如果想作恶,也是要付出成本的。在DPOS 机制中,如果一个节点想作恶,不仅会被没收保证金,还会被取消记账的权利。
所以在预言机中,也有一些保证数据真实有效的机制,目前最常见的机制包括 多数据源互相认证、通过投票和奖惩的机制来减弱作假的动机,通过事先投资获得验证权的方式减少僵尸粉的影响。
尽管现在有很多尝试,但是预言机还是有一些问题的:
安全性仍然不够,被骗的可能性还是会比较高;假如存在这么一种情况,如果在一条链上,有一半以上的坏人,那么如何限制坏人作恶,保证这个系统的数据都真实可靠?
智能合约使用预言机来收集数据的成本,比在现实世界中直接获取还要高,如果激励不足会有人去做吗?