一种基于区块链的定时交易执行方法与流程

文档序号:12721863阅读:305来源:国知局

本发明在现有区块链协议的基础上,添加了交易执行顺序协议,特别是其定时功能的规则和方法。



背景技术:

区块链是一种新的分布式技术,由一个个顺序排列而成的交易组成块,再由一个个顺序排列而成的块组成链,每个块包含一个自增的高度作为编号,还有一个时间戳用于记载打包时间。用户数据的安全性依赖公私钥体系,只有用户私钥签名的交易才是合法的交易,故他人无法代为发起,且每个交易只存在唯一ID,以确保无法重复发起。

用户每次操作需主动为新交易单独签名并广播进网络,但由于网络的分布式特性,交易存在一定的丢失概率、交易广播入网及节点打包入块需要时间、网络拥塞时需排队等待、出块时间间隔不固定等多种因素,导致用户无法完全控制自己的交易在哪个高度被打包。如果用户需要在某个时间(高度)打包交易,目前只能手工发起或编写客户端定时脚本的方式,在那个时间点附近广播交易,后需等待一段随机性的时间,才能查看在哪个高度入块,如果长期等不到入块结果,则推断交易可能已经失败,需重新发起。



技术实现要素:

本发明的目的在于针对现有技术的不足,提供一种基于区块链的定时交易执行方法。

本发明的目的是通过以下技术方案实现的:一种基于区块链的定时交易执行方法,包括以下步骤:

(1)区块链从创世块启动时,设置所有高度的“定时队列”为空,设置全链的“顺延队列”为空。

(2)节点每次启动时,设置本地的“未处理交易池”为空。

(3)用户发起每笔交易时,指定一个“定时高度”字段,一个“是否顺延”字段,并生成交易ID,然后签名广播。

(4)节点在收到每个交易并验证签名后,加入本地的“未处理交易池”,并继续广播。

(5)先按照块物理大小或计算量限制设置“块最大容量”,然后按照如下优先级提取交易,并进行打包:

(5.1)节点在某“出块高度”打包交易时,首先从当前“出块高度”的“定时队列”中从头至尾提取交易,并按照“块最大容量”进行打包。如果当前高度的块容量不足,则判断当前高度定时队列中的剩余交易的“是否顺延”字段,为“是”的交易加入全链的“顺延队列”的队尾,为“否”的交易则不做操作。

(5.2)如果当前“出块高度”的“定时队列”中的交易处理完成,且块仍有容量,则从全链的“顺延队列”提取交易并打包。

(5.3)如果全链的“顺延队列”处理完了,块仍有容量,则从“未处理交易池”提取交易并打包。如果交易的“定时高度”小于等于“出块高度”,则打包并执行交易;如果大于“出块高度”,则打包但不执行交易,并将该交易加入该“定时高度”的“定时队列”的队尾。

进一步地,上述方法中,用户通过以下方式撤销交易:

(1)用户可以发起撤销某定时交易的“撤销交易”,指定“待撤销的交易ID”,并签名广播。

(2)节点在打包“撤销交易”时,首先根据ID找到该“待撤销交易”,验证其原始发起用户和该“撤销交易”的发起用户一致,并且其设定的“定时高度”大于当前“出块高度”,则将该ID的交易从“定时队列”中删除,否则为非法撤销。

本发明的有益效果在于:该方法解决了区块链了没有定时机制的问题,降低了交易广播出去后不知何时才能被打包的不确定性,同时考虑到块最大容量的问题,可以让用户选择是否顺延,满足用户的不同需求。

附图说明

图1为本发明所述方法的流程图。

具体实施方式

本发明一种基于区块链的定时交易执行方法,如图1所示,包括以下步骤:

步骤1:区块链从创世块启动时,设置所有高度的“定时队列”为空,设置全链的“顺延队列”为空。

1.1:队列并不需是块内的实际数据存储结构,只需是链的逻辑结构,可直接在内存中缓存实现不存储在链上。

步骤2:节点每次启动时,设置本地的“未处理交易池”为空。

步骤3:用户发起每笔交易时,指定一个“定时高度”字段,一个“是否顺延”字段,并生成交易ID,然后签名广播。

用户在某高度设置定时交易前需留意,若该高度已有的“定时队列”可能已经超过“块最大容量”,则后续的待执行交易可能在执行时被打入“顺延队列”,无法保证在设定的高度打包,可能需要修改定时高度。用户如果希望简单地将交易设置为立即生效,可以将“定时高度”置为0或其他较小的值。

步骤4:节点在收到每个交易并验证签名后,加入本地的“未处理交易池”,并继续广播。

步骤5:先按照块物理大小或计算量限制设置“块最大容量”,然后按照如下优先级提取交易,并进行打包:

步骤5.1:节点在某“出块高度”打包交易时,首先从当前“出块高度”的“定时队列”中从头至尾提取交易,并按照“块最大容量”进行打包。如果当前高度的块容量不足,则判断当前高度定时队列中的剩余交易的“是否顺延”字段,为“是”的交易加入全链的“顺延队列”的队尾,为“否”的交易则不做操作。

步骤5.2:如果当前“出块高度”的“定时队列”中的交易处理完成,且块仍有容量,则从全链的“顺延队列”提取交易并打包。

步骤5.3:如果全链的“顺延队列”处理完了,块仍有容量,则从“未处理交易池”提取交易并打包。如果交易的“定时高度”小于等于“出块高度”,则打包并执行交易;如果大于“出块高度”,则打包但不执行交易,并将该交易加入该“定时高度”的“定时队列”的队尾。

该打包顺序规则为底层协议,由于其他节点保留了相同的“定时队列”、“顺延队列”,所以可以根据新块的“块最大容量”做相同顺序的验证,以决定该块是否合法。

此外,用户可以发起撤销某定时交易的“撤销交易”,指定“待撤销交易ID”,并签名广播。节点在打包“撤销交易”时,首先根据ID找到该“待撤销交易”,验证其原始发起用户和该“撤销交易”的发起用户一致,并且其设定的“定时高度”大于当前“出块高度”,则将该ID的交易从“定时队列”中删除,否则为非法撤销。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1