CN112835975A - 一种在区块链中部署、更新、调用智能合约的方法 - Google Patents
一种在区块链中部署、更新、调用智能合约的方法 Download PDFInfo
- Publication number
- CN112835975A CN112835975A CN202110030424.2A CN202110030424A CN112835975A CN 112835975 A CN112835975 A CN 112835975A CN 202110030424 A CN202110030424 A CN 202110030424A CN 112835975 A CN112835975 A CN 112835975A
- Authority
- CN
- China
- Prior art keywords
- contract
- account
- intelligent
- code
- compressed
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/38—Payment protocols; Details thereof
- G06Q20/382—Payment protocols; Details thereof insuring higher security of transaction
- G06Q20/3827—Use of message hashing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Business, Economics & Management (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Accounting & Taxation (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Strategic Management (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- General Business, Economics & Management (AREA)
- Computing Systems (AREA)
- Finance (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
本说明书实施例公开了一种在区块链中部署、更新、调用智能合约的方法。在部署或更新智能合约时,将智能合约的一份或多份经过压缩的机器码上链。相应地,在调用智能合约时,根据合约地址读取智能合约的经过压缩的目标机器码,并在解压缩后执行。
Description
相关申请
本申请要求申请日为2020年6月5日、题为“一种基于区块链的智能合约执行、部署方法及系统”的中国申请202010505361.7的优先权,其全部内容通过引用合并于此。
技术领域
本说明书涉及信息技术领域,特别涉及一种在区块链中部署、更新、调用智能合约的方法。
背景技术
智能合约分布式地存储于区块链网络中。当智能合约代码体积(存储大小)增大或数量增多时,智能合约持久化存储到区块链中会耗费大量存储空间,带来存储成本的上升。
因此,目前需要提供一种节省存储空间的智能合约部署方案。
发明内容
本说明书实施例之一提供一种在区块链中部署智能合约的方法。所述方法包括:接收部署智能合约的交易,所述交易包括所述智能合约的一份或多份经过压缩的机器码;创建所述智能合约的账户和账户地址,并在所述智能合约的账户中存储所述一份或多份经过压缩的机器码。
本说明书实施例之一提供一种在区块链中部署智能合约的装置。所述装置包括处理器和存储设备,所述存储设备用于存储指令,当所述处理器执行指令时,实现如本说明书任一实施例所述的在区块链中部署智能合约的方法。
本说明书实施例之一提供一种在区块链中部署智能合约的系统。所述系统包括第一交易接收模块和合约部署模块。所述第一交易接收模块接收部署智能合约的交易,所述交易包括所述智能合约的一份或多份经过压缩的机器码。所述合约部署模块用于创建所述智能合约的账户和账户地址,并在所述智能合约的账户中存储所述一份或多份经过压缩的机器码。
本说明书实施例之一提供一种在区块链中更新智能合约的方法。所述方法包括:接收更新智能合约的交易,所述交易包括所述智能合约的账户地址和所述智能合约的一份或多份经过压缩的机器码;根据所述智能合约的账户地址,在所述智能合约的账户中存储所述一份或多份经过压缩的机器码。
本说明书实施例之一提供一种在区块链中更新智能合约的装置。所述装置包括处理器和存储设备,所述存储设备用于存储指令,当所述处理器执行指令时,实现如如本说明书任一实施例所述的在区块链中更新智能合约的方法。
本说明书实施例之一提供一种在区块链中更新智能合约的系统。所述系统包括第二交易接收模块和合约更新模块。所述第二交易接收模块用于接收更新智能合约的交易,所述交易包括所述智能合约的账户地址和所述智能合约的一份或多份经过压缩的机器码。所述合约更新模块用于根据所述智能合约的账户地址,在所述智能合约的账户中存储所述一份或多份经过压缩的机器码。
本说明书实施例之一提供一种在区块链中调用智能合约的方法。所述方法包括:接收调用智能合约的交易,所述交易包括所述智能合约的账户地址;根据所述账户地址从所述智能合约的账户中读取所述智能合约的经过压缩的目标机器码;对所述经过压缩的目标机器码进行解压缩,并执行得到的解压缩后的目标机器码。
本说明书实施例之一提供一种在区块链中调用智能合约的系统。所述系统包括第三交易接收模块、合约代码读取模块和合约执行模块。所述第三交易接收模块用于接收调用智能合约的交易,所述交易包括所述智能合约的账户地址。所述合约代码读取模块用于根据所述账户地址从所述智能合约的账户中读取所述智能合约的经过压缩的目标机器码。所述合约执行模块用于对所述经过压缩的目标机器码进行解压缩,并执行得到的解压缩后的目标机器码。
本说明书实施例之一提供一种在区块链中调用智能合约的方法。所述方法包括,在执行第一智能合约代码的过程中:从调用第二智能合约的语句中确定第二智能合约的账户地址;根据所述账户地址从所述第二智能合约的账户中读取所述第二智能合约的经过压缩的目标机器码;对所述经过压缩的目标机器码进行解压缩,并执行得到的解压缩后的目标机器码。
本说明书实施例之一提供一种在区块链中调用智能合约的系统。所述系统用于在执行第一智能合约的过程中:从调用第二智能合约的语句中确定第二智能合约的账户地址;根据所述账户地址从所述第二智能合约的账户中读取所述第二智能合约的经过压缩的目标机器码;对所述经过压缩的目标机器码进行解压缩,并执行得到的解压缩后的目标机器码。
本说明书实施例之一提供一种在区块链中调用智能合约的装置。所述装置包括处理器和存储设备,所述存储设备用于存储指令,当所述处理器执行指令时,实现如本说明书任一实施例所述的在区块链中调用智能合约的方法。
附图说明
本说明书将以示例性实施例的方式进一步说明,这些示例性实施例将通过附图进行详细描述。这些实施例并非限制性的,在这些实施例中,相同的编号表示相同的结构,其中:
图1是根据本说明书一些实施例所示的区块链系统的应用场景示意图;
图2是根据本说明书一些实施例所示的在区块链中部署智能合约的方法的示例性流程图;
图3是根据本说明书一些实施例所示的在区块链中更新智能合约的方法的示例性流程图;
图4是根据本说明书一些实施例所示的在区块链中调用智能合约的方法的示例性流程图;
图5是根据本说明书一些实施例所示的合约部署交易的组成示意图;
图6是根据本说明书一些实施例所示的合约调用交易的组成示意图;
图7是根据本说明书一些实施例所示的在区块链中部署智能合约的系统的示例性模块图;
图8是根据本说明书一些实施例所示的在区块链中更新智能合约的系统的示例性模块图;
图9是根据本说明书一些实施例所示的在区块链中调用智能合约的系统的示例性模块图。
具体实施方式
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本说明书的一些示例或实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图将本说明书应用于其它类似情景。除非从语言环境中显而易见或另做说明,图中相同标号代表相同结构或操作。
应当理解,本文使用的“系统”、“装置”、“单元”和/或“模组”是用于区分不同级别的不同组件、元件、部件、部分或装配的一种方法。然而,如果其他词语可实现相同的目的,则可通过其他表达来替换所述词语。
如本说明书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其它的步骤或元素。
本说明书中使用了流程图用来说明根据本说明书的实施例的系统所执行的操作。应当理解的是,前面或后面操作不一定按照顺序来精确地执行。相反,可以按照倒序或同时处理各个步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。
在本说明书中,取决于具体的语境,“区块链”一词(有时也简称“链”)的含义是灵活的。例如,区块链可以是对区块链网络(节点链)的简称,也可以是对区块链数据的简称。其中,区块链数据可以包括区块数据和状态数据。区块数据由区块链接而成(数据链,也可称为区块链),通常不支持修改(新增、删除、变更值)。状态数据(如账户存储)支持增删查改,区块链数据的更新(新增、删除、变更值)在共识通过后生效。另外,“上链”可表示将内容或内容被写入区块链数据。“链上”可表示内容包含在区块链数据中,或操作结果需要经过共识并会影响区块链数据的更新,“链下”可表示内容不包含在区块链数据中,或操作结果无需经过共识(自然也不会影响区块链数据的更新)。
智能合约(简称合约)可以指以数字形式分布式存储于区块链系统中各节点的协议,其在被触发后可以自动执行。智能合约代码(简称合约代码)从被创建到各区块链节点完成共识后将合约代码存储于本地的过程即智能合约的部署过程。智能合约被部署后,一旦满足设定的触发条件,例如接收到调用智能合约的交易,区块链节点可以自动地读取并执行合约代码。
开发人员根据实际的业务逻辑编写合约代码。当业务逻辑逐渐复杂后,智能合约的代码体积(存储大小)也会变大。随着智能合约的持续部署,区块链节点存储的智能合约数量也会持续增加,从而导致合约代码占用的存储空间增加。
有鉴于此,本说明书实施例中将经过压缩的合约代码上链,可以节省区块链节点的存储空间。在一些区块链架构(如以太坊或类似架构)中,部署智能合约需要耗费通证(如以太坊中的Gas,与以太币间具有一定换算关系),且消耗的通证数量随上传至区块链网络的智能合约体积的增加而增加,因此将经过压缩的合约代码上链可以节省耗费的通证。另外,通过压缩合约代码,可以降低网络传输带宽,减少传输所需的时间。
智能合约的源代码往往用高级语言来编写,如BASIC、JAVA、C、C++、Python等。用高级语言编写好的源代码,可由编译器转换(编译)为CPU(Central Processing Unit,中央处理单元)可以识别和执行的机器码,机器码也可称为微处理器指令。这种将用高级语言编写的代码转换成机器码的方式被称为“编译执行”。编译执行一般不具有跨平台的可拓展性,由于CPU厂商、CPU品牌、CPU型号等因素中的一个或多个的不同,CPU支持的指令集往往也不同。例如,一些CPU支持x86指令集,一些CPU支持ARM指令集。因此,用同一高级语言编写的同一程序代码,在不同CPU上被编译器转换得到的机器码可能不同。具体地,编译器在将用高级语言编写的程序代码转换成机器码的过程中,会结合具体的CPU指令集的特点(如向量指令集等)进行优化以提升程序执行的速度,而此类优化往往与具体的CPU硬件相关。如此,相同的机器码在支持x86的CPU上可以运行,但在支持ARM指令集的CPU上就可能无法运行。甚至虽同样基于x86平台,但随着时间的推移,指令集不断丰富和扩展,导致用同一高级语言编写的同一程序代码在不同代的x86平台被编译成不同的机器码。另外,由于执行机器码需要由操作系统内核对CPU进行调度,因此即使是同样的CPU,用同一高级语言编写的同一程序代码在不同操作系统下也可能被编译成不同的机器码。
区别于编译执行,还存在一种“解释执行”的程序执行方式。比如在Java语言中,将Java源代码通过Java的编译器编译成标准的字节码(bytecode),这里编译器不针对于任何实际的硬件处理器的指令集,而是定义了一套抽象的标准指令集。编译成的字节码一般无法在硬件CPU上直接运行,因此引入了一个虚拟机,即JVM(Java Virtual Machine,Java虚拟机)。Java虚拟机是一种虚构的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现。JVM屏蔽了与具体的硬件平台、操作系统等相关的信息,使得Java程序只要是可在Java虚拟机上运行的标准字节码,就可以在多种平台上不加修改地运行。
JVM运行在特定的硬件处理器上,负责针对所运行的特定处理器而进行字节码的解释和执行,并向上屏蔽这些底层的差异,呈现给开发者以标准的开发规范。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器码执行。具体地,JVM接收到输入的字节码后,逐句解释其中的每一条指令,并翻译成适合当前机器的机器码来运行,这些过程例如由解释器(Interpreter)进行解释和执行。这样一来,编写Java程序的开发者不需要考虑编写后的程序代码将运行在哪种硬件平台上。JVM本身的开发是由Java组织的专业开发人员完成,以将JVM适配到不同的处理器架构上。迄今为止,主流的处理器架构只有有限的几种,如X86、ARM、RISC-V、MIPS。专业的开发人员将JVM分别移植到支持这几种特定硬件的平台后,Java程序理论上就可以在所有的机器上运行了。JVM的移植工作通常由Java开发组织专业的人员提供的,这就极大减轻了Java程序开发者的负担。
在一些实施例中,上链以及后续调用的合约代码既可以是字节码,也可以是机器码。当区块链网络中的节点具有多种机器架构时,上链以及后续调用的合约代码可包括与这些机器架构一一对应的多份机器码,具备特定机器架构的节点可调用与自身机器架构匹配的目标机器码执行。
相较于字节码,机器码的执行速度/效率更高,因此将智能合约的机器码上链且后续执行智能合约的机器码可以使智能合约的执行效率更高。然而,对于同样功能的指令,用机器码来表达所需的语句量一般大于字节码。即,对于同样功能的指令,一般来说机器码的体积>字节码的体积。具体地,对于同样功能的指令,机器码的体积可达到字节码体积的5~10倍。因此,将智能合约的经过压缩的机器码上链,不仅可以提高智能合约的执行效率,还可以控制合约代码消耗的存储成本以及节省合约部署耗费的网络传输带宽和通证(如gas)。
图1是根据本说明书一些实施例所示的区块链系统的应用场景示意图。如图1所示,区块链系统100可以包括区块链网络110和用户端120。
区块链网络110可以包括多个区块链节点(简称节点),如节点110-1、节点110-2、节点110-3、...、节点110-n。一般地,区块链网络110中的一个节点可以接收在区块链网络110中广播的交易,并基于一段时间内接收到的交易生成新区块。交易可用于发起区块链系统中的事件/行为,例如,用于加入区块链成员的交易、用于转账(例如通证的转移)的交易(以下称为转账交易),部署智能合约的交易、调用智能合约的交易等等。各节点(可称为共识节点/全量节点)通过运行共识机制,使得各节点生成相同的区块(或者是记账节点生成区块)并将其写入区块链。即,共识机制可确保各节点保存的区块链维持一致。
接收到交易后,区块链节点可以根据交易内容执行相关操作,此过程可称为交易的执行。例如,转账交易的执行包括在账户间转移通证。又如,部署智能合约的交易的执行包括在区块链上部署智能合约。又如,调用智能合约的交易的执行包括调用(执行)链上部署的智能合约。生成区块的过程中,各节点也通过运行共识机制,使得各节点对状态数据进行一致的更新。即,共识机制也可确保各节点保存的状态数据维持一致。
交易可以通过特定区块链规范下的虚拟机执行,例如,EVM(Ethernet VirtualMachine,以太坊虚拟机)、WASM(WebAssembly)规范下的虚拟机等等。在一些实施例中,部署的智能合约可以是基于EVM的智能合约(简称EVM合约),也可以是WASM规范下的智能合约(简称WASM合约)。
用户端120可以生成交易并将其上传至区块链网络110,以使交易在区块链网络110中广播,即发起交易。各共识节点可基于一段时间内接收到的交易生成新区块。在一些实施例中,区块链网络110中的节点也可以发起交易。
在一些实施例中,用户端120和区块链节点可以集成于同一设备上。在一些实施例中,用户端120可以作为共识节点(全量节点)加入区块链网络110,也可以作为轻量节点加入区块链网络110而不用参与共识。一般地,全量节点保存更多的区块链数据(如区块头和区块体)以参与共识,而轻量节点可以只保存一些关键的区块链数据(如区块头)并依靠全量节点验证链上内容(如交易)的真实性。
在一些实施例中,交易写入区块的方式可以是显式的,即节点可以将交易本身写入区块。在一些实施例中,交易写入区块的方式可以是隐式的。例如,节点可以将交易的哈希值写入区块,但此情况下各节点仍可保存接收到的交易,以备交易完整性(是否被篡改)验证,如哈希值校验。
各共识节点可以接收上传至区块链网络110的部署智能合约的交易,并在运行共识机制后将智能合约代码写入区块链数据,从而实现在区块链上部署智能合约。对于已部署的智能合约,各共识节点可以接收上传至区块链网络110的调用智能合约的交易,并调用已在链上部署的智能合约。
关于智能合约的部署、更新和调用,可以进一步参考图2~6及其相关描述。
在一些实施例中,用户端120/区块链网络110中的节点可以包括各类计算设备,如智能电话、膝上型计算机、台式计算机、服务器等等。
在一些实施例中,服务器可以是独立的服务器或者服务器组,该服务器组可以是集中式的或者分布式的。在一些实施例中,服务器可以是区域的或者远程的。在一些实施例中,服务器可在云平台上执行。例如,该云平台可包括私有云、公共云、混合云、社区云、分散式云、内部云等中的一种或其任意组合。
图2是根据本说明书一些实施例所示的在区块链中部署智能合约的方法的示例性流程图。流程200可以由区块链网络110中的共识节点执行。如图2所示,流程200可以包括:
步骤210,接收部署智能合约的交易,所述交易包括所述智能合约的一份或多份经过压缩的机器码。在一些实施例中,步骤210可以由第一交易接收模块710实现。
参考前文的相关描述,交易发起方(即合约部署方)可以通过用户端120或节点发起部署智能合约的交易(以下简称合约部署交易)。关于合约部署交易的更多字段,可以参考图5及其相关描述。
在一些实施例中,放入合约部署交易中的机器码可以通过对智能合约的源代码(如,用高级语言编写的代码)或中间代码(如字节码)进行编译得,这种编译方式也称为“提前编译”或“AoT”(Ahead of Time)。
参考前述内容,将智能合约的经过压缩的机器码上链,不仅可以提高智能合约的执行效率,还可以控制合约代码消耗的存储成本以及节省合约部署过程中占用的传输带宽。可以理解,同一智能合约的源代码或中间代码可被编译成多份机器码放入合约部署交易,以适配运行合约代码的不同机器架构。即,执行合约代码的节点可以根据自身的机器架构选择合适版本的机器码执行。此外,在链下将智能合约的源代码或中间代码编译成机器码并进行压缩,可以极大地减轻链上节点的处理压力。
在一些实施例中,可以强制要求合约部署方在部署智能合约的交易中放入经过压缩的合约代码。例如,节点可以检查接收到的交易中的合约代码是否是经过压缩,若是,则节点可以执行交易以部署智能合约,节点可以拒绝执行交易。如此,每份智能合约的代码都以压缩形式上链,可以极大地节省区块链节点的存储空间,也可以大大降低合约部署耗费通证和网络传输带宽。
在另一些实施例中,也可以把压缩的选择权交给合约部署方。即,允许合约部署方自由选择将经过压缩的合约代码还是未经压缩的合约代码放入交易中。
在一些实施例中,可以用特定格式的文件(以下称为合约代码文件)封装合约代码。即,可以用合约代码文件封装智能合约的一份或多份经过压缩的机器码。在一些实施例中,除了智能合约的机器码外,还可以将同一智能合约的未经压缩的字节码一起封装于合约代码文件中。机器码在一些情况下存在未定义行为而字节码具有完整的定义,相应地,字节码可以与具备法律效力的业务逻辑构成严格的对应关系而机器码无法与业务逻辑构成严格的对应关系。因此,将智能合约的字节码上链可保留具备法律效力的证据。可以理解,一般来说字节码本身(未经压缩)的体积并不大,智能合约的字节码上链对存储成本的影响是可以容忍的。值得说明的是,一般来说字节码本身(未经压缩)的体积并不大,压缩前后的字节码的体积变化也不明显。如前所述,对应字节码的机器码,其体积可达到字节码体积的5~10倍。因此,相较于压缩智能合约的字节码,压缩智能合约的一份甚至多份机器码的意义更为重大。
在一些实施例中,合约代码文件还可以包括ABI(Application BinaryInterface,应用二进制接口)文件,ABI文件包含智能合约提供的接口的描述信息。由于ABI文件的体积很小,可以不对合约代码文件中的ABI文件进行压缩。需要说明的是,对于同一高级语言编写而成智能合约,其经过编译后得到的字节码和至少一个平台的机器码,或者由字节码翻译而得到的至少一个平台的机器码,可以使用同一个ABI文件。
在一些实施例中,所述合约代码文件还可以包括智能合约的压缩信息(简称合约压缩信息),所述压缩信息可指示所述合约代码文件中的智能合约的机器码是否经过压缩和/或用于压缩所述合约代码文件中的智能合约的机器码的算法。当合约代码文件中放入的是智能合约的经过压缩的机器码时,合约代码文件中的合约压缩信息可被设置为指示所述合约代码文件中的智能合约的机器码是经过压缩的和/或用于压缩所述合约代码文件中的智能合约的机器码的算法。
在一些实施例中,合约代码文件还可以包括可以指示对智能合约中的变量(简称合约变量)进行初始化的字段。具体地,该字段可以包括要初始化的合约变量的键值对,键(key)为变量名,value为初始值。节点可以根据合约代码文件中的该字段对合约变量进行初始化。进而,节点可以将经过初始化的合约变量写入智能合约的账户存储中。关于账户存储的更多细节,可以参考后文的相关描述。
在一些实施例中,合约代码文件可具有唯一标识。该唯一标识可包含于合约状态中,用于指示合约代码文件的存储位置。具体地,可以将合约代码文件的唯一标识设置为该合约代码文件的哈希值,通过哈希校验可以确认合约代码文件是否被篡改过。可以理解,这里的哈希值可指将合约代码文件的所有字段输入哈希函数后得到的输出。采用k-v存储时,可以将key(键)设置为合约代码文件的哈希值,将value设置为合约代码文件。
对于EVM合约,可以使用evm文件封装合约代码。对于WASM合约,可以使用wasm格式文件或wasc格式文件封装智能合约代码。执行智能合约的节点可以根据统一的规范对合约代码文件(如evm格式文件/wasm格式文件/wasc格式文件)进行解封装,得到各个字段(如合约代码、压缩信息、合约压缩字段等)。
步骤220,创建所述智能合约的账户和账户地址,并在所述智能合约的账户中存储所述一份或多份经过压缩的机器码。在一些实施例中,步骤220可以由合约部署模块720实现。
合约账户的存在/智能合约的部署可体现在以下方面:1.具有地址(即合约地址),合约地址用于访问合约账户;2.具有永久性存储,即合约账户属于节点的存储,有时也可将合约账户称作智能合约的存储(简称合约存储)。在一些实施例中,合约存储(合约账户)可包括合约代码以及账户存储,其中,账户存储可用于保存合约的状态。
在一些实施例中,合约账户还可以具有概要信息,相对地合约账户(存储)本身即详细信息。有时也将合约账户的概要信息称作合约账户的状态(简称合约状态),全局区块链账户的状态可称作“世界状态”。其中,除了合约账户,区块链账户还可包括实体持有的账户,例如以太坊中的外部账户。
合约地址指示合约账户(即合约存储)及其相关信息(如合约状态)的存储位置,用于访问合约账户及其相关信息,这里的访问可以指数据的增删查改。具体地,合约地址(key)与合约存储/合约状态(value)可组成键值对(key-value)存储于节点。
合约地址可通过各种方式生成。在一些实施例中,合约部署交易可包括交易发起方(即合约部署方)的账户地址和第一交易计数,第一交易计数用于对交易发起方发起的交易进行计数。节点可以基于合约部署交易中交易发起方的账户地址和第一交易计数生成合约地址。在一些实施例中,交易发起方(即合约部署方)可以在合约部署交易中指定智能合约的名称(简称合约名称),节点可以基于该合约名称生成合约地址。
在一些实施例中,账户存储中的合约变量也可以键值对(key-value)形式存储,变量名作为键(key),变量值作为值(value)。逻辑上,账户存储可以用默克尔(Merkle)树,例如MPT树(Merkle Patricia Tree),来映射。为了便于描述,可以将映射账户存储的默克尔树称为存储树(storage tree),每个合约账户对应一棵存储树。
仅作为示例,账户状态可以包括账户余额(记为balance)、第二交易计数(记为nonce)、代码哈希(记为codehash)、存储树根哈希(记为storageroot)等字段中的至少一个。其中,balance字段指示合约账户的余额;nonce字段用于对合约账户接收到的交易进行计数;codehash字段指示合约代码的存储位置,具体可被设置为封装合约代码的合约代码文件的哈希值;storageroot为存储树的根节点对应的哈希值(简称根哈希)。可以理解,发起调用智能合约的交易,也可称作向该智能合约的账户发送了一笔交易,即该智能合约的账户接收到一笔交易。
在一些实施例中,账户状态还可以包括指示合约存储中的机器码是否经过压缩的合约压缩字段。在创建合约账户的过程中,节点可以对合约状态中的合约压缩字段进行设置,以指示合约账户中的智能合约的机器码是否经过压缩。例如,当合约部署交易中放入的是智能合约的经过压缩的机器码时,节点可以将将合约压缩字段设置为指示合约账户中的智能合约的机器码是经过压缩的。
在创建合约账户的过程中,节点可以对合约变量进行初始化。合约部署方可以在发起的合约部署交易中指示对合约变量进行初始化,例如,将要初始化的合约变量的key和value打包进合约部署交易。相应地,节点可根据合约部署交易对合约变量进行初始化,将经过初始化的合约变量写入账户存储并更新storageroot。
图3是根据本说明书一些实施例所示的在区块链中更新智能合约的方法的示例性流程图。流程300可以由区块链网络110中的共识节点执行。如图3所示,流程300可以包括:
步骤310,接收更新智能合约的交易,所述交易包括所述智能合约的账户地址和所述智能合约的一份或多份经过压缩的机器码。在一些实施例中,步骤310可以由第二交易接收模块810实现。
步骤320,根据所述智能合约的账户地址,在所述智能合约的账户存储中存储所述压缩后的智能合约代码。在一些实施例中,步骤320可以由合约更新模块820实现。
智能合约的更新是指更新已部署的合约代码(如,机器码、字节码),更新前后的合约代码存储于同一合约账户。节点可根据更新的智能合约的账户地址,在合约账户中写入智能合约的更新版本的机器码。具体地,节点可将更新智能合约的交易(简称合约更新交易)中的新版本的机器码写入合约账户中,覆盖(替换)之前写入合约账户中的旧版本的机器码。随着合约账户(合约存储)的内容发生变化,节点可对账户状态进行相应的更新,如更新codehash字段和storageroot字段。
更新智能合约的时机可以有多种。例如,当业务需求发生变化时,可以对链上的智能合约的字节码和机器码进行更新。又如,若具有新机器架构的节点加入区块链网络,则可以将智能合约的适配于新机器架构的机器码上链。
关于合约更新的更多细节,可以参考合约部署的相关描述。例如,账户状态还可以包括合约压缩字段,合约压缩字段用于指示合约账户中的智能合约的机器码是否经过压缩。又如,又如,合约更新交易中的智能合约的一份或多份机器码可以被封装进合约代码文件中,所述合约代码文件还包括所述智能合约的未经压缩的字节码。又如,合约更新交易/合约代码文件可指示对合约变量进行初始化。
图4是根据本说明书一些实施例所示的在区块链中调用智能合约的方法的示例性流程图。流程400可以由区块链网络110中的共识节点执行。如图4所示,流程400可以包括:
步骤410,接收调用智能合约的交易,所述交易包括所述智能合约的账户地址。在一些实施例中,步骤410可以由第三交易接收模块910实现。
参考前述内容,调用智能合约的交易(简称合约调用交易)中可放入所述智能合约的账户地址,以根据所述账户地址调用(读取、执行)合约账户中所述智能合约的机器码。关于合约调用交易的更多字段,可以参考图6及其相关描述。
步骤420,根据所述账户地址从所述智能合约的账户中读取所述智能合约的经过压缩的目标机器码。在一些实施例中,步骤420可以由合约代码读取模块920实现。
步骤430,对所述经过压缩的目标机器码进行解压缩,并执行得到的解压缩后的目标机器码。在一些实施例中,步骤430可以由合约执行模块930实现。
可以理解,合约存储中的智能合约的一份或多份经过压缩的机器码包括所述目标机器码。当有与多种机器架构一一适配的多份机器码时,节点可选择适配于自身机器架构的机器码作为所述目标机器码。
参考前述内容,在一些实施例中,节点可以根据合约调用交易中的账户地址从合约账户中读取合约代码文件,所述合约代码文件包括智能合约的一份或多份经过压缩的机器码以及所述智能合约的未经压缩的字节码。进而,节点可以从所述一份或多份经过压缩的机器码中确定所述经过压缩的目标机器码。
值得说明的是,在一些场景(如执行参与过共识的历史交易,即交易重放)下,节点可以分别执行合约代码文件中解压缩后的目标机器码和未经压缩的字节码,并比较两者的执行结果,以验证合约代码的可靠性。若执行结果一致,说明合约代码文件中的目标机器码和字节码对应同一智能合约的业务逻辑,否则说明合约代码文件中的目标机器码和/或字节码是不可靠的,例如,合约代码文件中的目标机器码和/或字节码可能经过篡改。
在一些实施例中,合约代码文件可以具有指示其存储位置的唯一标识,该唯一标识可被设置为合约代码文件的哈希值且包含于合约账户的概要信息(即合约状态)。相应地,节点可以根据合约账户的账户地址查询合约账户的概要信息,并根据合约账户的概要信息中的合约代码文件的唯一标识读取合约代码文件。
在一些实施例中,若强制合约部署方在合约部署交易中放入智能合约的经过压缩的机器码,则节点读取到的智能合约的目标机器码总是经过压缩的,因此节点可默认先对读取到的智能合约的目标机器码进行解压缩,再执行得到的解压缩后的目标机器码。在另一些实施例中,若允许合约部署方自由选择将经过压缩的合约代码还是未经压缩的合约代码放入交易中,则节点需要先判断读取到的智能合约的目标机器码是否经过压缩。若是,则先对读取到智能合约的经过压缩的目标机器码进行解压缩,再执行得到的解压缩后的目标机器码,否则可直接执行读取到的未经压缩的目标机器码。
参考前述内容,在一些实施例中,节点可以根据合约调用交易中的账户地址查询合约账户的概要信息(即合约状态)中的合约压缩字段,并根据所述合约压缩字段确定读取到的目标机器码是否经过压缩。
在一些实施例中,在一个智能合约的代码中可以出现调用其他智能合约的语句。具体地,节点在调用第一智能合约的过程中,可从调用第二智能合约的语句中确定第二智能合约的账户地址,以调用第二智能合约。前文已对智能合约的调用做了详尽的介绍,故这里不再展开描述第二智能合约的调用。
应当注意的是,上述有关流程的描述仅仅是为了示例和说明,而不限定本说明书的适用范围。对于本领域技术人员来说,在本说明书的指导下可以对流程进行各种修正和改变。然而,这些修正和改变仍在本说明书的范围之内。
图5是根据本说明书一些实施例所示的合约部署交易的组成示意图。如图5所示,合约部署交易可以包括以下字段:from、to、value、data、signature。
其中,from字段可放入交易发起方(即合约部署方)的账户地址;to字段为空字段,以指示创建合约账户;value字段可指示待转移(支付)的通证(如gas)数量;data字段可放入合约代码,例如,放入封装合约代码的evm格式文件/wasm格式文件/wasc文件。在一些实施例中,data字段中的智能合约可以是经过压缩的,signature字段可放入数字签名,该数字签名可通过用交易发起方的账户私钥对前述字段组成的消息的摘要进行加密得到。
可以理解,合约更新交易的字段组成是类似的,不同之处在于:to字段可放入更新的智能合约的账户地址,data字段可放入新版本的合约代码。
图6是根据本说明书一些实施例所示的合约调用交易的组成示意图。如图5所示,智能合约调用交易可以包括以下字段:from、to、value、data、signature。
其中,from字段可放入交易发起方(即合约调用方)的账户地址;to字段可放入调用的智能合约的账户地址;value字段可指示待转移(支付)的通证(如gas)数量;data字段可放入调用的智能合约中的函数及其输入参数;signature字段可放入数字签名,该数字签名可通过用交易发起方的账户私钥对前述字段组成的消息的摘要进行加密得到。
可以理解,图5和图6所示的交易组成仅作为示例,在本说明书的指导下可以对智能合约相关的交易组成进行各种变形。另外,交易的各个字段可以具有任意的命名。例如,value字段也可被命名为amount字段。
图7是根据本说明书一些实施例所示的在区块链中部署智能合约的系统的示例性模块图。如图7所示,系统700可以包括第一交易接收模块710和合约部署模块720。
第一交易接收模块710可以用于接收部署智能合约的交易,所述交易包括所述智能合约的一份或多份经过压缩的机器码。
合约部署模块720可以用于创建所述智能合约的账户和账户地址,并在所述智能合约的账户中存储所述一份或多份经过压缩的机器码。
图8是根据本说明书一些实施例所示的在区块链中更新智能合约的系统的示例性模块图。如图8所示,系统800可以包括第二交易接收模块810和合约更新模块820。
第二交易接收模块810可以用于接收更新智能合约的交易,所述交易包括所述智能合约的账户地址和所述智能合约的一份或多份经过压缩的机器码。
合约更新模块820可以用于根据所述智能合约的账户地址,在所述智能合约的账户中存储所述一份或多份经过压缩的机器码。
图9是根据本说明书一些实施例所示的在区块链中调用智能合约的系统的示例性模块图。如图9所示,系统900可以包括第三交易接收模块910、合约代码读取模块920和合约执行模块930。
第三交易接收模块910可以用于接收调用智能合约的交易,所述交易包括所述智能合约的账户地址。
合约代码读取模块920可以用于根据所述账户地址从所述智能合约的账户中读取所述智能合约的经过压缩的目标机器码。
合约执行模块930可以用于对所述经过压缩的目标机器码进行解压缩,并执行得到的解压缩后的目标机器码。
在一些实施例中,在执行第一智能合约代码的过程中,合约执行模块930可以从调用第二智能合约的语句中确定第二智能合约的账户地址,根据所述账户地址从所述第二智能合约的账户中读取所述第二智能合约的经过压缩的目标机器码,对所述经过压缩的目标机器码进行解压缩,并执行得到的解压缩后的目标机器码。
关于上述系统及其模块的更多细节,可以参考图2~6的相关说明。
应当理解,图7~9所示的系统及其模块可以利用各种方式来实现。例如,在一些实施例中,系统及其模块可以通过硬件、软件或者软件和硬件的结合来实现。其中,硬件部分可以利用专用逻辑来实现;软件部分则可以存储在存储器中,由适当的指令执行系统,例如微处理器或者专用设计硬件来执行。本领域技术人员可以理解上述的方法和系统可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁盘、CD或DVD-ROM的载体介质、诸如只读存储器(固件)的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本说明书的系统及其模块不仅可以有诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用例如由各种类型的处理器所执行的软件实现,还可以由上述硬件电路和软件的结合(例如,固件)来实现。
需要注意的是,以上对于系统及其模块的描述,仅为描述方便,并不能把本说明书限制在所举实施例范围之内。可以理解,对于本领域的技术人员来说,在了解系统的原理后,可能在不背离这一原理的情况下,对各个模块进行任意组合,或者构成子系统与其他模块连接。例如,在一些实施例中,合约代码读取模块920和合约执行模块930可以是两个模块,也可以合并为一个模块。诸如此类的变形,均在本说明书的保护范围之内。
本说明书实施例可能带来的有益效果包括但不限于:(1)将机器码上链以供调用,可以大大提升智能合约的执行效率;(2)将智能合约的机器码压缩后再上链,可以极大地节约部署智能合约耗费的存储成本、通证以及网络传输带宽。需要说明的是,不同实施例可能产生的有益效果不同,在不同的实施例里,可能产生的有益效果可以是以上任意一种或几种的组合,也可以是其他任何可能获得的有益效果。
上文已对基本概念做了描述,显然,对于本领域技术人员来说,上述详细披露仅仅作为示例,而并不构成对本说明书实施例的限定。虽然此处并没有明确说明,本领域技术人员可能会对本说明书实施例进行各种修改、改进和修正。该类修改、改进和修正在本说明书实施例中被建议,所以该类修改、改进、修正仍属于本说明书示范实施例的精神和范围。
同时,本说明书使用了特定词语来描述本说明书的实施例。如“一个实施例”、“一实施例”、和/或“一些实施例”意指与本说明书至少一个实施例相关的某一特征、结构或特点。因此,应强调并注意的是,本说明书中在不同位置两次或多次提及的“一实施例”或“一个实施例”或“一个替代性实施例”并不一定是指同一实施例。此外,本说明书的一个或多个实施例中的某些特征、结构或特点可以进行适当的组合。
此外,本领域技术人员可以理解,本说明书实施例的各方面可以通过若干具有可专利性的种类或情况进行说明和描述,包括任何新的和有用的工序、机器、产品或物质的组合,或对他们的任何新的和有用的改进。相应地,本说明书实施例的各个方面可以完全由硬件执行、可以完全由软件(包括固件、常驻软件、微码等)执行、也可以由硬件和软件组合执行。以上硬件或软件均可被称为“数据块”、“模块”、“引擎”、“单元”、“组件”或“系统”。此外,本说明书实施例的各方面可能表现为位于一个或多个计算机可读介质中的计算机产品,该产品包括计算机可读程序编码。
计算机存储介质可能包含一个内含有计算机程序编码的传播数据信号,例如在基带上或作为载波的一部分。该传播信号可能有多种表现形式,包括电磁形式、光形式等,或合适的组合形式。计算机存储介质可以是除计算机可读存储介质之外的任何计算机可读介质,该介质可以通过连接至一个指令执行系统、装置或设备以实现通讯、传播或传输供使用的程序。位于计算机存储介质上的程序编码可以通过任何合适的介质进行传播,包括无线电、电缆、光纤电缆、RF、或类似介质,或任何上述介质的组合。
本说明书实施例各部分操作所需的计算机程序编码可以用任意一种或多种程序语言编写,包括面向对象编程语言如Java、Scala、Smalltalk、Eiffel、JADE、Emerald、C++、C#、VB.NET、Python等,常规程序化编程语言如C语言、VisualBasic、Fortran2003、Perl、COBOL2002、PHP、ABAP,动态编程语言如Python、Ruby和Groovy,或其他编程语言等。该程序编码可以完全在用户计算机上运行、或作为独立的软件包在用户计算机上运行、或部分在用户计算机上运行部分在远程计算机运行、或完全在远程计算机或处理设备上运行。在后种情况下,远程计算机可以通过任何网络形式与用户计算机连接,比如局域网(LAN)或广域网(WAN),或连接至外部计算机(例如通过因特网),或在云计算环境中,或作为服务使用如软件即服务(SaaS)。
此外,除非权利要求中明确说明,本说明书实施例所述处理元素和序列的顺序、数字字母的使用、或其他名称的使用,并非用于限定本说明书实施例流程和方法的顺序。尽管上述披露中通过各种示例讨论了一些目前认为有用的发明实施例,但应当理解的是,该类细节仅起到说明的目的,附加的权利要求并不仅限于披露的实施例,相反,权利要求旨在覆盖所有符合本说明书实施例实质和范围的修正和等价组合。例如,虽然以上所描述的系统组件可以通过硬件设备实现,但是也可以只通过软件的解决方案得以实现,如在现有的处理设备或移动设备上安装所描述的系统。
同理,应当注意的是,为了简化本说明书实施例披露的表述,从而帮助对一个或多个发明实施例的理解,前文对本说明书实施例的描述中,有时会将多种特征归并至一个实施例、附图或对其的描述中。但是,这种披露方法并不意味着本说明书实施例对象所需要的特征比权利要求中提及的特征多。实际上,实施例的特征要少于上述披露的单个实施例的全部特征。
针对本说明书引用的每个专利、专利申请、专利申请公开物和其他材料,如文章、书籍、说明书、出版物、文档等,特此将其全部内容并入本说明书作为参考。与本说明书内容不一致或产生冲突的申请历史文件除外,对本说明书权利要求最广范围有限制的文件(当前或之后附加于本说明书中的)也除外。需要说明的是,如果本说明书附属材料中的描述、定义、和/或术语的使用与本说明书所述内容有不一致或冲突的地方,以本说明书的描述、定义和/或术语的使用为准。
最后,应当理解的是,本说明书中所述实施例仅用以说明本说明书实施例的原则。其他的变形也可能属于本说明书实施例的范围。因此,作为示例而非限制,本说明书实施例的替代配置可视为与本说明书的教导一致。相应地,本说明书的实施例不仅限于本说明书明确介绍和描述的实施例。
Claims (33)
1.一种在区块链中部署智能合约的方法,其中,包括:
接收部署智能合约的交易,所述交易包括所述智能合约的一份或多份经过压缩的机器码;
创建所述智能合约的账户和账户地址,并在所述智能合约的账户中存储所述一份或多份经过压缩的机器码。
2.如权利要求1所述的方法,其中,所述交易包括封装所述智能合约的一份或多份经过压缩的机器码的合约代码文件,所述合约代码文件还包括所述智能合约的未经压缩的字节码;
所述在所述智能合约的账户中存储所述一份或多份经过压缩的机器码,包括:
在所述智能合约的账户中存储所述合约代码文件。
3.如权利要求2所述的方法,其中,还包括:
设置所述智能合约的账户的概要信息,所述概要信息包括所述合约代码文件的唯一标识,所述合约代码文件的唯一标识被设置为所述合约代码文件的哈希值。
4.如权利要求2所述的方法,其中,所述合约代码文件还包括所述智能合约的压缩信息,所述压缩信息指示所述合约代码文件中的智能合约的机器码是经过压缩的和/或用于压缩所述合约代码文件中的智能合约的机器码的算法。
5.如权利要求1或2所述的方法,其中,所述智能合约为EVM合约或WASM合约。
6.如权利要求1或2所述的方法,其中,所述机器码通过对所述智能合约的源代码或中间代码进行提前编译得到。
7.如权利要求1或2所述的方法,其中,还包括:
设置所述智能合约的账户的概要信息,所述概要信息包括合约压缩字段,所述合约压缩字段被设置为指示所述智能合约的账户中的机器码是经过压缩的。
8.一种在区块链中部署智能合约的装置,其中,包括处理器和存储设备,所述存储设备用于存储指令,当所述处理器执行指令时,实现如权利要求1~7中任一项所述的方法。
9.一种在区块链中部署智能合约的系统,其中,包括第一交易接收模块和合约部署模块;
所述第一交易接收模块接收部署智能合约的交易,所述交易包括所述智能合约的一份或多份经过压缩的机器码;
所述合约部署模块用于创建所述智能合约的账户和账户地址,并在所述智能合约的账户中存储所述一份或多份经过压缩的机器码。
10.一种在区块链中更新智能合约的方法,其中,包括:
接收更新智能合约的交易,所述交易包括所述智能合约的账户地址和所述智能合约的一份或多份经过压缩的机器码;
根据所述智能合约的账户地址,在所述智能合约的账户中存储所述一份或多份经过压缩的机器码。
11.如权利要求10所述的方法,其中,所述交易包括封装所述智能合约的一份或多份经过压缩的机器码的合约代码文件,所述合约代码文件还包括所述智能合约的未经压缩的字节码;
所述在所述智能合约的账户中存储所述一份或多份经过压缩的机器码,包括:
在所述智能合约的账户中存储所述合约代码文件。
12.如权利要求11所述的方法,其中,还包括:
更新所述智能合约的账户的概要信息,所述概要信息包括所述合约代码文件的唯一标识,所述合约代码文件的唯一标识被设置为所述合约代码文件的哈希值。
13.如权利要求11所述的方法,其中,所述合约代码文件还包括所述智能合约的压缩信息,所述压缩信息指示所述合约代码文件中的智能合约的机器码是经过压缩的和/或用于压缩所述合约代码文件中的智能合约的机器码的算法。
14.如权利要求10或11所述的方法,其中,所述智能合约为EVM合约或WASM合约。
15.如权利要求10或11所述的方法,其中,所述机器码通过对所述智能合约的源代码或中间代码进行编译得到。
16.如权利要求10或11所述的方法,其中,还包括:
更新所述智能合约的账户的概要信息,所述概要信息包括合约压缩字段,所述合约压缩字段被设置为指示所述智能合约的账户中的机器码是经过压缩的。
17.一种在区块链中更新智能合约的装置,其中,包括处理器和存储设备,所述存储设备用于存储指令,当所述处理器执行指令时,实现如权利要求10~16中任一项所述的方法。
18.一种在区块链中更新智能合约的系统,其中,包括第二交易接收模块和合约更新模块;
所述第二交易接收模块用于接收更新智能合约的交易,所述交易包括所述智能合约的账户地址和所述智能合约的一份或多份经过压缩的机器码;
所述合约更新模块用于根据所述智能合约的账户地址,在所述智能合约的账户中存储所述一份或多份经过压缩的机器码。
19.一种在区块链中调用智能合约的方法,其中,包括:
接收调用智能合约的交易,所述交易包括所述智能合约的账户地址;
根据所述账户地址从所述智能合约的账户中读取所述智能合约的经过压缩的目标机器码;
对所述经过压缩的目标机器码进行解压缩,并执行得到的解压缩后的目标机器码。
20.如权利要求19所述的方法,其中,所述根据所述账户地址从所述智能合约的账户中读取所述智能合约的经过压缩的目标机器码之前,所述方法还包括:
根据所述账户地址查询所述智能合约的账户的概要信息中的合约压缩字段,并根据该字段确定读取到的目标机器码是经过压缩的。
21.如权利要求19所述的方法,其中,所述根据所述账户地址从所述智能合约的账户中读取所述智能合约的经过压缩的目标机器码,包括:
根据所述账户地址从所述智能合约的账户中读取合约代码文件,所述合约代码文件包括所述智能合约的一份或多份经过压缩的机器码以及所述智能合约的未经压缩的字节码;
从所述一份或多份经过压缩的机器码中确定所述经过压缩的目标机器码。
22.如权利要求21所述的方法,其中,所述合约代码文件具有唯一标识,所述唯一标识被设置为所述合约代码文件的哈希值,所述智能合约的账户具有包含所述合约代码文件的唯一标识在内的概要信息;所述根据所述账户地址从所述智能合约的账户中读取合约代码文件,包括:
根据所述账户地址查询所述智能合约的账户的概要信息中的所述合约代码文件的唯一标识,并根据所述唯一标识读取所述合约代码文件。
23.如权利要求21所述的方法,其中,所述合约代码文件还包括所述智能合约的压缩信息,所述压缩信息指示所述合约代码文件中的智能合约的机器码是经过压缩的和/或用于压缩所述合约代码文件中的智能合约的机器码的算法;所述对所述经过压缩的目标机器码进行解压缩,包括:
根据所述压缩信息对所述经过压缩的目标机器码进行解压缩。
24.如权利要求21所述的方法,其中,还包括:
执行所述未经压缩的字节码;
比较所述字节码的执行结果和所述目标机器码的执行结果。
25.一种在区块链中调用智能合约的装置,其中,包括处理器和存储设备,所述存储设备用于存储指令,当所述处理器执行指令时,实现如权利要求19~24中任一项所述的方法。
26.一种在区块链中调用智能合约的系统,其中,包括第三交易接收模块、合约代码读取模块和合约执行模块;
所述第三交易接收模块用于接收调用智能合约的交易,所述交易包括所述智能合约的账户地址;
所述合约代码读取模块用于根据所述账户地址从所述智能合约的账户中读取所述智能合约的经过压缩的目标机器码;
所述合约执行模块用于对所述经过压缩的目标机器码进行解压缩,并执行得到的解压缩后的目标机器码。
27.一种在区块链中调用智能合约的方法,其中,包括:
在调用第一智能合约的过程中:
从调用第二智能合约的语句中确定第二智能合约的账户地址;
根据所述账户地址从所述第二智能合约的账户中读取所述第二智能合约的经过压缩的目标机器码;
对所述经过压缩的目标机器码进行解压缩,并执行得到的解压缩后的目标机器码。
28.如权利要求27所述的方法,其中,所述根据所述账户地址从所述第二智能合约的账户中读取所述第二智能合约的经过压缩的目标机器码之前,所述方法还包括:
根据所述账户地址查询所述第二智能合约的账户的概要信息中的合约压缩字段,并根据该字段确定读取到的目标机器码是经过压缩的。
29.如权利要求27所述的方法,其中,所述根据所述账户地址从所述第二智能合约的账户中读取所述第二智能合约的经过压缩的目标机器码,包括:
根据所述账户地址从所述第二智能合约的账户中读取合约代码文件,所述合约代码文件包括所述第二智能合约的一份或多份经过压缩的机器码以及所述第二智能合约的未经压缩的字节码;
从所述一份或多份经过压缩的机器码中确定所述经过压缩的目标机器码。
30.如权利要求29所述的方法,其中,所述合约代码文件具有唯一标识,所述唯一标识被设置为所述合约代码文件的哈希值,所述第二智能合约的账户具有包含所述合约代码文件的唯一标识在内的概要信息;所述根据所述账户地址从所述第二智能合约的账户中读取合约代码文件,包括:
根据所述账户地址查询所述第二智能合约的账户的概要信息中的所述合约代码文件的唯一标识,并根据所述唯一标识读取所述合约代码文件。
31.如权利要求29所述的方法,其中,所述合约代码文件还包括所述第二智能合约的压缩信息,所述压缩信息指示所述合约代码文件中的第二智能合约的机器码是经过压缩的和/或用于压缩所述合约代码文件中的第二智能合约的机器码的算法;所述对所述经过压缩的目标机器码进行解压缩,包括:
根据所述压缩信息对所述经过压缩的目标机器码进行解压缩。
32.一种在区块链中调用智能合约的装置,其中,包括处理器和存储设备,所述存储设备用于存储指令,当所述处理器执行指令时,实现如权利要求27~31中任一项所述的方法。
33.一种在区块链中调用智能合约的系统,其中,所述系统用于在调用第一智能合约的过程中:
从调用第二智能合约的语句中确定第二智能合约的账户地址;
根据所述账户地址从所述第二智能合约的账户中读取所述第二智能合约的经过压缩的目标机器码;
对所述经过压缩的目标机器码进行解压缩,并执行得到的解压缩后的目标机器码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2022/070464 WO2022148390A1 (zh) | 2020-06-05 | 2022-01-06 | 一种在区块链中部署、更新、调用智能合约的方法 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010505361 | 2020-06-05 | ||
CN2020105053617 | 2020-06-05 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112835975A true CN112835975A (zh) | 2021-05-25 |
CN112835975B CN112835975B (zh) | 2023-09-29 |
Family
ID=75929579
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110030424.2A Active CN112835975B (zh) | 2020-06-05 | 2021-01-11 | 一种在区块链中部署、更新、调用智能合约的方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN112835975B (zh) |
WO (1) | WO2022148390A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113256423A (zh) * | 2021-06-11 | 2021-08-13 | 武汉龙津科技有限公司 | 通证分配触发设置方法、装置、电子设备及存储介质 |
CN113721947A (zh) * | 2021-07-21 | 2021-11-30 | 杭州溪塔科技有限公司 | 一种区块链合约原地址升级的方法和装置 |
WO2022148390A1 (zh) * | 2020-06-05 | 2022-07-14 | 支付宝(杭州)信息技术有限公司 | 一种在区块链中部署、更新、调用智能合约的方法 |
US20240094998A1 (en) * | 2022-09-21 | 2024-03-21 | Circle Internet Financial, Inc. | Smart contract distribution infrastructure |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115021945B (zh) * | 2022-08-08 | 2022-11-08 | 四块科技(深圳)有限公司 | 区块链交易处理方法和系统 |
CN116700628B (zh) * | 2023-08-01 | 2024-02-02 | 腾讯科技(深圳)有限公司 | 区块链数据处理方法、装置、计算机设备和存储介质 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160085955A1 (en) * | 2013-06-10 | 2016-03-24 | Doosra, Inc. | Secure Storing and Offline Transferring of Digitally Transferable Assets |
US20160378452A1 (en) * | 2015-06-29 | 2016-12-29 | Mediatek Inc. | Policy-Based Compression of Machine Code Generated by a Virtual Machine |
US20170031940A1 (en) * | 2015-07-31 | 2017-02-02 | Netapp, Inc. | Compression file structure |
CN108563796A (zh) * | 2018-05-04 | 2018-09-21 | 蔷薇信息技术有限公司 | 区块链的数据压缩处理方法、装置及电子设备 |
CN108765158A (zh) * | 2018-05-31 | 2018-11-06 | 杭州秘猿科技有限公司 | 一种基于区块链的智能合约引擎系统及其合约执行方法 |
CN109445773A (zh) * | 2018-09-27 | 2019-03-08 | 深圳点猫科技有限公司 | 一种基于编程语言提升浏览器性能的方法以及电子设备 |
CN110060158A (zh) * | 2019-03-07 | 2019-07-26 | 阿里巴巴集团控股有限公司 | 基于变长编码的智能合约执行方法和装置 |
CN110147202A (zh) * | 2019-05-15 | 2019-08-20 | 杭州云象网络技术有限公司 | 一种减少区块链智能合约代码存储体积的方法 |
CN110249307A (zh) * | 2018-12-29 | 2019-09-17 | 阿里巴巴集团控股有限公司 | 用于在区块链上执行原生合约的系统和方法 |
CN110309117A (zh) * | 2019-07-08 | 2019-10-08 | 匿名科技(重庆)集团有限公司 | 一种高可用区块链存储方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103563255B (zh) * | 2011-04-11 | 2017-07-14 | 马维尔国际贸易有限公司 | 用于可执行代码的压缩与实时解压缩的方法 |
CN109711839A (zh) * | 2018-12-13 | 2019-05-03 | 平安科技(深圳)有限公司 | 基于数据压缩的区块链存储方法、装置、设备和存储介质 |
CN109710384B (zh) * | 2018-12-29 | 2021-02-23 | 杭州趣链科技有限公司 | 一种安全的Java智能合约解释执行引擎及方法 |
US10795882B2 (en) * | 2019-04-30 | 2020-10-06 | Alibaba Group Holding Limited | Blockchain-based data compression and searching |
CN111459895B (zh) * | 2020-03-31 | 2023-09-29 | 杭州云象网络技术有限公司 | 一种区块链数据分级压缩与存储方法及系统 |
CN112835975B (zh) * | 2020-06-05 | 2023-09-29 | 支付宝(杭州)信息技术有限公司 | 一种在区块链中部署、更新、调用智能合约的方法 |
CN111815330A (zh) * | 2020-08-31 | 2020-10-23 | 支付宝(杭州)信息技术有限公司 | 一种部署智能合约的方法、区块链节点和存储介质 |
CN111768184A (zh) * | 2020-08-31 | 2020-10-13 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法及区块链节点 |
-
2021
- 2021-01-11 CN CN202110030424.2A patent/CN112835975B/zh active Active
-
2022
- 2022-01-06 WO PCT/CN2022/070464 patent/WO2022148390A1/zh active Application Filing
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160085955A1 (en) * | 2013-06-10 | 2016-03-24 | Doosra, Inc. | Secure Storing and Offline Transferring of Digitally Transferable Assets |
US20160378452A1 (en) * | 2015-06-29 | 2016-12-29 | Mediatek Inc. | Policy-Based Compression of Machine Code Generated by a Virtual Machine |
CN106293870A (zh) * | 2015-06-29 | 2017-01-04 | 联发科技股份有限公司 | 计算机系统及其策略导向压缩方法 |
US20170031940A1 (en) * | 2015-07-31 | 2017-02-02 | Netapp, Inc. | Compression file structure |
CN108563796A (zh) * | 2018-05-04 | 2018-09-21 | 蔷薇信息技术有限公司 | 区块链的数据压缩处理方法、装置及电子设备 |
CN108765158A (zh) * | 2018-05-31 | 2018-11-06 | 杭州秘猿科技有限公司 | 一种基于区块链的智能合约引擎系统及其合约执行方法 |
CN109445773A (zh) * | 2018-09-27 | 2019-03-08 | 深圳点猫科技有限公司 | 一种基于编程语言提升浏览器性能的方法以及电子设备 |
CN110249307A (zh) * | 2018-12-29 | 2019-09-17 | 阿里巴巴集团控股有限公司 | 用于在区块链上执行原生合约的系统和方法 |
CN110060158A (zh) * | 2019-03-07 | 2019-07-26 | 阿里巴巴集团控股有限公司 | 基于变长编码的智能合约执行方法和装置 |
CN110147202A (zh) * | 2019-05-15 | 2019-08-20 | 杭州云象网络技术有限公司 | 一种减少区块链智能合约代码存储体积的方法 |
CN110309117A (zh) * | 2019-07-08 | 2019-10-08 | 匿名科技(重庆)集团有限公司 | 一种高可用区块链存储方法 |
Non-Patent Citations (1)
Title |
---|
杨群;杨献春;许满武;: "代码缩减技术的研究" * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022148390A1 (zh) * | 2020-06-05 | 2022-07-14 | 支付宝(杭州)信息技术有限公司 | 一种在区块链中部署、更新、调用智能合约的方法 |
CN113256423A (zh) * | 2021-06-11 | 2021-08-13 | 武汉龙津科技有限公司 | 通证分配触发设置方法、装置、电子设备及存储介质 |
CN113721947A (zh) * | 2021-07-21 | 2021-11-30 | 杭州溪塔科技有限公司 | 一种区块链合约原地址升级的方法和装置 |
US20240094998A1 (en) * | 2022-09-21 | 2024-03-21 | Circle Internet Financial, Inc. | Smart contract distribution infrastructure |
US12079606B2 (en) * | 2022-09-21 | 2024-09-03 | Circle Internet Financial Limited | Smart contract distribution infrastructure |
Also Published As
Publication number | Publication date |
---|---|
CN112835975B (zh) | 2023-09-29 |
WO2022148390A1 (zh) | 2022-07-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112835975B (zh) | 一种在区块链中部署、更新、调用智能合约的方法 | |
CN109710384B (zh) | 一种安全的Java智能合约解释执行引擎及方法 | |
US11354144B2 (en) | Java native interface and windows universal app hooking | |
CN111095198B (zh) | 用于数据处理的系统和方法 | |
CN108027722B (zh) | 在编译和部署中动态更新应用 | |
CN111095338B (zh) | 用于执行不同类型区块链合约的系统和方法 | |
CN111179086B (zh) | 一种基于WebAssembly的智能合约虚拟机 | |
US6651186B1 (en) | Remote incremental program verification using API definitions | |
CN109614165B (zh) | 一种com组件的多版本并行运行方法和装置 | |
US10635420B2 (en) | Overriding a migrated method in an updated type | |
CN111770204B (zh) | 一种执行智能合约的方法、区块链节点和存储介质 | |
CN111176791A (zh) | 一种基于多虚拟机区块链平台跨虚拟机调用方法 | |
CN111770116B (zh) | 一种执行智能合约的方法、区块链节点、存储介质 | |
CN111768183B (zh) | 一种执行智能合约的方法、区块链节点和存储介质 | |
CN111815310B (zh) | 一种执行智能合约的方法、区块链节点和存储介质 | |
CN108229107A (zh) | 一种Android平台应用程序的脱壳方法及容器 | |
WO2022110775A1 (zh) | 一种无服务容器启动方法及相关设备 | |
EP3961437B1 (en) | Method for executing smart contract, blockchain node, and storage medium | |
CN112882694A (zh) | 一种程序编译方法、装置、电子设备及可读存储介质 | |
CN111367512B (zh) | 一种应用程序开发中创建Android库模块依赖关系的方法及装置 | |
US8250589B2 (en) | Method for simplifying interfaces having dynamic libraries | |
CN115344275A (zh) | 操作系统的镜像文件生成方法、装置和计算机设备 | |
CN112287306B (zh) | 一种应用程序安装包的保护方法、装置及计算机可读存储介质 | |
CN114579135B (zh) | 一种安装包生成方法及装置 | |
LU102412B1 (en) | A Method and Apparatus for Embedding Codes in an Application, and an Electronic Device |
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 |