去中心化预言机项目Chainlink的工作原理解析
扫描二维码
随时随地手机看文章
本文我们来从技术上简述一下Chainlink的基本原理。如果用最短的一句话解释什么是Chainlink,可以说Chainlink一个去中心化的预言机项目,所以为了理解Chainlink的工作原理,我们首先要明白什么是预言机。
预言机
预言机的英文为Oracle,和著名的数据库服务提供商Oracle(甲骨文)重名,但是两者除了名字相同以为并没有任何关系。
Oracle这个单词是什么意思,下面是我在vocabulary.com上查到的Oracle的含义:
Back in ancient times, an oracle was someone who offered advice or a prophecy thought to have come directly from a divine source. In modern usage, any good source of information can be called an oracle.
中文的大概意思是:在古代,oracle是一个提出建议或预言的人,他的建议或预言被认为是直接来自于神。在现代用法中,任何好的信息来源都可以称为oracle。
这样就不难理解了,Oracle传达了万能全知的神的旨意,而甲骨文最初就是用来占卜吉凶时的记录,也在当时也被认为是神谕,传达了神的意思。说以不管是“预言机”还是“甲骨文”都表达了“信息源”的意思。
计算机领域内的预言机一词,最早是图灵提出的。图灵在图灵机(Turing Machine)的基础上,加入了一个称为预言者(oracle)的黑盒,组成了预言机(Oracle Machine)。所谓预言者,是一个可以回答特定问题集合的实体。即它可以向图灵机系统内部输入信息,帮助图灵机完成运算。以太坊的智能合约是“图灵完备(Turing Complete)”的,某种意义上可以看做一个图灵机,所以以太坊的设计者借鉴这个概念,把向“图灵完备的智能合约”这个图灵机输入信息的也被称为预言机oracle。所以说“预言机”这个名字并不是区块链技术领域内的独创概念,它来源于非常早期的计算机抽象设计,在密码学等领域内也都有类似的概念。
而在区块链领域,预言机被认为是可以为智能合约提供外部数据源的系统。从传统技术架构方面来看,预言机是连接智能合约与区块链外部世界的中间件(middleware),是区块链重要的基础设施,它的作用是为区块链上的智能合约(Smart Contract)提供数据信息的。
正如以太坊的定义,区块链是一个交易驱动的状态机(a transaction-based state machine),它能做的事情非常简单,就是通过向区块链提交事务/交易(transaction),来将区块链从一个状态转变成另一个状态。为了保持共识,EVM的执行过程必须完全确定,并且仅基于以太坊状态和签名交易的共享上下文。这产生了两个特别重要的后果:一个是EVM和智能合约没有内在的随机性来源;另一个是外部数据只能作为交易的数据载荷引入。用通俗的话讲,区块链没有主动获取数据的能力,它能用的只有区块链自己本身的数据。数据的缺失导致智能合约的应用范围非常少,目前大部分的应用都是围绕着token来展开的。
区块链的确定性的意思是,在任何节点上,只要连入到区块链的分布式网络中,它就可以同步所有的历史区块,回放出一套完全相同的账本。换句话说:在没有互联网连接的情况下,给定完整的块,节点必须能够从头开始重新创建区块链的最终状态。如果账本在形成过程中,依赖于某个外部的API调用结果,那在不同时间不同环境下回放的结果就会不一样。这种情况是区块链所不允许的,所以区块链在设计之初就没有网络调用。
那么要实现向区块链提供数据,应该怎么做呢?区块链能留下的只有账本,而区块链所能输入的只有交易。我们就从这两个方面入手。
几乎每一个合约系统,都会有事件记录的功能,比如以太坊中的EventLog功能。
下面我们通过一个例子,来介绍一下预言机的基本原理。我们在以太坊链上建立一个用户合约,它需要获取到某个城市的气温数据。当然,智能合约自己是无法获取到这个发生于链下真实世界中的数据信息的,需要借助预言机来实现。智能合约将需要获取天气温度的的城市写入到EventLog中,链下我们会启动一个进程,监听并订阅这个事件日志,获取到智能合约的请求之后,将指定城市的温度,通过提交transaction的方式,调用合约中的回填方法,提交到智能合约中。