CN111723102A - 一种智能合约的更新方法和装置 - Google Patents

一种智能合约的更新方法和装置 Download PDF

Info

Publication number
CN111723102A
CN111723102A CN202010849782.1A CN202010849782A CN111723102A CN 111723102 A CN111723102 A CN 111723102A CN 202010849782 A CN202010849782 A CN 202010849782A CN 111723102 A CN111723102 A CN 111723102A
Authority
CN
China
Prior art keywords
intelligent contract
issued
test
execution result
historical
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.)
Pending
Application number
CN202010849782.1A
Other languages
English (en)
Inventor
蒋海滔
林鹏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alipay Hangzhou Information Technology Co Ltd
Original Assignee
Alipay Hangzhou Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alipay Hangzhou Information Technology Co Ltd filed Critical Alipay Hangzhou Information Technology Co Ltd
Priority to CN202010849782.1A priority Critical patent/CN111723102A/zh
Publication of CN111723102A publication Critical patent/CN111723102A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION 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
    • G06Q40/00Finance; Insurance; Tax strategies; Processing of corporate or income taxes
    • G06Q40/04Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Accounting & Taxation (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Finance (AREA)
  • Computing Systems (AREA)
  • Development Economics (AREA)
  • Economics (AREA)
  • Marketing (AREA)
  • Strategic Management (AREA)
  • Technology Law (AREA)
  • General Business, Economics & Management (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

说明书披露一种智能合约的更新方法和装置。一种智能合约的更新方法,包括:从区块链中获取已发布的目标智能合约执行过的历史交易;在测试环境中调用待发布智能合约执行所述历史交易,得到测试执行结果;将所述历史交易对应的历史执行结果和所述测试执行结果进行比对,并基于比对结果判断所述待发布智能合约是否通过测试;若通过,则将所述待发布智能合约发布至区块链,以更新所述目标智能合约。

Description

一种智能合约的更新方法和装置
技术领域
本说明书涉及区块链技术领域,特别涉及一种智能合约的更新方法和装置。
背景技术
区块链技术,也被称之为分布式账本技术,是一种由若干台计算设备共同参与“记账”,共同维护一份完整的分布式数据库的新兴技术。智能合约是在区块链上可以被交易触发执行的合约。
发明内容
有鉴于此,本说明书提供一种智能合约的更新方法和装置。
具体地,本说明书是通过如下技术方案实现的:
一种智能合约的更新方法,包括:
从区块链中获取已发布的目标智能合约执行过的历史交易;
在测试环境中调用待发布智能合约执行所述历史交易,得到测试执行结果;
将所述历史交易对应的历史执行结果和所述测试执行结果进行比对,并基于比对结果判断所述待发布智能合约是否通过测试;
若通过,则将所述待发布智能合约发布至区块链,以更新所述目标智能合约。
一种智能合约的更新装置,包括:
获取单元,从区块链中获取已发布的目标智能合约执行过的历史交易;
执行单元,在测试环境中调用待发布智能合约执行所述历史交易,得到测试执行结果;
比对单元,将所述历史交易对应的历史执行结果和所述测试执行结果进行比对,并基于比对结果判断所述待发布智能合约是否通过测试;
更新单元,若通过,则将所述待发布智能合约发布至区块链,以更新所述目标智能合约。
一种智能合约的更新装置,包括:
处理器;
用于存储机器可执行指令的存储器;
其中,通过读取并执行所述存储器存储的与智能合约的更新逻辑对应的机器可执行指令,所述处理器被促使:
从区块链中获取已发布的目标智能合约执行过的历史交易;
在测试环境中调用待发布智能合约执行所述历史交易,得到测试执行结果;
将所述历史交易对应的历史执行结果和所述测试执行结果进行比对,并基于比对结果判断所述待发布智能合约是否通过测试;
若通过,则将所述待发布智能合约发布至区块链,以更新所述目标智能合约。
本说明书一个实施例实现了,可以从区块链中获取已发布的目标智能合约执行过的历史交易,然后在测试环境中调用待发布智能合约执行所述历史交易,得到测试执行结果,将所述测试执行结果和历史交易对应的历史执行结果进行比对,基于比对结果判断待发布智能合约是否通过测试,若通过测试,则将所述待发布智能合约发布至区块链,以对所述目标智能合约进行更新。
采用上述方法,可以在待发布智能合约发布前,利用历史交易对其进行测试,并且在测试通过的情况下再发布待发布智能合约,避免了因待发布智能合约存在错误导致区块链上数据出错的问题。
附图说明
图1为本说明书一示例性实施例示出的一种智能合约的创建和调用方法的示意图;
图2为本说明书一示例性实施例示出的一种智能合约的更新方法的流程示意图;
图3为本说明书一示例性实施例示出的另一种智能合约的更新方法的流程示意图;
图4为本说明书一示例性实施例示出的一种智能合约的更新装置所在的电子设备的一结构示意图;
图5为本说明书一示例性实施例示出的一种智能合约的更新装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
区块链技术,也被称之为分布式账本技术,是一种由若干台计算设备共同参与“记账”,共同维护一份完整的分布式数据库的新兴技术。区块链可以被划分为三种类型:公有链(Public Blockchain),私有链(Private Blockchain)和联盟链(ConsortiumBlockchain)。此外,还可以有上述多种类型的结合,比如私有链+联盟链、联盟链+公有链等。
在实际应用中,不论是公有链、私有链还是联盟链,都可能提供智能合约(Smartcontract)的功能。智能合约是在区块链上可以被交易触发执行的合约,可以通过代码的形式定义。通过在智能合约中声名的业务逻辑可以实现执行相应操作。智能合约允许在没有第三方的情况下进行可信交易。这些交易可追踪且不可逆转。智能合约能够提供优于传统合同方法的安全,并减少与传统合同相关的其它交易成本。
智能合约发布后并不是一劳永逸的,特别是当构建的区块链系统比较复杂时,很可能会出现漏洞等情况,有必要根据实际情况更新智能合约,以修补其存在的问题或不足、添加新功能等等。
相关技术中,当需要更新智能合约时,一般会直接采用新的智能合约代替已发布的智能合约。然而,若新的智能合约发布后,发现其存在问题,就会影响整个区块链上的数据。并且,出于区块链可追踪不可逆转的属性,区块链上的数据不容易被修改,错误的数据也无法被简单地修正,这会带来极大的安全风险。
基于此,本说明书提供了一种智能合约的更新方法和装置。
首先对区块链上智能合约的创建、调用以及执行交易进行说明。
请参见图1,图1为本说明书一示例性实施例示出的一种智能合约的创建和调用方法的示意图。
图1的区块链中存在5个区块链节点,分别为节点1至节点5。每个区块链节点都可以运行对应的虚拟机(Embedded Virtual Machine,EVM)。图1中每个节点都只存在一个对应的EVM,在实际情况下每个节点也可以存在对应的多台EVM。用户在区块链上发布和调用智能合约就是在EVM上运行的。实际上,EVM直接运行的是虚拟机代码(虚拟机字节码,下简称“字节码”),所以部署在区块链上的智能合约可以是字节码。图1的区块链中还存在一个状态服务器,用于记录区块链各节点执行交易前后的状态信息。
需要说明的是,在本说明书中所描述的交易,可以是指通过区块链客户端创建,并需要最终发布至区块链的数据存储系统中的一笔数据。
创建一个智能合约,需要经过编写智能合约、变成字节码、部署到区块链等过程。如图1所示,可以先通过高级语言编写智能合约,然后将智能合约编译为字节码,再对字节码进行打包得到交易(Transaction)。其中,交易的From字段用于记录发起创建智能合约的账户的地址,交易的To字段的字段值可以为一个null(空)的账户,交易的Data字段的字段值保存的合约代码可以是字节码,交易的Signature字段为签名。然后可以将一笔包含创建智能合约信息的交易(即图1中的交易1)发送到区块链,那么节点1—5均可以在EVM中执行这笔交易,并且,当5个节点间通过共识机制达成一致后,这个智能合约就成功创建了。
智能合约创建后,区块链上会出现一个与该智能合约对应的合约账户,并拥有一个特定的地址;比如,图1中各节点的“0x68e12cf284…”就代表了创建的这个合约账户的地址。
智能合约创建后,用户可以直接调用这个智能合约来执行交易。请继续参见图1,用户可以发送一笔包含调用智能合约信息的交易(即图1中的交易2)给区块链,实现该智能合约的调用。其中,交易2中仍然可以包括上述From字段、To字段、Date字段等,From字段用于记录发起调用智能合约的账户的地址,To字段用于记录被调用的智能合约的地址,交易的Data字段用于记录调用智能合约的方法和参数(未图示)。
智能合约被调用后,所有交易相关的执行记录和数据都可以保存在区块链上,形成了无法篡改、不会丢失的交易凭证。并且,各个区块链节点交易执行前后的状态都可以保存在状态服务器中。
举例来说,假设创建的智能合约中记载的业务逻辑可以实现转账的功能,若小明想要发起转账,那么小明所使用的客户端可以基于所述智能合约发起一笔交易,该笔交易中可以包括一些转账相关的参数,如小明的账户余额、收款方等,并且该笔交易中还可以包括所述智能合约的地址信息(比如图1中的“0x68e12cf284…”)。然后可以在区块链中任意一个区块链节点(比如节点1)上执行这笔交易。节点1接收到这笔交易后,可以根据交易中包含的上述参数以及智能合约的地址,利用所述智能合约进行计算得到执行结果,以完成转账。
阐明了区块链中智能合约的创建、调用以及执行交易后,下面对本说明书提供的一种智能合约的更新方法进行说明。
请参见图2,图2为本说明书一示例性实施例示出的一种智能合约的更新方法的流程示意图。
所述智能合约的更新方法可以应用于具有处理器、存储器的电子设备中,本说明书对此不作特殊限制。
所述方法可以包括以下步骤:
步骤102,从区块链中获取已发布的目标智能合约执行过的历史交易。
首先需要说明的是,本实施例中的目标智能合约为区块链上已发布的,需要被更新的智能合约;待发布智能合约为未发布的、用于更新所述目标智能合约的智能合约。
本实施例中,开发人员可以确定一个需要更新的目标智能合约,然后基于所述目标智能合约编写待发布智能合约,所述待发布智能合约可以是用于对已发布的目标智能合约中的不足之处进行改进,也可以是用于增加新的功能等,本实施例对此不作特殊限制。
本步骤中,区块链上的每笔历史交易中都可以包括该笔交易对应的智能合约的地址信息,即用于说明该笔交易是调用了哪个智能合约。可以理解为历史交易和智能合约之间存在映射关系,可以基于所述映射关系,从区块链上获取目标智能合约执行过的历史交易。
例如,可以获取预设时间段内目标智能合约执行过的历史交易,如最近一个月、最近一个季度等。
当然,也可以获取其他历史交易,比如全量历史交易,本实施例对此不作特殊限制。
本步骤中,区块链上的每个节点都可以按照规定的方式独立地执行目标智能合约,并且所有执行记录和数据都可以保存在区块链上。其中,区块链中的每个节点可以存储有历史交易相关的参数信息,而历史交易执行前、后的状态则可以存储在区块链中单独用于存储状态的服务器中(下称为状态服务器,如图1所示)。
由于各节点在执行历史交易时,实际上是获取历史交易相关的参数信息,利用智能合约对所述参数信息进行处理。本步骤中所指的获取历史交易,实际上是指获取历史交易中的所述参数信息。
可以从区块链中任一节点上已存储的数据中获取所述历史交易相关的参数信息,比如可以通过图1中的节点1来获取所述参数信息。
所述参数信息可以包括交易发起方、交易时间。当然,也可以包括其它信息。
举例来说,假设历史交易为一条转账交易:小明将20元转账给小白。那么针对这一转账交易,可以获取以下的参数信息:发起方小明、接收方小白、转账金额为20元。
上述例子仅仅为示意性的说明,在实际情况下也可以获取其它历史交易相关的参数信息,本实施例对此不作特殊限制。
步骤104,在测试环境中调用待发布智能合约执行所述历史交易,得到测试执行结果;
步骤106,将所述历史交易对应的历史执行结果和所述测试执行结果进行比对,并基于比对结果判断所述待发布智能合约是否通过测试;
本实施例中,获取历史交易后,可以在测试环境中调用待发布智能合约执行所述历史交易,得到测试执行结果。
在一个例子中,可以调用待发布智能合约,逐条地执行所述历史交易。
在另一个例子中,当历史交易的数量较多时,也可以通过多个脚本调用待发布智能合约,并行地执行所述历史交易。
其中,可以通过以下的方法来获取历史执行结果:
在一个例子中,可以从区块链中直接获取已存储的所述历史交易对应的历史执行结果。如前述内容所说,区块链中,每笔历史交易执行前、后的状态可以存储在状态服务器中,那么可以从所述状态服务器中获取历史执行结果。
仍以上述转账的例子为例进行说明,假设小明的账号余额为100元,小白的账号余额为0元。小明将20元转账给小白。那么针对这一转账交易,可以获取下表1中的历史执行结果:
Figure DEST_PATH_IMAGE001
当然,上表1仅仅为示意性的例子,并不用于限制本说明书。
值得说明的是,本实施例中,可以在步骤106中获取历史执行结果,也可以在步骤102中不仅仅获取历史交易,还获取历史交易的历史执行结果,本实施例对此不作特殊限制。
在另一个例子中,也可以通过“回放”历史交易的方法,来得到历史交易对应的历史执行结果。
举例来说,可以在测试环境中,调用目标智能合约执行所述历史交易,得到的执行结果即所述历史执行结果。
比如,可以在测试环境中保存目标智能合约的合约代码,然后直接基于已保存的合约代码来执行所述历史交易。
当然,也可以采取其它方法,具体可参照相关技术,在此不再一一说明。
本实施例中,可以将历史交易对应的历史执行结果,和测试执行结果进行比对,然后基于比对结果判断所述待发布智能合约是否通过测试。
在一个例子中,比对的过程中可以判断所述测试执行结果与所述历史执行结果是否一致,若一致,说明待发布智能合约通过测试;若不一致,说明待发布智能合约未通过测试。
下面以一条转账的历史交易为例进行说明,假设历史执行结果为下表2所示,测试执行结果为下表3所示:
Figure DEST_PATH_IMAGE002
Figure DEST_PATH_IMAGE003
其中,Balance_map可以表示账户余额,get可以表示读操作,put可以表示写操作,aabb可以表示小明的账户余额,bbcc可以表示小白的账户余额。
由上表1可知,在使用目标智能合约执行这笔历史交易前,小明的账户余额为100,小白的账户余额为200。在使用目标智能合约执行这笔历史交易后,小明的账户余额为90,小白的账户余额为210。
再看表2,在使用待发布智能合约执行这笔交易前,小明的账户余额为100,小白的账户余额为200。在使用待发布智能合约执行这笔历史交易后,小明的账户余额为90,小白的账户余额为211。
可以得到,待发布智能合约执行历史交易后,小白的账户余额为211,而目标智能合约执行历史交易后,小白的账户余额为210。比较这两个字段的值可以发现,待发布智能合约和目标智能合约的执行结果不一致,说明这两个智能合约的业务逻辑很可能不一致。在这种情况下,可以确定待发布智能合约未通过测试。
当然,上述例子仅仅为示意性的说明,在实际情况下也可以采取其它方法对测试执行结果和历史执行结果进行比对,本实施例对此不作特殊限制。
在另一个例子中,比对的过程中还可以判断所述测试执行结果相比于所述历史执行结果的差异是否符合预期差异;若符合所述预期差异,说明待发布智能合约通过测试;若不符合所述预期差异,说明待发布智能合约未通过测试。
其中,预期差异可以是开发人员在编写待发布智能合约的过程中,对所述待发布智能合约和所述目标智能合约进行分析得到的。预期差异可以是待发布智能合约对应的测试执行结果相比于目标智能合约来说,多输出若干个指定字段、少输出若干个指定字段、指定字段的值发生更改,或者也可以是得到新的执行结果等等,具体根据实际需求确定,本实施例对此不作特殊限制。
例如,假设目标智能合约不具备收取手续费的功能,而待发布智能合约具备收取手续费的功能。那么可以获知的是,当利用待发布智能合约执行历史交易后,还可以多输出一个手续费相关的fee字段,并且,由于目标智能合约并不具备收取手续费的功能,多输出的fee字段的值可能为0。
在这一例子中,可以通过判断待发布智能合约执行历史交易后,是否多输出了一个fee字段,并且该字段的值是否为0,来确定测试执行结果是否符合预期差异。
当然,在其它例子中,也可以采取其它方法,本说明书对此不作特殊限制。
本实施例中,当存在多条历史交易时,针对每条历史交易都可以采用上述方法进行比对,得到比对结果。
在一个例子中,可以在每条历史交易对应的比对结果均通过测试后,才确定待发布智能合约通过测试。
在另一个例子中,也可以在预设比例的历史交易对应的比对结果通过测试后,即可确定待发布智能合约通过测试。所述预设比例可以人为设置,如80%、90%等。
本实施例中,同样可以采用脚本来自动地比对历史执行结果和测试执行结果,并输出比对结果。
在一个例子中,输出的比对结果可以直接为:通过测试或未通过测试。
在另一个例子中,输出的比对结果也可以为:上述两个执行结果是否一致,若不一致,则存在的差异是什么、存在差异的语句有哪些等等。
步骤108,若通过,则将所述待发布智能合约发布至区块链,以更新所述目标智能合约。
本步骤中,若待发布智能合约通过测试,则可以将所述待发布智能合约发布到区块链上。
比如,客户端可以将一笔包含创建智能合约信息的交易发送到区块链,并且在该交易中添加待发布智能合约的合约代码以及该智能合约的地址信息。当区块链上的各个节点执行这笔交易并达成共识后,待发布智能合约更新完成。具体方法请参照相关技术,在此不再赘述。
当然,也可以采取其它方式发布待发布智能合约,本实施例对此不作特殊限制。
由以上描述可以看出,在本说明书的一个实施例中,可以从区块链中获取已发布的目标智能合约执行过的历史交易,然后在测试环境中调用待发布智能合约执行所述历史交易,得到测试执行结果,将所述测试执行结果和历史交易对应的历史执行结果进行比对,基于比对结果判断待发布智能合约是否通过测试,若通过测试,则将所述待发布智能合约发布至区块链,以对所述目标智能合约进行更新。
采用上述方法,可以在待发布智能合约发布前,利用历史交易对其进行测试,并且在测试通过的情况下再发布待发布智能合约,避免了因待发布智能合约存在错误导致区块链上数据出错的问题。
请参见图3,图3为本说明书一示例性实施例示出的另一种智能合约的更新方法的流程示意图。
所述智能合约的更新方法同样可以应用在具有存储器、处理器的电子设备上。所述方法可以包括以下步骤:
步骤202,从区块链中获取已发布的目标智能合约执行过的历史交易;
步骤204,在测试环境中调用待发布智能合约执行所述历史交易,得到测试执行结果;
步骤206,将所述历史交易对应的历史执行结果和所述测试执行结果进行比对,并基于比对结果判断所述待发布智能合约是否通过测试;
步骤208,若通过,则将所述待发布智能合约发布至区块链,以更新所述目标智能合约;
步骤210,若未通过,则基于所述比对结果对所述待发布智能合约的合约代码进行修改,得到修改后的待发布智能合约。
其中,步骤202-步骤208请参照前述实施例中的步骤102-步骤108,在此不再赘述。
本实施例中,步骤206中,若待发布智能合约未通过测试,则可以执行步骤210。可以基于比对结果对待发布智能合约进行修改。
在一个例子中,比对结果中可以包括测试执行结果和历史执行结果之间存在哪些差异、和所述差异相关的语句有哪些等等。比如可以采用diff工具来输出上述信息。可以基于这些信息对待发布智能合约进行修改。
下面以一个具体的例子进行说明。
假设对输出的比对结果进行分析后,得到的目标智能合约对Key-Value存储的读写可以表示为:
get key1 ->value1 // 访问key1,获得值value1;
get key2 ->value2 // 访问key2,获得值value2;
put key1<- value3 // 设置key1的值为value3;
put key2<- value4 // 设置key2的值为value4。
分析得到的待发布智能合约对Key-Value存储的读写可以表示为:
get key1 ->value1 // 访问key1,获得值value1;
get key2-> value2 // 访问key2,获得值value2;
put key1<- value3 // 设置key1的值为value3;
put key2<- value5 // 设置key2的值为value5。
可见,待发布智能合约将key2的值设为了value5,而目标智能合约将Key2的值设为了value4,两者并不一致。那么可以基于这一信息来对待发布智能合约进行修改。
当然,上述例子仅仅是示意性的说明,并不用于限制本说明书。
本实施例中,还可以基于修改后的待发布智能合约再次执行步骤206,若修改后的待发布智能合约通过测试,则可以将修改后的待发布智能合约发布到区块链上;反之,若修改后的待发布智能合约未通过测试,则可以再次执行步骤210以对其进行修改,直到修改后的待发布智能合约通过测试。
由以上描述可以看出,在本说明书的一个实施例中,当待发布智能合约未通过测试时,还可以基于比对结果对待发布智能合约进行修改,并且对修改后的待发布智能合约再次进行测试,直到其通过测试。可以使最终发布的待发布智能合约为逻辑正确、符合开发人员期望的智能合约,避免了因待发布智能合约存在错误导致区块链上数据出错的问题。
与前述智能合约的更新方法的实施例相对应,本说明书还提供了智能合约的更新装置的实施例。
本说明书智能合约的更新装置的实施例可以应用在电子设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图4所示,为本说明书智能合约的更新装置所在电子设备的一种硬件结构图,除了图4所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的电子设备通常根据该电子设备的实际功能,还可以包括其他硬件,对此不再赘述。
图5为本说明书一示例性实施例示出的一种智能合约的更新装置的框图。
请参考图5,所述智能合约的更新装置500可以应用在前述图4所示的电子设备中,包括有:获取单元510、执行单元520、比对单元530、更新单元540和修改单元550。
其中,获取单元510,从区块链中获取已发布的目标智能合约执行过的历史交易;
执行单元520,在测试环境中调用待发布智能合约执行所述历史交易,得到测试执行结果;
比对单元530,将所述历史交易对应的历史执行结果和所述测试执行结果进行比对,并基于比对结果判断所述待发布智能合约是否通过测试;
更新单元540,若通过,则将所述待发布智能合约发布至区块链,以更新所述目标智能合约。
可选的,所述历史执行结果的获取过程,包括:
从区块链中获取已存储的所述历史交易对应的历史执行结果。
可选的,所述历史执行结果的获取过程,包括:
在测试环境中调用所述目标智能合约执行所述历史交易,得到所述历史执行结果。
可选的,所述比对单元在基于比对结果判断所述待发布智能合约是否通过测试时:
判断所述测试执行结果与所述历史执行结果是否一致;
若一致,则确定所述待发布智能合约通过测试;
若不一致,则确定所述待发布智能合约未通过测试。
可选的,所述比对单元530在基于比对结果判断所述待发布智能合约是否通过测试时:
判断所述测试执行结果相比于所述历史执行结果的差异是否符合预期差异;
若符合所述预期差异,则确定所述待发布智能合约通过测试;
若不符合所述预期差异,则确定所述待发布智能合约未通过测试。
可选的,所述装置还包括:
修改单元550,基于所述比对结果对所述待发布智能合约的合约代码进行修改。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
与前述智能合约的更新方法的实施例相对应,本说明书还提供一种智能合约的更新装置,该装置包括:处理器以及用于存储机器可执行指令的存储器。其中,处理器和存储器通常借由内部总线相互连接。在其他可能的实现方式中,所述设备还可能包括外部接口,以能够与其他设备或者部件进行通信。
在本实施例中,通过读取并执行所述存储器存储的与智能合约的更新逻辑对应的机器可执行指令,所述处理器被促使:
从区块链中获取已发布的目标智能合约执行过的历史交易;
在测试环境中调用待发布智能合约执行所述历史交易,得到测试执行结果;
将所述历史交易对应的历史执行结果和所述测试执行结果进行比对,并基于比对结果判断所述待发布智能合约是否通过测试;
若通过,则将所述待发布智能合约发布至区块链,以更新所述目标智能合约。
可选的,在所述历史执行结果的获取过程,所述处理器被促使:
从区块链中获取已存储的所述历史交易对应的历史执行结果。
可选的,在所述历史执行结果的获取过程,所述处理器被促使:
在测试环境中调用所述目标智能合约执行所述历史交易,得到所述历史执行结果。
可选的,在所述基于比对结果判断所述待发布智能合约是否通过测试时,所述处理器被促使:
判断所述测试执行结果与所述历史执行结果是否一致;
若一致,则确定所述待发布智能合约通过测试;
若不一致,则确定所述待发布智能合约未通过测试。
可选的,在所述基于比对结果判断所述待发布智能合约是否通过测试时,所述处理器被促使:
判断所述测试执行结果相比于所述历史执行结果的差异是否符合预期差异;
若符合所述预期差异,则确定所述待发布智能合约通过测试;
若不符合所述预期差异,则确定所述待发布智能合约未通过测试。
可选的,当所述待发布智能合约未通过测试时,所述处理器还被促使:
基于所述比对结果对所述待发布智能合约的合约代码进行修改。
与前述智能合约的更新方法的实施例相对应,本说明书还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现以下步骤:
从区块链中获取已发布的目标智能合约执行过的历史交易;
在测试环境中调用待发布智能合约执行所述历史交易,得到测试执行结果;
将所述历史交易对应的历史执行结果和所述测试执行结果进行比对,并基于比对结果判断所述待发布智能合约是否通过测试;
若通过,则将所述待发布智能合约发布至区块链,以更新所述目标智能合约。
可选的,所述历史执行结果的获取过程,包括:
从区块链中获取已存储的所述历史交易对应的历史执行结果。
可选的,所述历史执行结果的获取过程,包括:
在测试环境中调用所述目标智能合约执行所述历史交易,得到所述历史执行结果。
可选的,所述基于比对结果判断所述待发布智能合约是否通过测试,包括:
判断所述测试执行结果与所述历史执行结果是否一致;
若一致,则确定所述待发布智能合约通过测试;
若不一致,则确定所述待发布智能合约未通过测试。
可选的,所述基于比对结果判断所述待发布智能合约是否通过测试,包括:
判断所述测试执行结果相比于所述历史执行结果的差异是否符合预期差异;
若符合所述预期差异,则确定所述待发布智能合约通过测试;
若不符合所述预期差异,则确定所述待发布智能合约未通过测试。
可选的,当所述待发布智能合约未通过测试时,所述方法还包括:
基于所述比对结果对所述待发布智能合约的合约代码进行修改。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。

Claims (13)

1.一种智能合约的更新方法,包括:
从区块链中获取已发布的目标智能合约执行过的历史交易;
在测试环境中调用待发布智能合约执行所述历史交易,得到测试执行结果;
将所述历史交易对应的历史执行结果和所述测试执行结果进行比对,并基于比对结果判断所述待发布智能合约是否通过测试;
若通过,则将所述待发布智能合约发布至区块链,以更新所述目标智能合约。
2.根据权利要求1所述方法,所述历史执行结果的获取过程,包括:
从区块链中获取已存储的所述历史交易对应的历史执行结果。
3.根据权利要求1所述方法,所述历史执行结果的获取过程,包括:
在测试环境中调用所述目标智能合约执行所述历史交易,得到所述历史执行结果。
4.根据权利要求1所述方法,所述基于比对结果判断所述待发布智能合约是否通过测试,包括:
判断所述测试执行结果与所述历史执行结果是否一致;
若一致,则确定所述待发布智能合约通过测试;
若不一致,则确定所述待发布智能合约未通过测试。
5.根据权利要求1所述方法,所述基于比对结果判断所述待发布智能合约是否通过测试,包括:
判断所述测试执行结果相比于所述历史执行结果的差异是否符合预期差异;
若符合所述预期差异,则确定所述待发布智能合约通过测试;
若不符合所述预期差异,则确定所述待发布智能合约未通过测试。
6.根据权利要求1至5任一项所述方法,当所述待发布智能合约未通过测试时,所述方法还包括:
基于所述比对结果对所述待发布智能合约的合约代码进行修改。
7.一种智能合约的更新装置,包括:
获取单元,从区块链中获取已发布的目标智能合约执行过的历史交易;
执行单元,在测试环境中调用待发布智能合约执行所述历史交易,得到测试执行结果;
比对单元,将所述历史交易对应的历史执行结果和所述测试执行结果进行比对,并基于比对结果判断所述待发布智能合约是否通过测试;
更新单元,若通过,则将所述待发布智能合约发布至区块链,以更新所述目标智能合约。
8.根据权利要求7所述装置,所述历史执行结果的获取过程,包括:
从区块链中获取已存储的所述历史交易对应的历史执行结果。
9.根据权利要求7所述装置,所述历史执行结果的获取过程,包括:
在测试环境中调用所述目标智能合约执行所述历史交易,得到所述历史执行结果。
10.根据权利要求7所述装置,所述比对单元在基于比对结果判断所述待发布智能合约是否通过测试时:
判断所述测试执行结果与所述历史执行结果是否一致;
若一致,则确定所述待发布智能合约通过测试;
若不一致,则确定所述待发布智能合约未通过测试。
11.根据权利要求7所述装置,所述比对单元在基于比对结果判断所述待发布智能合约是否通过测试时:
判断所述测试执行结果相比于所述历史执行结果的差异是否符合预期差异;
若符合所述预期差异,则确定所述待发布智能合约通过测试;
若不符合所述预期差异,则确定所述待发布智能合约未通过测试。
12.根据权利要求7至11任一项所述装置,所述装置还包括:
修改单元,基于所述比对结果对所述待发布智能合约的合约代码进行修改。
13.一种智能合约的更新装置,包括:
处理器;
用于存储机器可执行指令的存储器;
其中,通过读取并执行所述存储器存储的与智能合约的更新逻辑对应的机器可执行指令,所述处理器被促使:
从区块链中获取已发布的目标智能合约执行过的历史交易;
在测试环境中调用待发布智能合约执行所述历史交易,得到测试执行结果;
将所述历史交易对应的历史执行结果和所述测试执行结果进行比对,并基于比对结果判断所述待发布智能合约是否通过测试;
若通过,则将所述待发布智能合约发布至区块链,以更新所述目标智能合约。
CN202010849782.1A 2020-08-21 2020-08-21 一种智能合约的更新方法和装置 Pending CN111723102A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010849782.1A CN111723102A (zh) 2020-08-21 2020-08-21 一种智能合约的更新方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010849782.1A CN111723102A (zh) 2020-08-21 2020-08-21 一种智能合约的更新方法和装置

Publications (1)

Publication Number Publication Date
CN111723102A true CN111723102A (zh) 2020-09-29

Family

ID=72574241

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010849782.1A Pending CN111723102A (zh) 2020-08-21 2020-08-21 一种智能合约的更新方法和装置

Country Status (1)

Country Link
CN (1) CN111723102A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112488838A (zh) * 2020-12-16 2021-03-12 浙江大学德清先进技术与产业研究院 一种基于智能合约的遥感数据交易激励方法
CN113239055A (zh) * 2021-05-17 2021-08-10 浙江网商银行股份有限公司 基于区块链的目标对象验证方法及装置
CN114327759A (zh) * 2021-07-06 2022-04-12 支付宝(杭州)信息技术有限公司 区块链数据的处理方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109408373A (zh) * 2018-09-26 2019-03-01 深圳壹账通智能科技有限公司 智能合约的测试方法、计算机可读存储介质及测试终端
CN109670951A (zh) * 2018-11-19 2019-04-23 苏宁易购集团股份有限公司 一种区块链智能合约调试发布方法及系统

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109408373A (zh) * 2018-09-26 2019-03-01 深圳壹账通智能科技有限公司 智能合约的测试方法、计算机可读存储介质及测试终端
CN109670951A (zh) * 2018-11-19 2019-04-23 苏宁易购集团股份有限公司 一种区块链智能合约调试发布方法及系统

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112488838A (zh) * 2020-12-16 2021-03-12 浙江大学德清先进技术与产业研究院 一种基于智能合约的遥感数据交易激励方法
CN113239055A (zh) * 2021-05-17 2021-08-10 浙江网商银行股份有限公司 基于区块链的目标对象验证方法及装置
CN114327759A (zh) * 2021-07-06 2022-04-12 支付宝(杭州)信息技术有限公司 区块链数据的处理方法及装置

Similar Documents

Publication Publication Date Title
US11195231B2 (en) Transaction processing in a service blockchain
US10931440B2 (en) Transaction processing in a service blockchain
CN113836227B (zh) 一种基于区块链的资产申购方法、装置及电子设备
TWI737944B (zh) 基於區塊鏈的交易執行方法及裝置、電子設備
CN110162470B (zh) 一种区块链的测试方法和装置
CN111723102A (zh) 一种智能合约的更新方法和装置
CN113554516A (zh) 一种基于区块链的违约资产处理方法、装置及电子设备
CN111782668B (zh) 数据结构的读取及更新方法、装置、电子设备
US11556924B2 (en) Blockchain-based payment withholding and agreement signing method, apparatus, and electronic device
US20220147512A1 (en) Blockchain-based transaction methods
CN109598407B (zh) 一种业务流程的执行方法及装置
CN112101938B (zh) 基于区块链的数字印章使用方法、装置及电子设备
US20220036350A1 (en) Cross-border resource transfer authenticity verification method, device and electronic equipment
CN112330181A (zh) 基于区块链的企业信用评价方法及装置
CN109446211B (zh) 一种一致性校验方法及装置
CN112560114B (zh) 调用智能合约的方法及装置
CN110968437A (zh) 一种基于Java智能合约的单个合约并行执行的方法、装置、设备及介质
CN109992285A (zh) 区块链代码块独立升级方法、装置及电子设备
US11250438B2 (en) Blockchain-based reimbursement splitting
CN111506580B (zh) 一种基于中心化块链式账本的交易存储方法
CN110443612B (zh) 一种基于区块链的报销费用分割方法、装置及电子设备
CN110751486B (zh) 智能合约的重放举证方法、系统、电子设备及存储介质
CN114119243B (zh) 基于区块链的池融资管理方法、装置、介质和电子设备
CN115203746A (zh) 数据账户的访问授权方法及装置
CN108710658A (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
RJ01 Rejection of invention patent application after publication

Application publication date: 20200929

RJ01 Rejection of invention patent application after publication