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

文档序号:15738109发布日期:2018-10-23 21:49阅读:218来源:国知局

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



背景技术:

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

例如,在以太坊网络中存在以下两笔转账交易:账户A给账户B转账10价值单位,账户B给账户C转账20价值单位,交易执行的逻辑为按交易顺序给账户B的余额先加10价值单位再减20价值单位。在账户模型中,在来源账户在给去向账户进行转账时,直接从本账户的余额中扣减转账数额,但无法确定所扣减的数额全部/部分来源于先前哪一笔交易,有哪些前置的消费条件,从而无法进行转账前的业务逻辑校验。



技术实现要素:

本发明的主要目的在于提供一种基于区块链的转账验证方法、装置及计算机可读存储介质,旨在解决现有区块链网络中转账交易无法进行转账前的业务逻辑校验的技术问题。

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

在执行区块链网络中广播的待共识区块交易队列中的交易时,判断当前执行的交易的类型;

当执行的交易的类型为UTXO交易且为转账操作时,从数据库中读取相关信息;

基于所述相关信息,对所述交易进行验证,其中,当所述相关信息中包含有所述交易使用的Token挂载的合约地址时,基于所述合约地址与所述交易传入的参数,构建新的以太坊交易并执行,以供基于所述合约对所述交易进行业务逻辑验证。

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

当验证通过时,执行转账操作,生成新的UTXO数据;

将所述UTXO数据存入所述数据库中,所述UTXO数据包括:新的Token;

其中,在生成新的Token时,判断是否有生成新的合约地址或所述交易传入的参数中是否包含有合约地址,若是,则将该合约地址作为所述交易新生成的Token挂载的合约地址写入所述数据库中。

可选地,所述交易传入的参数包括:调用用于业务逻辑验证的合约的函数接口以及与进行业务逻辑验证相关的参数;

所述与进行业务逻辑验证相关的参数包括:消费该交易对应Token的账号、和/或消费该交易对应Token的数额、和/或消费该交易对应Token的时间。。

可选地,当所述交易生成新的Token时,所述交易传入的参数还包括:调用用于生成新合约地址的合约的函数接口以及与新的Token对应的业务逻辑验证相关的参数;

所述与新的Token对应的业务逻辑验证相关的参数包括:允许消费新生成的Token的账号列表、和/或允许消费新生成的Token的金额上限、和/或允许消费新生成的Token的时间期限。

可选地,所述相关信息还包括:所述交易使用的Token对应的所有权信息、所述交易待使用的token的数额;

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

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

基于所述交易待使用的token的数额与本次交易的金额,验证所述交易待使用的token的数额总和是否等于本次交易待生成的Token的数额总和

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

在执行区块链网络中广播的待共识区块交易队列中的交易时,判断当前执行的交易的类型;

当执行的交易的类型为UTXO交易且为铸币操作时,执行铸币操作,生成新的UTXO数据;

将所述UTXO数据存入数据库中,所述UTXO数据包括:新的Token;

其中,在生成新的Token时,判断是否有生成新的合约地址或所述交易传入的参数中是否包含有合约地址,若是,则将该合约地址作为所述交易新生成的Token挂载的合约地址写入所述数据库中,以供用于后续消费该新的Token时,通过所述合约地址调用对应合约对消费该新的Token的交易进行业务逻辑验证。

可选地,所述交易传入的参数包括:调用用于生成新合约地址的合约的函数接口以及与新的Token对应的业务逻辑验证相关的参数;

所述与新的Token对应的业务逻辑验证相关的参数包括:允许消费新生成的Token的账号列表、和/或允许消费新生成的Token的金额上限、和/或允许消费新生成的Token的时间期限。

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

判断模块,用于在执行区块链网络中广播的待共识区块交易队列中的交易时,判断当前执行的交易的类型;

读取模块,用于当执行的交易的类型为UTXO交易且为转账操作时,从数据库中读取相关信息;

验证模块,用于基于所述相关信息,对所述交易进行验证;

所述验证模块还用于:当所述相关信息中包含有所述交易使用的Token挂载的合约地址时,基于所述合约地址与所述交易传入的参数,构建新的以太坊交易并执行,以供基于所述合约对所述交易进行业务逻辑验证。

可选地,所述基于区块链的转账验证装置还包括:

生成模块,用于当验证通过时,执行转账操作,生成新的UTXO数据;将所述UTXO数据存入所述数据库中,所述UTXO数据包括:新的Token;

其中,所述生成模块还用于:在生成新的Token时,判断是否有生成新的合约地址或所述交易传入的参数中是否包含有合约地址,若是,则将该合约地址作为所述交易新生成的Token挂载的合约地址写入所述数据库中。

可选地,所述交易传入的参数包括:调用用于业务逻辑验证的合约的函数接口以及与进行业务逻辑验证相关的参数;

所述与进行业务逻辑验证相关的参数包括:消费该交易对应Token的账号、和/或消费该交易对应Token的数额、和/或消费该交易对应Token的时间。。

可选地,当所述交易生成新的Token时,所述交易传入的参数还包括:调用用于生成新合约地址的合约的函数接口以及与新的Token对应的业务逻辑验证相关的参数;

所述与新的Token对应的业务逻辑验证相关的参数包括:允许消费新生成的Token的账号列表、和/或允许消费新生成的Token的金额上限、和/或允许消费新生成的Token的时间期限。

可选地,所述相关信息还包括:所述交易使用的Token对应的所有权信息、所述交易待使用的token的数额;

所述验证模块还用于:

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

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

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

本发明在以太坊上通过拆分账户模型的余额为具有特定数额的Token,拆分后的Token为转账的操作对象,而包含有Token的交易为UTXO交易。采用Token的拆分逻辑后,UTXO交易过程跟踪的是每个Token的所有权的转移,而不是账户的状态变化,Token能够明确记录其来源及其交易限制条件,并在下一次转账交易中该Token被消费使用时也能根据交易限制条件进行包括业务逻辑校验在内的多种校验形式,从而提升了区块链网络中转账交易的可扩展性。

附图说明

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

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

图3为本发明基于区块链的转账验证方法第二实施例的流程示意图;

图4为本发明基于区块链的转账验证方法第三实施例的流程示意图;

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

图6为本发明基于区块链的转账验证装置第二实施例的功能模块示意图。

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

具体实施方式

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

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

(一)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交易的处理流程进行说明之前,先对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,读取交易待使用的token的数额。

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

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

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

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

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

比如,账户A向账户B发起一笔转账交易,该交易需要消费一Token,而该Token挂载有验证合约,且该Token挂载的验证合约指定了消费该Token的账号、消费时间、消费金额等约束条件,则若该笔转账交易传入的参数满足该Token的所有约束条件,则业务逻辑验证通过,允许消费该Token。

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

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

可选的,在生成新的Token时,判断是否有生成新的合约地址或该交易传入的参数中是否包含有合约地址,若是,则将该合约地址作为该交易新生成的Token挂载的合约地址写入数据库中,以供下一次消费该新的Token时,通过该合约地址对应的合约,对交易进行业务逻辑验证。

(二)以太坊转账交易处理逻辑

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

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

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

步骤S110,在执行以太坊网络中广播的待共识区块交易队列中的交易时,判断当前执行的交易的类型。

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

本实施例中,不同类型的交易,对应的处理逻辑。因此,在执行交易时,先判断当前执行的交易的类型。区块链中广播的待共识区块交易队列中交易的类型除以太坊交易之外,还包括有UTXO交易。以太坊交易为基于账户模型的交易,而UTXO交易为基于UTXO模型的交易且在满足一定条件时可以并发执行。交易的类型可通过交易的编码形式进行判断,比如以太坊交易中的data数据采用RLP编码,而UTXO交易中的data数据采用Json编码。不同类型的交易,对应的处理逻辑不同。

步骤S120,当执行的交易的类型为UTXO交易且为转账操作时,从数据库中读取相关信息;

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

步骤S130,基于所述相关信息,对所述交易进行验证;

可选的,所述相关信息包括:所述交易使用的Token对应的所有权信息、所述交易待使用的token的数额;

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

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

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

业务逻辑验证的实现流程包括:

(1)基于所述验证合约的地址与所述交易传入的参数,构建新的以太坊交易;

可选的,所述参数包括:调用验证合约的函数接口以及还包括消费该交易对应Token的账号、和/或消费该交易对应Token的数额、和/或消费该交易对应Token的时间;

比如,账户A向账户B发起一笔转账交易,该交易需要消费一Token,而该Token挂载有验证合约,且该Token挂载的验证合约指定了消费该Token的账号、消费时间、消费金额等约束条件,则若该笔转账交易传入的参数满足该Token的所有约束条件,则业务逻辑验证通过,允许消费该Token。

(2)执行构建的以太坊交易,以供基于所述验证合约对所述交易进行业务逻辑验证。

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

本实施例在以太坊上通过拆分账户模型的余额为具有特定数额的Token,拆分后的Token为转账的操作对象,而包含有Token的交易为UTXO交易。采用Token的拆分逻辑后,UTXO交易过程跟踪的是每个Token的所有权的转移,而不是账户的状态变化,Token能够明确记录其来源及其交易限制条件,并在下一次转账交易中该Token被消费使用时也能根据交易限制条件进行包括业务逻辑校验在内的多种校验形式,从而提升了区块链网络中转账交易的可扩展性。

参照图3,图3为本发明基于区块链的转账验证方法第二实施例的流程示意图。本实施例中,在上述步骤S130之后,还包括:

步骤S140,当验证通过时,执行转账操作,生成新的UTXO数据;

步骤S150,将所述UTXO数据存入所述数据库中,所述UTXO数据包括:新的Token;

其中,在生成新的Token时,判断是否有生成新的合约地址或所述交易传入的参数中是否包含有合约地址,若是,则将该合约地址作为所述交易新生成的Token挂载的合约地址写入所述数据库中。

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

本实施例中,新生成的Token可选择挂载合约地址,以供下一次消费该Token时进行业务逻辑验证。

本实施例中,Token所挂载的合约地址的来源方式有以下两种:

(1)在生成Token的同时,生成一合约地址作为该Token所挂载的合约地址;

可选的,当交易生成新的Token时,所述交易传入的参数还包括:调用用于生成新合约地址的合约的函数接口以及与新的Token对应的业务逻辑验证相关的参数;

所述与新的Token对应的业务逻辑验证相关的参数包括:允许消费新生成的Token的账号列表、和/或允许消费新生成的Token的金额上限、和/或允许消费新生成的Token的时间期限。

本方式中,通过调用模板合约的函数接口与上述参数,构建新的以太坊交易,执行该以太坊交易,以供生成该模板合约的实例合约的地址,所述实例合约中含有业务逻辑验证所需的数据记录及相关操作接口,也即将实例合约地址作为该Token所挂载的合约地址。

(2)在发起交易时,传入一合约地址作为该Token所挂载的合约地址。

为便于进一步理解本发明,下面对本发明的转账过程进行举例说明。

假设账户A具有Token1(挂载了验证合约M)、Token2(未挂载验证合约),账户B具有Token3(挂载了验证合约P),账户C具有Token4(挂载了验证合约Q)。

(1)账户A向账户B转账,消费Token1(属于账户A),产生新的token1(属于账户B)

本情形下,转账交易执行过程中,调用Token1挂载的验证合约M对交易进行业务逻辑验证,比如验证账户A是否允许向账户B转账、转账金额是否超过设定的金额上限、转账时间是否在允许的转账期限内。

本情形下,转账交易产生的新token1可以选择挂载验证合约,也可以选择不挂载验证合约,其中,token1挂载的验证合约既可以是Token1挂载的验证合约M,也可以是挂载的新的验证合约,还可以是挂载的验证合约M与新的验证合约。

本情形下,新产生的Token挂载原Token的验证合约,可以保证各Token继续沿用原Token的业务验证逻辑。

(2)账户A向账户B转账,消费Token2(属于账户A),产生新的token2(找零Token,属于账户A)、新的token3(属于账户B)

本情形下,转账交易执行过程中,由于Token2未挂载验证合约,因而不需要进行业务逻辑验证。

本情形下,转账交易产生的新token2、token3可以选择挂载验证合约,也可以选择不挂载验证合约,其中,token2、token3挂载的验证合约既可以是Token1挂载的验证合约M,也可以是挂载的新的验证合约,还可以是挂载的验证合约M与新的验证合约。

(3)账户B向账户C转账,消费token1(属于账户B),产生新的token4(属于账户C),其中,token1挂载有Token1的验证合约M、新的验证合约H;

本情形下,转账交易执行过程中,调用token1挂载的验证合约M、H对交易进行业务逻辑验证,比如验证账户B是否允许向账户C转账、转账金额是否超过设定的金额上限、转账时间是否在允许的转账期限内。

本情形下,转账交易产生的新token4可以选择挂载验证合约,也可以选择不挂载验证合约,其中,token4挂载的验证合约既可以是token1挂载的Token1的验证合约M,也可以是挂载的验证合约H,还可以是挂载新的验证合约,或者还可以是挂载验证合约M、H以及新的验证合约。

本情形下,新产生的Token挂载的验证合约既可以是原Token的验证合约,也可以是本次交易新生成的验证合约,从而可以保证Token挂载合约的多样性,提升业务逻辑验证的灵活性与多变性。

参照图4,图4为本发明基于区块链的转账验证方法第三实施例的流程示意图。本实施例中,基于区块链的转账验证方法还包括:

步骤S210,当执行的交易的类型为UTXO交易且为铸币操作时,执行铸币操作,生成新的UTXO数据;

步骤S220,将所述UTXO数据存入所述数据库中,所述UTXO数据包括:新的Token;

其中,在生成新的Token时,判断是否有生成新的合约地址或所述交易传入的参数中是否包含有合约地址,若是,则将该合约地址作为所述交易新生成的Token挂载的合约地址写入所述数据库中。

本实施例中,在铸币生成新的Token的过程中,为便于后续消费该新Token时进行业务逻辑校验,因此,需要为铸币新生成的Token挂载合约地址。其中,Token所挂载的合约地址的来源方式有以下两种:

(1)在生成Token的同时,生成一合约地址作为该Token所挂载的合约地址;(2)在发起交易时,传入一合约地址作为该Token所挂载的合约地址。

下面具体以上述第一种来源方式进行举例说明。

例如,在发送UTXO交易之前,由用户先部署模板合约,该模板合约在后续交易中可实例化满足业务逻辑的实例合约。

例如,在发送UTXO交易时,除txout字段中必须的转账对象、转账数额等字段,为实现给Token挂载业务合约进行后续转账逻辑校验,用户还需另外提供参数。

可选的,所述参数包括:调用模板合约的函数接口以及还包括允许消费该交易新生成的Token的账号列表、和/或允许消费该交易新生成的Token的金额上限、和/或允许消费该交易新生成的时间期限。

例如,模板合约的地址为initcontract字段值,参数为initfuncandparams字段值,则在执行铸币交易而创建新Token时,先判断initcontract字段与initfuncandparams字段是否有值,若有值,则说明该新建的Token需要挂载业务逻辑验证合约;基于所述模板合约的地址与上述参数,构建新的以太坊交易,执行该以太坊交易,以供生成该模板合约的实例合约的地址,所述实例合约中含有业务逻辑验证所需的数据记录及相关操作接口。

例如,账户A中新生成了一Token,该Token挂载有验证合约,则通过上述参数构建后续消费该Token的约束条件,比如指定消费该Token的账号、消费时间、消费金额等约束条件,则若后续消费该Token时所传入的参数满足该Token的所有约束条件,则业务逻辑验证通过,允许消费该Token。

本实施例中,由于构建的以太坊交易为以太坊类型的交易,因此需要创建EVM对象来执行该新建的以太坊交易。同时,由于为实现对新建Token挂载验证合约而构建的以太坊交易并非以太坊网络中的真实交易,因而该以太坊交易以及该以太坊交易执行后的回执不记入区块链中。

本实施例中,由于以太坊中智能合约的存储方式为合约地址,因此,执行该以太坊交易的结果为模板合约的一实例合约地址。最后将所述实例合约的地址作为所述交易生成的Token挂载的验证合约的地址写入所述数据库中。

为进一步理解本发明,下面对本发明中交易所挂载的验证合约进行说明。

(1)合约对应的验证逻辑的实现位置

本发明的验证逻辑目前基于智能合约进行实现,后续如果智能合约所实现的验证逻辑进行日常化固定化后,合约对应的验证逻辑可转由底层代码进行实现,进而可以实现更高的验证性能和提供更广泛的验证能力。

(2)验证逻辑对数据的操作类型

验证逻辑所基于的智能合约,根据验证逻辑对链上数据的操作,而可划分为只读合约和写入合约。

例如,发起转账交易的账号是否为合约已记录的特定账号之一,以此限制只能由特定账号使用一Token,则在执行业务校验逻辑过程中该合约的类型为只读合约。

例如,限制一账户一天对外转账限额为500元,每次转账交易前需要验证已转账限额与本交易将转账数额之和是否超限,验证成功后才能转账,同时转账成功后会更新该账号的已转账限额记录,则针对业务校验逻辑的过程中该合约的类型为写入合约。

(3)验证合约的分类

验证合约根据合约的逻辑与挂载合约主体(Token)的关系,可区分为实例合约和通用合约。

实例合约与Token一一对应,以上述“发起转账交易的账号是否为合约已记录的特定账号之一”的限制逻辑为例,该限制条件只针对某个Token有效,各Token之间的限制条件可以不一样,且限制条件只记录在该Token上。实例合约是模板合约实例化的结果,UTXO交易执行过程中调用模板合约生成的实例合约将含有验证逻辑所需的数据记录及相关操作接口。以上述业务逻辑为例,模板合约提供一账号列表的白名单记录及判断一输入账号是否在白名单账号列表中的接口,实例合约生成时将根据传入的Token能被使用的账号来初始化合约的白名单账号列表。

通用合约的数据全局共享,以上述“限制一账户一天对外转账限额为500元”的限制逻辑为例,一账户日转账限额的业务逻辑与该账户有关,并不涉及到某个具体Token,因而具有上述业务限制逻辑的Token创建时,将赋予通用合约的地址,从而便于后续消费该Token时提供给该合约对象进行读写日转账限额的操作。

实例合约及通用合约的分类,与该智能合约是只读合约还是写入合约没有必然联系。

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

判断模块10,用于在执行以太坊网络中广播的待共识区块交易队列中的交易时,判断当前执行的交易的类型,所述交易的类型包括UTXO交易;

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

本实施例中,不同类型的交易,对应的处理逻辑。判断模块30在执行交易时,先判断当前执行的交易的类型。区块链中广播的待共识区块交易队列中交易的类型除以太坊交易之外,还包括有UTXO交易。以太坊交易为基于账户模型的交易,而UTXO交易为基于UTXO模型的交易且在满足一定条件时可以并发执行。交易的类型可通过交易的编码形式进行判断,比如以太坊交易中的data数据采用RLP编码,而UTXO交易中的data数据采用Json编码。不同类型的交易,对应的处理逻辑不同。

读取模块20,用于当执行的交易的类型为UTXO交易且为转账交易时,从数据库中读取相关信息;

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

验证模块30,用于基于所述相关信息,对所述交易进行验证;

可选的,所述相关信息包括:所述交易使用的Token对应的所有权信息、所述交易待使用的token的数额;

所述验证模块30具体用于:

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

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

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

本实施例中,所述验证模块30还具体用于:

当所述相关信息中包含有所述交易使用的Token挂载的验证合约的地址时,基于所述验证合约的地址与所述交易传入的参数,构建新的以太坊交易并执行,以供基于所述验证合约对所述交易进行业务逻辑验证。

可选的,所述参数包括:调用验证合约的函数接口以及还包括消费该交易对应Token的账号、和/或消费该交易对应Token的数额、和/或消费该交易对应Token的时间。

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

生成模块40,用于当验证通过时,执行转账操作,生成新的UTXO数据;将所述UTXO数据存入所述数据库中,所述UTXO数据包括:新的Token;

其中,所述生成模块40还用于:在生成新的Token时,判断是否有生成新的合约地址或所述交易传入的参数中是否包含有合约地址,若是,则将该合约地址作为所述交易新生成的Token挂载的合约地址写入所述数据库中。

的UTXO数据,包括:新的Token以及与Token相关联的数据信息,比如生成一份新Vault数据、生成一份新UTXOTx数据以及Token中所有权人信息、Token状态等关系内容的修改。

本实施例中,新生成的Token可选择挂载合约地址,以供下一次消费该Token时进行业务逻辑验证。

本实施例中,Token所挂载的合约地址的来源方式有以下两种:

(1)在生成Token的同时,生成一合约地址作为该Token所挂载的合约地址;

(2)在发起交易时,传入一合约地址作为该Token所挂载的合约地址。

进一步地,在本发明基于区块链的转账验证装置另一实施例中,所述生成模块40还用于:

当执行的交易的类型为UTXO交易且为铸币操作时,执行铸币操作,生成新的UTXO数据;将所述UTXO数据存入所述数据库中,所述UTXO数据包括:新的Token;

其中,所述生成模块40还用于:在生成新的Token时,判断是否有生成新的合约地址或所述交易传入的参数中是否包含有合约地址,若是,则将该合约地址作为所述交易新生成的Token挂载的合约地址写入所述数据库中。

本实施例中,在铸币生成新的Token的过程中,为便于后续消费该新Token时进行业务逻辑校验,因此,需要为铸币新生成的Token挂载合约地址。其中,Token所挂载的合约地址的来源方式有以下两种:

(1)在生成Token的同时,生成一合约地址作为该Token所挂载的合约地址;(2)在发起交易时,传入一合约地址作为该Token所挂载的合约地址。

下面具体以上述第一种来源方式进行举例说明。

例如,在发送UTXO交易之前,由用户先部署模板合约,该模板合约在后续交易中可实例化满足业务逻辑的实例合约。

例如,在发送UTXO交易时,除txout字段中必须的转账对象、转账数额等字段,为实现给Token挂载业务合约进行后续转账逻辑校验,用户还需另外提供参数。

可选的,所述参数包括:调用模板合约的函数接口以及还包括允许消费该交易新生成的Token的账号列表、和/或允许消费该交易新生成的Token的金额上限、和/或允许消费该交易新生成的时间期限。

例如,模板合约的地址为initcontract字段值,参数为initfuncandparams字段值,则在执行铸币交易而创建新Token时,先判断initcontract字段与initfuncandparams字段是否有值,若有值,则说明该新建的Token需要挂载业务逻辑验证合约;基于所述模板合约的地址与上述参数,构建新的以太坊交易,执行该以太坊交易,以供生成该模板合约的实例合约的地址,所述实例合约中含有业务逻辑验证所需的数据记录及相关操作接口。

本实施例中,由于构建的以太坊交易为以太坊类型的交易,因此需要创建EVM对象来执行该新建的以太坊交易。同时,由于为实现对新建Token挂载验证合约而构建的以太坊交易并非以太坊网络中的真实交易,因而该以太坊交易以及该以太坊交易执行后的回执不记入区块链中。

本实施例中,由于以太坊中智能合约的存储方式为合约地址,因此,执行该以太坊交易的结果为模板合约的一实例合约地址。最后将所述实例合约的地址作为所述交易生成的Token挂载的验证合约的地址写入所述数据库中。

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

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

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

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

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