从名字看,很多人会认为,预言机是一种市场预测的工具,其实并不是如此,预言机其实是用于区块链网络中的一种数据服务。预言家的英文叫oracle,这个又与甲骨文公司的数据库同名,但是在区块链世界中,它们毫无关系。因为oracle这个最早出自于古希腊宗教,其含义就是预言。那么预言家到底是什么?我们用一句简单的话概括“区块链外信息写入区块链内的机制一般被称为预言机。”
预言机(Oracle)这个名字容易让人对它产生误会,其实预言机并不是用来预测什么的。预言机:是一个将数据从区块链外传输到区块链内的机制。
这么说可能更容易理解;预言机:是一个将数据从系统外传输到系统内的工具。
人们提起区块链,总是说它所有交易记录链上可查,安全透明,但是要知道区块链是一个确定性的,封闭式的系统,运行在区块链上的智能合约是无法直接从外部获取数据的,只能在一个封闭、孤立的环境中执行任务。而预言机就是一个能将链外数据真实输入到链内,保障链上数据真实性的工具。
通过一个简单的例子让你明白预言机是怎么工作的。比如我和小明在以太坊智能合约上面打赌,明天12:00北京是否下雨,根据程序设定,当时间到达12:00时,条件触发。
如果下雨,判我赢,我拿走奖励。
如果不下雨,判小明赢,小明拿走奖励。
这个过程是去中心化的,通过智能合约去分配竞猜奖励,不会有第三方进行操纵,但有一个问题,明天北京下不下雨的结果怎么写到链上,触发我和小明谁赢呢?如果帮忙写入结果的人和我串通一气,就算明天不下雨,也在链上写是下雨,判定我赢,那小明是不是输的很亏?
所以为了保证公平,我们挑选了10个人(随机安排的没有什么特殊意义)帮我们写入结果,帮忙写入结果的人每人质押十块钱,如果按照准确方法写入结果就能拿回质押的钱并且还能获得额外奖励,如果恶意写错误的结果,就会被扣除押金作为惩罚。这10个人做的事情就是简单预言机做的事情。
区块链的可溯源、防篡改等特性让数据变得可信,但如果原始数据出了问题,那区块链也不好使,预言机作为链下数据与链上数据的传导机制,将现实世界的数据准确无误的写入到区块链上,它的应用场景非常多,可以说一切需要与链下进行数据交互的 DApp 都需要预言机。
比如金融衍生品交易平台、借贷平台、快递追踪/IoT、稳定币、博彩游戏、保险、预测市场等,目前最主要的场景就是 DeFi,预言机准确的将交易价格信息,波动率等核心数据源提供给Defi协议,确保Defi协议顺利运行。
近两年,随着DeFi的崛起,“预言机”这个词再次走到台前。从去年3月起,预言机领域的龙头项目ChainLink其代币LINK从 2.1美元来到现在的32.3美元,涨幅超过15倍,在所有加密数字货币中排名第11位。在排名前100的币种中,预言机类代币有4个。
预言机的英文是“Oracle”,是神谕的意思。这个词也是源于一个希腊神话,据说在子民遭遇到困境的时候,会向奥林匹斯山上的众神祈求神谕,众神会给出一些指引,给子民提供解决问题的“信息”。
预言机也是引申的这个神话,是可信的数据提供商。预言机是链上链下相互链接的中间件,是区块链与现实世界数据交互的一个连接点。
区块链的闭环链式结构决定了其是一个封闭的环境,是无法主动获取链外现实世界的真实数据的。区块链技术要真正落地应用,就需要网络外部的信息来执行交易并提供人们真正可以获利的服务,这个提供信息的中间件就是预言机。
预言机主要做的事情就是处理区块链里智能合约提供的请求,把一些链外的信息和数据传递到链内。因此,预言机被认为是去中心化协议和区块链外部数据之间的桥梁,这也是为什么预言机是必不可少的原因。
从底层技术逻辑来看,预言机已经成为区块链世界的基础设施构件,区块链应用场景的拓展有赖于预言机的发展和它的数据维度的拓展。
为了更好的理解预言机这个概念,下面我们根据具体的分类来一起解读一下。预言机的分类有好多种方式,在这里使用的是数据的验证方式来进行分类。
1)直接数据验证预言机:在链上对于数据进行直接的验证,数据的提供方是直接在链上验证并提供的。这类预言机的典型代表就是NEST。
NEST是运行于以太坊上的去中心化的价格预言机网络,通过去中心化激励方案解决价格上链的问题。NEST 上的每一单报价都会经过全市场验证者的验证,报价只有通过验证期,经过验证之后才会在链上生效。
NEST的验证方式是一种完全的去中心化的方式,更加的去中心化、安全可靠、符合区块链精神。但是NEST的验证方式不可避免地存在一个缺点,就是依赖于以太坊网络,以太坊的拥堵、以太坊的高昂的GAS费都是不可控的,运营成本更高,只能服务于以太坊网络。
2)间接数据验证预言机:数据的验证并不是直接的,而是通过对上传者(信誉节点)进行验证的方式间接保证了数据的真实有效。我们最熟悉的预言机ChainLink就是采用的这种验证方式。
Chainlink采用与区块链相同的模式,建立去中心化的独立预言机网络。Chainlink网络中的预言机从多个预言机节点、数据源获取数据,将数据聚合,并将经过验证的聚合数据传输至智能合约,触发合约执行,以此来在整个过程中规避了中心化风险。
这种方式的好处是获取数据的成本相对会更低,数据提供的频次会更高,在性能上会更好。但是这种方式,并是不是直接的数据验证,还是依赖于节点的信誉,存在中心化的风险,在节点规模不够的情况下,作恶的成本相对来说比较低,安全性低。
预言机这个领域发展的比较晚,大都是在17年之后发展起来的,还是处在一个发展的早期阶段。预言机这个领域还存在着一些问题,还需要经过实践,来不断的调整、完善。区块链的未来应用场景会是难以想象的广阔,这就意味着预言机未来的价值也将是难以想象的,有着无比庞大的市场空间等待去开拓。
中心化预言机与去中心化预言机结构层次相同,均分为网络层、操作层、合约层以及应用层,分别对各层的基本组件和可信机制进行介绍。
在去中心化预言机可信机制中,合约层依托聚合合约中的数据聚合方式及声誉合约中的经济模型提高上链数据的可信性,设计方式多样,重点介绍多节点部署、门限签名技术和可验证随机函数。
如果我们要在智能合约上进行白菜交易,但是区块链上无法得知价格。但是在区块链下,作为交易双方的你我都能很容易的查到今天的菜价,但是我们无法相信对方的报价,这时候就需要一个第三方来告诉智能合约现在区块链下的正常交易价格,这就是预言机的作用。预言机相比直接从某个网站,平台抓取数据更准确。因为如果单个平台出现数据作恶(胡乱改写数据)或者平台崩溃,会导致整个智能合约崩塌,预言机是采用的是去中心化的数据收集。
目前市面上预言机的三种数据获取方式:
1.中心化机构提供数据
2.分布式的节点提供数据
3.多个联盟节点提供数据
这三种方式各有优劣,第一种方式通过中心化机构,例如天气数据我们通过气象局,股票数据我们通过证券交易所,通过权威机构获取,这种方式速度快便捷,但是非常中心化,如果中心平台出现问题会导致智能合约崩溃。第二种是分布式节点提供数据,这种方式是去中心化的获取方式,选出投票最多的数据为最终数据,不容易出现中心化作恶情况,但是效率较低,也有着较高的成本。第三种是通过建立可信任的联盟节点,这是一个折中的方式,去中心化的程度也比较适中。纵观三种方案,第二种分布式节点提供数据最符合Web3精神,也是目前运用最多的方案。
ChainLink就是目前市值最高的预言机的项目,在DeFi项目中起到了至关重要的作用。它的工作方式就是分布式节点获取数据。
Chainlink是去中心化的预言机网络,将区块链上的智能合约连接至链下数据。LINK是网络中流通的数字资产通证,用户使用LINK购买服务。
在链上,ChainLink有三大智能合约:声誉合约,订单匹配合约和聚合合约。声誉合约通过跟踪数据,与节点提供的信用表现,筛选出优质的节点作为预言节点。订单匹配合约是用户发布数据请求时,网络去帮助用户寻找合适数据节点提供商。聚合合约是用来进行数据整合,把多个节点数据进行汇聚,剔除错误数据,将可信的节点数据提供给用户。在链下,则就非常简单,主要负责监听请求,通过节点获取链下的数据。当然提供数据的节点也可获得相应的奖励link-token,保证了节点的积极性,增强了整个预言机的稳定性。
要了解Chainlink的价值和功能,就必须先了解一些相互关联的基本概念。我们先来说说智能合约。
智能合约是在区块链上预设的协议,合约对数据做出评估,当达到特定条件时自动执行。众筹就是一个典型的例子:如果在特定日期向智能合约存入特定金额的以太币,那么募集的款项就会打给筹款人;反之,则会退还给捐款人。由于智能合约是在区块链上运行的,因此合约内容不可篡改而且所有人都可以对其进行验证,合约各方高度信任彼此能履约,而且合约只有在规定的条件都达成后才会触发执行。
智能合约如果要连接到区块链以外的环境,就需要将链下数据转换成链上可以兼容的格式。然而,链上智能合约与链下数据互相不能兼容,这是导致智能合约一直无法得到广泛应用的最大瓶颈。
这时候就需要用到预言机了。预言机其实是一个中间件,它作为链下数据和链上智能合约沟通的桥梁,让彼此能够读懂对方的语言。
然而,如果网络中只有一台预言机,那么就会造成中心化的问题(即单点失效),而这个问题正是区块链智能合约致力于解决的根本问题。如果这台预言机出现问题或者遭到攻击,你怎么知道它给你提供是数据是否准确呢?如果智能合约的数据出现问题,那么智能合约本身再安全再可靠又有什么意义呢?
我们先简要总结一下智能合约和预言机的概念:
智能合约具有不可篡改性和可验证性,使用IF/THEN的代码逻辑,当设定条件满足时自动执行。
用来定义智能合约条件的数据原本来自区块链。
最近,区块链生态圈引入了预言机的概念,将链下数据传输至链上智能合约。
然而,中心化的预言机可能出现问题,因此会危害链上智能合约的安全性和可靠性。
Chainlink是一个去中心化的节点网络,通过预言机将链下数据传输至链上智能合约。
在这个过程中使用添加了额外安全层的硬件,规避了单一预言机可能出现的安全风险。
首先,区块链上的智能合约需要获取数据,因此会发送一个数据请求(即请求合约)。
Chainlink协议将数据请求注册成一个“事件”,然后在区块链上创建对应的智能合约(即Chainlink服务水平协议合约),获取链下数据。Chainlink服务水平协议合约会生成三个子合约,即Chainlink声誉合约、Chainlink订单匹配合约以及Chainlink聚合合约。
Chainlink声誉合约会查看预言机服务商的历史服务水平,验证其真实性和历史表现,并且淘汰声誉较差或可靠度较低的预言机节点。
Chainlink订单匹配合约将请求合约中的数据请求发送至Chainlink节点,并接受节点的竞标(这种情况下请求智能合约不会自行选择节点),然后订单匹配合约会选择适当数量和类型的预言机完成任务。
Chainlink聚合合约从所选择的预言机获取全部数据,验证并聚合数据,最后得出准确结果。
接下来,Chainlink节点会收到请求合约的数据请求,并用Chainlink核心软件将链上数据请求翻译成链下数据源可以读懂的编程语言。然后,翻译过的数据请求会被发送至外部API,以从数据源获取数据。收集完成后,Chainlink核心软件会将数据翻译成链上编程语言,然后再发送至Chainlink聚合合约。
之后的事情就开始变得有趣了。Chainlink聚合合约可以验证单一数据源或多个数据源的数据;另外,它还能聚合来自多个数据源的数据。
比如说,如果有五台预言机传输了来自同一天气传感器发送的结果,而另外两台预言机传输了不一样的结果,那么Chainlink聚合合约就会甄别出这两台预言机有问题,并且会剔除它们的结果。Chainlink节点就是以这种方式验证单一数据源的数据的。
Chainlink聚合合约可以对多个数据源反复进行验证,然后将所有经过验证的数据取平均数,聚合成单一数据。有些情况下无法对结果取平均值,但这里我们为了简化叙述,不对此做深入讨论。
除了数据源,Chainlink还建立了一个可靠高效的机制,向区块链上的智能合约提供准确数据。
那么LINK通证有什么用呢?
发起数据请求的一方会使用LINK购买Chainlink节点的服务。Chainlink节点操作者会根据用户对数据的需求量以及数据当时的市场价格来定价。
Chainlink节点操作者还会用LINK做保证金,担保他们的服务质量,这个机制也会激励节点提升服务水平。
Chainlink声誉合约在分配任务时会考虑节点的保证金金额(当然还会考虑其他因素)。保证金更高的节点更有可能被选中提供服务并赚取LINK。Chainlink网络还会没收问题节点的保证金,以惩罚其提供低质量的服务。
LINK是以太坊上的ERC20通证,可以用法币或其他数字货币进行交易。
Chainlink并非单体预言机网络,而是一个通用框架,可以构建出无数个去中心化预言机网络。
Chainlink各个预言机网络并行,互不依赖,将链下数据源和计算资源连接至智能合约。
Chainlink框架可以用来打造安全的预言机网络,为智能合约应用提供喂价、储备金证明、可验证的随机数以及选举结果等。
去中心化网络通常采用单体设计模式,即同一组节点共同协作,按照预设定的规则提供具体的服务。区块链就是典型的单体设计模式,区块链网络中的所有节点都执行一套标准化的运算,包括验证签名、计算区块哈希值,最终对交易验证达成全局共识。每个区块链节点都执行同样的确定性运算,最终达成共识,它们之间的主要区别就是运算规模不同。
这个模式也许对区块链有用,但对预言机网络却并非如此。预言机网络需要对来自非确定性的现实世界的数据达成共识,通常需要支付费用或获得许可才能链接至链下数据源。预言机不适合采用这种单体模式,因为并非所有节点都可以随时访问所有需要访问的链下资源。强迫网络中每个节点都花钱订阅用户所需的付费数据源,这个方法不适用大规模的网络。另外,许多数据集只对少数人开放,比如企业后端数据库。因此,采用单体设计模式的预言机网络只能限制其服务范围,确保其网络中所有节点都可以交付服务,比如只从免费的开源API获取数据,而这些API往往无法提供优质的数据,也无法保障连接质量。
为了打破这一限制,Chainlink另辟蹊径,开发出异构网络,网络中多个独立的预言机网络并行,互不依赖。任何一个预言机网络的运行都不会对其他网络产生影响。每个网络都是专门设立的,为某一智能合约连接至链下数据源和链下运算,因此开发者拥有极大的灵活性。Chainlink框架无须许可,任何人都可以在其中创建自己的预言机网络。这将驱动预言机网络创新,并使Chainlink网络不断向前发展。
Chainlink是一个异构预言机网络,可以灵活定制预言机网络。
这种异构模式的最大优势是Chainlink节点运营商可以定制节点服务。这可以提高预言机的成本效益,因为节点只需接入所在预言机网络要求的链下资源。比如,Chainlink喂价网络中的节点只需接入金融市场数据,而不用再接入体育比分、天气等其他不相关的数据。这样做可以降低运行Chainlink节点的门槛,也可以进一步使网络去中心化。当然,如果Chainlink节点希望同时接入多个数据源,他们也可以做到。
如果节点接入企业后端系统、物联网传感器和法币支付系统等需要权限的链下系统,那么它们可以将数据卖给智能合约。Chainlink网络通过这种异构网络模式支持数据提供商运行Chainlink节点,并将数据API直接卖给智能合约。
由于节点运营商拥有这样的灵活性,Chainlink可以将全世界所有数据传输至链上,极大丰富智能合约应用的类型。
运算指通过一组指令并按照一定逻辑实现的任意数学计算,比如一个等式或算法。运算会基于输入的数据输出确定的结果,即:如果满足条件x,则输出结果y。比如,一个最基本的运算就是在五个数字(输入)中取中位数(指令),最终得到结果(输出)。运算可以手动展开,不过如今大多数运算都是数字运算,即:通过代码的形式由计算机执行。数字运算可以是任何规模,小到你手上戴的电子表,大到训练高级机器学习算法的超级计算机,都属于运算的一种。
区块链是一种新型的去中心化运算类型,其管理的分布式账本中包含数字资产和数据。区块链也可以储存并处理最新的智能合约当前“状态”。你可以把状态理解成是应用在区块链账本中建立的一个内部账本,这个内部账本可以按自己的规则(即指令)在两个账户之间转移资产。智能合约的每次状态变更都需要在链上展开某种计算,比如:
验证私钥生成的签名(注:私钥即密码)是否与发起交易的公钥匹配(注:公钥即地址)。
确认公钥地址中的余额超过发送金额和交易费的总和。
基于用户输入的数据执行智能合约,然后基于输出的结果更新合约状态。
在出块过程中生成PoW哈希或PoS证明,在账本中添加一个包含用户交易的新区块。
验算区块中储存的所有交易,以检查网络中其他节点创建的区块。
虽然区块链可以为智能合约执行防篡改的计算,但是它本身也存在一定限制。比如说,高度去中心化的区块链可以保证计算过程具有抗操控性,但代价是交易成本高且速度慢。另一些区块链将交易吞吐量放在第一位,但代价是无法在链上完成更高级的计算任务,比如在端到端保障隐私或交易自动化。
与其让区块链执行所有合约交易,不如将许多计算任务放到链下执行,将最后的计算结果返回至链上。链下计算通常在中心化的Web2.0系统中展开,而这些Web2.0系统并不能保障与区块链同样高的安全性和不可篡改性。如果智能合约不能保证计算的防篡改性、透明性以及去中心化水平,那么区块链最初的价值就荡然无存。因此,如果智能合约为了扩展功能而将关键的计算任务放到链下执行,就要保障这些链下系统与区块链拥有同样的安全性、可靠性以及透明性。而信任最小化的链下计算,即预言机运算,在这里可以发挥无限价值。
预言机运算使用了去中心化的预言机网络(DON),为智能合约执行链下计算,并同时接入区块链实现信任最小化。因此,DON可以执行任何计算任务,并同时保障了可扩展性和隐私性,既实现了与Web2.0同样丰富的功能,又利用了区块链的各种技术和特性提升预言机运算的准确性、防篡改性、运行率和透明性。
DON通过与区块链建立同步,可以实现信任最小化,即可以保障运算会严格按照预定义逻辑执行。预言机运算使用与区块链类似的去中心化基础架构,实现信任最小化,避免单点故障,并严格遵守用户自定义的链上服务协议。另外,DON还可以使用多方计算、加密证明、防欺诈证明以及链上验算等方式,向区块链证明链下计算结果的真实和有效性。这些验证技术可以创建更多经济激励机制,提升透明性和问责制,比如触发智能合约中的各种加密经济奖惩机制。
除了信任最小化以外,预言机运算的另一个优势是它相比链上计算拥有极高的灵活性。区块链运算是非常标准化的流程,而预言机运算则可以采用任何设计模式,比如灵活调整去中心化水平、选择任意节点、自定义日程安排、预定义加密经济安全水平以及结合各种安全技术等。因此,用户可以根据自身需求、信任假设以及预算来优化预言机运算,在安全和性能之间达成平衡。
正如Chainlink 2.0白皮书所述,Chainlink网络的长期发展愿景是通过DON为链上提供外部数据并开展信任最小化的链下计算,以最终提升新老区块链应用的能力。为了实现这个愿景,Chainlink网络已经发布了一系列基于Chainlink预言机运算的服务,其中包括Keepers、可验证随机数、链下报告、外部适配器以及跨链互操作性协议。
Chainlink Keepers 是一个交易自动化解决方案,当预定义条件满足时会触发区块链展开运算。Chainlink Keepers使用预言机运算来监控链上和链下条件是否满足,比如时间(如:是否过去了24小时?)或事件(如:资产是否达到了某一价格点?)。一旦条件满足,Chainlink Keepers会向链上发送一条交易,唤醒智能合约,并触发合约运行一行预定义的代码。Chainlink Keepers的常见用例包括触发借贷协议清算贷款、触发去中心化交易平台执行限价单、以及结算预测市场。
Chainlink Keepers使用去中心化的节点网络实现信任最小化,在链下执行合约逻辑,然后在链上充分验证结果。Chainlink Keepers还会对其发送至链上的结果进行加密签名,用户可以通过加密签名来追根溯源;采用自动故障切换机制,如果一个节点未能响应,则自动切换至其他节点;并生成calldata确定需要执行哪一部分智能合约逻辑,以最大程度降低gas成本。有了Chainlink Keepers,DevOps团队就无需手动或通过中心化的服务器执行这些计算任务,因此可以大幅提升应用开发体验。
开发团队可以用Chainlink Keepers来开发自动化的智能合约
Chainlink可验证随机函数(VRF) 是专门为智能合约应用打造的安全可验证的随机数生成器(RNG)解决方案。Chainlink VRF在链下计算随机数以及相应的加密证明,然后在链上进行验证,最后发送至用户智能合约。如果随机数被修改,那么其加密证明也会随之失效。因此用户、预言机或智能合约开发团队都无法操纵随机数。智能合约可以在使用随机数之前充分验证其真实性。
接入Chainlink VRF的常见用例包括:在铸造NFT时公平地分配稀缺属性;为配对游戏玩家和开箱环节引入公正的随机性;在抽奖和无损储蓄游戏中随机选出中奖者。
Chainlink链下报告(OCR) 是一个预言机网络,提升了Chainlink去中心化预言机网络的链下计算效率。OCR让Chainlink节点可以使用点对点网络,在链下将数据聚合成一份报告,然后采用节点轮转和故障自动切换机制,在一笔交易中将报告发送至链上。OCR利用预言机运算,可以将每次预言机更新的链上gas成本最多降低90%,与此同时,每份预言机报告都包含了每个节点的数据和签名,因此可以充分保障节点的问责性。在下方图示中,OCR预言机报告至包含一笔链上交易,而如果在链上聚合的话则需要发送15笔交易。
Chainlink OCR提高了预言机报告上链的效率
Chainlink OCR可以通过Chainlink外部适配器得到进一步提升。Chainlink外部适配器扩展了Chainlink预言机节点可以访问的数据类型以及可以展开的运算类型。Chainlink外部适配器通常用于将预言机接入受密码保护的API接口。除此之外,还可以用来定义预言机展开运算的方式,并选择优先隐私保护、低延时、或吞吐量等参数。比如,Chainlink节点可以使用外部适配器,执行统计分析、价格指数计算或机器学习等各种高级运算任务。外部适配器还可以将智能合约接入云端或大数据系统中的运算资源。
外部适配器采用面向未来的模块化设计,为开发者提供了一个框架,为智能合约接入任何类型的计算资源,以弥补区块链或Web2.0系统的功能缺口。
Chainlink外部适配器扩展了Chainlink节点可以支持的数据和运算类型
跨链互操作性协议(CCIP)是一个开源的开发标准,将各个区块链网络连接在一起。CCIP为通证桥和跨链应用的开发提供了底层技术,保障跨链数据、资产和指令传输的安全性。Chainlink节点以OCR 2.0的形式利用预言机运算功能,从一个区块链获取交易,在链下对交易合法性达成共识,并将结果发送至另一个区块链。
CCIP实现的其中一个信任最小化用例就是反欺诈网络。这个去中心化预言机网络中的节点与负责跨链传输资产和指令的节点相互独立。反欺诈网络使用了预言机运算来对CCIP网络进行分析,一旦检测到协议中或接入的区块链中存在问题(如:区块重组),则会立即叫停。值得一提的是,这个反欺诈网络不直接参与资金转账,而是作为第三方,起到制约作用。反欺诈网络和通证桥之间形成权力制衡关系,可以避免任何一方权力过大,最终操控服务。因此,这个机制可以进一步增强信任最小化。
CCIP链接各个区块链网络,并可以开发出安全的通证桥和跨链智能合约