基于区块链平台的智能合约部署和调用方法及相关设备技术

技术编号:28033958 阅读:28 留言:0更新日期:2021-04-09 23:15
本发明专利技术公开基于区块链平台的智能合约部署和调用方法,应用于区块链领域,用于提高区块链平台上智能合约的执行效率和开发难度。该方法包括:从软件工具包获取Solidity合约部署交易,解析Solidity合约部署交易得到Solidity字节码BIN合约文件和接口描述ABI文件,并将Solidity字节码BIN合约文件翻译成WASM字节码BIN合约文件,然后将Solidity字节码BIN合约文件、WASM字节码BIN合约文件及接口描述ABI文件存储至区块链平台,对智能合约进行调用时,从软件工具包获取合约调用交易,根据合约调用交易对存储在区块链平台中的WASM字节码文件或Solidity字节码BIN合约文件进行执行调用。

【技术实现步骤摘要】
基于区块链平台的智能合约部署和调用方法及相关设备
本专利技术属于区块链领域,尤其涉及基于区块链平台的智能合约部署和调用方法、装置、计算机设备及计算机存储介质。
技术介绍
目前,基于区块链平台的智能合约执行方法主要包括:直接用Solidity智能合约、用WASM智能合约字节码技术或将Solidity智能合约通过中间语言文件转为WASM字节码文件。由于现有的区块链中的大多数智能合约是使用Solidity编写的,因此使用Solidity智能合约的学习成本很低,这点使它成为最广泛的一种使用方式,但是由于Solidity智能合约的自身设计原因导致其执行效率会随着业务越来越复杂而变得越来越低下,且该原因目前无法被克服。而使用WASM智能合约字节码技术,主要是通过使用RUST/C++等开发语言编写智能合约,然后通过对应的编译器编译智能合约为WASM字节码,再将WASM字节码部署到区块链上。这种方式需要利用区块链平台的WASM解释器解释执行WASM字节码从而进行WASM智能合约的调用。由于WASM字节码通常可以通过一些技术手段进行优化,进而得到本文档来自技高网...

【技术保护点】
1.基于区块链平台的智能合约部署方法,其特征在于,包括:/n从软件开发工具包获取Solidity合约部署交易;/n在所述区块链平台中不存在与所述Solidity合约部署交易对应的合约部署地址时,解析所述Solidity合约部署交易,并得到相应的Solidity字节码BIN合约文件和接口描述ABI文件;/n在根据所述Solidity字节码BIN合约文件确认所需部署的智能合约的类型为Solidity合约后,对所述Solidity字节码BIN合约文件进行翻译以得到WASM字节码BIN合约文件;/n将所述Solidity字节码BIN合约文件、所述接口描述ABI文件以及所述WASM字节码BIN合约文件存...

【技术特征摘要】
1.基于区块链平台的智能合约部署方法,其特征在于,包括:
从软件开发工具包获取Solidity合约部署交易;
在所述区块链平台中不存在与所述Solidity合约部署交易对应的合约部署地址时,解析所述Solidity合约部署交易,并得到相应的Solidity字节码BIN合约文件和接口描述ABI文件;
在根据所述Solidity字节码BIN合约文件确认所需部署的智能合约的类型为Solidity合约后,对所述Solidity字节码BIN合约文件进行翻译以得到WASM字节码BIN合约文件;
将所述Solidity字节码BIN合约文件、所述接口描述ABI文件以及所述WASM字节码BIN合约文件存储至所述区块链平台以供调用。


2.根据权利要求1所述的方法,其特征在于,对所述Solidity字节码BIN合约文件进行翻译以得到WASM字节码BIN合约文件,包括:
在Solidity执行指令和WASM执行指令的数据格式相同且功能相同时,将Solidity执行指令翻译成WASM执行指令;
根据所述WASM执行指令构成WASM字节码BIN合约文件;或,
在Solidity执行指令和WASM执行指令的数据格式相同但功能不相同时,在所述区块链平台中对所述Solidity执行指令的操作数栈和内存进行模拟处理以得到模拟操作数栈和模拟内存;
在所述模拟操作数栈和所述模拟内存中对Solidity执行指令进行预执行,得到相应的预执行结果和预执行时的跳转路径;
分析所述预执行结果和所述跳转路径,以从所述模拟操作数栈以及所述模拟内存中获得Solidity执行指令的执行路径;
分析所述执行路径,以得到Solidity执行指令所对应的执行条件;
根据所述执行条件将Solidity执行指令翻译为WASM执行指令;
根据所述WASM执行指令构成所述WASM字节码BIN合约文件;或,
在Solidity执行指令和WASM执行指令的数据格式不互通时,结合所述ABI接口文件获取所述Solidity执行指令的操作数类型;
根据所述操作数类型将Solidity执行指令翻译成WASM执行指令;
根据所述WASM执行指令构成所述WASM字节码BIN合约文件。


3.根据权利要求1所述的方法,其特征在于,对所述Solidity字节码BIN合约文件进行翻译以得到WASM字节码BIN合约文件,包括:
在Solidity执行指令和WASM执行指令之间的内部指令构成不一致时,将所述Solidity执行指令中的call调用指令翻译成适用于所述WASM执行指令中的call调用指令;
根据所述WASM执行指令中的call调用指令,从所述区块链平台调用预定义函数信息,并根据所述WASM执行指令中的call调用指令和所述预定义函数信息构成所述WASM字节码BIN合约文件;所述预定义函数信息为在所述区块链平台的虚拟机内部预先定义的,用于与所述区块链平台交互的函数信息。


4.根据权利要求1-3任意一项所述的方法,其特征在于,对所述Solidity字节码BIN合约文件进行翻译以得到WASM字节码BIN合约文件同时,所述方法还包括:
进行所述WASM字节码BIN合约文件的内存初始化、函数索引信息构建、全局对象构建以及执行引擎构建。


5.根据权利要求1所述的方法,其特征在于,所述将所述Solidity字节码BIN合约文件、所述接口描述ABI文件以及所述WASM字节码BIN合约文件存储至所述区块链平台的步骤包括:
将所述Solidity字节码BIN合约文件、所述接口描述ABI文件以及所述WASM字节码BIN合约文件存储到所述数据库;
在所述区块链平台的数据库中生成与所述WASM字节码BIN合约文件对应的WASM智能合约地址;
将所述WASM字节码BIN合约文件和所述WASM智能合约地址形成一一对应的映射关系并存储在所述区块链平台的内存。


6.基于区块链的智能合约调用方法,其特征在于,包括:
在区块链平台已部署好合约文件的情况下,当需要进行合约文件调用时,从软件开发工具包获取合约调用交易;
在所述区块链平台中存在与所述合约调用交易对应的合约调用地址时,解析所述合约调用交易,并得到相应的接口描述ABI文件、合约调用地址及函数信息;
根据所述合约调用交易在所述区块链平台中查找所述合约调用地址是否存在对应的WASM字节码BIN合约文件;
在未查找到所述WASM字节码BIN合约文件时,从所述区块链平台中提取与所述合约调用地址对应的Solidity字节码BIN合约文件;
当所述区块链平台的压力小于预设压力阈值时,将所述Solidity字节码BIN合约文件翻译成WASM字节码BIN合约文件,并根据所述合约调用交易对所述WASM字节码BIN合约文件进行执行调用;
当所述区块链平台的压力不小于所述预设压力阈值时,根据所述合约调用交易对Solidity字节码BIN合约文件进行执行调用;
将所述Solidity字节码BIN合约文件、所述接口描述ABI文件以及所述WASM字节码BIN合约文件存储至所述区块链平台以供调用。


7.根据权利要求6所述的方法,其特征在于,对所述Solidity字节码BIN合约文件进行翻译以得到WASM字节码BIN合约文件,包括:
在Solidity执行指令和WASM执行指令的数据格式相同且功能相同时,将Solidity执行指令翻译成WASM执行指令;
根据所述WASM执行指令构成所述WASM字节码BIN合约文件;或,
在Solidity执行指令和WASM执行指令的数据格式相同但功能不同时,在所述区块链平台中对所述Solidity执行指令的操作数栈和内存进行模拟处理以得到模拟操作数栈和模拟内存;
在所述模拟操作数栈和所述模拟内存中对Solidity执行指令进行预执行,得到相应的预执行的结果和预执行时的跳转路径;
分析所述预执行的结果和所述跳转路径,以从所述模拟操作数栈以及所述模拟内存中获得Solidity执行指令的执行路径;
分析所述执行路径,以得到Solidity执行指令所对应的执行条件;
根据所述执行条件将Solidity执行指令翻译为WASM执行指令;
根据所有所述WASM执行指令构成所述WASM字节码BIN合约文件;或,
在Solidit...

【专利技术属性】
技术研发人员:邱炜伟李伟黄方蕾张珂杰杨攀
申请(专利权)人:杭州趣链科技有限公司
类型:发明
国别省市:浙江;33

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

1