跳至内容
0%

什么是 Oracle?

Alchemy team headshot

作者 Alchemy

发布于 2022年3月22日1 分钟阅读

简介

智能合约是在满足特定事件或条件时自动执行的程序。这些事件可以发生在链上,也可以发生在链下。例如,在一个链上事件中,发送方可以向智能合约发送资金作为贷款抵押品,这会触发贷款金额的发放。而在一个链下事件中,智能合约可能需要某种方式来获取有关这些事件的准确数据,以判断何时执行。预言机(Oracle)连接了链下世界和链上智能合约,充当智能合约的数据来源。

预言机将链下数据连接到链上智能合约的示意图
Source: https://www.leewayhertz.com/chainlink-solving-blockchain-oracle-problem/https://www.leewayhertz.com/chainlink-solving-blockchain-oracle-problem/

开发者如何使用预言机

使用智能合约的优势在于,我们不需要第三方来充当中间人。代码决定了智能合约的条款,代码即法律。这些条款可以依赖外部事件,只有满足某个条件后交易才会执行。例如,我们可以使用智能合约根据美元的价值来发行代币交换。智能合约会向预言机查询来自某个外部来源的美元价值,以判断何时执行兑换。

智能合约向区块链预言机查询外部数据的示意图
Source: https://coin98insights.com/what-is-blockchain-oracle

去中心化金融(DeFi)是预言机最大的应用场景之一。价格预言机提供代币和流动性价值的信息,用于管理用户的资金状况。NFT(非同质化代币)可以利用预言机获取新闻中外部事件的信息,比如选举结果,从而使 NFT 的外观根据这些结果动态变化。

我们还可以利用预言机来鼓励有利于可持续发展和公民责任的行为,在用户完成任务或达成特定目标后,用代币奖励他们。例如,我们可以为某座城市的居民提供碳抵消代币奖励。

预言机的类型

预言机既可以是软件,比如服务器或数据库,也可以是硬件,比如物联网设备和传感器。它们可以是外部服务,为连接到它们的多个应用程序和区块链提供数据。

项目也可以根据自身的特殊需求创建内部预言机。Augur 就是一个例子,它是一个去中心化博彩平台,拥有一个用于提供投注事件结果的预言机。

了解 Augur 如何使用 Alchemy 来扩展其去中心化预言机和点对点协议,从而创造更好的用户体验。

预言机是双向的,这意味着它们既可以从现实世界获取数据,也可以向外部世界提供关于链上事件的数据。智能锁根据已完成的交易来解锁,就是链下需要链上事件数据的一个常见例子。

除了与外部世界通信外,预言机还能实现不同区块链之间的跨链通信。开发者可以借此桥接资产,或根据一条链上的交易和事件触发另一条链上的操作。预言机还可以通过在链下执行诸如随机数生成之类的计算,来节省宝贵的计算成本。

预言机问题

每当讨论预言机的价值时,通常都会提到“预言机问题”。区块链构建的独特之处在于,节点之间必须就区块链的状态达成共识。这意味着每个节点必须能够处理相同的交易和事件,并得到与其他所有节点相同的结果。

攻击者可能会篡改预言机获取的链下数据,或者数据也可能随时间发生变化。

例如,美元的价值在一天之内就可能频繁变动。如果智能合约根据这个价值执行操作,那么等到另一个节点进行计算时,价格可能已经发生了变化。这会打破节点之间的共识,因为预期结果已经不再是实际结果。

除了预言机提供的数据是否准确这一潜在问题外,中心化的数据来源还可能遭到攻击或出现宕机。在这些情况下,智能合约要么使用被污染的数据运行,要么完全没有数据可用。由于智能合约无法更改且会自动执行,这可能给相关各方带来不可逆的损失。如果预言机想要成为安全、可信的智能合约数据提供方,就必须解决这些问题。

预言机的解决方案

解决预言机问题的一种常见方法是利用区块链本身,这种方法被称为去中心化预言机网络(Decentralized Oracle Network,DON)。

在 DON 中,节点不是就交易账本达成共识,而是每个节点本身就是一个预言机。这些节点负责从各个独立的链下来源获取数据。随后,来自各节点的数据会被聚合在一起,并确定一个真值。

这也解决了数据来源正常运行时间的问题,因为即使某个数据源出现问题,由于存在多个数据来源,智能合约仍然能够正常运作。你可以在这里看到 DON 的实际运作方式。

去中心化预言机网络聚合多个链下数据源的示意图
来源:chain.link

‍

预言机服务

开发者使用预言机最常见的方式是通过第三方服务。第一个也是最流行的服务是 Chainlink。通过 Chainlink,开发者和 API 提供方可以将自己的 API 接入 Chainlink 网络,从而成为参与其中的节点运营方。

Chainlink 为运营这些预言机的提供方分配链上标识符,用于管理和奖励这些预言机的信誉。使用 ERC677 token 可以激励提供方给出格式规范、准确的数据,以及所执行的任何链下计算。

另一个日益流行的网络是 Band Protocol。该网络与 Chainlink 一样,致力于为外部数据提供可靠、安全的来源。同样地,该网络也有一个 BAND 代币,用于奖励提供优质数据的数据方。关键区别在于,出于节省成本的考虑,Band Protocol 运行在 Cosmos 上,而不是 Ethereum 上。

预言机服务网络向智能合约提供外部数据的示意图
Source: https://public.bnbstatic.com/static/research/static/images/projects/band-protocol/oraclescript.png

如何使用预言机

我们可以通过 API 请求从预言机获取数据,例如使用 Chainlink 提供的框架,也可以通过引用某个提供方已经发送并已存在于链上的数据来获取。我们可以通过引用保存这些信息的智能合约及其地址来获取这些数据。这种方法的一个常见用途出现在 DeFi 领域。智能合约中保存着定期更新的汇率,其他智能合约可以利用这些数据执行代币兑换操作。

结语

智能合约要在现实世界中发挥任何作用,就需要能够获知世界上正在发生的事情。预言机是智能合约用来应对链下事件所需的数据窗口。在区块链这样的去中心化环境中使用中心化的数据来源并不理想。DON 解决了中心化带来的许多问题,提供了安全性和稳定性。随着这些预言机服务的扩展和接入更多提供方,预言机将在区块链和智能合约技术的发展中发挥重要作用。

Background gradient

构建区块链应用

Alchemy 将最强大的 Web3 开发者产品和工具与资源、社区及专业支持结合在一起。