技术设计与实现
ZK-Oracle的主要功能是弥合去中心化应用和现实世界数据之间的差距,利用经济激励模型来确保数据是准确和可信赖的,ZK-Oracle最初将基于SERO链进行设计和开发,支持SERO上图灵完备的智能合约平台,并在Polkadot主网的完备功能上线后,在保持原有匿名安全解决方案的同时,迁移至跨链的Substrate底层架构来不断完善ZK-Oracle的功能。ZK-Oracle整体的设计将会围绕数据交互流程、系统构架以及界面整合这三方面展开。

1. 数据交互流程

Dapps在数据层利用ZK-Oracle预言机帮助智能合约与链外数据进行交互时,操作如下:
1、智能合约通过ZK-Oracle链上代理合约调用发出数据查询请求。
2、代理合约发出触发带有查询参数的事件。
3、ZK-Oracle链下部分持续监听区块链上定义好的事件。
4、ZK-Oracle通过规则选定一组链下节点进行查询,请求web api或者web页面,执行计算或者执行已配置的脚本
5、链下节点通过门限签名算法达成“组内”共识,并将共识之后的结果反馈给ZK-Oracle链上系统。组成员的ID和服务质量评价参数(响应性/准确性等)性能将被记录到链上,用于监测和数据分析。
6、ZK-Oracle代理合约通过调用用户合约提供的回调函数通知智能合约,结果已经就绪。

2. 系统构架

可以看出,整个交互过程分为分为链上合约与链下节点合作完成,因此ZK-Oracle分为链上和链下两部分,并包含如下核心组件:

A. 链上部分

链上部分的核心组件主要是在SERO链上的布署ZK-Oracle相关的智能合约,主要功能包括请求处理和响应、计算结果验证、节点注册和代币抵押,统计监控、支付处理等功能。链上智能合约也提供了一个统一的接口给ZK-Oracle上层智能合约使用。
1)链上代理合约
ZK-Oracle的链上代理合约为智能合约提供的标准的链上接口,一旦响应就绪,就将异步回调给使用预言机的合约。
2)监控系统
监控系统是用来保存链下的ZK-Oracle节点指标和网络统计数据的记录,包括:
A、节点的总数,节点小组被选中的次数,正常运行时间等
B、奖励细节、权重百分比、回调延迟统计和未处理的查询请求
C、节点的服务质量分数,包括正确率和报告结果的响应率
等。监控系统可以展示ZK-Oracle网络的实时状态。
3)注册系统
ZK-Oracle节点要加入网络,需要抵押并锁定一定数量的代币作为保证金,在注册合约中登记他们的保证金地址和支付地址。保证金能使系统抵抗女巫攻击,提高系统的安全性。节点需要通过快速、正确的获得中心化结果的方式获得“挖矿”奖励并赚取手续费,一旦响应超时将被罚款。
4)支付系统
针对数据请求的奖励将被发送到所选择的处理请求的当前组中,并分发给诚实的成员。这些付款将首先被存储到支付合约中,节点运营者可以检查和提取其收入。

B. 链下部分

ZK-Oracle的链下部分是由第三方的节点运营者运行的,实现了核心协议的客户端所组成的第二层分布式点对点网络。ZK-Oracle的链下节点利用类似拜占庭的协议就相同的API调用达成一致。在协议的每一轮,通过一种没有任何一方能够轻易垄断的资源(VRF随机种子)来实现随机的领导者选举,只要大多数参与者诚实可信,ZK-Oracle系统就会在概率上达成共识。
协议客户端包含的重要组件为:事件监听和链适配器、链下节点共识组件、请求/计算任务处理模块等。
1)节点的注册和验证组的选择
新注册的节点首先进入待定状态,一旦待定池包含足够多的待定节点并且等待了足够的时间,它们将被随机选择并组成当前请求的阀值组。这一部分采用VRF算法作为随机验证节点选择的基础。VRF是随机生成函数,而且这个函数是可验证的。即同一把私钥对同样的信息进行签名,只有一个合法签名可以通过验证,这个有别于普通的非对称加密算法。
VRF的具体操作流程是:
1. 证明者生成一对密钥,
是私钥,
是配对的公钥。
2. 证明者输出随机结果
3. 证明者输出随机证明
4. 证明者把随机结果和随机证明提交给验证者。验证者需验证
resultresult
proofproof
是否匹配,若匹配,进入下一步。
5. 证明者把
infoinfo
提交给验证者,验证者计算结果是否为
RTUERTUE
,是
TRUETRUE
的话即验证通过。
6. 验证通过即可推导出
infoinfo
resultresult
是否匹配,即证明验证者给出的材料是正确的。在整个过程中验证者没有拿到证明者的私钥
随机种子(Seed)生成:随机算法会用到种子(Seed),比如Zk-Oracle的加密抽签中,需要随机选择并公开的种子。这个seed既要让参与节点知晓,又不能被对手控制。Zk-Oracle第r回合产生的seed是由上一回合r-1的seed通过VRF来确定。这个种子和相应的VRF证明被包含在每个被提出的块中,一旦节点在r-1轮的块上达成一致,当r轮开始之后,每个人都知道当前轮的伪随机的seedr 。初始的seed0的值是由初始参与者们一起用多个节点进行计算,得到的一个绝对无法预测的随机seed。这样,seed不会被“破坏者”预测,也不会被操纵。
2)形成组内共识
验证节点(包括子验证节点)在秘密的情况下获知自己被选中,但他们只有凭证才能证明自己的验证者资格。对于每一个选中的节点,使用自己的私钥对seed进行签名,并输入哈希函数后得到自己的凭证。哈希函数的性质表明凭证是一个随机的长度为256字节的字符串,不同节点的凭证不会相同,并且凭证字符串的分布是均匀的。用同样的方式选出一批候选领导节点,把候选领导节点的凭证按照字典顺序进行排列,排序中最小的候选领导节点被选为领导节点,即领导节点是通过候选领导节点集合随机的公共选举产生。
验证节点和领导节点一起参与拜占庭协议
BABA*
的运算,在
BABA*
的每一个阶段和步骤里,节点都通过私人和非互动的方式来独立确定自己是否被选择在当前步骤的委员会中。
BABA*
是一个两个阶段的投票机制。第一阶段,验证节点对收到的候选结果进行分级共识,选取验证共识最多的候选结果。第二阶段,对第一阶段筛选出的候选结果进行二元拜占庭判断。
BABA*
共识要保证参与共识的诚实节点大于2/3,如果随机选出的集合不能满足该条件,那么需要进行多次随机选举,只要有一次参与共识的诚实节点大于2/3,就能达成共识。
BABA*
共识的每个步骤的验证节点并行指定或抽签筛选出来用来加快结果确认速度。
3)分配奖励和处罚
因为VRF算法的引入,节点是分散选择的,因此在一段时间内,每个诚实节点作为提交者被选中和接受的概率是相近的。支付给该预言机数据请求的处理和验证组的费用会被锁定到链上的奖励分配合约中,节点运行者可以随时提取分配给他们的奖励费用。恶意节点可以不向链上系统合约返回结果,或者返回的是错误结果,但是因为拜占庭协议的引入,恶意节点不会通过链上的验证步骤,并且会根据一定的阈值,被标记为不合格节点,并被罚没一定的保证金,这部分保证金将被销毁。在这种情况下,该节点被排除在验证节点筛选之外,除非补足被罚没的保证金,才能继续恢复正常运行。此外,为了防止节点不劳而获的问题,并为了激励参与的节点提供较好的,低延迟的网络资源。如果超过某一时间因子,当前工作组没有结果返回,这样整个组内节点的可信度都会受到影响,对于单个节点来说,超过一定阈值,也会被标记为不合格节点,并和上述一样受到经济惩罚。
4)并行化处理请求
对于同时并发存在的多个请求来说,其节点组的选择和处理验证是并发进行的,这样可以使处理速度并行化,以便于扩展tps。这样,节点增多,其tps会得到提高,而实际使用tps越高,则反映了整个系统的价值越大,形成了一种正向的反馈。

C. 查询界面整合

查询外部数据的使用者可利用Zk-Oracle提供的查询系统查询数据,该系统界面聚合当前有效数据提供者之中的数据。并且仅当超过2/3的系统筛选到的有效数据提供者提供此种数据时,数据点才有效。这样可以保证系统可以容忍多达1/3的恶意数据提供者。
Copy link
On this page
1. 数据交互流程
2. 系统构架
A. 链上部分
B. 链下部分
C. 查询界面整合