当前位置:首页区块链解决链上同步问题?Pick下这个方案 | 精选

解决链上同步问题?Pick下这个方案 | 精选

Oracle分类按照同步与异步方式,Oracle大体上可以分为:● 多笔交易,异步方式

预言机分类

按照同步与异步方式,预言机大体上可以分为:

多笔交易,异步方式

例如,user request交易先上链,预言机 response 交易再上链,**触发再出发用户真的任务执行。比如传统的预言机采用回调方式,预言机 response上链后执行用户的回调任务。

多笔交易,同步方式

比如,user request先被广播,但将处于等待状态,当预言机节点发出Response交易时,再将request交易放在response后打包上链执行。

一笔交易

拓展user request交易,再将预言机节点请求到的数据,存入到requset交易或区块的拓展字段中,再打包上链执行。

今天我们将介绍一种,使用链上条件定时器来实现同步方式的预言机。

条件定时器

概念定义

对象

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

条件

在特定对象交易中,调用时所进行的条件检查,用户可以自定义设置检查条件,如预言机的response数据阈值条件等。

任务

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

一个任务必须在条件定时器中被注册,可通过在交易的联合签名者列表中(Tx.Cosigner)添加条件定时器合约的hash值。该任务(交易)将被当成普通交易打包上链,以及被收取费用,但是不会被立刻执行。只有当条件定期器被触发时,才会被自动执行该交易。

一些约束条件

一个对象只能触发一个任务执行

一个任务只能被触发一次

●在任务执行过程中,不能再触发别的任务执行

需要支付一定费用来注册条件定时器

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

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

class ConditionTimerContract: NatieOnctract
{
priate Maplt;Task, Object; timers;
priate Listlt;Taskgt; triggeredTasks;

public bool erify(){
// erify the tx.fee gt;= basic fee
}

protected registerTimer(task, object){
// On can use natie transaction to register or other natie contract
}

public bool actieTimer(task.hash){
// check object
}

@oerride
public listlt;txgt; PreExecuteBlock(blockTxs){
// register condition timer…
registerTimer(task, object)
}

@oerride
public oid PostExecuteBlock(blockTxs){
// execute tasks which be triggered
}
}

工作原理

原生合约

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

原生交易

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

然后,我们将介绍通过使用原生合约的条件定时器(ConditionTimerContract)和预言机(预言机Contract)设计方案。

预言机的工作流程

解决链上同步问题?Pick下这个方案 | 精选

1. 首先,用户发送预言机 Request交易,设置预言机Contract.hash作为该交易的联合签名者, 实际上该交易将作为原生交易。

2. Request交易,将被当成普通交易打包上链。

3. 由于是原生合约,区块执行前,将触发预言机Contract将会调用条件定时器合约ConditionTimerContract的注册方法registerTimer, 完成该Requset交易的注册,并从待执行交易列表中移除,其意味着该交易不会被当前区块所执行。

4. 当预言机 nodes检测到新区块包含Request请求交易时,开始请求数据,并发送携带数据和签名的Response交易上链。

5. Response交易作为普通交易,上链执行时,将会调用预言机Contract的AddResponse方法,将预言机节点请求的数据收集起来。

6. 当预言机的请求阈值条件被满足时,将之前注册的Request交易添加到可执行交易列表中,最终完成对用户发起的Request交易执行,完成数据访问请求。

链上聚合数据

无论我们选择哪种预言机的数据聚合方式,都需要将预言机节点的数据跟签名上链。因此,我们将采用链上聚合数据的方式,预言机节点的Response消息将被当成普通交易上链,将调用预言机Contract的AddResponse方法。

聚合方式可以有很多种,这里我们采用的是之前方案签名阈值方法,详情可参考:

其他处理流程,与普通的预言机方式类似,就不再做详细介绍。

优势

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

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

劣势

破坏了区块链打包交易上链就执行的规则,执行顺序具有不可预测性。

*注意,该方案并非Neo3最终实施方案,而是开发过程中一些发现解决链上同步问题的一种可能方式。

温馨提示:

文章标题:解决链上同步问题?Pick下这个方案 | 精选

文章链接:https://www.btchangqing.cn/7150.html

更新时间:2020年04月15日

本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。

区块链

Algorand基金会启动「2.5亿枚ALGO奖励计划」,为促进生态发展开发者提供支持

2020-4-15 11:34:42

区块链

2020年数字资产犯罪频发,财产蒸发,真相值得所有人警惕

2020-4-15 12:15:01

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索