http://www.7klian.com

办理链上同步问题?Pick下这个方案

5.  Response生意业务作为普通生意业务,上链执行时,将会挪用OracleContract的AddResponse要领,将Oracle节点请求的数据收集起来。
譬喻,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

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读