一种确定区块链智能合约语言性能的方法及装置与流程

    专利2022-07-08  75


    本发明涉及金融科技(fintech)领域,尤其涉及一种确定区块链智能合约语言性能的方法及装置。



    背景技术:

    随着计算机技术的发展,越来越多的技术(例如:区块链、云计算或大数据)应用在金融领域,传统金融业正在逐步向金融科技转变,大数据技术也不例外,但由于金融、支付行业的安全性、实时性要求,也对大数据技术提出的更高的要求。

    为了测试区块链系统的性能,目前,通过区块链性能基准测试框架,根据交易处理性能确定区块链平台的性能,具体的,将交易上传至区块链性能基准测试框架,得到测试结果,其测试结果用于反映在某种特定硬件环境下区块链系统的性能。

    然而,现有技术中的区块链系统的性能检测还受到区块链底层平台、智能合约语言和虚拟机等多种因素影响,并非针对智能合约语言的性能进行检测,导致智能合约语言性能的检测不准确,因此,先需要一种针对智能合约语言确定其性能的方法,以提高检测智能合约语言性能的准确度。



    技术实现要素:

    本发明实施例提供一种确定区块链智能合约语言性能的方法及装置,用于针对智能合约语言确定其性能,以提高检测智能合约语言性能的准确度。

    第一方面,本发明实施例提供一种确定区块链智能合约语言性能的方法,包括:

    按照设定的编译方式,对第一智能合约进行编译得到第一字节码,所述第一智能合约是使用第一合约语言进行编写的;

    执行所述第一字节码,并统计所述第一字节码在执行过程中所调用的各第一指令以及各第一指令的调用次数;

    针对每个第一指令,根据所述第一指令的开销度量以及所述第一指令的调用次数确定出所述第一指令的开销量;其中,所述第一指令的开销度量是根据可运行在具有计费功能的虚拟机的各样本合约确定的;所述各样本合约是使用第二合约语言编写的;

    根据所述各第一指令的开销量,确定所述第一智能合约的合约语言性能。

    上述技术方案中,根据第一字节码的各第一指令对应的开销度量以及各第一指令调用次数,确定出第一字节码的开销量,通过第一字节码的开销量表征第一智能合约的合约语言性能,实现了针对智能合约语言确定其性能,摆脱了通过区块链底层平台和虚拟机等多种因素对智能合约语言性能影响,提升了确定智能合约语言性能的准确性。

    可选的,所述第一指令的开销度量是根据可运行在具有计费功能的虚拟机的各样本合约确定的,包括:

    针对至少一个样本合约,确定所述样本合约在具有计费功能的虚拟机上执行的样本开销量;并确定所述样本合约在所述编译方式下运行时所调用的各第二指令以及各第二指令的调用次数;根据各样本合约的样本开销量、各样本合约对应的各第二指令以及各第二指令的调用次数,确定各第一指令的开销度量。

    上述技术方案中,针对至少一个样本合约,确定出各第一指令的开销度量,相当于为样本合约编译后对应的字节码中的各指令赋予基准的开销度量,以使智能合约语言根据各指令的基准的开销度量确定合约语言性能,摆脱了通过区块链底层平台和虚拟机等多种因素对智能合约语言性能影响,提升了确定智能合约语言性能的准确性。

    可选的,确定所述样本合约在所述编译方式下运行时所调用的各第二指令以及各第二指令的调用次数,包括:

    若所述样本合约支持所述编译方式,则按照所述编译方式,对所述样本合约进行编译得到第二字节码;统计所述第二字节码在执行过程中所调用的各第二指令以及各第二指令的调用次数。

    可选的,确定所述样本合约在所述编译方式下运行时所调用的各第二指令以及各第二指令的调用次数,包括:

    若所述样本合约不支持所述编译方式,则生成具有所述样本合约的逻辑功能的转换合约;所述转换合约支持所述编译方式;

    对所述转换合约进行编译得到第三字节码;统计所述第三字节码在执行过程中所调用的各第二指令以及各第二指令的调用次数。

    可选的,确定所述样本合约在所述编译方式下运行时所调用的各第二指令以及各第二指令的调用次数,包括:

    若所述样本合约为单一指令的样本合约,则确定所述样本合约按照所述编译方式对应的各第二指令及各第二指令的调用次数。

    上述技术方案中,确定样本合约编译后对应的字节码中的各指令及调用次数,用于确定出字节码中的各指令的开销度量。

    可选的,根据下述公式(1)确定各第一指令的开销度量;

    其中,为各样本合约的样本开销量,为各第一指令的开销度量,为各样本合约对应的各第二指令以及各第二指令的调用次数,b为偏移值。

    可选的,所述第一字节码、所述第二字节码和所述第三字节码为wasmwasm(webassembly,一种可移植的字节码格式)字节码。

    第二方面,本发明实施例提供一种确定区块链智能合约语言性能的装置,包括:

    编译单元,用于按照设定的编译方式,对第一智能合约进行编译得到第一字节码,所述第一智能合约是使用第一合约语言进行编写的;

    执行单元,用于执行所述第一字节码,并统计所述第一字节码在执行过程中所调用的各第一指令以及各第一指令的调用次数;

    处理单元,用于针对每个第一指令,根据所述第一指令的开销度量以及所述第一指令的调用次数确定出所述第一指令的开销量;其中,所述第一指令的开销度量是根据可运行在具有计费功能的虚拟机的各样本合约确定的;所述各样本合约是使用第二合约语言编写的;

    根据所述各第一指令的开销量,确定所述第一智能合约的合约语言性能。

    可选的,所述处理单元具体用于:

    针对至少一个样本合约,确定所述样本合约在具有计费功能的虚拟机上执行的样本开销量;并确定所述样本合约在所述编译方式下运行时所调用的各第二指令以及各第二指令的调用次数;根据各样本合约的样本开销量、各样本合约对应的各第二指令以及各第二指令的调用次数,确定各第一指令的开销度量。

    可选的,所述处理单元具体用于:

    若所述样本合约支持所述编译方式,则按照所述编译方式,对所述样本合约进行编译得到第二字节码;统计所述第二字节码在执行过程中所调用的各第二指令以及各第二指令的调用次数。

    可选的,所述处理单元具体用于:

    若所述样本合约不支持所述编译方式,则生成具有所述样本合约的逻辑功能的转换合约;所述转换合约支持所述编译方式;

    对所述转换合约进行编译得到第三字节码;统计所述第三字节码在执行过程中所调用的各第二指令以及各第二指令的调用次数。

    可选的,所述处理单元具体用于:

    若所述样本合约为单一指令的样本合约,则确定所述样本合约按照所述编译方式对应的各第二指令及各第二指令的调用次数。

    可选的,根据下述公式(1)确定各第一指令的开销度量;

    其中,为各样本合约的样本开销量,为各第一指令的开销度量,为各样本合约对应的各第二指令以及各第二指令的调用次数,b为偏移值。

    可选的,所述第一字节码、所述第二字节码和所述第三字节码为wasm字节码。

    第三方面,本发明实施例还提供一种计算设备,包括:

    存储器,用于存储程序指令;

    处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述确定区块链智能合约语言性能的方法。

    第四方面,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行上述确定区块链智能合约语言性能的方法。

    附图说明

    为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

    图1为本发明实施例提供的一种确定区块链智能合约语言性能的方法的流程示意图;

    图2为本发明实施例提供的一种确定区块链智能合约语言性能的方法的流程示意图;

    图3为本发明实施例提供的一种确定区块链智能合约语言性能的装置的结构示意图。

    具体实施方式

    为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

    现有技术中,为了测试区块链系统的性能,通过区块链性能基准测试工具的适配层连接不同的区块链平台,针对区块链平台,对于不同的区块链平台适配对应的合约语言和sdk(softwaredevelopmentkit,软件开发工具包)以实现交易的发送和收据的处理,然后根据交易处理性能确定区块链平台的性能。例如,区块链性能基准测试工具为caliper,其支持测试的性能指标包括:事务吞吐量、事务延迟、资源消耗等。caliper通过适配层接入不同的区块链平台,如burrow、ethereum、fabric、fiscobcos、iroha、sawtooth等平台,对于不同的区块链平台适配对应的合约语言和sdk以实现交易的发送和收据的处理,然后根据交易处理性能确定区块链平台的性能。

    但是,caliper的性能检测还受到区块链底层平台、合约语言和虚拟机等多种因素影响,其检测方法并非针对合约语言的性能进行检测。

    随着区块链技术的发展,不断有新的合约语言出现,且大部分新开发的合约语言一般选择wasm作为其执行引擎,为了评价这类使用wasm作为执行引擎的合约语言的性能表现,需要一种针对智能合约语言性能的评估方法,以检测智能合约语言的性能。

    图1示例性的示出了本发明实施例提供的一种确定区块链智能合约语言性能的方法的流程示意图,该流程可由确定区块链智能合约语言性能的装置执行。

    如图1所示,该流程具体包括:

    步骤110,按照设定的编译方式,对第一智能合约进行编译得到第一字节码。

    本发明实施例中,第一智能合约是使用第一合约语言进行编写的,例如,第一智能合约为加法合约,第一合约语言为c 语言、jave语言、solidity语言、rust语言等。其中,编译方式可以为emscripten和/或wasi-sdk等编译方式,编译方式也可以包括多种,在此并不作具体限定。

    第一合约语言编写得到第一智能合约后,可以通过预先设定的编译方式,将第一智能合约编译为第一字节码。例如,第一合约语言为c 语言,第一智能合约为c 语言编写的参数a与参数b相加的合约语言,通过emscripten,将第一智能合约编译,得到第一字节码。

    步骤120,执行所述第一字节码,并统计所述第一字节码在执行过程中所调用的各第一指令以及各第一指令的调用次数。

    本发明实施例中,在得到第一字节码之后,使用预设方法(如字节码的解释器)执行第一字节码,并统计出第一字节码的中所调用的各第一指令以及各第一指令的调用次数。

    需要说明的是,在本发明实施例中的第一字节码为wasm字节码,其中,wasm是一个可移植、体积小、加载快并且兼容网络的全新格式,是一种编码方式,可以在现代的网络浏览器中运行,它是一种低级的类汇编语言,具有紧凑的二进制格式,可以接近原生的性能运行,并为如c语言、c 语言、rust语言等合约语言提供一个编译目标,以便c语言、c 语言、rust语言等合约语言可以在网络上运行。

    步骤130,针对每个第一指令,根据所述第一指令的开销度量以及所述第一指令的调用次数确定出所述第一指令的开销量。

    本发明实施例中,第一指令的开销度量是根据可运行在具有计费功能的虚拟机的各样本合约确定的,各样本合约是使用第二合约语言编写的,即用户可以通过第二合约语言编写多个样本合约,然后将样本合约运行在第二合约语言适配的虚拟机中,得到各样本合约的样本开销量,并在上述设定的编译方式下,得到各第二指令的开销度量。

    进一步地,针对至少一个样本合约,确定样本合约在具有计费功能的虚拟机上执行的样本开销量,并确定样本合约在编译方式下运行时所调用的各第二指令以及各第二指令的调用次数,根据各样本合约的样本开销量、各样本合约对应的各第二指令以及各第二指令的调用次数,确定各第一指令的开销度量。

    本发明实施例中,第二指令和第一指令为对应相同的指令,例如,均为wasm字节码中的if指令。样本合约在上述设定的编译方式下,可以得到对应的字节码,对应的字节码为wasm字节码,在得到对应的字节码之后,使用预设方法(如wasm解释器)执行对应的字节码,并统计出对应的字节码的中所调用的各第二指令以及各第二指令的调用次数,然后根据各样本合约的样本开销量、各样本合约对应的各第二指令以及各第二指令的调用次数,确定出各第二指令的开销度量,因第二指令和第一指令为对应相同的指令,所以可以确定出各第一指令的开销度量。

    在得到对应的字节码时,即确定样本合约在设定的编译方式下运行时所调用的各第二指令以及各第二指令的调用次数时,包括以下几种可实现的实施方式:

    第一种可实施方式:

    若样本合约支持编译方式,则按照编译方式,对样本合约进行编译得到第二字节码,统计第二字节码在执行过程中所调用的各第二指令以及各第二指令的调用次数。

    在第一种可实施方式中,样本合约对应的合约语言若可以根据预设的编译方式将样本合约编译为第二字节码(wasm字节码),则直接统计第二字节码在执行过程中所调用的各第二指令以及各第二指令的调用次数。

    第二种可实施方式:

    若样本合约不支持编译方式,则生成具有样本合约的逻辑功能的转换合约;转换合约支持编译方式,对转换合约进行编译得到第三字节码,然后统计第三字节码在执行过程中所调用的各第二指令以及各第二指令的调用次数。

    在第二种可实施方式中,样本合约对应的合约语言若可以根据预设的编译方式无法将样本合约编译为wasm字节码,例如,若第二合约语言为typescript语言,typescript语言可以根据对应适配的具有计费功能的虚拟机得到各合约样本的样本开销量,如根据虚拟机中的计数器确定各合约样本的样本开销量。但typescript语言无法直接将对应的样本合约编译为,因此,通过支持编译wasm字节码的第三合约语言针对各样本合约的逻辑功能得到对应的各转换合约,对各转换合约进行编译得到第三字节码(wasm字节码),然后统计第三字节码在执行过程中所调用的各第二指令以及各第二指令的调用次数。

    第三种可实施方式:

    若所述样本合约为单一指令的样本合约,则确定所述样本合约按照所述编译方式对应的各第二指令及各第二指令的调用次数。

    在第三种可实施方式中,若样本合约为单一指令的样本合约,确定出编译方式对应的各第二指令及各第二指令的调用次数,例如,样本合约为单一的加法指令,确定出对应的wasm字节码,然后统计对应的wasm字节码在执行过程中所调用的各第二指令以及各第二指令的调用次数。

    在本发明实施例中,根据第一指令的开销度量以及第一指令的调用次数确定出第一指令的开销量,进一步地,根据下述公式(1)确定各第一指令的开销度量;

    其中,为各样本合约的样本开销量,为各第一指令的开销度量,为各样本合约对应的各第二指令以及各第二指令的调用次数,b为偏移值。

    例如,针对第j个样本合约,根据下述公式(1)确定其样本开销量;

    其中,其中,gj为第j个样本合约的样本开销量,pi为第j个样本合约中,第i个第二指令的开销度量,ci为第i个第二指令的调用次数,b为偏移值,n为样本合约中指令的总数量。

    为了更好的解释上述技术方案,下面将在具体实例中阐述确定各第一指令的开销度量。

    实例1

    为了便于计算,将偏移值b与各第二指令的开销度量pi结合作为第一矩阵,将各样本合约对应的各第二指令以及各第二指令的调用次数作为第二矩阵,将各样本合约的样本开销量作为第三矩阵,如第一矩阵为w=(p1,p2,…,pn,b)t,第二矩阵为x=(x1,x2,…,xm)t,第三矩阵为y=(g1,g2,…,gm)t,xj=(c1,j,c2,j,…,cn,j,1),其中,m为样本合约的数量,然后使y=xw,计算其损失函数l(w)=(xw-y)t(xw-y),再根据下述公式(3)对损失函数l(w)求导,使导数为0;

    则,xtxw=xty,(xtx)-1xtxw=(xtx)-1xty,w*=(xtx)-1xty,其中,w*为第一矩阵w的解,因此,确定出各第一指令的开销度量。

    例如,样本合约中的wasm指令的数量n为4,样本合约数量为5,其第二矩阵为x为第三矩阵为y为然后根据上述公式(2)得到:因此,b=2。由此根据向量p可以得出,样本合约中的各wasm指令的开销度量。

    步骤140,根据所述各第一指令的开销量,确定所述第一智能合约的合约语言性能。

    本发明实施例中,针对每个第一指令,根据上述实例1得到的第一指令的开销度量以及第一指令的调用次数确定出第一指令的开销量,在得到各第一指令的开销量后,将各第一指令的开销量相加求和,得到第一字节码的开销量,例如,根据下述公式(4)得到第一字节码的开销量;

    其中,cost为第一字节码的开销量,pk为第一字节码中,第k个第二指令的开销度量,ck为第k个第二指令的调用次数,t为第一字节码中第一指令的总数量。

    根据第一字节码的开销量表征第一智能合约的合约语言性能。

    为了更好的解释上述技术方案,图2示例性的示出了一种确定区块链智能合约语言性能的方法的流程示意图,下面将结合图2在具体实例中阐述上述技术方案。

    实例2

    如图2所示,现有智能合约a和智能合约b,其中,智能合约a是根据合约语言a(如c 语言)编写得到的,智能合约b是根据合约语言b(如jave语言)编写得到的,wasm指令的开销度量是根据样本合约通过上述公式(1)确定的,样本合约根据合约语言c(如solidity语言)进行编写的,例如,样本合约通过solidity语言编写得到,然后根据在以太坊虚拟机中运行样本合约,得到各样本合约的样本开销量(如第j个样本合约的样本开销量为5万gas),智能合约a通过设定的编译方式得到wasm字节码a1,智能合约b通过设定的编译方式得到wasm字节码b1,根据上述实例1所述的方法,确定出wasm字节码a1和wasm字节码b1中对应调用的wasm指令以及调用次数,然后再根据上述公式(4),确定出wasm字节码a1的开销量和wasm字节码b1的开销量,根据wasm字节码a1的开销量和wasm字节码b1的开销量确定出合约语言a和合约语言b之间合约语言性能的优劣。

    本发明实施例中,针对至少一个样本合约,确定出各第一指令的开销度量,为样本合约编译后对应的字节码中的各指令赋予基准的开销度量,然后根据第一字节码的各第一指令对应的开销度量以及各第一指令调用次数,确定出第一字节码的开销量,通过第一字节码的开销量表征第一智能合约的合约语言性能,实现了针对智能合约语言确定其性能,摆脱了通过区块链底层平台和虚拟机等多种因素对智能合约语言性能影响,提升了确定智能合约语言性能的准确性。

    基于相同的技术构思,图3示例性的示出了本发明实施例提供的一种确定区块链智能合约语言性能的装置的结构示意图,该装置可以执行确定区块链智能合约语言性能的方法的流程。

    如图3所示,该装置具体包括:

    编译单元310,用于按照设定的编译方式,对第一智能合约进行编译得到第一字节码,所述第一智能合约是使用第一合约语言进行编写的;

    执行单元320,用于执行所述第一字节码,并统计所述第一字节码在执行过程中所调用的各第一指令以及各第一指令的调用次数;

    处理单元330,用于针对每个第一指令,根据所述第一指令的开销度量以及所述第一指令的调用次数确定出所述第一指令的开销量;其中,所述第一指令的开销度量是根据可运行在具有计费功能的虚拟机的各样本合约确定的;所述各样本合约是使用第二合约语言编写的;

    根据所述各第一指令的开销量,确定所述第一智能合约的合约语言性能。

    可选的,所述处理单元330具体用于:

    针对至少一个样本合约,确定所述样本合约在具有计费功能的虚拟机上执行的样本开销量;并确定所述样本合约在所述编译方式下运行时所调用的各第二指令以及各第二指令的调用次数;根据各样本合约的样本开销量、各样本合约对应的各第二指令以及各第二指令的调用次数,确定各第一指令的开销度量。

    可选的,所述处理单元330具体用于:

    若所述样本合约支持所述编译方式,则按照所述编译方式,对所述样本合约进行编译得到第二字节码;统计所述第二字节码在执行过程中所调用的各第二指令以及各第二指令的调用次数。

    可选的,所述处理单元330具体用于:

    若所述样本合约不支持所述编译方式,则生成具有所述样本合约的逻辑功能的转换合约;所述转换合约支持所述编译方式;

    对所述转换合约进行编译得到第三字节码;统计所述第三字节码在执行过程中所调用的各第二指令以及各第二指令的调用次数。

    可选的,所述处理单元330具体用于:

    若所述样本合约为单一指令的样本合约,则确定所述样本合约按照所述编译方式对应的各第二指令及各第二指令的调用次数。

    可选的,根据下述公式(1)确定各第一指令的开销度量;

    其中,为各样本合约的样本开销量,为各第一指令的开销度量,为各样本合约对应的各第二指令以及各第二指令的调用次数,b为偏移值。

    可选的,所述第一字节码、所述第二字节码和所述第三字节码为wasm字节码。

    基于相同的技术构思,本发明实施例还提供一种计算设备,包括:

    存储器,用于存储程序指令;

    处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述确定区块链智能合约语言性能的方法。

    基于相同的技术构思,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行上述确定区块链智能合约语言性能的方法。

    本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

    本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

    这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

    这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

    显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。


    技术特征:

    1.一种确定区块链智能合约语言性能的方法,其特征在于,包括:

    按照设定的编译方式,对第一智能合约进行编译得到第一字节码,所述第一智能合约是使用第一合约语言进行编写的;

    执行所述第一字节码,并统计所述第一字节码在执行过程中所调用的各第一指令以及各第一指令的调用次数;

    针对每个第一指令,根据所述第一指令的开销度量以及所述第一指令的调用次数确定出所述第一指令的开销量;其中,所述第一指令的开销度量是根据可运行在具有计费功能的虚拟机的各样本合约确定的;所述各样本合约是使用第二合约语言编写的;

    根据所述各第一指令的开销量,确定所述第一智能合约的合约语言性能。

    2.如权利要求1所述的方法,其特征在于,所述第一指令的开销度量是根据可运行在具有计费功能的虚拟机的各样本合约确定的,包括:

    针对至少一个样本合约,确定所述样本合约在具有计费功能的虚拟机上执行的样本开销量;并确定所述样本合约在所述编译方式下运行时所调用的各第二指令以及各第二指令的调用次数;根据各样本合约的样本开销量、各样本合约对应的各第二指令以及各第二指令的调用次数,确定各第一指令的开销度量。

    3.如权利要求2所述的方法,其特征在于,确定所述样本合约在所述编译方式下运行时所调用的各第二指令以及各第二指令的调用次数,包括:

    若所述样本合约支持所述编译方式,则按照所述编译方式,对所述样本合约进行编译得到第二字节码;统计所述第二字节码在执行过程中所调用的各第二指令以及各第二指令的调用次数。

    4.如权利要求2所述的方法,其特征在于,确定所述样本合约在所述编译方式下运行时所调用的各第二指令以及各第二指令的调用次数,包括:

    若所述样本合约不支持所述编译方式,则生成具有所述样本合约的逻辑功能的转换合约;所述转换合约支持所述编译方式;

    对所述转换合约进行编译得到第三字节码;统计所述第三字节码在执行过程中所调用的各第二指令以及各第二指令的调用次数。

    5.如权利要求2所述的方法,其特征在于,确定所述样本合约在所述编译方式下运行时所调用的各第二指令以及各第二指令的调用次数,包括:

    若所述样本合约为单一指令的样本合约,则确定所述样本合约按照所述编译方式对应的各第二指令及各第二指令的调用次数。

    6.如权利要求2所述的方法,其特征在于,根据下述公式(1)确定各第一指令的开销度量;

    其中,为各样本合约的样本开销量,为各第一指令的开销度量,为各样本合约对应的各第二指令以及各第二指令的调用次数,b为偏移值。

    7.如权利要求1至6任一项所述的方法,其特征在于,所述第一字节码、所述第二字节码和所述第三字节码为wasm字节码。

    8.一种确定区块链智能合约语言性能的装置,其特征在于,包括:

    编译单元,用于按照设定的编译方式,对第一智能合约进行编译得到第一字节码,所述第一智能合约是使用第一合约语言进行编写的;

    执行单元,用于执行所述第一字节码,并统计所述第一字节码在执行过程中所调用的各第一指令以及各第一指令的调用次数;

    处理单元,用于针对每个第一指令,根据所述第一指令的开销度量以及所述第一指令的调用次数确定出所述第一指令的开销量;其中,所述第一指令的开销度量是根据可运行在具有计费功能的虚拟机的各样本合约确定的;所述各样本合约是使用第二合约语言编写的;

    根据所述各第一指令的开销量,确定所述第一智能合约的合约语言性能。

    9.一种计算设备,其特征在于,包括:

    存储器,用于存储程序指令;

    处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行权利要求1至7任一项所述的方法。

    10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行权利要求1至7任一项所述的方法。

    技术总结
    本发明公开了一种确定区块链智能合约语言性能的方法及装置,包括:按照设定的编译方式,对第一智能合约进行编译得到第一字节码,第一智能合约是使用第一合约语言进行编写的,执行第一字节码,并统计第一字节码在执行过程中所调用的各第一指令以及各第一指令的调用次数,然后针对每个第一指令,根据第一指令的开销度量以及第一指令的调用次数确定出第一指令的开销量,进而确定第一智能合约的合约语言性能。实现了针对智能合约语言确定其性能,摆脱了通过区块链底层平台和虚拟机等多种因素对智能合约语言性能影响,提升了确定智能合约语言性能的准确性。

    技术研发人员:李陈希;白兴强;李辉忠;张开翔;范瑞彬
    受保护的技术使用者:深圳前海微众银行股份有限公司
    技术研发日:2020.12.08
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-23480.html

    最新回复(0)