CN111679902A - 基于区块链的智能合约调用方法及装置、电子设备 - Google Patents

基于区块链的智能合约调用方法及装置、电子设备 Download PDF

Info

Publication number
CN111679902A
CN111679902A CN202010818565.6A CN202010818565A CN111679902A CN 111679902 A CN111679902 A CN 111679902A CN 202010818565 A CN202010818565 A CN 202010818565A CN 111679902 A CN111679902 A CN 111679902A
Authority
CN
China
Prior art keywords
contract
sub
intelligent
intelligent contract
calling
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
Application number
CN202010818565.6A
Other languages
English (en)
Other versions
CN111679902B (zh
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.)
Shanghai Ant Chuangjiang 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 CN202010818565.6A priority Critical patent/CN111679902B/zh
Publication of CN111679902A publication Critical patent/CN111679902A/zh
Application granted granted Critical
Publication of CN111679902B publication Critical patent/CN111679902B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • 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)
  • Software Systems (AREA)
  • Business, Economics & Management (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Accounting & Taxation (AREA)
  • Finance (AREA)
  • Computer Security & Cryptography (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)
  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)

Abstract

本说明书一个或多个实施例提供一种基于区块链的智能合约调用方法及装置、电子设备;其中,区块链上部署了智能合约,智能合约包括主智能合约和多个子智能合约;各个子智能合约的合约代码相同;主智能合约包括用于对子智能合约进行调用管理的合约代码;子智能合约包括与业务逻辑对应的合约代码;所述方法应用于区块链中的节点设备,包括:接收发布至区块链的与智能合约对应的包括业务数据的第一合约调用交易;响应于第一合约调用交易,调用主智能合约的合约代码,从多个子智能合约中确定与业务数据对应的第一目标子智能合约;以及,在确定出第一目标子智能合约后,进一步调用第一目标子智能合约的合约代码,基于业务数据执行相应的业务处理。

Description

基于区块链的智能合约调用方法及装置、电子设备
技术领域
本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种基于区块链的智能合约调用方法及装置、电子设备。
背景技术
区块链技术,也被称之为分布式账本技术,是一种由若干台计算设备共同参与“记账”,共同维护一份完整的分布式数据库的新兴技术。由于区块链技术具有去中心化、公开透明、每台计算设备可以参与数据库记录、并且各计算设备之间可以快速的进行数据同步的特性,使得区块链技术已在众多的领域中广泛的进行应用。
发明内容
本说明书提出一种基于区块链的智能合约调用方法;其中,所述区块链上部署了智能合约,所述智能合约包括主智能合约和多个子智能合约;各个子智能合约的合约代码相同;所述主智能合约包括用于对子智能合约进行调用管理的合约代码;所述子智能合约包括与业务逻辑对应的合约代码;所述方法应用于所述区块链中的节点设备,包括:
接收发布至所述区块链的与所述智能合约对应的第一合约调用交易;其中,所述第一合约调用交易用于触发对所述多个子智能合约进行执行调度;所述第一合约调用交易包括业务数据;
响应于所述第一合约调用交易,调用所述主智能合约的合约代码,从所述多个子智能合约中确定与所述业务数据对应的第一目标子智能合约;以及,
在确定出所述第一目标子智能合约后,进一步调用所述第一目标子智能合约的合约代码,基于所述业务数据执行相应的业务处理。
可选地,所述调用管理的合约代码,包括用于对子智能合约进行执行调度的合约代码;
所述调用所述主智能合约的合约代码,从所述多个子智能合约中确定与所述业务数据对应的第一目标子智能合约,包括:
调用所述主智能合约中用于对子智能合约进行执行调度的合约代码,确定各个子智能合约被调用的次数,与所有子智能合约被调用的总次数的比值,是否达到为各个子智能合约预设的调用比例;
将所述比值未达到所述调用比例的子智能合约,确定为与所述业务数据对应的第一目标子智能合约。
可选地,所述将所述比值未达到所述调用比例的子智能合约,确定为与所述业务数据对应的第一目标子智能合约,包括:
如果存在所述比值未达到所述调用比例的一个子智能合约,将所述子智能合约确定为与所述业务数据对应的第一目标子智能合约;
如果存在所述比值未达到所述调用比例的多个子智能合约,从所述多个子智能合约中随机选择一个子智能合约,确定为与所述业务数据对应的第一目标子智能合约;或者,从所述多个子智能合约中选择所述比值最小的子智能合约,确定为与所述业务数据对应的第一目标子智能合约。
可选地,所述调用管理的合约代码还包括用于对子智能合约的调用比例进行更新的合约代码;
所述方法还包括:
接收发布至所述区块链的与所述智能合约对应的第二合约调用交易;其中,所述第二合约调用交易用于触发对所述多个子智能合约中的第二目标子智能合约的调用比例进行更新;所述第二合约调用交易包括所述第二目标子智能合约的合约地址;
响应于所述第二合约调用交易,调用所述主智能合约中用于对子智能合约的调用比例进行更新的合约代码,对所述第二目标子智能合约的调用比例进行更新。
可选地,所述第二合约调用交易还包括更新后的调用比例;或者,调用比例的更新步长;
所述对所述第二目标子智能合约的调用比例进行更新,包括:
将所述第二目标子智能合约的调用比例替换为更新后的调用比例;或者,
基于调用比例的更新步长,对所述第二目标子智能合约的调用比例进行更新。
本说明书还提供一种基于区块链的智能合约更新方法;其中,所述区块链上部署了智能合约,所述智能合约包括主智能合约和多个子智能合约;各个子智能合约的合约代码相同;所述主智能合约包括用于对子智能合约进行调用管理的合约代码;所述子智能合约包括与业务逻辑对应的合约代码;所述方法应用于所述区块链中的节点设备,包括:
接收发布至所述区块链的与所述智能合约对应的第三合约调用交易;其中,所述第三合约调用交易用于触发对子智能合约的合约代码进行更新;所述第三合约调用交易包括与所述子智能合约的合约代码对应的更新代码;
响应于所述第三合约调用交易,调用所述主智能合约的合约代码,基于所述更新代码分别对各个子智能合约的合约代码进行更新。
可选地,所述第三合约调用交易包括的更新代码为发布至所述区块链的所述更新代码对应的hash值;
所述基于所述更新代码分别对各个子智能合约的合约代码进行更新,包括:
基于所述更新代码对应的hash值,分别对各个子智能合约的合约账户中维护的更新前的合约代码对应的hash值进行更新。
可选地,所述调用管理的合约代码包括用于对子智能合约的合约代码进行更新的合约代码;
所述调用所述主智能合约的合约代码,基于所述更新代码分别对各个子智能合约的合约代码进行更新,包括:
调用所述主智能合约中用于对子智能合约的合约代码进行更新的合约代码,将各个子智能合约依次确定为待更新的第三目标子智能合约,并将确定出的第三目标子智能合约切换为禁止调用状态;以及
基于所述更新代码对所述第三目标子智能合约的合约代码进行更新,并在更新完成后将所述第三目标子智能合约切换为允许调用状态。
可选地,所述方法还包括:
接收发布至所述区块链的与所述智能合约对应的第四合约调用交易;其中,所述第四合约调用交易用于触发对所述多个子智能合约进行执行调度;所述第四合约调用交易包括业务数据;
响应于所述第四合约调用交易,调用所述主智能合约的合约代码,从处于允许调用状态的所述子智能合约中,确定与所述业务数据对应的第四目标子智能合约;以及,
在确定出所述第四目标子智能合约后,进一步调用所述第四目标子智能合约的合约代码,基于所述业务数据执行相应的业务处理。
可选地,所述调用管理的合约代码,包括用于对子智能合约进行执行调度的合约代码;
所述调用所述主智能合约的合约代码,从处于允许调用状态的所述子智能合约中,确定与所述业务数据对应的第四目标子智能合约,包括:
调用所述主智能合约中用于对子智能合约进行执行调度的合约代码,确定处于允许调用状态的各个子智能合约被调用的次数,与处于允许调用状态的所有子智能合约被调用的总次数的比值,是否达到为处于允许调用状态的各个子智能合约预设的调用比例;
将处于允许调用状态的各个子智能合约中,所述比值未达到所述调用比例的子智能合约,确定为与所述业务数据对应的第四目标子智能合约。
可选地,所述将确定出的第三目标子智能合约切换为禁止调用状态,包括:
将确定出的第三目标子智能合约的调用比例设置为0;
所述在更新完成后将所述第三目标子智能合约切换为允许调用状态,包括:
在更新完成后将所述第三目标子智能合约的调用比例由0切换为预设比例。
可选地,所述在更新完成后将所述第三目标子智能合约的调用比例由0切换为预设比例,包括:
在更新完成后按照预设的调用比例的更新步长,提高所述第三目标子智能合约的调用比例,并确定针对所述第三目标子智能合约的调用是否处于正常状态;如果是,继续按照所述调用比例的更新步长,提高所述第三目标子智能合约的调用比例,并确定针对所述第三目标子智能合约的调用是否处于正常状态;重复执行提高所述第三目标子智能合约的调用比例,直至将所述第三目标子智能合约的调用比例提高至所述预设比例。
可选地,所述方法还包括:
如果针对所述第三目标子智能合约的调用处于异常状态,将所述第三目标子智能合约的合约代码回滚至更新前的合约代码。
可选地,所述将所述第三目标子智能合约的合约代码回滚至更新前的合约代码,包括:
将所述第三目标子智能合约的合约账户中维护的所述更新代码对应的hash值回滚至更新前的合约代码对应的hash值。
可选地,所述将处于允许调用状态的所述子智能合约中,所述比值未达到所述调用比例的子智能合约,确定为与所述业务数据对应的第四目标子智能合约,包括:
如果处于允许调用状态的各个子智能合约中,存在所述比值未达到所述调用比例的一个子智能合约,将所述子智能合约确定为与所述业务数据对应的第四目标子智能合约;
如果处于允许调用状态的各个子智能合约中,存在所述比值未达到所述调用比例的多个子智能合约,从所述多个子智能合约中随机选择一个子智能合约,确定为与所述业务数据对应的第四目标子智能合约;或者,从所述多个子智能合约中选择所述比值最小的子智能合约,确定为与所述业务数据对应的第四目标子智能合约。
可选地,所述调用管理的合约代码,还包括用于对子智能合约的调用比例进行更新的合约代码;
所述方法还包括:
接收发布至所述区块链的与所述智能合约对应的第五合约调用交易;其中,所述第五合约调用交易用于触发对所述多个子智能合约中的第五目标子智能合约的调用比例进行更新;所述第五合约调用交易包括所述第五目标子智能合约的合约地址;
响应于所述第五合约调用交易,调用所述主智能合约中用于对子智能合约的调用比例进行更新的合约代码,对所述第五目标子智能合约的调用比例进行更新。
可选地,所述第五合约调用交易还包括更新后的调用比例;或者,调用比例的更新步长;
所述对所述第五目标子智能合约的调用比例进行更新,包括:
将所述第五目标子智能合约的调用比例替换为更新后的调用比例;或者,
基于调用比例的更新步长,对所述第五目标子智能合约的调用比例进行更新。
本说明书还提供一种基于区块链的智能合约调用装置;其中,所述区块链上部署了智能合约,所述智能合约包括主智能合约和多个子智能合约;各个子智能合约的合约代码相同;所述主智能合约包括用于对子智能合约进行调用管理的合约代码;所述子智能合约包括与业务逻辑对应的合约代码;所述装置应用于所述区块链中的节点设备,包括:
第一接收模块,接收发布至所述区块链的与所述智能合约对应的第一合约调用交易;其中,所述第一合约调用交易用于触发对所述多个子智能合约进行执行调度;所述第一合约调用交易包括业务数据;
第一调用模块,响应于所述第一合约调用交易,调用所述主智能合约的合约代码,从所述多个子智能合约中确定与所述业务数据对应的第一目标子智能合约;以及,在确定出所述第一目标子智能合约后,进一步调用所述第一目标子智能合约的合约代码,基于所述业务数据执行相应的业务处理。
可选地,所述调用管理的合约代码,包括用于对子智能合约进行执行调度的合约代码;
所述第一调用模块:
调用所述主智能合约中用于对子智能合约进行执行调度的合约代码,确定各个子智能合约被调用的次数,与所有子智能合约被调用的总次数的比值,是否达到为各个子智能合约预设的调用比例;
将所述比值未达到所述调用比例的子智能合约,确定为与所述业务数据对应的第一目标子智能合约。
可选地,所述第一调用模块:
如果存在所述比值未达到所述调用比例的一个子智能合约,将所述子智能合约确定为与所述业务数据对应的第一目标子智能合约;
如果存在所述比值未达到所述调用比例的多个子智能合约,从所述多个子智能合约中随机选择一个子智能合约,确定为与所述业务数据对应的第一目标子智能合约;或者,从所述多个子智能合约中选择所述比值最小的子智能合约,确定为与所述业务数据对应的第一目标子智能合约。
可选地,所述调用管理的合约代码还包括用于对子智能合约的调用比例进行更新的合约代码;
所述装置还包括:
第二接收模块,接收发布至所述区块链的与所述智能合约对应的第二合约调用交易;其中,所述第二合约调用交易用于触发对所述多个子智能合约中的第二目标子智能合约的调用比例进行更新;所述第二合约调用交易包括所述第二目标子智能合约的合约地址;
第二调用模块,响应于所述第二合约调用交易,调用所述主智能合约中用于对子智能合约的调用比例进行更新的合约代码,对所述第二目标子智能合约的调用比例进行更新。
可选地,所述第二合约调用交易还包括更新后的调用比例;或者,调用比例的更新步长;
所述第二调用模块:
将所述第二目标子智能合约的调用比例替换为更新后的调用比例;或者,
基于调用比例的更新步长,对所述第二目标子智能合约的调用比例进行更新。
本说明书还提供一种基于区块链的智能合约更新装置;其中,所述区块链上部署了智能合约,所述智能合约包括主智能合约和多个子智能合约;各个子智能合约的合约代码相同;所述主智能合约包括用于对子智能合约进行调用管理的合约代码;所述子智能合约包括与业务逻辑对应的合约代码;所述装置应用于所述区块链中的节点设备,包括:
第三接收模块,接收发布至所述区块链的与所述智能合约对应的第三合约调用交易;其中,所述第三合约调用交易用于触发对子智能合约的合约代码进行更新;所述第三合约调用交易包括与所述子智能合约的合约代码对应的更新代码;
第三调用模块,响应于所述第三合约调用交易,调用所述主智能合约的合约代码,基于所述更新代码分别对各个子智能合约的合约代码进行更新。
可选地,所述第三合约调用交易包括的更新代码为发布至所述区块链的所述更新代码对应的hash值;
所述第三调用模块:
基于所述更新代码对应的hash值,分别对各个子智能合约的合约账户中维护的更新前的合约代码对应的hash值进行更新。
可选地,所述调用管理的合约代码包括用于对子智能合约的合约代码进行更新的合约代码;
所述第三调用模块:
调用所述主智能合约中用于对子智能合约的合约代码进行更新的合约代码,将各个子智能合约依次确定为待更新的第三目标子智能合约,并将确定出的第三目标子智能合约切换为禁止调用状态;以及
基于所述更新代码对所述第三目标子智能合约的合约代码进行更新,并在更新完成后将所述第三目标子智能合约切换为允许调用状态。
可选地,所述装置还包括:
第四接收模块,接收发布至所述区块链的与所述智能合约对应的第四合约调用交易;其中,所述第四合约调用交易用于触发对所述多个子智能合约进行执行调度;所述第四合约调用交易包括业务数据;
第四调用模块,响应于所述第四合约调用交易,调用所述主智能合约的合约代码,从处于允许调用状态的所述子智能合约中,确定与所述业务数据对应的第四目标子智能合约;以及,在确定出所述第四目标子智能合约后,进一步调用所述第四目标子智能合约的合约代码,基于所述业务数据执行相应的业务处理。
可选地,所述调用管理的合约代码,包括用于对子智能合约进行执行调度的合约代码;
所述第四调用模块:
调用所述主智能合约中用于对子智能合约进行执行调度的合约代码,确定处于允许调用状态的各个子智能合约被调用的次数,与处于允许调用状态的所有子智能合约被调用的总次数的比值,是否达到为处于允许调用状态的各个子智能合约预设的调用比例;
将处于允许调用状态的各个子智能合约中,所述比值未达到所述调用比例的子智能合约,确定为与所述业务数据对应的第四目标子智能合约。
可选地,所述第三调用模块:
将确定出的第三目标子智能合约的调用比例设置为0;
所述在更新完成后将所述第三目标子智能合约切换为允许调用状态,包括:
在更新完成后将所述第三目标子智能合约的调用比例由0切换为预设比例。
可选地,所述第三调用模块:
在更新完成后按照预设的调用比例的更新步长,提高所述第三目标子智能合约的调用比例,并确定针对所述第三目标子智能合约的调用是否处于正常状态;如果是,继续按照所述调用比例的更新步长,提高所述第三目标子智能合约的调用比例,并确定针对所述第三目标子智能合约的调用是否处于正常状态;重复执行提高所述第三目标子智能合约的调用比例,直至将所述第三目标子智能合约的调用比例提高至所述预设比例。
可选地,所述装置还包括:
回滚模块,如果针对所述第三目标子智能合约的调用处于异常状态,将所述第三目标子智能合约的合约代码回滚至更新前的合约代码。
可选地,所述回滚模块:
将所述第三目标子智能合约的合约账户中维护的所述更新代码对应的hash值回滚至更新前的合约代码对应的hash值。
可选地,所述第四调用模块:
如果处于允许调用状态的各个子智能合约中,存在所述比值未达到所述调用比例的一个子智能合约,将所述子智能合约确定为与所述业务数据对应的第四目标子智能合约;
如果处于允许调用状态的各个子智能合约中,存在所述比值未达到所述调用比例的多个子智能合约,从所述多个子智能合约中随机选择一个子智能合约,确定为与所述业务数据对应的第四目标子智能合约;或者,从所述多个子智能合约中选择所述比值最小的子智能合约,确定为与所述业务数据对应的第四目标子智能合约。
可选地,所述调用管理的合约代码,还包括用于对子智能合约的调用比例进行更新的合约代码;
所述装置还包括:
第五接收模块,接收发布至所述区块链的与所述智能合约对应的第五合约调用交易;其中,所述第五合约调用交易用于触发对所述多个子智能合约中的第五目标子智能合约的调用比例进行更新;所述第五合约调用交易包括所述第五目标子智能合约的合约地址;
第五调用模块,响应于所述第五合约调用交易,调用所述主智能合约中用于对子智能合约的调用比例进行更新的合约代码,对所述第五目标子智能合约的调用比例进行更新。
可选地,所述第五合约调用交易还包括更新后的调用比例;或者,调用比例的更新步长;
所述第五调用模块:
将所述第五目标子智能合约的调用比例替换为更新后的调用比例;或者,
基于调用比例的更新步长,对所述第五目标子智能合约的调用比例进行更新。
本说明书还提出一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现上述基于区块链的智能合约调用方法的步骤。
本说明书还提出一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现上述基于区块链的智能合约更新方法的步骤。
本说明书还提出一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现上述基于区块链的智能合约调用方法的步骤。
本说明书还提出一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现上述基于区块链的智能合约更新方法的步骤。
在上述技术方案中,对于部署在区块链中的智能合约,可以将该智能合约中的业务逻辑通过该智能合约中的多个子智能合约进行备份,并由该智能合约中的主智能合约对这多个子智能合约进行调用管理。这样,一方面,在对该智能合约进行调用时,可以由该主智能合约对其中的多个子智能合约进行调度,以基于这多个子智能合约对调用该智能合约的交易进行分流,从而可以提高数据处理效率;另一方面,在对该智能合约进行更新时,可以先对其中的一个子智能合约的合约代码进行更新,并在确定针对更新完成的该子智能合约的调用正常时,再对下一个子智能合约的合约代码进行更新,从而可以避免对该智能合约的调用出现问题。
附图说明
图1是本说明书示出的一种智能合约的创建流程的示意图;
图2是本说明书示出的一种智能合约的调用流程的示意图;
图3是本说明书示出的一种智能合约的创建和调用流程的示意图;
图4是本说明书一示例性实施例示出的一种区块链系统的示意图;
图5是本说明书一示例性实施例示出的一种基于区块链的智能合约调用方法的流程图;
图6是本说明书一示例性实施例示出的一种基于区块链的智能合约更新方法的流程图;
图7是本说明书一示例性实施例示出的一种电子设备的结构示意图;
图8是本说明书一示例性实施例示出的另一种电子设备的结构示意图;
图9是本说明书一示例性实施例示出的一种基于区块链的智能合约调用装置的框图;
图10是本说明书一示例性实施例示出的一种基于区块链的智能合约更新装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(PrivateBlockchain)和联盟链(Consortium Blockchain)。此外,还可以有上述多种类型的结合,比如私有链+联盟链、联盟链+公有链等。
其中,去中心化程度最高的是公有链。公有链以比特币、以太坊为代表,加入公有链的参与者(也可称为区块链中的节点)可以读取链上的数据记录、参与交易、以及竞争新区块的记账权等。而且,各节点可自由加入或者退出网络,并进行相关操作。
私有链则相反,该网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。简单来说,私有链可以为一个弱中心化系统,其对节点具有严格限制且节点数量较少。这种类型的区块链更适合于特定机构内部使用。
联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织;节点通过授权加入网络并组成利益相关联盟,共同维护区块链运行。
基于区块链的基本特性,区块链通常是由若干个区块构成。在这些区块中分别记录有与该区块的创建时刻对应的时间戳,所有的区块严格按照区块中记录的时间戳,构成一条在时间上有序的数据链条。
对于物理世界产生的真实数据,可以将其构建成区块链所支持的标准的交易(transaction)格式,然后发布至区块链,由区块链中的节点设备对收到的交易进行共识处理,并在达成共识后,由区块链中作为记账节点的节点设备,将这笔交易打包进区块,在区块链中进行持久化存证。
其中,区块链中支持的共识算法可以包括:
第一类共识算法,即节点设备需要争夺每一轮的记账周期的记账权的共识算法;例如,工作量证明(Proof of Work,POW)、股权证明(Proof of Stake,POS)、委任权益证明(Delegated Proof of Stake,DPOS)等共识算法;
第二类共识算法,即预先为每一轮记账周期选举记账节点(不需要争夺记账权)的共识算法;例如,实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)等共识算法。
在采用第一类共识算法的区块链网络中,争夺记账权的节点设备,都可以在接收到交易后执行该笔交易。争夺记账权的节点设备中可能有一个节点设备在本轮争夺记账权的过程中胜出,成为记账节点。记账节点可以将收到的交易与其它交易一起打包以生成最新区块,并将生成的最新区块或者该最新区块的区块头发送至其它节点设备进行共识。
在采用第二类共识算法的区块链网络中,具有记账权的节点设备在本轮记账前已经商定好。因此,节点设备在接收到交易后,如果自身不是本轮的记账节点,则可以将该交易发送至记账节点。对于本轮的记账节点,在将该交易与其它交易一起打包以生成最新区块的过程中或者之前,可以执行该交易。记账节点在生成最新区块后,可以将该最新区块或者该最新区块的区块头发送至其它节点设备进行共识。
如上所述,无论区块链采用以上示出的哪种共识算法,本轮的记账节点都可以将接收到的交易打包以生成最新区块,并将生成的最新区块或者该最新区块的区块头发送至其它节点设备进行共识验证。如果其它节点设备接收到最新区块或者该最新区块的区块头后,经验证没有问题,可以将该最新区块追加到原有的区块链末尾,从而完成区块链的记账过程。其它节点验证记账节点发来的新的区块或区块头的过程中,也可以执行该区块中的包含的交易。
在区块链领域,有一个重要的概念就是账户(account);以以太坊为例,以太坊通常将账户划分为外部账户和合约账户两类;外部账户就是由用户直接控制的账户,也称之为用户账户;而合约账户则是由用户通过外部账户创建的,包含合约代码的账户(即智能合约)。当然,对于一些基于以太坊的架构而衍生出的区块链项目(比如蚂蚁区块链),还可以对区块链支持的账户类型,进行进一步的扩展,在本说明书中不进行特别限定。
对于区块链中的账户而言,通常会通过一个结构体,来维护账户的账户状态。当区块中的交易被执行后,区块链中与该交易相关的账户的状态通常也会发生变化。
以以太坊为例,账户的结构体通常包括Balance,Nonce,Code和Storage等字段。其中:
Balance字段,用于维护账户目前的账户余额;
Nonce字段,用于维护该账户的交易次数;它是用于保障每笔交易能且只能被处理一次的计数器,有效避免重放攻击;
Code字段,用于维护该账户的合约代码;在实际应用中,Code字段中通常仅维护合约代码的hash值;因而,Code字段通常也称之为Codehash字段。
Storage字段,用于维护该账户的存储内容(默认字段值为空);对于合约账户而言,通常会分配一个独立的存储空间,用以存储该合约账户的存储内容;该独立的存储空间通常称之为该合约账户的账户存储。合约账户的存储内容通常会构建成MPT(MerklePatricia Trie)树的数据结构存储在上述独立的存储空间之中;其中,基于合约账户的存储内容构建成的MPT树,通常也称之为Storage树。而Storage字段通常仅维护该Storage树的根节点;因此,Storage字段通常也称之为StorageRoot字段。
其中,对于外部账户而言,以上示出的Code字段和Storage字段的字段值均为空值。
对于大多数区块链项目,通常都会使用Merkle树;或者,基于Merkle树的数据结构,来存储和维护数据。以以太坊为例,以太坊使用了MPT树(一种Merkle树变种),作为数据组织形式,用来组织和管理账户状态、交易信息等重要数据。
以太坊针对区块链中需要存储和维护的数据,设计了三颗MPT树,分别是MPT状态树、MPT交易树和MPT收据树。其中,除了以上三颗MPT树以外,实际上还存在一颗基于合约账户的存储内容构建的Storage树。
MPT状态树,是由区块链中所有账户的账户状态(state)数据组织成的MPT树;MPT交易树,是由区块链中的交易(transaction)数据组织成的MPT树;MPT收据树,是区块中的交易在执行完毕后生成的与每笔交易对应的交易(receipt)收据组织成的MPT树。以上示出的MPT状态树、MPT交易树和MPT收据树的根节点的hash值,最终都会被添加至对应区块的区块头中。
其中,MPT交易树和MPT收据树均与区块相对应,即每一个区块都有自己的MPT交易树和MPT收据树。而MPT状态树是一个全局的MPT树,并不与某一个特定的区块相对应,而是涵盖了区块链中所有账户的账户状态数据。
需要说明的是,区块链每产生一个最新区块,则在该最新区块中的交易被执行之后,区块链中这些被执行交易的相关账户(可以是外部账户也可以是合约账户)的账户状态,通常也会随之发生变化;
例如,当区块中的一笔“转账交易”执行完毕后,与该“转账交易”相关的转出方账户和转入方账户的余额(即这些账户的Balance字段的字段值),通常也会随之发生变化。
而节点设备在区块链产生的最新区块中的交易执行完毕后,由于当前区块链中的账户状态发生了变化,因此节点设备需要根据区块链中所有账户当前的账户状态数据,来构建MPT状态树,用于维护区块链中所有账户的最新状态。
也即,每当区块链中产生一个最新区块,并且该最新区块中的交易执行完毕后,导致区块链中的账户状态发生变化,节点设备都需要基于区块链中所有账户最新的账户状态数据,重新构建一颗MPT状态树。换句话说,区块链中每一个区块,都有一个与之对应的MPT状态树;该MPT状态树,维护了在该区块中的交易在执行完毕后,区块链中所有账户最新的账户状态。
在实际应用中,不论是公有链、私有链还是联盟链,都可能提供智能合约(smartcontract)的功能。区块链上的智能合约是在区块链上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。
以以太坊为例,支持用户在以太坊网络中创建并调用一些复杂的逻辑。以太坊作为一个可编程区块链,其核心是以太坊虚拟机(EVM),每个以太坊节点都可以运行EVM。EVM是一个图灵完备的虚拟机,通过它可以实现各种复杂的逻辑。用户在以太坊中发布和调用智能合约就是在EVM上运行的。实际上,EVM直接运行的是虚拟机代码(虚拟机字节码,下简称“字节码”),所以部署在区块链上的智能合约可以是字节码。
如图1所示,Bob将一笔包含创建智能合约信息的交易(transaction)发送到以太坊网络后,各节点均可以在EVM中执行这笔交易。其中,图1中交易的From字段用于记录发起创建智能合约的账户的地址,交易的Data字段的字段值保存的合约代码可以是字节码,交易的To字段的字段值为一个null(空)的账户。当节点间通过共识机制达成一致后,这个智能合约成功创建,后续用户可以调用这个智能合约。
智能合约创建后,区块链上出现一个与该智能合约对应的合约账户,并拥有一个特定的地址;比如,图1中各节点中的“0x68e12cf284…”就代表了创建的这个合约账户的地址;合约代码(Code)和账户存储(Storage)将保存在该合约账户的账户存储中。智能合约的行为由合约代码控制,而智能合约的账户存储则保存了合约的状态。换句话说,智能合约使得区块链上产生包含合约代码和账户存储的虚拟账户。
前述提到,包含创建智能合约的交易的Data字段保存的可以是该智能合约的字节码。字节码由一连串的字节组成,每一字节可以标识一个操作。基于开发效率、可读性等多方面考虑,开发者可以不直接书写字节码,而是选择一门高级语言编写智能合约代码。例如,高级语言可以采用诸如Solidity、Serpent、LLL语言等。对于采用高级语言编写的智能合约代码,可以经过编译器编译,生成可以部署到区块链上的字节码。
以Solidity语言为例,用其编写的合约代码与面向对象编程语言中的类(Class)很相似,在一个合约中可以声明多种成员,包括状态变量、函数、函数修改器、事件等。状态变量是永久存储在智能合约的账户存储(Storage)字段中的值,用于保存合约的状态。
如图2所示,仍以以太坊为例,Bob将一笔包含调用智能合约信息的交易发送到以太坊网络后,各节点均可以在EVM中执行这笔交易。其中,图2中交易的From字段用于记录发起调用智能合约的账户的地址,To字段用于记录被调用的智能合约的地址,交易的Data字段用于记录调用智能合约的方法和参数。调用智能合约后,合约账户的账户状态可能改变。后续,某个客户端可以通过接入的区块链节点(例如图2中的节点1)查看合约账户的账户状态。
智能合约可以以规定的方式在区块链网络中每个节点独立的执行,所有执行记录和数据都保存在区块链上,所以当这样的交易执行完毕后,区块链上就保存了无法篡改、不会丢失的交易凭证。
创建智能合约和调用智能合约的示意图如图3所示。以太坊中要创建一个智能合约,需要经过编写智能合约、变成字节码、部署到区块链等过程。以太坊中调用智能合约,是发起一笔指向智能合约地址的交易,各个节点的EVM可以分别执行该交易,将智能合约代码分布式的运行在以太坊网络中每个节点的虚拟机中。
智能合约的事件机制,是智能合约与链外实体进行交互的一种方式。对于区块链上部署的智能合约来说,通常无法直接与链外实体进行交互;例如,智能合约在调用完成后,通常无法将智能合约的调用结果,点对点的发送给智能合约的调用发起方。
智能合约在调用的过程中产生的调用结果(包括中间结果和最终的调用结果),通常都会以事件(event)的形式,记录到调用该智能合约的那笔交易的交易日志(transaction logs),在节点设备的存储空间中进行存储。而需要与智能合约进行交互的链外实体,则可以通过监听节点设备的存储空间中存储的上述交易日志的方式,来获取智能合约的调用结果;
例如,以以太坊为例,交易日志最终会作为调用该智能合约的那笔交易笔交易的收据(receipt)的一部分内容,存储在以上描述的MPT收据树中。而与智能合约进行交互的链外实体,可以监听节点设备的存储空间中存储的MPT收据树上的交易收据,并从监听到的交易收据中,来获取智能合约生成的事件。
区块链上部署的智能合约,通常只能引用区块链上存储的数据内容;而在实际应用中,对基于智能合约技术实现的一些复杂的业务场景,智能合约可能还需要引用一些链外的数据实体上的外部数据。
在这种场景下,区块链上部署的智能合约,可以通过Oracle预言机,来引用链外的数据实体上的数据,进而实现智能合约与真实世界的数据实体之间的数据交互。其中,链外的数据实体,可以包括诸如部署在链外的中心化的服务器或者数据中心,等等。
需要说明的是,跨链中继用于连接两个区块链,而Oracle预言机用于连接区块链与链外的数据实体,实现区块链与真实世界的数据交互。
在实际应用中,在为区块链上的智能合约部署预言机时,可以先在区块链上部署一个与预言机对应的预言机智能合约;其中,该预言机智能合约用于维护预言机发给区块链上的智能合约的外部数据;例如,预言机发给区块链上的智能合约的外部数据,可以存储在预言机智能合约的账户存储空间中。
当区块链上的目标智能合约被调用时,可以从该预言机智能合约的账户存储空间中,来读取该目标智能合约所需的外部数据,来完成智能合约的调用过程。
需要说明的是,预言机在向区块链上的智能合约发送外部数据时,可以采用主动发送的方式,也可以采用被动发送的方式。
在一种实现方式中,链外的数据实体可以将需要提供给目标智能合约的外部数据,利用预言机的私钥进行签名后,发送给上述预言机智能合约;例如,在时间时,可以采用周期性发送的方式,将签名后的上述外部数据发送给上述预言机智能合约;
而在上述预言机智能合约可以维护预言机的CA证书,在收到链外的数据实体发送的外部数据后,可以使用该CA证书中维护的该预言机的公钥,对该外部数据的签名进行验证,并在验证通过后,将链外的数据实体发送的外部数据在该预言机智能合约的账户存储空间中进行存储。
在另一种实现方式中,当区块链上的目标智能合约被调用时,如果从该预言机智能合约的账户存储空间中,并未读取到该目标智能合约所需的外部数据,此时该预言机智能合约,可以利用智能合约的事件机制,与上述预言机进行交互,并由上述预言机将该目标智能合约所需的外部数据,发送至该预言机智能合约的账户存储空间中。
例如,当区块链上的目标智能合约被调用时,如果从该预言机智能合约的账户存储空间中,并未读取到该目标智能合约所需的外部数据,此时该预言机智能合约,可以生成一个外部数据获取事件,并将该外部数据获取事件记录到调用该智能合约的那笔交易的交易日志中,并将该交易日志存储到节点设备的存储空间;而上述预言机可以监听节点设备的存储空间中存储的该预言机智能合约产生的交易日志,并在监听到交易日志中的外部数据获取事件后,响应监听到的该外部数据获取事件,将上述目标智能合约所需的外部数据,发送给上述预言机智能合约。
请参考图4,图4是本说明书一示例性实施例示出的一种区块链系统的示意图。
在如图4所示的区块链系统中,在该区块链上部署了智能合约;该智能合约具体可以包括一个主智能合约和多个子智能合约(图4示出了两个子智能合约,分别为:子智能合约1和子智能合约2)。其中,主智能合约包括用于对子智能合约进行调用管理的合约代码;子智能合约包括与业务逻辑对应的合约代码,且各个子智能合约的合约代码相同。也即,通过执行主智能合约的合约代码,可以实现对子智能合约的调用管理;通过执行不同的子智能合约的合约代码,可以实现相同的业务逻辑。
需要说明的是,创建和调用智能合约的具体流程可以参考前述智能合约的创建和调用流程,本说明书在此不再赘述。
在具体实现时,用户可以通过与上述区块链中的节点设备对接的客户端发起用于调用该区块链上部署的上述智能合约的交易(称为合约调用交易)。该区块链中的节点设备在接收到该合约调用交易时,可以将该合约调用交易发送给该区块链中的其他节点设备,以对该合约调用交易进行共识处理,并在该合约调用交易共识通过后,执行该智能合约中的主智能合约的合约代码,实现对该智能合约中的子智能合约的调用管理。
在实际应用中,上述客户端可以部署在电子设备上,该电子设备可以是服务器、计算机、手机、平板设备、笔记本电脑、掌上电脑(PDAs,Personal Digital Assistants)等;同样地,作为节点设备加入至上述区块链的电子设备也可以是服务器、计算机、手机、平板设备、笔记本电脑、掌上电脑等;本说明书对此不作限制。
请参考图5,图5是本说明书一示例性实施例示出的一种基于区块链的智能合约调用方法的流程图。该基于区块链的智能合约调用方法可以应用于如图4所示的区块链系统中的节点设备,包括以下步骤:
步骤502,接收发布至所述区块链的与所述智能合约对应的第一合约调用交易;其中,所述第一合约调用交易包括业务数据;
步骤504,响应于所述第一合约调用交易,调用所述主智能合约的合约代码,从所述多个子智能合约中确定与所述业务数据对应的第一目标子智能合约;以及,在确定出所述第一目标子智能合约后,进一步调用所述第一目标子智能合约的合约代码,基于所述业务数据执行相应的业务处理。
在本实施例中,在上述区块链上部署了智能合约;该智能合约具体可以包括一个主智能合约和多个子智能合约。其中,主智能合约包括用于对子智能合约进行调用管理的合约代码;子智能合约包括与业务逻辑对应的合约代码,且各个子智能合约的合约代码相同。也即,通过执行主智能合约的合约代码,可以实现对子智能合约的调用管理;通过执行不同的子智能合约的合约代码,可以实现相同的业务逻辑。
需要说明的是,上述智能合约中的主智能合约的合约代码可以被划分为多个部分。其中,每个部分的合约代码实现的逻辑不同。
在本实施例中,在基于上述区块链上部署的上述智能合约进行业务处理时,上述客户端可以向该区块链中的节点设备发送与该智能合约对应的合约调用交易(称为第一合约调用交易)。其中,第一合约调用交易具体可以用于触发对该智能合约中的多个子智能合约进行执行调度;第一合约调用交易可以包括这多个子智能合约中的任意一个执行业务处理所需的数据(即业务数据)。
该区块链中的节点设备可以响应于第一合约调用交易,调用该智能合约中的主智能合约的合约代码,从该智能合约中的多个子智能合约中确定与第一合约调用交易中的业务数据对应的子智能合约(即执行业务处理的子智能合约,称为第一目标子智能合约),并在确定出第一目标子智能合约之后,进一步调用第一目标子智能合约的合约代码,基于该业务数据执行相应的业务处理。
具体地,参考前述的在区块链中持久化存证数据的过程,上述客户端可以构建与上述智能合约对应的上述第一合约调用交易,并将第一合约调用交易发布至该区块链进行存证。也即,与该客户端对接的该区块链中的节点设备可以先接收到第一合约调用交易,再将第一合约调用交易发送给该区块链中的其它节点设备。该区块链中的各台节点设备在接收到第一合约调用交易时,可以对第一合约调用交易进行共识处理。在达成共识之后,该区块链中的节点设备可以将第一合约调用交易打包进区块,在该区块链中进行持久化存证。
对于打包进区块的第一合约调用交易,该区块链中的节点设备可以响应于第一合约调用交易,执行上述智能合约中的主智能合约的合约代码,由该主智能合约从该智能合约中的多个子智能合约中确定与第一合约调用交易中的业务数据对应的第一目标子智能合约,并在确定出第一目标子智能合约之后,进一步调用第一目标子智能合约的合约代码,即将该业务数据发送给第一目标子智能合约,从而使第一目标子智能合约可以基于该业务数据执行相应的业务处理。
在示出的一种实施方式中,上述智能合约中的主智能合约中的用于对子智能合约进行调用管理的合约代码具体可以包括:用于对该智能合约中的多个子智能合约进行执行调度的部分合约代码;上述第一合约调用交易具体可以用于触发对这多个子智能合约进行执行调度,即用于调用该主智能合约的合约代码中用于对这多个子智能合约进行执行调度的部分合约代码。
在这种情况下,上述区块链中的节点设备可以响应于第一合约调用交易,调用该主智能合约的合约代码中用于对这多个子智能合约进行执行调度的部分合约代码,先分别针对各个子智能合约,确定该子智能合约被调用的次数与所有子智能合约被调用的总次数的比值,是否达到为该子智能合约预先设置的调用比例,再将该比值未达到该调用比例的子智能合约确定为与第一合约调用交易中的业务数据对应的第一目标子智能合约;其中,该调用比例可以由技术人员预先设置,也可以是系统默认的缺省值,本说明书对此不作限制。
在实际应用中,可以由上述主智能合约记录上述各个子智能合约在预设长度的时间段内被调用的次数,从而使该主智能合约可以根据该记录,分别针对各个子智能合约,计算该子智能合约被调用的次数与所有子智能合约被调用的总次数的比值;其中,该预设长度可以由技术人员预先设置,也可以是系统默认的缺省值,本说明书对此不作限制。
需要说明的是,如果上述比值未达到上述调用比例的子智能合约有且仅有一个,则可以直接将该子智能合约确定为上述第一目标子智能合约。如果上述比值未达到上述调用比例的子智能合约存在多个,则可以从这多个子智能合约中随机选择一个子智能合约作为上述第一目标子智能合约,或者可以从这多个子智能合约中选择该比值最小的子智能合约作为上述第一目标子智能合约。
以如图4所示的区块链系统为例,假设为在该区块链上部署的智能合约中的子智能合约1和子智能合约2设置的调用比例相同,均为50%;进一步假设由该智能合约中的主智能合约记录的子智能合约1的被调用的次数为6次,子智能合约2被调用的次数为4次。在这种情况下,可以确定子智能合约1被调用的次数与所有子智能合约被调用的总次数(6+4=10次)的比值为6÷10=60%>50%,子智能合约2被调用的次数与所有子智能合约被调用的总次数的比值为4÷10=40%<50%。由于被调用的次数与所有子智能合约被调用的总次数的比值小于为其设置的调用比例的子智能合约有且仅有子智能合约2,因此可以直接将子智能合约2确定为上述第一目标子智能合约。
在另一个例子中,假设在区块链上部署的智能合约包括主智能合约和三个子智能合约(分别为:子智能合约1、子智能合约2和子智能合约3),且为子智能合约1设置的调用比例为50%,为子智能合约2设置的调用比例为30%,为子智能合约3设置的调用比例为20%;进一步假设由该主智能合约记录的子智能合约1的被调用的次数为12次,子智能合约2被调用的次数为5次,子智能合约3被调用的次数为3次。在这种情况下,可以确定子智能合约1被调用的次数与所有子智能合约被调用的总次数(12+5+3=20次)的比值为12÷20=60%>50%,子智能合约2被调用的次数与所有子智能合约被调用的总次数的比值为5÷20=25%<30%,子智能合约3被调用的次数与所有子智能合约被调用的总次数的比值为3÷20=15%<20%。由于被调用的次数与所有子智能合约被调用的总次数的比值小于为其设置的调用比例的子智能合约有子智能合约2和子智能合约3,因此可以从子智能合约2和子智能合约3中随机选择一个子智能合约作为上述第一目标子智能合约,或者可以从子智能合约2和子智能合约3中选择该比值最小的子智能合约3作为上述第一目标子智能合约。
在示出的一种实施方式中,上述智能合约中的主智能合约中的用于对子智能合约进行调用管理的合约代码具体还可以包括:用于对子智能合约的调用比例进行更新的部分合约代码。
在这种情况下,上述客户端可以向该区块链中的节点设备发送与该智能合约对应的合约调用交易(称为第二合约调用交易)。其中,第二合约调用交易具体可以用于触发对该智能合约中的某个子智能合约(称为第二目标子智能合约)的调用比例进行更新,即用于调用该主智能合约的合约代码中用于对子智能合约的调用比例进行更新的部分合约代码;第二合约调用交易可以包括第二目标子智能合约的合约地址(通常可以是第二目标子智能合约的合约代码对应的hash值)。
该区块链中的节点设备可以响应于第二合约调用交易,调用该智能合约中的主智能合约的合约代码中用于对子智能合约的调用比例进行更新的部分合约代码,先根据第二合约调用交易中的合约地址确定第二目标子智能合约,再对第二目标子智能合约的调用比例进行更新。
具体地,参考前述的在区块链中持久化存证数据的过程,上述客户端可以构建与上述智能合约对应的上述第二合约调用交易,并将第二合约调用交易发布至该区块链进行存证。也即,与该客户端对接的该区块链中的节点设备可以先接收到第二合约调用交易,再将第二合约调用交易发送给该区块链中的其它节点设备。该区块链中的各台节点设备在接收到第二合约调用交易时,可以对第二合约调用交易进行共识处理。在达成共识之后,该区块链中的节点设备可以将第二合约调用交易打包进区块,在该区块链中进行持久化存证。
对于打包进区块的第二合约调用交易,该区块链中的节点设备可以响应于第二合约调用交易,执行上述智能合约中的主智能合约的合约代码中用于对子智能合约的调用比例进行更新的部分合约代码,由该主智能合约先根据第二合约调用交易中的合约地址确定第二目标子智能合约,再对第二目标子智能合约的调用比例进行更新。
在实际应用中,上述第二合约调用交易还可以包括更新后的调用比例或与调用比例的更新步长。
在第二合约调用交易包括更新后的调用比例时,可以直接将上述第二目标子智能合约的调用比例替换为该更新后的调用比例。
在第二合约调用交易包括调用比例的更新步长时,可以将上述第二目标子智能合约的调用比例更新为更新前的调用比例与该更新步长之和。
在上述技术方案中,对于部署在区块链中的智能合约,可以将该智能合约中的业务逻辑通过该智能合约中的多个子智能合约进行备份,并由该智能合约中的主智能合约对这多个子智能合约进行调用管理。这样,在对该智能合约进行调用时,可以由该主智能合约对其中的多个子智能合约进行调度,以基于这多个子智能合约对调用该智能合约的交易进行分流,从而可以提高数据处理效率。
请参考图6,图6是本说明书一示例性实施例示出的一种基于区块链的智能合约更新方法的流程图。该基于区块链的智能合约更新方法可以应用于如图4所示的区块链系统中的节点设备,包括以下步骤:
步骤602,接收发布至所述区块链的与所述智能合约对应的第三合约调用交易;其中,所述第三合约调用交易用于触发对子智能合约的合约代码进行更新;所述第三合约调用交易包括与所述子智能合约的合约代码对应的更新代码;
步骤604,响应于所述第三合约调用交易,调用所述主智能合约的合约代码,基于所述更新代码分别对各个子智能合约的合约代码进行更新。
在本实施例中,在上述区块链上部署了智能合约;该智能合约具体可以包括一个主智能合约和多个子智能合约。其中,主智能合约包括用于对子智能合约进行调用管理的合约代码;子智能合约包括与业务逻辑对应的合约代码,且各个子智能合约的合约代码相同。也即,通过执行主智能合约的合约代码,可以实现对子智能合约的调用管理;通过执行不同的子智能合约的合约代码,可以实现相同的业务逻辑。
需要说明的是,上述智能合约中的主智能合约的合约代码可以被划分为多个部分。其中,每个部分的合约代码实现的逻辑不同。
下面从智能合约的调用和更新两个方面对本实施例进行详细说明。
(1)智能合约的调用
在本实施例中,对于上述区块链上部署的上述智能合约中,正在对其合约代码进行更新的子智能合约而言,可以将该子智能合约的状态切换为禁止调用状态,即禁止调用该子智能合约执行业务处理,以避免在业务处理的过程中出现差错;对于该智能合约中,未在对其合约代码进行更新的子智能合约(即尚未更新或更新完成的子智能合约)而言,可以将该子智能合约的状态切换为允许调用状态,即允许调用该子智能合约执行业务处理。
在这种情况下,在基于该智能合约进行业务处理时,上述客户端可以向该区块链中的节点设备发送与该智能合约对应的合约调用交易(称为第四合约调用交易)。其中,第四合约调用交易具体可以用于触发对该智能合约中的多个子智能合约进行执行调度;第四合约调用交易可以包括这多个子智能合约中的任意一个执行业务处理所需的数据(即业务数据)。
该区块链中的节点设备可以响应于第四合约调用交易,调用该智能合约中的主智能合约的合约代码,从该智能合约中处于允许调用状态的子智能合约中,确定与第四合约调用交易中的业务数据对应的子智能合约(即执行业务处理的子智能合约,称为第四目标子智能合约),并在确定出第四目标子智能合约之后,进一步调用第四目标子智能合约的合约代码,基于该业务数据执行相应的业务处理。
具体地,参考前述的在区块链中持久化存证数据的过程,上述客户端可以构建与上述智能合约对应的上述第四合约调用交易,并将第四合约调用交易发布至该区块链进行存证。也即,与该客户端对接的该区块链中的节点设备可以先接收到第四合约调用交易,再将第四合约调用交易发送给该区块链中的其它节点设备。该区块链中的各台节点设备在接收到第四合约调用交易时,可以对第四合约调用交易进行共识处理。在达成共识之后,该区块链中的节点设备可以将第四合约调用交易打包进区块,在该区块链中进行持久化存证。
对于打包进区块的第四合约调用交易,该区块链中的节点设备可以响应于第四合约调用交易,执行上述智能合约中的主智能合约的合约代码,由该主智能合约从该智能合约中处于允许调用状态的子智能合约中,确定与第四合约调用交易中的业务数据对应的第四目标子智能合约,并在确定出第四目标子智能合约之后,进一步调用第四目标子智能合约的合约代码,即将该业务数据发送给第四目标子智能合约,从而使第四目标子智能合约可以基于该业务数据执行相应的业务处理。
在示出的一种实施方式中,上述智能合约中的主智能合约中的用于对子智能合约进行调用管理的合约代码具体可以包括:用于对该智能合约中的多个子智能合约进行执行调度的部分合约代码;上述第四合约调用交易具体可以用于触发对这多个子智能合约进行执行调度,即用于调用该主智能合约的合约代码中用于对这多个子智能合约进行执行调度的部分合约代码。
在这种情况下,上述区块链中的节点设备可以响应于第四合约调用交易,调用该主智能合约的合约代码中用于对这多个子智能合约进行执行调度的部分合约代码,先分别针对处于允许调用状态的各个子智能合约,确定该子智能合约被调用的次数与处于允许调用状态的所有子智能合约被调用的总次数的比值,是否达到为该子智能合约预先设置的调用比例,再将这些处于允许调用状态的子智能合约中,该比值未达到该调用比例的子智能合约确定为与第四合约调用交易中的业务数据对应的第四目标子智能合约;其中,该调用比例可以由技术人员预先设置,也可以是系统默认的缺省值,本说明书对此不作限制。
在实际应用中,可以由上述主智能合约记录上述各个子智能合约在预设长度的时间段内被调用的次数,从而使该主智能合约可以根据该记录,分别针对处于允许调用状态的各个子智能合约,计算该子智能合约被调用的次数与处于允许调用状态的所有子智能合约被调用的总次数的比值;其中,该预设长度可以由技术人员预先设置,也可以是系统默认的缺省值,本说明书对此不作限制。
需要说明的是,如果在上述处于允许调用状态的子智能合约中,上述比值未达到上述调用比例的子智能合约有且仅有一个,则可以直接将该子智能合约确定为上述第四目标子智能合约。如果在上述处于允许调用状态的子智能合约中,上述比值未达到上述调用比例的子智能合约存在多个,则可以从这多个子智能合约中随机选择一个子智能合约作为上述第四目标子智能合约,或者可以从这多个子智能合约中选择该比值最小的子智能合约作为上述第四目标子智能合约。
以如图4所示的区块链系统为例,假设为在该区块链上部署的智能合约中的子智能合约1和子智能合约2设置的调用比例相同,均为50%;进一步假设由该智能合约中的主智能合约记录的子智能合约1的被调用的次数为6次,子智能合约2被调用的次数为4次。在这种情况下,可以确定子智能合约1被调用的次数与所有子智能合约被调用的总次数(6+4=10次)的比值为6÷10=60%>50%,子智能合约2被调用的次数与所有子智能合约被调用的总次数的比值为4÷10=40%<50%。由于被调用的次数与所有子智能合约被调用的总次数的比值小于为其设置的调用比例的子智能合约有且仅有子智能合约2,因此可以直接将子智能合约2确定为上述第四目标子智能合约。
在另一个例子中,假设在区块链上部署的智能合约包括主智能合约和四个子智能合约(分别为:子智能合约1、子智能合约2、子智能合约3和子智能合约4),且为子智能合约1设置的调用比例为50%,为子智能合约2设置的调用比例为30%,为子智能合约3设置的调用比例为20%,子智能合约4处于禁止调用状态;进一步假设由该主智能合约记录的子智能合约1的被调用的次数为12次,子智能合约2被调用的次数为5次,子智能合约3被调用的次数为3次。在这种情况下,可以确定子智能合约1被调用的次数与所有子智能合约被调用的总次数(12+5+3=20次)的比值为12÷20=60%>50%,子智能合约2被调用的次数与所有子智能合约被调用的总次数的比值为5÷20=25%<30%,子智能合约3被调用的次数与所有子智能合约被调用的总次数的比值为3÷20=15%<20%。由于被调用的次数与所有子智能合约被调用的总次数的比值小于为其设置的调用比例的子智能合约有子智能合约2和子智能合约3,且子智能合约4处于禁止调用状态,因此可以从子智能合约2和子智能合约3中随机选择一个子智能合约作为上述第四目标子智能合约,或者可以从子智能合约2和子智能合约3中选择该比值最小的子智能合约3作为上述第四目标子智能合约。
在示出的一种实施方式中,上述智能合约中的主智能合约中的用于对子智能合约进行调用管理的合约代码具体还可以包括:用于对子智能合约的调用比例进行更新的部分合约代码。
在这种情况下,上述客户端可以向该区块链中的节点设备发送与该智能合约对应的合约调用交易(称为第五合约调用交易)。其中,第五合约调用交易具体可以用于触发对该智能合约中的某个子智能合约(称为第五目标子智能合约)的调用比例进行更新,即用于调用该主智能合约的合约代码中用于对子智能合约的调用比例进行更新的部分合约代码;第五合约调用交易可以包括第五目标子智能合约的合约地址(通常可以是第五目标子智能合约的合约代码对应的hash值)。
该区块链中的节点设备可以响应于第五合约调用交易,调用该智能合约中的主智能合约的合约代码中用于对子智能合约的调用比例进行更新的部分合约代码,先根据第五合约调用交易中的合约地址确定第五目标子智能合约,再对第五目标子智能合约的调用比例进行更新。
具体地,参考前述的在区块链中持久化存证数据的过程,上述客户端可以构建与上述智能合约对应的上述第五合约调用交易,并将第五合约调用交易发布至该区块链进行存证。也即,与该客户端对接的该区块链中的节点设备可以先接收到第五合约调用交易,再将第五合约调用交易发送给该区块链中的其它节点设备。该区块链中的各台节点设备在接收到第五合约调用交易时,可以对第五合约调用交易进行共识处理。在达成共识之后,该区块链中的节点设备可以将第五合约调用交易打包进区块,在该区块链中进行持久化存证。
对于打包进区块的第五合约调用交易,该区块链中的节点设备可以响应于第五合约调用交易,执行上述智能合约中的主智能合约的合约代码中用于对子智能合约的调用比例进行更新的部分合约代码,由该主智能合约先根据第五合约调用交易中的合约地址确定第五目标子智能合约,再对第五目标子智能合约的调用比例进行更新。
在实际应用中,上述第五合约调用交易还可以包括更新后的调用比例或与调用比例的更新步长。
在第五合约调用交易包括更新后的调用比例时,可以直接将上述第五目标子智能合约的调用比例替换为该更新后的调用比例。
在第五合约调用交易包括调用比例的更新步长时,可以将上述第五目标子智能合约的调用比例更新为更新前的调用比例与该更新步长之和。
(2)智能合约的更新
在本实施例中,在对上述区块链上部署的上述智能合约的合约代码进行更新时,上述客户端可以向该区块链中的节点设备发送与该智能合约对应的合约调用交易(称为第三合约调用交易)。其中,第三合约调用交易具体可以用于触发对该智能合约中的子智能合约的合约代码进行更新;第三合约调用交易可以包括该子智能合约的合约代码对应的更新代码。
该区块链中的节点设备可以响应于第三合约调用交易,调用该智能合约中的主智能合约的合约代码,基于第三合约调用交易中的更新代码,分别对该智能合约中的各个子智能合约的合约代码进行更新。
具体地,参考前述的在区块链中持久化存证数据的过程,上述客户端可以构建与上述智能合约对应的上述第三合约调用交易,并将第三合约调用交易发布至该区块链进行存证。也即,与该客户端对接的该区块链中的节点设备可以先接收到第三合约调用交易,再将第三合约调用交易发送给该区块链中的其它节点设备。该区块链中的各台节点设备在接收到第三合约调用交易时,可以对第三合约调用交易进行共识处理。在达成共识之后,该区块链中的节点设备可以将第三合约调用交易打包进区块,在该区块链中进行持久化存证。
对于打包进区块的第三合约调用交易,该区块链中的节点设备可以响应于第三合约调用交易,执行上述智能合约中的主智能合约的合约代码,基于第三合约调用交易中的更新代码,分别对该智能合约中的各个子智能合约的合约代码进行更新。
在示出的一种实施方式中,可以先将上述更新代码发布至上述区块链进行存储,再计算该区块链中存储的该更新代码对应的hash值(可以作为该区块链中存储的该更新代码的合约地址)。后续,可以基于发布至该区块链的该更新代码对应的hash值,构建上述第三合约调用交易,即第三合约调用交易可以包括发布至该区块链的该更新代码对应的hash值。
在这种情况下,可以基于上述更新代码对应的hash值,分别对上述智能合约中的各个子智能合约的合约账户中维护的更新前的合约代码对应的hash值进行更新。
具体地,针对该智能合约中的某个子智能合约,可以将该子智能合约的合约账户中维护的更新前的合约代码对应的hash值更新为该更新代码对应的hash值,以实现将该智能合约的合约代码由更新前的合约代码更新为该更新代码。
在示出的一种实施方式中,上述智能合约中的主智能合约中的用于对子智能合约进行调用管理的合约代码具体可以包括:用于对子智能合约的合约代码进行更新的部分合约代码;上述第三合约调用交易具体可以用于触发对子智能合约的合约代码进行更新,即用于调用该主智能合约的合约代码中用于对子智能合约的合约代码进行更新的部分合约代码。
在这种情况下,上述区块链中的节点设备可以响应于第三合约调用交易,调用该主智能合约的合约代码中用于对子智能合约的合约代码进行更新的部分合约代码,基于第三合约调用交易中的更新代码,将该智能合约中的各个子智能合约依次确定为待更新的子智能合约(称为第三目标子智能合约),并将确定出的第三目标子智能合约的状态切换为禁止调用状态,后续可以基于第三合约调用交易中的更新代码,对第三目标子智能合约的合约代码进行更新,并在更新完成后重新将第三目标子智能合约的状态切换为允许调用状态。
也即,可以先将该智能合约中的一个子智能合约确定为第三目标子智能合约,以对该子智能合约的合约代码进行更新;在对该子智能合约的合约代码的更新完成后,可以再将该智能合约中的下一个子智能合约确定为第三目标子智能合约,以对下一个子智能合约的合约代码进行更新。
在示出的一种实施方式中,可以通过将上述第三目标子智能合约的调用比例直接设置为0,实现将第三目标子智能合约的状态切换为禁止调用状态。相应地,在更新完成后,可以通过将第三目标子智能合约的调用比例由0切换为预设比例,实现将第三目标子智能合约的状态切换为允许调用状态。其中,该预设比例可以由技术人员预先设置,也可以是默认的缺省值,本说明书对此不作限制。
在示出的一种实施方式中,在对上述第三目标子智能合约的合约代码的更新完成后,将第三目标子智能合约的调用比例由0切换为预设比例时,可以按照预设的调用比例的更新步长,提高第三目标子智能合约的调用比例,并确定针对第三目标子智能合约的调用是否处于正常状态;如果是,则可以继续按照该更新步长,提高第三目标子智能合约的调用比例,并重新确定针对第三目标子智能合约的调用是否处于正常状态;重复执行提高第三目标子智能合约的调用比例的步骤直至将第三目标子智能合约的调用比例提高至预设比例。
以如图4所示的区块链系统为例,在对该区块链上部署的智能合约中的子智能合约1的合约代码进行更新时,一方面,可以将子智能合约1的调用比例直接设置为0,以将子智能合约1的状态切换为禁止调用状态;另一方面,可以适应性地将子智能合约2的调用比例设置为100%。假设由技术人员预先设置的调用比例的更新步长为5%,且与子智能合约1对应的预设比例为50%,则在对子智能合约1的合约代码的更新完成后,可以将子智能合约1的调用比例切换为5%,并适应性地将子智能合约2的调用比例切换为95%,后续可以确定针对子智能合约1的调用是否处于正常状态;如果是,则可以继续将子智能合约1的调用比例切换为10%,并适应性地将子智能合约2的调用比例切换为90%,后续可以确定针对子智能合约1的调用是否处于正常状态;以此类推,直至将子智能合约1的调用比例切换为50%,并适应性地将子智能合约2的调用比例切换为50%。
在实际应用中,在对上述第三目标子智能合约的合约代码的更新完成后,上述客户端可以向上述区块链中的节点设备发送与上述智能合约对应的合约调用交易。其中,该合约调用交易与上述第五合约调用交易类似,具体可以用于触发对第三目标子智能合约的调用比例进行更新;该合约调用交易可以包括第三目标子智能合约的合约地址,以及预设的调用比例的更新步长。该区块链中的节点设备可以响应于该合约调用交易,调用该智能合约中的主智能合约的合约代码中用于对子智能合约的调用比例进行更新的部分合约代码,先根据该合约调用交易中的合约地址确定第三目标子智能合约,再将第三目标子智能合约的调用比例更新为0与该更新步长之和。
为了确定针对第三目标子智能合约的调用是否处于正常状态,可以由客户端对第三目标子智能合约的执行结果进行监听,即监听由第三目标子智能合约基于业务数据执行相应的业务处理得到的业务处理结果是否正确;如果是,则可以确定针对第三目标子智能合约的调用处于正常状态。
客户端在确定了针对第三目标子智能合约的调用处于正常状态后,可以再次向该区块链中的节点设备发送与该智能合约对应的合约调用交易,以触发该区块链中的节点设备将第三目标子智能合约的调用比例更新为更新前的调用比例与该更新步长之和;以此类推,直至将第三目标子智能合约的调用比例提高至预设比例。
或者,在对上述第三目标子智能合约的合约代码的更新完成后,可以由上述智能合约中的主智能合约将第三目标子智能合约的调用比例更新为0与预设的调用比例的更新步长之和。
为了确定针对第三目标子智能合约的调用是否处于正常状态,可以在区块链之外开发监听程序,并由该监听程序对第三目标子智能合约的执行结果进行监听,即监听由第三目标子智能合约基于业务数据执行相应的业务处理得到的业务处理结果是否正确;如果是,则可以通过预言机向该主智能合约提交指示针对第三目标子智能合约的调用处于正常状态的结果。
该主智能合约在接收到指示针对第三目标子智能合约的调用处于正常状态的结果时,可以继续将第三目标子智能合约的调用比例更新为更新前的调用比例与该更新步长之和;以此类推,直至将第三目标子智能合约的调用比例提高至预设比例。
需要说明的是,如果确定针对上述第三目标子智能合约的调用处于异常状态,则可以认为上述与子智能合约中的合约代码对应的更新代码存在问题,从而可以停止提高第三目标子智能合约的调用比例,并将第三目标子智能合约的合约代码回滚至更新前的合约代码。
具体地,可以将第三目标子智能合约的合约账户中维护的该更新代码对应的hash值回滚至更新前的合约代码对应的hash值,以实现将第三目标子智能合约的合约代码由该更新代码回滚至更新前的合约代码。
在上述技术方案中,对于部署在区块链中的智能合约,可以将该智能合约中的业务逻辑通过该智能合约中的多个子智能合约进行备份,并由该智能合约中的主智能合约对这多个子智能合约进行调用管理。这样,一方面,在对该智能合约进行调用时,可以由该主智能合约对其中的多个子智能合约进行调度,以基于这多个子智能合约对调用该智能合约的交易进行分流,从而可以提高数据处理效率;另一方面,在对该智能合约进行更新时,可以先对其中的一个子智能合约的合约代码进行更新,并在确定针对更新完成的该子智能合约的调用正常时,再对下一个子智能合约的合约代码进行更新,从而可以避免对该智能合约的调用出现问题。
与前述基于区块链的智能合约更新方法的实施例相对应,本说明书还提供了基于区块链的智能合约更新装置的实施例。
本说明书基于区块链的智能合约更新装置的实施例可以应用在电子设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图7所示,为本说明书基于区块链的智能合约调用装置所在电子设备的一种硬件结构图,如图8所示,为本说明书基于区块链的智能合约更新装置所在电子设备的一种硬件结构图,除了图7和图8所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的电子设备通常根据该基于区块链的智能合约更新的实际功能,还可以包括其他硬件,对此不再赘述。
请参考图9,图9是本说明书一示例性实施例示出的一种基于区块链的智能合约调用装置的框图。该基于区块链的智能合约更新装置90可以应用于图7所示的电子设备,该电子设备可以作为节点设备加入至该区块链;其中,所述区块链上部署了智能合约,所述智能合约包括主智能合约和多个子智能合约;各个子智能合约的合约代码相同;所述主智能合约包括用于对子智能合约进行调用管理的合约代码;所述子智能合约包括与业务逻辑对应的合约代码;该基于区块链的智能合约更新装置90可以包括:
第一接收模块901,接收发布至所述区块链的与所述智能合约对应的第一合约调用交易;其中,所述第一合约调用交易用于触发对所述多个子智能合约进行执行调度;所述第一合约调用交易包括业务数据;
第一调用模块902,响应于所述第一合约调用交易,调用所述主智能合约的合约代码,从所述多个子智能合约中确定与所述业务数据对应的第一目标子智能合约;以及,在确定出所述第一目标子智能合约后,进一步调用所述第一目标子智能合约的合约代码,基于所述业务数据执行相应的业务处理。
在本实施例中,所述调用管理的合约代码,包括用于对子智能合约进行执行调度的合约代码;
所述第一调用模块902:
调用所述主智能合约中用于对子智能合约进行执行调度的合约代码,确定各个子智能合约被调用的次数,与所有子智能合约被调用的总次数的比值,是否达到为各个子智能合约预设的调用比例;
将所述比值未达到所述调用比例的子智能合约,确定为与所述业务数据对应的第一目标子智能合约。
在本实施例中,所述第一调用模块902:
如果存在所述比值未达到所述调用比例的一个子智能合约,将所述子智能合约确定为与所述业务数据对应的第一目标子智能合约;
如果存在所述比值未达到所述调用比例的多个子智能合约,从所述多个子智能合约中随机选择一个子智能合约,确定为与所述业务数据对应的第一目标子智能合约;或者,从所述多个子智能合约中选择所述比值最小的子智能合约,确定为与所述业务数据对应的第一目标子智能合约。
在本实施例中,所述调用管理的合约代码还包括用于对子智能合约的调用比例进行更新的合约代码;
所述装置90还包括:
第二接收模块903,接收发布至所述区块链的与所述智能合约对应的第二合约调用交易;其中,所述第二合约调用交易用于触发对所述多个子智能合约中的第二目标子智能合约的调用比例进行更新;所述第二合约调用交易包括所述第二目标子智能合约的合约地址;
第二调用模块904,响应于所述第二合约调用交易,调用所述主智能合约中用于对子智能合约的调用比例进行更新的合约代码,对所述第二目标子智能合约的调用比例进行更新。
在本实施例中,所述第二合约调用交易还包括更新后的调用比例;或者,调用比例的更新步长;
所述第二调用模块904:
将所述第二目标子智能合约的调用比例替换为更新后的调用比例;或者,
基于调用比例的更新步长,对所述第二目标子智能合约的调用比例进行更新。
请参考图10,图10是本说明书一示例性实施例示出的一种基于区块链的智能合约更新装置的框图。该基于区块链的智能合约更新装置100可以应用于图8所示的电子设备,该电子设备可以作为节点设备加入至该区块链;其中,所述区块链上部署了智能合约,所述智能合约包括主智能合约和多个子智能合约;各个子智能合约的合约代码相同;所述主智能合约包括用于对子智能合约进行调用管理的合约代码;所述子智能合约包括与业务逻辑对应的合约代码;所述装置应用于所述区块链中的节点设备;该基于区块链的智能合约更新装置100可以包括:
第三接收模块1001,接收发布至所述区块链的与所述智能合约对应的第三合约调用交易;其中,所述第三合约调用交易用于触发对子智能合约的合约代码进行更新;所述第三合约调用交易包括与所述子智能合约的合约代码对应的更新代码;
第三调用模块1002,响应于所述第三合约调用交易,调用所述主智能合约的合约代码,基于所述更新代码分别对各个子智能合约的合约代码进行更新。
在本实施例中,所述第三合约调用交易包括的更新代码为发布至所述区块链的所述更新代码对应的hash值;
所述第三调用模块1002:
基于所述更新代码对应的hash值,分别对各个子智能合约的合约账户中维护的更新前的合约代码对应的hash值进行更新。
在本实施例中,所述调用管理的合约代码包括用于对子智能合约的合约代码进行更新的合约代码;
所述第三调用模块1002:
调用所述主智能合约中用于对子智能合约的合约代码进行更新的合约代码,将各个子智能合约依次确定为待更新的第三目标子智能合约,并将确定出的第三目标子智能合约切换为禁止调用状态;以及
基于所述更新代码对所述第三目标子智能合约的合约代码进行更新,并在更新完成后将所述第三目标子智能合约切换为允许调用状态。
在本实施例中,所述装置100还包括:
第四接收模块1003,接收发布至所述区块链的与所述智能合约对应的第四合约调用交易;其中,所述第四合约调用交易用于触发对所述多个子智能合约进行执行调度;所述第四合约调用交易包括业务数据;
第四调用模块1004,响应于所述第四合约调用交易,调用所述主智能合约的合约代码,从处于允许调用状态的所述子智能合约中,确定与所述业务数据对应的第四目标子智能合约;以及,在确定出所述第四目标子智能合约后,进一步调用所述第四目标子智能合约的合约代码,基于所述业务数据执行相应的业务处理。
在本实施例中,所述调用管理的合约代码,包括用于对子智能合约进行执行调度的合约代码;
所述第四调用模块1004:
调用所述主智能合约中用于对子智能合约进行执行调度的合约代码,确定处于允许调用状态的各个子智能合约被调用的次数,与处于允许调用状态的所有子智能合约被调用的总次数的比值,是否达到为处于允许调用状态的各个子智能合约预设的调用比例;
将处于允许调用状态的各个子智能合约中,所述比值未达到所述调用比例的子智能合约,确定为与所述业务数据对应的第四目标子智能合约。
在本实施例中,所述第三调用模块1002:
将确定出的第三目标子智能合约的调用比例设置为0;
所述在更新完成后将所述第三目标子智能合约切换为允许调用状态,包括:
在更新完成后将所述第三目标子智能合约的调用比例由0切换为预设比例。
在本实施例中,所述第三调用模块1002:
在更新完成后按照预设的调用比例的更新步长,提高所述第三目标子智能合约的调用比例,并确定针对所述第三目标子智能合约的调用是否处于正常状态;如果是,继续按照所述调用比例的更新步长,提高所述第三目标子智能合约的调用比例,并确定针对所述第三目标子智能合约的调用是否处于正常状态;重复执行提高所述第三目标子智能合约的调用比例的步骤直至将所述第三目标子智能合约的调用比例提高至所述预设比例。
在本实施例中,所述装置100还包括:
回滚模块1005,如果针对所述第三目标子智能合约的调用处于异常状态,将所述第三目标子智能合约的合约代码回滚至更新前的合约代码。
在本实施例中,所述回滚模块1005:
将所述第三目标子智能合约的合约账户中维护的所述更新代码对应的hash值回滚至更新前的合约代码对应的hash值。
在本实施例中,所述第四调用模块1004:
如果处于允许调用状态的各个子智能合约中,存在所述比值未达到所述调用比例的一个子智能合约,将所述子智能合约确定为与所述业务数据对应的第四目标子智能合约;
如果处于允许调用状态的各个子智能合约中,存在所述比值未达到所述调用比例的多个子智能合约,从所述多个子智能合约中随机选择一个子智能合约,确定为与所述业务数据对应的第四目标子智能合约;或者,从所述多个子智能合约中选择所述比值最小的子智能合约,确定为与所述业务数据对应的第四目标子智能合约。
在本实施例中,所述调用管理的合约代码,还包括用于对子智能合约的调用比例进行更新的合约代码;
所述装置100还包括:
第五接收模块1006,接收发布至所述区块链的与所述智能合约对应的第五合约调用交易;其中,所述第五合约调用交易用于触发对所述多个子智能合约中的第五目标子智能合约的调用比例进行更新;所述第五合约调用交易包括所述第五目标子智能合约的合约地址;
第五调用模块1007,响应于所述第五合约调用交易,调用所述主智能合约中用于对子智能合约的调用比例进行更新的合约代码,对所述第五目标子智能合约的调用比例进行更新。
在本实施例中,所述第五合约调用交易还包括更新后的调用比例;或者,调用比例的更新步长;
所述第五调用模块1007:
将所述第五目标子智能合约的调用比例替换为更新后的调用比例;或者,
基于调用比例的更新步长,对所述第五目标子智能合约的调用比例进行更新。
上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。

Claims (38)

1.一种基于区块链的智能合约调用方法;其中,所述区块链上部署了智能合约,所述智能合约包括主智能合约和多个子智能合约;各个子智能合约的合约代码相同;所述主智能合约包括用于对子智能合约进行调用管理的合约代码;所述子智能合约包括与业务逻辑对应的合约代码;所述方法应用于所述区块链中的节点设备,包括:
接收发布至所述区块链的与所述智能合约对应的第一合约调用交易;其中,所述第一合约调用交易用于触发对所述多个子智能合约进行执行调度;所述第一合约调用交易包括业务数据;
响应于所述第一合约调用交易,调用所述主智能合约的合约代码,从所述多个子智能合约中确定与所述业务数据对应的第一目标子智能合约;以及,
在确定出所述第一目标子智能合约后,进一步调用所述第一目标子智能合约的合约代码,基于所述业务数据执行相应的业务处理。
2.根据权利要求1所述的方法,所述调用管理的合约代码,包括用于对子智能合约进行执行调度的合约代码;
所述调用所述主智能合约的合约代码,从所述多个子智能合约中确定与所述业务数据对应的第一目标子智能合约,包括:
调用所述主智能合约中用于对子智能合约进行执行调度的合约代码,确定各个子智能合约被调用的次数,与所有子智能合约被调用的总次数的比值,是否达到为各个子智能合约预设的调用比例;
将所述比值未达到所述调用比例的子智能合约,确定为与所述业务数据对应的第一目标子智能合约。
3.根据权利要求2所述的方法,所述将所述比值未达到所述调用比例的子智能合约,确定为与所述业务数据对应的第一目标子智能合约,包括:
如果存在所述比值未达到所述调用比例的一个子智能合约,将所述子智能合约确定为与所述业务数据对应的第一目标子智能合约;
如果存在所述比值未达到所述调用比例的多个子智能合约,从所述多个子智能合约中随机选择一个子智能合约,确定为与所述业务数据对应的第一目标子智能合约;或者,从所述多个子智能合约中选择所述比值最小的子智能合约,确定为与所述业务数据对应的第一目标子智能合约。
4.根据权利要求2所述的方法,所述调用管理的合约代码还包括用于对子智能合约的调用比例进行更新的合约代码;
所述方法还包括:
接收发布至所述区块链的与所述智能合约对应的第二合约调用交易;其中,所述第二合约调用交易用于触发对所述多个子智能合约中的第二目标子智能合约的调用比例进行更新;所述第二合约调用交易包括所述第二目标子智能合约的合约地址;
响应于所述第二合约调用交易,调用所述主智能合约中用于对子智能合约的调用比例进行更新的合约代码,对所述第二目标子智能合约的调用比例进行更新。
5.根据权利要求4所述的方法,所述第二合约调用交易还包括更新后的调用比例;或者,调用比例的更新步长;
所述对所述第二目标子智能合约的调用比例进行更新,包括:
将所述第二目标子智能合约的调用比例替换为更新后的调用比例;或者,
基于调用比例的更新步长,对所述第二目标子智能合约的调用比例进行更新。
6.一种基于区块链的智能合约更新方法;其中,所述区块链上部署了智能合约,所述智能合约包括主智能合约和多个子智能合约;各个子智能合约的合约代码相同;所述主智能合约包括用于对子智能合约进行调用管理的合约代码;所述子智能合约包括与业务逻辑对应的合约代码;所述方法应用于所述区块链中的节点设备,包括:
接收发布至所述区块链的与所述智能合约对应的第三合约调用交易;其中,所述第三合约调用交易用于触发对子智能合约的合约代码进行更新;所述第三合约调用交易包括与所述子智能合约的合约代码对应的更新代码;
响应于所述第三合约调用交易,调用所述主智能合约的合约代码,基于所述更新代码分别对各个子智能合约的合约代码进行更新。
7.根据权利要求6所述的方法,所述第三合约调用交易包括的更新代码为发布至所述区块链的所述更新代码对应的hash值;
所述基于所述更新代码分别对各个子智能合约的合约代码进行更新,包括:
基于所述更新代码对应的hash值,分别对各个子智能合约的合约账户中维护的更新前的合约代码对应的hash值进行更新。
8.根据权利要求6所述的方法,所述调用管理的合约代码包括用于对子智能合约的合约代码进行更新的合约代码;
所述调用所述主智能合约的合约代码,基于所述更新代码分别对各个子智能合约的合约代码进行更新,包括:
调用所述主智能合约中用于对子智能合约的合约代码进行更新的合约代码,将各个子智能合约依次确定为待更新的第三目标子智能合约,并将确定出的第三目标子智能合约切换为禁止调用状态;以及
基于所述更新代码对所述第三目标子智能合约的合约代码进行更新,并在更新完成后将所述第三目标子智能合约切换为允许调用状态。
9.根据权利要求8所述的方法,所述方法还包括:
接收发布至所述区块链的与所述智能合约对应的第四合约调用交易;其中,所述第四合约调用交易用于触发对所述多个子智能合约进行执行调度;所述第四合约调用交易包括业务数据;
响应于所述第四合约调用交易,调用所述主智能合约的合约代码,从处于允许调用状态的所述子智能合约中,确定与所述业务数据对应的第四目标子智能合约;以及,
在确定出所述第四目标子智能合约后,进一步调用所述第四目标子智能合约的合约代码,基于所述业务数据执行相应的业务处理。
10.根据权利要求9所述的方法,所述调用管理的合约代码,包括用于对子智能合约进行执行调度的合约代码;
所述调用所述主智能合约的合约代码,从处于允许调用状态的所述子智能合约中,确定与所述业务数据对应的第四目标子智能合约,包括:
调用所述主智能合约中用于对子智能合约进行执行调度的合约代码,确定处于允许调用状态的各个子智能合约被调用的次数,与处于允许调用状态的所有子智能合约被调用的总次数的比值,是否达到为处于允许调用状态的各个子智能合约预设的调用比例;
将处于允许调用状态的各个子智能合约中,所述比值未达到所述调用比例的子智能合约,确定为与所述业务数据对应的第四目标子智能合约。
11.根据权利要求10所述的方法,所述将确定出的第三目标子智能合约切换为禁止调用状态,包括:
将确定出的第三目标子智能合约的调用比例设置为0;
所述在更新完成后将所述第三目标子智能合约切换为允许调用状态,包括:
在更新完成后将所述第三目标子智能合约的调用比例由0切换为预设比例。
12.根据权利要求11所述的方法,所述在更新完成后将所述第三目标子智能合约的调用比例由0切换为预设比例,包括:
在更新完成后按照预设的调用比例的更新步长,提高所述第三目标子智能合约的调用比例,并确定针对所述第三目标子智能合约的调用是否处于正常状态;如果是,继续按照所述调用比例的更新步长,提高所述第三目标子智能合约的调用比例,并确定针对所述第三目标子智能合约的调用是否处于正常状态;重复执行提高所述第三目标子智能合约的调用比例,直至将所述第三目标子智能合约的调用比例提高至所述预设比例。
13.根据权利要求12所述的方法,所述方法还包括:
如果针对所述第三目标子智能合约的调用处于异常状态,将所述第三目标子智能合约的合约代码回滚至更新前的合约代码。
14.根据权利要求13所述的方法,所述将所述第三目标子智能合约的合约代码回滚至更新前的合约代码,包括:
将所述第三目标子智能合约的合约账户中维护的所述更新代码对应的hash值回滚至更新前的合约代码对应的hash值。
15.根据权利要求10所述的方法,所述将处于允许调用状态的所述子智能合约中,所述比值未达到所述调用比例的子智能合约,确定为与所述业务数据对应的第四目标子智能合约,包括:
如果处于允许调用状态的各个子智能合约中,存在所述比值未达到所述调用比例的一个子智能合约,将所述子智能合约确定为与所述业务数据对应的第四目标子智能合约;
如果处于允许调用状态的各个子智能合约中,存在所述比值未达到所述调用比例的多个子智能合约,从所述多个子智能合约中随机选择一个子智能合约,确定为与所述业务数据对应的第四目标子智能合约;或者,从所述多个子智能合约中选择所述比值最小的子智能合约,确定为与所述业务数据对应的第四目标子智能合约。
16.根据权利要求10所述的方法,所述调用管理的合约代码,还包括用于对子智能合约的调用比例进行更新的合约代码;
所述方法还包括:
接收发布至所述区块链的与所述智能合约对应的第五合约调用交易;其中,所述第五合约调用交易用于触发对所述多个子智能合约中的第五目标子智能合约的调用比例进行更新;所述第五合约调用交易包括所述第五目标子智能合约的合约地址;
响应于所述第五合约调用交易,调用所述主智能合约中用于对子智能合约的调用比例进行更新的合约代码,对所述第五目标子智能合约的调用比例进行更新。
17.根据权利要求16所述的方法,所述第五合约调用交易还包括更新后的调用比例;或者,调用比例的更新步长;
所述对所述第五目标子智能合约的调用比例进行更新,包括:
将所述第五目标子智能合约的调用比例替换为更新后的调用比例;或者,
基于调用比例的更新步长,对所述第五目标子智能合约的调用比例进行更新。
18.一种基于区块链的智能合约调用装置;其中,所述区块链上部署了智能合约,所述智能合约包括主智能合约和多个子智能合约;各个子智能合约的合约代码相同;所述主智能合约包括用于对子智能合约进行调用管理的合约代码;所述子智能合约包括与业务逻辑对应的合约代码;所述装置应用于所述区块链中的节点设备,包括:
第一接收模块,接收发布至所述区块链的与所述智能合约对应的第一合约调用交易;其中,所述第一合约调用交易用于触发对所述多个子智能合约进行执行调度;所述第一合约调用交易包括业务数据;
第一调用模块,响应于所述第一合约调用交易,调用所述主智能合约的合约代码,从所述多个子智能合约中确定与所述业务数据对应的第一目标子智能合约;以及,在确定出所述第一目标子智能合约后,进一步调用所述第一目标子智能合约的合约代码,基于所述业务数据执行相应的业务处理。
19.根据权利要求18所述的装置,所述调用管理的合约代码,包括用于对子智能合约进行执行调度的合约代码;
所述第一调用模块:
调用所述主智能合约中用于对子智能合约进行执行调度的合约代码,确定各个子智能合约被调用的次数,与所有子智能合约被调用的总次数的比值,是否达到为各个子智能合约预设的调用比例;
将所述比值未达到所述调用比例的子智能合约,确定为与所述业务数据对应的第一目标子智能合约。
20.根据权利要求19所述的装置,所述第一调用模块:
如果存在所述比值未达到所述调用比例的一个子智能合约,将所述子智能合约确定为与所述业务数据对应的第一目标子智能合约;
如果存在所述比值未达到所述调用比例的多个子智能合约,从所述多个子智能合约中随机选择一个子智能合约,确定为与所述业务数据对应的第一目标子智能合约;或者,从所述多个子智能合约中选择所述比值最小的子智能合约,确定为与所述业务数据对应的第一目标子智能合约。
21.根据权利要求19所述的装置,所述调用管理的合约代码还包括用于对子智能合约的调用比例进行更新的合约代码;
所述装置还包括:
第二接收模块,接收发布至所述区块链的与所述智能合约对应的第二合约调用交易;其中,所述第二合约调用交易用于触发对所述多个子智能合约中的第二目标子智能合约的调用比例进行更新;所述第二合约调用交易包括所述第二目标子智能合约的合约地址;
第二调用模块,响应于所述第二合约调用交易,调用所述主智能合约中用于对子智能合约的调用比例进行更新的合约代码,对所述第二目标子智能合约的调用比例进行更新。
22.根据权利要求21所述的装置,所述第二合约调用交易还包括更新后的调用比例;或者,调用比例的更新步长;
所述第二调用模块:
将所述第二目标子智能合约的调用比例替换为更新后的调用比例;或者,
基于调用比例的更新步长,对所述第二目标子智能合约的调用比例进行更新。
23.一种基于区块链的智能合约更新装置;其中,所述区块链上部署了智能合约,所述智能合约包括主智能合约和多个子智能合约;各个子智能合约的合约代码相同;所述主智能合约包括用于对子智能合约进行调用管理的合约代码;所述子智能合约包括与业务逻辑对应的合约代码;所述装置应用于所述区块链中的节点设备,包括:
第三接收模块,接收发布至所述区块链的与所述智能合约对应的第三合约调用交易;其中,所述第三合约调用交易用于触发对子智能合约的合约代码进行更新;所述第三合约调用交易包括与所述子智能合约的合约代码对应的更新代码;
第三调用模块,响应于所述第三合约调用交易,调用所述主智能合约的合约代码,基于所述更新代码分别对各个子智能合约的合约代码进行更新。
24.根据权利要求23所述的装置,所述第三合约调用交易包括的更新代码为发布至所述区块链的所述更新代码对应的hash值;
所述第三调用模块:
基于所述更新代码对应的hash值,分别对各个子智能合约的合约账户中维护的更新前的合约代码对应的hash值进行更新。
25.根据权利要求23所述的装置,所述调用管理的合约代码包括用于对子智能合约的合约代码进行更新的合约代码;
所述第三调用模块:
调用所述主智能合约中用于对子智能合约的合约代码进行更新的合约代码,将各个子智能合约依次确定为待更新的第三目标子智能合约,并将确定出的第三目标子智能合约切换为禁止调用状态;以及
基于所述更新代码对所述第三目标子智能合约的合约代码进行更新,并在更新完成后将所述第三目标子智能合约切换为允许调用状态。
26.根据权利要求25所述的装置,所述装置还包括:
第四接收模块,接收发布至所述区块链的与所述智能合约对应的第四合约调用交易;其中,所述第四合约调用交易用于触发对所述多个子智能合约进行执行调度;所述第四合约调用交易包括业务数据;
第四调用模块,响应于所述第四合约调用交易,调用所述主智能合约的合约代码,从处于允许调用状态的所述子智能合约中,确定与所述业务数据对应的第四目标子智能合约;以及,在确定出所述第四目标子智能合约后,进一步调用所述第四目标子智能合约的合约代码,基于所述业务数据执行相应的业务处理。
27.根据权利要求26所述的装置,所述调用管理的合约代码,包括用于对子智能合约进行执行调度的合约代码;
所述第四调用模块:
调用所述主智能合约中用于对子智能合约进行执行调度的合约代码,确定处于允许调用状态的各个子智能合约被调用的次数,与处于允许调用状态的所有子智能合约被调用的总次数的比值,是否达到为处于允许调用状态的各个子智能合约预设的调用比例;
将处于允许调用状态的各个子智能合约中,所述比值未达到所述调用比例的子智能合约,确定为与所述业务数据对应的第四目标子智能合约。
28.根据权利要求27所述的装置,所述第三调用模块:
将确定出的第三目标子智能合约的调用比例设置为0;
所述在更新完成后将所述第三目标子智能合约切换为允许调用状态,包括:
在更新完成后将所述第三目标子智能合约的调用比例由0切换为预设比例。
29.根据权利要求28所述的装置,所述第三调用模块:
在更新完成后按照预设的调用比例的更新步长,提高所述第三目标子智能合约的调用比例,并确定针对所述第三目标子智能合约的调用是否处于正常状态;如果是,继续按照所述调用比例的更新步长,提高所述第三目标子智能合约的调用比例,并确定针对所述第三目标子智能合约的调用是否处于正常状态;重复执行提高所述第三目标子智能合约的调用比例,直至将所述第三目标子智能合约的调用比例提高至所述预设比例。
30.根据权利要求29所述的装置,所述装置还包括:
回滚模块,如果针对所述第三目标子智能合约的调用处于异常状态,将所述第三目标子智能合约的合约代码回滚至更新前的合约代码。
31.根据权利要求30所述的装置,所述回滚模块:
将所述第三目标子智能合约的合约账户中维护的所述更新代码对应的hash值回滚至更新前的合约代码对应的hash值。
32.根据权利要求27所述的装置,所述第四调用模块:
如果处于允许调用状态的各个子智能合约中,存在所述比值未达到所述调用比例的一个子智能合约,将所述子智能合约确定为与所述业务数据对应的第四目标子智能合约;
如果处于允许调用状态的各个子智能合约中,存在所述比值未达到所述调用比例的多个子智能合约,从所述多个子智能合约中随机选择一个子智能合约,确定为与所述业务数据对应的第四目标子智能合约;或者,从所述多个子智能合约中选择所述比值最小的子智能合约,确定为与所述业务数据对应的第四目标子智能合约。
33.根据权利要求27所述的装置,所述调用管理的合约代码,还包括用于对子智能合约的调用比例进行更新的合约代码;
所述装置还包括:
第五接收模块,接收发布至所述区块链的与所述智能合约对应的第五合约调用交易;其中,所述第五合约调用交易用于触发对所述多个子智能合约中的第五目标子智能合约的调用比例进行更新;所述第五合约调用交易包括所述第五目标子智能合约的合约地址;
第五调用模块,响应于所述第五合约调用交易,调用所述主智能合约中用于对子智能合约的调用比例进行更新的合约代码,对所述第五目标子智能合约的调用比例进行更新。
34.根据权利要求33所述的装置,所述第五合约调用交易还包括更新后的调用比例;或者,调用比例的更新步长;
所述第五调用模块:
将所述第五目标子智能合约的调用比例替换为更新后的调用比例;或者,
基于调用比例的更新步长,对所述第五目标子智能合约的调用比例进行更新。
35.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1至5中任一项所述方法。
36.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求6至17中任一项所述方法。
37.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1至5中任一项所述方法。
38.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求6至17中任一项所述方法。
CN202010818565.6A 2020-08-14 2020-08-14 基于区块链的智能合约调用方法及装置、电子设备 Active CN111679902B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010818565.6A CN111679902B (zh) 2020-08-14 2020-08-14 基于区块链的智能合约调用方法及装置、电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010818565.6A CN111679902B (zh) 2020-08-14 2020-08-14 基于区块链的智能合约调用方法及装置、电子设备

Publications (2)

Publication Number Publication Date
CN111679902A true CN111679902A (zh) 2020-09-18
CN111679902B CN111679902B (zh) 2020-11-10

Family

ID=72438623

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010818565.6A Active CN111679902B (zh) 2020-08-14 2020-08-14 基于区块链的智能合约调用方法及装置、电子设备

Country Status (1)

Country Link
CN (1) CN111679902B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113034137A (zh) * 2021-03-12 2021-06-25 腾讯科技(深圳)有限公司 基于区块链的数据处理方法、装置及相关设备
CN113205424A (zh) * 2020-10-28 2021-08-03 支付宝(杭州)信息技术有限公司 在区块链中部署和调用合约的方法和装置

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106919419A (zh) * 2017-02-03 2017-07-04 中钞信用卡产业发展有限公司北京智能卡技术研究院 区块链上的智能合约程序的更新方法及装置
CN107145521A (zh) * 2017-04-10 2017-09-08 杭州趣链科技有限公司 一种面向区块链多级智能合约的数据迁移方法
WO2019186282A1 (en) * 2018-03-29 2019-10-03 Dlt Labs, Inc. Updateable smart contracts
CN110471921A (zh) * 2019-08-08 2019-11-19 杭州复杂美科技有限公司 一种智能合约配置、调用和更新方法、设备及存储介质
CN110688634A (zh) * 2019-09-19 2020-01-14 杭州云象网络技术有限公司 一种联盟链事务智能执行的方法
US20200051069A1 (en) * 2018-08-10 2020-02-13 tZERO Group, Inc. Upgradeable security token
CN110809042A (zh) * 2019-10-31 2020-02-18 杭州云象网络技术有限公司 一种基于de bruijn序列生成技术的智能合约分片存储方法
CN110955448A (zh) * 2019-10-11 2020-04-03 平安壹钱包电子商务有限公司 智能合约分离方法、合约处理方法、装置、设备及介质
CN111159753A (zh) * 2019-12-10 2020-05-15 天翼电子商务有限公司 区块链智能合约管理方法及系统、存储介质及终端
CN111311407A (zh) * 2020-02-07 2020-06-19 腾讯科技(深圳)有限公司 基于区块链系统的数据处理方法、装置及电子设备

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106919419A (zh) * 2017-02-03 2017-07-04 中钞信用卡产业发展有限公司北京智能卡技术研究院 区块链上的智能合约程序的更新方法及装置
CN107145521A (zh) * 2017-04-10 2017-09-08 杭州趣链科技有限公司 一种面向区块链多级智能合约的数据迁移方法
WO2019186282A1 (en) * 2018-03-29 2019-10-03 Dlt Labs, Inc. Updateable smart contracts
US20200051069A1 (en) * 2018-08-10 2020-02-13 tZERO Group, Inc. Upgradeable security token
CN110471921A (zh) * 2019-08-08 2019-11-19 杭州复杂美科技有限公司 一种智能合约配置、调用和更新方法、设备及存储介质
CN110688634A (zh) * 2019-09-19 2020-01-14 杭州云象网络技术有限公司 一种联盟链事务智能执行的方法
CN110955448A (zh) * 2019-10-11 2020-04-03 平安壹钱包电子商务有限公司 智能合约分离方法、合约处理方法、装置、设备及介质
CN110809042A (zh) * 2019-10-31 2020-02-18 杭州云象网络技术有限公司 一种基于de bruijn序列生成技术的智能合约分片存储方法
CN111159753A (zh) * 2019-12-10 2020-05-15 天翼电子商务有限公司 区块链智能合约管理方法及系统、存储介质及终端
CN111311407A (zh) * 2020-02-07 2020-06-19 腾讯科技(深圳)有限公司 基于区块链系统的数据处理方法、装置及电子设备

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113205424A (zh) * 2020-10-28 2021-08-03 支付宝(杭州)信息技术有限公司 在区块链中部署和调用合约的方法和装置
CN113205424B (zh) * 2020-10-28 2023-08-25 支付宝(杭州)信息技术有限公司 在区块链中部署和调用合约的方法和装置
CN113034137A (zh) * 2021-03-12 2021-06-25 腾讯科技(深圳)有限公司 基于区块链的数据处理方法、装置及相关设备

Also Published As

Publication number Publication date
CN111679902B (zh) 2020-11-10

Similar Documents

Publication Publication Date Title
CN110471984B (zh) 基于区块链的业务处理方法及装置、电子设备
US11195231B2 (en) Transaction processing in a service blockchain
CN110706114B (zh) 一种基于区块链的违约资产处理方法、装置及电子设备
US20210006506A1 (en) Allocating virtual resource based on block chain
CN110765200B (zh) 一种基于区块链的资产申购方法、装置及电子设备
CN110458631B (zh) 基于区块链的票据号码分配方法、装置及电子设备
CN111681017B (zh) 基于区块链的货物批量验真方法及装置、电子设备
CN110147990B (zh) 基于区块链的缴费代扣签约方法及装置、电子设备
WO2021197097A1 (zh) 跨链数据订阅
CN110473030B (zh) 基于区块链的电子票据号码申领方法及装置、电子设备
CN112101938B (zh) 基于区块链的数字印章使用方法、装置及电子设备
EP3961453B1 (en) Method and apparatus for invoking smart contract, electronic device, and storage medium
CN112100588A (zh) 基于区块链的数字印章申领方法、装置及电子设备
CN111679902B (zh) 基于区块链的智能合约调用方法及装置、电子设备
CN111639125A (zh) 基于区块链的资源流通方法及装置
CN111553695B (zh) 跨区域支付方法及装置、电子设备
CN112200569A (zh) 基于区块链的数字印章使用方法、装置及电子设备
CN110717820A (zh) 基于区块链的资产清偿方法及装置、电子设备
CN110443612B (zh) 一种基于区块链的报销费用分割方法、装置及电子设备
CN114780285A (zh) 区块链数据恢复方法及装置、电子设备
CN111475522A (zh) 基于区块链的仓单数据管理方法及装置、电子设备
CN113469656A (zh) 基于区块链的物理印章销毁方法、装置及电子设备
WO2022077181A1 (zh) 保护区块链上数据安全的方法及装置和电子设备
CN113469658A (zh) 基于区块链的物理印章使用方法、装置及电子设备
CN113469657A (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: 40037334

Country of ref document: HK

TR01 Transfer of patent right

Effective date of registration: 20240221

Address after: Room 1408, No. 447 Nanquan North Road, China (Shanghai) Pilot Free Trade Zone, Pudong New Area, Shanghai, 200120

Patentee after: Shanghai Ant Chuangjiang Information Technology Co.,Ltd.

Country or region after: China

Address before: 310000 801-11 section B, 8th floor, 556 Xixi Road, Xihu District, Hangzhou City, Zhejiang Province

Patentee before: Alipay (Hangzhou) Information Technology Co.,Ltd.

Country or region before: China

TR01 Transfer of patent right