一种包含智能合约的区块链网式数据库及工作方法与流程

文档序号:11432337阅读:478来源:国知局
一种包含智能合约的区块链网式数据库及工作方法与流程
本发明涉及数据库
技术领域
,特别是涉及一种包含智能合约的区块链网式数据库及工作方法。
背景技术
:自中本聪2008年发明比特币(bitcoin),一种点对点的电子现金系统,区块链(blockchain)技术逐渐走进人们的视野。除了比特币系统外,还有以太坊(ethereum)、公证链(factom)是最广为人知的三大使用区块链技术的系统。然而,这三个系统各有利弊:比特币和以太坊都是单链系统;公证链虽然已有多链的雏形,但只有包含关系——二级数据(副链)被包含在一级数据(主链)中;三者中只有以太坊使用智能合约,能自动执行复杂的逻辑。单链系统的弊处在于所有数据存储在一个账本中,当数据越来越多时,网络中一些存储空间小的节点就被迫退出,不利于去中心化系统的稳定性。链条若没有智能合约,则只能执行简单且固定的逻辑,系统应用层面的扩展性非常弱;像比特币和公证链只能记录特定的项目,不能执行更为复杂的逻辑。此外,区块链的数据结构虽具有不可篡改的性质,但不能保证数据的真实性;例如公证链,记录的事项在发生之后,所以当写入的数据是错误的时候,不可篡改的性质反倒是个劣势。只有像比特币这样的系统,是“记录即发生,不记录不发生”的情况下,区块链的数据才能保证绝对的真实性。最后,三个系统都非通用系统,都是为了特定目的而搭建的区块链具体应用系统;所以二次开发需要做大幅度修改。有鉴于此,特提出本发明,以改正上述现有技术的不足之处。技术实现要素:针对上述现有技术,本发明所要解决的技术问题是提供一种包含智能合约的区块链网式数据库,该包含智能合约的区块链网式数据库提供了区块链系统的通用核心库,能加快区块链应用的开发速度;能实现多链交互,不仅可以避免单链模式账本过大导致部分节点无法参与网络的情况,还可以通过链条间的业务逻辑依赖关系保证数据真实性。本发明还提供了一种包含智能合约的区块链网式数据库的工作方法。为了解决上述技术问题,本发明提供了一种包含智能合约的区块链网式数据库,其包括智能合约模块、数据打包模块、区块头计算模块、库内通信模块,所述智能合约模块与数据打包模块连接,所述数据打包模块分别与区块头计算模块、库内通信模块连接,所述智能合约模块还与外部非链式应用模块连接;所述智能合约模块是用户自定义模块,用户可对数据进行自定义的约束,该模块将按用户的自定义的约束验证及处理数据;所述数据打包模块按照树链的方式组织数据;所述库内通讯模块将采用pbft的算法来保证同链条主节点及备份节点的一致性。本发明的进一步改进为,所述区块头计算模块包括树根计算模块和挖矿模块,所述树根计算模块分别与区块头计算模块、库内通信模块连接,所述挖矿模块分别与区块头计算模块、库内通信模块连接;所述树根计算模块将计算树根的哈希值并保存在区块头中;所述挖矿模块采用hashcash算法,通过遍历区块头中的随机数域来计算出符合一定工作量的区块头哈希值,该区块头的哈希值将存储在下一个区块头中。本发明还提供了一种包含智能合约的区块链网式数据库的工作方法,其包括以下步骤:步骤一:非链式应用模块发送数据到包含智能合约的区块链网式数据库;步骤二:接收到数据的节点检查链id是否匹配,若不匹配,则发送到对应链id的节点,否则进入步骤三;步骤三:进入智能合约模块,验证数据是否符合约束,若不符合约束,则向非链式应用模块返回报错信息,否则进入步骤四;步骤四:节点将收集到的数据打包,并计算出树根的哈希值;步骤五:变更随机数构成区块头形成备选区块;步骤六:验证备选区块头的哈希值是否符合约束,若不符合约束,则返回步骤五;否则新区块形成,并更新到其他节点。与现有技术相比,本发明包括智能合约模块、数据打包模块、区块头计算模块、库内通信模块,所述智能合约模块与数据打包模块连接,所述数据打包模块分别与区块头计算模块、库内通信模块连接,所述智能合约模块还与外部非链式应用模块连接。本发明还提供了一种包含智能合约的区块链网式数据库的工作方法。本发明提供了区块链系统的通用核心库,能加快区块链应用的开发速度;能实现多链交互,不仅可以避免单链模式账本过大导致部分节点无法参与网络的情况,还可以通过链条间的业务逻辑依赖关系保证数据真实性。附图说明图1是本发明的区块链网式数据库结构框图;图2是发明的工作流程图;图3是发明的新生儿默克尔树图。具体实施方式下面结合附图说明及具体实施方式对本发明进一步说明。如图1所示,一种包含智能合约的区块链网式数据库,其包括智能合约模块、数据打包模块、区块头计算模块、库内通信模块,所述智能合约模块与数据打包模块连接,所述数据打包模块分别与区块头计算模块、库内通信模块连接,所述智能合约模块还与外部非链式应用模块连接;所述智能合约模块是用户自定义模块,用户可对数据进行自定义的约束,该模块将按用户的自定义的约束验证及处理数据;所述数据打包模块按照树链(一般是merkletree或merklepatriciatree)的方式组织数据;所述库内通讯模块将采用pbft(practicalbyzantinefaulttolerance)的算法来保证同链条主节点及备份节点的一致性。具体地,如图1所示,所述区块头计算模块包括树根计算模块和挖矿模块,所述树根计算模块分别与区块头计算模块、库内通信模块连接,所述挖矿模块分别与区块头计算模块、库内通信模块连接;所述树根计算模块将计算树根的哈希值(如果是merkletree则可省去该模块)并保存在区块头中;该模块是为了保证区块内的数据不被篡改。所述挖矿模块采用hashcash算法,通过遍历区块头中的随机数域来计算出符合一定工作量的区块头哈希值,该区块头的哈希值将存储在下一个区块头中。挖矿模块是构成链条的核心,一方面通过将上一个区块头的哈希值存入下一个区块头中的方法来保证区块数据不被篡改,一方面通过挖矿方式来证明工作量的方法来增加伪造链条的成本。如图2所示,本发明还提供了一种包含智能合约的区块链网式数据库的工作方法,其包括以下步骤:步骤一:非链式应用模块发送数据到包含智能合约的区块链网式数据库;步骤二:接收到数据的节点检查链id是否匹配,若不匹配,则发送到对应链id的节点,否则进入步骤三;步骤三:进入智能合约模块,验证数据是否符合约束,若不符合约束,则向非链式应用模块返回报错信息,否则进入步骤四;步骤四:节点将收集到的数据打包,并计算出树根(一般是默克尔树,merkletree)的哈希值;步骤五:变更随机数构成区块头形成备选区块;步骤六:验证备选区块头的哈希值是否符合约束,若不符合约束,则返回步骤五;否则新区块形成,并更新到其他节点。如图3所示,下面以自然人一生周期为案例来详细说明:区块区块包括区块头,新生儿信息列表,新增业务信息列表和事项申请列表四个域,如下表:域描述区块头前区块头哈希值,新生儿信息默克尔树根(merkletreeroot),新业务信息默克尔树根(一般为空),事项申请消息默克尔树根,自然人mpt根(merkle-patricia-treeroot,这里的前缀可以是身份证号),业务mpt根(merkle-patricia-treeroot),时间戳。[1]每个自然人都拥有一个账户,mpt是以太坊为融入账户层加入区块链对默克尔树做的改进。新生儿信息列表一生不变的身份信息,例如身份证号,基因信息,指纹等等。新增业务信息列表新增业务的代码,也即是常说的智能合约。当有新业务产生或旧业务具体流程发生变更时,就会有新增业务信息产生。这所说的业务即是户籍登记、结婚登记、离婚登记等具体业务。事项申请列表触发智能合约的消息,例如户籍申请,结婚申请,离婚申请等等。账户在自然人链中,每个登记在案的自然人都有一个账户,属于外部持有账户类型(外部持有账户由私钥控制,持有私钥的的用户可以从账户中发送消息;在自然人链中,做身份验证的可以是指纹或者其他能验证身份的电子数据。),这类账户由用户控制。每种业务也有一个账户,属于合约账户类型,也即是常说的智能合约;这类账户由代码控制,消息可以触发其内含代码。账户都存储在mpt树的叶子节点中:自然人账户存储在自然人mpt树的叶节点中,业务账户存储在业务mpt树的叶节点中。新生儿基础信息录入:步骤一:新生儿基础信息(例如dna信息,身份证号等)录入系统(非链式应用模块)发送到数据到本发明的包含智能合约的区块链网式数据库;步骤二:接收到数据的自然人链节点检查链id是否与自己匹配,若匹配,则进入步骤三,否则发往对应链id号的节点(譬如接收到数据的是学位链节点,数据的链id必不匹配,它将把数据发往自然人链节点);步骤三:进入智能合约模块,该例中的智能合约主要验证录入数据是否有效,譬如新生儿信息是否重复录入,身份证号是否唯一等,若验证通过,则可进入步骤四,否则向新生儿基础信息录入系统返回报错信息;步骤四:节点将一天(自然人链每天出一个区块)的有效新生儿信息经数据打包模块打包入块,并计算出其默克尔树根;自然人状态mpt树也产生新的叶节点,从树根到叶的前缀为新生儿的身份证号;步骤五:变更区块头区域的随机数域形成备选区块;步骤六:验证区块头的哈希值是否小于门阀值,若小于门阀值,则广播新区块到数据库全网,更新备份节点的链条,否则回到步骤五。新生儿上户籍:步骤一:父母一方在公民账户(非链式应用模块)发起户籍登记申请,户籍登记申请信息发送到本发明的包含智能合约的区块链网式数据库;步骤二:接收到数据的自然人链节点检查链id是否与自己匹配,若匹配,则进入步骤三,否则发往对应链id号的节点;步骤三:进入智能合约模块,该例中的智能合约除了验证数据外还会对数据进行计算处理;1.身份验证申请,验证户籍登记申请发起人的身份信息;例如申请信息中发起人的指纹信息是否与自然人链中的指纹信息匹配;2.血缘验证申请,验证新生儿信息与父母dna的匹配;3.更新新生儿账户,录入户籍信息;4.向公民账户返回回执信息;步骤四:节点将一天的事项申请(包括户籍申请,结婚申请,销户申请等)经数据打包模块打包入块,并计算其默克尔树根;更新自然人状态的mpt树根值;步骤五:变更区块头区域的随机数域形成备选区块;步骤六:验证区块头的哈希值是否小于门阀值,若小于门阀值,则广播新区块到数据库全网,更新备份节点的链条,否则回到步骤五。学位获取,以本科学位为例:步骤一:大学招生系统(非链式应用模块)发送录取信息到本科学位链的主链;步骤二:接收到数据的链条节点检查链id是否与自己匹配,若匹配,则进入步骤三,否则发往对应链id号的节点;步骤三:进入智能合约模块,向自然人链发送身份核实申请;自然人链:步骤一:本科学位核心链发送身份核实申请到自然人链;步骤二:接收到数据的链条节点检查链id是否与自己匹配,若匹配,则进入步骤三,否则发往对应链id号的节点;步骤三:进入智能合约模块;1.从自然人链中核实该自然人的存在;2.更新自然人状态(学历状态:本科录取);3.返回核实结果信息给本科学位链主链;步骤四:节点将一天的事项申请(包括户籍申请,结婚申请,销户申请等)信息经数据打包模块打包入块,并计算其默克尔树根;更新自然人状态的mpt树根值;步骤五:变更区块头区域的随机数域形成备选区块;步骤六:验证区块头的哈希值是否小于门阀值,若小于门阀值,则广播新区块到数据库全网,更新备份节点的链条,否则回到步骤五;步骤四:节点将半年(录取一年两次)的有效录取信息经数据打包模块打包入块,并计算出其默克尔树根;学生状态mpt树也产生新的叶节点,从树根到叶的前缀为新学生的身份证号;步骤五:变更区块头区域的随机数域形成备选区块;步骤六:验证区块头的哈希值是否小于门阀值,若小于门阀值,则广播新区块到数据库全网,更新备份节点的链条,否则回到步骤五。学生注册课程:步骤一:选课系统(非链式应用模块)发送选课信息到成绩链(本科学历链的条件附属链);步骤二:接收到数据的链条节点检查链id是否与自己匹配,若匹配,则进入步骤三,否则发往对应链id号的节点;步骤三:进入智能合约模块,向主链确认学生信息核实申请;主链:步骤一:成绩链发送学生信息核实申请到主链;步骤二:接收到数据的链条节点检查链id是否与自己匹配,若匹配,则进入步骤三,否则发往对应链id号的节点;步骤三:进入智能合约模块;1.从主链中核实该学生的存在;2.更新学生状态(选课状态);3.返回核实结果信息给成绩链;步骤四:节点将半年的事项申请信息经数据打包模块打包入块,并计算默克尔树根;更新学生状态的mpt树根值;步骤五:变更区块头区域的随机数域形成备选区块;步骤六:验证区块头的哈希值是否小于门阀值,若小于门阀值,则广播新区块到数据库全网,更新备份节点的链条,否则回到步骤五;步骤四:节点将选课信息打包入块并计算默克尔树根;学生成绩状态的mpt产生新节点,并更新mpt树根;步骤五:变更区块头区域的随机数域形成备选区块;步骤六:验证区块头的哈希值是否小于门阀值,若小于门阀值,则广播新区块到数据库全网,更新备份节点的链条,否则回到步骤五。学生成绩录入:步骤一:教务系统向成绩链发送成绩录入信息步骤二:接收到数据的链条节点检查链id是否与自己匹配,若匹配,则进入步骤三,否则发往对应链id号的节点;步骤三:进入智能合约模块;1.自动批改学生试卷或作业(比如答题卡),得出学生成绩;2.更新学生状态(成绩状态);3.返回成绩信息到教务系统;步骤四:节点将成绩录入信息经数据打包模块打包入块,并计算默克尔树根;更新学生状态mpt的树根;步骤五:变更区块头区域的随机数域形成备选区块;步骤六:验证区块头的哈希值是否小于门阀值,若小于门阀值,则广播新区块到数据库全网,更新备份节点的链条,否则回到步骤五。学生学分修成:成绩链:步骤一:教务系统向成绩链发送学分修成申请;步骤二:接收到数据的链条节点检查链id是否与自己匹配,若匹配,则进入步骤三,否则发往对应链id号的节点;步骤三:进入智能合约模块;1.验证学生该门课成绩是否达到约束;2.返回结果信息到教务系统;3.若达到约束,则向主链发送学分修成信息;步骤四:节点将学分申请信息经数据打包模块打包入块,并计算默克尔树根;步骤五:变更区块头区域的随机数域形成备选区块;步骤六:验证区块头的哈希值是否小于门阀值,若小于门阀值,则广播新区块到数据库全网,更新备份节点的链条,否则回到步骤五。主链:步骤一:成绩链发送学分修成信息到主链;步骤二:接收到数据的链条节点检查链id是否与自己匹配,若匹配,则进入步骤三,否则发往对应链id号的节点;步骤三:进入智能合约模块,主要验证信息是否有效,譬如信息格式,日期等;并更新学生状态;步骤四:节点将学分修成信息经数据打包模块打包入块,并计算默克尔树根;更新学生状态mpt树根;步骤五:变更区块头区域的随机数域形成备选区块;步骤六:验证区块头的哈希值是否小于门阀值,若小于门阀值,则广播新区块到数据库全网,更新备份节点的链条,否则回到步骤五。学生本科学历获得:本科链主链:步骤一:教务系统向主链发送本科学历获得申请;步骤二:接收到数据的链条节点检查链id是否与自己匹配,若匹配,则进入步骤三,否则发往对应链id号的节点;步骤三:进入智能合约模块;1.验证学生学分是否达到约束;2.返回结果信息到教务系统;3.若达到约束,更新学生状态并向自然人链发送本科学历获得信息;步骤四:节点将学历获得申请信息经数据打包模块打包入块,并计算默克尔树根;并更新学生状态mpt树根;步骤五:变更区块头区域的随机数域形成备选区块;步骤六:验证区块头的哈希值是否小于门阀值,若小于门阀值,则广播新区块到数据库全网,更新备份节点的链条,否则回到步骤五。自然人链:步骤一:本科链主链发送学历获得信息到自然人链;步骤二:接收到数据的链条节点检查链id是否与自己匹配,若匹配,则进入步骤三,否则发往对应链id号的节点;步骤三:进入智能合约模块,主要验证信息是否有效,譬如信息格式,日期等;并更新自然人状态;步骤四:节点将学历获得信息经数据打包模块打包入块,并计算默克尔树根;并更新自然人状态mpt树根;步骤五:变更区块头区域的随机数域形成备选区块;步骤六:验证区块头的哈希值是否小于门阀值,若小于门阀值,则广播新区块到数据库全网,更新备份节点的链条,否则回到步骤五。自然人死亡销户:步骤一:销户申请向自然人链发出;步骤二:接收到数据的链条节点检查链id是否与自己匹配,若匹配,则进入步骤三,否则发往对应链id号的节点;步骤三:进入智能合约模块,验证申请是否符合约束;若符合约束,更新自然人状态;步骤四:节点将销户申请信息经数据打包模块打包入块,并计算默克尔树根;更新自然人状态mpt树根;步骤五:变更区块头区域的随机数域形成备选区块;步骤六:验证区块头的哈希值是否小于门阀值,若小于门阀值,则广播新区块到数据库全网,更新备份节点的链条,否则回到步骤五。本发明的优点在于,本发明包括智能合约模块、数据打包模块、区块头计算模块、库内通信模块,所述智能合约模块与数据打包模块连接,所述数据打包模块分别与区块头计算模块、库内通信模块连接,所述智能合约模块还与外部非链式应用模块连接。本发明还提供了一种包含智能合约的区块链网式数据库的工作方法。本发明提供了区块链系统的通用核心库,能加快区块链应用的开发速度;能实现多链交互,不仅可以避免单链模式账本过大导致部分节点无法参与网络的情况,还可以通过链条间的业务逻辑依赖关系保证数据真实性。以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属
技术领域
的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1