一种基于SQL数据库的区块链状态存储方法技术

技术编号:15691033 阅读:100 留言:0更新日期:2017-06-24 03:54
本发明专利技术公开了一种基于SQL数据库的区块链状态存储方法,该方法在链初始化时,生成一个数据库,每个合约可以创建若干数据表,并可以对表结构和表数据进行基于SQL语法的增删改查操作,并封装出一些带权限的接口供其他账户调用。节点在每个高度执行交易后生成数据库变更日志(log),并将log作为世界状态进行持续的哈希存证,以保证各节点数据的一致。该方法解决了区块链只能存储简单数据结构的现状,采用广泛使用的数据表结构,支持增删改查操作,甚至跨合约联合查询,丰富了链上智能合约所能表达的功能,同时降低了链外系统的对接难度。

A method for storing block chain status based on SQL database

The invention discloses a block chain state storage method based on SQL database, the method in the chain initialization, creating a database, each contract can create a number of data tables, and the table structure and table data of SQL syntax CRUD operations based on the letter and put on some permissions interface call for other account. The node generates a database change log (log) after each transaction is executed, and the log is used as a continuous hash store for the world state to ensure consistent data of each node. This method solves the current block chain store only simple data structure, the data table structure widely used, support CRUD operations, and even cross contract combination query, enrich the chain of intelligent contract can express function, and reduce the difficulty of the chain docking system.

【技术实现步骤摘要】
一种基于SQL数据库的区块链状态存储方法
本专利技术在现有区块链协议和智能合约技术的基础上,添加了状态存储相关的协议,特别是基于SQL数据库的数据组织和存储方法。
技术介绍
区块链是一种新的分布式技术,由一个个顺序排列而成的交易组成块,再由一个个顺序排列而成的块组成链,每个块包含一个自增的高度作为编号,还有一个时间戳用于记载打包时间。智能合约扩展了原本简单的为地址记录余额的功能,可以让账户拥有丰富的状态数据,记录复杂的数据结构。目前智能合约技术的这些数据存储结构大都为顺序排列的半结构化数据,支持一些基础的数据类型和一些数组类数据结构。外部账户由事先定义的统一数据结构存储,合约账户由自定义的数据结构存储,这些数据结构经过序列化后变为二进制数据作为账户的状态,并经一系列哈希运算后得出世界状态根。这种半结构化数据无法像目前广泛使用的SQL数据库一样,对数据按照表结构进行组织,也无法支持大数据或复杂的数据结构,更无法进行SQL语法的查询,造成了智能合约开发和外部系统对接上的麻烦。
技术实现思路
本专利技术的目的在于针对现有技术的不足,提供一种基于SQL数据库的区块链状态存储方法本专利技术的目的是通过以下技术方案实现的:一种基于SQL数据库的区块链状态存储方法,包括以下步骤(1)生成创世块配置文件,在进行基础配置之后,增加对SQL数据库软件选型、软件版本、协议版本、数据库名称、用户名、密码等的配置。所述协议版本的配置方式为:(1.1)在现有SQL基础协议上,指定对表、表结构和表数据的SQL语法增删改查操作。(1.2)删除现有SQL协议中会引发分布式系统不一致的功能,如随机数random等函数。(1.3)修改现有SQL协议中关于当前时间的实现方式,由从本地系统时间获取改为从所属高度块的时间戳获取,如now、today等函数。(2)在创世块中添加基础账户的智能合约模板,确定基础公私钥账户的数据表结构。(3)所有节点根据创世块配置文件进行初始化,按照配置新建一个数据库实例,生成数据库日志(log),将数据库日志(log)哈希后做为初始世界状态哈希(state_hash);所述节点拥有完全读写权限,同时为节点外系统创建只读权限账户。(4)用户发起部署合约交易,在合约内部创建若干张表,并指定合约内唯一的表名称(name);出块节点收到用户发起的部署合约交易,若发起的交易是创建账户交易,则读取基础账户合约模板作为合约代码,否则根据用户自定义合约代码部署合约,生成唯一的地址(address),再处理基础运算并执行SQL语句以进行状态数据存储,最终写入数据库中的表名称为“%address%_%name%”。合约对自己创建的表具有完全的SQL读写权限,对其他合约创建的表只有SQL读权限。(5)用户发起调用合约交易,出块节点收到用户发起的调用合约交易,则直接处理基础运算并执行SQL语句以进行状态数据存储。(6)出块节点在执行完用户交易后,生成该块的数据库变更日志(log),将父块的state_hash插入log的首行,将该log哈希后作为当前块的state_hash,生成待验证块并广播。(7)验证节点收到待验证块后,执行块内的交易,并对本地数据库进行操作,生成数据库变更日志(log),做同样的state_hash运算并与待验证块的state_hash对比,如果state_hash一致则该块合法,如果不一致则非法,并根据log回滚数据库,重新接收其他的待验证块。本专利技术的有益效果在于:该方法解决了区块链只能存储简单数据结构的现状,采用广泛使用的数据表结构,支持增删改查操作,甚至跨合约联合查询,丰富了链上智能合约所能表达的功能,同时降低了链外系统的对接难度。具体实施方式本专利技术一种基于SQL数据库的区块链状态存储方法,包括以下步骤(1)生成创世块配置文件,在进行基础配置之后,增加对SQL数据库软件选型、软件版本、协议版本、数据库名称、用户名、密码等的配置。所述协议版本的配置方式为:(1.1)在现有SQL基础协议上,指定对表、表结构和表数据的SQL语法增删改查操作。(1.2)删除现有SQL协议中会引发分布式系统不一致的功能,如随机数random等函数。(1.3)修改现有SQL协议中关于当前时间的实现方式,由从本地系统时间获取改为从所属高度块的时间戳获取,如now、today等函数。本方案并不局限于具体的数据库技术,如SQLite、MySQL、Oracle等均可实施。(2)在创世块中添加基础账户的智能合约模板,确定基础公私钥账户的数据表结构。一方面,在现有智能合约基础协议上,保留其基础运算能力,仅增加对SQL语句的操作功能。另一方面合约根据具体需求,可以将增删改权限进行详细限制,封装为接口供其他合约调用。(3)所有节点根据创世块配置文件进行初始化,按照配置新建一个数据库实例,生成数据库日志(log),将数据库日志(log)哈希后做为初始世界状态哈希(state_hash);所述节点拥有完全读写权限,同时为节点外系统创建只读权限账户。(4)用户发起部署合约交易,在合约内部创建若干张表,并指定合约内唯一的表名称(name);出块节点收到用户发起的部署合约交易,若发起的交易是创建账户交易,则读取基础账户合约模板作为合约代码,否则根据用户自定义合约代码部署合约,生成唯一的地址(address),再处理基础运算并执行SQL语句以进行状态数据存储,最终写入数据库中的表名称为“%address%_%name%”。合约对自己创建的表具有完全的SQL读写权限,对其他合约创建的表只有SQL读权限,因此可以直接做跨合约的联合查询。(5)用户发起调用合约交易,出块节点收到用户发起的调用合约交易,则直接处理基础运算并执行SQL语句以进行状态数据存储。(6)出块节点在执行完用户交易后,生成该块的数据库变更日志(log),将父块的state_hash插入log的首行,将该log哈希后作为当前块的state_hash,生成待验证块并广播。(7)验证节点收到待验证块后,执行块内的交易,并对本地数据库进行操作,生成数据库变更日志(log),做同样的state_hash运算并与待验证块的state_hash对比,如果state_hash一致则该块合法,如果不一致则非法,并根据log回滚数据库,重新接收其他的待验证块。此外,只读节点可以通过同步块,按序执行其中的交易来更新数据库,或者根据块中的state_hash直接同步log来更新数据库。节点可以根据历史log文件回滚数据库至任意高度。如果要支持轻节点,则对每个合约账户的表结构和表数据进行单独哈希,之后沿用现有的Merkel树等结构计算state_hash。本文档来自技高网...

【技术保护点】
一种基于SQL数据库的区块链状态存储方法,其特征在于,包括以下步骤(1)生成创世块配置文件,在进行基础配置之后,增加对SQL数据库软件选型、软件版本、协议版本、数据库名称、用户名、密码等的配置。所述协议版本的配置方式为:(1.1)在现有SQL基础协议上,指定对表、表结构和表数据的SQL语法增删改查操作。(1.2)删除现有SQL协议中会引发分布式系统不一致的功能,如随机数random等函数。(1.3)修改现有SQL协议中关于当前时间的实现方式,由从本地系统时间获取改为从所属高度块的时间戳获取,如now、today等函数。(2)在创世块中添加基础账户的智能合约模板,确定基础公私钥账户的数据表结构。(3)所有节点根据创世块配置文件进行初始化,按照配置新建一个数据库实例,生成数据库日志(log),将数据库日志(log)哈希后做为初始世界状态哈希(state_hash);所述节点拥有完全读写权限,同时为节点外系统创建只读权限账户。(4)用户发起部署合约交易,在合约内部创建若干张表,并指定合约内唯一的表名称(name);出块节点收到用户发起的部署合约交易,若发起的交易是创建账户交易,则读取基础账户合约模板作为合约代码,否则根据用户自定义合约代码部署合约,生成唯一的地址(address),再处理基础运算并执行SQL语句以进行状态数据存储,最终写入数据库中的表名称为“%address%_%name%”。合约对自己创建的表具有完全的SQL读写权限,对其他合约创建的表只有SQL读权限。(5)用户发起调用合约交易,出块节点收到用户发起的调用合约交易,则直接处理基础运算并执行SQL语句以进行状态数据存储。(6)出块节点在执行完用户交易后,生成该块的数据库变更日志(log),将父块的state_hash插入log的首行,将该log哈希后作为当前块的state_hash,生成待验证块并广播。(7)验证节点收到待验证块后,执行块内的交易,并对本地数据库进行操作,生成数据库变更日志(log),做同样的state_hash运算并与待验证块的state_hash对比,如果state_hash一致则该块合法,如果不一致则非法,并根据log回滚数据库,重新接收其他的待验证块。...

【技术特征摘要】
1.一种基于SQL数据库的区块链状态存储方法,其特征在于,包括以下步骤(1)生成创世块配置文件,在进行基础配置之后,增加对SQL数据库软件选型、软件版本、协议版本、数据库名称、用户名、密码等的配置。所述协议版本的配置方式为:(1.1)在现有SQL基础协议上,指定对表、表结构和表数据的SQL语法增删改查操作。(1.2)删除现有SQL协议中会引发分布式系统不一致的功能,如随机数random等函数。(1.3)修改现有SQL协议中关于当前时间的实现方式,由从本地系统时间获取改为从所属高度块的时间戳获取,如now、today等函数。(2)在创世块中添加基础账户的智能合约模板,确定基础公私钥账户的数据表结构。(3)所有节点根据创世块配置文件进行初始化,按照配置新建一个数据库实例,生成数据库日志(log),将数据库日志(log)哈希后做为初始世界状态哈希(state_hash);所述节点拥有完全读写权限,同时为节点外系统创建只读权限账户。(4)用户发起部署合约交易,在合约内部创建若干张表,并指定合约内唯一的表名称(name);出块节点收...

【专利技术属性】
技术研发人员:谢晗剑岳利鹏
申请(专利权)人:杭州秘猿科技有限公司
类型:发明
国别省市:浙江,33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1