文章阅读页通栏

预言机的共识原来是这样完成的 | 三分钟入门Neo3

来源: Neo智能经济 作者:Neo
在「预言机篇」的前两期中,我们科普了Oracle的基本概念与运作模式,并介绍了在Neo3环境下,Oracle与智能合约的互通规则,以确保特定数据能够传输至链......

在「预言机篇」的前两期中,我们科普了Oracle的基本概念与运作模式,并介绍了在Neo3环境下,Oracle与智能合约的互通规则,以确保特定数据能够传输至链上世界。

第三讲中,我们将介绍在NeoVM中如何执行Oracle请求,并对结果达成共识,以及Neo3目前正考虑的协议、过滤器与响应机制。

执行Oracle请求

常规的Neo节点将协助处理Oracle事务,在收到一个事务请求后,它们只能对照已知的哈希列表审核事务哈希,并在其内存池中对其进行更新。但当Oracle节点接收到Oracle事务请求时,它可以将事务哈希添加到已知的哈希列表中,并对执行请求。

当需要Oracle服务时,Oracle系统将输入URL和过滤器来发出指令。在NeoVM中,Oracle节点将执行Oracle Syscall,先检查是否有缓存结果。如果没有结果,Oracle节点将通过所给的URL下载内容,启动过滤器,最后缓存数据结果。

此时,Oracle节点通过OracleAgreement机制完成了对缓存结果的共识确认。基于Oracle节点的共识,用户可以信任此结果。 

Oracle共识

在Oracle网络中,共识是非常重要的部分。通过让多个节点都执行相同的审核,比较每个节点接收的响应,以确认最终结果的一致性,保障请求数据的可靠性。这旨在防止数据的篡改,并创建一个公开透明的信息环境,使开发者可以安心地引入链下数据以用于智能合约。

关于Oracle节点的共识机制,采用批准阈值是一种比较简便的方法。只有当对反馈数据的共识满足特定的数量/百分比,共识机制才会生效。当然,也可以添加其他共识规则。

如Neo核心开发者Belane提供的示例一样:

1. 至少有10个签名才能将Oracle反馈的数据放入已验证的内存池中。50%的Oracle节点认可,且反对的节点不超过10%,才算取得共识。

2. 至少有5个签名才能将Oracle反馈的数据放入已验证的内存池中。达成一致的Oracle节点数量必须是反对的两倍,且反对签名不超过10个,才算取得共识。

在当前的共识提案中,已建议将批准阈值纳入提议阶段。

例如,采用第一条共识规则。未验证的Oracle事务被发送到网络,通过天气监测API请求上海当前的温度。

如果9个Oracle节点调用API并认可了20度的气温数据,而1个节点返回19度的气温数据,则基于共识,20度是最终结果。9个节点中的每个节点都将为“ 20”签名,在有了足够数量的签名后,反馈数据可以移至已验证的池中并储存在区块中。

由于可以采用的规则有许多种,该共识过程的最终设计还在讨论中。例如,批准阈值可以是在Oracle策略中定义的固定值,或者每个智能合约都可以指定其自己的批准阈值。又或者,可以探索其他的共识过程。

关于Oracle节点的共识机制,采用批准阈值是一种比较简便的方法。只有当对反馈数据的共识满足特定的数量/百分比,共识机制才会生效。当然,也可以添加其他共识规则。

支持的协议、过滤器和响应

根据开发者的需求,Oracle请求可以采用不同的形式。需要访问不同的资源,并且在Oracle节点达成共识之前,需要标准化的响应和过滤器来优化结果。

Oracle服务需要支持的主要协议是HTTP(及其安全的对等HTTPS),这是基于互联网的数据交换标准。最初的实施将基于同时支持HTTP和HTTPS的情况下构建,但有关支持的方法还在讨论中。

Neo联合创始人及核心开发者张铮文认为,由于GET的简单性和对Oracle请求的适用性,因此仅应支持GET,但是由于其在REST API中的广泛使用,因此也建议支持POST。

另外,Oracle服务还能够处理关于NeoFS分布式存储网络的请求,从而使智能合约开发者能够访问链下数据。Github上也有关于NeoFS上的Oracle协议制定的讨论。

- Github 讨论地址 -
https://github.com/neo-project/neo/issues/1270

未来会探索对其他协议或方法的支持,由于当下解决方案的设计重点是简便性,因此暂时先不考虑较复杂的操作或自定义协议。

由核心开发者Shargon提出的过滤器概念,是对Oracle系统调用的扩展,旨在过滤掉不必要的数据响应。我们在「预言机篇」第二讲中也提到了,使用过滤器能够缓解链上的存储空间,并提高共识的确定性。

采用过滤器的一个问题是,对于同一个过滤器,每种语言都需要不同的实施方式,这可能导致不同软件的节点之间,在过滤后存在响应差异。

Igor Coelho提出了一个解决方案,建议将Oracle过滤器实施为智能合约。这将允许开发者创建用于调用的自定义过滤器,或将其重新设置为在Oracle系统之外使用。

对于最初的Oracle实施,以JSONPath标准过滤不必要的响应。而对于响应本身而言,请求API需提供响应反馈的数据格式。Neo核心开发者在Github上经过集中讨论后,建议用户应事先规范他们所期望的格式或Content-Type。

与过滤器实施相匹配,最初仅支持JSON响应,但是未来将陆续支持其他格式(如XML或HTML),以满足智能合约开发者的潜在需求。

在「预言机篇」第四讲中,我们将介绍Oracle在Neo3环境下的其他机制——去中心化与经济模型。

关键词: Neo  预言机  Oracle  
0/300