预言机简介

1. 为什么需要预言机

区块链是一个完全封闭的环境,在智能合约执行的过程中,不能引入不确定性,也就是说不能出现网络访问,因为网络访问是不确定的。

如果智能合约的执行结果不是确定的,那么就有可能造成节点之间数据的不同步。但是随着智能合约不断的发展,链需要从真实的实际去获取信息。

这些信息有可能是币价信息、股价信息、天气、真正的随机数等等。而智能合约获取这些数据的时候,需要通过确定性的方法,对于每一次数据的获取,所有节点获取到的数据是一致的。

为了达到这个目的,就需要预言机(oracle),这里的预言机不会预测任何事情,只是会将现实世界的数据传输到链上,供链上的智能合约使用。

2. 预言机的几种实现方法

预言机的实现原理其实都类似,一般来说会包含三个步骤:

  • 从链外的数据源搜集数据
  • 将数据签名传输到区块链网络中
  • 智能合约获取数据,在合约中使用

因为智能合约本身是无法访问网络的,只能让预言机通过本地读取的方式来获取数据。而预言机服务本身有一部分也是区块链网络中的智能合约,这些智能合约会与链外的预言机网络进行交互。

预言机提供的数据获取方法大体上可以分成三类:

2.1 直接读取

这种方式通常用来获取那些不会改变的数据,比如某个人的生日、学历证明、出生地等等信息,这些信息确定后应该就不会再改变了。这类的数据通常只需要写到链上一次,然后就可以供其他的合约使用了。这些数据通常不会直接写到链上,而是会通过加盐再进行 hash 运算,最后只存储一个 hash 值。

这样做的原因有两个,一方面,可以减少数据的存储量,另外,出于隐私的保护,毕竟一些数据上链之后,就会永久存在了。

这样的好处在于,不需要合约之间进行频繁的交互,既节约时间,也节省成本。但只有一些特定的数据能够采用这种方式。

2.2 发布与订阅

很多数据并不一成不变的,比如天气信息、股票信息、币价信息,都在不断的变化,因此预言机网络需要不断的到链上来更新数据,每一类数据都可以看做是一个主体。而对某些数据感兴趣的智能合约则会订阅这些主题,在需要这些数据的时候来取。

还有一些合约可能会去监控这些数据的变化,那就需要不断的来轮询订阅的数据主题,这样可能会有比较高的成本(数据的轮询也是在运行代码,智能合约只要运行,就会产生成本)。

2.3 请求与响应

这也是获取数据最复杂的一种方式,这种方式用于获取一个独一无二的数据,或者数据量太大,无法全部写到链上。

比如常见的获取随机数。在智能合约中获取不到真正的随机数,需要从链外去获取。

这种模式中,预言机会接收其他合约的数据查询请求,然后预言机网络监听区块链网络相关的交易,如果发现数据请求,就会检查请求,比如是否已经付款。确认无误之后,就会将数据回调给请求数据的智能合约。

3. 预言机的挑战

预言机的最大挑战在于,怎么确保预言机提供的数据是可靠的。

从这个角度上来说,预言机可以分为两类,一类是中心化的预言机。我们通常会假设这个预言机不会造假,比如某个政府部门、大学等等。中心化的预言机会从两个方面来保证数据的可靠性。一方面通过签名来保证数据没有被篡改。另外一方面会提供一个可信的执行环境。

但是这样并不足以解决全部的问题,因为这些数据都需要信赖一些机构,没有办法保证这些机构不会造假,而且中心化的预言机容易出现故障,一旦出现故障,对链上的交易会产生很大的影响。

4. 总结

区块链外信息写入区块链内的机制,一般被称为预言机(oracle mechanism)。

目前讨论得比较多的预言机有两类。一是依赖某一中心化信息源(比如彭博、路透),但这与区块链的去中心化宗旨背道而驰。二是将区块链外信息离散化后用经济激励和投票写入区块链。这类机制依靠群体智慧,根据投票结果对奖惩投票人,投票越接近全体投票的平均值、中位数或其他样本统计量的投票人越有可能得到奖励,反之就越有可能被惩罚,以此来激励投票人认真投票。隐含假设是,参与投票的群体在投票时不存在系统性偏差。但这一假设在现实中不一定成立,因此至今没有普遍适用的去中心化预言机方案。

猜你喜欢

转载自blog.csdn.net/nzyjava/article/details/125759003