CN110288340A - 一种基于Java智能合约的数据集合存储方法 - Google Patents
一种基于Java智能合约的数据集合存储方法 Download PDFInfo
- Publication number
- CN110288340A CN110288340A CN201910404690.XA CN201910404690A CN110288340A CN 110288340 A CN110288340 A CN 110288340A CN 201910404690 A CN201910404690 A CN 201910404690A CN 110288340 A CN110288340 A CN 110288340A
- Authority
- CN
- China
- Prior art keywords
- data
- account book
- contract
- java
- acquisition system
- 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.)
- Granted
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/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/38—Payment protocols; Details thereof
- G06Q20/389—Keeping log of transactions for guaranteeing non-repudiation of a transaction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- General Business, Economics & Management (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Strategic Management (AREA)
- Computing Systems (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Technology Law (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开一种基于Java智能合约的数据集合存储方法,基于Java合约的集合存储方式,将合约中的集合数据能够准确的映射到区块链账本上的散列键值对中,而在使用与功能上与普通的Java集合相似,且保证不需要全量加载当前合约中的所有账本数据,在需要使用时进行懒加载,节约了合约执行时占用的内存空间,且将已加载的数据缓存起来,节约重复查询的时间。本发明既保证了Java集合在账本中的映射关系,同时又解决了合约数据量增大后的存储占用空间大的问题,提高了Java合约的数据可靠性。
Description
技术领域
本发明涉及去中心化的区块链智能合约数据存储的设计领域,尤其涉及一种基于Java智能合约的数据集合存储方法。
背景技术
区块链技术,区块链是一种新型去中心化协议,能安全地存储数字货币交易或其他数据,信息不可伪造和篡改;智能合约是一种可以在区块链网络环境中部署和执行的一段代码,这段代码的部署以及执行都是可以在区块链网络中以交易的形式呈现,其部署和执行结果可以随着交易被全网共识;目前智能合约支持的语言包括Solidity、Java等等,智能合约也在基于区块链的各种业务应用中广泛应用。
传统联盟区块链智能合约执行引擎包括evm和jvm,以jvm为例,jvm无法采用直接映射到区块链账本的集合类型来存储数据,需要按键值对的形式读取或写入到账本中,且无法保证所有写入数据的原子性,在插入部分数据后合约执行失败需要将合约数据回滚,这部分压力将会落在区块链节点上,如何让Java智能合约方便的使用自定义集合来操作账本的同时又保证一次交易执行的账本数据修改的原子性,保证区块链智能合约执行引擎稳定高效是一项全新的挑战。
发明内容
针对现有技术的不足,本发明提出一种基于Java智能合约的数据集合存储方法,既保证了与区块链账本的直接交互集合方便使用,同时又解决了多次账本数据操作的存储原子性问题。
本发明的目的是通过以下技术方案来实现的:一种基于Java智能合约的数据集合存储方法,该方法具体包括如下步骤:
步骤一:使用Java智能合约存储数据,必然离不开对集合的使用,在Java智能合约中必须为合约的集合成员变量初始化,之后调用不同集合的构造函数;list集合初始化时,将会创建有序的集合,将集合的初始大小、集合内的缓存进行以及元素的泛型类型初始化;map集合初始化时,将会创建无序的集合,将集合的初始大小、集合内的读写缓存以及键值对的泛型信息进行初始化;初始化后可以集合进行操作,写入的数据可以映射到区块链账本,同时可以利用集合从账本中读取数据;
步骤二:合约集合分别实现了标准JDK的map和list接口,当Java智能合约需要将数据持久化时,可以调用数据集合暴露的接口,将数据存入到不同的数据集合中;有序的数据集合list将会记录存入数据的顺序,可以通过角标的方式来获取;无序的数据集合map则会将数据的键值进行哈希计算来保证存入账本时键值的长度,同时可以将完整的map元素数据持久化,方便下次获取;
步骤三:为了提高数据存取的性能,对Java智能合约的数据集合的元素内容进行了缓存;缓存可分为读缓存和写缓存,当插入新数据时会将数据加载到读写缓存中,写缓存最终会根据某种规则将其中的数据写入到账本中去,而读缓存则可以在读取数据时更高效的获取,降低延迟和减少对账本的操作,获取到的数据同样会加入到读缓存中;
步骤四:Java智能合约数据集合需要与账本不断的发生交互,在读取数据阶段,list集合将以角标作为账本的键值来访问,获取到的数据进过反序列化为list指定的泛型类型数据;map集合则以自身键值的哈希值来访问账本,由于经过哈希计算后丢失了键值的内容,所以map集合需要将键值对一起进行反序列化来从账本还原为原始的map元素,向账本中存储数据时也是一样的道理;
步骤五:最终在Java智能合约执行完成之后,会对数据进行统一写入区块链账本中,这样可以保证数据的原子性;判断合约数据集合在执行前后是否一致,来做是否写入账本的操作,写入账本的数据将从集合的写缓存中获取,最终以与读取方式一致的序列化形式将数据记录进账本,之后清空集合中的缓存来释放空间。
进一步地,所述的步骤二中,调用数据集合暴露的接口指的是,实现了标准JDK制定的在java.util包下的两个标准集合类型接口:List和Map的具体实现,分别实现了两种具备改接口功能的集合。
进一步地,所述的步骤三中,对合约的数据集合的元素内容进行了缓存,会将新插入的数据和从账本读取的数据均写入读缓存中。
进一步地,所述的步骤四中,将map键值哈希计算是为了控制写入账本的键值长度,list集合则不存在这个问题。
进一步地,所述的步骤五中,不将每次集合操作都写入账本而将数据写入写缓存,在合约执行完交易成功后再将数据写入可以保证原子性。
本发明的有益效果如下:
本发明应用于联盟链背景下的区块链网络智能合约执行引擎上,既保证了与区块链账本的直接交互集合方便使用,同时又解决了多次账本数据操作的存储原子性问题,提高了智能合约的执行效率,是Java智能合约下jvm执行引擎的大突破。
附图说明
图1是本发明的方法的List集合流程图;
图2是本发明的方法的Map集合流程图。
具体实施方式
下面根据附图和优选实施例详细描述本发明,本发明的目的和效果将变得更加明白,以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1和2所示,一种基于Java智能合约的数据集合存储方法,该方法具体包括如下步骤:
步骤一:使用Java智能合约存储数据,必然离不开对集合的使用,在Java智能合约中必须为合约的集合成员变量初始化,之后调用不同集合的构造函数;list集合初始化时,将会创建有序的集合,将集合的初始大小、集合内的缓存进行以及元素的泛型类型初始化;map集合初始化时,将会创建无序的集合,将集合的初始大小、集合内的读写缓存以及键值对的泛型信息进行初始化;初始化后可以集合进行操作,写入的数据可以映射到区块链账本,同时可以利用集合从账本中读取数据;
步骤二:合约集合分别实现了标准JDK的map和list接口,当Java智能合约需要将数据持久化时,可以调用数据集合暴露的接口,将数据存入到不同的数据集合中;有序的数据集合list将会记录存入数据的顺序,可以通过角标的方式来获取;无序的数据集合map则会将数据的键值进行哈希计算来保证存入账本时键值的长度,同时可以将完整的map元素数据持久化,方便下次获取;
步骤三:为了提高数据存取的性能,对Java智能合约的数据集合的元素内容进行了缓存;缓存可分为读缓存和写缓存,当插入新数据时会将数据加载到读写缓存中,写缓存最终会根据某种规则将其中的数据写入到账本中去,而读缓存则可以在读取数据时更高效的获取,降低延迟和减少对账本的操作,获取到的数据同样会加入到读缓存中;
步骤四:Java智能合约数据集合需要与账本不断的发生交互,在读取数据阶段,list集合将以角标作为账本的键值来访问,获取到的数据进过反序列化为list指定的泛型类型数据;map集合则以自身键值的哈希值来访问账本,由于经过哈希计算后丢失了键值的内容,所以map集合需要将键值对一起进行反序列化来从账本还原为原始的map元素,向账本中存储数据时也是一样的道理;
步骤五:最终在Java智能合约执行完成之后,会对数据进行统一写入区块链账本中,这样可以保证数据的原子性;判断合约数据集合在执行前后是否一致,来做是否写入账本的操作,写入账本的数据将从集合的写缓存中获取,最终以与读取方式一致的序列化形式将数据记录进账本,之后清空集合中的缓存来释放空间。
进一步地,所述的步骤二中,调用数据集合暴露的接口指的是,实现了标准JDK制定的在java.util包下的两个标准集合类型接口:List和Map的具体实现,分别实现了两种具备改接口功能的集合。
进一步地,所述的步骤三中,对合约的数据集合的元素内容进行了缓存,会将新插入的数据和从账本读取的数据均写入读缓存中。
进一步地,所述的步骤四中,将map键值哈希计算是为了控制写入账本的键值长度,list集合则不存在这个问题。
进一步地,所述的步骤五中,不将每次集合操作都写入账本而将数据写入写缓存,在合约执行完交易成功后再将数据写入可以保证原子性。
本发明中,实现了将Java标准集合List和Map映射到区块链账本的键值对数据上,做到操作数据能够像操作普通Java集合一样方便,同时又不需要全量加载大量的合约数据,在需要时进行懒加载,节省了空间,增加缓存策略可以提高合约数据获取的速度;再此基础上,把需要增加或者更新的数据记录在写缓存中,在合约执行期间不需要实时写入到账本中去,减少不必要的操作,在合约执行完成后,将写缓存中的数据同时写入到账本中,可以保证合约执行结果数据的原子性,减轻区块链节点的回滚压力。
本领域普通技术人员可以理解,以上所述仅为发明的优选实例而已,并不用于限制发明,尽管参照前述实例对发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在发明的精神和原则之内,所做的修改、等同替换等均应包含在发明的保护范围之内。
Claims (5)
1.一种基于Java智能合约的数据集合存储方法,其特征在于,该方法具体包括如下步骤:
步骤一:使用Java智能合约存储数据,必然离不开对集合的使用,在Java智能合约中必须为合约的集合成员变量初始化,之后调用不同集合的构造函数;list集合初始化时,将会创建有序的集合,将集合的初始大小、集合内的缓存进行以及元素的泛型类型初始化;map集合初始化时,将会创建无序的集合,将集合的初始大小、集合内的读写缓存以及键值对的泛型信息进行初始化;初始化后可以集合进行操作,写入的数据可以映射到区块链账本,同时可以利用集合从账本中读取数据。
步骤二:合约集合分别实现了标准JDK的map和list接口,当Java智能合约需要将数据持久化时,可以调用数据集合暴露的接口,将数据存入到不同的数据集合中;有序的数据集合list将会记录存入数据的顺序,可以通过角标的方式来获取;无序的数据集合map则会将数据的键值进行哈希计算来保证存入账本时键值的长度,同时可以将完整的map元素数据持久化,方便下次获取。
步骤三:为了提高数据存取的性能,对Java智能合约的数据集合的元素内容进行了缓存;缓存可分为读缓存和写缓存,当插入新数据时会将数据加载到读写缓存中,写缓存最终会根据某种规则将其中的数据写入到账本中去,而读缓存则可以在读取数据时更高效的获取,降低延迟和减少对账本的操作,获取到的数据同样会加入到读缓存中。
步骤四:Java智能合约数据集合需要与账本不断的发生交互,在读取数据阶段,list集合将以角标作为账本的键值来访问,获取到的数据进过反序列化为list指定的泛型类型数据;map集合则以自身键值的哈希值来访问账本,由于经过哈希计算后丢失了键值的内容,所以map集合需要将键值对一起进行反序列化来从账本还原为原始的map元素,向账本中存储数据时也是一样的道理。
步骤五:最终在Java智能合约执行完成之后,会对数据进行统一写入区块链账本中,这样可以保证数据的原子性;判断合约数据集合在执行前后是否一致,来做是否写入账本的操作,写入账本的数据将从集合的写缓存中获取,最终以与读取方式一致的序列化形式将数据记录进账本,之后清空集合中的缓存来释放空间。
2.根据权利要求1所述的基于Java智能合约的数据集合存储方法,其特征在于,所述的步骤二中,调用数据集合暴露的接口指的是,实现了标准JDK制定的在java.util包下的两个标准集合类型接口:List和Map的具体实现,分别实现了两种具备改接口功能的集合。
3.根据权利要求1所述的基于Java智能合约的数据集合存储方法,其特征在于,所述的步骤三中,对合约的数据集合的元素内容进行了缓存,会将新插入的数据和从账本读取的数据均写入读缓存中。
4.根据权利要求1所述的基于Java智能合约的数据集合存储方法,其特征在于,所述的步骤四中,将map键值哈希计算是为了控制写入账本的键值长度,list集合则不存在这个问题。
5.根据权利要求1所述的基于Java智能合约的数据集合存储方法,其特征在于,所述的步骤五中,不将每次集合操作都写入账本而将数据写入写缓存,在合约执行完交易成功后再将数据写入可以保证原子性。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910404690.XA CN110288340B (zh) | 2019-05-15 | 2019-05-15 | 一种基于Java智能合约的数据集合存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910404690.XA CN110288340B (zh) | 2019-05-15 | 2019-05-15 | 一种基于Java智能合约的数据集合存储方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110288340A true CN110288340A (zh) | 2019-09-27 |
CN110288340B CN110288340B (zh) | 2021-07-30 |
Family
ID=68002110
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910404690.XA Active CN110288340B (zh) | 2019-05-15 | 2019-05-15 | 一种基于Java智能合约的数据集合存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110288340B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111782305A (zh) * | 2020-07-21 | 2020-10-16 | 江苏荣泽信息科技股份有限公司 | 一种高效安全智能合约运行环境的方法 |
CN112765269A (zh) * | 2020-12-31 | 2021-05-07 | 杭州趣链科技有限公司 | 数据处理方法、装置、设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040216146A1 (en) * | 2001-04-05 | 2004-10-28 | Sanchez Humberto A. | Method for mapping procedural C++ code to java object-oriented classes |
US20160321294A1 (en) * | 2015-04-30 | 2016-11-03 | Vmware, Inc. | Distributed, Scalable Key-Value Store |
CN107392610A (zh) * | 2017-03-06 | 2017-11-24 | 钱德君 | 一种分布式网络的可靠数据源的实现方法 |
CN109522735A (zh) * | 2018-11-29 | 2019-03-26 | 上海中信信息发展股份有限公司 | 一种基于智能合约的数据权限验证方法及装置 |
CN109710384A (zh) * | 2018-12-29 | 2019-05-03 | 杭州趣链科技有限公司 | 一种安全的Java智能合约解释执行引擎及方法 |
-
2019
- 2019-05-15 CN CN201910404690.XA patent/CN110288340B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040216146A1 (en) * | 2001-04-05 | 2004-10-28 | Sanchez Humberto A. | Method for mapping procedural C++ code to java object-oriented classes |
US20160321294A1 (en) * | 2015-04-30 | 2016-11-03 | Vmware, Inc. | Distributed, Scalable Key-Value Store |
CN107392610A (zh) * | 2017-03-06 | 2017-11-24 | 钱德君 | 一种分布式网络的可靠数据源的实现方法 |
CN109522735A (zh) * | 2018-11-29 | 2019-03-26 | 上海中信信息发展股份有限公司 | 一种基于智能合约的数据权限验证方法及装置 |
CN109710384A (zh) * | 2018-12-29 | 2019-05-03 | 杭州趣链科技有限公司 | 一种安全的Java智能合约解释执行引擎及方法 |
Non-Patent Citations (2)
Title |
---|
马春光等: "区块链中的智能合约", 《信息网络安全》 * |
黄洁华等: "众筹区块链上的智能合约设计", 《信息安全研究》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111782305A (zh) * | 2020-07-21 | 2020-10-16 | 江苏荣泽信息科技股份有限公司 | 一种高效安全智能合约运行环境的方法 |
CN111782305B (zh) * | 2020-07-21 | 2021-01-19 | 江苏荣泽信息科技股份有限公司 | 一种高效安全智能合约运行环境的方法 |
CN112765269A (zh) * | 2020-12-31 | 2021-05-07 | 杭州趣链科技有限公司 | 数据处理方法、装置、设备和存储介质 |
CN112765269B (zh) * | 2020-12-31 | 2022-06-10 | 杭州趣链科技有限公司 | 数据处理方法、装置、设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110288340B (zh) | 2021-07-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101421711B (zh) | 用于资源受限设备的虚拟执行系统 | |
US7542977B2 (en) | Transactional memory with automatic object versioning | |
US8060868B2 (en) | Fully capturing outer variables as data objects | |
CN105378687B (zh) | 访问文件的方法和相关设备 | |
US9274798B2 (en) | Multi-threaded logging | |
CN109559229A (zh) | 基于区块链的更新智能合约组的方法 | |
US11620215B2 (en) | Multi-threaded pause-less replicating garbage collection | |
CN103647850B (zh) | 一种分布式版本控制系统的数据处理方法、设备及系统 | |
Correia et al. | Persistent memory and the rise of universal constructions | |
US20100049937A1 (en) | Volume record data set optimization apparatus and method | |
CN107463378A (zh) | 一种基于注解的本地缓存实现方法、存储设备及电子设备 | |
CN110297721B (zh) | 一种基于java的智能合约的跨合约调用方法 | |
CN110288340A (zh) | 一种基于Java智能合约的数据集合存储方法 | |
CN109710235B (zh) | 一种基于Java智能合约业务逻辑的事务实现系统及方法 | |
CN109614055A (zh) | 快照创建方法、装置、电子设备及机器可读存储介质 | |
CN105260139B (zh) | 一种磁盘管理方法以及系统 | |
US11550714B2 (en) | Compiling application with multiple function implementations for garbage collection | |
KR20110099214A (ko) | 동결된 개체들을 위한 형식 설명자 관리 | |
CN107092685A (zh) | 一种联合使用文件系统和rdbms存储事务数据的方法 | |
CN109446258A (zh) | 一种分布式数据存储方法及系统 | |
CN107577492A (zh) | 加速文件系统读写的nvm块设备驱动方法及系统 | |
CN111031100A (zh) | 一种扩展的区块链存储方法、系统及介质 | |
CN109857553A (zh) | 内存管理方法及装置 | |
WO2024197789A1 (zh) | 一种细粒度文件系统以及文件读写方法 | |
US10936483B2 (en) | Hybrid garbage collection |
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 |