预言机 Oracle 是区块链中非常重要的一个功能,但我发现很少有人讨论,也可能很多人对此并不了解。而网上关于预言机的文章很少,很多也没有讲明白,甚至有些还是错误的。所以我整理了一篇详细的文章,分享给大家,相信看完一定会对 Oracle 有一个深层次的了解。
11 月 6 日,在中国人民银行发布的《区块链能做什么?不能做什么?》的报告中,是这样对预言机定义的。
区块链外信息写入区块链内的机制,一般被称为预言机 (oracle mechanism) 。
预言机的功能就是将外界信息写入到区块链内,完成区块链与现实世界的数据互通。它允许确定的智能合约对不确定的外部世界作出反应,是智能合约与外部进行数据交互的唯一途径,也是区块链与现实世界进行数据交互的接口。
听上去很难理解,我们举例来说。
大家会很形象的把公链比作操作系统(Windows、IOS、安卓),DAPP 类比的话就是 APP,那么预言机可以形象的比做 API 接口。API 是一组定义、程序及协议的集合,通过 API 接口实现计算机软件之间的相互通信。
这样类比虽然不准确,但意思就是预言机是区块链和现实世界之间的纽带,可以实现数据互通的工具。
跟别人提起预言机,很多人的第一反应都是预测市场,预言机这个名字确实容易想到预测。
Oracle 最初是来源于古希腊宗教,意为“神谕、先知、预言”。而在互联网领域,预言机(英语:oracle machine),又称谕示机,是一种抽象电脑,用来研究决定型问题。可以被视为一个多了个黑盒子(预言者)的图灵机,这个黑盒子的功能是可以在单一运算之内解答特定问题。
也许你会好奇这跟甲骨文公司有什么关系吗?其实没有关系。
Oracle 在中国叫甲骨文公司的原因可能是另一个故事。在中国商朝晚期,王室把在动物骨骼或龟甲上做占卜记事的文字叫甲骨文,甲骨文被英译为 Oracle bone ,后来 Oracle 公司到中国中译为了甲骨文公司。(很有道理的猜测 哈哈哈)
区块链是一个确定性的、封闭的系统环境,目前区块链只能获取到链内的数据,而不能获取到链外真实世界的数据,区块链与现实世界是割裂的。
一般智能合约的执行需要触发条件,当智能合约的触发条件是外部信息时(链外),就必须需要预言机来提供数据服务,通过预言机将现实世界的数据输入到区块链上,因为智能合约不支持对外请求。
具体原因是这样的。区块链是确定性的环境,它不允许不确定的事情或因素,智能合约不管何时何地运行都必须是一致的结果,所以虚拟机(VM)不能让智能合约有 network call(网络调用),不然结果就是不确定的。
也就是说智能合约不能进行 I/O(Input/Output,即输入/输出),所以它是无法主动获取外部数据的,只能通过预言机将数据给到智能合约。
我们通过一个例子来说明一下。
假设现在我被关进了一个小黑屋里(不要多想,只是例子