CN111161064A - 一种区块链交易记录的处理方法及装置 - Google Patents

一种区块链交易记录的处理方法及装置 Download PDF

Info

Publication number
CN111161064A
CN111161064A CN201911277152.5A CN201911277152A CN111161064A CN 111161064 A CN111161064 A CN 111161064A CN 201911277152 A CN201911277152 A CN 201911277152A CN 111161064 A CN111161064 A CN 111161064A
Authority
CN
China
Prior art keywords
attribute
block height
attribute value
account
modification
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.)
Pending
Application number
CN201911277152.5A
Other languages
English (en)
Inventor
冀猛猛
欧阳小安
张开翔
范瑞彬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
WeBank Co Ltd
Original Assignee
WeBank Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by WeBank Co Ltd filed Critical WeBank Co Ltd
Priority to CN201911277152.5A priority Critical patent/CN111161064A/zh
Publication of CN111161064A publication Critical patent/CN111161064A/zh
Priority to PCT/CN2020/127877 priority patent/WO2021115002A1/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION 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/00Finance; Insurance; Tax strategies; Processing of corporate or income taxes
    • G06Q40/04Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange

Landscapes

  • Business, Economics & Management (AREA)
  • Accounting & Taxation (AREA)
  • Finance (AREA)
  • Engineering & Computer Science (AREA)
  • Development Economics (AREA)
  • Economics (AREA)
  • Marketing (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)

Abstract

本发明涉及金融科技(Fintech)领域,并公开了一种区块链交易记录的处理方法及装置,其中,方法包括:获取待执行交易;待执行交易用于变更第一账户的第一属性的属性值;确定执行待执行交易之后的第一属性的第一属性值;将第一属性值和当前块高更新至状态表中;其中,状态表中记录有多个账户的状态数据,账户的状态数据是账户的多个属性中各属性的最新属性值和最新属性值对应的块高。该技术方案用以查询账户的每个属性的属性值最新一次发生变化时所在的区块。

Description

一种区块链交易记录的处理方法及装置
技术领域
本发明实施例涉及金融科技(Fintech)领域,尤其涉及一种区块链(Blockchain)交易记录的处理方法及装置。
背景技术
随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技(Finteh)转变,但由于金融行业的安全性、实时性要求,也对技术提出的更高的要求。
区块链***中存储有状态表,该状态表用于保存各账户的最新状态数据和最新状态数据对应的块高,比如,区块链***接收到一笔交易,导致某个账户的状态数据发生变化,则会将该账户的发生变化后的状态数据以及当前块高更新至状态表中,在后续需要查询时,可以直接从状态表中查询到导致该状态数据发生变化的交易在哪一个区块上。
但现有技术中,一个账户的状态数据中有多个属性,如年龄、所在公司、家庭住址、账户余额等,每变化一次账户的某个属性值,则会更新该账户的状态数据和块高。但该多个属性中,有些属性对应的属性值的变化频率较低,比如年龄,而有些属性对应的属性值的变化频率较高,比如账户余额,但在查询时,比如当前状态表中记录的是最新一笔交易导致的某个账户的账户余额发生变化,则如果想查询该账户的年龄属性最新一次发生变化是在哪一个区块上,则不能从状态表中直接查询到,需要重放交易,以确定该账户的年龄属性最新一次发生变化所在的区块。
发明内容
本发明实施例提供一种区块链交易记录的处理方法及装置,用以查询账户的每个属性的属性值最新一次发生变化时所在的区块。
本发明实施例提供的一种区块链交易记录的处理方法,包括:
获取待执行交易;所述待执行交易用于变更第一账户的第一属性的属性值;
确定执行所述待执行交易之后的所述第一属性的第一属性值;
将所述第一属性值和当前块高更新至状态表中;所述状态表中记录有多个账户的状态数据,账户的状态数据是所述账户的多个属性中各属性的最新属性值和所述最新属性值对应的块高。
上述技术方案中,设置状态表中包括多个账户的状态数据,每个账户的状态数据是该账户的多个属性中各属性的最新属性值和最新属性值对应的块高,通过该方式,可以确定出账户的每个属性的属性值最新一次被修改时所对应的块高。
可选的,所述将所述第一属性值和当前块高更新至状态表中之后,还包括:
获取所述当前块高对应的第一历史表;所述第一历史表中记录有所述当前块高下的多个变更账户的修改记录,所述变更账户是属性值发生变更的属性所属的账户,所述变更账户的修改记录中包括所述变更账户在所述当前块高下的所述属性值发生变更的属性、发生变更后的属性值和所述发生变更后的属性值对应的索引块高,所述索引块高是所述发生变更后的属性值在本次变更之前的最新一次变更所对应的块高;
将所述第一属性、所述第一属性值和所述第一属性值对应的索引块高作为所述第一账户的第一修改记录,增加至所述第一历史表中。
上述技术方案中,获取该第一历史表,并将第一属性、第一属性值和第一属性值对应的索引块高作为第一账户的第一修改记录,增加至第一历史表中,其中,该第一历史表中不记录全量数据,而是仅记录当前块高下的变更账户的修改记录,也即,只记录当前块高下的多个变更账户的修改记录,而且,一个账户对应的多个属性中,如果只有一个属性的属性值发生变化,其他属性的属性值不发生变化,则只记录该属性值发生变化的属性的修改记录,不记录属性值不发生变化的属性的记录,从而进一步减少历史表的记录数据的量。
可选的,所述方法还包括:
接收第一查询指令;所述第一查询指令用于获取第二账户的第二属性在指定块高上的属性值;
若确定所述状态表中所述第二属性的最新属性值对应的第一块高大于所述指定块高,则从所述第一块高开始,从高到底依次确定所述第二账户的第二属性的属性值变更时所对应的块高,直至确定出第一个小于所述指定块高的第二块高;
将所述第二块高对应的历史表中所述第二账户的第二属性的属性值确定为查询结果。
可选的,所述方法还包括:
若确定所述第一块高不大于所述指定块高,则将所述状态表中所述第二属性的最新属性值确定为所述查询结果。
可选的,所述方法还包括:
接收第二查询指令;所述第二查询指令用于获取第二账户的第二属性的最新的N次修改记录;
从所述状态表中所述第二属性的最新属性值对应的第一块高开始,从高到底依次确定所述第二账户的第二属性的属性值变更时所对应的块高及各块高对应的所述第二账户关于所述第二属性的修改记录,直至确定出N次修改记录;
将所述N次修改记录确定为查询结果。
可选的,所述确定所述第二账户的第二属性的属性值变更时所对应的块高,包括:
根据所述第二账户的第二属性的属性值在第M次变更时所对应的第三块高,获取所述第三块高对应的历史表;
从所述第三块高对应的历史表中确定所述第二账户的第二修改记录;所述第二修改记录中包括在所述第M次变更后的所述第二属性的属性值和所述第二属性的属性值在所述第M次变更之前的最新一次变更时所对应的块高。
上述技术方案中,可以通过设置各块高对应的历史表,且每个历史表中有变更账户对应的属性、属性值和索引块高,索引块高用于指示所在修改记录的属性值的上一次被修改时的块高,进而确定出上一次被修改时的块高对应的历史表,从上一次被修改时的块高对应的历史表中确定出上一次被修改时的修改记录,通过该循环过程,可以快速找到某个属性的修改记录,由于历史表中变更账户的修改记录中仅包括属性值发生变化的属性的信息,进一步减少历史表的记录数据的量,而且在查询的时候也是针对的某个属性的变更,该种方式可以提高查询速度。
可选的,所述状态表有多个;每个状态表对应的业务类型不同;
每个块高对应的历史表中记录有所述块高下的各个状态表中变更账户的修改记录;所述历史表中包括每个状态表的标识。
上述技术方案中,提供的历史表可以是和块高对应,所以每个块高对应的历史表不会太大,而且历史表对应多个状态表中变更账户的修改记录,从而使得整个区块链***中历史表的数量不会太多,进一步提高查询速度。
相应的,本发明实施例还提供了一种区块链交易记录的处理装置,包括:
获取单元,用于获取待执行交易;所述待执行交易用于变更第一账户的第一属性的属性值;
处理单元,用于确定执行所述待执行交易之后的所述第一属性的第一属性值;将所述第一属性值和当前块高更新至状态表中;所述状态表中记录有多个账户的状态数据,账户的状态数据是所述账户的多个属性中各属性的最新属性值和所述最新属性值对应的块高。
可选的,所述获取单元还用于在所述处理单元将所述第一属性值和当前块高更新至状态表中之后,获取所述当前块高对应的第一历史表;所述第一历史表中记录有所述当前块高下的多个变更账户的修改记录,所述变更账户是属性值发生变更的属性所属的账户,所述变更账户的修改记录中包括所述变更账户在所述当前块高下的所述属性值发生变更的属性、发生变更后的属性值和所述发生变更后的属性值对应的索引块高,所述索引块高是所述发生变更后的属性值在本次变更之前的最新一次变更所对应的块高;
所述处理单元还用于将所述第一属性、所述第一属性值和所述第一属性值对应的索引块高作为所述第一账户的第一修改记录,增加至所述第一历史表中。
可选的,所述处理单元还用于:
接收第一查询指令;所述第一查询指令用于获取第二账户的第二属性在指定块高上的属性值;
若确定所述状态表中所述第二属性的最新属性值对应的第一块高大于所述指定块高,则从所述第一块高开始,从高到底依次确定所述第二账户的第二属性的属性值变更时所对应的块高,直至确定出第一个小于所述指定块高的第二块高;
将所述第二块高对应的历史表中所述第二账户的第二属性的属性值确定为查询结果。
可选的,所述处理单元还用于:
若确定所述第一块高不大于所述指定块高,则将所述状态表中所述第二属性的最新属性值确定为所述查询结果。
可选的,所述处理单元还用于:
接收第二查询指令;所述第二查询指令用于获取第二账户的第二属性的最新的N次修改记录;
从所述状态表中所述第二属性的最新属性值对应的第一块高开始,从高到底依次确定所述第二账户的第二属性的属性值变更时所对应的块高及各块高对应的所述第二账户关于所述第二属性的修改记录,直至确定出N次修改记录;
将所述N次修改记录确定为查询结果。
可选的,所述处理单元具体用于:
根据所述第二账户的第二属性的属性值在第M次变更时所对应的第三块高,获取所述第三块高对应的历史表;
从所述第三块高对应的历史表中确定所述第二账户的第二修改记录;所述第二修改记录中包括在所述第M次变更后的所述第二属性的属性值和所述第二属性的属性值在所述第M次变更之前的最新一次变更时所对应的块高。
可选的,所述状态表有多个;每个状态表对应的业务类型不同;
每个块高对应的历史表中记录有所述块高下的各个状态表中变更账户的修改记录;所述历史表中包括每个状态表的标识。
相应的,本发明实施例还提供了一种计算设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述区块链交易记录的处理方法。
相应的,本发明实施例还提供了一种计算机可读非易失性存储介质,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得计算机执行上述区块链交易记录的处理方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种更新状态表的流程示意图;
图2为本发明实施例提供的一种更新历史表的流程示意图;
图3为本发明实施例提供的一种查询特定块高的属性值的流程示意图;
图4为本发明实施例提供的一种查询某个属性的修改记录的流程示意图;
图5为本发明实施例提供的一种区块链交易记录的处理装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本发明实施例提供区块链交易记录的处理方法适用于区块链***,区块链***是由多个区块链节点组成的P2P(Peer to Peer,对等)网络,区块链节点之间可以互相直接通信。一个区块链节点产生的数据,可以同时向多个区块链节点发送广播,也可以向其他任意节点查询和获取数据。
区块链***中存在状态表,状态表是由与之相同业务类型的智能合约创建的,也即区块链***中可以存在多个状态表,每个状态表对应不同的业务类型。
针对一个状态表来说,该状态表中记录有多个账户的状态数据,其中,任一个账户的状态数据是该账户的多个属性中各属性的最新属性值和最新属性值对应的块高。状态表的索引Key为SHA256(表名+“_”+主键),以保证全局唯一性,每个属性都对应有块高,用于记录该属性对应的属性值在上一次被修改时的块高。
比如,状态表的表名为“t_Balance”,状态表中包括账户Alice、Bob、Henry,每个账户的属性有Balance(账户余额)和Age(年龄),状态表可以如表1所示。以Alice为例,状态表的索引Key为SHA256(“t_Balance_Alice”),Alice对应的Balance的最新值为100,对应的上一次被修改时的块高为2;Alice对应的Age的最新值为37,对应的上一次被修改时的块高为2。
表1
Figure BDA0002315855120000081
通过本发明实施例提供的状态表,可以确定出账户的每个属性的最新属性值在上一次被修改时所对应的块高。
图1示例性的示出了本发明实施例提供的一种区块链交易记录的处理方法的流程,该流程可以由区块链交易记录的处理装置执行。
如图1所示,该流程具体包括:
步骤101,获取待执行交易;
步骤102,确定执行待执行交易之后的第一属性的第一属性值;
步骤103,将第一属性值和当前块高更新至状态表中。
本发明实施例中,待执行交易用于变更第一账户的第一属性的属性值,执行该待执行交易后该第一属性的属性值变为第一属性值。以表1为例,在当前块高为25的时候,获取到一笔为“Alice的Balance增加400、Alice的Age增加1”的待执行交易时,则Alice即为第一账户,Balance和Age均为第一属性,执行完成该笔交易后,Alice的Balance会变为500,则500即为第一属性值,同样,Alice的Age会变为38,则38也为第一属性值。在将500和38和当前块高分别更新至状态表中时,则将原表1中的Alice主键对应的Balance_Blocknum变为25,Alice主键对应的Balance变为500;Alice主键对应的Age–Blocknum变为25,Alice主键对应的Age变为38,更新后的表1可以如表2所示。
表2
Figure BDA0002315855120000091
本发明实施例中,为实现可以查询每个账户的每个属性的历史属性值,比如查询在特定块高上的某个账户的某个属性的属性值,还可以设置历史表,用于记录账户的属性的修改记录。
一种实现方式中,可以是在创建某个状态表时,确定是否生成该状态表对应的历史表。具体的,当执行创建状态表的时候,传入的创建指令中包括是否生成历史表,其中,对不关注历史数据的,可以不生成历史表,以减少存储开销。在区块链数据库里,可以记录一条状态表的创建记录,用于表征是否创建了该状态表对应的历史表,该创建记录也可以是以表的形式存储,如表3所示,可以包括状态表的表名和是否生成历史表。
表3
状态表的表名 是否生成历史修改记录表
t_Balance True
t_Member True
t_Order False
另一种实现方式中,在创建某个状态表时,确定是否将该状态表对应的修改记录写入历史表,也就是说,此处的历史表是预先创建好的,会将多个状态表对应的修改记录写入该历史表中。具体的,当执行创建状态表的时候,传入的创建指令中包括是否将修改记录写入历史表,其中,对不关注历史数据的,可以不将修改记录写入历史表,以减少存储开销。在区块链数据库里,可以记录一条状态表的创建记录,用于表征是否将该状态表的修改记录写入历史表,该创建记录也可以是以表的形式存储,如表4所示,可以包括状态表的表名和是否将修改记录写入历史表。
表4
状态表的表名 是否将修改记录写入历史表
t_Balance True
t_Member True
t_Order False
本发明实施例中,可以是设置每个块高对应一个历史表,历史表的表名可以根据块高进行标识,如“t_history_块高”。每个块高对应的历史表中不记录全量数据,而是仅记录对应块高下的变更账户的修改记录。可以如下所示,每个历史表的结构相同,从而建立多个历史表的链式数据关系。
块高1→t_history_1
块高2→t_history_2
块高3→t_history_3
本发明实施例中,由于状态表可以有多个,且每个状态表对应的业务类型不同,在将各状态表的变更账户的修改记录写入至同一个历史表中时,可以是根据状态表的标识进行区分,历史表中包括每个状态表的标识,如每个状态表的表名称。每个块高对应的历史表中记录有该块高下的各个状态表中变更账户的修改记录。
历史表中记录有对应块高下的多个变更账户的修改记录,其中,变更账户即理解为对应块高下的属性值发生变更的属性所属的账户,变更账户的修改记录中包括变更账户在对应块高下的该属性值发生变更的属性、发生变更后的属性值和发生变更后的属性值对应的索引块高,索引块高是发生变更后的属性值在本次变更之前的最新一次变更所对应的块高。
历史表中可以包括的字段有状态表的主键、属性、属性值、属性值的索引块高。当是多个状态表对应一个历史表时,该历史表的字段中还包括对应的状态表的标识,如状态表的表名,相应的,该历史表的索引Key为SHA256(状态表的表名+“_”+状态表的主键+“_”+属性)。
比如,历史表的表名为“t_history_10”,即块高10时对应的历史表,该历史表可以如表5。该历史表中包括账户Bob、Henry,以Bob为例,历史表的索引Key为SHA256(“t_Balance_Bob_Balance”),状态表t_Balance中Bob的Balance在块高10时的值为200,上一次变更是在块高8时发生的。
表5
Figure BDA0002315855120000111
基于上述描述,本发明实施例在将第一属性值和当前块高更新至状态表中之后,还可以将对应的修改记录更新至对应的历史表中。具体实现中,可以如图2示出的流程图。
步骤201,获取当前块高对应的第一历史表;
步骤202,将第一属性、第一属性值和第一属性值对应的索引块高作为第一账户的第一修改记录,增加至第一历史表中。
此处,第一历史表即当前块高下对应的历史表,该第一历史表中记录有当前块高下的多个变更账户的修改记录,变更账户是属性值发生变更的属性所属的账户,变更账户的修改记录中包括变更账户在当前块高下的属性值发生变更的属性、发生变更后的属性值和发生变更后的属性值对应的索引块高,索引块高是发生变更后的属性值在上一次变更时所对应的块高。
仍以上述获取到一笔为“Alice的Balance增加400、Alice的Age增加1”的交易继续举例,在执行完成上述交易后,不仅将状态表中Alice的主键对应的Balance–Blocknum、Alice主键对应的Balance、Alice的主键对应的Age–Blocknum、Alice主键对应的Age更新,还会在块高为25的历史表中增加两个条修改记录,分别是“状态表t_Balance中Alice的Balance在块高25时的值为500,上一次修改是在块高2时修改的”,以及“状态表t_Balance中Alice的Age在块高25时的值为38,上一次修改是在块高2时修改的”,在历史表t_history_25中新增两条修改记录可以如表6所示。
表6
Figure BDA0002315855120000121
本发明实施例中,如果是新增一个账户的状态数据,则相当于在状态表中增加一条数据,比如,在当前块高为70的时候,在状态表t_Balance中增加Adam的状态数据,则将表2的状态表t_Balance更新为表7所示。同时还会在历史表t_history_70中新增两条修改记录,新增的两条修改记录可以如表8所示,其中,prevblocknum为-1指的是该修改记录对应的账户的状态数据是新增的。
表7
Figure BDA0002315855120000131
表8
Figure BDA0002315855120000132
上述实施例中,获取该第一历史表,并将第一属性、第一属性值和第一属性值对应的索引块高作为第一账户的第一修改记录,增加至第一历史表中,其中,该第一历史表中不记录全量数据,而是仅记录当前块高下的变更账户的修改记录,也即,只记录当前块高下的多个变更账户的修改记录,而且,如果一个账户对应的多个属性中,如果只有一个属性的属性值发生变化,其他属性的属性值不发生变化,则只记录该属性值发生变化的属性的修改记录,不记录属性值不发生变化的属性的记录,从而进一步减少历史表的记录数据的量。
一种实现方式中,可以支持查询账户的某个属性在指定块高上的属性值。
如图3中,示例性的示出了本发明实施例提供的一种特定块高的属性值的查询方式,具体流程包括:
步骤301,接收第一查询指令;
步骤302,若确定状态表中第二属性的最新属性值对应的第一块高大于指定块高,则从第一块高开始,从高到底依次确定第二账户的第二属性的属性值变更时所对应的块高,直至确定出第二块高;
步骤303,将第二块高对应的历史表中第二账户的第二属性的属性值确定为查询结果。
本发明实施例中,第一查询指令用于获取第二账户的第二属性在指定块高上的属性值,在接收到第一查询指令后,先从状态表中确定第二属性的最新属性值对应的第一块高,此处,第一块高即第二属性的最新属性值所对应的块高,也即是第二属性的属性值在最新一次修改时所在的块高,若第一块高大于指定块高,则从第一块高开始,从高到低依次确定该第二账户的第二属性的属性值在每次变更时所对应的块高,直至确定出第一个小于该指定块高的块高,并将该块高对应的历史表中的第二账户的第二属性的属性值确定为查询结果。
此外,从状态表中确定第二属性的最新属性值对应的第一块高之后,若确定第一块高不大于指定块高,则可以确定在该指定块高之前的该第二账户的第二属性的属性值的最新一次变更后的值即为第二属性的最新属性值,也就可以将该第二属性的最新属性值作为查询结果。
本发明实施例中,在确定第二账户的第二属性的属性值在每次变更时所对应的块高时,可以是根据第二账户的第二属性的属性值在第M次变更时所对应的第三块高,获取第三块高对应的历史表;再从第三块高对应的历史表中确定第二账户的第二修改记录;其中,该第二修改记录中包括在第M次变更后的第二属性的属性值和该第二属性的属性值在第M次变更之前的最新一次变更时所对应的块高(相当于第M次变更后的第二属性的属性值的索引块高)。也就是说,在确定第二账户的第二属性的属性值在每次变更时所对应的块高时,可以是根据第二账户的第二属性的属性值在本次变更时所对应的块高,获取本次变更时所对应的块高的历史表,进而根据本次变更时所对应的块高的历史表,从中确定出本次变更时所对应的块高的修改记录,以从修改记录中确定上一次变更时所对应的块高。通过该方式,从高到低依次确定出第二账户的第二属性的属性值在每次变更时所对应的块高。
为了更好的说明本发明实施例,仅以账户Alice为例,比如,接收到的第一查询指令是“查询Alice在块高520上的Age”,假设,当前块高为10000。则获取到的状态表t_Balance如表9所示,读取该状态表t_Balance后确定Age对应的最新属性值的块高为800,大于520,则会获取块高800对应的历史表,历史表的表名即为t_history_800,假设块高800对应的历史表如表10所示,则可以确定Alice的Age在块高为500有过更新的,且块高500小于块高520,则确定块高500处更新后的Age的取值即为待查询的值,则获取块高500对应的历史表,历史表的表名即为t_history_500,假设块高500对应的历史表如表11所示,则可以确定Alice的Age在块高为500处的取值为39,也即待查询值为39。
表9
Figure BDA0002315855120000151
表10
Figure BDA0002315855120000161
表11
Figure BDA0002315855120000162
上述例子中,假设块高800对应的历史表如表12所示,则可以确定Alice的Age在块高为530有过更新的,且块高530大于块高520,则获取块高530对应的历史表,历史表的表名即为t_history_530,假设块高530对应的历史表如表13所示,则可以确定Alice的Age在块高为25处有过更新的,且块高25不大于块高520,则确定块高25处更新后的Age的取值即为待查询的值,则获取块高25对应的历史表,历史表的表名即为t_history_25,假设块高25对应的历史表如表14所示,则可以确定Alice的Age在块高为25处的取值为38,也即待查询值为38。
表12
Figure BDA0002315855120000163
表13
Figure BDA0002315855120000171
表14
Figure BDA0002315855120000172
上述例子中,假设获取到的状态表t_Balance如表15所示,读取该状态表t_Balance后确定Age对应的最新属性值的块高为500,不大于520,则可以确定块高500对应的Age的取值40即为待查询数据。
表15
Figure BDA0002315855120000173
另一种实现方式中,还可以支持查询账户的某个属性的最近几次修改记录。如图4中,示例性的示出了本发明实施例提供的一种查询某个属性的多次修改记录的方式,具体流程包括:
步骤401,接收第二查询指令;
步骤402,从状态表中第二属性的最新属性值对应的第一块高开始,从高到底依次确定第二账户的第二属性的属性值变更时所对应的块高及各块高对应的第二账户关于第二属性的修改记录,直至确定出N次修改记录;
步骤403,将N次修改记录确定为查询结果。
本发明实施例中,第二查询指令用于获取第二账户的第二属性的最新的N次修改记录,在接收到第二查询指令后,先从状态表中确定第二属性的最新属性值对应的第一块高,此处,第一块高即第二属性的最新属性值所对应的块高,也即是第二属性的属性值在最新一次修改时所在的块高,从第一块高开始,从高到低依次确定该第二账户的第二属性的属性值在每次变更时所对应的块高,并在每次确定出第二账户的第二属性的属性值在变更时所对应的块高时,同时获取该块高对应的历史表,以从中获取到此次变更时对应的修改记录,直至确定出N次修改记录,并将该N次修改记录确定为查询结果。
本发明实施例中,在确定第二账户的第二属性的属性值在每次变更时所对应的块高时,可以是根据第二账户的第二属性的属性值在第M次变更时所对应的第三块高,获取第三块高对应的历史表;再从第三块高对应的历史表中确定第二账户的第二修改记录;其中,该第二修改记录中包括在第M次变更后的第二属性的属性值和该第二属性的属性值在第M次变更之前的最新一次变更时所对应的块高(相当于第M次变更后的第二属性的属性值的索引块高)。也就是说,在确定第二账户的第二属性的属性值在每次变更时所对应的块高时,可以是根据第二账户的第二属性的属性值在本次变更时所对应的块高,获取本次变更时所对应的块高的历史表,进而根据本次变更时所对应的块高的历史表,从中确定出本次变更时所对应的块高的修改记录,以从修改记录中确定上一次变更时所对应的块高。通过该方式,从高到低依次确定出第二账户的第二属性的属性值在每次变更时所对应的块高。
比如,接收到的第二查询指令是“查询Alice的Age的最近三次修改记录”。假设,获取到的状态表t_Balance如表9所示,读取该状态表t_Balance后确定Age对应的最新属性值为40,最新属性值40对应的块高为800,则会获取块高800对应的历史表,该历史表的表名即为t_history_800,假设块高800对应的历史表如表10所示,则可以确定出Alice的Age在块高为800时的修改记录,该修改记录为目前最近的一次修改记录,进而根据该条修改记录中的索引块高500获取块高500对应的历史表,该历史表的表名即为t_history_500,假设块高500对应的历史表如表11所示,则可以确定出Alice的Age在块高为500时的修改记录,该修改记录为目前最近的倒数第二次修改记录,进而再根据该条修改记录中的索引块高25获取块高25对应的历史表,该历史表的表名即为t_history_25,假设块高25对应的历史表如表14所示,则可以确定出Alice的Age在块高为25时的修改记录,该修改记录为目前最近的倒数第三次修改记录,从而获取到该Alice的Age的最近三次修改记录,分别在块高800、块高500、块高25对应的历史表中,而且可以获取到Alice的Age的最近三次变更为38→39→40。
上述实施例中,可以通过设置各块高对应的历史表,且每个历史表中有变更账户对应的属性、属性值和索引块高,索引块高用于指示所在修改记录的属性值的上一次被修改时的块高,进而确定出上一次被修改时的块高对应的历史表,从上一次被修改时的块高对应的历史表中确定出上一次被修改时的修改记录,通过该循环过程,可以快速找到某个属性的修改记录,由于历史表中变更账户的修改记录中仅包括属性值发生变化的属性的信息,进一步减少历史表的记录数据的量,而且在查询的时候也是针对的某个属性的变更,该种方式可以提高查询速度。本发明实施例提供的历史表可以是和块高对应,所以每个块高对应的历史表不会太大,进一步提高查询速度。
基于同一发明构思,图5示例性的示出了本发明实施例提供的一种区块链交易记录的处理装置的结构,该装置可以执行区块链交易记录的处理方法的流程。
所述装置包括:
获取单元501,用于获取待执行交易;所述待执行交易用于变更第一账户的第一属性的属性值;
处理单元502,用于确定执行所述待执行交易之后的所述第一属性的第一属性值;将所述第一属性值和当前块高更新至状态表中;所述状态表中记录有多个账户的状态数据,账户的状态数据是所述账户的多个属性中各属性的最新属性值和所述最新属性值对应的块高。
可选的,所述获取单元501还用于在所述处理单元502将所述第一属性值和当前块高更新至状态表中之后,获取所述当前块高对应的第一历史表;所述第一历史表中记录有所述当前块高下的多个变更账户的修改记录,所述变更账户是属性值发生变更的属性所属的账户,所述变更账户的修改记录中包括所述变更账户在所述当前块高下的所述属性值发生变更的属性、发生变更后的属性值和所述发生变更后的属性值对应的索引块高,所述索引块高是所述发生变更后的属性值在本次变更之前的最新一次变更所对应的块高;
所述处理单元502还用于将所述第一属性、所述第一属性值和所述第一属性值对应的索引块高作为所述第一账户的第一修改记录,增加至所述第一历史表中。
可选的,所述处理单元502还用于:
接收第一查询指令;所述第一查询指令用于获取第二账户的第二属性在指定块高上的属性值;
若确定所述状态表中所述第二属性的最新属性值对应的第一块高大于所述指定块高,则从所述第一块高开始,从高到底依次确定所述第二账户的第二属性的属性值变更时所对应的块高,直至确定出第一个小于所述指定块高的第二块高;
将所述第二块高对应的历史表中所述第二账户的第二属性的属性值确定为查询结果。
可选的,所述处理单元502还用于:
若确定所述第一块高不大于所述指定块高,则将所述状态表中所述第二属性的最新属性值确定为所述查询结果。
可选的,所述处理单元502还用于:
接收第二查询指令;所述第二查询指令用于获取第二账户的第二属性的最新的N次修改记录;
从所述状态表中所述第二属性的最新属性值对应的第一块高开始,从高到底依次确定所述第二账户的第二属性的属性值变更时所对应的块高及各块高对应的所述第二账户关于所述第二属性的修改记录,直至确定出N次修改记录;
将所述N次修改记录确定为查询结果。
可选的,所述处理单元502具体用于:
根据所述第二账户的第二属性的属性值在第M次变更时所对应的第三块高,获取所述第三块高对应的历史表;
从所述第三块高对应的历史表中确定所述第二账户的第二修改记录;所述第二修改记录中包括在所述第M次变更后的所述第二属性的属性值和所述第二属性的属性值在所述第M次变更之前的最新一次变更时所对应的块高。
可选的,所述状态表有多个;每个状态表对应的业务类型不同;
每个块高对应的历史表中记录有所述块高下的各个状态表中变更账户的修改记录;所述历史表中包括每个状态表的标识。
基于同一发明构思,本发明实施例还提供了一种计算设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述区块链交易记录的处理方法。
基于同一发明构思,本发明实施例还提供了一种计算机可读非易失性存储介质,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得计算机执行上述区块链交易记录的处理方法。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (16)

1.一种区块链交易记录的处理方法,其特征在于,包括:
获取待执行交易;所述待执行交易用于变更第一账户的第一属性的属性值;
确定执行所述待执行交易之后的所述第一属性的第一属性值;
将所述第一属性值和当前块高更新至状态表中;所述状态表中记录有多个账户的状态数据,账户的状态数据是所述账户的多个属性中各属性的最新属性值和所述最新属性值对应的块高。
2.如权利要求1所述的方法,其特征在于,所述将所述第一属性值和当前块高更新至状态表中之后,还包括:
获取所述当前块高对应的第一历史表;所述第一历史表中记录有所述当前块高下的多个变更账户的修改记录,所述变更账户是属性值发生变更的属性所属的账户,所述变更账户的修改记录中包括所述变更账户在所述当前块高下的所述属性值发生变更的属性、发生变更后的属性值和所述发生变更后的属性值对应的索引块高,所述索引块高是所述发生变更后的属性值在本次变更之前的最新一次变更所对应的块高;
将所述第一属性、所述第一属性值和所述第一属性值对应的索引块高作为所述第一账户的第一修改记录,增加至所述第一历史表中。
3.如权利要求2所述的方法,其特征在于,所述方法还包括:
接收第一查询指令;所述第一查询指令用于获取第二账户的第二属性在指定块高上的属性值;
若确定所述状态表中所述第二属性的最新属性值对应的第一块高大于所述指定块高,则从所述第一块高开始,从高到底依次确定所述第二账户的第二属性的属性值变更时所对应的块高,直至确定出第一个小于所述指定块高的第二块高;
将所述第二块高对应的历史表中所述第二账户的第二属性的属性值确定为查询结果。
4.如权利要求3所述的方法,其特征在于,所述方法还包括:
若确定所述第一块高不大于所述指定块高,则将所述状态表中所述第二属性的最新属性值确定为所述查询结果。
5.如权利要求2所述的方法,其特征在于,所述方法还包括:
接收第二查询指令;所述第二查询指令用于获取第二账户的第二属性的最新的N次修改记录;
从所述状态表中所述第二属性的最新属性值对应的第一块高开始,从高到底依次确定所述第二账户的第二属性的属性值变更时所对应的块高及各块高对应的所述第二账户关于所述第二属性的修改记录,直至确定出N次修改记录;
将所述N次修改记录确定为查询结果。
6.如权利要求3至5任一项所述的方法,其特征在于,所述确定所述第二账户的第二属性的属性值变更时所对应的块高,包括:
根据所述第二账户的第二属性的属性值在第M次变更时所对应的第三块高,获取所述第三块高对应的历史表;
从所述第三块高对应的历史表中确定所述第二账户的第二修改记录;所述第二修改记录中包括在所述第M次变更后的所述第二属性的属性值和所述第二属性的属性值在所述第M次变更之前的最新一次变更时所对应的块高。
7.如权利要求1所述的方法,其特征在于,所述状态表有多个;每个状态表对应的业务类型不同;
每个块高对应的历史表中记录有所述块高下的各个状态表中变更账户的修改记录;所述历史表中包括每个状态表的标识。
8.一种区块链交易记录的处理装置,其特征在于,包括:
获取单元,用于获取待执行交易;所述待执行交易用于变更第一账户的第一属性的属性值;
处理单元,用于确定执行所述待执行交易之后的所述第一属性的第一属性值;将所述第一属性值和当前块高更新至状态表中;所述状态表中记录有多个账户的状态数据,账户的状态数据是所述账户的多个属性中各属性的最新属性值和所述最新属性值对应的块高。
9.如权利要求8所述的装置,其特征在于,所述获取单元还用于在所述处理单元将所述第一属性值和当前块高更新至状态表中之后,获取所述当前块高对应的第一历史表;所述第一历史表中记录有所述当前块高下的多个变更账户的修改记录,所述变更账户是属性值发生变更的属性所属的账户,所述变更账户的修改记录中包括所述变更账户在所述当前块高下的所述属性值发生变更的属性、发生变更后的属性值和所述发生变更后的属性值对应的索引块高,所述索引块高是所述发生变更后的属性值在本次变更之前的最新一次变更所对应的块高;
所述处理单元还用于将所述第一属性、所述第一属性值和所述第一属性值对应的索引块高作为所述第一账户的第一修改记录,增加至所述第一历史表中。
10.如权利要求9所述的装置,其特征在于,所述处理单元还用于:
接收第一查询指令;所述第一查询指令用于获取第二账户的第二属性在指定块高上的属性值;
若确定所述状态表中所述第二属性的最新属性值对应的第一块高大于所述指定块高,则从所述第一块高开始,从高到底依次确定所述第二账户的第二属性的属性值变更时所对应的块高,直至确定出第一个小于所述指定块高的第二块高;
将所述第二块高对应的历史表中所述第二账户的第二属性的属性值确定为查询结果。
11.如权利要求10所述的装置,其特征在于,所述处理单元还用于:
若确定所述第一块高不大于所述指定块高,则将所述状态表中所述第二属性的最新属性值确定为所述查询结果。
12.如权利要求9所述的装置,其特征在于,所述处理单元还用于:
接收第二查询指令;所述第二查询指令用于获取第二账户的第二属性的最新的N次修改记录;
从所述状态表中所述第二属性的最新属性值对应的第一块高开始,从高到底依次确定所述第二账户的第二属性的属性值变更时所对应的块高及各块高对应的所述第二账户关于所述第二属性的修改记录,直至确定出N次修改记录;
将所述N次修改记录确定为查询结果。
13.如权利要求10至12任一项所述的装置,其特征在于,所述处理单元具体用于:
根据所述第二账户的第二属性的属性值在第M次变更时所对应的第三块高,获取所述第三块高对应的历史表;
从所述第三块高对应的历史表中确定所述第二账户的第二修改记录;所述第二修改记录中包括在所述第M次变更后的所述第二属性的属性值和所述第二属性的属性值在所述第M次变更之前的最新一次变更时所对应的块高。
14.如权利要求8所述的装置,其特征在于,所述状态表有多个;每个状态表对应的业务类型不同;
每个块高对应的历史表中记录有所述块高下的各个状态表中变更账户的修改记录;所述历史表中包括每个状态表的标识。
15.一种计算设备,其特征在于,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行权利要求1至7任一项所述的方法。
16.一种计算机可读非易失性存储介质,其特征在于,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得计算机执行如权利要求1至7任一项所述的方法。
CN201911277152.5A 2019-12-12 2019-12-12 一种区块链交易记录的处理方法及装置 Pending CN111161064A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201911277152.5A CN111161064A (zh) 2019-12-12 2019-12-12 一种区块链交易记录的处理方法及装置
PCT/CN2020/127877 WO2021115002A1 (zh) 2019-12-12 2020-11-10 一种区块链交易记录的处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911277152.5A CN111161064A (zh) 2019-12-12 2019-12-12 一种区块链交易记录的处理方法及装置

Publications (1)

Publication Number Publication Date
CN111161064A true CN111161064A (zh) 2020-05-15

Family

ID=70557016

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911277152.5A Pending CN111161064A (zh) 2019-12-12 2019-12-12 一种区块链交易记录的处理方法及装置

Country Status (2)

Country Link
CN (1) CN111161064A (zh)
WO (1) WO2021115002A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111813788A (zh) * 2020-05-20 2020-10-23 北京金山云网络技术有限公司 信息的查询方法和装置、信息的同步方法和装置
WO2021115002A1 (zh) * 2019-12-12 2021-06-17 深圳前海微众银行股份有限公司 一种区块链交易记录的处理方法及装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11095432B2 (en) * 2017-04-05 2021-08-17 Samsung Sds Co., Ltd. System for processing data based on blockchain and operating method thereof
CN107332876B (zh) * 2017-05-31 2020-05-08 深圳前海微众银行股份有限公司 区块链状态的同步方法及装置
CN110471923B (zh) * 2019-08-12 2024-01-16 深圳前海微众银行股份有限公司 一种区块链交易记录的处理方法及装置
CN111161064A (zh) * 2019-12-12 2020-05-15 深圳前海微众银行股份有限公司 一种区块链交易记录的处理方法及装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021115002A1 (zh) * 2019-12-12 2021-06-17 深圳前海微众银行股份有限公司 一种区块链交易记录的处理方法及装置
CN111813788A (zh) * 2020-05-20 2020-10-23 北京金山云网络技术有限公司 信息的查询方法和装置、信息的同步方法和装置

Also Published As

Publication number Publication date
WO2021115002A1 (zh) 2021-06-17

Similar Documents

Publication Publication Date Title
CN110471923B (zh) 一种区块链交易记录的处理方法及装置
CN110737664B (zh) 一种区块链节点同步的方法及装置
CN107391628B (zh) 数据同步方法及装置
CN108985742B (zh) 交易处理方法、装置及区块链***
CN112487083B (zh) 一种数据校验方法和设备
CN107590207B (zh) 数据同步方法及装置、电子设备
CN111143331B (zh) 数据迁移方法、装置及计算机存储介质
CN111008521B (zh) 生成宽表的方法、装置及计算机存储介质
CN106933823B (zh) 数据同步方法及装置
CN110380985B (zh) 基于交易链路的流量控制方法、装置、设备及存储介质
CN111161064A (zh) 一种区块链交易记录的处理方法及装置
CN106648839B (zh) 数据处理的方法和装置
CN113704252A (zh) 规则引擎决策树实现方法、装置、计算机设备及计算机可读存储介质
CN107491975B (zh) 用于服务器和用于消费者的数据槽数据处理方法和装置
CN111444163A (zh) 一种地图数据管理以及电子地图回滚的方法及装置
CN117196850A (zh) 金融产品组合的确定方法、装置、电子设备及存储介质
CN110888723A (zh) 定时任务处理方法及装置
CN110990378A (zh) 一种基于区块链的数据一致性对比方法及设备、介质
CN107315693A (zh) 一种数据存储方法和装置
CN110019507B (zh) 数据同步的方法及装置
CN108073596B (zh) 一种olap数据库的数据删除方法及装置
CN111143469A (zh) 一种数据对账方法、装置、电子设备及存储介质
CN109299125A (zh) 数据库更新方法及装置
CN114741401B (zh) 一种基于更新时间及主键的数据同步方法、设备及介质
CN111125165A (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