|区块链Oracle:为什么区块链本身不能进行API调用?


全文共2292字 , 预计学习时长6分钟

|区块链Oracle:为什么区块链本身不能进行API调用?
本文插图

图源:unsplash
区块链Oracle是将确定性区块链与链下数据连接的任何设备或实体 。 这句定义并不足以让我们弄明白它 , 想要了解什么是区块链Oracle以及为什么需要它们 , 我们需要回到区块链的核心特征之一——去中心化 。
区块链的问题
区块链具有其分布式分类帐性质 , 网络中的每个节点必须能够在给定输入相同的情况下找到相同的最终结果 。 否则 , 当一个节点试图验证另一个节点进行的交易时 , 最终得到的结果将是不同的 。 这种架构是有意为之的 。

|区块链Oracle:为什么区块链本身不能进行API调用?
本文插图

新的平衡很容易获得
可以看到 , 从Bob发送5美元给Alice时 , 我们可以轻松地将5美元添加到Alice的余额中 , 并从Bob的余额中减去5美元 。 网络上的每个节点都可以轻松地重现这一过程 , 获得相同的结果 , 并最终处于相同的状态 。
但是 , 如果出现了其它情况呢?想象一个区块链 , 其中他们使用API来验证彼此的交易 。 假设我们想根据Bob账户向Alice发送基于以太币(ETH)价格的可变金额 。 我们将让合同调用一个API以获取ETH的价格 , 然后将该金额发送给Bob 。 当其他所有节点都进行验证时 , 它们也必须调用此API 。

|区块链Oracle:为什么区块链本身不能进行API调用?
本文插图
【|区块链Oracle:为什么区块链本身不能进行API调用?】

验证变量要困难得多
现在发生了什么?如果他们仅仅是稍晚一点调用该API , 该API就可能已被更改(已被折旧、被黑或出于许多其他原因) , 那么所有节点都将获得不同的结果 。 这意味着没有节点能够就区块链的实际状态达成一致 。
因此 , 以太坊区块链和大多数区块链都是期望能具备完全确定性的 。 也就是说 , 如果要重播每笔交易 , 我们最终都能处于正确的状态 。 如果将API调用或其他非确定性来源包括在区块链的基础架构中 , 那么该来源将很有可能被折旧、被黑甚至被破坏 , 导致无法验证交易 。

|区块链Oracle:为什么区块链本身不能进行API调用?
本文插图

如果区块链不确定 , 就无法达成共识 。 | 图源:Chainlink
在区块链中 , 达成数据值共识的机制称为共识机制 , 其确定性很重要 , 因为只有这样节点才能达成共识 。 其中内容你或许也了解一些 , 例如具有中本聪共识的工作量证明(PoW)或具有中本聪共识的权益证明(PoS) 。 共识机制是使区块链首先发挥作用的关键因素之一 。
但是我们需要区块链世界与现实世界连接 , 需要将ETH和其他加密货币的价格纳入合同 , 以便拥有DeFi;我们需要获取天气数据 , 以便可以进行分散式无信任保险 。 我们需要数据以将区块链用于其最重要的目的之一 , 即智能合约 。 那么我们如何在这个约束条件下架起桥梁、连接世界呢?
Oracles如何解决这个问题?
区块链Oracle是将确定性区块链与链下数据连接的任何设备或实体,这些oracles通过外部交易获取每个数据 。 这样一来 , 我们就可以确保区块链本身包含验证自身所需的所有信息 。 这就是oracles被称为区块链中间件的原因:它们是连接现实世界和区块链系统的桥梁 。
Oracle问题是什么?
让我们来回想一下首先要在链上进行构建的原因 。 我们在链上进行操作的一个重要原因就是去中心化 。 但是要知道 , 数据一定是来自某个地方的 。
如果从单个API、节点或源中导入数据的话 , 那么现在我们实际上已经背离了使用区块链的全部目的 。 集中式架构下的Oracle意味着一个实体可以控制你的智能合约 , 此时你的智能合约也不会比常规合约更好 。


推荐阅读