一种基于智能合约的schema统一存取方法

文档序号:26057135发布日期:2021-07-27 15:35阅读:94来源:国知局
本发明属于区块链
技术领域
:,涉及一种基于智能合约的schema统一存取方法,数据提供方通过该智能合约存储其数据的schema,其他参与者则通过调用该智能合约获得相应数据的schema,用于对链上特定数据的解析,以此实现基于区块链的高效数据共享。
背景技术
::区块链(blockchain)作为一种去中心化、数据不可篡改、历史数据可追溯、由多方共同维护的新型分布式数据管理系统,集成了点对点通信、非对称加密、共识机制等多种技术,具有信息不可篡改,数据透明和可追溯的特性,可以保证数据在写入账本后无法被恶意篡改。因此,通过区块链,无需第三方可信机构或协调机构参与,互不信任的多方间可以进行可信的数据共享。区块链技术在公证防伪、金融交易、食品溯源以及数字资产等领域有着广泛的应用场景,数据的链上存储可以实现数据的安全存证和全生命周期的透明监管。以仓单存证为例,将仓单数据上链存储,结合区块链的不可篡改、数据可信等特性,可以实现仓单的安全存证,同时对于监管部门而言,仓单数据的链上存证可以实现仓单的全生命周期的透明监管,对于仓单质押等业务场景具有很高的应用价值。尽管区块链在数据存证、金融交易和食品溯源等方面具有很高的应用价值,但是目前区块链链上数据的高效管理仍存在很大的不足。究其根本,主要是因为现有的区块链系统中(例如以太坊,超级账本等),针对其链上数据,并不存在可以支持丰富语义的数据管理模式(schema)。目前区块链中数据的组织结构比较特殊,数据以区块为单位进行存储,采用的数据模式过于简单,这在很大程度上限制了区块链内部数据的表达能力,导致它所具备的数据管理功能非常有限。由于链上数据缺乏数据模式(schema),各方之间通过区块链进行数据共享时,数据访问用户不能高效的获取其所需数据,导致各方之间的数据共享效率低下。而在关系型数据库中,针对不同类型的数据,可以通过统一管理schema信息来实现数据信息的描述,在访问数据时,可以通过schema信息来解析数据库中的相应数据,进而支持数据的高效访问操作。但在区块链中,目前并不存在类似于数据库中管理schema的功能组件。作为区块链2.0的标志,智能合约让区块链更具有便捷性和拓展性。其本质上是一段程序,以计算机指令的方式实现了传统合约的自动化处理,在区块链内制定合约时使用,能够进行决策、存储以及同其他合约交互等。因此,针对上述问题,一个很直接的解决方案就是数据提供方将其数据的schema写入一个智能合约中,并部署该智能合约,第三方通过调用这个智能合约获得数据的schema,从区块链上取得数据提供方发布的数据后,根据其schema进行数据解析,就能够得到数据中各个字段所对应的值。但通过智能合约管理schema信息时,智能合约不能像关系型数据库一样提供一个统一的schema管理组件,比较直观的方式是每个schema都部署一个相应的智能合约来管理schema信息,但这种方式较为低效且实现复杂。针对每次新的应用数据格式,数据提供方都要部署新的智能合约以实现schema的链上存储,且第三方也要在拿到新的合约地址后才能进行调用。如此,一方面让整体的工作变得繁琐,每次有新的应用数据上线,都需要重复一遍上述流程;另一方面,随着schema的增多,相应的智能合约也会增多,每个节点就需要额外对schema与智能合约地址之间的映射关系进行管理,使系统变得臃肿。技术实现要素:针对区块链中缺乏对数据schema的统一管理所带来的数据共享效率低下以及智能合约的重复部署问题,本发明提出了一种基于智能合约的schema统一存取方法,通过部署一个统一的智能合约,主要是在智能合约中实现一个针对schema列表的管理逻辑,完成schema的添加以及获取功能,之后对schema的存储以及获取均通过调用这个智能合约实现,节点就不需要针对每个应用数据格式编写对应的智能合约,也不需要在本地存储不同应用数据的schema对应的智能合约地址。因此只需要部署一次智能合约,之后各类数据对应的schema均通过调用这个合约来完成。而使用本发明的方法,不需要部署多个合约,也不需要在本地维护不同应用数据的schema对应的智能合约地址,只需要多个参与方协调部署一个统一的智能合约,在智能合约中实现一个schema列表的管理逻辑,后续的schema存取管理均通过调用此合约完成。本发明提供了一种基于智能合约的schema统一存取方法,所述方法包括以下步骤:步骤1:多个参与方节点协调部署一个统一的智能合约;所述智能合约能够实现多个schema的存储以及获取逻辑;步骤2:根据业务需求以及合约规范,部署智能合约得到合约地址;步骤3:当所述区块链网络中的各节点需要在区块链上发布新的应用数据时,以其应用数据对应的schema文件作为函数参数,调用上述部署的智能合约,实现其schema文件在区块链上的存储;步骤4:当所述区块链网络中的各节点需要从区块链上获取其他节点发布的应用数据并进行解析时,调用上述部署的智能合约,获取该应用数据对应的schema,即可用于对链上数据的解析。步骤3中,所述实现schema文件链上储存具体包括以下步骤:步骤3-1:以键值对映射的形式定义一个变量,用于存储多个不同的schema;步骤3-2:指定key值,区块链节点通过check函数验证所述key值是否已经在链上进行储存;步骤3-3:若指定的key值被步骤3-2中的check函数验证通过,则将key值和value值作为参数,根据已提供的put函数,当有节点需要存储新的schema时,调用所述智能合约,执行put方法,实现其应用数据对应schema的链上储存。步骤4中,所述通过调用智能合约获取schema具体包括以下步骤:步骤4-1:以键值对映射的形式定义一个变量,用于存储多个不同的schema;步骤4-2:指定key值,区块链节点通过check函数验证所述key值是否已经在链上进行储存;步骤4-3:若指定的key值被步骤4-2中的check函数验证通过,则将key值作为参数,根据已提供的get函数,当有节点需要获取其他节点的schema时,调用所述智能合约,执行get方法,获取到相应的schema内容,后续用于应用数据的链下解析。所述智能合约所提供的功能逻辑具体包括:以键值对映射的形式定义一个变量,用于存储多个不同的schema;提供一个put函数,当有节点需要存储新的schema时,则调用所述智能合约,执行put方法,实现其schema的链上存储;提供一个get函数,当有节点需要获取其他节点的schema时,则调用所述智能合约,执行get方法,取得相应的schema。区块链节点在调用put和get两个方法时应该提供相应的函数参数;所述的put方法包括两个函数参数,key和value;所述的get方法包括一个函数参数key;所述的key参数为每个schema的唯一标识符,用于标识不同应用数据的schema;所述的value参数为应用数据对应的schema。在步骤3或步骤4中,区块链节点在调用上述智能合约的过程中,可能会遇到由函数参数引发的问题:在调用put方法时,区块链节点提供的key参数已被其他节点使用,由于键值的冲突导致其schema的上链存储失败;在调用get方法时,区块链节点提供的key参数并不存在于链上,由于提供了一个不存在的键值导致节点获取链上的schema失败。上述问题可通过额外提供check函数的功能逻辑解决,所述的check函数有一个函数参数key,调用节点在执行所述智能合约的check方法时,需要提供上述的参数值;区块链节点可以通过该函数验证一个key是否已经在链上进行了存储,以保证节点后续的put或者get操作不会出现错误。本发明的有益效果包括:在一个智能合约存储一个schema的情况下,节点发布新的应用数据时,均需要部署新的智能合约以实现schema的共享;且节点还需要在本地维护多个合约地址与不同schema之间的映射关系。本发明针对节点发布新的应用数据时,均需要部署新的智能合约以实现schema的共享所带来的重复编码工作问题,以及多个合约地址与不同schema之间的管理繁杂问题,设计了一种基于智能合约的schema统一存取方法。目的就是通过多个参与方协调部署一个统一的智能合约,在智能合约中实现一个schema列表的管理逻辑,所述智能合约主要包括schema的添加以及获取功能,之后schema的存储以及获取均通过调用这个智能合约实现,节点不需要针对每个新的应用数据编写对应的智能合约进行部署,也不需要在本地维护不同应用数据的schema对应的智能合约地址。因此本发明方法只需要部署一次智能合约,之后各类数据对应的schema均通过调用这个合约来完成,一方面简化了各个节点的编码工作,另一方面节点无需存储多个schema与智能合约地址之间的映射关系,提高了节点的资源利用效率以及区块链系统的性能。附图说明图1显示的是本发明的总体流程图;图2显示的是本发明中调用智能合约进行schema存储的步骤流程图;图3显示的是本发明中调用智能合约获取schema的步骤流程图。具体实施方式结合以下具体实施例和附图,对本发明作进一步的详细说明。实施本发明的过程、条件、实验方法等,除以下专门提及的内容之外,均为本领域的普遍知识和公知常识,本发明没有特别限制内容。本发明提供了一种基于智能合约的schema统一存取方法。通过部署一个智能合约对schema进行统一存储和获取,新的schema上链存储或者获取现有的schema用于线下解析,均通过调用这一智能合约完成相应操作。数据提供方根据其数据的组织格式,编写相应的schema,规定其链上数据在链下进行解析时各个字段的信息。在完成schema的编写后,数据提供方通过调用智能合约实现schema的存储。第三方通过调用同一智能合约,获得其想要进行解析的数据所对应的schema信息,根据schema对数据提供方上链的数据进行解析,获得各个字段对应的值。本发明方法一方面简化了各个节点的编码工作,另一方面节点无需存储多个schema与智能合约地址之间的映射关系,提高了节点的资源利用效率以及区块链系统的性能。本发明提供了一种基于智能合约的schema统一存取方法,所述方法包括以下步骤:步骤1:多个参与方节点协调部署一个统一的智能合约;所述智能合约能够实现多个schema的存储以及获取逻辑;步骤2:根据业务需求以及合约规范,部署智能合约得到合约地址;步骤3:当所述区块链网络中的各节点需要在区块链上发布新的应用数据时,以其应用数据对应的schema文件作为函数参数,调用上述部署的智能合约,实现其schema文件在区块链上的存储;步骤4:当所述区块链网络中的各节点需要从区块链上获取其他节点发布的应用数据并进行解析时,调用上述部署的智能合约,获取该应用数据对应的schema,即可用于对链上数据的解析。步骤3中,所述实现schema文件链上储存具体包括以下步骤:步骤3-1:以键值对映射的形式定义一个变量,用于存储多个不同的schema;步骤3-2:指定key值,区块链节点通过check函数验证所述key值是否已经在链上进行储存;步骤3-3:若指定的key值被步骤3-2中的check函数验证通过,则将key值和value值作为参数,根据已提供的put函数,当有节点需要存储新的schema时,调用所述智能合约,执行put方法,实现其应用数据对应schema的链上储存。步骤4中,所述通过调用智能合约获取schema具体包括以下步骤:步骤4-1:以键值对映射的形式定义一个变量,用于存储多个不同的schema;步骤4-2:指定key值,区块链节点通过check函数验证所述key值是否已经在链上进行储存;步骤4-3:若指定的key值被步骤4-2中的check函数验证通过,则将key值作为参数,根据已提供的get函数,当有节点需要获取其他节点的schema时,调用所述智能合约,执行get方法,获取到相应的schema内容,后续用于应用数据的链下解析。所述智能合约所提供的功能逻辑具体包括:以键值对映射的形式定义一个变量,用于存储多个不同的schema;提供一个put函数,当有节点需要存储新的schema时,则调用所述智能合约,执行put方法,实现其schema的链上存储;提供一个get函数,当有节点需要获取其他节点的schema时,则调用所述智能合约,执行get方法,取得相应的schema。区块链节点在调用put和get两个方法时应该提供相应的函数参数;所述的put方法包括两个函数参数,key和value;所述的get方法包括一个函数参数key;所述的key参数为每个schema的唯一标识符,用于标识不同应用数据的schema;所述的value参数为应用数据对应的schema。在步骤3或步骤4中,区块链节点在调用上述智能合约的过程中,可能会遇到由函数参数引发的问题:在调用put方法时,区块链节点提供的key参数已被其他节点使用,由于键值的冲突导致其schema的上链存储失败;在调用get方法时,区块链节点提供的key参数并不存在于链上,由于提供了一个不存在的键值导致节点获取链上的schema失败。上述问题可通过额外提供check函数的功能逻辑解决,所述的check函数有一个函数参数key,调用节点在执行所述智能合约的check方法时,需要提供上述的参数值;区块链节点可以通过该函数验证一个key是否已经在链上进行了存储,以保证节点后续的put或者get操作不会出现错误。实施例图1描述了本发明的整体逻辑。首先,编写并部署一个能够对多种不同类型应用数据的schema进行统一存取管理的智能合约,所述智能合约如下所示;以发票数据应用为例;根据发票数据的应用场景,编写相应的schema文件,在schema文件中描述发票应用数据的各个字段所对应的信息,主要包括数据表名、字段个数、字段类型以及字段名,具体内容如下所示;table={//该schema的名称name=invoice//字段个数max_column_id=12//发票编号,类型为varchar,最大长度为255column_info=0,0,1,invoiceno,varchar,255//买家名称,类型为varchar,最大长度为255column_info=0,0,2,consumername,varchar,255//买家税号,类型为varchar,最大长度为255column_info=0,0,3,consumertaxesno,varchar,255//卖家名称,类型为varchar,最大长度为255column_info=0,0,4,sellername,varchar,255//卖家税号,类型为varchar,最大长度为255column_info=0,0,5,sellertaxesno,varchar,255//发票开具日期,类型为varchar,最大长度为255column_info=0,0,6,invoicedate,varchar,255//发票类型,类型为varchar,最大长度为255column_info=0,0,7,invoicetype,varchar,255//税率,类型为varchar,最大长度为255column_info=0,0,8,taxespoint,varchar,255//税额,类型为varchar,最大长度为255column_info=0,0,9,taxes,varchar,255//价格,类型为varchar,最大长度为255column_info=0,0,10,price,varchar,255//税后价格,类型为varchar,最大长度为255column_info=0,0,11,priceplustaxes,varchar,255//时间戳,类型为varchar,最大长度为255column_info=0,0,12,timestamps,varchar,255}当数据提供方需要发布发票信息数据并将其schema文件储存到区块链上时,首先通过调用check函数判断是否存在key值冲突的情况。这里以“invoice”作为key值,故以“invoice”作为函数参数调用上述智能合约中的check函数,判断是否存在key值冲突;根据check函数的返回结果,确定不存在key值冲突的情况后,以“invoice”和上述发票数据schema文件的字节码为参数,调用上述智能合约的put方法,实现发票数据schema文件的链上存储,具体流程如图2所示。当第三方需要从区块链上获取数据提供方的发票信息数据并进行解析时,首先调用上述所示智能合约的check方法,判断要获取的schema所对应的key值是否正确。这里同样以“invoice”为函数参数,调用上述智能合约的check函数,判断key值是否正确。根据check函数的返回结果,确认key值正确后,以“invoice”为函数参数,调用上述智能合约的get方法,获得发票数据的schema文件,即可对链上的发票应用数据进行解析,具体流程如图3所示。至此,本发明实施例通过部署同一个智能合约实现了对发票数据schema文件进行统一存储和获取。本发明的保护内容不局限于以上实施例。在不背离本发明构思的精神和范围下,本领域技术人员能够想到的变化和优点都被包括在本发明中,并且以所附的权利要求书为保护范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1