CN106874440B - 一种基于sql数据库的区块链状态存储方法 - Google Patents
一种基于sql数据库的区块链状态存储方法 Download PDFInfo
- Publication number
- CN106874440B CN106874440B CN201710066745.1A CN201710066745A CN106874440B CN 106874440 B CN106874440 B CN 106874440B CN 201710066745 A CN201710066745 A CN 201710066745A CN 106874440 B CN106874440 B CN 106874440B
- Authority
- CN
- China
- Prior art keywords
- contract
- block
- hash
- log
- database
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种基于SQL数据库的区块链状态存储方法,该方法在链初始化时,生成一个数据库,每个合约可以创建若干数据表,并可以对表结构和表数据进行基于SQL语法的增删改查操作,并封装出一些带权限的接口供其他账户调用。节点在每个高度执行交易后生成数据库变更日志(log),并将log作为世界状态进行持续的哈希存证,以保证各节点数据的一致。该方法解决了区块链只能存储简单数据结构的现状,采用广泛使用的数据表结构,支持增删改查操作,甚至跨合约联合查询,丰富了链上智能合约所能表达的功能,同时降低了链外系统的对接难度。
Description
技术领域
本发明在现有区块链协议和智能合约技术的基础上,添加了状态存储相关的协议,特别是基于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。
Claims (1)
1.一种基于SQL数据库的区块链状态存储方法,其特征在于,包括以下步骤
(1)生成创世块配置文件,在进行基础配置之后,增加对SQL数据库软件选型、软件版本、协议版本、数据库名称、用户名、密码的配置,所述协议版本的配置方式为:
(1.1)在现有SQL基础协议上,指定对表、表结构和表数据的SQL语法增删改查操作;
(1.2)删除现有SQL协议中会引发分布式系统不一致的功能,如随机数random函数;
(1.3)修改现有SQL协议中关于当前时间的实现方式,由从本地系统时间获取改为从所属高度块的时间戳获取,如now、today函数;
(2)在创世块中添加基础账户的智能合约模板,确定基础公私钥账户的数据表结构;
(3)所有节点根据创世块配置文件进行初始化,按照配置新建一个数据库实例,生成数据库日志log,将数据库日志哈希后做为初始世界状态哈希state_hash;所述节点拥有完全读写权限,同时为节点外系统创建只读权限账户;
(4)用户发起部署合约交易,在合约内部创建若干张表,并指定合约内唯一的表名称;出块节点收到用户发起的部署合约交易,若发起的交易是创建账户交易,则读取基础账户合约模板作为合约代码,否则根据用户自定义合约代码部署合约,生成唯一的地址,再处理基础运算并执行SQL语句以进行状态数据存储,最终写入数据库中的表名称为“%address%_%name%”;合约对自己创建的表具有完全的SQL读写权限,对其他合约创建的表只有SQL读权限;
(5)用户发起调用合约交易,出块节点收到用户发起的调用合约交易,则直接处理基础运算并执行SQL语句以进行状态数据存储;
(6)出块节点在执行完用户交易后,生成该块的数据库变更日志,将父块的state_hash插入log的首行,将该log哈希后作为当前块的state_hash,生成待验证块并广播;
(7)验证节点收到待验证块后,执行块内的交易,并对本地数据库进行操作,生成数据库变更日志,做同样的state_hash运算并与待验证块的state_hash对比,如果state_hash一致则该块合法,如果不一致则非法,并根据log回滚数据库,重新接收其他的待验证块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710066745.1A CN106874440B (zh) | 2017-02-07 | 2017-02-07 | 一种基于sql数据库的区块链状态存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710066745.1A CN106874440B (zh) | 2017-02-07 | 2017-02-07 | 一种基于sql数据库的区块链状态存储方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106874440A CN106874440A (zh) | 2017-06-20 |
CN106874440B true CN106874440B (zh) | 2019-11-12 |
Family
ID=59167482
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710066745.1A Active CN106874440B (zh) | 2017-02-07 | 2017-02-07 | 一种基于sql数据库的区块链状态存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106874440B (zh) |
Families Citing this family (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107330681B (zh) * | 2017-06-27 | 2021-04-13 | 陈佺 | 一种用于确定区块链链外交易的交易时间的方法及设备 |
CN110019327A (zh) * | 2017-11-28 | 2019-07-16 | 北京众享比特科技有限公司 | 基于区块链的数据库系统中数据库表的审计方法 |
CN108052620B (zh) * | 2017-12-15 | 2021-02-12 | 泰康保险集团股份有限公司 | 数据状态的存储系统、区块链的节点数据处理系统和方法 |
CN110019043B (zh) * | 2017-12-18 | 2021-07-30 | 本无链科技(深圳)有限公司 | 一种区块链数据存储方法 |
CN108509523B (zh) * | 2018-03-13 | 2021-06-25 | 深圳前海微众银行股份有限公司 | 区块链数据的结构化处理方法、设备及可读存储介质 |
CN108647361B (zh) * | 2018-05-21 | 2021-12-03 | 中国工商银行股份有限公司 | 一种基于区块链的数据存储方法、装置及系统 |
CN108959402A (zh) * | 2018-06-06 | 2018-12-07 | 广州链块科技有限公司 | 一种基于sql引擎对区块链进行开发的装置及方法 |
US11169985B2 (en) * | 2018-07-27 | 2021-11-09 | Oracle International Corporation | System and method for supporting SQL-based rich queries in hyperledger fabric blockchains |
CN117171274A (zh) * | 2018-08-08 | 2023-12-05 | 华为技术有限公司 | 一种区块链节点和交易方法 |
CN109359159A (zh) * | 2018-09-30 | 2019-02-19 | 深圳前海微众银行股份有限公司 | 分布式存储方法、系统及设备 |
CN109446211B (zh) * | 2018-10-08 | 2020-08-14 | 联动优势科技有限公司 | 一种一致性校验方法及装置 |
GB201816837D0 (en) | 2018-10-16 | 2018-11-28 | Microsoft Technology Licensing Llc | Database management |
CN109522008B (zh) * | 2018-11-06 | 2020-07-10 | 陕西医链区块链集团有限公司 | 一种区块链智能合约构建方法 |
CN109559227A (zh) * | 2018-11-29 | 2019-04-02 | 咪咕文化科技有限公司 | 一种跨区块链网络的交易方法、装置及存储介质 |
CN109840429B (zh) * | 2019-01-08 | 2020-04-14 | 北京众享比特科技有限公司 | 智能合约部署、调用方法和装置 |
CN109800354B (zh) * | 2019-01-09 | 2021-06-08 | 考拉征信服务有限公司 | 一种基于区块链存储的简历修改意图识别方法及系统 |
CN109559234B (zh) * | 2019-01-31 | 2020-10-23 | 杭州复杂美科技有限公司 | 一种区块链状态数据的存储方法、设备和存储介质 |
CN109857811B (zh) * | 2019-02-15 | 2022-08-26 | 度小满科技(北京)有限公司 | 一种区块链数据管理方法及装置 |
CN109933592B (zh) * | 2019-03-22 | 2021-06-01 | 杭州复杂美科技有限公司 | 数据存储方法、数据回滚方法、设备和存储介质 |
CN109977274B (zh) * | 2019-03-31 | 2021-05-11 | 杭州复杂美科技有限公司 | 一种数据查询和验证方法、系统、设备及存储介质 |
CN110222028B (zh) * | 2019-04-30 | 2022-11-15 | 重庆小雨点小额贷款有限公司 | 一种数据管理方法、装置、设备及存储介质 |
CN110275916B (zh) * | 2019-05-23 | 2021-01-12 | 创新先进技术有限公司 | 数据操作记录的存储方法、系统、装置及设备 |
US11204933B2 (en) | 2019-05-23 | 2021-12-21 | Advanced New Technologies Co., Ltd. | Data manipulation record storage method, system, apparatus, and device |
US11093495B2 (en) | 2019-06-25 | 2021-08-17 | International Business Machines Corporation | SQL processing engine for blockchain ledger |
CN110502500A (zh) * | 2019-07-22 | 2019-11-26 | 福建智恒优水科技有限公司 | 一种基于区块链的去中心化数据库实现方法及装置 |
CN111177272B (zh) * | 2019-12-31 | 2023-09-08 | 杭州趣链科技有限公司 | 一种基于区块链的大数据可信审计方法 |
CN111488613A (zh) * | 2020-04-08 | 2020-08-04 | 北京瑞策科技有限公司 | 业务数据区块链的数据高效查询方法及装置 |
CN111506579B (zh) * | 2020-05-28 | 2022-09-20 | 支付宝(杭州)信息技术有限公司 | 一种智能合约代码的生成方法、程序及设备 |
CN111680105B (zh) * | 2020-06-15 | 2023-09-22 | 浙江创邻科技有限公司 | 基于区块链的分布式关系型数据库的管理方法及系统 |
CN111767168B (zh) * | 2020-06-23 | 2022-07-22 | 江苏荣泽信息科技股份有限公司 | 基于区块链的便于数据回溯的存储系统 |
CN111796845B (zh) * | 2020-07-03 | 2022-05-24 | 杭州复杂美科技有限公司 | 数据库升级方法、状态数据查询方法、设备和存储介质 |
KR102594377B1 (ko) * | 2021-01-19 | 2023-10-26 | 주식회사 에이비씨 | 프라이빗 블록체인을 이용한 하이브리드 데이터베이스 시스템 |
CN113221151A (zh) * | 2021-05-28 | 2021-08-06 | 数网金融有限公司 | 基于区块链的数据处理方法、装置及存储介质 |
CN113821570B (zh) * | 2021-11-22 | 2022-03-01 | 中国信息通信研究院 | 基于区块链和sql的数据处理方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1930635A (zh) * | 2003-12-30 | 2007-03-14 | 桑迪士克股份有限公司 | 对多个区块进行适应性确定群组以成为多个多区块单元 |
CN105630609A (zh) * | 2016-02-24 | 2016-06-01 | 杭州复杂美科技有限公司 | 区块链的打包存储方法 |
WO2016127721A1 (zh) * | 2015-02-13 | 2016-08-18 | 中兴通讯股份有限公司 | 一种获取信息的方法、智能终端和服务端 |
CN105976231A (zh) * | 2016-06-24 | 2016-09-28 | 深圳前海微众银行股份有限公司 | 基于区块链智能合约的资产管理方法及节点 |
CN106372533A (zh) * | 2016-09-14 | 2017-02-01 | 中国银联股份有限公司 | 基于区块链技术的内容存储方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150379510A1 (en) * | 2012-07-10 | 2015-12-31 | Stanley Benjamin Smith | Method and system to use a block chain infrastructure and Smart Contracts to monetize data transactions involving changes to data included into a data supply chain. |
-
2017
- 2017-02-07 CN CN201710066745.1A patent/CN106874440B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1930635A (zh) * | 2003-12-30 | 2007-03-14 | 桑迪士克股份有限公司 | 对多个区块进行适应性确定群组以成为多个多区块单元 |
WO2016127721A1 (zh) * | 2015-02-13 | 2016-08-18 | 中兴通讯股份有限公司 | 一种获取信息的方法、智能终端和服务端 |
CN105630609A (zh) * | 2016-02-24 | 2016-06-01 | 杭州复杂美科技有限公司 | 区块链的打包存储方法 |
CN105976231A (zh) * | 2016-06-24 | 2016-09-28 | 深圳前海微众银行股份有限公司 | 基于区块链智能合约的资产管理方法及节点 |
CN106372533A (zh) * | 2016-09-14 | 2017-02-01 | 中国银联股份有限公司 | 基于区块链技术的内容存储方法 |
Non-Patent Citations (1)
Title |
---|
《区块链技术及其应用研究》;谢辉等;《信息网络安全》;20160910(第9期);第192-195页 * |
Also Published As
Publication number | Publication date |
---|---|
CN106874440A (zh) | 2017-06-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106874440B (zh) | 一种基于sql数据库的区块链状态存储方法 | |
CN103793514B (zh) | 数据库同步方法及数据库 | |
Banker et al. | MongoDB in action: covers MongoDB version 3.0 | |
CN110471795A (zh) | 区块链状态数据恢复方法及装置、电子设备 | |
CN108615156A (zh) | 一种基于区块链的数据结构 | |
CN106709704A (zh) | 一种基于许可链的智能合约升级方法 | |
CN109144994A (zh) | 索引更新方法、系统及相关装置 | |
AU2015347304B2 (en) | Testing insecure computing environments using random data sets generated from characterizations of real data sets | |
CN110471985A (zh) | 基于区块链的电子票据作废方法及装置、电子设备 | |
US11144309B2 (en) | Changeset conflict rebasing | |
CN103440285B (zh) | 大型手机游戏系统及其数据库更新方法 | |
CN110474870B (zh) | 基于区块链的网络主动防御方法、系统及计算机可读存储介质 | |
CN107832448A (zh) | 数据库操作方法、装置及设备 | |
KR20170035349A (ko) | 데이터의 검색 방법, 장치 및 단말기 | |
CN110263104A (zh) | Json字符串处理方法及装置 | |
CN102053855B (zh) | 一种软件的生成系统及方法 | |
Ma et al. | A transparent data middleware in support of multi-tenancy | |
CN104391845B (zh) | 一种生成数据库脚本的方法及装置 | |
CN109542925A (zh) | 数据库访问系统、方法、设备及多用户商城系统 | |
CN112000670B (zh) | 一种多线程程序数据统一管理方法、系统及电子设备 | |
CN111831744B (zh) | Dapp的链上数据检索系统、方法及介质 | |
CN110659295B (zh) | 一种基于hawq记录有效数据的方法、装置和介质 | |
CN109660587B (zh) | 基于随机数的数据推送方法、装置、存储介质及服务器 | |
CN103902554B (zh) | 数据访问方法与装置 | |
US11836130B2 (en) | Relational database blockchain accountability |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20200331 Address after: 310012 no.1001, 10 / F, block a, Huaxing Times Square, No.478, Wensan Road, Xihu District, Hangzhou City, Zhejiang Province Patentee after: Hangzhou Xita Technology Co.,Ltd. Address before: Seven 310030 Hangzhou Road, Zhejiang province Xihu District three Town Xiyuan No. 3 Building 3 Room 203 Patentee before: CRYPTAPE Co.,Ltd. |