譬喻,user request生意业务先上链,Oracle response 生意业务再上链,最后触发再出发用户真的任务执行。好比传统的Oracle回收回调方法,Oracle response上链后执行用户的回调任务。
● 工具
一个条件按时器原生合约界说示例:
* 留意,该方案并非Neo3最终实施方案,而是开拓进程中一些发明办理链上同步问题的一种大概方法。 }
原生合约
拓展user request生意业务,,再将Oracle节点请求到的数据,存入到requset生意业务或区块的拓展字段中,再打包上链执行。
是一种非凡的生意业务,生意业务提倡者(Tx.Sender)或连系签名者(Tx.Cosigner)包括原生和合约的hash值,即原生生意业务。
4. 当Oracle nodes检测到新区块包括Request请求生意业务时,开始请求数据,并发送携带数据和签名的Response生意业务上链。
registerTimer(task, object)
1. 首先,用户发送Oracle Request生意业务,配置OracleContract.hash作为该生意业务的连系签名者, 实际上该生意业务将作为原生生意业务。
然后,我们将先容通过利用原生合约的条件按时器(ConditionTimerContract)和Oracle(OracleContract)设计方案。
@override
public list PreExecuteBlock(blockTxs){
1. 办理了同步期待问题,即用户的Request生意业务不必期待Response生意业务后才气上链。
class ConditionTimerContract: NativeOnctract
protected registerTimer(task, object){
链上聚合数据
在特定工具生意业务中,挪用时所举办的条件查抄,用户可以自界说配置查抄条件,如Oracle的response数据阈值条件等。
一些约束条件
聚合方法可以有许多种,这里我们回收的是之前方案签名阈值要领,详情可参考:
● 条件
归纳综合之,链上条件按时器,注册在条件按时器的生意业务(尚未执行),当被后续的某一笔生意业务满意其触发条件时,将触发之前注册的生意业务举办执行。
特定的生意业务才气触发按时器(指定生意业务的Sender或生意业务hash),不像传统按时器,在上,任务的触发执行,都需要生意业务举办触发。
public void PostExecuteBlock(blockTxs){
一个任务等于在条件按时器中注册的生意业务,当条件被满意时,将触发该生意业务的执行。
劣势
无论我们选择哪种Oracle的数据聚合方法,都需要将Oracle节点的数据跟签名上链。因此,我们将回收链上聚合数据的方法,Oracle节点的Response动静将被当成普通生意业务上链,将挪用OracleContract的AddResponse要领。
// execute tasks which be triggered
@override
private List<Task> triggeredTasks;
一个任务必需在条件按时器中被注册,可通过在生意业务的连系签名者列表中(Tx.Cosigner)添加条件按时器合约的hash值。该任务(生意业务)将被当成普通生意业务打包上链,以及被收取用度,可是不会被立即执行。只有当条件按期器被触发时,才会被自动执行该生意业务。
观念界说
}
本日我们将先容一种,利用链上条件按时器来实现同步方法的Oracle。
public bool verify(){
原生生意业务
private Map<Task, Object> timers;
● 多笔生意业务,异步方法
条件按时器
● 多笔生意业务,同步方法
作为一种系统内置的合约,具有相比拟力大的权限,可以在区块执行前后做一些非凡的任务操纵。
{
}
6. 当Oracle的请求阈值条件被满意时,将之前注册的Request生意业务添加到可执行生意业务列表中,最终完成对用户提倡的Request生意业务执行,完成数据会见请求。
凭据同步与异步方法,Oracle概略上可以分为:
Oracle分类
● 任务
好比,user request先被广播,但将处于期待状态,当Oracle节点发出Response生意业务时,再将request生意业务放在response后打包上链执行。
● 一笔生意业务
}
● 在任务执行进程中,不能再触发此外任务执行
// Only can use native transaction to register or other native contract
● 一个工具只能触发一个任务执行
3. 由于是原生合约,区块执行前,将触发OracleContract将会挪用条件按时器合约ConditionTimerContract的注册要领registerTimer, 完成该Requset生意业务的注册,并从待执行生意业务列表中移除,其意味着该生意业务不会被当前区块所执行。
2. 比拟起传统回调方法,保持了同步要领,对付合约开拓者越发便捷。
● 需要付出必然用度来注册条件按时器
其他处理惩罚流程,与普通的Oracle方法雷同,就不再做具体先容。
}
2. Request生意业务,将被当成普通生意业务打包上链。
● 一个任务只能被触发一次
public bool activeTimer(task.hash){
Oracle的事情流程
// check object事情道理
https://github.com/neo-project/neo/issues/1273
// register condition timer…
优势
}
// verify the tx.fee >= basic fee
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。