一种双端交互的链上数据存储方法及系统与流程

摘要: 本发明涉及区块链及数据存储,具体涉及一种双端交互的链上数据存储方法及系统,尤其适用于区块链商品溯源场景下的数据上链存储。背景技术:1、区块链技术凭借其去中心化、...
一种双端交互的链上数据存储方法及系统与流程

本发明涉及区块链及数据存储,具体涉及一种双端交互的链上数据存储方法及系统,尤其适用于区块链商品溯源场景下的数据上链存储。

背景技术:

1、区块链技术凭借其去中心化、不可篡改和可追溯等特性,在商品溯源、供应链管理、食品安全等领域得到了广泛应用。在基于区块链的商品溯源系统中,商品信息、货单信息、订单信息、交易信息等数据需要存储至区块链上,以实现数据的可信存证和全流程追溯。

2、然而,现有的区块链数据存储方案存在以下不足:

3、第一,上链过程对用户不透明:在现有的溯源系统中,数据的链上存储对于用户而言是完全黑箱操作。用户发起上链请求后,无法直观地确认即将存储至区块链的数据内容是否正确,也无法在存储前对数据进行核对和校验。这种黑箱化的操作模式降低了用户对上链数据的掌控感和信任度。

4、第二,公链存储无法满足数据的可选择性透明需求:公链上的数据对所有节点公开,任何用户均可查看链上存储的全部数据。而在实际的商品溯源场景中,不同参与方(如供应商、物流商、销售商、消费者)对数据的可见性需求不同,某些数据(如商品流转细节)仅希望在联盟成员范围内公开,对于无权限的其他组织或用户则应保持隐蔽。公链的全公开模式无法满足这种差异化的隐私保护需求。

5、第三,链上数据存储的滞后性和延时性影响用户体验:区块链的数据写入需要经过交易构造、背书、排序、共识、落块等多个环节,整个过程耗时较长。在同步上链模式下,用户必须等待链上返回存储结果后才能进行后续操作,长时间的等待严重影响了业务处理的连续性和用户体验。

6、针对上述问题,部分现有技术尝试通过引入上链日志或缓存机制来缓解用户等待问题。然而,这些方案在日志的可靠性和数据一致性的保证方面仍存在缺陷,且未能解决用户对数据的可见性控制和上链前的数据确认需求。

7、此外,在联盟链场景下,如何实现细粒度的权限控制、如何保证多状态数据在异步上链场景下的状态顺序一致性、如何在海量上链请求下高效地进行链上状态追踪等问题,现有技术均未给出令人满意的解决方案。

技术实现思路

1、针对上述现有技术中存在的问题,本发明的目的在于提供一种双端交互的链上数据存储方法及系统,本发明要解决的技术问题包括:

2、如何实现上链过程对用户可见、可控,使用户能够在数据上链前对数据进行确认;

3、如何在联盟链环境下实现严格的权限控制,满足用户对数据的可选择性透明需求;

4、如何通过异步上链方式避免用户等待,提高业务处理效率,同时保证异步上链场景下的数据一致性和可追踪性;

5、如何支持多状态数据在异步上链场景下的状态顺序一致性校验;

6、如何高效地对海量异步上链请求进行链上状态追踪和日志更新。

7、本发明通过以下技术方案来实现上述目的:

8、一种双端交互的链上数据存储方法,包括:

9、响应于用户通过系统界面发起的链上存储请求,获取由联盟组织签发的证书和分配私钥;

10、对证书和私钥进行验证,验证通过后确认用户具备操作联盟链的权限;

11、根据用户选择的上链方式,通过服务端上链方式或客户端上链方式将待上链数据存储至联盟链;

12、其中,服务端上链方式采用同步上链,服务端将初始化数据组装为上链数据后调用链码服务将数据存储上链,并直接向上链用户返回上链结果;

13、客户端上链方式采用异步上链,服务端将初始化数据组装为上链数据后展示于系统界面,经用户确认后,将上链操作记录于上链日志中并标记为待上链状态,快速响应于系统界面返回操作成功,随后异步调用客户端上链服务执行实际上链操作。

14、根据本发明提供的一种双端交互的链上数据存储方法,在对证书和私钥进行验证时,获取用户提交的由联盟组织签发的x.509证书和私钥;

15、对x.509证书进行证书有效性验证,证书有效性验证包括:验证x.509证书是否存在从联盟组织根证书或中间证书至x.509证书的可验证证书路径;以及验证x.509证书是否存在于证书撤销列表中;

16、在证书有效性验证通过后,利用私钥对用户的数字签名进行签名验证,以确认用户为x.509证书的合法持有者;

17、在签名验证通过后,根据x.509证书中的组织单位字段,将用户映射至对应的联盟组织及该联盟组织下的角色;

18、根据映射得到的联盟组织和角色,获取该用户对应的操作权限信息,判断用户是否具备发起当前链上存储请求的操作权限;

19、当证书有效性验证、签名验证和操作权限判断均通过时,确认用户具备操作联盟链的权限。

20、根据本发明提供的一种双端交互的链上数据存储方法,服务端将初始化数据组装为上链数据,包括:

21、服务端接收初始化数据,初始化数据包括业务标识字段和数据类型的至少一种;

22、根据待上链数据的类型,从服务端预存的数据结构映射表中查询与初始化数据相匹配的目标数据结构定义,数据结构映射表中记录有不同数据类型与链码中定义的数据结构之间的对应关系;

23、根据查询到的目标数据结构定义,将初始化数据中的各字段映射为链码所要求的数据结构中的对应字段,生成符合上链格式的上链数据;

24、根据数据类型,从服务端预存的链码映射表中查询与数据类型对应的目标链码标识及目标链码方法,链码映射表中记录有不同数据类型与联盟链上已部署的链码及链码方法之间的对应关系;

25、根据查询到的目标链码标识和目标链码方法,构造链码调用请求,链码调用请求中携带上链数据以及目标链码方法所需的方法参数;

26、将链码调用请求发送至联盟链的背书节点,以请求将上链数据按照目标链码方法存储至联盟链。

27、根据本发明提供的一种双端交互的链上数据存储方法,在客户端上链方式中,服务端将组装完成的上链数据及其对应的数据哈希值返回至系统界面进行展示,数据哈希值用于供用户端校验上链数据在传输过程中是否被篡改;

28、响应于用户在系统界面上的数据确认操作,系统界面获取当前用户的证书中的组织信息,并根据组织信息从联盟链的通道配置中查询用户可接入的一个或多个可用通道,以及各可用通道下用户具备调用权限的一个或多个可用合约;

29、将查询得到的一个或多个可用通道及对应的可用合约以可视化列表形式展示于系统界面中,供用户进行选择;

30、接收用户从可用通道中选择的目标通道标识以及从可用合约中选择的目标合约标识;

31、根据用户的证书中的组织单位字段和角色字段,结合目标通道的访问控制列表,验证用户是否具备在目标通道上调用目标合约的权限;

32、在用户具备调用目标合约的权限后,根据待上链数据的数据类型,验证目标合约中是否部署有与数据类型对应的目标链码方法;

33、在目标合约匹配验证通过后,接收用户输入的最终确认指令,最终确认指令携带有用户使用其私钥对上链数据的哈希值进行数字签名后生成的签名数据;

34、服务端利用用户的证书对签名数据进行验签,验签通过后确认上链数据在用户确认后未被篡改,并将上链操作记录于上链日志中。

35、根据本发明提供的一种双端交互的链上数据存储方法,将上链操作记录于上链日志中之前,还包括对上链数据进行上链前置验证:

36、提取初始化数据中的业务唯一标识和当前状态标识;

37、根据业务唯一标识,从上链日志中查询是否存在与业务唯一标识相对应的历史日志记录集合;

38、若历史日志记录集合为空,则判定当前上链操作为业务唯一标识对应的数据的首次上链操作,上链前置验证通过,允许将当前上链操作写入上链日志;

39、若历史日志记录集合为非空,则根据初始化数据的数据类型获取对应的预定义状态变迁路径,状态变迁路径为有向无环图结构,用于定义同一业务唯一标识下各状态之间的合法变迁顺序;

40、根据当前状态标识和状态变迁路径,确定当前状态的前驱状态集合。

41、根据本发明提供的一种双端交互的链上数据存储方法,在历史日志记录集合中查询是否存在与前驱状态集合中的任一前驱状态对应的前驱日志记录;

42、若不存在与前驱状态集合中的任一前驱状态对应的前驱日志记录,则判定当前上链操作的前驱状态数据尚未发起上链请求,拒绝当前上链请求并返回错误提示;

43、若存在与前驱状态集合中的任一前驱状态对应的前驱日志记录,则读取前驱日志记录中的上链状态字段,判断前驱状态对应的数据是否已标记为已上链;

44、若前驱状态对应的数据未标记为已上链,则拒绝当前上链请求并返回包含前驱状态未上链信息的失败提示;

45、若前驱状态对应的数据已标记为已上链,则获取以业务唯一标识为键名的分布式锁;

46、在成功获取分布式锁后,再次查询上链日志中前驱日志记录的当前上链状态,若当前上链状态已发生变更且不为已上链状态,则释放分布式锁并拒绝当前上链请求;若当前上链状态仍为已上链状态,则将当前上链操作写入上链日志,标记为待上链状态,并在写入成功后释放分布式锁。

47、根据本发明提供的一种双端交互的链上数据存储方法,异步调用客户端上链服务执行实际上链操作之后,还包括:

48、服务端定时扫描联盟链,根据扫描结果更新上链日志;

49、对于已在联盟链上完成存储的数据,将上链日志中对应的记录标记为已上链状态;

50、对于未在联盟链上完成存储的数据,将上链日志中对应的记录保持为待上链状态,以供用户通过日志界面手动重新发起上链。

51、根据本发明提供的一种双端交互的链上数据存储方法,客户端上链方式中,当待上链数据为具有多个状态的状态变更数据时,当前状态的上链操作需在上一状态的上链操作完成后执行;

52、具体的,获取待上链数据对应的业务唯一标识和当前状态标识;

53、根据业务唯一标识和当前状态标识,从预定义的状态依赖图模型中查询当前状态的前驱状态集合,状态依赖图模型为有向无环图结构,用于定义同一业务唯一标识下各状态之间的先后依赖关系,其中每一状态作为一个节点,状态间的有向边表示上链操作的执行顺序依赖;

54、若前驱状态集合为空,则判定当前状态为初始状态,允许当前上链请求继续进行;

55、若前驱状态集合为非空,则获取以业务唯一标识为键名的分布式锁。

56、根据本发明提供的一种双端交互的链上数据存储方法,在成功获取分布式锁后,执行以下串行化验证步骤:

57、从上链日志中查询业务唯一标识对应的所有历史日志记录;

58、对于前驱状态集合中的每一个前驱状态,在历史日志记录中查询是否存在与前驱状态对应的前驱日志记录;

59、若前驱状态集合中存在任一前驱状态在历史日志记录中无对应的前驱日志记录,则判定为该前驱状态尚未发起上链,释放分布式锁,返回当前上链请求失败及缺失状态信息;

60、若前驱状态集合中每一前驱状态均存在对应的前驱日志记录,则进一步读取每一前驱日志记录中的上链状态字段,确认每一前驱状态是否均已标记为已上链;

61、若前驱状态集合中存在任一前驱状态未标记为已上链,则释放分布式锁,返回当前上链请求失败及包含未完成前驱状态信息的失败提示;

62、若前驱状态集合中每一前驱状态均已标记为已上链,则在上链日志中写入当前状态对应的日志记录,标记为待上链状态,并在写入成功后释放分布式锁;

63、其中,对于前驱状态集合中包含多个前驱状态的情形,多个前驱状态之间存在并行依赖关系,即多个前驱状态均需完成上链后,当前状态的上链操作才被允许执行。

64、一种双端交互的链上数据存储系统,包括:

65、联盟链,用于存储上链数据;

66、服务端,用于接收用户的上链请求,对用户的证书和私钥进行验证,将初始化数据组装为上链数据,并向上链用户提供服务端上链接口和客户端上链服务接口;

67、客户端,与服务端通信连接,用于执行异步上链操作;

68、上链日志模块,用于记录客户端上链方式下的上链操作及上链状态;

69、其中,系统被配置为执行上述的方法。

70、由此可见,与现有技术相比,本发明提出的双端交互的链上数据存储方法及系统,具有以下有益效果:

71、1、本发明提供用户双端的上链模式,包括客户端上链和服务端上链,该上链存储流程需要用户参与确认,用户核对链上数据正确无误后进行存储。同时,为了避免链上存储时的用户等待问题,本发明提供异步上链方式和上链日志管理模块,用户的链上请求会在日志中排队等待处理,用户可在此期间完成其他操作后,通过上链日志查看链上处理结果。

72、2、本发明在客户端上链方式中,服务端将组装完成的上链数据及其哈希值返回至系统界面进行展示,用户可在上链前对数据进行确认和核对。用户确认待上链数据后,还需使用私钥对数据哈希进行数字签名,服务端验签通过后方可写入日志。本发明构建了一条完整的生成—展示—确认—提交安全链路,确保用户确认的数据与实际最终上链的数据严格一致,解决了现有技术中用户对上链数据黑箱操作的痛点。

73、3、本发明基于联盟链进行数据存储,通过x.509证书和私钥实现多级递进式身份验证,证书有效性验证、签名验证、基于ou字段的组织角色映射、操作权限判断四层验证架构有机串联。只有拥有对应证书和私钥的用户才能通过链码操作联盟链,保证了数据的可选择性透明,用户可根据自身权限在一定范围内查看数据,无权限的组织或用户无法访问。

74、4、本发明提供客户端异步上链方式,用户发起上链请求后,上链操作先记录于上链日志并快速返回操作成功,用户可继续进行其他操作,无需等待链上共识完成。上链结果通过上链日志查询,将用户的阻塞等待转化为异步查询,显著提高了业务处理效率。

75、5、本发明通过数据结构映射表和链码映射表实现数据结构的动态查询和字段映射。新增数据类型时仅需更新映射表配置,无需修改业务代码,显著提高了系统的可扩展性和维护性。同时,通过链码映射表实现根据数据类型自动路由至对应的链码及链码方法,实现了上链请求与具体链码实现的解耦。

76、6、本发明将有状态变更数据的各状态间依赖关系抽象为有向无环图模型,支持同一数据实体存在多个前驱状态及跨层级的状态依赖校验,通过分布式锁保护的串行化验证和递归式多级依赖链校验,有效防止了异步上链场景下因并发导致的状态顺序错乱问题,保证了多状态数据在异步上链场景下的状态顺序一致性-。

77、7、本发明采用分布式扫描锁确保同一时刻仅有一个扫描任务实例执行;通过动态分批切分机制自适应调整单批次扫描数量,在扫描实时性与系统负载之间取得动态平衡;结合业务唯一标识和数据哈希值进行双重验证,可有效捕获链上数据被篡改或数据格式不一致等异常场景。对于长期处于待上链状态的记录,通过失败累计与优先级动态提升机制实现自动标记和主动加速重试。

78、下面结合附图和具体实施方式对本发明作进一步详细说明。