CN110750303B - 基于fpga的流水线式指令读取方法及装置 - Google Patents
基于fpga的流水线式指令读取方法及装置 Download PDFInfo
- Publication number
- CN110750303B CN110750303B CN201910913484.1A CN201910913484A CN110750303B CN 110750303 B CN110750303 B CN 110750303B CN 201910913484 A CN201910913484 A CN 201910913484A CN 110750303 B CN110750303 B CN 110750303B
- Authority
- CN
- China
- Prior art keywords
- fpga
- chip
- operation instruction
- data segment
- code program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 58
- 230000008569 process Effects 0.000 claims abstract description 23
- 238000012545 processing Methods 0.000 claims description 7
- 238000004458 analytical method Methods 0.000 claims description 4
- 238000004364 calculation method Methods 0.000 description 22
- 238000005516 engineering process Methods 0.000 description 11
- 238000012795 verification Methods 0.000 description 11
- 238000010586 diagram Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 239000003999 initiator Substances 0.000 description 6
- 230000003993 interaction Effects 0.000 description 6
- 239000004744 fabric Substances 0.000 description 5
- 230000008520 organization Effects 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- RTZKZFJDLAIYFH-UHFFFAOYSA-N Diethyl ether Chemical compound CCOCC RTZKZFJDLAIYFH-UHFFFAOYSA-N 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000002955 isolation Methods 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
本说明书一个或多个实施例提供一种基于FPGA的流水线式指令读取方法及装置,该方法可以包括:FPGA芯片上的片上处理器确定待执行的代码程序,所述片上处理器由所述FPGA芯片加载所属FPGA结构上已部署的电路逻辑配置文件而形成,所述代码程序对应于所述FPGA结构所属的区块链节点收到的交易调用的智能合约;所述片上处理器在按照预设长度依次读取所述代码程序所含数据的过程中,解析出每次读取的数据段中所含非定长操作指令的结束位,以使下次读取的数据段相邻于所述结束位。
Description
技术领域
本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种基于FPGA的流水线式指令读取方法及装置。
背景技术
区块链技术构建在传输网络(例如点对点网络)之上。传输网络中的网络节点利用链式数据结构来验证与存储数据,并采用分布式节点共识算法来生成和更新数据。
目前企业级的区块链平台技术上最大的两个挑战就是隐私和性能,往往这两个挑战很难同时解决。大多解决方案都是通过损失性能换取隐私,或者不大考虑隐私去追求性能。常见的解决隐私问题的加密技术,如同态加密(Homomorphic encryption)和零知识证明(Zero-knowledge proof)等复杂度高,通用性差,而且还可能带来严重的性能损失。
可信执行环境(Trusted Execution Environment,TEE)是另一种解决隐私问题的方式。TEE可以起到硬件中的黑箱作用,在TEE中执行的代码和数据操作***层都无法偷窥,只有代码中预先定义的接口才能对其进行操作。在效率方面,由于TEE的黑箱性质,在TEE中进行运算的是明文数据,而不是同态加密中的复杂密码学运算,计算过程效率没有损失,因此与TEE相结合可以在性能损失较小的前提下很大程度上提升区块链的安全性和隐私性。目前工业界十分关注TEE的方案,几乎所有主流的芯片和软件联盟都有自己的TEE解决方案,包括软件方面的TPM(Trusted Platform Module,可信赖平台模块)以及硬件方面的Intel SGX(Software Guard Extensions,软件保护扩展)、ARM Trustzone(信任区)和AMDPSP(Platform Security Processor,平台安全处理器)。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种基于FPGA的流水线式指令读取方法及装置。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种基于FPGA的流水线式指令读取方法,包括:
FPGA芯片上的片上处理器确定待执行的代码程序,所述片上处理器由所述FPGA芯片加载所属FPGA结构上已部署的电路逻辑配置文件而形成,所述代码程序对应于所述FPGA结构所属的区块链节点收到的交易调用的智能合约;
所述片上处理器在按照预设长度依次读取所述代码程序所含数据的过程中,解析出每次读取的数据段中所含非定长操作指令的结束位,以使下次读取的数据段相邻于所述结束位。
根据本说明书一个或多个实施例的第二方面,提出了一种基于FPGA的流水线式指令读取装置,包括:
确定单元,使FPGA芯片上的片上处理器确定待执行的代码程序,所述片上处理器由所述FPGA芯片加载所属FPGA结构上已部署的电路逻辑配置文件而形成,所述代码程序对应于所述FPGA结构所属的区块链节点收到的交易调用的智能合约;
解析单元,使所述片上处理器在按照预设长度依次读取所述代码程序所含数据的过程中,解析出每次读取的数据段中所含非定长操作指令的结束位,以使下次读取的数据段相邻于所述结束位。
根据本说明书一个或多个实施例的第三方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如第一方面所述的方法。
根据本说明书一个或多个实施例的第四方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面所述方法的步骤。
附图说明
图1是一示例性实施例提供的一种基于FPGA的流水线式指令读取方法的流程图。
图2是一示例性实施例提供的一种区块链节点的结构示意图。
图3是一示例性实施例提供的一种在FPGA芯片上形成功能模块的示意图。
图4是一示例性实施例提供的一种采用流水线的方式读取操作指令的示意图。
图5是一示例性实施例提供的一种基于FPGA的流水线式指令读取装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(PrivateBlockchain)和联盟链(Consortium Blockchain)。此外,还有多种类型的结合,比如私有链+联盟链、联盟链+公有链等不同组合形式。其中去中心化程度最高的是公有链。公有链以比特币、以太坊为代表,加入公有链的参与者可以读取链上的数据记录、参与交易以及竞争新区块的记账权等。而且,各参与者(即节点)可自由加入以及退出网络,并进行相关操作。私有链则相反,该网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。简单来说,私有链可以为一个弱中心化***,参与节点具有严格限制且少。这种类型的区块链更适合于特定机构内部使用。联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织;参与者通过授权加入网络并组成利益相关联盟,共同维护区块链运行。
不论是公有链、私有链还是联盟链,区块链网络中的节点出于隐私保护的目的,均可能通过区块链与TEE(Trusted Execution Environment,可信执行环境)相结合的解决方案,在TEE内执行收到的交易。TEE是基于CPU硬件的安全扩展,且与外部完全隔离的可信执行环境。TEE最早是由Global Platform提出的概念,用于解决移动设备上资源的安全隔离,平行于操作***为应用程序提供可信安全的执行环境。ARM的Trust Zone技术最早实现了真正商用的TEE技术。伴随着互联网的高速发展,安全的需求越来越高,不仅限于移动设备,云端设备,数据中心都对TEE提出了更多的需求。TEE的概念也得到了高速的发展和扩充。现在所说的TEE相比与最初提出的概念已经是更加广义的TEE。例如,服务器芯片厂商Intel,AMD等都先后推出了硬件辅助的TEE并丰富了TEE的概念和特性,在工业界得到了广泛的认可。现在提起的TEE通常更多指这类硬件辅助的TEE技术。
以Intel SGX技术为例,SGX提供了围圈(enclave,也称为飞地),即内存中一个加密的可信执行区域,由CPU保护数据不被窃取。以第一区块链节点采用支持SGX的CPU为例,利用新增的处理器指令,在内存中可以分配一部分区域EPC(Enclave Page Cache,围圈页面缓存或飞地页面缓存),通过CPU内的加密引擎MEE(Memory Encryption Engine)对其中的数据进行加密。EPC中加密的内容只有进入CPU后才会被解密成明文。因此,在SGX中,用户可以不信任操作***、VMM(Virtual Machine Monitor,虚拟机监控器)、甚至BIOS(BasicInput Output System,基本输入输出***),只需要信任CPU便能确保隐私数据不会泄漏。因此,围圈就相当于SGX技术下产生的TEE。
不同于移动端,云端访问需要远程访问,终端用户对硬件平台不可见,因此使用TEE的第一步就是要确认TEE的真实可信。例如,相关技术中提供了针对上述SGX技术的远程证明机制,以用于证明目标设备上的SGX平台与挑战方部署了相同的配置文件。但是,由于相关技术中的TEE技术是以软件或软硬件结合的方式实现,使得即便通过远程证明方式可以在一定程度上表明TEE内所部署的配置文件未经篡改,但是TEE本身所依托的运行环境却无法被验证。例如,在需要实现隐私功能的区块链节点上,TEE内需要配置用于执行智能合约的虚拟机,该虚拟机所执行的指令并非直接执行,而是实际上执行了对应的若干条X86指令(假定目标设备采用X86架构),从而造成了一定程度上的安全性风险。
为此,本说明书提出了一种基于FPGA实现的硬件TEE技术,FPGA通过加载电路逻辑配置文件而实现硬件TEE。由于电路逻辑配置文件的内容可以被预先查看与检验,并且FPGA完全基于电路逻辑配置文件中记载的逻辑而配置运行,因而可以确保FPGA所实现的硬件TEE具有相对更高的安全性。同时,本说明书中通过改进对代码程序的指令读取方式,可以提升针对代码程序的执行效率。
以下结合实施例说明本说明书提供的一种基于FPGA的流水线式指令读取方法,以提升代码程序的执行效率。
图1是一示例性实施例提供的一种基于FPGA的流水线式指令读取方法的流程图。如图1所示,该方法应用于FPGA结构,可以包括以下步骤:
步骤102,FPGA芯片上的片上处理器确定待执行的代码程序,所述片上处理器由所述FPGA芯片加载所属FPGA结构上已部署的电路逻辑配置文件而形成,所述代码程序对应于所述FPGA结构所属的区块链节点收到的交易调用的智能合约。
FPGA芯片上包含若干可编辑的硬件逻辑单元,这些硬件逻辑单元经由电路逻辑配置文件进行配置后,可以实现为相应的功能模块,以用于实现相应的逻辑功能。具体的,该电路逻辑配置文件可以基于比特流的形式被烧录至FPGA结构。例如,上述的片上处理器等即为通过已部署的电路逻辑配置文件而形成,而通过进一步部署相关的其他功能模块,可以将FPGA结构配置为区块链节点上的硬件TEE。由于这些功能模块完全由电路逻辑配置文件进行配置而形成,因而通过检查电路逻辑配置文件即可确定由此配置得到的功能模块所实现的逻辑等各方面的信息,确保功能模块能够按照完全用户的需求而形成和运行。其中,上述的片上处理器用于实现虚拟机逻辑,譬如该虚拟机逻辑可以包括以太坊虚拟机的执行逻辑或者WASM虚拟机的执行逻辑等,本说明书并不对此进行限制。
用户生成电路逻辑配置文件后,如果位于FPGA结构所在地点处,则可以在本地将该电路逻辑配置文件部署至FPGA结构,譬如可以在离线环境下实施部署操作,以确保安全性。或者,在FPGA结构处于线上环境的情况下,用户可以将电路逻辑配置文件远程部署至FPGA结构。
FPGA结构通过解析交易的to字段,可以获得该交易所调用的智能合约的合约地址,并基于该合约地址获取相应智能合约的代码程序。如果该交易由交易发起方经过加密后提交至区块链,那么FPGA结构需要对该交易进行解密,以读取to字段的信息。其中,通过加载上述已部署的电路逻辑配置文件,可以在FPGA芯片上形成解密模块,从而通过该解密模块对交易进行解密。
例如,FPGA结构可以维护有节点私钥,且该节点私钥对应的节点公钥被公开。那么,交易发起方一方面可以获得上述的节点公钥,另一方面可以自行生成一对称密钥,并基于该节点公钥和对称密钥对明文交易内容实施数字信封形式的加密操作:通过对称密钥对明文交易内容进行加密、得到密文交易内容,通过节点公钥对该对称密钥进行加密、得到密文对称密钥,而上述的交易包括密文交易内容和密文对称密钥。相应地,上述的解密模块可以基于节点私钥对交易所含的密文对称密钥进行解密、得到对称密钥,然后解密模块可以基于对称密钥对密文交易内容进行解密、得到明文交易内容,从而在明文交易内容中读取to字段的信息,确定交易所调用的智能合约的合约地址。
如果合约地址对应的代码程序可以部署在区块链节点处,则FPGA结构需要与区块链节点进行数据交互,比如向区块链节点发送合约地址,并接收区块链节点返回的代码程序。如果合约地址对应的代码程序部署在FPGA结构的本地空间,则相比于与区块链节点进行交互,FPGA结构可以从本地空间获取代码程序,以节省资源效率、缩短等待时长。其中,本地空间可以包括FPGA芯片上形成的片上存储空间,或者FPGA芯片之外的外部存储空间,比如该外部存储空间可以包括插接在FPGA结构上的外接DDR等。
步骤104,所述片上处理器在按照预设长度依次读取所述代码程序所含数据的过程中,解析出每次读取的数据段中所含非定长操作指令的结束位,以使下次读取的数据段相邻于所述结束位。
片上处理器每次对代码程序实施读取操作时,始终读取相同长度(即上述的预设长度)的数据段,使得片上处理器可以提升数据读取效率。例如,片上处理器可以在每个时钟周期读取一个数据段,并针对所读取的数据段中包含的操作指令实现流水线式的处理操作,从而尽可能地在每一时钟周期执行一个数据段所含的一条操作指令。
由于代码程序所含的操作指令并非固定长度(即非定长),使得片上处理器无法仅基于上述的预设长度来读取数据段,否则可能导致操作指令被截断。例如,首条操作指令的长度为3B、第二条操作指令的长度为B、第三条操作指令的长度为2B,如果上述的预设长度为2B,则无法完整地截取首条操作指令,因而上述的预设长度应当不小于代码程序中单条操作指令的最大长度,以确保每次读取的数据段必然可以完整地包含一条操作指令;以及,假定单条操作指令的最大长度为5B,按照预设长度为5B读取数据段时,第一次读取的数据段不仅包含了首条操作指令,还包含了第二条操作指令和第三条操作指令的一部分,如果后续直接在第一次读取的数据段之后实施第二次数据段读取操作,则无法读取到第二条操作指令、无法完整地读取到第三条操作指令,从而无法正确的执行代码程序。
因此,片上处理器通过对每次读取的数据段进行解析,确定出所含操作指令的结束位,可使下次读取的数据段与该结束位相邻、而非与上次读取的数据段相邻。例如在上述的示例中,虽然第一次读取了5B长度的数据段,但是可以解析确定首条操作指令的长度为3B,那么第二次读取数据段时可以确保从首条操作指令之后开始、向后读取长度为5B的数据段,以确保所读取的数据段包含第二条操作指令;类似地,通过对第二次读取的数据段进行解析确定出第二条操作指令的长度为B,第三次读取数据段时可以确保从第二条操作指令之后开始、向后读取长度为5B的数据段,以确保所读取的数据段包含第三条操作指令,以此类推。可见,基于上述方案可以在操作指令具有非固定长度的情况下,确保片上处理器每次都可以按照固定的预设长度正确地读取数据段,以提升对操作指令的读取效率、加快对代码程序的执行效率。
代码程序所含的每条操作指令均包含操作码,该操作码指示了所需执行的操作类型。进一步的,部分操作指令可以包含操作数,即这些操作指令包含相关联的操作码和操作数,操作数作为相应操作码执行时的参数;其中,操作指令所含的操作数可以为一个或多个,通常为1个或2个。可见,由于操作指令可能包含或不包含操作数、所含操作数的数量不固定,导致不同操作指令的长度不固定,从而形成了上述的非定长操作指令。此外,还存在其他因素可能导致操作指令的长度非固定。例如,在智能合约所采用的字节码中,每个操作数的长度通常是固定的,譬如基于不同数值类型可以为4B或8B。但是,如果操作数为经过编码的编码后操作数,譬如wasm字节码程序中通常采用LEB(Little-Endian Base)编码等,则编码后操作数的长度会发生变化,通常为2B或4B,最大可能为5B。
每条操作指令所含操作码的长度固定,譬如字节码中每个操作码的长度为1B。片上处理器读取数据段时,首个数据段必然从首条操作指令的起始地址开始,并且由于操作码的长度固定,使得片上处理器可以解析出首次读取的数据段中所含非定长操作指令的操作码,并根据解析结果确定该操作码是否存在对应的操作数、所对应的操作数的数量;其中,片上处理器在基于操作码确定非定长操作指令包含操作数的情况下,根据所含操作数的数量和每一操作数的长度,确定最后一个操作数的末位,以作为非定长操作指令的结束位;以及,片上处理器在基于操作码确定非定长操作指令不包含操作数的情况下,将该操作码的末位作为非定长操作指令的结束位。然后,片上处理器可以基于上述方式确定出的结束位,确保下次读取的数据段必然从第二条操作指令的起始地址开始,以确保片上处理器可以成功解析第二条操作指令的操作码,并根据解析结果确定该操作码是否存在对应的操作数、所对应的操作数的数量,进而确定出第二条操作指令的结束位;以此类推。
图2是一示例性实施例提供的一种区块链节点的结构示意图。基于本说明书的技术方案,可以在区块链节点上添加FPGA结构以实现硬件TEE,譬如该FPGA结构可以为如图2所示的FPGA板卡。FPGA板卡可以通过PCIE接口连接至区块链节点上,以实现FPGA板卡与区块链节点之间的数据交互。FPGA板卡可以包括FPGA芯片、Flash芯片和密管芯片等结构;当然,在一些实施例中除了包含FPGA芯片之外,可能仅包含剩余的Flash芯片和密管芯片等中的部分结构,或者可能包含更多结构,此处仅用于举例。
在初始阶段,FPGA芯片上并未烧录用户定义的任何逻辑,相当于FPGA芯片处于空白状态。用户可以通过向FPGA芯片上烧录电路逻辑配置文件,以在FPGA芯片上形成相应的功能或逻辑。在首次烧录电路逻辑配置文件时,FPGA板卡不具有安全防护的能力,因而通常需要外部提供安全环境,比如用户可以在离线环境下实施对电路逻辑配置文件的烧录以实现物理安全隔离,而非在线上实施远程烧录。
针对用户所需实现的功能或逻辑,可以通过FPGA硬件语言形成相应的逻辑代码,并进而对该逻辑代码进行镜像化处理,即可得到上述的电路逻辑配置文件。在烧录至FPGA板卡之前,用户可以针对上述的逻辑代码进行检查。尤其是,当同时涉及到多个用户时,多个用户可以分别对上述的逻辑代码进行检查,以确保FPGA板卡最终能够满足所有用户的需求,防止出现安全性风险、逻辑错误、欺诈等异常问题。
在确定代码无误后,用户可以在上述的离线环境下,将电路逻辑配置文件烧录至FPGA板卡上。具体的,电路逻辑配置文件被从区块链节点传入FPGA板卡,进而部署至如图2所示的Flash芯片中,使得即便FPGA板卡发生掉电,Flash芯片仍然能够保存上述的电路逻辑配置文件。
图3是一示例性实施例提供的一种在FPGA芯片上形成功能模块的示意图。通过将Flash芯片中所部署的电路逻辑配置文件加载至FPGA芯片,可以对FPGA芯片所含的硬件逻辑单元进行配置,从而在FPGA芯片上形成相应的功能模块,譬如所形成的功能模块可以包括如图3所示的片上缓存模块、明文计算模块、密钥协商模块、解密验签模块、加解密模块等。同时,电路逻辑配置文件还可以用于向FPGA板卡传输需要存储的信息,比如可以将预置证书存储于FPGA芯片上、将认证根密钥存储于密管芯片中(认证根密钥也可以存储于FPGA芯片上)等。
基于FPGA芯片上所形成的密钥协商模块,以及部署于FPGA板卡上的认证根密钥,使得FPGA板卡可以与用户实现远程的密钥协商,该密钥协商过程可以采用相关技术中的任意算法或标准来实现,本说明书并不对此进行限制。举例而言,密钥协商过程可以包括:用户可以在本地的客户端生成一密钥Ka-1、密钥协商模块可以在本地生成一密钥Kb-1,且客户端可以基于密钥Ka-1计算得到密钥协商信息Ka-2、密钥协商模块可以基于密钥Kb-1计算得到密钥协商信息Kb-2,然后客户端将密钥协商信息Ka-2发送至密钥协商模块、密钥协商模块将密钥协商信息Kb-2发送至客户端,使得客户端可以基于密钥Ka-1与密钥协商信息Kb-2生成一秘密值,而密钥协商模块可以基于密钥Kb-1与密钥协商信息Ka-2生成相同的秘密值,最后由客户端、密钥协商模块分别基于密钥导出函数从该相同的秘密值导出相同的配置文件部署密钥,该配置文件部署密钥可以存在FPGA芯片或密管芯片。在上述过程中,虽然密钥协商信息Ka-2、密钥协商信息Kb-2是经由区块链节点在客户端与密钥协商模块之间传输,但是由于密钥Ka-1由客户端掌握、密钥Kb-1由密钥协商模块掌握,因而可以确保区块链节点无法获知最终得到的秘密值和配置文件部署密钥,避免可能造成的安全性风险。
除了配置文件部署密钥之外,秘密值还用于导出业务秘密部署密钥;例如,秘密值可以导出32位数值,可以将前16位作为配置文件部署密钥、后16位作为业务秘密部署密钥。用户可以通过业务秘密部署密钥向FPGA板卡部署业务密钥,譬如该业务密钥可以包括节点私钥和业务根密钥。例如,用户可以在客户端上采用业务秘密部署密钥对节点私钥或业务根密钥进行签名、加密并发送至FPGA板卡,使得FPGA板卡通过解密验签模块进行解密、验签后,对得到的节点私钥或业务根密钥进行部署。
基于部署的节点密钥、业务根密钥和FPGA芯片上的加解密模块、明文计算模块,使得FPGA板卡可以实现为区块链节点上的TEE,以满足隐私需求。例如,当区块链节点收到一笔交易时,如果该交易为明文交易,区块链节点可以直接处理该明文交易,如果该交易为隐私交易,区块链节点将该隐私交易传入FPGA板卡进行处理。
明文交易的交易内容为明文形式,并且交易执行后所产生的合约状态等同样采用明文形式进行存储。隐私交易的交易内容为密文形式,由交易发起方对明文交易内容进行加密而得到,且交易执行后产生的合约状态等需要采用密文形式进行存储,从而确保交易隐私保护。例如,交易发起方可以随机或基于其他方式生成一对称密钥,同样上述的业务私钥对应的业务公钥被公开,那么交易发起方可以基于该对称密钥和业务公钥对明文交易内容进行数字信封加密:交易发起方通过对称密钥加密明文交易内容,并通过业务公钥对该对称密钥进行加密,得到的两部分内容均被包含于上述的隐私交易中;换言之,隐私交易中包含两部分内容:采用对称密钥加密的明文交易内容、采用业务公钥加密的对称密钥。
因此,FPGA板卡在收到区块链节点传入的隐私交易后,可由加解密模块通过业务私钥对采用业务公钥加密的对称密钥进行解密、得到对称密钥,然后由加解密模块通过对称密钥对采用对称密钥加密的明文交易内容进行解密、得到明文交易内容。隐私交易可以用于部署智能合约,那么明文交易内容的data字段可以包含待部署的智能合约的合约代码;或者,隐私交易可以用于调用智能合约,那么明文交易内容的to字段可以包含被调用的智能合约的合约地址,而FPGA板卡可以基于该合约地址调取相应的合约代码。
片上缓存模块可以用于对合约代码和/或合约代码所涉及的合约状态进行缓存。在一些情况中,FPGA板卡可以存在外接DDR,可以将合约代码和/或合约代码所涉及的合约状态存储至外接DDR。当然,也可以将合约代码和/或合约代码所涉及的合约状态存储至区块链节点处。相对而言,外接DDR的存储空间往往大于甚至远大于片上缓存模块的存储空间,因而外接DDR可以有助于实现更多数据的缓存。当然,FPGA板卡上可以同时包含片上缓存模块和外接DDR,例如可以将热度相对更高的合约代码缓存于片上缓存模块,而将热度相对更低的合约代码维护于外接DDR中。以及,相比于区块链节点而言,片上缓存模块和外接DDR可以认为是FPGA板卡的本地空间,与本地空间进行数据交互所消耗的资源量和时长远小于与区块链节点之间的数据交互过程,有助于提升智能合约的执行效率。
FPGA芯片上形成的明文计算模块用于实现相关技术中的虚拟机逻辑,即明文计算模块相当于FPGA板卡上的“硬件虚拟机”。因此,基于上述明文交易内容确定出合约代码后,可以将该合约代码传入明文计算模块中,以由该明文计算模块执行该合约代码。该明文计算模块相当于本说明书中在FPGA芯片上形成的片上处理器。
明文计算模块执行合约代码的过程,可以分解为读取并执行合约代码所含的各条操作指令的过程。例如,图4是一示例性实施例提供的一种采用流水线的方式读取操作指令的示意图。如图4所示,假定合约代码的代码程序包括若干条操作指令,第一条操作指令包括操作码P1和操作数Q1,第二条操作指令包括操作码P2和操作数Q21、Q22,第三条操作指令包括操作码P3和操作数Q31、Q32,第四条操作指令包括操作码P4,第五条操作指令包括操作码P5等。假定代码程序为wasm字节码程序,那么每一操作码的长度为1B,每个操作数均采用LEB编码、长度通常为2B或4B且最大不超过5B,同时每条操作指令最多包含2个操作数。据此,可以确定本实施例中的每条操作指令最多包含1个操作码和2个操作数,且每条操作指令的长度最大为1+2×5=11B,即88b。
因此,明文计算模块在读取操作指令的过程中,可以设定在每个时钟周期实施一次读取操作,并且每次读取长度为88b的数据段。例如图4所示,明文计算模块在第一个时钟周期C1读取长度为88b的数据段,该数据段由于是首个数据段,因而该数据段必然以一个操作码开始,使得明文计算模块可以直接读取该数据段的第一个Byte的数据即操作码P1,并解析确定出该操作码P1对应的操作数。明文计算模块基于解析结果可以确定:操作码P1存在1个操作数即上述的Q1,且该操作数的长度为2B;以及,明文计算模块可以据此确定出时钟周期C1读取的数据段所含的操作指令的结束位,进而在第二个时钟周期C2中,明文计算模块可以从该结束位的下一位开始读取长度为88b的数据段。
由于准确地分析出了时钟周期C1内读取的数据段中的结束位,使得明文计算模块在时钟周期C2读取的数据段必然以第二条操作指令的操作码开始。因此,明文计算模块可以通过类似上述方式,对时钟周期C2读取的数据段进行分析,确定出该数据段所含的操作码P2存在两个长度为2B的操作数,即上述的操作数Q21、Q22,由此确定出时钟周期C2读取的数据段所含的操作指令的结束位,进而在第三个时钟周期C3中,明文计算模块可以从该结束位的下一位开始读取长度为88b的数据段。
可见,由于明文计算模块可以准确分析出所读取的数据段中包含的操作指令的结束位,使得每个时钟周期内均可以按照固定长度依次截取代码程序中的数据段,有助于提升对代码程序的读取效率,加快对智能合约的执行速度。
基于一些原因,用户可能希望对FPGA板卡上部署的电路逻辑配置文件进行版本更新,比如该电路逻辑配置文件所含的认证根密钥可能被风险用户获知、再比如用户希望对FPGA板卡上部署的功能模块进行升级等,本说明书并不对此进行限制。为了便于区分,可以将上述过程中已部署的电路逻辑配置文件称之为旧版电路逻辑配置文件,而将需要部署的电路逻辑配置文件称之为新版电路逻辑配置文件。
与旧版电路逻辑配置文件相类似的,用户可以通过编写代码、镜像化等过程生成新版电路逻辑配置文件。进一步的,用户可以通过自身持有的私钥对新版电路逻辑配置文件进行签名,然后通过上文协商出的配置文件部署密钥对签名后的新版电路逻辑配置文件进行加密,得到加密后新版电路逻辑配置文件。在一些情况下,可能同时存在多名用户,那么旧版电路逻辑配置文件需要将这些用户对应的预置证书均部署至FPGA板卡中,且这些用户需要分别采用自身持有的私钥对新版电路逻辑配置文件进行签名。
用户可以通过客户端远程将加密后新版电路逻辑配置文件发送至区块链节点,并由区块链节点进一步将其传入FPGA板卡。前述过程中在FPGA芯片上形成的解密验签模块位于PCIE接口与Flash芯片之间的传输通路上,使得加密后新版电路逻辑配置文件必然需要优先经过解密验签模块的成功处理后,才能够被传入Flash芯片以实现可信更新,无法绕过解密验签的过程而直接对Flash芯片进行更新。
解密验签模块在收到加密后新版电路逻辑配置文件后,首先通过FPGA板卡上部署的配置文件部署密钥进行解密,如果解密成功则解密验签模块进一步基于FPGA芯片上部署的预置证书,对解密后的新版电路逻辑配置文件进行签名验证。如果解密失败或者签名验证未通过,则说明收到的文件并非来自上述用户或者遭到篡改,解密验签模块将触发终止本次的更新操作;而在解密成功且验签通过的情况下,可以确定得到的新版电路逻辑配置文件来自上述用户且传输过程中未遭到篡改,可以将该新版电路逻辑配置文件进一步传输至Flash芯片,以针对Flash芯片中的旧版电路逻辑配置文件进行更新部署。
新版电路逻辑配置文件被加载至FPGA芯片后,同样可以在该FPGA芯片上形成诸如上述的明文计算模块、片上缓存模块、密钥协商模块、加解密模块、解密验签模块,以及向FPGA芯片存入预置证书、向密管芯片存入认证根密钥等信息。其中,所形成的明文计算模块、片上缓存模块、密钥协商模块、加解密模块、解密验签模块等,所实现的功能逻辑可以发生变化和升级,所存入部署的预置证书、认证根密钥等信息也可能区别于更新前的信息。那么,FPGA板卡可以基于更新后的密钥协商模块、认证根密钥等,与用户进行远程协商得到新的配置文件部署密钥,该配置文件部署密钥可以被用于下一次的可新更新过程。类似地,可以据此不断实现针对FPGA板卡的可信更新操作。
在完成更新部署后,FPGA板卡可以针对新版电路逻辑配置文件生成认证结果。例如,上述的密钥协商模块可以通过诸如sm3算法或其他算法对新版电路逻辑配置文件的哈希值、基于新版电路逻辑配置文件协商得到的配置文件部署密钥的哈希值进行计算,得到的计算结果可以被作为上述的认证结果,并由密钥协商模块将该认证结果发送至用户。相应地,用户可以在客户端上基于所维护的新版电路逻辑配置文件和据此协商的配置文件部署密钥对认证结果进行验证,如果验证成功则表明新版电路逻辑配置文件在FPGA板卡上成功部署,且用户与FPGA板卡之间据此成功协商得到了一致的配置文件部署密钥,从而确认成功完成了针对电路逻辑配置文件的更新部署。
图5是一示例性实施例提供的一种基于FPGA的流水线式指令读取装置的示意结构图。请参考图5,在软件实施方式中,该终端交互装置可以包括:
确定单元501,使FPGA芯片上的片上处理器确定待执行的代码程序,所述片上处理器由所述FPGA芯片加载所属FPGA结构上已部署的电路逻辑配置文件而形成,所述代码程序对应于所述FPGA结构所属的区块链节点收到的交易调用的智能合约;
解析单元502,使所述片上处理器在按照预设长度依次读取所述代码程序所含数据的过程中,解析出每次读取的数据段中所含非定长操作指令的结束位,以使下次读取的数据段相邻于所述结束位。
可选的,所述预设长度不小于所述代码程序中单条操作指令的最大长度。
可选的,所述解析单元502具体用于:
使所述片上处理器解析出每次读取的数据段中所含非定长操作指令的操作码;
使所述片上处理器在基于所述操作码确定所述非定长操作指令包含操作数的情况下,根据所含操作数的数量和每一操作数的长度,确定最后一个操作数的末位,以作为所述非定长操作指令的结束位;
使所述片上处理器在基于所述操作码确定所述非定长操作指令不包含操作数的情况下,将所述操作码的末位作为所述非定长操作指令的结束位。
可选的,所述操作数为经过LEB编码的编码后操作数。
可选的,所述片上处理器读取所述代码程序所含数据,包括:
所述片上处理器按照每个时钟周期读取一次的频率,依次读取所述代码程序所含数据。
可选的,所述代码程序包括字节码程序。
可选的,所述字节码程序包括wasm字节码程序。
上述实施例阐明的***、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。
Claims (10)
1.一种基于FPGA的流水线式指令读取方法,包括:
FPGA芯片上的片上处理器确定待执行的代码程序,所述片上处理器由所述FPGA芯片加载所属FPGA结构上已部署的电路逻辑配置文件而形成,所述代码程序对应于所述FPGA结构所属的区块链节点收到的交易调用的智能合约;
所述片上处理器在按照预设长度依次读取所述代码程序所含数据的过程中,解析出每次读取的数据段中所含非定长操作指令的结束位,以使下次读取的数据段相邻于所述结束位。
2.根据权利要求1所述的方法,所述预设长度不小于所述代码程序中单条操作指令的最大长度。
3.根据权利要求1所述的方法,所述片上处理器解析出每次读取的数据段中所含非定长操作指令的结束位,包括:
所述片上处理器解析出每次读取的数据段中所含非定长操作指令的操作码;
所述片上处理器在基于所述操作码确定所述非定长操作指令包含操作数的情况下,根据所含操作数的数量和每一操作数的长度,确定最后一个操作数的末位,以作为所述非定长操作指令的结束位;
所述片上处理器在基于所述操作码确定所述非定长操作指令不包含操作数的情况下,将所述操作码的末位作为所述非定长操作指令的结束位。
4.根据权利要求3所述的方法,所述操作数为经过LEB编码的编码后操作数。
5.根据权利要求1所述的方法,所述片上处理器读取所述代码程序所含数据,包括:
所述片上处理器按照每个时钟周期读取一次的频率,依次读取所述代码程序所含数据。
6.根据权利要求1所述的方法,所述代码程序包括字节码程序。
7.根据权利要求6所述的方法,所述字节码程序包括wasm字节码程序。
8.一种基于FPGA的流水线式指令读取装置,包括:
确定单元,使FPGA芯片上的片上处理器确定待执行的代码程序,所述片上处理器由所述FPGA芯片加载所属FPGA结构上已部署的电路逻辑配置文件而形成,所述代码程序对应于所述FPGA结构所属的区块链节点收到的交易调用的智能合约;
解析单元,使所述片上处理器在按照预设长度依次读取所述代码程序所含数据的过程中,解析出每次读取的数据段中所含非定长操作指令的结束位,以使下次读取的数据段相邻于所述结束位。
9.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-8中任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1-8中任一项所述方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910913484.1A CN110750303B (zh) | 2019-09-25 | 2019-09-25 | 基于fpga的流水线式指令读取方法及装置 |
PCT/CN2020/098522 WO2021057141A1 (zh) | 2019-09-25 | 2020-06-28 | 基于fpga的流水线式指令读取方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910913484.1A CN110750303B (zh) | 2019-09-25 | 2019-09-25 | 基于fpga的流水线式指令读取方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110750303A CN110750303A (zh) | 2020-02-04 |
CN110750303B true CN110750303B (zh) | 2020-10-20 |
Family
ID=69277143
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910913484.1A Active CN110750303B (zh) | 2019-09-25 | 2019-09-25 | 基于fpga的流水线式指令读取方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN110750303B (zh) |
WO (1) | WO2021057141A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110750303B (zh) * | 2019-09-25 | 2020-10-20 | 支付宝(杭州)信息技术有限公司 | 基于fpga的流水线式指令读取方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101268440A (zh) * | 2005-07-29 | 2008-09-17 | 高通股份有限公司 | 具有固定数量的可变长度指令的指令高速缓存器 |
CN102567528A (zh) * | 2011-12-29 | 2012-07-11 | 东软集团股份有限公司 | 一种读取海量数据的方法及装置 |
CN108513669A (zh) * | 2017-12-29 | 2018-09-07 | 深圳前海达闼云端智能科技有限公司 | 基于区块链的众筹信息处理方法、装置、存储介质及电子设备 |
CN109559227A (zh) * | 2018-11-29 | 2019-04-02 | 咪咕文化科技有限公司 | 一种跨区块链网络的交易方法、装置及存储介质 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW357318B (en) * | 1997-03-18 | 1999-05-01 | Ind Tech Res Inst | Branching forecast and reading device for unspecified command length extra-purity pipeline processor |
GB2376098B (en) * | 2001-05-31 | 2004-11-24 | Advanced Risc Mach Ltd | Unhandled operation handling in multiple instruction set systems |
US7676659B2 (en) * | 2007-04-04 | 2010-03-09 | Qualcomm Incorporated | System, method and software to preload instructions from a variable-length instruction set with proper pre-decoding |
CN101609392B (zh) * | 2008-06-16 | 2012-07-04 | 群联电子股份有限公司 | 数据串传送分派方法、***及其控制器 |
CN102866982A (zh) * | 2012-09-14 | 2013-01-09 | 复旦大学 | 基于fpga的8位复杂指令集中央处理器 |
US20190034917A1 (en) * | 2017-12-29 | 2019-01-31 | Intel Corporation | Tracking an Electronic Wallet Using Radio Frequency Identification (RFID) |
CN111898156B (zh) * | 2019-01-31 | 2024-04-16 | 创新先进技术有限公司 | 区块链中实现合约调用的方法及节点、存储介质 |
CN109886682B (zh) * | 2019-01-31 | 2020-10-23 | 创新先进技术有限公司 | 区块链中实现合约调用的方法及节点、存储介质 |
CN109949156B (zh) * | 2019-02-28 | 2024-03-01 | 矩阵元技术(深圳)有限公司 | 一种区块链合约的数据处理方法及服务器 |
CN110750303B (zh) * | 2019-09-25 | 2020-10-20 | 支付宝(杭州)信息技术有限公司 | 基于fpga的流水线式指令读取方法及装置 |
-
2019
- 2019-09-25 CN CN201910913484.1A patent/CN110750303B/zh active Active
-
2020
- 2020-06-28 WO PCT/CN2020/098522 patent/WO2021057141A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101268440A (zh) * | 2005-07-29 | 2008-09-17 | 高通股份有限公司 | 具有固定数量的可变长度指令的指令高速缓存器 |
CN102567528A (zh) * | 2011-12-29 | 2012-07-11 | 东软集团股份有限公司 | 一种读取海量数据的方法及装置 |
CN108513669A (zh) * | 2017-12-29 | 2018-09-07 | 深圳前海达闼云端智能科技有限公司 | 基于区块链的众筹信息处理方法、装置、存储介质及电子设备 |
CN109559227A (zh) * | 2018-11-29 | 2019-04-02 | 咪咕文化科技有限公司 | 一种跨区块链网络的交易方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110750303A (zh) | 2020-02-04 |
WO2021057141A1 (zh) | 2021-04-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11048825B2 (en) | Managing a smart contract on a blockchain | |
CN110992027B (zh) | 在区块链中实现隐私保护的高效交易方法及装置 | |
CN113438068B (zh) | 基于区块高度实现动态加密的方法及装置 | |
CN110690963B (zh) | 基于fpga的密钥协商方法及装置 | |
CN110750329B (zh) | 基于fpga实现虚拟机运算的方法及装置 | |
CN110263544B (zh) | 结合交易类型和判断条件的收据存储方法和节点 | |
CN110750488B (zh) | 在fpga中实现外部调用的方法及装置 | |
CN110245947B (zh) | 结合交易与用户类型的条件限制的收据存储方法和节点 | |
CN110716728B (zh) | Fpga逻辑的可信更新方法及装置 | |
CN110264192B (zh) | 基于交易类型的收据存储方法和节点 | |
CN110717203B (zh) | 基于fpga实现隐私区块链的方法及装置 | |
CN110704368B (zh) | 基于fpga的安全智能合约处理器的高效运算方法及装置 | |
CN110738567B (zh) | 基于fpga的安全智能合约处理器的交易处理方法及装置 | |
CN110716724B (zh) | 基于fpga实现隐私区块链的方法及装置 | |
CN110751555B (zh) | 基于fpga实现合约调用的方法及装置 | |
CN110688341B (zh) | 在fpga上实现高效合约调用的方法及装置 | |
CN110750303B (zh) | 基于fpga的流水线式指令读取方法及装置 | |
CN110688651A (zh) | 基于fpga实现状态更新的方法及装置 | |
CN114866409B (zh) | 基于密码加速硬件的密码加速方法及装置 | |
CN113435883B (zh) | 基于交易偏移量实现动态加密的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40024026 Country of ref document: HK |