现有的区块链通常是一个独立闭环的系统,它的账目都是在链上自发产生和结算的。要想让区块链应用到更多领域,预言机是整个生态中必不可少的重要环节。只有当区块链与外界连通,才能赋能实体业务更多的可靠验证和计算能力。
预言机(oracle mechanism)是链外信息写入区块链的一种机制。
闭环运行的区块链
在区块链账本上,所有的账都必须有一个起始,其他的账都是“起始账”的延伸。最初的 50 个比特币就是在比特币的创世区块(Genesis Block)上产生的,之后它们在区块链账本上流通,从 A 账户转账到 B 账户,又从 B 账户转到 C 账户。
创世区块即比特币的第一个区块,是比特币区块链的开始。
又如在以太坊上,我们使用智能合约发行代币,代币一般使用铸造函数(mint)发行到区块链上,铸造函数(一段程序代码)的运行结果就是代币的起始账目,当铸造成功后,代币就具备了在以太坊上流通的特性。
不管是比特币还是以太坊,现有的区块链系统都具有这种闭环运行的特性,即账目的产生需要一个起始。如果我们更宽泛的看待这个问题,就会发现区块链上的事物(数据)都是在区块链之上依据一定的规则“凭空”产生的,基于这个“凭空”的开始,才有了后面整个过程。
可以看到状态的起始、变化和最后的终止都运行在闭合的区块链中。因为区块链的闭环运作模式,让现有的互联网、传统的经济要素都难以接入。那么,区块链的应用就只存在两种方式:
在闭环中完全重塑一种新的机制
将现有机制中的要素映射到闭环系统中
重塑
比特币 ,以太币是区块链应用的经典案例,它们的产生就是重塑“货币”的过程。通过使用区块链构建的代币系统,可以在不依赖外部数据的闭环中运行。代币通过挖矿等规则“凭空”产生(消耗电能),得益于区块链共识算法,代币的所有权不受第三方控制,只要保存好自己手中的私钥,其他任何人都不能挪动或者销毁这些代币资产。这些在区块链上重塑的代币由于得到社会的广泛认同,产生了价值,并得以流通。
这种重塑已经产生巨大的能量,对现有的金融乃至社会认识都产生了巨大的影响。而在代币重塑之上,智能合约和更多创新机制在不断的孕育和成熟。
链上重塑的事物都具备闭环中运行的特点,它们可以不与其他系统进行技术上的交互,它们由人们共同的认识产生了新的价值,成为一种普世的新机制。
映射
映射是一种更通用的区块链应用方式,也是一个必不可少的方式。
想象我们在区块链上设置了一个体育比赛颁奖程序,奖金可能是比特币或者以太币。奖金的颁发需要根据链外的比赛结果进行结算,因此我们需要将比赛数据映射到链上。在颁奖过程中,程序获得映射数据后才能计算并执行奖金的分发。
另一种场景是资产映射。如房屋一类的固定资产,其产权是在国家统一登记颁发。如果这类资产能映射上链,资产的权属证明和产权交割都会变得极其快捷和方便。
将链外数据或实体映射到链上,是将区块链应用和外部世界链接的重要方式。
重塑和映射,不是二元择一,不是非此即彼的单项选择,它们往往相互交织、彼此结合,创造出新的模式。
区块链提供了透明和可信的计算能力,由于其闭环运行的特性,当数据本身就在链上产生(如代币),整个计算的结果自然是准确可信的;但是如果业务涉及链下数据,如何确保数据的可信就是一个重大的议题。预言机的功能就是将链外数据链接到区块之上,如何建立一种准确和可靠的链接机制是预言机设计的根本目标。
注意,预言机并不是映射的唯一方式。很多场景,如房屋产权可能只需要一个中心化的权威机构直接将数据打包到区块链即可。
Chainlink 如何链接外部数据
Chainlink 的目标是建立一套去中心化的预言机,为智能合约提供链外数据访问的能力。
机制概览
Chainlink 的机制如下图所示:
链外数据
链外数据可以是互联网、支付机构、物联设备或者不同种类区块链(跨链)提供的 API 接口。可以是任何可以读取的数据源。
外部数据适配器
外部数据适配器是链外数据的“翻译”,将外部数据转化为 Chainlink 节点中的统一数据结构。适配器可以用任何语言编写。
Chainlink 节点
Chainlink 节点会订阅区块链产生的事件。Chainlink 收到指定的事件后,会进行任务调度,使用数据适配器获取链外数据(一般情况下 Chainlink 可直接读取开放的 API,在特殊情况下才会使用外部数据适配器)。Chainlink 节点需要包含一个热钱包用于交易发送,将外部数据写回产生事件的区块链上。
区块链节点
为 Chainlink 节点提供可监听的事件,同时负责广播 Chainlink 节点的数据写入交易。
数据的请求和写入
Chainlink 使用了请求响应模式,即当客户端发起一个请求后,Chainlink 接收请求,执行外部数据功功能,并将数据写回链上。
当前的 Chainlink 主要构建在以太坊网络上。请求响应机制需要在以太坊网络上部署「客户端合约」和「Oracle 合约」。客户端合约用于数据请求的发起和数据结果的消费;Oracle 合约会产生请求事件,供 Chainlink 进行监听,同时也作为 Chainlink 写回数据的中转站。
交易过程如上图所示:
1.发起数据请求到客户端合约
2.客户端合约向 Oracle 合约发起调用,Oracle 合约接受交易后产生事件
3.Chainlink 监听到 Oracle 合约产生的事件,进行外部数据获取,并将数据写回链上
4.数据通过 Oracle 合约写入客户端合约
最终,客户端合约中的数据更新为本次请求获得的最新数据结果。
多数据聚合
上节介绍的请求响应过程只有一个 Oracle 合约和一个外部数据源,这时并不能完全保证数据的准确性和可靠性。为了获得更高的准确性和可靠性,可以使用更强大的多数据源客户端。
多数据源客户端也是以太坊上的一个智能合约,相比普通客户端,它的一次交易会向多个 Oracle 合约发起请求,每个 Oracle 合约都会产生各自的事件。通常,一个 Oracle 合约代表着一个数据提供者,每个 Oracle 合约之后的数据提供者监听到事件后,各自去获取不同的外部数据,数据提供者将数据回写到自己的 Oracle 中。最终,会有多条数据结果汇聚到客户端合约。
在多数据源客户端合约,我们可以编写一系列的聚合规则。比如:收到多个数据后去掉异常值,计算剩余数据的均值作为结果。合约的聚合规则可以灵活定制,想要向哪些数据提供者发起请求也可以进行配置。
Chainlink 对数据提供者有一套的罚没机制,并希望构建强大的声誉系统对数据提供者进行评估。这些功能将在 Chainlink 节点上实现,新的功能还在不断的开发和改进中,本文不再详述。
该机制目前较大的缺点可能是成本问题,客户端对每一个 Oracle 的请求都会收取 0.1 的 LINK 币作为费用,多个 Oracle 聚合时成本较高;同时请求响应模式也有一定的延迟,从请求发出到数据写回通常需要经过几个区块的间隔;最后一点缺憾是不同的客户端请求同一个数据会造成同一数据重复写入区块,造成一定的资源浪费。
不论如何,Chainlink 创建了一种智能合约主动获取链外数据的机制,这些链外数据几乎可以来自任何数据源。同时,Chainlink 提供了一种去中心化的解决方案(多个 Oracle 的聚合),提高数据准确性和可靠性。
打破边界
任何的数据源,不管是来自互联网,API 产生的行情、新闻、舆论数据;还是各种物联设备,使用传感器获取的定位、速度、温度、照片,人类的心跳、血压;不管是任何数据实体、物理对象乃至智能设备采集的人类体征,都可以借助预言机发送到智能合约,创建出由数据驱动的智能合约。
支付、交易、保险、治理、游戏所有的一切都在使用传统账本理念,它们都通过中心化的价值协商进行价值交换。为了保证账本准确性,保证整个价值交换系统的可靠性,我们耗费了大量的资源去构建复杂的规则,以求解决多方的冲突和纠纷。这套传统机制的效率或许已经接近极限,其效用几乎达到了最大化,最终所产生的摩擦仍旧消耗着巨大资源。打破边界,使用区块链的共识机制,借助预言机和智能合约,我们或许可以创建一个互联、安全、数据驱动的全新价值交换体系,在一个新起点之后,或许会少一些冲突和纠纷,释放更多的创造力。
预言机打破了区块链和外部世界的边界,将区块链可靠的验证和计算能力赋能更多应用。