会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 智能合约 / 可更新智能合约

可更新智能合约

申请号 CN201980023935.2 申请日 2019-03-29 公开(公告)号 CN112514345A 公开(公告)日 2021-03-16
申请人 DLT全球公司; 发明人 尼拉伊·斯里瓦斯塔瓦;
摘要 用于智能合约的父/子模型使得在不损害底层数据的不变性的情况下智能合约是可更新的。作为第一步,部署父智能合约(客户合约),该父智能合约存储可以使用合约地址调用的任何其他合约。然后,每当部署了新的子智能合约(服务合约)时,都会利用新的子智能合约的地址更新父智能合约,使得父智能合约将能够调用子智能合约。子智能合约的结构对于父智能合约而言是已知的。例如,在部署父智能合约之前,父智能合约已知进入子智能合约的输入的数量和从子智能合约出来的输出的数量,并且事务数据仍然可访问而不会影响父智能合约。
权利要求

1.一种用于更新在区块链上实现的智能合约的方法,包括:将所述智能合约分离成可更新智能合约和不可更新智能合约,其中,所述不可更新智能合约针对需要永久地访问的数据处理向所述区块链进行的持久性数据存储和检索,并且所述可更新智能合约不包括向所述区块链进行数据存储和检索;

部署所述可更新智能合约的第一版本和所述不可更新智能合约;

向所述不可更新智能合约提供所述可更新智能合约的第一版本的地址;

所述不可更新智能合约将所述可更新智能合约的第一版本的地址存储至所述区块链;

所述不可更新智能合约从所述区块链中检索永久数据并且将所述永久数据传递至所述可更新智能合约的第一版本;

所述可更新智能合约对所述永久数据执行计算,并且将基于对所述永久数据的计算的更新数据返回至所述不可更新智能合约;以及所述不可更新智能合约将所述更新数据存储至所述区块链。

2.根据权利要求1所述的方法,其中,所述可更新智能合约和所述不可更新智能合约经由固定接口连接,并且其中,所述可更新智能合约的第一版本的地址经由所述固定接口提供至所述不可更新智能合约,所述不可更新智能合约经由所述固定接口将所述永久数据传递至所述可更新智能合约的第一版本,并且所述可更新智能合约经由所述固定接口将基于对所述永久数据的计算的更新数据返回至所述不可更新智能合约。

3.根据权利要求1所述的方法,其中,向所述不可更新智能合约提供所述可更新智能合约的第一版本的地址包括:利用所述可更新智能合约的第一版本的地址调用所述不可更新智能合约的接口。

4.根据权利要求3所述的方法,还包括:部署所述可更新智能合约的第二版本;

利用所述可更新智能合约的第二版本的地址调用所述不可更新智能合约的所述接口;

所述不可更新智能合约将所述可更新智能合约的第二版本的地址存储至所述区块链;

以及

所述不可更新智能合约通过从所述区块链中检索所述可更新智能合约的第二版本的地址并且在所检索的地址处调用所述可更新智能合约的第二版本来唤出所述可更新智能合约的第二版本。

5.根据权利要求4所述的方法,其中,所述分离包括将所述智能合约分离成所述不可更新智能合约和多个可更新智能合约,所述部署步骤包括部署每个可更新智能合约的第一版本和第二版本,所述调用步骤包括利用相应可更新智能合约的相应版本的地址来调用相应接口,所述存储步骤包括将所述相应可更新智能合约的相应版本的地址存储至所述区块链,以及所述唤出步骤包括从所述区块链中检索所述可更新智能合约的第二版本的地址并且在所检索的地址处调用所述可更新智能合约的第二版本。

6.根据权利要求4所述的方法,其中,所述分离包括将所述智能合约分离成所述不可更新智能合约和多个可更新智能合约,所述部署步骤包括部署每个可更新智能合约的第一版本和第二版本,所述调用步骤包括利用与相应可更新智能合约相关联的标识符和所述相应可更新智能合约的相应地址来调用接口,所述存储步骤包括将所述相应可更新智能合约的相应版本的地址和所述标识符存储至所述区块链,以及所述唤出步骤包括从所述区块链中检索所述可更新智能合约的第二版本的地址和所述标识符并且在所检索的地址处调用由所述标识符标识的可更新智能合约的第二版本。

7.根据权利要求4所述的方法,其中,所述可更新智能合约是自注册的,并且所述调用步骤包括自注册可更新智能合约利用所述自注册可更新智能合约的相应版本的地址来调用所述不可更新智能合约的接口。

8.根据权利要求4所述的方法,其中,所述分离包括将所述智能合约分离成所述不可更新智能合约和多个可更新智能合约,所述部署步骤包括部署每个可更新智能合约的第一版本和第二版本,所述可更新智能合约是自注册的,并且所述调用步骤包括自注册可更新智能合约利用相应自注册可更新智能合约的相应版本的地址调用所述不可更新智能合约的相应接口,所述存储步骤包括将所述相应可更新智能合约的相应版本的地址存储至所述区块链,以及所述唤出步骤包括从所述区块链中检索所述可更新智能合约的第二版本的地址,并且在所检索的地址处调用所述可更新智能合约的第二版本。

9.根据权利要求4所述的方法,其中,所述不可更新智能合约从所述区块链中检索永久数据并且将所述永久数据传递至所述可更新智能合约,并且所述可更新智能合约对所述永久数据进行计算并且将基于对所述永久数据的计算的数据返回至所述不可更新智能合约以用于向所述区块链进行永久存储。

10.根据权利要求4所述的方法,其中,所述分离包括将所述智能合约分离成多个不可更新智能合约。

11.根据权利要求1所述的方法,还包括:在部署所述可更新智能合约的第一版本之前,将所述不可更新智能合约的地址硬编码到所述可更新智能合约的第一版本中;

部署所述可更新智能合约的第二版本;

调用所述可更新智能合约的第二版本;

所述可更新智能合约的第二版本在硬编码的地址处调用所述不可更新智能合约;以及所述不可更新智能合约将任何永久数据存储至所述区块链。

12.一种用于在区块链上实现智能合约的系统,包括:存储器,其用于存储指令;以及

一个或更多个处理器,其使用存储在所述存储器中的所述指令执行包括以下的操作:将所述智能合约分离成可更新智能合约和不可更新智能合约,其中,所述不可更新智能合约针对需要永久地访问的数据处理向所述区块链进行的持久性数据存储和检索,并且所述可更新智能合约不包括向所述区块链进行数据存储和检索;

部署所述可更新智能合约的第一版本和所述不可更新智能合约;

向所述不可更新智能合约提供所述可更新智能合约的第一版本的地址;

所述不可更新智能合约将所述可更新智能合约的第一版本的地址存储至所述区块链;

所述不可更新智能合约从所述区块链中检索永久数据并且将所述永久数据传递至所述可更新智能合约的第一版本;

所述可更新智能合约对所述永久数据执行计算,并且将基于对所述永久数据的计算的更新数据返回至所述不可更新智能合约;以及所述不可更新智能合约将所述更新数据存储至所述区块链。

13.根据权利要求12所述的系统,还包括连接所述可更新智能合约和所述不可更新智能合约的固定接口,其中,所述可更新智能合约的第一版本的地址经由所述固定接口提供至所述不可更新智能合约,所述不可更新智能合约经由所述固定接口将所述永久数据传递至所述可更新智能合约的第一版本,并且所述可更新智能合约经由所述固定接口将基于对所述永久数据的计算的更新数据返回至所述不可更新智能合约。

14.根据权利要求12所述的系统,其中,所述存储器存储用于执行包括以下的操作的另外的指令:通过利用所述可更新智能合约的第一版本的地址调用所述不可更新智能合约的接口来向所述不可更新智能合约提供所述可更新智能合约的第一版本的地址。

15.根据权利要求14所述的系统,其中,所述存储器存储用于执行包括以下的另外的操作的另外的指令:

部署所述可更新智能合约的第二版本;

利用所述可更新智能合约的第二版本的地址调用所述不可更新智能合约的所述接口;

所述不可更新智能合约将所述可更新智能合约的第二版本的地址存储至所述区块链;

以及

所述不可更新智能合约通过从所述区块链中检索所述可更新智能合约的第二版本的地址并且在所检索的地址处调用所述可更新智能合约的第二版本来唤出所述可更新智能合约的第二版本。

16.根据权利要求15所述的系统,其中,所述分离包括将所述智能合约分离成所述不可更新智能合约和多个可更新智能合约,所述部署包括部署每个可更新智能合约的第一版本和第二版本,所述调用包括利用相应可更新智能合约的相应版本的地址来调用相应接口,所述存储包括将所述相应可更新智能合约的相应版本的地址存储至所述区块链,以及所述唤出包括从所述区块链中检索所述可更新智能合约的第二版本的地址并且在所检索的地址处调用所述可更新智能合约的第二版本。

17.根据权利要求15所述的系统,其中,所述分离包括将所述智能合约分离成所述不可更新智能合约和多个可更新智能合约,所述部署包括部署每个可更新智能合约的第一版本和第二版本,所述调用包括利用与相应可更新智能合约相关联的标识符和所述相应可更新智能合约的相应地址来调用所述接口,所述存储包括将所述相应可更新智能合约的相应版本的地址和所述标识符存储至所述区块链,以及所述唤出包括从所述区块链中检索所述可更新智能合约的第二版本的地址和所述标识符并且在所检索的地址处调用由所述标识符标识的所述可更新智能合约的第二版本。

18.根据权利要求15所述的系统,其中,所述可更新智能合约是自注册的,并且所述调用包括自注册可更新智能合约利用所述自注册可更新智能合约的相应版本的地址来调用所述不可更新智能合约的接口。

19.根据权利要求15所述的系统,其中,所述分离包括将所述智能合约分离成所述不可更新智能合约和多个可更新智能合约,所述部署包括部署每个可更新智能合约的第一版本和第二版本,所述可更新智能合约是自注册的,并且所述调用包括自注册可更新智能合约利用相应自注册可更新智能合约的相应版本的地址调用所述不可更新智能合约的相应接口,所述存储包括将所述相应可更新智能合约的相应版本的地址存储至所述区块链,以及所述唤出包括从所述区块链中检索所述可更新智能合约的第二版本的地址并且在所检索的地址处调用所述可更新智能合约的第二版本。

20.根据权利要求15所述的系统,其中,所述存储器存储用于执行包括以下的操作的另外的指令:所述不可更新智能合约从所述区块链中检索永久数据并且将所述永久数据传递至所述可更新智能合约,并且所述可更新智能合约对所述永久数据进行计算并且将基于对所述永久数据的计算的数据返回至所述不可更新智能合约以用于向所述区块链进行永久性存储。

21.根据权利要求15所述的系统,其中,所述存储器存储用于执行包括以下的操作的另外的指令:将所述智能合约分离成多个不可更新智能合约。

22.根据权利要求12所述的系统,其中,所述存储器存储用于执行包括以下的操作的另外的指令:

在部署所述可更新智能合约的第一版本之前,将所述不可更新智能合约的地址硬编码到所述可更新智能合约的第一版本中;

部署所述可更新智能合约的第二版本;

调用所述可更新智能合约的第二版本;

所述可更新智能合约的第二版本在硬编码的地址处调用所述不可更新智能合约;以及所述不可更新智能合约将任何永久数据存储至所述区块链。

23.一种非暂态计算机可读介质,其存储用于更新在区块链上实现的智能合约的计算机指令,所述计算机指令在由一个或更多个处理器执行时使所述一个或更多个处理器执行以下步骤:

将所述智能合约分离成可更新智能合约和不可更新智能合约,其中,所述不可更新智能合约针对需要永久地访问的数据处理向所述区块链进行的持久性数据存储和检索,并且所述可更新智能合约不包括向所述区块链进行数据存储和检索;

部署所述可更新智能合约的第一版本和所述不可更新智能合约;

向所述不可更新智能合约提供所述可更新智能合约的第一版本的地址;

所述不可更新智能合约将所述可更新智能合约的第一版本的地址存储至所述区块链;

所述不可更新智能合约从所述区块链中检索永久数据并且将所述永久数据传递至所述可更新智能合约的第一版本;

所述可更新智能合约对所述永久数据执行计算,并且将基于对所述永久数据的计算的更新数据返回至所述不可更新智能合约;以及所述不可更新智能合约将所述更新数据存储至所述区块链。

说明书全文

可更新智能合约

[0001] 相关申请的交叉引用
[0002] 本申请要求于2018年3月29日提交的并且题为“Updateable Smart Contracts”的美国临时专利申请第62/650,183号的优先权。

技术领域

[0003] 本申请针对一个可更新智能合约或多个可更新智能合约的设计,对于所述一个可更新智能合约或多个可更新智能合约,将通过每个智能合约与其永久数据存储之间的耦合
来防止或减少可更新性,所述耦合是通过智能合约在其上执行的分布式账本平台或区块链
实施的。

背景技术

[0004] 区块链技术具有带来本世纪或至少本世纪上半叶最大的信息技术革命的潜力。在互联网革命之后,区块链革命可能是迄今为止最大的破坏,它正在挑战互联网最弱的神
经——缺乏信任。区块链是可以通过使数据几乎不可变而将信任带入互联网的迄今为止唯
一的技术。
[0005] 以太坊(Ethereum)当前是使用最广泛的区块链系统之一。以太坊使数据不可变,以便在节点之间建立信任。以太坊不仅使存储的值不可变,而且使程序或智能合约不可变。
这意味着,如果已经在以太坊上部署了智能合约,则该智能合约一旦被部署就无法更新或
修改。
[0006] 因此,数据的不变性是有代价的,因为对智能合约的任何未来的更新都将是不可能的。对于许多用例而言,无法更新智能合约是不切实际的,并且可能导致智能合约过时。
本文中描述的系统和方法被设计成在不损害底层数据的不变性的情况下使智能合约可更
新。

发明内容

[0007] 本文中描述的系统和方法通过提供被实现为父模型和子模型的架构解决方案来解决本领域的需求。作为第一步,部署父智能合约,该父智能合约具有存储用于子智能合约
的子智能合约地址的特征,可以使用子智能合约地址调用子智能合约。然后,每当部署了新
的子智能合约时,都利用新的子智能合约的地址更新父智能合约,使得父智能合约将能够
调用新的子智能合约。此处唯一的限制是子智能合约的结构是父智能合约已知的。例如,在
部署父智能合约之前,父智能合约已知进入子智能合约的输入的数量和从子智能合约出来
的输出的数量。在本文中描述的某些实施方式中,父智能合约是调用智能合约,并且是不可
更新的,而子智能合约是被调用智能合约,并且是可更新的。在这种情况下,向调用(父)智
能合约通知如何对其更新后的被调用(子)智能合约进行调用。另一方面,在本文中描述的
其他实施方式中,被调用(子)智能合约是不可更新的,调用(父)智能合约是可更新的。在这
种情况下,当调用(父)智能合约更新至新版本时,它只是继续使用其地址不变的被调用
(子)合约,就像其先前调用(父)智能合约一样。
[0008] 在示例实施方式中,系统和方法更通常地涉及一个智能合约或多个智能合约的设计,对于所述一个智能合约或多个智能合约,将通过每个智能合约与其永久数据存储之间
的耦合来防止或减少可更新性,所述耦合是通过智能合约在其上执行的分布式账本平台或
区块链实施的,像以太坊这样的常见智能合约平台就是这种情况。在这样的示例实施方式
中,每个概念性智能合约都被分成单独的可更新智能合约和不可更新智能合约,其中,每个
智能合约的功能的划分如下:平台的永久数据存储的任何直接使用都变成不可更新智能合
约的功能的一部分并且剩余部分的功能的至少一些驻留在可更新智能合约中,因此,用于
智能合约的互操作的任何现有或未来技术都可以用于实现与使用原始的概念性智能合约
将实现的组合功能相同的组合功能。此外,可以将用于指导智能合约开始与另一智能合约
互操作的任何现有或未来技术可以与可更新智能合约的原始或后续部署结合使用,以实现
互操作性。
[0009] 示例实施方式包括一种用于通过将智能合约分离成经由固定接口连接的不可更新智能合约和可更新智能合约来更新在区块链上实现的智能合约的方法。不可更新智能合
约针对需要永久地访问的数据处理向区块链进行的持久性数据存储和检索,并且可更新智
能合约不包括向区块链进行数据存储和检索。部署可更新智能合约的第一版本和不可更新
智能合约,并且经由接口向不可更新智能合约提供可更新智能合约的第一版本的地址。不
可更新智能合约将可更新智能合约的第一版本的地址存储至区块链。不可更新智能合约可
以从区块链中检索永久数据,并且经由接口将永久数据传递至可更新智能合约的第一版
本。在操作中,可更新智能合约对永久数据执行计算,并且经由接口将基于对永久数据的计
算的更新数据返回至不可更新智能合约,并且不可更新智能合约将更新数据存储至区块
链。
[0010] 在其他示例实施方式中,一种用于更新在区块链上实现的智能合约的方法包括如下初始步骤:将智能合约分离成可更新智能合约和不可更新智能合约,其中,不可更新智能
合约针对需要永久地访问的数据处理向区块链进行的持久性数据存储和检索,并且可更新
智能合约不包括向区块链进行数据存储和检索;部署可更新智能合约的第一版本和不可更
新智能合约;利用可更新智能合约的第一版本的地址调用不可更新智能合约的接口;以及
不可更新智能合约将可更新智能合约的第一版本的地址存储至区块链。为了更新智能合
约,部署可更新智能合约的第二版本,并且利用可更新智能合约的第二版本的地址来调用
不可更新智能合约的接口,其中,不可更新智能合约将可更新智能合约的第二版本的地址
存储至区块链。不可更新智能合约通过从区块链中检索可更新智能合约的第二版本的地址
并且在所检索的地址处调用可更新智能合约的第二版本来唤出(invoke)可更新智能合约
的第二版本。
[0011] 在其他实施方式中,智能合约被分离成不可更新智能合约和与不可更新智能合约具有与相应接口的多个可更新智能合约。调用步骤利用相应可更新智能合约的相应版本的
地址来调用相应接口,并且相应可更新智能合约的相应版本的地址被存储至区块链。唤出
步骤包括:从区块链中检索可更新智能合约的第二版本的地址,并且在所检索的地址处调
用可更新智能合约的第二版本。可替选地,相应接口可以由单个接口代替,其中,调用步骤
包括利用与相应可更新智能合约相关联的标识符和相应可更新智能合约的相应地址来调
用单个接口。在该实施方式中,存储步骤将相应可更新智能合约的相应版本的标识符和地
址存储至区块链,以及唤出步骤包括:从区块链中检索可更新智能合约的第二版本的标识
符和地址,并且在所检索的地址处调用由标识符标识的可更新智能合约的第二版本。
[0012] 在其他实施方式中,可更新智能合约是自注册的,并且调用步骤包括:自注册可更新智能合约利用自注册可更新智能合约的相应版本的地址来调用不可更新智能合约的接
口。多个可更新智能合约也可以是自注册的。在这样的实施方式中,分离包括将智能合约分
离成不可更新智能合约和多个可更新智能合约,并且部署步骤包括部署每个可更新智能合
约的第一版本和第二版本。调用步骤包括:自注册可更新智能合约利用相应自注册可更新
智能合约的相应版本的地址来调用不可更新智能合约的相应接口。另外,存储步骤包括将
相应可更新智能合约的相应版本的地址存储至区块链,以及唤出步骤包括:从区块链中检
索可更新智能合约的第二版本的地址并且在所检索的地址处调用可更新智能合约的第二
版本。
[0013] 在这些实施方式的每一个中,分离还可以包括将智能合约分离成多个不可更新智能合约。
[0014] 在其他实施方式中,可更新智能合约被硬编码有不可更新智能合约的地址。在该实施方式中,通过将智能合约分离成可更新智能合约和不可更新智能合约来更新在区块链
上实现的智能合约,其中,不可更新智能合约针对需要永久地访问的数据处理向区块链进
行的持久性数据存储和检索,并且可更新智能合约不包括向区块链进行存储和检索。部署
不可更新智能合约,并且将不可更新智能合约的地址硬编码到然后部署的可更新智能合约
的第一版本中。为了更新可更新智能合约,部署可更新智能合约的第二版本,并且调用可更
新智能合约的第二版本。可更新智能合约的第二版本在硬编码的地址处调用不可更新智能
合约,并且不可更新智能合约将任何永久数据存储至区块链。
[0015] 本文中描述的实施方式还涵盖利用用于实现贯穿本公开内容描述的方法的指令编码的计算机系统和计算机可读介质。

附图说明

[0016] 在附图的图中,通过示例而非限制的方式示出了本公开内容,在附图中,相似的附图标记指示相似的要素。
[0017] 图1A至图1F示出了根据一些实施方式的计算器的父/子智能合约实施方式。
[0018] 图1A示出了其中部署父合约的第一步。
[0019] 图1B示出了具有加法功能的子合约的部署。
[0020] 图1C示出了具有乘法功能的另一子合约的部署。
[0021] 图1D示出了父合约与加法子合约和乘法子合约两者的连接。
[0022] 图1E示出了利用减法功能对加法功能的替换,包括部署减法子合约。
[0023] 图1F示出了去除加法子合约与父合约之间的连接以及添加父合约与减法子合约的连接。
[0024] 图2A示出了根据一些实施方式的包括一个服务合约的简单情况,其中,通过外部调用来更新服务合约。
[0025] 图2B示出了根据一些实施方式的相对于图2A所示的初始部署的更新的服务合约的部署。
[0026] 图2C示出了根据一些实施方式的图2B所示的更新的服务合约的唤出。
[0027] 图3A示出了根据一些实施方式的具有通过外部调用更新的地址的多个服务合约的实施方式的初始部署。
[0028] 图3B示出了根据一些实施方式的相对于图3A所示的初始部署的更新的服务合约X(1≤X≤M)的部署。
[0029] 图3C示出了根据一些实施方式的图3B所示的更新的服务合约X的唤出。
[0030] 图4A示出了根据一些实施方式的自注册服务合约的实施方式的初始部署。
[0031] 图4B示出了根据一些实施方式的相对于图4A所示的初始部署的更新的自注册服务合约的部署。
[0032] 图4C示出了根据一些实施方式的对图4B所示的更新的自注册服务合约的唤出。
[0033] 图5A示出了根据一些实施方式的其中在服务合约中提供永久性存储的实施方式的初始部署。
[0034] 图5B示出了根据一些实施方式的相对于图5A所示的初始部署的更新的客户合约的部署。
[0035] 图5C示出了根据一些实施方式的对图5B的更新的客户合约的唤出。
[0036] 图6A示出了其中智能合约的版本1和版本2存储在区块链上并且区块链数据存储与合约的相应版本紧密耦合的常规智能合约。
[0037] 图6B示出了根据一些实施方式的其中所有数据存储与客户合约耦合并且没有数据存储要求的相应服务合约经由接口向客户合约提供更新的计算结果的可更新智能合约。
[0038] 图7是示出可以在其上实现本文中描述的示例的计算机系统的框图。

具体实施方式

[0039] 以下关于图1至图7的描述充分示出了特定实施方式,以使得本领域技术人员能够实践这些特定实施方式。其他实施方式可以结合结构性变化、逻辑性变化、过程变化和其他
变化。一些实施方式的部分和特征可以包括在其他实施方式的部分和特征中,或者替代其
他实施方式的部分和特征。权利要求书中阐述的实施方式涵盖那些权利要求的所有可用等
同方案。
[0040] 术语
[0041] 区块链:使用密码学来链接和保护的、被称为区块的不断增长的记录列表。每个区块通常包括前一个区块的加密哈希、时间戳和事务数据。区块链被设计成固有地抵抗对事
务数据的修改。为了用作分布式账本,区块链通常由对等网络管理,对等网络共同遵守用于
验证新区块的协议。一旦被记录,在不更改所有后续区块的情况下,不能追溯地更改任何给
定区块中的数据,更改所有后续区块需要网络多数的合谋。
[0042] 智能合约:提供在区块链或分布式账本上进行的通用计算的计算机协议。智能合约事务可以是简单的,或者可以实现复杂的逻辑。产生的事务通常是公开的、可追踪的且不
可逆的。各种加密货币和智能合约平台例如以太坊已经实现了多种类型的智能合约。就以
太坊而言,智能合约是被向下编译成字节代码并且被部署至以太坊区块链以用于执行的高
级编程抽象。
[0043] 以太坊:以智能合约(脚本撰写)功能为特征的开源的、公共的、基于区块链的分布式计算平台和操作系统。以太坊提供了去中心化的图灵完整虚拟机——以太坊虚拟机
(EVM),EVM是用于使用国际公共节点网络执行脚本的智能合约的运行时环境。以太坊是著
名且知名的智能合约框架。
[0044] 以太坊构造器:在以太坊中,构造器是作为智能合约的在智能合约被部署至区块链网络时由区块链平台自动地执行的部分的例程。其他区块链平台包括类似的机制,或者
这样的机制是可实现的。
[0045] 合约:智能合约。
[0046] 客户(父)合约*:分离的合约的针对需要永久地访问的数据处理向区块链进行的所有持久性数据存储和检索的部分。客户合约被设计成永不更新。在示例实施方式中,客户
合约可以检索永久数据并且将永久数据传递至服务合约,并且服务合约可以计算数据并且
将数据返回至客户合约以用于进行永久性存储。
[0047] 服务(子)合约*:分离的合约的由客户合约唤出并且不包括存储和检索的部分。可以经由本文中描述的若干机制之一随时更新服务合约。
[0048] 在下面描述的一些实施方式中,客户合约和服务合约的作用被反转,从而服务合约提供永久性存储和检索,而客户合约是可更新的。
[0049] 概述
[0050] 本文中描述的系统和方法部分地解决了通过引入像以太坊这样的可编程分布式账本平台而产生的独特问题。在程序本身已经部署到分布式账本网络之后,这些平台将它
们的用户贡献的分布式程序(“合约”)与由每个程序持久地存储到分布式账本中的任何数
据紧密地耦合。该耦合的效果在于:现有技术系统中利用更新的版本替换合约的任何尝试
都会使由先前版本存储的所有数据对于更新的合约而言不可读。本领域技术人员应当理
解,这排除了将在网络的正常日常操作之外的特殊措施,例如到分布式账本网络编程的分
叉(fork)。本文中描述的技术适用于任何这样的分布式账本平台。
[0051] 在现有技术系统中,无法更新合约被简单地接受,并且部署合约时期望合约的任何部分都不能被更新从而不会失去对持久性数据的访问。本文中描述的系统和方法通过将
提出的智能合约分离成如下两者来解决该限制:(1)针对需要永久地访问的所有数据处理
向区块链的所有持久性数据存储和检索的客户合约,以及(2)通过客户合约唤出的并且不
包括这样的存储和检索的一个或更多个服务合约。客户合约被设计成永不更新,然而服务
合约可以经由本文中描述的若干机制之一随时更新。在示例实施方式中,客户合约可以检
索永久数据并且将其传递至服务合约,并且服务合约可以计算数据并且将数据返回至客户
合约以用于进行永久性存储。
[0052] 在详细描述系统和方法之前,将首先论述计算器的简单示例,以便更好地说明示例实施方式的父/子(客户合约/服务合约)架构。
[0053] 计算器示例
[0054] 假设一开始想要构建具有以下功能的计算器:
[0055] 使两个数字相加
[0056] 使两个数字相乘
[0057] 存储所有操作的结果并且永不丢失数据
[0058] 为了构建具有以上功能的计算器,部署了具有以下特征的父合约:
[0059] ·调用可以取两个数字并且返回一个数字的任何子合约
[0060] ·能够存储合约地址
[0061] ·能够将返回结果存储在状态变量中
[0062] 一旦部署了具有以上功能的父合约,然后就将需要部署两个子合约,一个具有加法功能,并且另一个具有乘法功能。这两个功能都将取两个数字并且将返回结果,并且将不
会在状态变量中存储任何内容。一旦部署了子合约,这两个合约的地址将被更新至父合约。
现在,父合约可以调用这两个合约并可以存储结果。父合约和子合约的组合共同实现构建
计算器的要求。
[0063] 现在,假设一段时间之后,计算器的用户决定他不想要加法功能而是想要减法功能。仍然要求不应当丢失任何数据。在这种情况下,如果部署了新的父合约和子合约,则由
旧的父合约存储的所有数据都将丢失,这是不期望的。然而,在父模型和子模型下,可以部
署类似于加法子合约的、将进行减法的另一子合约。一旦部署了减法子合约,就利用该新的
减法子合约的地址更新父合约。以这种方式,可以在存储的数据保持不变的同时更新计算
器智能合约的功能。图1A至图1F图解式地示出了该计算器示例。
[0064] 图1A示出了其中部署具有包括以下的指定功能的父合约的第一步:
[0065] 调用加法子合约
[0066] 调用乘法子合约
[0067] 将返回的结果存储在状态变量中
[0068] 父合约将包括状态变量,并且子合约中将仅存在业务逻辑。在设计阶段期间,需要父合约识别当前将要使用以及将来可以使用的所有状态变量。
[0069] 图1B示出了具有加法功能的子合约的部署。具体地,加法子合约包括以下功能:取两个数字作为输入,使这两个数字相加,并且返回结果。
[0070] 图1C示出了具有乘法功能的另一子合约的部署。具体地,乘法子合约包括以下功能:取两个数字作为输入,使这两个数字相乘,并且返回结果。
[0071] 图1D示出了父合约与加法子合约和乘法子合约两者的连接。
[0072] 现在,为了去除加法功能并且利用减法功能代替加法功能,如图1E所示,部署了减法子合约。减法子合约包括以下功能:取两个数字作为输入,使这两个数字相减,并且返回
结果。接下来,如图1F所示,去除加法子合约与父合约之间的连接,并且添加父合约与减法
子合约的连接。根据需要,可以随时重新添加回与加法子合约的连接。此外,如果父合约被
设计成允许如本文中所描述的可更新性,则可以添加减法子合约以提供除了加法子合约和
乘法子合约以外的其他功能。应当理解,每个子合约具有相同数量的输入和输出以及提供
至父合约的地址。
[0073] 具体实施方式——具有一个可更新服务合约的客户合约
[0074] 在本文中描述的示例实施方式中,提供了客户合约、一个可更新服务合约以及用于每次部署服务合约的新版本时外部调用方利用服务合约的地址配置客户合约的机制。
[0075] 图2A示出了包括一个服务合约的简单情况,其中通过外部调用来更新服务合约。如所示出的,初始部署包括:在200处部署客户合约,在202处部署服务合约的版本1,以及在
204处利用服务合约的版本1的地址调用客户合约上的接口A。在206处,客户合约将服务合
约的版本1的地址存储至区块链。如所示出的,客户合约包括:用于更新服务合约的地址的
接口A和用于调用服务合约的接口B,以及用于存储服务合约的地址和其他状态数据的持久
性存储。服务合约的版本1没有持久性存储,并且经由客户合约上的接口B被执行。
[0076] 图2B示出了相对于图2A所示的初始部署的更新的服务合约的部署。如所示出的,在208处部署服务合约的版本N,并且在210处利用服务合约的版本N的地址调用客户合约上
的接口A。在212处,客户合约将服务合约的版本N的地址存储至区块链。服务合约的版本N也
没有持久性存储,并且经由客户合约上的接口B被执行。
[0077] 图2C示出了对更新的服务合约的唤出。如所示出的,在214处,对客户合约进行调用,并且在216处,客户合约从区块链中检索服务合约的最后存储的地址。然后,在218处,客
户合约使用接口B在所检索的地址处调用服务合约的最新版本。
[0078] 以下提供了如关于图2A至图2C描述的用于实现具有一个可更新服务合约的客户合约的示例代码。在该示例中,合约功能的预期要变化的部分——从10%变化至13%的税
率计算——已经放置到单独的服务合约中,该服务合约由处理向分布式账本的所有永久性
存储的客户合约调用。客户合约被如下实现:
[0079]
[0080]
[0081] 服务合约的版本1被如下实现:
[0082]
[0083]
[0084] 服务合约的版本2被如下实现:
[0085] 变型
[0086] 以上实施方式的第一变型涉及多个可单独地更新的服务合约,每个服务合约具有其自己的用于唤出的接口,以及用于每当部署了服务合约的新版本时外部调用方利用该特
定服务合约的地址来配置客户合约的单独机制。
[0087] 图3A示出了具有通过外部调用更新的地址的多个服务合约的实施方式的初始部署。如图3A所示,在300处,部署客户合约,并且在302处,部署服务合约X(X=1……m)的版本
1。在304处利用服务合约的版本1的地址调用客户合约上的接口Ai,并且分别在接口A1……
Am处针对X=1……m重复在302处部署每个服务合约以及调用接口Ai的处理。在306处,客户
合约将每个相应服务合约的版本1的地址存储至区块链。每个服务合约1……M的版本1没有
持久性存储,并且经由客户合约上的相应接口B1……Bm被执行。
[0088] 图3B示出了相对于图3A所示的初始部署的更新的服务合约X(1≤X≤M)的部署。如所示出的,在308处,部署服务合约X的版本N,并且在310处,利用服务合约X的版本N的地址
调用客户合约上的接口Am。在312处,客户合约将服务合约X的版本N的地址存储至区块链。
服务合约X的版本N也没有持久性存储,并且经由客户合约上的接口Bm被执行。
[0089] 图3C示出了对更新的服务合约X的唤出。如所示出的,在314处,对客户合约进行调用,并且在316处,客户合约从区块链中检索服务合约1…M的最后存储的地址。然后,在318
处,客户合约使用接口Bm在所检索的地址处调用服务合约X的最新版本。
[0090] 对实现这样的实施方式的以上代码的修改对于本领域技术人员将是明显的。
[0091] 以上实施方式的另一变型涉及一个服务合约,该服务合约另外具有用于该服务合约的每个新版本的一经部署就利用其自己的地址来自动配置客户合约的机制。
[0092] 图4A示出了自注册服务合约的实施方式的初始部署。如图4A所示,在400处,部署客户合约,并且在402处,部署自注册服务合约的版本1。一经部署,自注册服务合约版本1就
利用其自己的地址在404处调用客户合约上的接口A。在406处,客户合约将自注册服务合约
版本1的地址存储至区块链。自注册服务合约的版本1没有持久性存储,并且通过客户合约
上的接口B被调用。
[0093] 图4B示出了相对于图4A所示的初始部署的更新的自注册服务合约的部署。如所示出的,在408处,部署自注册服务合约的版本N。一经部署,在410处,自注册服务合约的版本N
就利用其自己的地址调用客户合约上的接口A。在412处,客户合约将自注册服务合约的版
本N的地址存储至区块链。自注册服务合约的版本N也没有持久性存储,并且经由客户合约
上的接口B被执行。
[0094] 图4C示出了对更新的自注册服务合约的唤出。如所示出的,在414处,对客户合约进行调用,并且在416处,客户合约从区块链中检索自注册服务合约的最后存储的地址。然
后,在418处,客户合约使用接口B在所检索的地址处调用自注册服务合约的最新版本。
[0095] 对实现这样的实施方式的以上代码的修改对于本领域技术人员将是明显的。
[0096] 以上实施方式的另一变型将多个服务合约与最后一个变型的自注册机制结合在一起。
[0097] 以上实施方式的多个服务合约变型的又一变型利用下述单个接口代替用于更新服务合约的地址的一系列相应接口,所述单个接口接受与每个服务合约相关联的标识符以
及该服务合约的新版本的地址。标识符与地址一起存储在区块链上,并且由客户合约检索,
以识别相关联的服务合约。
[0098] 以上实施方式的又一变型将客户合约分离成多个客户合约,以在必须更新客户合约的一部分的情况下使永久地记录的数据的不可访问性最小化。
[0099] 以上实施方式的又一变型反转了所描述的合约之间的关系,使得永久的持久性存储和检索被分离到一个或更多个服务合约中,而其他行为仍然保留在一个或更多个客户合
约中。在该变型中,可以随时更新的是客户合约,并且无意更新的是服务合约。在该变型中,
持久性存储服务合约的地址被硬编码在客户合约的每个版本中,并且不需要另外的地址更
新机制。
[0100] 图5A示出了在服务合约中提供永久性存储的实施方式的初始部署。在该实施方式中,仅示出了单个客户合约和单个服务合约。应当理解,以上描述的方法可以用于修改该实
施方式,以包括多个客户合约和自注册客户合约。如图5A所示,在500处,部署服务合约,并
且在502处,将服务合约的地址硬编码到客户合约的版本1中。然后,在504处,将客户合约部
署至区块链。在该实施方式中,客户合约的版本1没有持久性存储,并且经由客户合约上的
接口C调用服务合约。
[0101] 图5B示出了相对于图5A所示的初始部署的更新的客户合约的部署。如所示出的,在506处,部署客户合约的版本N。一经部署,客户合约的版本N使用服务合约的硬编码地址
调用服务合约上的接口C。客户合约的版本N也没有持久性存储。
[0102] 图5C示出了对更新的客户合约的唤出。如所示出的,在508处,对客户合约的版本N进行调用,并且在510处,客户合约的版本N在硬编码地址处调用服务合约。然后,在512处,
服务合约执行永久性存储和检索,可能经由接口C将数据返回至客户合约。
[0103] 对实现这样的实施方式的以上代码的修改对于本领域技术人员将是明显的。
[0104] 接口
[0105] 以上描述的每个实施方式中引用的接口有两种类型:客户合约与服务合约之间的功能接口(B,B1……Bm,C)和用于告知不可更新客户合约如下内容的注册接口(A,A1……
Am):一旦将更新的服务合约部署至区块链他们需要知道的内容以便查找和使用更新的服
务合约。在这两种情况下,术语接口均在软件意义上——即,独立软件实体进行交互的逻辑
点——使用。更具体地,接口包括对包括其他智能合约的外部调用方可见和可访问的函数
签名。签名包括函数名称、预期用于输入的数据类型以及将返回的数据类型。然而,接口不
需要提供关于执行的任何信息,也就是说,无需提供关于函数在调用时实际进行的操作的
信息。
[0106] 功能接口
[0107] 对于任何服务合约,以上实施方式中的接口共同包括由客户合约调用的该接口的所有函数的签名。因为在每个变型中,客户合约或服务合约都可能不会更新,所以那些签名
永远无法改变,否则它们之间的调用将失败。如果变型允许更新的服务合约,则只要可以使
用相同的输入完成计算,就可以改变每个函数实际进行的操作。下面针对以上提及的每个
变型解决如何构建这些接口(即,如何设计这些接口)。
[0108] 简单情况——识别可能需要更新的所有功能。计划客户合约中的永久性存储支持,以支持当前服务合约的需求以及任何预期的未来需求。在服务合约版本1中编写如下函
数:实现当前所需功能,但是具有将保持不变的签名,支持对任何将来功能的需求。
[0109] 多个服务合约——除了服务合约功能在多个服务合约之间分开以外,与简单情况相同。
[0110] 自注册简单案例——与简单情况相同。
[0111] 自注册的多个服务合约——与多个服务合约的情况相同。
[0112] 多个服务合约,单个注册接口——与多个服务合约的情况相同。
[0113] 多个客户合约——与以上相同(该变型可以应用于上述任何情况;它只是将客户合约分开)。函数调用可以源自客户合约中的任何一个,但是这不会改变接口的设计。
[0114] 反转为服务合约中具有存储——此处,服务合约中的功能提供包括所有永久性的存储和检索的不可更新服务。这些服务合约功能被尽可能地设计成支持客户合约的未来需
求,因为它在将来会变成被更新。这适用于服务合约功能的接口和实现两者,因为服务合约
功能的接口和实现在初始部署后都无法改变。
[0115] 注册接口
[0116] 简单情况,由上面的示例代码示出了用于设计该接口的基本方法。在这种情况下,函数{linkToServiceContract}的签名是接口A。每次部署服务合约的版本时,都要手动地
调用该函数。本领域技术人员应当理解,对于以太坊,“手动地调用”实际上是通过程序员向
区块链发送事务来完成的,该事务包括调用函数的命令并且包括新的服务合约地址作为供
应的参数。
[0117] 多个服务合约——与简单情况基本相同,除了每个可更新服务合约都将有单独的{linkToServiceContract}函数。例如,{linkToServiceContract1(address_
newServiceContract1Address)},{linkToServiceContract2(address_
newServiceContract2Address)}等。
[0118] 自注册简单情况——与简单情况相同,除了服务合约具有自动调用注册接口(例如,调用{linkToServiceContract})的机制以外。适用于以太坊的机制的简单方法将是向
服务合约添加“构造器”。构造器在部署服务合约时执行,并且构造器调用注册接口。服务合
约的每个新版本都将包括该构造器代码。对于工作示例,可以在简单情况示例代码中仅向
服务合约添加以下函数:
[0119]
[0120] 本领域技术人员应当理解,该示例需要在每次部署期间由程序员将客户合约的地址供应至构造器,但是由于客户合约不会更改,因此客户合约的地址也可以是硬编码的。
[0121] 自注册的多个服务合约——与自注册简单情况相同,除了一经部署每个服务合约就调用特定于该服务合约的注册接口以外:
[0122]
[0123] 多个服务合约,单个注册接口——代替在客户端中具有多个注册函数(例如,{linkToServiceContract1},{linkToServiceContract2}),仅使用了一个函数:
[0124]
[0125]
[0126] 在这种情况下,每当服务合约之一部署了新版本时,程序员都会发送用于调用该函数的事务。使用示例代码,如果服务合约2被部署有新版本,则程序员将发出如下事务,该
事务将调用:
[0127] linkToServiceContract(2,)
[0128] 多个客户合约——该变型可以适用于以上实施方式中的任何一个。由于分割产生的客户合约中的每一个中都必须对注册接口进行重复。必须一经部署服务合约版本就调用
这些接口中的每一个。唤出接口的方法与以上变型中的用作起始点的任何一个使用的方法
相同。
[0129] 反转为服务合约中具有存储——该变型不使用注册接口。
[0130] 图6将本文中描述的可更新智能合约与常规智能合约进行比较。图6A示出了其中智能合约的版本1和版本2存储在区块链上并且区块链数据存储与合约的各个版本紧密耦
合的常规智能合约。在该常规情况下,版本2不能访问由版本1存储的数据,版本1不能访问
由版本2存储的数据。相比之下,图6B示出了如本文中描述的下述可更新智能合约:在该智
能合约中,所有数据存储耦合至客户合约,并且没有数据存储要求的各个服务合约经由接
口向客户合约提供更新的计算结果。在更新之后数据仍可访问,而原始客户合约也不受影
响。
[0131] 本领域技术人员应当理解,在所示的实施方式中,与在实现如本文中描述的可更新智能合约之前存储的数据相同的数据正在被存储至区块链。根据本文中描述的可更新智
能合约的实施方式,如果一个人知道要寻找什么,则他将看到合约分成两个部分,并且任何
存储的数据与那些部分中的仅一个部分相关联。插入区块链中的区块没有显著变化。本文
中描述的实施方式仍然以常规方式使用常规区块链,同时提供改变智能合约程序的方式以
解决智能合约程序对于更新的限制。区块的结构没有改变,只是使事务的数量和相关联的
存储量在区块中可访问。通过提供这样的可更新性,智能合约的使用应当会扩大,因为它们
不再由于不可更新而变得过时。
[0132] 计算机资源
[0133] 本领域技术人员还应当理解,可以使用适当的计算资源(例如,一个或更多个处理器)和存储器资源来实现本文中描述的可更新智能合约,所述存储器资源存储包括用于实
现本文中描述的方法和系统的指令的软件。用于存储用于实现本文中描述的系统和方法的
指令的存储器包括随机存取存储器(RAM)和半导体存储器装置,在一些实施方式中,半导体
存储器装置可以包括在半导体如寄存器中的存储位置。静态存储器的具体示例包括:非易
失性存储器,例如半导体存储器装置(例如,电可编程只读存储器(EPROM)、电可擦除可编程
只读存储器(EEPROM))和闪速存储器装置;磁盘,例如内部硬盘和可移动盘;磁光盘;RAM;以
及CD‑ROM和DVD‑ROM盘。
[0134] 实现本文中描述的可更新智能合约的一个或更多个机器还可以包括显示装置、输入装置(例如,键盘)和用户界面(UI)导航装置(例如,鼠标)。在示例中,显示装置、输入装置
和UI导航装置可以是触摸屏显示器。所述一个或更多个机器可以另外包括大容量存储装置
(例如,驱动单元)、信号生成装置(例如,扬声器)、网络接口装置以及用于收集数据的一个
或更多个传感器。所述一个或更多个机器可以包括用于与一个或更多个外围装置(例如,打
印机、读卡器等)通信或者控制一个或更多个外围装置(例如,打印机、读卡器等)的输出控
制器,例如串行(例如,通用串行总线(USB)、并行或者其他有线或无线(例如,红外(IR)、近
场通信(NFC)等)连接。在一些实施方式中,处理器和/或指令可以包括处理电路和/或收发
器电路。
[0135] 在示例实施方式中,存储装置可以包括下述机器可读介质,所述机器可读介质上存储有由本文中描述的技术或功能中的任何一个或更多个体现或利用的一组或更多组数
据结构或指令(例如,软件)。在由机器执行指令期间,指令还可以全部地或至少部分地驻留
在主存储器内、静态存储器内或硬件处理器内。在示例中,硬件处理器、主存储器、静态存储
器或存储装置中的一个或任意组合可以构成机器可读介质。机器可读介质的具体示例可以
包括:非易失性存储器,例如半导体存储器装置(例如,EPROM或EEPROM)和闪速存储器装置;
磁盘,例如内部硬盘和可移动盘;磁光盘;RAM;以及CD‑ROM和DVD‑ROM盘。虽然机器可读介质
通常为单个介质,但是术语“机器可读介质”可以包括被配置成存储一个或更多个指令的单
个介质或多个介质(例如,集中式或分布式数据库和/或相关联的缓存和服务器)。
[0136] 实现本文中描述的可更新智能合约的机器的装置可以是以下中的一个或更多个:硬件处理器(例如,中央处理器(CPU)、图形处理单元(GPU)、硬件处理器核或以上的任意组
合)、主存储器、静态存储器、传感器、网络接口设备、天线、显示装置、输入装置、UI导航装
置、大容量存储设备、指令、信号生成设备和输出控制器。装置可以被配置成执行本文中公
开的方法和/或操作中的一个或更多个。装置可以意在作为机器的下述部件,所述部件用于
执行本文中公开的方法和/或操作中的一个或更多个,以及/或者用于执行本文中公开的方
法和/或操作中的一个或更多个的一部分。在一些实施方式中,装置可以包括引脚或用于接
收电力的其他装置。在一些实施方式中,装置可以包括电力调节硬件。
[0137] 图7是示出了可以在其上实现本文中描述的示例的计算机系统的框图。计算机系统700可以例如在一个服务器或多个服务器的组合上实现。例如,计算机系统700可以被实
现为用于管理智能合约的网络计算机系统的一部分。也可以使用例如通过图7所描述的多
个计算机系统的组合来实现本文中描述的可更新智能合约。
[0138] 在一种实现方式中,计算机系统700包括处理资源、主存储器720、只读存储器(ROM)730、存储设备740和通信接口750。计算机系统700包括用于对存储在主存储器720中
的(例如由随机存取存储器(RAM)或其他动态存储设备提供的)信息进行处理的至少一个处
理器710,主存储器720用于存储能够由处理器710执行的信息和指令。主存储器720还可以
用于存储在执行要由处理器710执行的指令期间的临时变量或其他中间信息。计算机系统
700还可以包括用于存储用于处理器710的静态信息和指令的ROM 730或其他静态存储设
备。提供存储设备740例如磁盘或光盘以用于存储信息和指令。
[0139] 通信接口750使得计算机系统700能够通过使用网络链路(无线的或有线的)与一个或更多个网络(例如,蜂窝网络)通信。使用网络链路,计算机系统700可以与一个或更多
个计算设备和一个或更多个服务器通信。存储在存储器730中的可执行指令可以包括用于
在被执行时执行本文中描述的方法中的一个或更多个的指令724。
[0140] 作为示例,存储在存储器720中的指令和数据可以由处理器710执行以实现如本文中描述的可更新智能合约。处理器710执行软件和/或其他逻辑器件的用于执行利用例如通
过图1至图6所描述的实现方式描述的一个或更多个处理、步骤以及其他功能的指令。
[0141] 本文中描述的示例与计算机系统700的用于实现所描述的技术的用途有关。根据一个示例,由计算机系统700响应于处理器710执行包括在主存储器720中的一个或更多个
指令的一个或更多个序列来执行那些技术。可以将这样的指令从另一计算机可读介质例如
存储设备740读入主存储器720。主存储器720中包括的指令的序列的执行使处理器710执行
本文中描述的处理步骤。在替选的实现方式中,可以使用硬连线电路代替软件指令或者与
软件指令结合以实现本文中描述的示例。因此,所描述的示例不限于硬件电路和软件的任
何特定组合。
[0142] 在一个实施方式中,本文中描述的功能或算法可以以软件实现。软件可以包括存储在本地的或联网的计算机可读介质或计算机可读存储设备——例如,一个或更多个非暂
态存储器或其他类型的基于硬件的存储设备——上的计算机可执行指令。另外,这样的功
能与可以作为软件、硬件、固件或以上的任何组合的模块相对应。根据需要可以在一个或更
多个模块中执行多个功能,并且所描述的实施方式仅是示例。可以在计算机系统——例如,
个人计算机、服务器或其他计算机系统——上运行的数字信号处理器、ASIC、微处理器或其
他类型的处理器上执行软件,从而将这样的计算机系统转变成专门编程的机器。
[0143] 预期本文中描述的示例独立于其他构思、思想或系统而扩展到所描述的各个元素和构思,以及示例包括在本申请中任何地方陈述的元素的组合。尽管本文中参照附图详细
描述了示例,但是应当理解,构思不限于那些精确的示例。照此,许多修改和变化对于本领
域技术人员将是明显的。因此,意在由所附权利要求书及其等同方案来限定构思的范围。此
外,预期可以将单独描述或作为示例的一部分描述的特定特征与其他单独描述或作为其他
示例的一部分描述的特征进行组合,即使其他特征和示例都没有提及该特定特征。因此,没
有描述组合不应当排除要求这样的组合的权利。
[0144] 可执行指令和机器存储介质
[0145] 各种存储器(即,720、730和/或处理单元710的存储器)和/或存储设备740可以存储由本文中描述的方法或功能中的任何一个或更多个体现或利用的一组或更多组指令和
数据结构(例如,指令)724。这些指令在由处理器单元710执行时产生用于实现所公开的示
例的各种操作。
[0146] 如本文中所使用的,术语“机器存储介质”、“设备存储介质”、“计算机存储介质”(统称为“机器存储介质”)在本公开内容中意指相同的事物并且可以互换使用。所述术语指
的是存储可执行指令和/或数据的单个或多个存储设备和/或介质(例如,集中式或分布式
数据库和/或相关联的缓存和服务器),以及包括多个存储装置或设备的基于云的存储系统
或存储网络。因此,所述术语应当被视为包括但不限于固态存储器以及光学和磁性介质,包
括在处理器内部或外部的存储器。机器存储介质、计算机存储介质和/或设备存储介质740
的具体示例包括非易失性存储器,包括:例如半导体存储器设备,如可擦除可编程只读存储
器(EPROM)、电可擦除可编程只读存储器(EEPROM)、FPGA和闪速存储器设备;磁盘,例如内部
硬盘和可移动盘;磁光盘;以及CD‑ROM和DVD‑ROM盘。术语机器存储介质、计算机存储介质和
设备存储介质明确地排除了载波、调制数据信号和其他这样的介质,载波、调制数据信号和
其他这样的介质中的至少一些被涵盖在下面论述的术语“信号介质”中。
[0147] 信号介质
[0148] 术语“信号介质”或“传输介质”应当被视为包括任何形式的调制数据信号、载波等。术语“调制数据信号”意指使其特性中的一个或更多个特性以对信号中的信息进行编码
的方式来被设置或改变的信号。
[0149] 计算机可读介质
[0150] 术语“机器可读介质”可以包括如下的任何介质:能够存储、编码或携载用于由一个或更多个机器执行的指令并且使所述一个或更多个机器执行本公开内容的技术中的任
意一个或更多个,或者能够存储、编码或携载由这样的指令使用或者与这样的指令相关联
的数据结构。非限制性机器可读介质示例可以包括固态存储器以及光学和磁性介质。机器
可读介质的具体示例可以包括:非易失性存储器,例如半导体存储器设备(例如,电可编程
只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM))和闪速存储器设备;磁盘,例如
内部硬盘和可移动盘;磁光盘;随机存取存储器(RAM);以及CD‑ROM和DVD‑ROM盘。在一些示
例中,机器可读介质可以包括非暂态机器可读介质。如本文中使用的,“机器可读介质”排除
了暂态传播信号。
[0151] 还可以利用多个传输协议(例如,帧中继、互联网协议(IP)、传输控制协议(TCP)、用户数据报协议(UDP)、超文本传输协议(HTTP)等)中的任意一个经由网络接口设备使用传
输介质通过通信网络发送或接收指令。示例通信网络可以包括局域网(LAN)、广域网(WAN)、
分组数据网络(例如,互联网)、移动电话网络(例如,蜂窝网络)、简易老式电话(POTS)网络
和无线数据网络(例如,被称为 的电气和电子工程师协会(IEEE)802.11标准族、被
称为 的IEEE 802.16标准族)、IEEE 802.15.4标准族、长期演进(LTE)标准族、通
用移动电信系统(UMTS)标准族、对等(P2P)网络等。
[0152] 在示例中,网络接口设备可以包括一个或更多个物理插孔(例如,以太网、同轴或电话插孔)或者用于连接至通信网络的一个或更多个天线。在示例中,网络接口设备可以包
括用于使用单输入多输出(SIMO)技术、多输入多输出(MIMO)技术或多输入单输出(MISO)技
术中的至少一个来无线地通信的一个或更多个天线。在一些示例中,网络接口设备可以使
用多用户MIMO技术进行无线通信。术语“传输介质”应当被视为包括下述任何无形介质:能
够存储、编码或携载用于由机器执行的指令,并且包括数字或模拟通信信号或促进这样的
软件的通信的其他无形介质。
[0153] 本文中将某些实施方式描述为编号的示例1、2、3等。这些编号的示例仅作为示例提供,并且不限制主题技术。
[0154] 示例1是一种用于在区块链上实现智能合约的系统,包括:存储器,其用于存储指令;以及一个或更多个处理器,其使用存储在存储器中的指令来执行包括以下的操作:将智
能合约分离成可更新智能合约和不可更新智能合约,其中,不可更新智能合约针对需要永
久地访问的数据处理向区块链进行的持久性数据存储和检索,并且可更新智能合约不包括
向区块链进行数据存储和检索;部署可更新智能合约的第一版本和不可更新智能合约;向
不可更新智能合约提供可更新智能合约的第一版本的地址;不可更新智能合约将可更新智
能合约的第一版本的地址存储至区块链;不可更新智能合约从区块链中检索永久数据并且
将永久数据传递至可更新智能合约的第一版本;可更新智能合约对永久数据执行计算,并
且将基于对永久数据的计算的更新数据返回至不可更新智能合约;以及不可更新智能合约
将更新数据存储至区块链。
[0155] 示例2是如示例1中的系统,还包括连接可更新智能合约和不可更新智能合约的固定接口,其中,可更新智能合约的第一版本的地址经由固定接口提供至不可更新智能合约,
不可更新智能合约经由固定接口将永久数据传递至可更新智能合约的第一版本,并且可更
新智能合约经由固定接口将基于对永久数据的计算的更新数据返回至不可更新智能合约。
[0156] 示例3是如任一先前示例中的系统,其中,存储器存储用于执行包括以下的操作的另外的指令:通过利用可更新智能合约的第一版本的地址调用不可更新智能合约的接口来
向不可更新智能合约提供可更新智能合约的第一版本的地址。
[0157] 示例4是如任一先前示例中的系统,其中,存储器存储用于执行包括以下的另外的操作的另外的指令:部署可更新智能合约的第二版本;利用可更新智能合约的第二版本的
地址调用不可更新智能合约的接口;不可更新智能合约将可更新智能合约的第二版本的地
址存储至区块链;以及不可更新智能合约通过从区块链中检索可更新智能合约的第二版本
的地址并且在所检索的地址处调用可更新智能合约的第二版本来唤出可更新智能合约的
第二版本。
[0158] 示例5是如任一先前示例中的系统,其中,所述分离包括将智能合约分离成不可更新智能合约和多个可更新智能合约,所述部署包括部署每个可更新智能合约的第一版本和
第二版本,所述调用包括利用相应可更新智能合约的相应版本的地址来调用相应接口,所
述存储包括将相应可更新智能合约的相应版本的地址存储至区块链,以及所述唤出包括从
区块链中检索可更新智能合约的第二版本的地址并且在所检索的地址处调用可更新智能
合约的第二版本。
[0159] 示例6是如任一先前示例中的系统,其中,所述分离包括将智能合约分离成不可更新智能合约和多个可更新智能合约,所述部署包括部署每个可更新智能合约的第一版本和
第二版本,所述调用包括利用与相应可更新智能合约相关联的标识符和相应可更新智能合
约的相应地址来调用接口,所述存储包括将相应可更新智能合约的相应版本的地址和标识
符存储至区块链,以及所述唤出包括从区块链中检索可更新智能合约的第二版本的地址和
标识符并且在所检索的地址处调用由标识符标识的可更新智能合约的第二版本。
[0160] 示例7是如任一先前示例中的系统,其中,可更新智能合约是自注册的,并且所述调用包括:自注册可更新智能合约利用自注册可更新智能合约的相应版本的地址来调用不
可更新智能合约的接口。
[0161] 示例8是如任一先前示例中的系统,其中,所述分离包括将智能合约分离成不可更新智能合约和多个可更新智能合约,所述部署包括部署每个可更新智能合约的第一版本和
第二版本,可更新智能合约是自注册的,并且所述调用包括:自注册可更新智能合约利用相
应自注册可更新智能合约的相应版本的地址调用不可更新智能合约的相应接口,所述存储
包括将相应可更新智能合约的相应版本的地址存储至区块链,以及所述唤出包括从区块链
中检索可更新智能合约的第二版本的地址并且在所检索的地址处调用可更新智能合约的
第二版本。
[0162] 示例9是如任一先前示例中的系统,其中,存储器存储用于执行包括以下的操作的另外的指令:不可更新智能合约从区块链中检索永久数据并且将永久数据传递至可更新智
能合约,并且可更新智能合约对永久数据进行计算并且将基于对永久数据的计算的数据返
回至不可更新智能合约以用于向区块链进行永久性存储。
[0163] 示例10是如任一先前示例中的系统,其中,存储器存储用于执行包括以下的操作的另外的指令:将智能合约分离成多个不可更新智能合约。
[0164] 示例11是如任一先前示例中的系统,其中,存储器存储用于执行包括以下的操作的另外的指令:在部署可更新智能合约的第一版本之前将不可更新智能合约的地址硬编码
到可更新智能合约的第一版本中;部署可更新智能合约的第二版本;调用可更新智能合约
的第二版本;可更新智能合约的第二版本在硬编码的地址处调用不可更新智能合约;以及
不可更新智能合约将任何永久数据存储至区块链。
[0165] 示例12是一种由一个或更多个处理器执行任一先前示例中阐述的步骤的方法。
[0166] 示例13是一种非暂态计算机可读介质,其存储根据示例1至示例11中任一个的用于更新在区块链上实现的智能合约的计算机指令。
[0167] 如本文中描述的示例可以包括逻辑器件或多个部件、模块或机制,或者可以在逻辑器件或多个部件、模块或机制上工作。模块是能够执行指定操作的有形实体(例如,硬
件),并且可以以某种方式被配置或布置。在示例中,可以以指定的方式(例如,内部地或者
相对于外部实体如其他电路)将电路布置为模块。在示例中,一个或更多个计算机系统(例
如,独立式计算机系统、客户端计算机系统或服务器计算机系统)或者一个或更多个硬件处
理器的全部或部分可以由固件或软件(例如,指令、应用部分或应用)配置为进行操作以执
行指定操作的模块。在示例中,软件可以驻留在机器可读介质上。在示例中,软件在被模块
的底层硬件执行时使硬件执行指定操作。
[0168] 因此,术语“模块”被理解成涵盖有形实体,有形实体是如下实体:该实体被物理地构造、具体地配置(例如,硬连线)或临时地(例如,暂时地)配置(例如,编程)成以指定方式
操作或者执行本文中描述的任何操作的部分或全部。考虑到其中模块被临时地配置的示
例,模块中的每一个都不需要在任何时刻被实例化。例如,在模块包括使用软件配置的通用
硬件处理器的情况下,通用硬件处理器可以在不同时间处被配置为各个不同的模块。因此,
软件可以将硬件处理器配置成例如在一个时间实例处构成特定模块并且在不同时间实例
处构成不同的模块。
[0169] 一些实施方式可以全部地或部分地以软件和/或固件来实现。该软件和/或固件可以采取包括在非暂态计算机可读存储介质中或非暂态计算机可读存储介质上的指令的形
式。然后,那些指令可以由一个或更多个处理器读取并执行,以使得能够执行本文中描述的
操作。指令可以呈任何合适的形式,例如但不限于源代码、编译代码、解释代码、可执行代
码、静态代码、动态代码等。这样的计算机可读介质可以包括用于以由一个或更多个计算机
可读的形式存储信息的任何有形的非暂态介质,例如但不限于只读存储器(ROM)、随机存取
存储器(RAM)、磁盘存储介质、光学存储介质、闪速存储器等。
[0170] 贯穿本说明书,多个实例可以实现被描述为单个实例的部件、操作或结构。尽管一个或更多个方法的各个操作被示出和描述为单独的操作,但是各个操作中的一个或更多个
可以同时执行并且不要求以所示的顺序执行操作。在示例配置中作为单独的部件呈现的结
构和功能可以被实现为组合的结构或部件。类似地,作为单个部件呈现的结构和功能可以
被实现为单独的部件。这些和其他变型、修改、添加和改进落入本文中的主题的范围内。
[0171] 在本公开内容中描述了以特定方式配置的各种部件。可以以任何合适的方式来配置部件。例如,可以使作为或包括计算设备的部件配置有对计算设备进行编程的合适的软
件指令。部件还可以凭借其硬件布置或以任何其他合适的方式进行配置。
[0172] 上面的描述意在是说明性的而非限制性的。例如,以上描述的示例(或以上描述的示例的一个或更多个方面)可以与其他示例结合使用。在回顾以上描述之后,例如可以由本
领域普通技术人员使用其他示例。例如,遵照美利坚合众国的37CFR§1.72(b),摘要要使得
读者能够快速确定技术公开内容的性质。摘要被提交,同时应当理解的是,摘要不用于解释
或限制权利要求书的范围或含义。
[0173] 另外,在以上的具体实施方式中,可以将各种特征分组在一起以简化本公开内容。然而,权利要求书不能阐明本文中公开的每个特征,因为示例可以以这样的特征的子集为
特征。此外,示例可以包括比特定示例中公开的特征更少的特征。因此,所附权利要求书由
此被并入具体实施方式中,其中,每个权利要求独立地作为单独的示例。应当参考所附权利
要求书以及这样的权利要求书所赋予的等同方案的全部范围来确定本文中公开的示例的
范围。
[0174] 本领域技术人员应当理解,权利要求书涵盖具体实施方式以及本文中未具体描述的实施方式,但是可以包括本文中描述的部件和步骤的等同部件和步骤以及对本领域技术
人员而言将明显的其他特征和修改。