虚拟机从外部系统读取数据及相关写出数据的方法和装置制造方法及图纸

技术编号:37886882 阅读:9 留言:0更新日期:2023-06-18 11:51
本发明专利技术公开了虚拟机从外部系统读取数据及相关写出数据的方法和装置,涉及计算机技术领域。该方法的一个具体实施方式包括:在虚拟机运行的智能合约内部创建地址缓冲区,以外部数据的存储地址作为智能合约的入参,从外部数据的存储地址将外部数据读取到地址缓冲区,其中,该存储地址为整型类型,能够实现将外部复杂数据类型传递给Webassembly虚拟机执行的智能合约内部。另一具体实施方式包括:以地址缓冲区的数据地址作为虚拟机运行的智能合约的出参,将数据地址传递到外部系统,其中,该出参为整型类型,在外部系统创建外部缓冲区之后,将数据地址中的数据复制到外部缓冲区,可实现将复杂数据类型从Webassembly虚拟机智能合约内部传递给虚拟机外部系统。内部传递给虚拟机外部系统。内部传递给虚拟机外部系统。

【技术实现步骤摘要】
虚拟机从外部系统读取数据及相关写出数据的方法和装置


[0001]本专利技术涉及计算机
,尤其涉及一种虚拟机从外部系统读取数据的方法以及相关写出数据的方法和装置。

技术介绍

[0002]Webassembly不是一种语言,而是一种新的字节码格式,是一种基于堆栈式虚拟机的二进制指令格式,被设计为可以使用高级语言(如C/C++/Rust)直接编译成Webassembly中间字节码,早期Webassembly主要应用领域在web应用,但随着其不断发展,越来越多的项目将其作为智能合约的最终格式,使用支持Webassembly的虚拟机加载运行,Webassembly字节码的具体解析与运行则在核心虚拟机模块中运行。
[0003]基于Webassembly的虚拟机在速度和性能方面都有了显著提升,支持多种高级开发语言,Webassembly虚拟机将Webassembly字节码限制运行在一个安全的沙箱执行环境中,Webassembly虚拟机标准只支持整数和浮点类型运算,由于浮点类型运行是一种近似运算,所以实际运行智能合约的Webassembly虚拟机经过裁剪后只支持整数类型运算。
[0004]在实现本专利技术过程中,专利技术人发现现有技术中至少存在如下问题:
[0005]无法将外部复杂数据类型传递给Webassembly虚拟机执行的智能合约内部,并且不支持从智能合约内部将复杂数据类型传递给外部系统。

技术实现思路

[0006]有鉴于此,本专利技术实施例提供一种虚拟机从外部系统读取数据的方法、数据写出方法和装置,能够实现将外部复杂数据类型传递给Webassembly虚拟机执行的智能合约内部,并可将复杂数据类型从Webassembly虚拟机智能合约内部传递给虚拟机外部系统。
[0007]为实现上述目的,根据本专利技术实施例的一个方面,提供了一种虚拟机从外部系统读取数据的方法。
[0008]一种虚拟机从外部系统读取数据的方法,包括:在虚拟机运行的智能合约内部创建地址缓冲区,所述虚拟机为Webassembly虚拟机;以外部数据的存储地址作为所述智能合约的入参,从所述外部数据的存储地址将所述外部数据读取到所述地址缓冲区,其中,所述存储地址为整型类型。
[0009]可选地,还包括:在所述智能合约内部创建长度缓冲区,所述长度缓冲区用于存放所述地址缓冲区的长度。
[0010]可选地,所述从所述外部数据的存储地址将所述外部数据读取到所述地址缓冲区之前,包括:向所述外部数据所在的外部系统传递偏移量。
[0011]可选地,从所述外部数据的存储地址将所述外部数据读取到所述地址缓冲区,包括:按照根据所述外部数据的初始地址和所述偏移量所确定的所述存储地址,将所述外部数据从所在的外部系统读取到所述地址缓冲区。
[0012]可选地,所述从所述外部数据的存储地址将所述外部数据读取到所述地址缓冲区
之前,还包括:将所述长度缓冲区的地址传递至所述外部数据所在的外部系统,以由所述外部系统根据所述外部系统的缓冲区长度和所述偏移量计算出所述外部数据的剩余待读取长度之后,将所述剩余待读取长度写入所述长度缓冲区的地址中。
[0013]可选地,所述从所述外部数据的存储地址将所述外部数据读取到所述地址缓冲区,包括:将所述地址缓冲区的长度与所述剩余待读取长度比较,在所述地址缓冲区的长度小于或等于所述剩余待读取长度的情况下,从所述外部数据的存储地址读取长度等于所述地址缓冲区的长度的字节内容,并复制到所述地址缓冲区;在所述地址缓冲区的长度大于所述剩余待读取长度的情况下,从所述外部数据的存储地址读取长度等于所述剩余待读取长度的字节内容,并复制到所述地址缓冲区。
[0014]根据本专利技术实施例的另一方面,提供了一种虚拟机向外部系统写出数据的方法。
[0015]一种虚拟机向外部系统写出数据的方法,包括:以地址缓冲区的数据地址作为虚拟机运行的智能合约的出参,将所述数据地址传递到外部系统,所述虚拟机为Webassembly虚拟机;其中,所述出参为整型类型;在所述外部系统创建外部缓冲区之后,将所述数据地址中的数据复制到所述外部缓冲区。
[0016]可选地,还包括:以长度缓冲区的地址作为所述智能合约的出参传递到所述外部系统,所述长度缓冲区存放所述地址缓冲区的长度,所述长度缓冲区的地址用于所述外部系统读取所述地址缓冲区的长度并转换为整型长度,以根据所述整型长度创建所述外部缓冲区。
[0017]根据本专利技术实施例的又一方面,提供了一种虚拟机从外部系统读取数据的装置。
[0018]一种虚拟机从外部系统读取数据的装置,所述虚拟机为Webassembly虚拟机,所述装置包括:缓冲区创建模块,用于在虚拟机运行的智能合约内部创建地址缓冲区;数据读取模块,用于以外部数据的存储地址作为所述智能合约的入参,从所述外部数据的存储地址将所述外部数据读取到所述地址缓冲区,其中,所述存储地址为整型类型。
[0019]可选地,所述缓冲区创建模块还用于:在所述智能合约内部创建长度缓冲区,所述长度缓冲区用于存放所述地址缓冲区的长度。
[0020]可选地,还包括偏移量传递模块,用于:向所述外部数据所在的外部系统传递偏移量。
[0021]可选地,所述数据读取模块还用于:按照根据所述外部数据的初始地址和所述偏移量所确定的所述存储地址,将所述外部数据从所在的外部系统读取到所述地址缓冲区。
[0022]可选地,还包括长度缓冲区地址传递模块,用于将所述长度缓冲区的地址传递至所述外部数据所在的外部系统,以由所述外部系统根据所述外部系统的缓冲区长度和所述偏移量计算出所述外部数据的剩余待读取长度之后,将所述剩余待读取长度写入所述长度缓冲区的地址中。
[0023]可选地,所述数据读取模块还用于:将所述地址缓冲区的长度与所述剩余待读取长度比较,在所述地址缓冲区的长度小于或等于所述剩余待读取长度的情况下,从所述外部数据的存储地址读取长度等于所述地址缓冲区的长度的字节内容,并复制到所述地址缓冲区;在所述地址缓冲区的长度大于所述剩余待读取长度的情况下,从所述外部数据的存储地址读取长度等于所述剩余待读取长度的字节内容,并复制到所述地址缓冲区。
[0024]根据本专利技术实施例的又一方面,提供了一种虚拟机向外部系统写出数据的装置。
[0025]一种虚拟机向外部系统写出数据的装置,所述虚拟机为Webassembly虚拟机,所述装置包括:第一地址传递模块,用于以地址缓冲区的数据地址作为虚拟机运行的智能合约的出参,将所述数据地址传递到外部系统;其中,所述出参为整型类型;数据写出模块,用于在所述外部系统创建外部缓冲区之后,将所述数据地址中的数据复制到所述外部缓冲区。
[0026]可选地,还包括第二地址传递模块,用于:以长度缓冲区的地址作为所述智能合约的出参传递到所述外部系统,所述长度缓冲区存放所述地址缓冲区的长度,所述长度缓冲区的地址用于所述外部系统读取所述地址缓冲区的长度并转换为整型长度,以根据所述整型长度创建所述外部缓冲区。本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种虚拟机从外部系统读取数据的方法,其特征在于,包括:在虚拟机运行的智能合约内部创建地址缓冲区,所述虚拟机为Webassembly虚拟机;以外部数据的存储地址作为所述智能合约的入参,从所述外部数据的存储地址将所述外部数据读取到所述地址缓冲区,其中,所述存储地址为整型类型。2.根据权利要求1所述的方法,其特征在于,还包括:在所述智能合约内部创建长度缓冲区,所述长度缓冲区用于存放所述地址缓冲区的长度。3.根据权利要求2所述的方法,其特征在于,所述从所述外部数据的存储地址将所述外部数据读取到所述地址缓冲区之前,包括:向所述外部数据所在的外部系统传递偏移量。4.根据权利要求3所述的方法,其特征在于,从所述外部数据的存储地址将所述外部数据读取到所述地址缓冲区,包括:按照根据所述外部数据的初始地址和所述偏移量所确定的所述存储地址,将所述外部数据从所在的外部系统读取到所述地址缓冲区。5.根据权利要求3所述的方法,其特征在于,所述从所述外部数据的存储地址将所述外部数据读取到所述地址缓冲区之前,还包括:将所述长度缓冲区的地址传递至所述外部数据所在的外部系统,以由所述外部系统根据所述外部系统的缓冲区长度和所述偏移量计算出所述外部数据的剩余待读取长度之后,将所述剩余待读取长度写入所述长度缓冲区的地址中。6.根据权利要求5所述的方法,其特征在于,所述从所述外部数据的存储地址将所述外部数据读取到所述地址缓冲区,包括:将所述地址缓冲区的长度与所述剩余待读取长度比较,在所述地址缓冲区的长度小于或等于所述剩余待读取长度的情况下,从所述外部数据的存储地址读取长度等于所述地址缓冲区的长度的字节内容,并复制到所述地址缓冲区;在所述地址缓冲区的长度大于所述剩余待读取长度的情况下,从所述外部数据的存储地址读取长度等于所述剩余待读取长度的字节内容,并复制到所述地址缓冲区。7.一种虚拟机向外部系统写出数据的方法,其特征在于,包括:以地址缓冲区的数据地址作为虚拟机运行的智能合约的出参,将所述数据地址传递到外部系统;其中,所述出参为整型类型,所述虚拟机为Webassembly虚拟机;在所述外部系统创建外部缓冲区之后,将所述数据地址中的数据复制到所述外部缓冲区。8.根据权利要求7所述的方法,其特征在于,还包括:以长度缓冲区的地址作为所述智能合约的出参传递到所述外部系统,所述长度缓冲区存放所述地址缓冲区的长度,所述长度缓冲区的地址用于所述外部系统读取所述地址缓冲区的长度并转换为整型长度,以根据所述整型长度创建所述外部缓冲区。9.一种虚拟机从外部系统读取数据的装置,其特征在于,所述虚拟机为Webassembly虚拟机,所述装置包括:缓冲区创建模块,用于在虚拟机运行的智能合约内部创建地址缓冲区;数据读取模块,用于以外部数...

【专利技术属性】
技术研发人员:穆长春狄刚李红岗钱友才刘杰群顾策
申请(专利权)人:中国人民银行数字货币研究所
类型:发明
国别省市:

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

1