CN112712433B - 一种基于区块链的数据状态管理和查询方法及区块链装置 - Google Patents
一种基于区块链的数据状态管理和查询方法及区块链装置 Download PDFInfo
- Publication number
- CN112712433B CN112712433B CN202110025254.9A CN202110025254A CN112712433B CN 112712433 B CN112712433 B CN 112712433B CN 202110025254 A CN202110025254 A CN 202110025254A CN 112712433 B CN112712433 B CN 112712433B
- Authority
- CN
- China
- Prior art keywords
- transaction
- state
- data
- hash value
- blockchain
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Marketing (AREA)
- Economics (AREA)
- Development Economics (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
本说明书实施例提供了一种基于区块链的数据状态管理和查询方法及区块链节点,所述方法由区块链节点执行,包括:获取用于更改数据状态的第一交易,所述第一交易中包括第一数据在本次状态更改之后的状态、本次状态更改对应的第一操作规则的标识、以及上一个更改所述第一数据的状态的交易的哈希值;根据所述上一个更改所述第一数据的状态的交易的哈希值,确定所述第一数据的当前状态;基于所述第一操作规则的标识读取预存的第一操作规则,所述第一操作规则中包括状态更改前的状态和状态更改后的状态;使用所述第一操作规则对所述第一数据的当前状态和在本次更改之后的状态进行验证;在验证通过的情况中,确定所述第一交易执行成功。
Description
技术领域
本说明书实施例涉及区块链技术领域,更具体地,涉及一种基于区块链的数据状态管理和查询方法及区块链节点。
背景技术
在很多区块链的应用中,尤其是在金融贸易场景,需要进行电子文档的生命周期的管理。所述电子文档例如为进出口业务中的产品起源证明文件(Certificate oforigin,CoO)、金融业务中的备用信用证明文件(Standby letter of credit, SBLC)等,这些电子文档随着业务的进展被创建、背书、修改、删除等,因此具有一定的生命周期。在现有技术中,为了对上述电子文档进行生命周期的管理,通常在区块链中部署专用的智能合约,以存储和管理电子文档的生命周期。
发明内容
本说明书实施例旨在提供一种更有效的基于区块链的数据状态管理和查询方案,通过可关联原生交易(native linkable transaction)进行数据状态管理和查询,提高了区块链的执行效率和每秒交易数。
为实现上述目的,本说明书第一方面提供一种基于区块链的数据状态管理方法,所述方法由区块链节点执行,包括:获取用于更改数据状态的第一交易,所述第一交易中包括第一数据在本次状态更改之后的状态、本次状态更改对应的第一操作规则的标识、以及上一个更改所述第一数据的状态的交易的哈希值;根据所述上一个更改所述第一数据的状态的交易的哈希值,确定所述第一数据的当前状态;基于所述第一操作规则的标识读取预存的第一操作规则,所述第一操作规则中包括状态更改前的状态和状态更改后的状态;使用所述第一操作规则对所述第一数据的当前状态和在本次更改之后的状态进行验证;在验证通过的情况中,确定所述第一交易执行成功。
在一种实施方式中,所述第一交易中包括所述第一数据的标识。
在一种实施方式中,所述第一操作规则的标识包括数据类型和与所述数据类型对应的状态更改方法的标识。
在一种实施方式中,基于所述第一操作规则的标识读取预存的第一操作规则包括,基于所述第一操作规则的标识从所述区块链的创世区块中读取所述第一操作规则。
在一种实施方式中,所述第一交易为更改第一数据状态的第一个交易,所述上一个更改所述第一数据的状态的交易的哈希值为空值,所述根据所述上一个更改所述第一数据的状态的交易的哈希值,确定所述第一数据的当前状态包括,根据所述上一个更改所述第一数据的状态的交易的哈希值,确定所述第一数据的当前状态为空值。
在一种实施方式中,所述第一交易中包括所述第一交易的哈希值。
在一种实施方式中,根据所述上一个更改所述第一数据的状态的交易的哈希值,确定所述第一数据的当前状态包括,根据所述上一个更改所述第一数据的状态的交易的哈希值获取上一个更改所述第一数据的状态的第二交易,从所述第二交易中读取所述第一数据的状态作为所述第一数据的当前状态。
在一种实施方式中,所述方法还包括,在获取所述第二交易之后,确定所述第二交易的状态;所述从所述第二交易中读取所述第一数据的状态作为所述第一数据的当前状态包括,在所述第二交易的状态为未使用状态的情况中,从所述第二交易中读取所述第一数据的状态作为所述第一数据的当前状态;所述方法还包括,在确定所述第一交易执行成功之后,将所述第二交易的状态修改为已使用状态,将所述第一交易的状态修改为未使用状态。
在一种实施方式中,所述第一交易中包括所述第一交易的类型,所述第一交易的类型指示所述第一交易为可关联原生交易。
在一种实施方式中,所述方法由区块链节点通过运行区块链中预先部署的验证合约而执行。
本说明书第二方面提供一种在区块链中查询数据状态的方法,所述方法由区块链节点执行,包括:
接收第一交易的哈希值,所述第一交易是最晚的更改第一数据的状态的交易,所述第一交易中包括所述第一数据在所述第一交易对应的状态更改之后的状态、所述状态更改对应的第一操作规则的标识、以及所述第一交易的前一个更改所述第一数据的状态的交易的哈希值,其中,所述第一操作规则中包括状态更改前的状态和状态更改后的状态,用于对所述第一交易进行验证;
基于所述第一交易的哈希值从存储的区块中获取所述第一交易;
返回所述第一交易,以提供所述第一交易中包括的所述第一数据的状态作为所述第一数据的当前状态。
在一种实施方式中,所述方法还包括,在基于所述第一交易的哈希值从存储的区块中获取所述第一交易之后,读取所述第一交易的执行结果,所述返回所述第一交易包括,在所述第一交易执行成功的情况中,返回所述第一交易。
在一种实施方式中,所述方法还包括,基于所述第一交易的哈希值返回所述第一交易的状态,以用于验证所述第一交易是否为最晚的更改第一数据状态的交易。
本说明书第三方面提供一种在区块链中查询数据状态的方法,所述方法由区块链节点执行,包括:
接收第一数据的标识;
基于所述第一数据的标识从存储的区块中获取第一交易,所述第一交易为最晚的更改所述第一数据的状态的交易,所述第一交易中包括第一数据的标识、所述第一数据在所述第一交易对应的状态更改之后的状态、所述状态更改对应的第一操作规则的标识、以及所述第一交易的前一个更改所述第一数据的状态的交易的哈希值,其中,所述第一操作规则中包括状态更改前的状态和状态更改后的状态,用于对所述第一交易进行验证;
返回所述第一交易,以提供所述第一交易中包括的所述第一数据的状态作为所述第一数据的当前状态。
本说明书第四方面提供一种区块链节点,包括:获取单元,用于获取用于更改数据状态的第一交易,所述第一交易中包括第一数据在本次状态更改之后的状态、本次状态更改对应的第一操作规则的标识、以及上一个更改所述第一数据的状态的交易的哈希值;第一确定单元,用于根据所述上一个更改所述第一数据的状态的交易的哈希值,确定所述第一数据的当前状态;读取单元,用于基于所述第一操作规则的标识读取预存的第一操作规则,所述第一操作规则中包括状态更改前的状态和状态更改后的状态;验证单元,用于使用所述第一操作规则对所述第一数据的当前状态和在本次更改之后的状态进行验证;第二确定单元,用于在验证通过的情况中,确定所述第一交易执行成功。
在一种实施方式中,所述第一操作规则的标识包括数据类型和与所述数据类型对应的状态更改方法的标识。
在一种实施方式中,所述读取单元还用于,基于所述第一操作规则的标识从所述区块链的创世区块中读取所述第一操作规则。
在一种实施方式中,所述第一交易为更改第一数据状态的第一个交易,所述上一个更改所述第一数据的状态的交易的哈希值为空值,所述第一确定单元还用于,根据所述上一个更改所述第一数据的状态的交易的哈希值,确定所述第一数据的当前状态为空值。
在一种实施方式中,所述第一交易中包括所述第一交易的哈希值。
在一种实施方式中,所述第一确定单元包括,获取子单元,用于根据所述上一个更改所述第一数据的状态的交易的哈希值获取上一个更改所述第一数据的状态的第二交易,读取子单元,用于从所述第二交易中读取所述第一数据的状态作为所述第一数据的当前状态。
在一种实施方式中,所述区块链节点还包括,第三确定单元,用于在获取所述第二交易之后,确定所述第二交易的状态;所述读取子单元还用于,在所述第二交易的状态为未使用状态的情况中,从所述第二交易中读取所述第一数据的状态作为所述第一数据的当前状态;所述区块链节点还包括,修改单元,用于在确定所述第一交易执行成功之后,将所述第二交易的状态修改为已使用状态,将所述第一交易的状态修改为未使用状态。
在一种实施方式中,所述第一交易中包括所述第一交易的类型,所述第一交易的类型指示所述第一交易为可关联原生交易。
本说明书第五方面提供一种区块链节点,包括:
接收单元,用于接收第一交易的哈希值,所述第一交易是最晚的更改第一数据的状态的交易,所述第一交易中包括所述第一数据在所述第一交易对应的状态更改之后的状态、所述状态更改对应的第一操作规则的标识、以及所述第一交易的前一个更改所述第一数据的状态的交易的哈希值,其中,所述第一操作规则中包括状态更改前的状态和状态更改后的状态,用于对所述第一交易进行验证;
获取单元,用于基于所述第一交易的哈希值从存储的区块中获取所述第一交易;
返回单元,用于返回所述第一交易,以提供所述第一交易中包括的所述第一数据的状态作为所述第一数据的当前状态。
在一种实施方式中,所述区块链节点还包括,读取单元,用于在基于所述第一交易的哈希值从存储的区块中获取所述第一交易之后,读取所述第一交易的执行结果,所述返回单元还用于,在所述第一交易执行成功的情况中,返回所述第一交易。
在一种实施方式中,所述返回单元还用于,基于所述第一交易的哈希值返回所述第一交易的状态,以用于验证所述第一交易是否为最晚的更改第一数据状态的交易。
本说明书第六方面提供一种区块链节点,包括:
接收单元,用于接收第一数据的标识;
获取单元,用于基于所述第一数据的标识从存储的区块中获取第一交易,所述第一交易为最晚的更改所述第一数据的状态的交易,所述第一交易中包括第一数据的标识、所述第一数据在所述第一交易对应的状态更改之后的状态、所述状态更改对应的第一操作规则的标识、以及所述第一交易的前一个更改所述第一数据的状态的交易的哈希值,其中,所述第一操作规则中包括状态更改前的状态和状态更改后的状态,用于对所述第一交易进行验证;
返回单元,用于返回所述第一交易,以提供所述第一交易中包括的所述第一数据的状态作为所述第一数据的当前状态。
本说明书第七方面提供一种区块链节点,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现如本说明书第一方面、第二方面和第三方面所述的方法。
本说明书第八方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述第一方面、第二方面和第三方面所述的方法。
在本说明书实施例提供的方案中,通过在交易中包括Prev_hash字段,从而将该交易与处理同一个数据的前一个交易关联起来,并且通过在交易中包括区块链中预存的数据类型和方法的标识,从而可基于该类型的方法对交易进行验证,以基于预定规则进行对数据的生命周期的连续管理。本说明书实施例的方案不需要相对于不同类型的数据设置不同的用于更改数据状态的智能合约,数据的状态随着交易被记录到区块数据库中,而不是记录到智能合约的存储空间中,从而提高了区块链节点中的交易处理效率,提高了每秒交易数。
附图说明
通过结合附图描述本说明书实施例,可以使得本说明书实施例更加清楚:
图1示出文件生命周期中的文件状态变更示意图;
图2示出根据本说明书实施例的一种在区块链中管理文件生命周期的方案示意图;
图3示出根据本说明书实施例的一种基于区块链的文件管理方法流程图;
图4示出区块链节点中对交易的相关数据的存储示意图;
图5示出根据本说明书实施例的一种在区块链中查询数据状态的方法流程图
图6示出根据本说明书实施例的一种在区块链中查询数据状态的方法流程图;
图7示出根据本说明书实施例的一种区块链节点的架构图;
图8示出根据本说明书实施例的一种区块链节点的架构图;
图9示出根据本说明书实施例的一种区块链节点的架构图。
实施方式
下面将结合附图描述本说明书实施例。
在很多业务场景中,需要进行对电子文档(下文描述为文件)的生命周期的管理。所述文件例如为CoO文件、SBLC文件等。图1示出文件生命周期中的文件状态变更示意图。如图1中所示,例如,对于CoO文件,其初始状态为空值(nil),即生命周期还未开始,在颁发机构颁发CoO文件之后,即创建(create)了CoO文件,该CoO文件的状态由空值变更为有效(effective),在背书机构对该CoO文件进行背书(endorse)之后,该CoO文件的状态由有效变更为背书(endorsed),在颁发机构删除(reject)该CoO文件之后,该CoO文件的状态由有效变更为结束(end),即该CoO文件的生命周期结束。可以理解,图1所示的文件的生命周期中的状态变更只是示意性的,在实际中,文件随着各个机构对其的操作在其生命周期中可能具有更多的状态,如修改状态、审阅状态、维持状态等等,与图1中所示的状态变更类似地,对文件的任一操作对应于操作前状态和操作后状态之间的状态变更。
可以理解,本说明书实施例中虽然以文件的状态管理作为示例描述本说明书实施例的数据状态管理方案,本说明书实施例的数据状态管理方案不限于应用于文件,而可应用于任意具有状态变更过程的数据,所述数据例如可以包括电子资产、密钥等等。下文中将以图1中的文件的状态变更为例描述对数据状态的管理。
为了在区块链中对文件的生命周期进行管理,在一种方案中,在区块链中预先部署与文件的生命周期管理对应的智能合约,在该智能合约中包括与对文件的各个操作对应的方法,例如创建方法、背书方法、删除方法等。颁发机构在创建上述文件之后,可向区块链中发送调用该智能合约中的创建方法的交易。区块链中在对该交易共识完成之后,区块链中的各个节点(或部分节点)执行该交易,从而在该智能合约的存储空间中记录上述文件的状态为有效状态。在该技术方案中,区块链中需要预先部署与文件类型对应的智能合约,对于不同类型的文件又需要部署另一个智能合约,工作量繁重。另外,通过智能合约的存储空间来存储各个文件的状态,在文件数量巨大的场景下,区块链节点中对智能合约的存储空间的读写频繁,导致该存储空间成为读写热点,从而区块链节点的读写性能下降,使得每秒交易数减小。
图2示出根据本说明书实施例的一种在区块链中管理文件状态的方案示意图。如图2中所示,在区块链中,每个全节点中都存储有顺序排列的多个区块,所述多个区块例如存储在节点的区块数据库中。在各个区块中都包括多个交易的交易体,在各个交易的交易体中包括与多个字段分别对应的内容。其中,在创世区块中的某个交易(未示出)中包括预先设定的多种数据类型,其中例如包括图2中所示的类型r1,该类型r1例如与特定类型(例如CoO类型)的数据或文件相对应,其中包括用于对文件进行状态变更的方法,如创建方法、背书方法等。每个方法都包括对应的状态变更规则,例如,创建方法对应的状态变更规则为从空值状态变更为有效状态(即图2中的“nil→effective”),其中,nil状态为待变更状态的文件的当前状态,effective为该文件将变更为的状态。背书方法对应的状态变更规则为从有效状态变更为背书状态(即图2中的“effective→endorsed”)
图2中的区块m中包括交易Tx1,该交易Tx1的发送(To)字段为“r1”,数据(Data)字段中的方法(Method)字段为“create”,指示交易Tx1为基于类型r1中的创建方法对入参(Payload)字段中的文件Doc001的状态进行更改,该文件在此次更改之后的状态为Payload字段中包括的状态(即effective),其中Prev_hash字段用于记录对文件Doc001进行状态变更的前一个交易的哈希值,由于Tx1为创建文件Doc001的交易,因此,这里Prev_hash字段的值为空值。
当区块链节点在接收到经共识的区块n之后,执行区块n中包括的交易Tx2。根据交易Tx2中的To字段和Data字段可以确定,该交易Tx2用于根据类型r1中的背书方法将文件Doc001的状态更改为背书状态。区块链节点在执行交易Tx2时,根据交易Tx2中的Prev_hash(即交易Tx1的hash1)确定处理文件Doc001的前一个交易为Tx1,节点从本地获取交易Tx1,在确定交易Tx1的状态为未使用状态(unspent)之后,从交易Tx1中确定文件Doc001的当前状态为effective状态,且根据交易Tx2中记录的状态可确定交易Tx2将要变更为背书状态。之后区块链节点获取类型r1的背书方法,基于背书方法中的状态变更规则对文件Doc001的当前状态和将要变更的状态进行验证,在验证通过之后,确定交易Tx2执行成功。
在本说明书实施例提供的方案中,通过在交易中包括Prev_hash字段,从而将该交易与处理同一个文件的前一个交易关联起来,并且通过在交易中包括区块链中预存的数据类型和方法的标识,从而可基于该类型的方法对交易进行验证,以基于预定规则进行对文件的生命周期的连续管理。本说明书实施例的方案不需要相对于不同类型的文件设置不同的用于更改文件状态的智能合约,文件的状态随着交易被记录到区块数据库中,而不是记录到智能合约的存储空间中,从而提高了区块链节点中的交易处理效率,提高了每秒交易数。
下文将详细描述根据本说明书实施例的在区块链中管理数据状态的方法的各个步骤。
图3示出根据本说明书实施例的一种基于区块链的数据状态管理方法流程图,所述方法由区块链节点执行,包括:
步骤S301,获取用于更改数据状态的第一交易,所述第一交易中包括第一数据在本次状态更改之后的状态、本次状态更改对应的第一操作规则的标识、以及上一个更改所述第一数据的状态的交易的哈希值;
步骤S303,根据所述上一个更改所述第一数据的状态的交易的哈希值,确定所述第一数据的当前状态;
步骤S305,基于所述第一操作规则的标识读取预存的第一操作规则,所述第一操作规则中包括状态更改前的状态和状态更改后的状态;
步骤S307,使用所述第一操作规则对所述第一数据的当前状态和在本次更改之后的状态进行验证;
步骤S309,在验证通过的情况中,确定所述第一交易执行成功。
下文中将分别以图1中的交易Tx1和交易Tx2作为所述第一交易描述图3所示方法。
区块链的节点(或全节点)首先执行步骤S301,获取用于更改文件状态的交易Tx1。如图2中所示,该获取的交易Tx1例如为区块m中包括的交易,区块链节点在获取经共识的区块m之后,可从区块m中读取交易Tx1的交易体和签名。在一种实施方式中,区块链节点在从其它节点接收了区块m并从中获取交易Tx1之后,通过在虚拟机(例如以太坊区块链中的EVM虚拟机)中运行由区块链平台方预先部署的原生合约(即不是通过用户部署的合约)来进行对交易Tx1的验证。或者交易Tx1可通过调用相对于各种文件类型统一部署的智能合约来执行图3所示的方法步骤,在该情况中,相比于图2中所示的交易Tx1不同的是,交易Tx1的to字段为该智能合约的账户地址,在Data数据字段中包括对该智能合约的create方法的调用,并且在该方法的入参中除了包括“Doc001”和“effective”之外,还包括类型r1的标识及Prev_hash字段值。因此,图3所示方法可由区块链节点的虚拟机执行,步骤S301可以为由区块链的节点的虚拟机获取交易Tx1以执行交易Tx1,图3所示方法中的后续的各个步骤都可由虚拟机执行。下文中将以Tx1为原生交易为例进行描述。
所述交易Tx1(即交易Tx1的交易体)具体可包括如下内容:
Tx1= {
hash: “hash1”,
nonce: int,
type: “nativeLinkableTransaction”,
from: “senderID”,
to: “r1”,
data: {
method: “create”,
payload: “{docId: “Doc001”, “status”: “effective”,…}”
}
prev_hash: nil,
}
从该交易体可以看出,交易Tx1中包括如下7个字段:hash、nonce、type、from、to、data、prev_hash。其中,所述hash字段的值“hash1”为对交易体中的nonce、type、from、to、data、prev_hash六个字段的字段值的拼接数据取哈希而获取的值。所述nonce字段的值为from字段对应的交易发送账户发送的交易的计数。所述type字段的值“nativeLinkableTransaction”用于指示该交易的类型,即该交易Tx1为可关联原生交易。所述from字段的值为向区块链发送交易Tx1的账户(即senderID)。所述to字段的值“r1”用于指示交易Tx1通过使用区块链(例如创世区块)中预存的类型“r1”来进行对文件的管理。所述data字段中又包括method字段和payload字段,其中,所述method字段的值“create”指示该交易Tx1用于使用类型“r1”中的“create”方法进行对文件的状态变更,所述payload字段的值“{docId: “Doc001”, “status”: “effective”,…}”表示交易Tx1对文件Doc001进行状态变更,并且将要将文件Doc001的状态变更为“effective”状态。所述prev_hash字段的值“nil”用于表示交易Tx1为对文件Doc001进行管理的第一个交易,因此,对文件Doc001进行管理的前一个交易的哈希值为空值。
可以理解,上文中描述的交易中包括的内容仅仅是示意性的,而不用于限制本说明书实施例的范围,例如,根据区块链应用场景的不同,交易中可以包括更多或更少的内容,本说明书实施例对此不作限定。例如,交易Tx1中的文件标识“Doc001”不是必要的,更改文件状态的机构可以在本地将交易标识(例如交易哈希值)与文件标识关联起来,并告知文件状态查询者与文件对应的交易的标识以供查询,从而可不用在交易中包括对应的文件的标识。另外,交易Tx1中的type字段可以是可选的,区块链节点可根据交易Tx1中的to字段确定该交易的类型是可关联原生交易。另外,所述交易Tx1中的hash字段也是可选的,区块链节点可基于交易的交易体计算获得交易的哈希值,当交易被存储到区块链中之后,在区块链节点中可通过数据表的形式记录交易哈希值与交易存储地址的映射关系,从而可通过该映射关系基于交易的哈希值获取交易。
区块链节点在获取经共识的交易Tx1之后,将执行交易Tx1,以提交交易Tx1,从而最终将交易Tx1存入区块数据库中。
在执行交易Tx1的过程中,区块链节点首先执行步骤S303,根据交易Tx1中的字段prev_hash的值,确定文件Doc001的当前状态。根据字段prev_hash的值“nil”,可确定文件Doc001的当前状态为空值,即文件Doc001尚未创建。
在步骤S305,区块链节点基于交易Tx1中的类型“r1”和方法“create”读取预存的操作规则。区块链节点例如可从创世块中读取所述操作规则。可以理解,本说明书实施例中不限于在创世块中读取所述操作规则,而可以在其他区块中存储所述操作规则,或者在其他存储空间存储所述操作规则。参考图1中的创世区块中记录的“Type r1”中的“Methodcreate” 对应的操作规则,该操作规则为,将当前状态“nil”变更为状态“effective”。
区块链节点然后执行步骤S307,使用所述操作规则对文件Doc001的当前状态和在本次更改之后的状态进行验证。通过上述步骤S305获取了文件Doc001的当前状态为nil状态,而交易Tx1中记录的effective状态为文件Doc001将要变更为的状态,因此,文件Doc001的当前状态和在本次更改之后的状态与“Type r1”中的“Method create” 对应的操作规则相一致,因此可确定该验证通过。如果文件Doc001的当前状态和在本次更改之后的状态与“Type r1”中的“Method create” 对应的操作规则不一致,则验证未通过。
在步骤S309,在验证通过的情况中,确定交易Tx1执行成功。
具体是,在验证通过的情况中,区块链节点确定交易Tx1执行成功,提交交易Tx1,具体是,在内存中存储交易Tx1的交易体、签名和交易Tx1的执行成功的执行结果,并向交易Tx1的发送方返回交易执行成功通知。在一种实施方式中,还可以在状态数据库中将交易Tx1的状态记录为未使用状态。该执行成功的执行结果指示对文件的状态更改成功,文件的当前状态即为交易Tx1中包括的状态(即effective)。如果上述验证未通过,则区块链节点确定交易Tx1执行失败,在内存中存储交易Tx1的交易体、签名和交易Tx1的执行失败的执行结果,并向交易Tx1的发送方返回交易执行失败通知,该执行结果指示对文件的状态更改失败,文件的当前状态并未更改,即还是nil状态。
该节点在完成对区块m中的全部交易的执行之后,可将这些交易的交易体、签名和执行结果存入区块数据库中。其中,所述执行结果包括执行成功或执行失败。从而,区块链节点在执行区块m之后的区块中的交易时,如果关联到区块m中的交易,可从区块数据库中读取区块m中的关联交易。
图4示出区块链节点中对交易的相关数据的存储示意图。如图4所示,区块链节点中包括状态数据库和区块数据库。其中,所述区块数据库用于存储各个交易的交易体、交易的签名及交易的执行结果。图4中示意示出了交易Tx1和交易Tx2,下文中将详细描述交易Tx2的执行和向区块数据库的存入的过程。其中,交易Tx2中的Prev_hash等于交易Tx1的hash,即交易Tx2为交易Tx1的后一个对文件Doc001进行状态管理的交易,因此,交易Tx2通过Prev_hash进行对交易Tx1的关联。其中,每个交易的交易体中包括hash、nonce、type、from、to、data、Prev_hash七个字段的内容。交易的签名为通过交易发送账户的私钥对交易的哈希值进行签名所获取的数据。所述执行结果包括执行成功或执行失败。
所述状态数据库中包括各个交易的状态(未使用(unspent)或已使用(spent))。例如,当区块链节点在执行成功交易Tx1之后,会在状态数据库中记录交易Tx1的状态为未使用状态。当交易Tx2未提交时,交易Tx2对文件Doc001的状态更改还未生效,因此,交易Tx1中记录的文件状态仍为文件Doc001的当前状态,交易Tx1仍是未使用状态。当交易Tx2成功执行之后,交易Tx2对文件Doc001的状态更改成功,交易Tx1中记录的文件状态已经不是文件Doc001的当前状态,此时,区块链节点会将交易Tx1的状态修改为已使用状态,如图4中所示。另外,在状态数据库的所述数据表中,可记录各个交易的哈希值,从而可以根据各个交易的哈希值搜索到各个交易的状态。
区块链节点在对交易Tx1执行成功之后,如图2所示,接收到经共识的区块n,从而再次执行步骤S301,获取用于更改文件状态的交易Tx2。可以理解,这里虽然以交易Tx1和交易Tx2在不同的区块中作为示例进行描述,本说明书实施例不限于此。例如,交易Tx2可以与交易Tx1位于同一个区块中,在该情况中,当执行交易Tx2时,由于交易Tx1的相关数据尚未存储到区块数据库中,当需要关联到交易Tx1时,区块链节点从内存中获取交易Tx1的数据。
所述交易Tx2的交易体具体可以包括如下内容:
Tx2= {
hash: “hash2”,
nonce: int,
type: “nativeLinkableTransaction”,
from: “senderID”,
to: “r1”,
data: {
method: “endorse”,
payload: “{docId: “Doc001”, “status”: “endorsed”,…}”
}
prev_hash: “hash1”,
}
交易Tx2的交易体中包括的字段与交易Tx1中的字段相同,所不同的是,交易Tx2中的method字段的值为“endorse”,表示交易Tx2用于根据类型r1中的endorse方法将文件Doc001的状态变更为背书状态,另外,交易Tx2中的prev_hash字段的值为hash1(即交易Tx1的哈希值),表示交易Tx1相对于交易Tx2为对文件Doc001进行状态更改的前一个交易。
从交易Tx2的From字段可以看出,交易Tx2与交易Tx1由同一个账户发送,因此,该senderID可基于自身的操作历史获知相对于交易Tx2的对文件Doc001进行状态更改的前一个交易为交易Tx1,因此可获取交易Tx1的哈希值(hash1)作为交易Tx2的prev_hash字段的值。在另一种实施方式中,交易Tx2与交易Tx1的From字段是不同的账户,例如,在进出口业务中,交易Tx1由CoO文件颁发机构发送,交易Tx2由CoO文件背书机构发送,在该情况中,颁发机构在发送交易Tx1并确定交易Tx1执行成功之后,可将交易Tx1的哈希值发送给背书机构,以使得背书机构将交易Tx1的哈希值填充到交易Tx2的prev_hash字段中。
与上文类似地,区块链节点在获取交易Tx2之后,执行步骤S303,根据交易Tx2中的字段prev_hash的值确定文件Doc001的当前状态。
具体是,根据交易Tx2中的字段prev_hash的值hash1,获取哈希值为hash1的交易(即交易Tx1)的相关数据。在一种实施方式中,参考图4,区块链节点可根据hash1在状态数据库中读取交易Tx1的状态,如果读取的交易Tx1的状态为已使用状态,则可确定交易Tx2执行失败,在内存中存储交易Tx2的交易体、签名和执行失败的执行结果。如果读取交易Tx1的状态为未使用状态,则根据hash1从区块数据库中读取交易Tx1的交易体,从交易Tx1的交易体中读取其中记录的文件Doc001的状态(即effective),该状态即为文件Doc001的当前状态。
可以理解,在本说明书实施例中,也可以不通过读取交易的状态来确定交易是否已使用。例如,在一种实施方式中,文件的状态变更是串行进行的,即一个状态不会并发向两个状态变更,参考图1,在文件状态为有效状态之后,由同一个机构来确定是将文件状态更改为背书状态还是删除状态,文件的状态只能朝向一个状态变更,而不会并发向背书状态或结束状态变更。在该情况下,例如,交易Tx2的发送方在确定交易Tx1未使用的情况下才会发送交易Tx2,并在交易Tx2中关联交易Tx1的哈希值,而在交易Tx2执行成功之前,交易Tx1中的文件状态都是文件Doc001的当前状态,即,交易Tx1必然是未使用,因此,在该情况下不需要通过读取交易Tx1的状态来确定交易Tx1是否已使用。
区块链节点在获取文件Doc001的当前状态为effective之后,在步骤S305,区块链节点基于交易Tx2中的类型“r1”和方法“endorse”读取预存的操作规则。参考图1中的创世区块中记录的“Type r1”中的“Method endorse” 对应的操作规则,该操作规则为,将当前状态“effective”变更为状态“endorsed”。
区块链节点然后执行步骤S307,使用所述操作规则对文件Doc001的当前状态和在本次更改之后的状态进行验证。该验证过程可参考上文对步骤S307的描述,在此不再赘述。
在步骤S309,在验证通过的情况中,确定交易Tx2执行成功。
具体是,在验证通过的情况中,区块链节点确定交易Tx2执行成功,在内存中存储交易Tx2的交易体、签名和交易Tx2的执行成功的执行结果,并向交易Tx2的发送方返回交易执行成功通知。在一种实施方式中,还可以在状态数据库中将交易Tx2的状态记录为未使用状态,将交易Tx1的状态修改为已使用状态。该执行成功的执行结果指示对文件的状态更改成功,文件的当前状态即为交易Tx2中包括的状态(即endorsed)。如果上述验证未通过,则区块链节点确定交易Tx2执行失败,在内存中存储交易Tx2的交易体、签名和交易Tx2的执行失败的执行结果,并向交易Tx2的发送方返回交易执行失败通知,该执行结果指示对文件的状态更改失败,文件的当前状态并未更改,即还是effective状态。该节点在完成对区块n中的全部交易的执行之后,可将这些交易的交易体、签名和执行结果存入区块数据库中。
以上通过参考图3和图4详细描述了本说明书实施例的数据状态管理方法,在本说明书实施例提供的方案中,通过在交易中包括Prev_hash字段,从而将该交易与处理同一个数据的前一个交易关联起来,并且通过在交易中包括区块链中预存的数据类型和方法的标识,从而可基于该类型的方法对交易进行校验,以基于预定规则进行对数据的生命周期的连续管理。本说明书实施例的方案不需要相对于不同类型的数据设置不同的用于更改数据状态的智能合约,数据的状态随着交易被记录到区块数据库中,而不是记录到同一个智能合约的存储空间中,从而避免了对所述存储空间的热点写入,提高了区块链节点中的交易处理效率,提高了每秒交易数。
图5示出根据本说明书实施例的一种在区块链中查询数据状态的方法流程图,所述方法由区块链节点执行,包括以下步骤S501-S505。
首先,在步骤S501,接收第一交易的哈希值,所述第一交易是最晚的更改第一数据的状态的交易,所述第一交易中包括所述第一数据在所述第一交易对应的状态更改之后的状态、所述状态更改对应的第一操作规则的标识、以及所述第一交易的前一个更改所述第一数据的状态的交易的哈希值,所述第一操作规则中包括状态更改前的状态和状态更改后的状态,用于对所述第一交易进行验证。
所述第一交易例如为图4中所示的最晚的用于更改文件Doc001的状态的交易Tx2。假设文件Doc001文件为前述CoO文件,文件Doc001的颁发机构或背书机构可向文件Doc001的状态查询者提供最晚的更改文件Doc001的状态的交易(这里为交易Tx2)的哈希值,以供查询者查询文件Doc001的状态。文件Doc001的状态查询者在获取交易Tx2的哈希值之后,可与区块链的任一区块链节点连接,并将交易Tx2的哈希值发送给区块链节点,以基于交易Tx2的哈希值查询交易Tx2。
该交易Tx2中如上文所述至少包括文件Doc001的状态(即文件Doc001在交易Tx2对应的状态更改之后的状态)、交易Tx2的状态更改对应规则标识(即类型r1,endorse方法)、及交易Tx2的上一个更改文件Doc001的状态的交易(即交易Tx1)的哈希值。该交易Tx2为原生可关联交易,交易Tx2的执行基于其中包括的规则得到验证,因此,交易Tx2中包括的文件Doc001的状态是符合预定状态变更规则的状态。
在步骤S503,基于所述第一交易的哈希值从存储的区块中获取所述第一交易。
区块链节点在从查询者的客户端接收到交易Tx2的哈希值之后,将交易Tx2的哈希值输入区块链提供的查询交易的接口,从而区块链节点中通过该接口进行对交易Tx2的查询。区块链节点中预设有交易Tx2的哈希值与交易Tx2的存储地址的映射表,区块链节点基于该映射表可从本地区块数据库中存储的区块中读取交易Tx2的交易体。
在步骤S505,返回所述第一交易,以提供所述第一交易中包括的所述第一数据的状态作为所述第一数据的当前状态。
区块链节点在读取到交易Tx2的交易体之后,可向查询者的客户端返回交易Tx2的交易体。查询者在接收到交易Tx2之后,由于该交易Tx2为最晚的更改文件Doc001状态的交易,因此,通过读取交易Tx2中记录的文件Doc001的状态(即endorsed),可确定文件Doc001的当前状态为背书状态。
在一种实施方式中,交易Tx2中包括文件的标识(即“Doc001”),区块链节点在查询到交易Tx2的交易体之后,可基于其中包括的文件标识验证交易Tx2是否记录了文件Doc001的状态,在验证通过的情况中,向查询者客户端返回交易Tx2。
在一种实施方式中,参考图4,区块链节点在查询到交易Tx2的交易体之后,还可以在状态数据库中查询交易Tx2的状态,在确定交易Tx2的状态为未使用的状态情况下,可验证交易Tx2为最晚的更改文件Doc001状态的交易,从而,区块链节点向查询者客户端返回交易Tx2。如果该验证未通过,则可确定交易Tx2不是最晚的更改文件Doc001状态的交易,区块链节点可在区块数据库中读取交易Tx2之后的交易,以找到最晚的更改文件Doc001状态的交易,并向查询者客户端返回该最晚的交易。其中,区块链节点可从区块链数据中读取交易Tx2之后的包括交易Tx2的哈希值的交易,以获取最晚的更改文件Doc001状态的交易,或者可基于交易中包括的文件的标识(即Doc001)来找到最晚的更改文件Doc001状态的交易。
图6示出根据本说明书实施例的一种在区块链中查询数据状态的方法流程图,所述方法由区块链节点执行,包括:
步骤S601,接收第一数据的标识;
步骤S603,基于所述第一数据的标识从存储的区块中获取第一交易,所述第一交易为最晚的更改所述第一数据的状态的交易,所述第一交易中包括第一数据的标识、所述第一数据在所述第一交易对应的状态更改之后的状态、所述状态更改对应的第一操作规则的标识、以及所述第一交易的前一个更改所述第一数据的状态的交易的哈希值,所述第一操作规则中包括状态更改前的状态和状态更改后的状态,用于对所述第一交易进行验证;
步骤S605,返回所述第一交易,以提供所述第一交易中包括的所述第一数据的状态作为所述第一数据的当前状态。
该方法与图5所示方法不同在于,在图6所示方法中,查询者基于文件的标识进行对文件状态的查询,而不是基于文件对应交易的哈希值进行对文件状态的查询。在该情况中,在更改文件状态的交易中需要包括文件的标识,从而区块链节点可基于文件的标识在区块数据库中找到最晚的更改文件状态的交易,并将该交易返回给查询者客户端。区块链节点可从最新的区块开始以时间顺序的逆序读取区块数据库中的每个交易,直到读取到第一个修改例如文件Doc001的状态的交易,该交易即为最晚的修改Doc001的状态的交易。
以上通过图5和图6详细描述了本说明书实施例的数据状态查询方法,在该方案中,通过在更改数据状态的交易的交易体中包括数据在状态更改之后的状态、状态更改的规则、及上一个更改文件状态的交易的哈希值,在使得该交易记录的文件状态符合预定规则的同时,数据的状态随着交易被记录到区块数据库中,而不是记录到智能合约的存储空间中,区块链节点在查询多个文件的状态时,不需要多次在同一个智能合约的存储空间中进行读取,从而避免了对所述存储空间的热点读取,提高了区块链节点中的交易处理效率,提高了每秒交易数。
图7示出根据本说明书实施例的一种区块链节点的架构图,包括:
获取单元71,用于获取用于更改数据状态的第一交易,所述第一交易中包括第一数据在本次状态更改之后的状态、本次状态更改对应的第一操作规则的标识、以及上一个更改所述第一数据的状态的交易的哈希值;
第一确定单元72,用于根据所述上一个更改所述第一数据的状态的交易的哈希值,确定所述第一数据的当前状态;
读取单元73,用于基于所述第一操作规则的标识读取预存的第一操作规则,所述第一操作规则中包括状态更改前的状态和状态更改后的状态;
验证单元74,用于使用所述第一操作规则对所述第一数据的当前状态和在本次更改之后的状态进行验证;
第二确定单元75,用于在验证通过的情况中,确定所述第一交易执行成功。
在一种实施方式中,所述第一操作规则的标识包括数据类型和与所述数据类型对应的状态更改方法的标识。
在一种实施方式中,所述读取单元73还用于,基于所述第一操作规则的标识从所述区块链的创世区块中读取所述第一操作规则。
在一种实施方式中,所述第一交易为更改第一数据状态的第一个交易,所述上一个更改所述第一数据的状态的交易的哈希值为空值,所述第一确定单元72还用于,根据所述上一个更改所述第一数据的状态的交易的哈希值,确定所述第一数据的当前状态为空值。
在一种实施方式中,所述第一交易中包括所述第一交易的哈希值。
在一种实施方式中,所述第一确定单元72包括,获取子单元721,用于根据所述上一个更改所述第一数据的状态的交易的哈希值获取上一个更改所述第一数据的状态的第二交易,读取子单元722,用于从所述第二交易中读取所述第一数据的状态作为所述第一数据的当前状态。
在一种实施方式中,所述区块链节点还包括,第三确定单元76,用于在获取所述第二交易之后,确定所述第二交易的状态;所述读取子单元722还用于,在所述第二交易的状态为未使用状态的情况中,从所述第二交易中读取所述第一数据的状态作为所述第一数据的当前状态;所述区块链节点还包括,修改单元77,用于在确定所述第一交易执行成功之后,将所述第二交易的状态修改为已使用状态,将所述第一交易的状态修改为未使用状态。
在一种实施方式中,所述第一交易中包括所述第一交易的类型,所述第一交易的类型指示所述第一交易为可关联原生交易。
图8示出根据本说明书实施例的一种区块链节点的架构图,所述区块链节点包括:
接收单元81,用于接收第一交易的哈希值,所述第一交易是最晚的更改第一数据的状态的交易,所述第一交易中包括所述第一数据在所述第一交易对应的状态更改之后的状态、所述状态更改对应的第一操作规则的标识、以及所述第一交易的前一个更改所述第一数据的状态的交易的哈希值,其中,所述第一操作规则中包括状态更改前的状态和状态更改后的状态,用于对所述第一交易进行验证;
获取单元82,用于基于所述第一交易的哈希值从存储的区块中获取所述第一交易;
返回单元83,用于返回所述第一交易,以提供所述第一交易中包括的所述第一数据的状态作为所述第一数据的当前状态。
在一种实施方式中,所述区块链节点还包括,读取单元84,用于在基于所述第一交易的哈希值从存储的区块中获取所述第一交易之后,读取所述第一交易的执行结果,所述返回单元还用于,在所述第一交易执行成功的情况中,返回所述第一交易。
在一种实施方式中,所述返回单元83还用于,基于所述第一交易的哈希值返回所述第一交易的状态,以用于验证所述第一交易是否为最晚的更改第一数据状态的交易。
图9示出根据本说明书实施例的一种区块链节点的架构图,所述区块链节点包括:
接收单元91,用于接收第一数据的标识;
获取单元92,用于基于所述第一数据的标识从存储的区块中获取第一交易,所述第一交易为最晚的更改所述第一数据的状态的交易,所述第一交易中包括第一数据的标识、所述第一数据在所述第一交易对应的状态更改之后的状态、所述状态更改对应的第一操作规则的标识、以及所述第一交易的前一个更改所述第一数据的状态的交易的哈希值,其中,所述第一操作规则中包括状态更改前的状态和状态更改后的状态,用于对所述第一交易进行验证;
返回单元93,用于返回所述第一交易,以提供所述第一交易中包括的所述第一数据的状态作为所述第一数据的当前状态。
本说明书另一方面提供一种区块链节点,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现如本说明书图3、图5或图6所示的方法。
本说明书另一方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行如本说明书图3、图5或图6所示的方法。
需要理解,本文中的“第一”,“第二”等描述,仅仅为了描述的简单而对相似概念进行区分,并不具有其他限定作用。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本领域普通技术人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。其中,软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (30)
1.一种基于区块链的数据状态管理方法,所述方法由区块链节点执行,包括:
获取用于更改数据状态的第一交易,所述第一交易中包括第一数据在本次状态更改之后的状态、本次状态更改对应的第一操作规则的标识、以及上一个更改所述第一数据的状态的交易的哈希值;
根据所述上一个更改所述第一数据的状态的交易的哈希值,确定所述第一数据的当前状态;
基于所述第一操作规则的标识读取预存的第一操作规则,所述第一操作规则中包括状态更改前的状态和状态更改后的状态;
使用所述第一操作规则对所述第一数据的当前状态和在本次更改之后的状态进行验证;
在验证通过的情况中,确定所述第一交易执行成功。
2.根据权利要求1所述的方法,其中,所述第一交易中包括所述第一数据的标识。
3.根据权利要求1所述的方法,其中,所述第一操作规则的标识包括数据类型和与所述数据类型对应的状态更改方法的标识。
4.根据权利要求1-3任一项所述的方法,其中,基于所述第一操作规则的标识读取预存的第一操作规则包括,基于所述第一操作规则的标识从所述区块链的创世区块中读取所述第一操作规则。
5.根据权利要求1-3任一项所述的方法,其中,所述第一交易为更改第一数据状态的第一个交易,所述上一个更改所述第一数据的状态的交易的哈希值为空值,所述根据所述上一个更改所述第一数据的状态的交易的哈希值,确定所述第一数据的当前状态包括,根据所述上一个更改所述第一数据的状态的交易的哈希值,确定所述第一数据的当前状态为空值。
6.根据权利要求1-3任一项所述的方法,其中,所述第一交易中包括所述第一交易的哈希值。
7.根据权利要求1-3任一项所述的方法,其中,根据所述上一个更改所述第一数据的状态的交易的哈希值,确定所述第一数据的当前状态包括,根据所述上一个更改所述第一数据的状态的交易的哈希值获取上一个更改所述第一数据的状态的第二交易,从所述第二交易中读取所述第一数据的状态作为所述第一数据的当前状态。
8.根据权利要求7所述的方法,还包括,
在获取所述第二交易之后,确定所述第二交易的状态;
所述从所述第二交易中读取所述第一数据的状态作为所述第一数据的当前状态包括,在所述第二交易的状态为未使用状态的情况中,从所述第二交易中读取所述第一数据的状态作为所述第一数据的当前状态;
所述方法还包括,在确定所述第一交易执行成功之后,将所述第二交易的状态修改为已使用状态,将所述第一交易的状态修改为未使用状态。
9.根据权利要求1-3任一项所述的方法,其中,所述第一交易中包括所述第一交易的类型,所述第一交易的类型指示所述第一交易为可关联原生交易。
10.根据权利要求1-3任一项所述的方法,其中,所述方法由区块链节点通过运行区块链中预先部署的验证合约而执行。
11.根据权利要求1-3任一项所述的方法,其中,所述第一数据包括以下数据:电子文档、电子资产、密钥。
12.一种在区块链中查询数据状态的方法,所述方法由区块链节点执行,包括:
接收第一交易的哈希值,所述第一交易是最晚的更改第一数据的状态的交易,所述第一交易中包括所述第一数据在所述第一交易对应的状态更改之后的状态、所述状态更改对应的第一操作规则的标识、以及所述第一交易的前一个更改所述第一数据的状态的交易的哈希值,所述第一操作规则中包括状态更改前的状态和状态更改后的状态,用于对所述第一交易进行验证;
基于所述第一交易的哈希值从存储的区块中获取所述第一交易;
返回所述第一交易,以提供所述第一交易中包括的所述第一数据的状态作为所述第一数据的当前状态。
13.根据权利要求12所述的方法,还包括,在基于所述第一交易的哈希值从存储的区块中获取所述第一交易之后,读取所述第一交易的执行结果,所述返回所述第一交易包括,在所述第一交易执行成功的情况中,返回所述第一交易。
14.根据权利要求12或13所述的方法,还包括,基于所述第一交易的哈希值返回所述第一交易的状态,以用于验证所述第一交易是否为最晚的更改第一数据状态的交易。
15.一种在区块链中查询数据状态的方法,所述方法由区块链节点执行,包括:
接收第一数据的标识;
基于所述第一数据的标识从存储的区块中获取第一交易,所述第一交易为最晚的更改所述第一数据的状态的交易,所述第一交易中包括第一数据的标识、所述第一数据在所述第一交易对应的状态更改之后的状态、所述状态更改对应的第一操作规则的标识、以及所述第一交易的前一个更改所述第一数据的状态的交易的哈希值,所述第一操作规则中包括状态更改前的状态和状态更改后的状态,用于对所述第一交易进行验证;
返回所述第一交易,以提供所述第一交易中包括的所述第一数据的状态作为所述第一数据的当前状态。
16.一种区块链装置,包括:
获取单元,用于获取用于更改数据状态的第一交易,所述第一交易中包括第一数据在本次状态更改之后的状态、本次状态更改对应的第一操作规则的标识、以及上一个更改所述第一数据的状态的交易的哈希值;
第一确定单元,用于根据所述上一个更改所述第一数据的状态的交易的哈希值,确定所述第一数据的当前状态;
读取单元,用于基于所述第一操作规则的标识读取预存的第一操作规则,所述第一操作规则中包括状态更改前的状态和状态更改后的状态;
验证单元,用于使用所述第一操作规则对所述第一数据的当前状态和在本次更改之后的状态进行验证;
第二确定单元,用于在验证通过的情况中,确定所述第一交易执行成功。
17.根据权利要求16所述的区块链装置,其中,所述第一交易中包括所述第一数据的标识。
18.根据权利要求16所述的区块链装置,其中,所述第一操作规则的标识包括数据类型和与所述数据类型对应的状态更改方法的标识。
19.根据权利要求16-18任一项所述的区块链装置,其中,所述读取单元还用于,基于所述第一操作规则的标识从所述区块链的创世区块中读取所述第一操作规则。
20.根据权利要求16-18任一项所述的区块链装置,其中,所述第一交易为更改第一数据状态的第一个交易,所述上一个更改所述第一数据的状态的交易的哈希值为空值,所述第一确定单元还用于,根据所述上一个更改所述第一数据的状态的交易的哈希值,确定所述第一数据的当前状态为空值。
21.根据权利要求16-18任一项所述的区块链装置,其中,所述第一交易中包括所述第一交易的哈希值。
22.根据权利要求16-18任一项所述的区块链装置,其中,所述第一确定单元包括,获取子单元,用于根据所述上一个更改所述第一数据的状态的交易的哈希值获取上一个更改所述第一数据的状态的第二交易,读取子单元,用于从所述第二交易中读取所述第一数据的状态作为所述第一数据的当前状态。
23.根据权利要求22所述的区块链装置,还包括,
第三确定单元,用于在获取所述第二交易之后,确定所述第二交易的状态;
所述读取子单元还用于,在所述第二交易的状态为未使用状态的情况中,从所述第二交易中读取所述第一数据的状态作为所述第一数据的当前状态;
所述区块链节点还包括,修改单元,用于在确定所述第一交易执行成功之后,将所述第二交易的状态修改为已使用状态,将所述第一交易的状态修改为未使用状态。
24.根据权利要求16-18任一项所述的区块链装置,其中,所述第一交易中包括所述第一交易的类型,所述第一交易的类型指示所述第一交易为可关联原生交易。
25.根据权利要求16-18任一项所述的区块链装置,其中,所述第一数据包括以下数据:电子文档、电子资产、密钥。
26.一种区块链装置,包括:
接收单元,用于接收第一交易的哈希值,所述第一交易是最晚的更改第一数据的状态的交易,所述第一交易中包括所述第一数据在所述第一交易对应的状态更改之后的状态、所述状态更改对应的第一操作规则的标识、以及所述第一交易的前一个更改所述第一数据的状态的交易的哈希值,所述第一操作规则中包括状态更改前的状态和状态更改后的状态,用于对所述第一交易进行验证;
获取单元,用于基于所述第一交易的哈希值从存储的区块中获取所述第一交易;
返回单元,用于返回所述第一交易,以提供所述第一交易中包括的所述第一数据的状态作为所述第一数据的当前状态。
27.根据权利要求26所述的区块链装置,还包括,读取单元,用于在基于所述第一交易的哈希值从存储的区块中获取所述第一交易之后,读取所述第一交易的执行结果,所述返回单元还用于,在所述第一交易执行成功的情况中,返回所述第一交易。
28.根据权利要求26或27所述的区块链装置,所述返回单元还用于,基于所述第一交易的哈希值返回所述第一交易的状态,以用于验证所述第一交易是否为最晚的更改第一数据状态的交易。
29.一种区块链装置,包括:
接收单元,用于接收第一数据的标识;
获取单元,用于基于所述第一数据的标识从存储的区块中获取第一交易,所述第一交易为最晚的更改所述第一数据的状态的交易,所述第一交易中包括第一数据的标识、所述第一数据在所述第一交易对应的状态更改之后的状态、所述状态更改对应的第一操作规则的标识、以及所述第一交易的前一个更改所述第一数据的状态的交易的哈希值,所述第一操作规则中包括状态更改前的状态和状态更改后的状态,用于对所述第一交易进行验证;
返回单元,用于返回所述第一交易,以提供所述第一交易中包括的所述第一数据的状态作为所述第一数据的当前状态。
30.一种区块链装置,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-15中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110025254.9A CN112712433B (zh) | 2021-01-08 | 2021-01-08 | 一种基于区块链的数据状态管理和查询方法及区块链装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110025254.9A CN112712433B (zh) | 2021-01-08 | 2021-01-08 | 一种基于区块链的数据状态管理和查询方法及区块链装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112712433A CN112712433A (zh) | 2021-04-27 |
CN112712433B true CN112712433B (zh) | 2023-06-20 |
Family
ID=75548614
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110025254.9A Active CN112712433B (zh) | 2021-01-08 | 2021-01-08 | 一种基于区块链的数据状态管理和查询方法及区块链装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112712433B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107733855A (zh) * | 2017-08-31 | 2018-02-23 | 中国科学院信息工程研究所 | 一种可同时支持公有链、联盟链及私有链的区块链系统及应用方法 |
CN109446211A (zh) * | 2018-10-08 | 2019-03-08 | 联动优势科技有限公司 | 一种一致性校验方法及装置 |
CN110442580A (zh) * | 2019-08-02 | 2019-11-12 | 杭州复杂美科技有限公司 | 一种区块链状态数据存储方法、设备和存储介质 |
CN110503558A (zh) * | 2019-08-29 | 2019-11-26 | 深圳前海微众银行股份有限公司 | 一种基于区块链系统的处理方法及装置 |
CN110826108A (zh) * | 2019-10-14 | 2020-02-21 | 边缘智能研究院南京有限公司 | 一种基于区块链技术的电子处方共享系统 |
CN111630830A (zh) * | 2020-04-15 | 2020-09-04 | 支付宝(杭州)信息技术有限公司 | 账户模型下的分布式区块链数据存储 |
CN111639080A (zh) * | 2020-06-01 | 2020-09-08 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置、节点设备及存储介质 |
CN111754349A (zh) * | 2020-08-28 | 2020-10-09 | 支付宝(杭州)信息技术有限公司 | 对区块链中的交易进行分组的方法和装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10614253B2 (en) * | 2018-02-14 | 2020-04-07 | Fortune Vieyra | Systems and methods for state of data management |
US11474994B2 (en) * | 2018-12-27 | 2022-10-18 | Intel Corporation | Distributed blockchain oracle |
-
2021
- 2021-01-08 CN CN202110025254.9A patent/CN112712433B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107733855A (zh) * | 2017-08-31 | 2018-02-23 | 中国科学院信息工程研究所 | 一种可同时支持公有链、联盟链及私有链的区块链系统及应用方法 |
CN109446211A (zh) * | 2018-10-08 | 2019-03-08 | 联动优势科技有限公司 | 一种一致性校验方法及装置 |
CN110442580A (zh) * | 2019-08-02 | 2019-11-12 | 杭州复杂美科技有限公司 | 一种区块链状态数据存储方法、设备和存储介质 |
CN110503558A (zh) * | 2019-08-29 | 2019-11-26 | 深圳前海微众银行股份有限公司 | 一种基于区块链系统的处理方法及装置 |
CN110826108A (zh) * | 2019-10-14 | 2020-02-21 | 边缘智能研究院南京有限公司 | 一种基于区块链技术的电子处方共享系统 |
CN111630830A (zh) * | 2020-04-15 | 2020-09-04 | 支付宝(杭州)信息技术有限公司 | 账户模型下的分布式区块链数据存储 |
CN111639080A (zh) * | 2020-06-01 | 2020-09-08 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置、节点设备及存储介质 |
CN111754349A (zh) * | 2020-08-28 | 2020-10-09 | 支付宝(杭州)信息技术有限公司 | 对区块链中的交易进行分组的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112712433A (zh) | 2021-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Guerraoui et al. | The consensus number of a cryptocurrency | |
US11334439B2 (en) | Checkpointing for increasing efficiency of a blockchain | |
US11196542B2 (en) | Checkpointing for increasing efficiency of a blockchain | |
US10901957B2 (en) | Checkpointing for increasing efficiency of a blockchain | |
CN110494877B (zh) | 用于在分布式网络节点内发布和追踪数字令牌的系统和方法 | |
US11341121B2 (en) | Peer partitioning | |
CN100375038C (zh) | 重定序两阶段提交中的资源的最后代理优化方法和系统 | |
US10936445B2 (en) | Resource management | |
CN101217571B (zh) | 用于多副本数据网格系统中的写/读文件操作的方法 | |
US11379828B2 (en) | Distributed computing and storage network implementing high integrity, high bandwidth, low latency, secure processing | |
CN104793988A (zh) | 跨数据库分布式事务的实现方法和装置 | |
EP3726774A1 (en) | Transparent blockchain sidechains to support blockchain processing heterogeneity | |
CN109300036A (zh) | 区块链网络的分叉回归方法和装置 | |
WO2018184419A1 (zh) | 一种精算处理方法和装置 | |
US20200242593A1 (en) | Value optimizing data store | |
CN112685391B (zh) | 一种服务数据迁移方法、装置、计算机设备和存储介质 | |
CN114971827A (zh) | 一种基于区块链的对账方法、装置、电子设备及存储介质 | |
CN112084201B (zh) | 分布式账本处理方法和装置、存储介质和电子设备 | |
CN113411373A (zh) | 一种交易数据存储方法、追踪溯源方法及区块链网络 | |
CN112712433B (zh) | 一种基于区块链的数据状态管理和查询方法及区块链装置 | |
CN112035291A (zh) | 快照恢复 | |
WO2023092986A1 (zh) | 基于分布式身份标识的数据跨链转移和系统 | |
CN110928923A (zh) | 一种基于区块链的数据存储方法及系统 | |
US7882550B2 (en) | Customized untrusted certificate replication | |
CN113643032B (zh) | 一种基于区块链的信息处理方法、装置及数据管理系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |