基于EVM与Wasm虚拟机的多语言智能合约兼容方法及系统技术方案

技术编号:27740981 阅读:69 留言:0更新日期:2021-03-19 13:34
本发明专利技术提供了一种基于EVM与Wasm虚拟机的多语言智能合约兼容方法及系统,包括:底层协议通过预设配置开启协议所支持的虚拟机类型,当虚拟机类型为兼容模式时,则在合约层根据预设规范编写多虚拟机语言合约互调用的代码;在虚拟机支持的相应合约中,通过call方法对除虚拟机支持的相应合约外的目标合约发起调用;在底层链中解析调用参数,得到被调用的目标合约地址和目标合约信息;根据目标合约地址获得目标合约的字节码,根据目标合约字节码判断目标合约的类型;根据目标合约的类型,底层链切换虚拟机类型,执行相应合约,得到执行完后的返回值;对执行完后的返回值进行编码转换,得到发起方合约能够识别的编码类型。

【技术实现步骤摘要】
基于EVM与Wasm虚拟机的多语言智能合约兼容方法及系统
本专利技术涉及区块链
,具体地,涉及基于EVM与Wasm虚拟机的多语言智能合约兼容方法及系统,更为具体地,涉及一种基于EVM与Wasm虚拟机的多语言智能合约兼容方案。
技术介绍
结合区块链技术的行业应用往往以DAPP的形式呈现,而DAPP需要建立在区块链之上。以联盟链的场景为例,合约开发者需要在此联盟链之上建立DAPP应用,现有的绝大部分区块链底层协议只支持EVM或者只支持Wasm的智能合约,合约开发者往往需要学习此联盟链支持的智能合约语言,才能进行后续的DAPP开发,这需要花费一定的语言学习成本,同时也需要了解此联盟链的合约生态工具,而这往往对大部分开发者照成了一定的阻碍,同时也不利于联盟链的灵活使用场景。当此联盟链同时兼容EVM和Wasm虚拟机之后,则此问题迎刃而解,合约开发者无需花费额外的学习成本,从而极大提高合约编码的友好度,同时融合solidity与Wasm合约开发者生态。本专利技术解决了EVM与Wasm合约开发者生态分裂的问题。EVM合约开发者熟悉Solidity语言智能合约,以及Solidity开发组件,而Wasm合约开发者则熟悉C++、Rust等语言的智能合约,以及对应Wasm合约开发组件。由于现有的区块链协议往往只支持EVM或者只支持Wasm,所以很难同时吸引两方开发者在其协议之上进行开发,为其协议完善应用生态。本专利技术打通了Solidity与C++、Rust等Wasm虚拟机智能合约互调用的壁垒,实现不同虚拟机所支持的合约语言可以同时运行在一个区块链底层协议之上,并且以开发者极为友好的方式实现多语言合约相互兼容和调用。克服的难点包括:Solidity代表的EVM智能合约与C++、Rust等Wasm智能合约执行需要不同虚拟机解释器进行运行,难点在于如何自动化完成不同虚拟机之间的切换。如何在实现不同虚拟机多语言合约互调用的功能上,尽可能的降低合约开发者的学习以及迁移成本。本方案对于合约开发者来说,没有额外的学习和适应成本,也并未改变Solidity与C++等合约原生接口,合约开发者可以无缝迁移。专利文献CN111736954A(申请号:202010589506.6)公开了一种多智能合约虚拟机实现方法、多智能合约虚拟机及系统。该多智能合约虚拟机实现方法包括:获取智能合约及与智能合约相关的参数;根据智能合约及与智能合约相关的参数确定智能合约对接的虚拟机控制器;将智能合约输入至与智能合约对接的虚拟机控制器,并监控智能合约的执行状态;编译智能合约,输出与智能合约相应的中间字节码文件;根据中间字节码文件按照预设指令标准生成机器码。
技术实现思路
针对现有技术中的缺陷,本专利技术的目的是提供一种基于EVM与Wasm虚拟机的多语言智能合约兼容方法及系统。根据本专利技术提供的一种基于EVM与Wasm虚拟机的多语言智能合约兼容方法,包括:步骤M1:底层协议通过预设配置开启协议所支持的虚拟机类型,当虚拟机类型为兼容模式时,则在合约层根据预设规范编写多虚拟机语言合约互调用的代码;步骤M2:在虚拟机支持的相应合约中,对除虚拟机支持的相应合约外的目标合约发起调用;步骤M3:在底层链中解析调用参数,得到被调用的目标合约地址和目标合约信息;步骤M4:根据目标合约地址获得目标合约的字节码,根据目标合约字节码判断目标合约的类型;步骤M5:根据目标合约的类型,底层链切换虚拟机类型,执行相应合约,得到执行完后的返回值;步骤M6:对执行完后的返回值进行编码转换,得到发起方合约能够识别的编码类型;所述兼容模式包括同时支持EVM和Wasm虚拟机,并能够实现EVM和Wasm虚拟机所支持的多种不同语言的智能合约互相调用。优选地,所述步骤M1中通过预设配置开启协议所支持的虚拟机类型包括EVM、Wasm和/或兼容模式。优选地,所述步骤M2包括在虚拟机支持的相应合约中,通过Call方法,对除当前虚拟机支持的相应合约外的目标合约发起调用。优选地,所述步骤M3包括:在虚拟机解释器执行智能合约字节码时,当执行到合约互调用的操作码时,将调用参数解析为目标合约所对应的虚拟机解释器能识别的编码方式,得到被调用的目标合约地址和目标合约信息。优选地,所述步骤M6包括:在EVM和Wasm虚拟机解释器执行完不同智能合约互调用操作后,针对执行完得到的返回值通过Json的通用编码方式进行编码转换,得到发起方合约能够识别的编码类型。根据本专利技术提供的一种基于EVM与Wasm虚拟机的多语言智能合约兼容系统,包括:模块M1:底层协议通过预设配置开启协议所支持的虚拟机类型,当虚拟机类型为兼容模式时,则在合约层根据预设规范编写多虚拟机语言合约互调用的代码;模块M2:在虚拟机支持的相应合约中,对除虚拟机支持的相应合约外的目标合约发起调用;模块M3:在底层链中解析调用参数,得到被调用的目标合约地址和目标合约信息;模块M4:根据目标合约地址获得目标合约的字节码,根据目标合约字节码判断目标合约的类型;模块M5:根据目标合约的类型,底层链切换虚拟机类型,执行相应合约,得到执行完后的返回值;模块M6:对执行完后的返回值进行编码转换,得到发起方合约能够识别的编码类型;所述兼容模式包括同时支持EVM和Wasm虚拟机,并能够实现EVM和Wasm虚拟机所支持的多种不同语言的智能合约互相调用。优选地,所述模块M1中通过预设配置开启协议所支持的虚拟机类型包括EVM、Wasm和/或兼容模式。优选地,所述模块M2包括在虚拟机支持的相应合约中,通过Call方法,对除当前虚拟机支持的相应合约外的目标合约发起调用。优选地,所述模块M3包括:在虚拟机解释器执行智能合约字节码时,当执行到合约互调用的操作码时,将调用参数解析为目标合约所对应的虚拟机解释器能识别的编码方式,得到被调用的目标合约地址和目标合约信息。优选地,所述模块M6包括:在EVM和Wasm虚拟机解释器执行完不同智能合约互调用操作后,针对执行完得到的返回值通过Json的通用编码方式进行编码转换,得到发起方合约能够识别的编码类型。与现有技术相比,本专利技术具有如下的有益效果:1、本专利技术通过本设计方案,智能合约开发者无需付出额外的迁移以及学习成本,可以使用各自最为熟悉的合约语言进行合约应用开发,同时能够利用现有的Solidity合约与C++、Rust等Wasm智能合约进行相互调用;2、本专利技术通过Wasm与EVM虚拟机多语言合约互相调用方式设计模块,智能合约开发者可以极为方便的调用其他虚拟机所支持的多语言智能合约;3、本专利技术通过底层链虚拟机解释器切换模块,可以让区块链底层协议搭载多种虚拟机,从而能够让底层链支持多种不同智能合约语言的应用。附图说明通过阅读参照以下附图对非限制性实施例所作的详细描述,本专利技术的其它特征、目的和优点将会变得更明显:图1为基于EVM与Wasm虚拟本文档来自技高网
...

【技术保护点】
1.一种基于EVM与Wasm虚拟机的多语言智能合约兼容方法,其特征在于,包括:/n步骤M1:底层协议通过预设配置开启协议所支持的虚拟机类型,当虚拟机类型为兼容模式时,则在合约层根据预设规范编写多虚拟机语言合约互调用的代码;/n步骤M2:在虚拟机支持的相应合约中,对除虚拟机支持的相应合约外的目标合约发起调用;/n步骤M3:在底层链中解析调用参数,得到被调用的目标合约地址和目标合约信息;/n步骤M4:根据目标合约地址获得目标合约的字节码,根据目标合约字节码判断目标合约的类型;/n步骤M5:根据目标合约的类型,底层链切换虚拟机类型,执行相应合约,得到执行完后的返回值;/n步骤M6:对执行完后的返回值进行编码转换,得到发起方合约能够识别的编码类型;/n所述兼容模式包括同时支持EVM和Wasm虚拟机,并能够实现EVM和Wasm虚拟机所支持的多种不同语言的智能合约互相调用。/n

【技术特征摘要】
1.一种基于EVM与Wasm虚拟机的多语言智能合约兼容方法,其特征在于,包括:
步骤M1:底层协议通过预设配置开启协议所支持的虚拟机类型,当虚拟机类型为兼容模式时,则在合约层根据预设规范编写多虚拟机语言合约互调用的代码;
步骤M2:在虚拟机支持的相应合约中,对除虚拟机支持的相应合约外的目标合约发起调用;
步骤M3:在底层链中解析调用参数,得到被调用的目标合约地址和目标合约信息;
步骤M4:根据目标合约地址获得目标合约的字节码,根据目标合约字节码判断目标合约的类型;
步骤M5:根据目标合约的类型,底层链切换虚拟机类型,执行相应合约,得到执行完后的返回值;
步骤M6:对执行完后的返回值进行编码转换,得到发起方合约能够识别的编码类型;
所述兼容模式包括同时支持EVM和Wasm虚拟机,并能够实现EVM和Wasm虚拟机所支持的多种不同语言的智能合约互相调用。


2.根据权利要求1所述的基于EVM与Wasm虚拟机的多语言智能合约兼容方法,其特征在于,所述步骤M1中通过预设配置开启协议所支持的虚拟机类型包括EVM、Wasm和/或兼容模式。


3.根据权利要求1所述的基于EVM与Wasm虚拟机的多语言智能合约兼容方法,其特征在于,所述步骤M2包括在虚拟机支持的相应合约中,通过Call方法,对除当前虚拟机支持的相应合约外的目标合约发起调用。


4.根据权利要求1所述的基于EVM与Wasm虚拟机的多语言智能合约兼容方法,其特征在于,所述步骤M3包括:在虚拟机解释器执行智能合约字节码时,当执行到合约互调用的操作码时,将调用参数解析为目标合约所对应的虚拟机解释器能识别的编码方式,得到被调用的目标合约地址和目标合约信息。


5.根据权利要求1所述的基于EVM与Wasm虚拟机的多语言智能合约兼容方法,其特征在于,所述步骤M6包括:在EVM和Wasm虚拟机解释器执行完不同智能合约互调用操作后,针对执行完得到的返回值通过Json的通用编码方式进行编码转换,得到发起方合约能够识别的编码类型。

【专利技术属性】
技术研发人员:汤勇
申请(专利权)人:上海万向区块链股份公司
类型:发明
国别省市:上海;31

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

1