一种基于Scala的区块链合约实现方法及系统技术方案

技术编号:19542391 阅读:26 留言:0更新日期:2018-11-24 20:23
本发明专利技术提供一种基于Scala的区块链合约实现方法及系统,所述方法包括:在集成开发环境下静态编译合约,并通过接口抽象结合类反射机制实现合约接口调用;通过唯一命名机制对合约类进行命名;通过ScalaTest工具包对所编译合约进行测试;将通过测试的合约通过Deploy类型的签名交易共识入块、出块之后经类反射机制实现Scala合约类的动态编译和加载合约后完成全网部署;根据部署返回的合约标识对所述合约进行调用。本发明专利技术能够采用图灵完备、经过工程化实践检验的Scala语言作为合约开发语言,扩展区块链的应用场景,同时由于采用通用、成熟的IDE作为合约的开发调试工具,降低了合约开发调试的难度。

An Implementation Method and System of Block Chain Contract Based on Scala

The invention provides a block chain contract implementation method and system based on Scala, which includes: compiling contract statically in integrated development environment, calling contract interface through interface abstraction and class reflection mechanism; naming contract class by unique naming mechanism; and compiling contract by ScalaTest toolkit. Contracts will be tested; Scala contract classes will be dynamically compiled and loaded through the class reflection mechanism after the test contract is blocked and blocked through the Deploy type signature transaction consensus; the contract will be invoked according to the contract identity returned from the deployment. The invention can use Turing's complete Scala language which has been tested by engineering practice as contract development language, expand the application scenario of block chain, and reduce the difficulty of contract development and debugging by using universal and mature IDE as contract development and debugging tool.

【技术实现步骤摘要】
一种基于Scala的区块链合约实现方法及系统
本专利技术涉及区块链
,尤其涉及一种基于Scala的区块链合约实现方法及系统。
技术介绍
区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。但是,随着区块链的广泛使用,出现需要适应更多的应用场景以及允许第三方编写、签名部署、签名调用合约的问题。
技术实现思路
本专利技术提供的基于Scala的区块链合约实现方法及系统,能够采用图灵完备、经过工程化实践检验的Scala语言作为合约开发语言,扩展区块链的应用场景,同时由于采用通用、成熟的IDE作为合约的开发调试工具,降低了合约开发调试的难度。第一方面,本专利技术提供一种基于Scala的区块链合约实现方法,包括:在集成开发环境下静态编译合约,并通过接口抽象结合类反射机制实现合约接口调用;通过唯一命名机制对合约类进行命名;通过ScalaTest工具包对所编译合约进行测试;将通过测试的合约通过Deploy类型的签名交易共识入块、出块之后经类反射机制实现Scala合约类的动态编译和加载合约后完成全网部署;根据部署返回的合约标识对所述合约进行调用。可选地,所述通过ScalaTest工具包对所编译合约进行测试包括:通过ScalaTest工具包编写自动化测试用例;遍历所编译合约的所有提供给外部交易请求调用的公开方法,用以测试所编译合约。可选地,所述将通过测试的合约通过Deploy类型的签名交易共识入块、出块之后经类反射机制实现Scala合约类的动态编译和加载合约后完成全网部署包括:将合约内容以文本方式写入区块链;由交易请求调度类根据Deploy类型的签名交易,新建对应的合约容器,并由合约容器经类反射机制实现Scala合约类的动态编译和加载到内存并初始化;由部署交易请求将返回的合约标识作为调用所述合约的指向,以使合约完成全网部署。可选地,所述由合约容器经类反射机制实现Scala合约类的动态编译和加载到内存并初始化包括:定义抽象接口,并让合约类开放其被调用的时机;通过唯一命名机制对合约类进行命名;由动态编译工具类、加载工具类分别对合约类执行动态编译和加载。可选地,所述定义抽象接口,并让合约类开放其被调用的时机包括:初始化合约实例,并传入合约执行的上下文;调用合约方法,传入合约数据并返回执行结果。第二方面,本专利技术提供一种基于Scala的区块链合约实现系统,包括:编译单元,用于在集成开发环境下静态编译合约;接口单元,用于通过接口抽象结合类反射机制实现合约接口调用;命名单元,用于通过唯一命名机制对合约类进行命名;测试单元,用于通过ScalaTest工具包对所编译合约进行测试;合约部署单元,用于将通过测试的合约通过Deploy类型的签名交易共识入块、出块之后经类反射机制实现Scala合约类的动态编译和加载合约后完成全网部署;调用单元,用于根据部署返回的合约标识对所述合约进行调用。可选地,所述测试单元包括:用例编写子单元,用于通过ScalaTest工具包编写自动化测试用例;测试子单元,用于遍历所编译合约的所有提供给外部交易请求调用的公开方法,用以测试所编译合约。可选地,所述合约部署单元包括:入块子单元,用于将合约内容以文本方式写入区块链;部署子单元,用于由交易请求调度类根据Deploy类型的签名交易,新建对应的合约容器,并由合约容器经类反射机制实现Scala合约类的动态编译和加载到内存并初始化;合约标识子单元,用于由部署交易请求将返回的合约标识作为调用所述合约的指向,以使合约完成全网部署。可选地,所述部署子单元包括:抽象接口定义模块,用于定义抽象接口,并让合约类开放其被调用的时机;命名模块,用于通过唯一命名机制对合约类进行命名;动态编译加载模块,用于由动态编译工具类、加载工具类分别对合约类执行动态编译和加载。可选地,所述抽象接口定义模块包括:第一定义子模块,用于初始化合约实例,并传入合约执行的上下文;第二定义子模块,用于调用合约方法,传入合约数据并返回执行结果。本专利技术实施例提供的基于Scala的区块链合约实现方法及系统,所述方法主要是通过采用Scala语言作为合约脚本语言建立区块链合约,其中,采用Scala语言建立区块链合约过程包括首先在集成开发环境下静态编译合约用以实现合约的编写,所述集成开发环境;其次通过类反射机制实现合约接口调用,以便于能够实现合约容器动态加载;然后,通过ScalaTest工具包对所编译合约进行测试,所述测试是在测试网络TestNet下进行,并用以实现合约本地测试;最后,将通过测试的合约经动态编译和加载合约后完成全网部署以及后续合约调用。本实施例所述方法运用成熟的Scala类反射机制、动态类编译、类加载技术首先实现采用图灵完备、经过工程化实践检验的Scala语言作为合约开发语言;其次实现采用支持Scala调试的通用IDE作为合约调试IDE;最后实现支持合约的动态即时编译和加载;大大扩展了区块链的应用场景,图灵完备的语言加上对Key-Value对的WorldState持久化支持,使得开发者能够根据应用场景编写对应的合约,提高所述区块链的多样性,扩大区块链的运用范围。附图说明图1为本专利技术一实施例基于Scala的区块链合约实现方法的流程图;图2为本专利技术另一实施例基于Scala的区块链合约实现方法的流程图;图3为本专利技术一实施例基于Scala的区块链合约实现系统的结构示意图;图4为本专利技术另一实施例基于Scala的区块链合约实现系统的结构示意图。具体实施方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。本专利技术实施例提供一种基于Scala的区块链合约实现方法,如图1所示,所述方法包括:S11、在集成开发环境下静态编译合约,并通过接口抽象结合类反射机制实现合约接口调用;S12、通过唯一命名机制对合约类进行命名;S13、通过ScalaTest工具包对所编译合约进行测试;S14、将通过测试的合约通过Deploy类型的签名交易共识入块、出块之后经类反射机制实现Scala合约类的动态编译和加载合约后完成全网部署;S15、根据部署返回的合约标识对所述合约进行调用。本专利技术实施例提供的基于Scala的区块链合约实现方法主要是通过采用Scala语言(Scala语言是一种能够执行于JVM和.Net平台之上的通用编程语言。既可用于大规模应用程序开发,也可用于脚本编程,它由MartinOdersk于2001开发,2004年开始程序执行在JVM与.Net平台之上。)作为合约脚本语言建立区块链合约,其中,采用Scala语言建立区块链合约过程包括首先在集成开发环境下静态编译合约用以实现合约的编写,所述集成开发环境(IDE:IntegratedDevelopmentEnvironment,用于辅助开发计算机程序的应用软件);其次通过类反射本文档来自技高网...

【技术保护点】
1.一种基于Scala的区块链合约实现方法,其特征在于,包括:在集成开发环境下静态编译合约,并通过接口抽象结合类反射机制实现合约接口调用;通过唯一命名机制对合约类进行命名;通过ScalaTest工具包对所编译合约进行测试;将通过测试的合约通过Deploy类型的签名交易共识入块、出块之后经类反射机制实现Scala合约类的动态编译和加载合约后完成全网部署;根据部署返回的合约标识对所述合约进行调用。

【技术特征摘要】
1.一种基于Scala的区块链合约实现方法,其特征在于,包括:在集成开发环境下静态编译合约,并通过接口抽象结合类反射机制实现合约接口调用;通过唯一命名机制对合约类进行命名;通过ScalaTest工具包对所编译合约进行测试;将通过测试的合约通过Deploy类型的签名交易共识入块、出块之后经类反射机制实现Scala合约类的动态编译和加载合约后完成全网部署;根据部署返回的合约标识对所述合约进行调用。2.根据权利要求1所述的方法,其特征在于,所述通过ScalaTest工具包对所编译合约进行测试包括:通过ScalaTest工具包编写自动化测试用例;遍历所编译合约的所有提供给外部交易请求调用的公开方法,用以测试所编译合约。3.根据权利要求1或2所述的方法,其特征在于,所述将通过测试的合约通过Deploy类型的签名交易共识入块、出块之后经类反射机制实现Scala合约类的动态编译和加载合约后完成全网部署包括:将合约内容以文本方式写入区块链;由交易请求调度类根据Deploy类型的签名交易,新建对应的合约容器,并由合约容器经类反射机制实现Scala合约类的动态编译和加载到内存并初始化;由部署交易请求将返回的合约标识作为调用所述合约的指向,以使合约完成全网部署。4.根据权利要求3所述的方法,其特征在于,所述由合约容器经类反射机制实现Scala合约类的动态编译和加载到内存并初始化包括:定义抽象接口,并让合约类开放其被调用的时机;通过唯一命名机制对合约类进行命名;由动态编译工具类、加载工具类分别对合约类执行动态编译和加载。5.根据权利要求4所述的方法,其特征在于,所述定义抽象接口,并让合约类开放其被调用的时机包括:初始化合约实例,并传入合约执行的上下文;调用合约方法,传入合约数据并返回执行结果。6.一种基于S...

【专利技术属性】
技术研发人员:陈胜蒋步云
申请(专利权)人:北京连琪科技有限公司
类型:发明
国别省市:北京,11

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

1