基于区块链的转账方法、装置及存储介质与流程

文档序号:16001882发布日期:2018-11-20 19:33阅读:129来源:国知局

本发明涉及区块链金融技术领域,尤其涉及一种基于区块链的转账方法、装置及计算机可读存储介质。



背景技术:

以太坊作为第二代区块链代表,账户模型是以太坊的基础。账户模型可以理解为一个基于交易的状态机,状态机读取一系列的输入,然后根据这些输入转换成一个新的状态。账户状态机最初为创世状态(此时网络中还没有任何交易产生的状态)。当一系列交易被执行后,这个创世状态将转变成最终态。在任何时刻,这个最终态都代表着账户当前态。

例如,在以太坊网络中存在以下两笔转账交易:账户A给账户B转账10价值单位,账户B给账户C转账20价值单位,交易执行的逻辑为按交易顺序给账户B的余额先加10价值单位再减20价值单位。然而这两个转账交易是无法并行执行的,如果并行执行则可能会造成不同节点执行交易的先后次序不一样,进而所产生的交易回执次序也不一样,从而导致以太坊网络中不同节点间生成的Block Header签名不一致而无法达成共识。



技术实现要素:

本发明的主要目的在于提供一种基于区块链的转账方法、装置及计算机可读存储介质,旨在解决现有区块链网络中交易并发处理无法达成共识的技术问题。

为实现上述目的,本发明提供一种基于区块链的转账方法,所述基于区块链的转账方法包括以下步骤:

遍历接收到的待共识区块交易队列,判断当前遍历的交易是否满足并行执行条件;

若所述交易满足并行执行条件,则并行执行,否则串行执行;

当所述区块交易队列中的所有交易执行完成时,生成待共识区块的哈希值并在区块链网络中广播,以供与区块链网络中其他节点进行共识;

当与区块链网络中其他节点达成共识时,将待共识区块中所有交易的交易执行结果记入区块链中。

可选地,所述交易满足并行执行的条件包括:所述区块交易队列中各交易之间不存在对同一Token的消费。

可选地,所述若所述交易满足并行执行条件,则并行执行,否则串行执行具体包括:

若所述交易满足并行执行条件,则新建并行队列,并将满足所述并行执行条件的交易存入所述并行队列中;

创建多个线程,通过多个线程并行执行所述并行队列中的交易;

若所述交易不满足并行执行条件,则串行执行所述交易;

当所述区块交易队列中的所有交易执行完毕时,获取所有交易的交易执行结果,并按各交易在所述区块交易队列中的顺序组装所述交易执行结果中的交易回执。

可选地,所述基于区块链的转账方法还包括:

当执行的交易的类型为UTXO交易时,从数据库中读取相关信息,所述相关信息包括:转账使用的Token对应的所有权信息、所述交易待使用的token的数额;

基于所述相关信息,对所述交易进行验证,所述验证的类型包括:所有权验证与会计等式验证;

当所有验证通过时,生成新的UTXO数据,所述UTXO数据包括:新的Token以及与Token相关联的数据信息。

可选地,所述基于所述相关信息,对所述交易进行验证包括:

基于所述交易使用的Token对应的所有权信息,验证所述交易使用的Token是否属于合法账户,若是,则所有权验证通过;

基基于所述交易待使用的token的数额与本次交易的金额,验证所述交易待使用的token的数额总和是否等于本次交易待生成的Token的数额总和,若是,则会计等式验证通过。

可选地,在判断当前遍历的交易是否满足并行执行条件之前,还包括:

判断所述交易的交易类型是UTXO类型,还是账户类型,如是账户类型,则通过以太坊虚拟机执行所述交易,以供在交易来源账户的余额中减少转账数额对应的数值、在交易去向账户的余额中增加相应数值。

可选地,所述交易满足并行执行的条件还包括:所述交易不存在对区块链上数据的写操作。

可选地,所述相关信息还包括:所述交易使用的Token挂载的业务逻辑验证合约的地址;所述验证的类型还包括:业务逻辑验证;

所述基于所述相关信息,对所述交易进行验证还包括:基于所述交易使用的Token挂载的业务逻辑验证合约的地址、所述交易传入的调用所述验证合约的函数接口以及调用该交易对应Token的参数,构建新的账户类型交易并执行,以供基于所述验证合约对所述交易进行业务逻辑验证。

进一步地,为实现上述目的,本发明还提供一种基于区块链的转账装置,述基于区块链的转账装置包括:

遍历模块,用于遍历接收到的待共识区块交易队列,判断当前遍历的交易是否满足并行执行条件;

执行模块,用于若所述交易满足并行执行条件,则并行执行,否则串行执行;

共识模块,用于当所述区块交易队列中的所有交易执行完成时,生成待共识区块的哈希值并在区块链网络中广播,以供与区块链网络中其他节点进行共识;

记账模块,用于当与区块链网络中其他节点达成共识时,将待共识区块中所有交易的交易执行结果记入区块链中。

可选地,所述交易满足并行执行的条件包括:所述区块交易队列中各交易之间不存在对同一Token的消费。

可选地,所述执行模块具体用于:

若所述交易满足并行执行条件,则新建并行队列,并将满足所述并行执行条件的交易存入所述并行队列中;创建多个线程,通过多个线程并行执行所述并行队列中的交易;

若所述交易不满足并行执行条件,则串行执行所述交易;当所述区块交易队列中的所有交易执行完毕时,获取所有交易的交易执行结果,并按各交易在所述区块交易队列中的顺序组装所述交易执行结果中的交易回执。

可选地,所述执行模块包括:第一执行子模块;

所述第一执行子模块包括:

读取单元,用于当执行的交易的类型为UTXO交易时,从数据库中读取相关信息,所述相关信息包括:所述交易使用的Token对应的所有权信息、所述交易待使用的token的数额;

验证单元,用于基于所述相关信息,对所述交易进行验证,所述验证的类型包括:所有权验证与会计等式验证;

生成单元,用于当所有验证通过时,生成新的UTXO数据,所述UTXO数据包括:新的Token以及与Token相关联的数据信息。

可选地,所述验证单元具体用于:

基于所述交易使用的Token对应的所有权信息,验证所述交易使用的Token是否属于合法账户,若是,则所有权验证通过;

基于所述交易待使用的token的数额与本次交易的金额,验证所述交易待使用的token的数额总和是否等于本次交易待生成的Token的数额总和,若是,则会计等式验证通过。

可选地,所述执行模块还包括:第二执行子模块;

所述第二执行子模块,用于在判断当前遍历的交易是否满足并行执行条件前,判断所述交易的交易类型是UTXO类型,还是账户类型,如是账户类型,则通过以太坊虚拟机执行所述交易,以供在交易来源账户的余额中减少转账数额对应的数值、在交易去向账户的余额中增加相应数值。

可选地,所述交易满足并行执行的条件还包括:所述交易不存在对区块链上数据的写操作。

可选地,所述相关信息还包括:所述交易使用的Token挂载的业务逻辑验证合约的地址;所述验证的类型还包括:业务逻辑验证;

所述验证单元具体还用于:基于所述交易使用的Token挂载的业务逻辑验证合约的地址、所述交易传入的调用所述验证合约的函数接口以及调用该交易对应Token的参数,构建新的账户类型交易并执行,以供基于所述验证合约对所述交易进行业务逻辑验证。

进一步地,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有基于区块链的转账程序,所述基于区块链的转账程序被处理器执行时实现如上述任一项所述的基于区块链的转账方法的步骤。

本发明在以太坊上通过拆分账户模型的余额为具有特定数额的Token,拆分后的Token为转账的操作对象,而包含有Token的交易为UTXO交易。采用Token的拆分逻辑后,UTXO交易过程跟踪的是每个Token的所有权的转移,而不是账户的状态变化,因而除某些特殊的UTXO交易外,大部分UTXO交易之间不共享任何状态、不会相互干扰,进而UTXO交易可以并发执行。本发明在以太坊上实现一个基于UTXO模型的转账方案,在交易共识阶段,对满足并行执行条件的交易并发执行,而其他交易串行执行,进而可在一定程度上提升以太坊网络中交易的转账效率。

附图说明

图1为本发明中基于UTXO模型的UTXO交易与通证的转换关系示意图;

图2为本发明基于区块链的转账方法一实施例的流程示意图;

图3为本发明基于区块链的转账方法一实施例中交易并行处理流程示意图;

图4为本发明基于区块链的转账装置第一实施例的功能模块示意图;

图5为本发明基于区块链的转账装置中执行模块一实施例的功能模块示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

为便于更好地理解本发明,下面对本发明中涉及的技术术语进行说明。

(一)UTXO交易

比特币作为第一代区块链的代表,在比特币中提出的UTXO(Unspent Transaction Outputs,未花费的交易输出),是区块链上交易生成和交易验证的基本单位。UTXO模型要求每个价值(表现为每一枚加密数字货币)都有特定的所有权,处于两个状态(已花费或未花费)之一,每一笔新交易的输入必须为某笔交易的未花费输出。以一个A转账10价值单位给B的交易为例,UTXO模型操作为:输入价值单位10标记为已使用,输出一个新创造的属于B的价值单位10。

(1)Token

Token译为通证,是本发明中UTXO交易的基本单位,标有特定的数额价值(正整数),是价值的所有权凭证。已经花费和尚未花费的价值均使用Token统一描述。一个Token是否已经花费通过Token中对应字段进行标记。

(2)UTXOTx

UTXOTx为本发明中UTXO交易的数据名,记录的是来源Token与去向Token之间的转换关系,描述UTXO交易使用了哪些Token以及生成了哪些Token。交易中的来源Token均为已经花费的Token,去向Token可用于下一次花费。

Token与UTXOTx之间的关系如下图1所示,图中的虚线连接的两个部分Input和Output同属于一个Token,此Token在上一个UTXOTx中生成,而在下一个UTXOTx中使用,UTXOTx内部的箭头描述Token的转换关系。

(3)UTXO交易协议

基于Token的生命周期,Token包括创建和已消费两种状态,因此本发明中的UTXO交易包括Token铸币交易和Token转账交易两种交易类型。

目前以太坊交易协议使用的字段包括:nonce(随机数)、gasPrice(gas价格)、gasLimit(gas上限)、to(转账去向账户地址)、value(转账数额)、data(交易附带信息)。

本发明的UTXO交易复用原有以太坊交易的字段,但对data字段的计算规则有所调整。原有以太坊交易的data字段以ABI(Application Binary Interface,应用二进制接口)的编码形式指定了将被调用的智能合约函数接口及调用函数时传入的参数列表,而在本发明的UTXO交易中,data为Json格式,内容包括UTXO交易类型(铸币or转账)以及输入Token列表(铸币交易中缺省)和输出Token列表,具体内容如下:

(1)utxotype:UTXO交易类型,int,必须字段(1为Token生成操作,2为Token消费操作)

(2)txin:交易输入列表,数组(数组最大限制为1000),包括以下字段:

tokenkey:转账使用的Token,string,必须字段(Token地址)

callfuncandparams:业务校验逻辑所需传入的函数及参数,string,可选字段(存在校验合约地址时使用,通用合约及实例合约均需要)

exefuncandparams:执行业务校验逻辑所需传入的函数及参数,string,可选字段(存在校验合约地址时使用,只限通用合约需要)

desdetail:Token修改后的备注,string,可选字段

(3)txout:交易输出列表,数组(数组最大限制为1000),包括以下字段:

checktype:所有权校验类型,string,必须字段(可选P2PK和P2PKH)

to:转账对象,string,必须字段(如果checktype为P2PK,本字段为账号地址;如果checktype为P2PKH,本字段为账号地址的哈希值)

value:转账数额,string,必须字段(限制数额为正整数)

initcontract:模板合约地址,string,可选字段(与initfuncandparams配对)

initfuncandparams:调用模板合约所需传入的函数及参数,string,可选字段(ABI序列化之后的结果,与initcontract配对)

validationcontract:校验合约地址,string,可选字段(如果不存在本地址,则使用initcontract和initfuncandparams生成)

ordetail:新创建Token的备注,可选字段。

以太坊网络中的交易提交到本地以太坊节点或广播到网络中对等节点后,各节点根据解析data所用的方法(RLP编码或Json编码),判断其交易的类型是原有账户类型交易还是UTXO类型交易,判定交易类型后分别按各自对应的处理逻辑对两类交易分别进行处理。

(二)以太坊交易(账户类型交易)

以太坊作为第二代区块链代表,账户模型是以太坊的基础。账户模型可以理解为一个基于交易的状态机,状态机读取一系列的输入,然后根据这些输入转换成一个新的状态。账户状态机最初为创世状态(此时网络中还没有任何交易产生的状态)。当一系列交易被执行后,这个创世状态将转变成最终态。在任何时刻,这个最终态都代表着账户当前态。以一个A转账10价值单位给B的交易为例,账户模型操作为:A账户余额减少10价值单位,B账户余额增加10价值单位。

为便于理解本发明,下面具体以账户类型交易为以太坊交易进行举例说明。

本发明提供一种基于区块链的转账方法。

由区块链中转账交易的基本处理流程可知:当区块链网络中的未处理交易达到一定数量时,区块链网络中的某个节点将各交易按照处理顺序进行打包并广播到区块链网络中,以供区块链网络中各节点对交易进行处理并进行共识。

基于区块链的转账交易的高效处理主要表现为:多笔交易可以并发执行以及并发执行后可以与网络中其他节点达成共识。因此,为实现交易的并发执行,例如,以太坊网络中广播的待共识区块交易队列中交易的类型除以太坊交易(账户类型交易)之外,还包括有UTXO交易。

本发明中,以太坊交易为基于账户模型的交易,而UTXO交易为基于UTXO模型的交易且在满足一定条件时可以并发执行。

参照图2,图2为本发明基于区块链的转账方法一实施例的流程示意图。本实施例中,所述基于区块链的转账方法包括以下步骤:

步骤S10,遍历所述区块交易队列,判断当前遍历的交易是否满足并行执行条件;

本实施例中,区块交易队列中的交易既有可能是以太坊交易(账户类型交易),也有可能是UTXO交易,并且即使是UTXO交易也必须是满足一定条件才可并行执行。因此,在遍历区块交易队列时,需进一步判断当前遍历的交易是否满足并行执行条件。

采用UTXO交易协议所生成的交易的类型即为UTXO交易,具体可通过协议中data字段的编码方式进行区分,以太坊交易(账户类型交易)的data字段采用RLP编码,而UTXO交易的data字段采用Json编码。

UTXO交易是对Token进行处理,其交易过程跟踪的是每个Token的所有权的转移,而不是以太坊中账户的状态变化。由于UTXO交易都发生在不同的Token上,因而UTXO交易可以并发执行。

可选的,交易满足并行执行的条件包括:区块交易队列中各交易之间不存在对同一Token的消费。

假设同一个块的交易队列中有两个交易使用同一个Token,记两个交易分别为交易A和交易B。在并行执行交易的情况下,一节点可能先执行交易A,此时Token被标记已经使用,然后在执行交易B时进行校验发现该Token已经被使用,于是B交易校验失败被抛弃。而另一个节点可能先执行交易B后执行交易A,此种情况下交易A被抛弃。此时,两个节点由于执行交易顺序的不同,执行交易产生的结果也不一样,最后产生的Hash值不一样,该块也不能进行有效共识。

步骤S20,若所述交易满足并行执行条件,则并行执行;

步骤S30,若所述交易不满足并行执行条件,则串行执行;

本实施例中,若当前遍历的交易满足并行执行条件,则可并行执行,否则只能串行执行。

例如,待共识的区块交易队列中依次包含有A、B、C、D四个交易,若A、C满足并行执行条件,则该四个交易的执行顺序为(A,C)—>B—>D,其中,串行执行的交易B、D既有可能是UTXO交易类型,也有可能是以太网交易类型。

步骤S40,当所述区块交易队列中的所有交易执行完成时,生成待共识区块的哈希值并在区块链网络中广播,以供与区块链网络中其他节点进行共识;

本实施例中,执行完区块中的所有交易之后,根据区块中交易的相关信息构建MPT树,并把MPT树根节点的Hash值记录在区块头Block Header中,最终计算出Block Header的Hash值并在全网中广播。

可选的,在本发明一实施例中,待共识区块的哈希值(Block Header的Hash值)为根据以下根节点哈希值计算得到:

A、待共识区块中所有交易的状态树根节点哈希值;

B、待共识区块中所有交易的交易树根节点哈希值;

C、待共识区块中所有交易的回执树根节点哈希值;

D、待共识区块中所有UTXO交易的交易执行结果树根节点哈希值。

其中,在以太坊中,对于仅包含有以太坊交易(账户类型交易)的区块,Block Header保存了状态树、交易树和回执树的三个MPT树根节点的Hash。而对于包含有UTXO交易的区块,在原以太坊三个字段的基础上新增一个字段,用于保存UTXO交易结果的MPT树根节点的Hash值。对执行UTXO交易之后的每个产出数据,各节点根据数据的key和value构建MPT树并计算出根节点的Hash值存在Block Header中,以供在各节点间实现数据的一致性验证。

本可选实施例在Block Header增加一字段来记录一个区块中生成的所有UTXO交易结果数据的Hash值,通过要求节点间待共识区块的哈希值的一致性来保证交易结果的一致性。

步骤S50,当与区块链网络中其他节点达成共识时,将待共识区块中所有交易的交易执行结果记入区块链中。

本实施例中,当本节点与区块链网络中其他节点达成共识时,也即节点间待共识区块的哈希值一致时,即可将待共识区块加入主链中,并将待共识区块中所有交易的交易执行结果记入区块链中。

区块链网络中的各个节点通过一种算法对一批交易进行确认,并确保所有节点对这批数据具有一致的确认结果,这种算法就是区块链网络的共识算法,本实施例对于共识算法的设置不限,例如,既可以采用PoW算法(Proof of Work,工作量证明),也可以采用PBFT算法(Practical Byzantine Fault Tolerance,实用拜占庭容错)。

本实施例在以太坊上通过拆分账户模型的余额为具有特定数额的Token,拆分后的Token为转账的操作对象,而包含有Token的交易为UTXO交易。采用Token的拆分逻辑后,UTXO交易过程跟踪的是每个Token的所有权的转移,而不是账户的状态变化,因而各UTXO交易之间不共享任何状态、不会相互干扰,进而UTXO交易可以并发执行。本发明在以太坊上实现一个基于UTXO模型的转账方案,在交易共识阶段,对满足并行执行条件的交易并发执行,而其他交易串行执行,进而可在一定程度上提升以太坊网络中交易的转账效率。

参照图3,图3为本发明基于区块链的转账方法一实施例中交易并行处理流程示意图。本实施例中,交易并行处理的详细流程包括:

步骤S1、遍历所述区块交易队列,并判断当前遍历的交易是否满足并行执行条件;

步骤S2、若所述交易满足并行执行条件,则新建并行队列,并将满足所述并行执行条件的交易存入所述并行队列中;

主线程(原执行交易的线程)遍历区块中所有交易,根据设定的条件筛选出可并行执行的交易,然后新建并行队列存储这些满足条件的交易。

步骤S3、创建多个线程,通过多个线程并行执行所述并行队列中的交易;

主线程创建多个线程,每个线程独立从并行队列中不保留地取出交易并执行,其中,每个线程执行完一个交易后,再次从并行队列中取另一个交易执行,直到队列中没有交易时退出执行,并且每个线程在交易执行完后记录本次交易执行结果(包含有交易回执)。

步骤S4、若所述交易不满足并行执行条件,则串行执行所述交易;

本实施例中,不满足并行执行条件而串行执行的交易既有可能是以太坊交易(账户类型交易),也有可能是UTXO交易,不同类型的交易处理逻辑不同。

步骤S5、当所述区块交易队列中的所有交易执行完毕时,获取所有交易的交易执行结果,并按各交易在所述区块交易队列中的顺序组装所述交易执行结果中的交易回执。

本实施例中,由于并行执行的交易并未按照原有以太坊交易(账户类型交易)协议中所规定的交易顺序执行,因而致使各节点间产生的交易回执的顺序不一致而导致不能进行有效共识,因此,在交易队列中的所有交易执行完毕时,进一步获取所有交易的交易执行结果,并按各交易在区块交易队列中的顺序组装交易回执,从而保证各节点间产生的交易回执的顺序一致而可进行有效共识。

本发明中,以太坊网络中的交易既可能是UTXO交易,也有可能是以太坊交易(账户类型交易),而不同类型的交易处理逻辑不同。

(一)UTXO交易处理逻辑

在对UTXO交易的处理流程进行说明之前,先对UTXO交易所产生的数据进行说明。

本发明描述的UTXO交易所产生的数据独立于以太坊数据,使用LevelDb进行持久化存储。存储方案将重点描述不同类型数据持久化存储时所使用的key和value。

1)Token

Token是本发明转账价值的基本单位,但在持久化存储时分拆为TokenBase(Token Base Field)和TokenExt(Token Extended Field)两部分进行存储。

TokenBase记录了该Token自创建起就固定下来的信息(在后续交易中该Filed的字段不会更改),TokenExt记录了一Token在转账过程前后的变化信息。Token的整体数据结构定义如下表1所示。

表1

每个Token的TokenBase只存储一份,但TokenExt会存储多份(对应记录不同阶段的信息)。当Token消费时,Token的状态发生变化,将对应生成一份新的TokenExt进行持久化存储,不会改变该Token创建时原有的TokenExt记录。

逻辑上,TokenExt可更改,但存储上,LevelDb对于TokenExt记录,只增不改也不会减。

Token(TokenBase+TokenExt)读写规则如下:

a)写入Token到LevelDb时,需提供Token的key和Token各字段的值。

对于TokenBase,key与Token的key一致(key的内容为“该Token来源以太坊交易Hash、该Token在来源以太坊交易中生成的索引”),value的内容为对TokenBase中六个字段RLP(Recursive Length Prefix,递归长度前缀)编码结果。对于TokenExt,key的内容为“Token的key_生成该TokenExt的块高”,value的内容为对TokenExt中两个字段RLP编码结果。

b)读取Token时,需传入Token的key和块高参数。

对于TokenBase,直接使用Token的key作为索引进行查找。对于TokenExt,使用块高参数拼接Token的key后作为索引进行查找。

2)UTXOTx

UTXOTx记录了一次转账交易过程中的交易来源Token key列表与交易去向Token key列表。UTXOTx的数据结构定义如下表2所示。

表2

一个以太坊转账交易生成一份UTXOTx数据,逻辑及存储上该数据只增不改也不会减。UTXOTx的key为生成该UTXOTx数据的以太坊交易Hash,value的内容为对UTXOTx数据中两个列表字段RLP编码结果。

3)Vault

Vault记录属于一账号的所有Token列表,可记录多个账号的数据。Vault的数据结构定义如下表3所示。

表3

创建一Token时将生成一份Vault数据,转账该Token时不产生新Vault数据。逻辑及存储上该Vault数据只增不改也不会减。Vault的key为所有权人信息Hash,其与所有权人信息(一般为账号的Hash)及该Token在所属账号中的生成次序有关,value的内容为对Vault数据中Token key字段的RLP编码结果。

4)ExtTokenIdx

ExtTokenIdx以数组的形式,存储了生成同一Token下不同状态(对应一个或多个TokenExt记录)时该以太坊交易所在块高,用于获取在“指定块高下”LevelDb中“最新的”TokenExt写入时的块高。目前Token只有创建及消费两种状态,因此ExtTokenIdx的块高数组最大个数为2,其中下标0表示该Token的创建块高,下标1表示该Token的消费块高。

ExtTokenIdx的key与Token的key一致,value的内容为对块高数组RLP编码结果。

在逻辑上,ExtTokenIdx的数据只增不改,但存储上,新TokenExt写入LevelDb时将对ExtTokenIdx进行改写,增加一个数组元素。

外部读取Token时,需传入Token的key和块高参数(块高缺省为当前区块链块高)。对于TokenExt的key(key描述为“Token的key_生成该TokenExt的块高”)中“生成该TokenExt的块高”,获取方式为:根据外部传入的块高参数从后往前遍历ExtTokenIdx块高数组中的内容,找出第一个小于传入参数值的数组元素作为块高(缺省值为0)。

“生成该TokenExt的块高”的获取方式举例:假设一Token的ExtTokenIdx为[10,25](表示该Token在块高10生成,在块高25被消费),当外部传入的块高参数为2时返回0(此时该Token还没有创建),块高参数为11时返回10(此时该Token已创建但未被消费),块高参数为25时返回10(此时该Token已创建但未被消费),块高参数为26时返回25(此时该Token已被消费)。

下面基于上述UTXO交易的内容与数据库中存储的UTXO交易数据,对本发明中UTXO交易处理逻辑进行说明。

在一实施例中,UTXO交易的处理流程包括:

(1)从数据库中读取相关信息;

本实施例中,为实现对UTXO交易的验证,需要从存储UTXO交易的数据库中读取相关信息。比如,基于UTXO交易的输入参数tokenkey,读取交易使用的Token对应的所有权信息;本交易待使用的token的数额。

(2)基于所述相关信息,对UTXO交易进行验证,所述验证的类型包括:所有权验证与会计等式验证;

所有权验证:基于交易使用的Token对应的所有权信息,验证交易使用的Token是否属于合法账户,若是,则所有权验证通过;

会计等式验证:基于本交易待使用的token的数额与本次交易的金额,验证本交易待使用的token的数额总和是否等于本次交易待生成的Token的数额总和,若是,则会计等式验证通过。其中,如果本次交易涉及找零,则本次交易待生成的Token的数额包括:为交易对方生成的新Token以及为己方生成的找零Token。

可选的,若交易使用的Token挂载有业务逻辑验证合约,则此类交易并行执行还需满足以下条件:交易不存在对区块链链上数据的写操作。

在以太坊中,基于智能合约实现的验证逻辑包括对链上数据读和写的两种情况。如果一UTXO交易挂载的验证合约只涉及到对链上数据的读,其UTXO交易可并行执行;如果涉及写操作,则交易之间存在共享状态,会存在相互干扰的可能性,因此不允许并行执行。

例如,设定业务逻辑条件为:一账户一天对外转账限额为500元。假设一账户当天已经对外转账400元,需再进行两笔各100元的转账,但实际只能执行其中一笔转账。极端情况下,当两个转账交易同时被打包然后广播给其他节点进行后续处理时,并行执行交易的各个节点对交易的处理顺序可能会不一样,不同的执行结果将导致该块无法进行有效共识。

若交易使用的Token挂载有业务逻辑验证合约,也即TokenBase的验证合约地址字段有值,则还需对交易进行业务逻辑验证。

业务逻辑验证:基于交易使用的Token挂载的业务逻辑验证合约的地址、交易传入的调用验证合约的函数接口以及调用该交易对应Token的参数,构建新的账户类型交易(例如以太坊交易)并执行,以供基于验证合约对交易进行业务逻辑验证,其中,业务逻辑可根据业务实际需要进行自定义,并且调用该交易对应Token的参数与业务逻辑的设定相关。例如,业务逻辑指定了消费该交易对应Token的账号、消费时间、消费金额等约束条件,则需要传入与约束条件对应的参数,才能调用该交易对应Token,比如传入满足约束条件的账号、时间、消费金额等数值,则允许调用该交易对应Token,否则不允许调用。

由于构建的账户类型交易为以太坊类型的交易,因此需要创建EVM对象来执行该新建的账户类型交易。同时,由于为实现业务逻辑验证而构建的账户类型交易并非以太坊网络中的真实转账交易,因而该账户类型交易以及该账户类型交易执行后的回执不记入区块链中。

(3)当所有验证通过时,生成新的UTXO数据,所述UTXO数据包括:新的Token以及与Token相关联的数据信息。

本实施例中,当所有验证通过时,基于UTXO交易的输出参数而生成对应新的UTXO数据,包括:新的Token以及与Token相关联的数据信息,比如生成一份新Vault数据、生成一份新UTXOTx数据以及Token中所有权人信息、Token状态等关系内容的修改。

(二)账户类型交易处理逻辑

通过以太坊虚拟机执行账户类型交易,以供在交易来源账户的余额中减少转账数额对应的数值、在交易去向账户的余额中增加相应数值。

以太坊虚拟机(Ethereum Virtual Machine,EVM),是一种基于堆栈的虚拟机,用于执行以太坊智能合约,从而实现对以太坊交易(账户类型交易)的处理逻辑。

本发明还提供一种基于区块链的转账装置。

当区块链网络中的未处理交易达到一定数量时,区块链网络中的某个节点将各交易按照处理顺序进行打包并广播到区块链网络中,以供区块链网络中各节点对交易进行处理并进行共识。

接收以太坊网络中广播的待共识区块交易队列,以供对交易进行处理并进行共识。为实现交易的并发执行,例如,以太坊网络中广播的待共识区块交易队列中交易的类型除账户类型交易之外,还包括有UTXO交易。

本发明中,账户类型交易为基于账户模型的交易,而UTXO交易为基于UTXO模型的交易且在满足一定条件时可以并发执行。

参照图4,图4为本发明基于区块链的转账装置第一实施例的功能模块示意图。本实施例中,所述基于区块链的转账装置包括:

遍历模块10,用于遍历所述区块交易队列,判断当前遍历的交易是否满足并行执行条件;

本实施例中,区块交易队列中的交易既有可能是以太坊交易(账户类型交易),也有可能是UTXO交易,并且即使是UTXO交易也必须是满足一定条件才可并行执行。因此,在遍历区块交易队列时,需进一步判断当前遍历的交易是否满足并行执行条件。

采用UTXO交易协议所生成的交易的类型即为UTXO交易,具体可通过协议中data字段的编码方式进行区分,以太坊交易的data字段采用RLP编码,而UTXO交易的data字段采用Json编码。

UTXO交易是对Token进行处理,其交易过程跟踪的是每个Token的所有权的转移,而不是以太坊中账户的状态变化。由于UTXO交易都发生在不同的Token上,因而UTXO交易可以并发执行。

可选的,交易满足并行执行的条件包括:区块交易队列中各交易之间不存在对同一Token的消费。

执行模块20,用于若所述交易满足并行执行条件,则并行执行,否则串行执行;

本实施例中,若当前遍历的交易满足并行执行条件,则可并行执行,否则只能串行执行。

例如,待共识的区块交易队列中依次包含有A、B、C、D四个交易,若A、C满足并行执行条件,则该四个交易的执行顺序为(A,C)—>B—>D,其中,串行执行的交易B、D既有可能是UTXO交易类型,也有可能是以太网交易类型。

共识模块30,用于当所述区块交易队列中的所有交易执行完成时,生成待共识区块的哈希值并在区块链网络中广播,以供与区块链网络中其他节点进行共识;

本实施例中,执行完区块中的所有交易之后,根据区块中交易的相关信息构建MPT树,并把MPT树根节点的Hash值记录在区块头Block Header中,最终计算出Block Header的Hash值并在全网中广播。

可选的,在本发明一实施例中,待共识区块的哈希值(Block Header的Hash值)为根据以下根节点哈希值计算得到:

A、待共识区块中所有交易的状态树根节点哈希值;

B、待共识区块中所有交易的交易树根节点哈希值;

C、待共识区块中所有交易的回执树根节点哈希值;

D、待共识区块中所有UTXO交易的交易执行结果树根节点哈希值。

其中,在以太坊中,对于仅包含有以太坊交易的区块,Block Header保存了状态树、交易树和回执树的三个MPT树根节点的Hash。而对于包含有UTXO交易的区块,在原以太坊三个字段的基础上新增一个字段,用于保存UTXO交易结果的MPT树根节点的Hash值。对执行UTXO交易之后的每个产出数据,各节点根据数据的key和value构建MPT树并计算出根节点的Hash值存在Block Header中,以供在各节点间实现数据的一致性验证。

本可选实施例在Block Header增加一字段来记录一个区块中生成的所有UTXO交易结果数据的Hash值,通过要求节点间待共识区块的哈希值的一致性来保证交易结果的一致性。

记账模块40,用于当与区块链网络中其他节点达成共识时,将待共识区块中所有交易的交易执行结果记入区块链中。

本实施例中,当本节点与区块链网络中其他节点达成共识时,也即节点间待共识区块的哈希值一致时,即可将待共识区块加入主链中,并将待共识区块中所有交易的交易执行结果记入区块链中。

区块链网络中的各个节点通过一种算法对一批交易进行确认,并确保所有节点对这批数据具有一致的确认结果,这种算法就是区块链网络的共识算法,本实施例对于共识算法的设置不限,例如,既可以采用PoW算法(Proof of Work,工作量证明),也可以采用PBFT算法(Practical Byzantine Fault Tolerance,实用拜占庭容错)。

本实施例在以太坊上通过拆分账户模型的余额为具有特定数额的Token,拆分后的Token为转账的操作对象,而包含有Token的交易为UTXO交易。采用Token的拆分逻辑后,UTXO交易过程跟踪的是每个Token的所有权的转移,而不是账户的状态变化,因而各UTXO交易之间不共享任何状态、不会相互干扰,进而UTXO交易可以并发执行。本发明在以太坊上实现一个基于UTXO模型的转账方案,在交易共识阶段,对满足并行执行条件的交易并发执行,而其他交易串行执行,进而可在一定程度上提升以太坊网络中交易的转账效率。

进一步地,在本发明基于区块链的转账装置一实施例中,所述执行模块具体20具体用于:

若所述交易满足并行执行条件,则新建并行队列,并将满足所述并行执行条件的交易存入所述并行队列中;创建多个线程,通过多个线程并行执行所述并行队列中的交易;

若所述交易不满足并行执行条件,则串行执行所述交易;当所述区块交易队列中的所有交易执行完毕时,获取所有交易的交易执行结果,并按各交易在所述区块交易队列中的顺序组装所述交易执行结果中的交易回执。

本实施例中,主线程(原执行交易的线程)遍历区块中所有交易,根据设定的条件筛选出可并行执行的交易,然后新建并行队列存储这些满足条件的交易。

主线程创建多个线程,每个线程独立从并行队列中不保留地取出交易并执行,其中,每个线程执行完一个交易后,再次从并行队列中取另一个交易执行,直到队列中没有交易时退出执行,并且每个线程在交易执行完后记录本次交易执行结果(包含有交易回执)。

本实施例中,由于并行执行的交易并未按照原有以太坊交易(账户类型交易)协议中所规定的交易顺序执行,因而致使各节点间产生的交易回执的顺序不一致而导致不能进行有效共识,因此,在交易队列中的所有交易执行完毕时,进一步获取所有交易的交易执行结果,并按各交易在区块交易队列中的顺序组装交易回执,从而保证各节点间产生的交易回执的顺序一致而可进行有效共识。

参照图5,图5为本发明基于区块链的转账装置中执行模块一实施例的功能模块示意图。

本实施例中,所述执行模块20包括:

第一执行子模块201,用于对UTXO交易类型的交易进行处理;

第二执行子模块202,用于对以太坊交易类型(账户类型)的交易进行处理。

(1)对UTXO交易类型的交易进行处理

所述第一执行子模块201包括:

读取单元2011,用于当执行的交易的类型为UTXO交易时,从数据库中读取相关信息,所述相关信息包括:所述交易使用的Token对应的所有权信息、本交易待使用的token的数额;

本实施例中,为实现对UTXO交易的验证,需要从存储UTXO交易的数据库中读取相关信息。比如,基于UTXO交易的输入参数tokenkey,读取交易使用的Token对应的所有权信息;基于数据库中的所有Token,读取所有已消费Token的数额与所有未消费Token的数额。

验证单元2012,用于基于所述相关信息,对所述交易进行验证,所述验证的类型包括:所有权验证与会计等式验证;

所有权验证:基于交易使用的Token对应的所有权信息,验证交易使用的Token是否属于合法账户,若是,则所有权验证通过;

会计等式验证:基于本交易待使用的token的数额与本次交易的金额,验证本交易待使用的token的数额总和是否等于本次交易待生成的Token的数额总和,若是,则会计等式验证通过。其中,如果本次交易涉及找零,则本次交易待生成的Token的数额包括:为交易对方生成的新Token以及为己方生成的找零Token。

可选的,若交易使用的Token挂载有业务逻辑验证合约,则此类交易并行执行还需满足以下条件:交易不存在对区块链链上数据的写操作。

在以太坊中,基于智能合约实现的验证逻辑包括对链上数据读和写的两种情况。如果一UTXO交易挂载的验证合约只涉及到对链上数据的读,其UTXO交易可并行执行;如果涉及写操作,则交易之间存在共享状态,会存在相互干扰的可能性,因此不允许并行执行。

例如,设定业务逻辑条件为:一账户一天对外转账限额为500元。假设一账户当天已经对外转账400元,需再进行两笔各100元的转账,但实际只能执行其中一笔转账。极端情况下,当两个转账交易同时被打包然后广播给其他节点进行后续处理时,并行执行交易的各个节点对交易的处理顺序可能会不一样,不同的执行结果将导致该块无法进行有效共识。

可选的,若交易使用的Token挂载有业务逻辑验证合约的地址,也即TokenBase的验证合约地址有值,则验证单元2012还需对交易进行业务逻辑验证。

业务逻辑验证:基于交易使用的Token挂载的业务逻辑验证合约的地址、交易传入的调用验证合约的函数接口以及调用该交易对应Token的参数,构建新的账户类型交易并执行,以供基于验证合约对交易进行业务逻辑验证,其中,业务逻辑可根据业务实际需要进行自定义,并且调用该交易对应Token的参数与业务逻辑的设定相关。例如,业务逻辑指定了消费该交易对应Token的账号、消费时间、消费金额等约束条件,则需要传入与约束条件对应的参数,才能调用该交易对应Token,比如传入满足约束条件的账号、时间、消费金额等数值,则允许调用该交易对应Token,否则不允许调用。

由于构建的账户类型交易为以太坊类型的交易,因此需要创建EVM对象来执行该新建的账户类型交易。同时,由于为实现业务逻辑验证而构建的账户类型交易并非以太坊网络中的真实转账交易,因而该账户类型交易以及该账户类型交易执行后的回执不记入区块链中,

生成单元2013,用于当所有验证通过时,生成新的UTXO数据,所述UTXO数据包括:新的Token以及与Token相关联的数据信息。

本实施例中,当所有验证通过时,基于UTXO交易的输出参数而生成对应新的UTXO数据,包括:新的Token以及与Token相关联的数据信息,比如生成一份新Vault数据、生成一份新UTXOTx数据以及Token中所有权人信息、Token状态等关系内容的修改。

(2)对账户类型的交易进行处理

所述第二执行子模块202,用于在判断当前遍历的交易是否满足并行执行条件前,判断所述交易的交易类型是UTXO类型,还是账户类型,如是账户类型,则通过以太坊虚拟机执行所述交易,以供在交易来源账户的余额中减少转账数额对应的数值、在交易去向账户的余额中增加相应数值。

本发明还提供一种计算机可读存储介质。

本实施例中,计算机可读存储介质上存储有基于区块链的转账程序,所述基于区块链的转账程序被处理器执行时实现如上述任一项实施例中所述的基于区块链的转账方法的步骤。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器或者网络设备等)执行本发明各个实施例所述的方法。

上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,这些均属于本发明的保护之内。

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