区块链跨链合约调用方法、装置及存储介质
技术领域
本发明涉及区块链技术领域,尤其涉及一种区块链跨链合约调用方法、装置及存储介质。
背景技术
区块链技术目前来说最紧迫的问题是扩展性问题,这个扩展性问题分为两部分:一个是计算力,区块链系统中每一笔交易都需要经过系统中每一个节点的处理,所以系统中处理交易的速度上限为单个节点的处理能力,而不是所有处理节点的总和;二是存储大小,所有记账节点存储的区块交易数据都是一样的,随着区块链数据的不断增长,这个问题将会越来越严重。
解决上述扩展性问题的方案有三大方向:
1、以闪电网络为代表的侧链技术。大概思路是,将一部分币转移到链下,如此,这部分币可以快速交易,等完成快速交易后再讲结果上到原来的主链上。
2、以dpos为代表的使用超级节点作为记账节点的技术。由于能够参与共识的只有少量的超级节点,这些节点有很强的计算和存储能力,可以较为简单地实现高性能。这种方法的问题是会牺牲一定的去中心化的特性,因为只有少数的超级节点才能够当记账节点。
3、分片技术。这种技术将原来的一个链分为多个链,缺点是复杂度相对较高,但是有很好的扩展性,当性能不够用的时候,继续增加链的个数就可以了。除此之外,也能保持很好的去中心化的特性。
正如上面所说的,分片的技术复杂度相对较高。其中一个必须要解决的问题是合约的扩展性。详细地,在未分片时,一个合约的性能理论上最大上限受到单个分片(单条链)交易处理速度的限制。分片后,即使是同一个合约在同一个分片中部署多次,所有合约加起来的性能仍然受限于整个链的性能。如果将合约部署在多个分片中,合约在不同分片之间的调用将会涉及到原子操作的问题。
发明内容
本发明的主要目的在于提供一种区块链跨链合约调用方法、装置及存储介质,旨在解决跨链合约的原子操作的问题。
为实现上述目的,本发明提供的一种区块链跨链合约调用方法,包括:
获取第一分片中的第一合约调用区块链上的第二分片中的第二合约的请求;
在第一分片上将所述第一合约的状态树删除,并将第一合约的状态树、第二分片的ID以及第一合约的第一回调函数打包成第一收据;
利用跨链交易将所述第一收据发送至第二分片,以使所述第二分片根据所述第一收据在第二分片上创建所述第一合约以及所述第一合约的状态树并执行所述第一合约的第一回调函数。
可选地,所述方法还包括:
接收所述第二分片通过跨链交易发送的第二收据,所述第二收据包括第一合约的状态树、第一分片的ID以及第一合约的第二回调函数;
根据所述第二收据在第一分片上重新生成所述第一合约的状态树,并继续执行所述第一合约的第二回调函数。
可选地,所述方法还包括:
所述第一合约调用预先添加在以太坊虚拟机中的合约调用操作码,以生成调用区块链上的第二分片中的第二合约的请求,其中所述合约调用操作码包括目的分片的ID以及当前合约移动至目的分片后需要执行的回调函数,所述请求包括第二分片的ID以及所述第一合约的回调函数。
为实现上述目的,本发明进一步提供一种区块链跨链合约调用装置,所述装置包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的区块链跨链合约调用程序,所述区块链跨链合约调用程序被所述处理器执行时实现上述所述的区块链跨链合约调用方法。
为实现上述目的,本发明提供的一种区块链跨链合约调用方法,包括:
接收第一分片通过跨链交易发送的第一收据,获取所述第一收据中包括的第一合约的状态树、第二分片的ID以及第一合约的第一回调函数;
在第二分片上创建所述第一合约及所述第一合约的状态树,并执行所述第一合约的第一回调函数。
可选地,所述执行所述第一合约的回调函数包括:执行所述第二分片上的第一合约,并调用所述第二分片上的第二合约。
可选地,所述方法还包括:
所述第二分片上的所述第一合约执行完毕后,将所述第一合约的状态树、第一分片的ID以及第一合约的第二回调函数打包成第二收据;
通过跨链交易将所述第二收据发送给所述第一分片,以使所述第一分片恢复所述第一合约的状态树,并继续执行所述第一合约的第二回调函数。
为实现上述目的,本发明进一步提供一种区块链跨链合约调用装置,所述装置包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的区块链跨链合约调用程序,所述区块链跨链合约调用程序被所述处理器执行时实现上述所述的区块链跨链合约调用方法。
为实现上述目的,本发明提供的一种区块链跨链合约调用方法,包括:
响应区块链上的第一分片中的第一合约调用该区块链上的第二分片中的第二合约的请求,在所述第一分片中删除所述第一合约的状态树,并将第一合约的状态树、第二分片的ID以及第一合约的第一回调函数打包成第一收据;
利用跨链交易将所述第一收据发送至第二分片,根据所述第一收据,在所述第二分片中生成所述第一合约的状态树以构建所述第一合约,并在所述第二分片中执行所述第一合约的第一回调函数;
当所述第一合约在所述第二分片中执行完毕后,在所述第二分片中删除所述第一合约的状态树,并将所述第一合约的状态树、第一分片的ID以及第一合约的第二回调函数打包成第二收据;及
根据所述第二收据,在所述第一分片中重新生成所述第一合约的状态树以恢复所述第一合约,并继续执行所述第一合约的第二回调函数。
为实现上述目的,本发明进一步提供一种计算机可读存储介质,所述计算机可读存储介质上存储有区块链跨链合约调用程序,所述区块链跨链合约调用程序被一个或者多个处理器执行,以实现上述所述的区块链跨链合约调用方法。
为实现上述目的,本发明进一步提供一种计算机程序产品,包括一个或多个计算机指令,在计算机上加载和执行所述计算机程序指令时,实现上述所述的区块链跨链合约调用方法。
本实施例所述区块链跨链合约调用方法、装置及存储介质,在交易涉及多个分片中的合约的修改时,将合约转移到同一个分片中,执行完合约修改之后,再将转移的合约进行回调,有效地解决了合约部署在多个分片中时,涉及到的跨链合约的原子操作的问题。
附图说明
图1为本发明一实施例区块链跨链合约调用方法的流程示意图;
图2为图1中区块链跨链合约调用方法的步骤的细化流程示意图;
图3为本发明一实施例揭露的区块链跨链合约调用装置的内部结构示意图;
图4为图3中区块链跨链合约调用程序的功能模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
本发明提供一种区块链跨链合约调用方法。
参照图1,图1为本发明一实施例区块链跨链合约调用方法的流程示意图。该流程示意图中所述方法可以由一个装置执行,该装置可以由软件和/或硬件实现。
在本实施例中,所述区块链跨链合约调用方法包括:
S00,响应区块链上的第一分片中的第一合约调用该区块链上的第二分片中的第二合约的请求,在所述第一分片中删除所述第一合约的状态树,并将第一合约的状态树、第二分片的ID以及第一合约的第一回调函数打包成第一收据。
S01,利用跨链交易将所述第一收据发送至第二分片,根据所述第一收据,在所述第二分片中生成所述第一合约的状态树以构建所述第一合约,并在所述第二分片中执行所述第一合约的第一回调函数。
S02,当所述第一合约在所述第二分片中执行完毕后,在所述第二分片中删除所述第一合约的状态树,并将所述第一合约的状态树、第一分片的ID以及第一合约的第二回调函数打包成第二收据。
S03,根据所述第二收据,在所述第一分片中重新生成第一合约的状态树以恢复所述第一合约,并继续执行所述第一合约的第二回调函数。
在同一个分片的合约调用是可以轻易的获得原子性的,因为同一个交易的执行是顺序的,一个交易没有执行完成之前,不会有别的交易插入导致中断。也就是说,不管一个交易调用的合约逻辑有多么复杂,间接多用了多少个合约,合约执行的虚拟机总能保证这些操作要么全部执行,要么全部不执行。本实施例在交易涉及多个分片中的合约的修改时,将合约转移到同一个分片中,执行完合约修改之后,再将转移的合约进行回调,有效地解决了合约部署在多个分片中时,涉及到的跨链合约的原子操作的问题。
参照图2,图2为图1中区块链跨链合约调用方法的步骤的细化流程示意图。
S10,当区块链上的第一分片中的第一合约需要调用该区块链上的第二分片中的第二合约时,新增第一合约调用操作码。
本发明较佳实施例在以太坊中新增所述第一合约调用操作码,例如,所述第一合约调用操作码可以为如下形式:
DRAG(target_shard,fun)。
其中,所述DRAG表示该操作码用于执行合约的拖拽,target_shard是目的分片,表示需要将合约托到哪里,fun(function)是动作执行函数,表示将合约托到目的地之后需要执行的函数。
S11,第一分片根据所述第一合约调用操作码将所述第一合约的状态树删除,生成一个第一收据(receipt),所述第一收据中包含第一合约的状态树、目的分片以及动作执行函数。
其中,所述目的分片即上述的“target_shard”,以及所述动作执行函数即上述的“fun”。
S12,所述第一分片通过跨链交易逻辑将所述第一收据以交易的形式发送到目的第二分片。
本发明较佳实施例中,所述跨链交易逻辑可以采用如下中的一种或者多种的结合:
Ⅰ、公证人机制(Notary schemes):中心化或多重签名的见证人模式,见证人是第一分片的合法用户,负责监听第二分片的事件和状态,进而操作第一分片。本质特点是完全不用关注所跨链的结构和共识特性等;
Ⅱ、侧链/中继(Sidechains/Relays):区块链系统本身可以读取第二分片的事件和状态,即支持SPV(Simple Payment Verificaiton),能够验证块上Header、merkle tree的信息。本质特点是必须关注所跨链的结构和共识特性等;
Ⅲ、哈希锁定(Hash-locking):在第一分片与第二分片间设定相互操作的触发器,通常是个待披露明文的随机数的hash值。本质特点是HTLC(Hashed TimeLock Contract),是通过锁定一段时间猜hash原值(preimage)来兑换支付(redeem)的机制。
S13,所述第二分片接收到所述第一收据之后,生成所述第一合约的状态树,在第二分片中构建所述第一合约。
S14,根据所述第一收据中的动作执行函数,在第二分片中执行第一合约以及第二合约。
例如,所述动作执行函数中可以根据第一合约在第一分片中执行的动作的上下文信息,指示所述第一合约在第二分片中继续执行在第一分片中尚未完成的操作。
其中,所述动作执行函数可以调用第一合约,也可以调用第二分片中的其他合约,例如第二合约,因为此时,第一合约以及第二合约已经在同一个分片中。
S15,第一合约在第二分片中执行完毕以后,新增一第二合约调用操作码。
与所述第一合约调用操作码相似,所述第二合约调用操作码也是在以太坊中新增,并可以为如下形式:
DRAG(target_shard,fun)。
其中,所述DRAG表示该操作码用于合约的拖拽,target_shard是目的分片,表示需要将合约托到哪里,即目的分片,fun(function)是动作执行函数,表示将合约托到目的地之后需要执行的函数。
S16,第二分片根据所述第二合约调用操作码将所述第一合约的状态树删除,生成一个第二收据,所述第二收据中包含第一合约的状态树、目的分片以及动作执行函数。
S17,所述第二分片通过跨链交易逻辑将所述收据以交易的形式发送到第二收据中的目的第一分片。
如上所述,所述跨链交易逻辑也可以采用公证人机制、侧链/中继以及哈希锁定中的一种或者多种的结合。
S18,所述第一分片接收到所述第二收据之后,根据所述第二收据,重新生成所述第一合约的状态树,在第一分片中重新生成所述第一合约。
S19,根据所述动作执行函数,在第一分片中继续执行第一合约。
其中,根据所述动作执行函数,第一合约可以在第一分片中继续执行在第二分片中尚未完成的操作。
若此时的动作执行函数为空,则第一合约可以在第一分片中继续执行在调转到第一分片之前,在第一分片中尚未完成的操作。
本发明较佳实施例还提供一种用于执行上述区块链跨链合约调用方法的区块链跨链合约调用装置。
在本实施例中,所述区块链跨链合约调用装置1可以是个人电脑(PersonalComputer,PC),也可以是智能手机、平板电脑、掌上电脑、便携计算机、智能路由器、矿机、网络存储设备终端设备。
所述区块链跨链合约调用装置1也可以是组成CDN网络或者区块链网络的节点。
所述区块链跨链合约调用装置1可以包括存储器11、处理器12和总线13。
其中,所述存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器11在一些实施例中可以是区块链跨链合约调用装置1的内部存储单元,例如该区块链跨链合约调用装置1的硬盘。存储器11在另一些实施例中也可以是区块链跨链合约调用装置1的外部存储设备,例如区块链跨链合约调用装置1上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器11还可以既包括区块链跨链合约调用装置1的内部存储单元也包括外部存储设备。存储器11不仅可以用于存储安装于区块链跨链合约调用装置1的应用软件及各类数据,例如区块链跨链合约调用程序01的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器12在一些实施例中可以是一中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如执行区块链跨链合约调用程序01等。
该总线13可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图3中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
进一步地,区块链跨链合约调用装置1还可以包括网络接口14,网络接口14可选的,可以包括有线接口和/或无线接口(如WI-FI接口、蓝牙接口等),通常用于在该装置1与其他电子设备之间建立通信连接。
可选地,该区块链跨链合约调用装置1还可以包括用户接口,用户接口可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在区块链跨链合约调用装置1中处理的信息以及用于显示可视化的用户界面。
图3仅示出了具有组件11-14以及区块链跨链合约调用程序01的区块链跨链合约调用装置1,本领域技术人员可以理解的是,图3示出的结构并不构成对区块链跨链合约调用装置1的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
在图3所示的区块链跨链合约调用装置1实施例中,存储器11中存储的区块链跨链合约调用程序01,由处理器12调用执行时,可以实现如下步骤:
获取第一分片中的第一合约调用区块链上的第二分片中的第二合约的请求;
在第一分片上将所述第一合约的状态树删除,并将第一合约的状态树、第二分片的ID以及第一合约的第一回调函数打包成第一收据;
利用跨链交易将所述第一收据发送至第二分片,以使所述第二分片根据所述第一收据在第二分片上创建所述第一合约以及所述第一合约的状态树并执行所述第一合约的第一回调函数。
在图3所示的区块链跨链合约调用装置1实施例中,存储器11中存储的区块链跨链合约调用程序01,由处理器12调用执行时,还可以实现如下步骤:
接收第一分片通过跨链交易发送的第一收据,获取所述第一收据中包括的第一合约的状态树、第二分片的ID以及第一合约的第一回调函数;
在第二分片上创建所述第一合约及所述第一合约的状态树,并执行所述第一合约的第一回调函数。
可选地,在其他实施例中,所述区块链跨链合约调用程序01还可以被分割为一个或者多个模块,一个或者多个模块被存储于存储器11中,并由一个或多个处理器(本实施例为处理器12)所执行以完成本发明,本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段,用于描述股票筛选程序在股票筛选装置中的执行过程。
例如,参照图4所示,为本发明区块链跨链合约调用程序01的程序模块示意图,该实施例中,所述区块链跨链合约调用程序01可以被分割为第一分片模块100以及第二分片模块101,示例性地:
所述第一分片模块100用于:获取第一分片中的第一合约调用区块链上的第二分片中的第二合约的请求,在第一分片上将所述第一合约的状态树删除,并将第一合约的状态树、第二分片的ID以及第一合约的第一回调函数打包成第一收据,利用跨链交易将所述第一收据发送至第二分片,以使所述第二分片根据所述第一收据在第二分片上创建所述第一合约以及所述第一合约的状态树并执行所述第一合约的第一回调函数。
所述第二分片模块101用于:接收第一分片通过跨链交易发送的第一收据,获取所述第一收据中包括的第一合约的状态树、第二分片的ID以及第一合约的第一回调函数,在第二分片上创建所述第一合约及所述第一合约的状态树,并执行所述第一合约的第一回调函数。
上述第一分片模块100以及第二分片模块101等程序模块被执行时所实现的功能或操作步骤与上述实施例大体相同,在此不再赘述。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品存储在一种计算机可读存储介质中。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。
所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。