当前位置:比特币中国 > 百科 >

解决链上同步问题?Pick下这个策略 | 甄选

  • 百科
  • 2021-07-09 14:17
  • admin
Oracle分类根据同步与异步方法,Oracle大体上可以分为:●多笔买卖,异步方法

优势

1. 解决了同步等待问题,即用户的Request买卖不必等待Response买卖后才能上链。

2. 对比起传统回调方法,维持了同步办法,对于合约开发者愈加便捷。

一些约束条件

●一个对象只能触发一个任务实行

条件定时器

原生合约

作为一种系统内置的合约,具备相对比较大的权限,可以在区块实行前后做一些特殊的任务操作。

h3riate Listlt;Taskgt; triggeredTasks;

●一个任务只能被触发一次

●在任务实行过程中,不可以再触发别的任务实行

●需要支付肯定成本来注册条件定时器

概括之,链上条件定时器,注册在条件定时器的买卖(尚未实行),当被后续的某一笔买卖满足其触发条件时,将触发之前注册的买卖进行实行。

一个条件定时器原生合约概念示例:

class ConptionTimerContract: NatieOnctract

{

}

链上聚合数据

无论大家选择哪种Oracle的数据聚合方法,都需要将Oracle节点的数据跟签名上链。因此,大家将使用链上聚合数据的方法,Oracle节点的Response消息将被当成一般买卖上链,将调用OracleContract的AddResponse办法。

聚合方法可以有非常多种,这里大家使用的是之前策略签名阈值办法,详细情况可参考:

其他处置步骤,与一般的Oracle方法类似,就不再做详细介绍。

Oracle分类

根据同步与异步方法,Oracle大体上可以分为:

h3ublic bool erify{

●多笔买卖,异步方法

比如,user request买卖先上链,Oracle response 买卖再上链,最后触发再出发用户真的任务实行。譬如传统的Oracle使用回调方法,Oracle response上链后实行用户的回调任务。

●条件

在特定对象买卖中,调用时所进行的条件检查,用户可以自概念设置检查条件,如Oracle的response数据阈值条件等。

@oerride

}

}

●任务

一个任务即是在条件定时器中注册的买卖,当条件被满足时,将触发该买卖的实行。

一个任务需要在条件定时器中被注册,可通过在买卖的联合签名者列表中(Tx.cosplayigner)添加条件定时器合约的hash值。该任务(买卖)将被当成一般买卖打包上链,与被收取成本,但不会被立刻实行。只有当条件按期器被触发时,才会被自动实行该买卖。

原生买卖

是一种特殊的买卖,买卖发起者(Tx.Sender)或联合签名者包含原生和合约的hash值,即原生买卖。

然后,大家将介绍通过用原生合约的条件定时器和Oracle设计策略。

定义概念

}

@oerride

劣势

破坏了区块链打包买卖上链就实行的规则,实行顺序具备不可预测性。

*注意,该策略并不是Neo3最后推行策略,而是开发过程中一些发现解决链上同步问题的一种可能方法。

工作原理

// register conh3tion timer…

h3ublic bool actieTimer{

●一笔买卖

拓展user request买卖,再将Oracle节点请求到的数据,存入到requset买卖或区块的拓展字段中,再打包上链实行。

今天大家将介绍一种,用链上条件定时器来达成同步方法的Oracle。

h3rotected registerTimer{

●对象

特定的买卖才能触发定时器(指定买卖的Sender或买卖hash),不像传统定时器,在区块链上,任务的触发实行,都需要买卖进行触发。

Oracle的工作步骤

1. 第一,用户发送Oracle Request买卖,设置OracleContract.hash作为该买卖的联合签名者, 事实上该买卖将作为原生买卖。

2. Request买卖,将被当成一般买卖打包上链。

3. 因为是原生合约,区块实行前,将触发OracleContract将会调用条件定时器合约ConptionTimerContract的注册办法registerTimer, 完成该Requset买卖的注册,并从待实行买卖列表中移除,其意味着该买卖不会被目前区块所实行。

4. 当Oracle nodes测试到新区块包含Request请求买卖时,开始请求数据,并发送携带数据和签名的Response买卖上链。

5. Response买卖作为一般买卖,上链实行时,将会调用OracleContract的AddResponse办法,将Oracle节点请求的数据采集起来。

6. 当Oracle的请求阈值条件被满足时,将之前注册的Request买卖添加到可实行买卖列表中,最后完成对用户发起的Request买卖实行,完成数据访问请求。

// execute tasks which be triggered

●多笔买卖,同步方法

譬如,user request先被广播,但将处于等待状况,当Oracle节点发出Response买卖时,再将request买卖放在response后打包上链实行。

  • 关注微信

猜你喜欢