APP
NEO学院:预言机如何「预言」 三分钟入门Neo3
2020-02-13 48340 0

今天我们将继续深入介绍Oracle的事务机制与广播模式,了解其是如何确保数据的顺利传输。



先简单科普下事务机制的概念。事务机制是指,遵循原子性、一致性、隔离性和持续性(ACID)的属性,以使数据能够正确地提交到数据库中。将一系列数据库更改归入一个逻辑操作。更改数据库后,所做的更改可以作为一个单元进行提交或取消。



为了发出由Oracle网络验证的数据请求,Oracle的事物机制必须由合约或独立用户创建。通过「目标URL」和「缩短下载内容的过滤器」这两个所需参数来触发新创建的Oracle系统,这些特殊事务才会允许与Oracle网络进行交互。



例如,通过采用分布式市场形式的智能合约,用户可以在其中买卖商品。如果商品以GAS定价,一旦GAS的价格发生较大波动会导致市场动荡。如果使用Oracle网络,通过其来监控GAS的市场价格,就能够以法币对商品进行定价,再通过智能合约动态计算出相应的GAS价格。



在此示例中,Oracle调用URL接入了价格监控API。在Oracle网络中使用目标URL,每个Oracle节点将会通过三个指令实时监测GAS的法币价格。



- 目标URL -



https://min-api.cryptocompare.com/data/price?fsym=...

过滤器可用于过滤掉一部分无用数据,以便Oracle只需以OracleAgreement的确认机制验证返回响应的特定部分,并最终存储在区块中。该过程允许用户或智能合约通过使用Oracle网络直接访问任何必需的信息,再将其带入区块链做进一步使用。

事务结构

与Neo3上的常规事务机制相比,Oracle事务机制有两个区别,它是由已签名和未签名的数据组成。在一个常规事务中,已签名部分保留着诸如发件者,版本和其他属性之类的信息。未签名部分由事务签名组成。

一个可行的Oracle事务结构是将一个名为ExpectedResultHash的新属性添加到已签名部分的属性中。尽管很可能会在事先不知道结果的情况下发出大多数Oracle请求,但是这种包含很有用,因为它使用户可以指定要检查的结果以验证交易。核心开发者Belane认为,这还便于节点检查,可以快速了解这个事务是否为Oracle事务。

在用户不期望任何特定结果的情况下,该哈希将改为零填充,从而导致结果完全取决于Oracle节点之间的共识。

另一个区别是新的OracleAgreement部分,该节位于未签名的部分中,并且是DownloadCache的宿主,其中包含了三个重要信息:从中检索数据的URL,用于限制下载内容仅限于必需内容的过滤器(如JSONPath或XPath)信息和内容本身(由Oracle节点执行)。

广播模式

实施Neo Oracle的一个显著优势是,它充分利用了dBFT提供的独立块事务终局性来优化确认时间,网络流量和链存储空间。这是因为在Neo网络上运行的Oracle调用仅需要在单个块内处理和确认单个事务,使结果可以立即用于智能合约中。

所提出的内存池和广播模式显示了如何通过网络进行Oracle事务,除了Oracle的节点外,网络中的所有节点也会协助事务的运行。当Oracle事务已广播到网络中后,每个节点会将当前未验证的事务作为已知的哈希存储在其内存池中,并将其传递给其他节点。

通过此过程,会发现Oracle事务的Oracle节点将使用URL并应用DownloadCache中提供的过滤器来完成所有包含的请求。然后,通过将结果和签名附加到Oracle事务的OracleAgreement部分,这些节点将就返回响应的数据达成共识。

一旦收集到足够的签名以通过批准阈值(当前为TBD),就可以将Oracle事务视为已验证,并由共识节点将其存储在一个区块中。实际上,同一事务既用于Oracle调用,又用于确定结果,而以前的链下数据现存储在链上,可由智能合约使用。

在「预言机篇」的第三讲中,我们将更深入地探讨Oracle的请求机制与达成共识的确认规则。

新年伊始,我们特别推出了「三分钟入门Neo3」系列专题,带大家率先了解Neo3的方方面面。

内容来源:Neo智能经济 作者:Neo

版权声明:本文仅为传播消息之用,不代表币源社区立场,文章不构成投资建议。如需转载,请务必注明文章原作者以及来源,部分图片来源于网络,我们尊重版权,如有疑问敬请联系,我们将核实并删除。

我要评论
字数上限500
评论(0)