一种面向区块链多级智能合约的数据迁移方法转让专利

申请号 : CN201710230002.3

文献号 : CN107145521B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李伟邱炜伟尹可挺梁秀波李启雷

申请人 : 杭州趣链科技有限公司

摘要 :

本发明公开了一种面向区块链多级智能合约的数据迁移方法。包括如下步骤:1)对于有多个合约相互调用的合约系统,构建合约树状模型;2)迁移顶层合约除子节点合约地址以外的数据;3)判断当前合约所在节点是否为叶子节点;4)部署叶子节点的新合约并迁移该合约的数据,存储叶子节点的合约地址;5)所有子节点合约的数据迁移完毕,部署新合约迁移合约数据并存储所有子节点合约的新地址;6)重复进行步骤3)到步骤5),迁移顶层合约的所有子合约的合约地址参数。本发明解决了区块链上复杂智能合约数据迁移时合约地址作为参数无法更新问题,实现了面向区块链多级智能合约的数据迁移。

权利要求 :

1.一种面向区块链多级智能合约的数据迁移方法,其特征在于,包括如下步骤:

1)对于有多个合约相互调用的智能合约系统,使用树状模型逐级迁移合约数据,树状模型中父节点合约调用子节点合约;

2)部署顶层节点的合约,迁移顶层合约除子节点合约地址以外的数据;

3)判断当前合约所在节点是否为叶子节点,若当前节点不是叶子节点,则读取当前节点的子节点的合约地址,对子合约重复进行该判断;若当前节点是叶子节点,进入步骤4);

4)部署叶子节点的新合约并迁移该合约的数据,存储叶子节点的合约地址;

5)遍历所有合约节点,若合约所在节点的所有子节点的数据迁移完毕,开始部署新的当前合约,迁移合约数据并存储所有子节点合约的新地址;否则,读取没有完成数据迁移的子合约地址,进行步骤3);

6)重复进行步骤3)到步骤5),直至当前合约所在节点为顶层节点,迁移顶层合约的所有子合约的合约地址参数。

2.如权利要求1所述的一种面向区块链多级智能合约的数据迁移方法,其特征在于,步骤1)中对于有相互调用的多个合约构造树状模型,其中树状模型中父节点存储有子节点的合约地址并对子节点合约有调用关系,一个合约调用多个子合约或被多个父合约调用。

3.如权利要求1所述的一种面向区块链多级智能合约的数据迁移方法,其特征在于,步骤2)中,合约迁移时会部署新的合约,每一个合约都有唯一的合约地址;迁移顶层合约数据时应当除去旧的合约地址,只有所有子节点合约数据全部迁移完毕后,父节点合约才开始数据迁移,合约地址的迁移应当以新部署的合约为主。

4.如权利要求1所述的一种面向区块链多级智能合约的数据迁移方法,其特征在于,在调用合约方法迁移合约数据之前,将所有的私钥文件用其对应的密码解密形成明文私钥,利用缓存机制将明文私钥存放在缓存中。

5.如权利要求1所述的一种面向区块链多级智能合约的数据迁移方法,其特征在于,在迁移合约数据时,采用多线程获取旧的合约数据及将旧的合约数据写入新合约。

说明书 :

一种面向区块链多级智能合约的数据迁移方法

技术领域

[0001] 本发明涉及区块链技术、智能合约、缓存及多线程技术,尤其涉及一种多级智能合约升级时的数据迁移方法。

背景技术

[0002] 区块链技术,区块链是一种新型去中心化协议,能安全地存储数字货币交易或其他数据,信息不可伪造和篡改,区块链上的交易确认由区块链上的所有节点共同完成,由共识算法保证其一致性,区块链上维护一个公共的账本,用于存储区块链网络上所有用户的余额,公共账本位于存储区块上任何节点可见,从而保证其不可伪造和篡改。
[0003] 智能合约,区块链上的智能合约是指由solidity编写和编译并运行与区块链上的一串二进制代码,我们可以通过智能合约实现在区块链上的数据存储、读写以及一些逻辑操作,因此一些基于区块链的应用是利用智能合约完成的。
[0004] 缓存及多线程技术,缓存是指当程序需要读取数据时,事先将需要读取的数据置于缓存中,程序优先从缓存读取数据。由于缓存的运行速度比内存块很多,所以缓存可以极大加快程序读取数据速度。多线程是指程序在进行一些计算比较密集的操作时,采用多线程来处理,充分利用CPU核心数,提高CPU效率。

发明内容

[0005] 本发明的目的是针对现有区块链技术的不足,提供一种面向区块链多级智能合约的数据迁移方法。
[0006] 由于区块链本身的特性,一般使用智能合约的区块链应用上线以后,如果要应用的版本需求需要更新,就意味着得重新部署合约,并生成新的合约地址。之后系统将使用新的合约,由于旧的数据不能被摒弃,此时就需要将旧的合约数据迁移到新的合约中。
[0007] 本发明的目的是通过以下技术方案来实现:在不改变区块链合约数据的情况下,确保安全高效的将旧有的合约数据迁移到新的合约中,尤其涉及有调用关系的多级合约数据迁移情况,包括如下步骤:
[0008] 1)对于有多个合约相互调用的智能合约系统,使用树状模型逐级迁移合约数据,树状模型中父节点合约调用子节点合约;
[0009] 2)部署顶层节点的合约,迁移顶层合约除子节点合约地址以外的数据;
[0010] 3)判断当前合约所在节点是否为叶子节点,若当前节点不是叶子节点,则读取当前节点的子节点的合约地址,对子合约重复进行该判断;若当前节点是叶子节点,进入步骤4);
[0011] 4)部署叶子节点的新合约并迁移该合约的数据,存储叶子节点的合约地址;
[0012] 5)遍历所有合约节点,若合约所在节点的所有子节点的数据迁移完毕,开始部署新的当前合约,迁移合约数据并存储所有子节点合约的新地址;否则,读取没有完成数据迁移的子合约地址,进行步骤3);
[0013] 6)重复进行步骤3)到步骤5),直至当前合约所在节点为顶层节点,迁移顶层合约的所有子合约的合约地址参数。
[0014] 进一步地,所述的步骤1)中对于有相互调用的多个合约构造树状模型,首先应构造树状模型明确合约间的调用关系,其中父节点合约中有调用子节点合约方法,其中一个合约可以调用多个子合约,一个子合约可以被多个合约调用。
[0015] 进一步地,所述的步骤2)中,合约迁移时会部署新的合约,每一个合约都有唯一的合约地址。迁移顶层合约数据时应当除去旧的合约地址,只有所有子节点合约数据全部迁移完毕后,父节点合约才开始数据迁移,合约地址的迁移应当以新部署的合约为主。
[0016] 进一步地,在调用合约方法迁移合约数据前需要将私钥缓存,基于区块链本身的特性,每次调用智能合约方法时都需要私钥进行签名,而私钥通常被加密为一个私钥文件存在。因此,可以将私钥文件事先解密存放在缓存中,基于缓存文件的高效读取速度,调用合约方法时效率更高。
[0017] 进一步地,在迁移合约数据时,由于合约数据迁移时会不断执行合约的读写操作,可以采用多线程的方法来充分利用CPU的核心数。这样合约数据迁移方法可以支持区块链上的大数量级的数据迁移,并确保在新的合约系统中有效使用旧合约的相关数据。
[0018] 本发明的有益效果是:本发明在面向区块链多级智能合约的数据迁移中构造合约调用树状模型来安全迁移合约数据,以及在迁移数据时利用缓存和多线程的技术,实现了复杂智能合约的数据迁移。对于一般的没有调用关系的智能合约的数据迁移,做法是直接调用旧合约的Get方法和新合约的Set方法即可完成数据迁移,但是对于有调用关系的多个合约的数据迁移,直接迁移数据会破坏原有的合约调用关系。为保证合约数据及其调用逻辑完整的迁移到新部署的合约系统,本发明在多级智能合约数据迁移中使用树状模型调整合约迁移时的顺序及迁移内容的选择,并且利用私钥缓存和多线程智能合约读写技术进一步完善合约数据迁移效率,这样即使是复杂的智能合约系统也可以完整迁移到新的合约系统而无需担心其调用逻辑被破坏。本发明有效地解决了面向多级智能合约的数据迁移问题。

附图说明

[0019] 图1是本发明多级智能合约数据迁移方法的步骤流程图;
[0020] 图2是本发明实施例的多级智能合约的树状模型图;
[0021] 图3是本发明实施例的合约数据迁移具体过程图。

具体实施方式

[0022] 下面根据附图和具体实施例详细描述本发明,本发明的目的和效果将变得更加明显。
[0023] 如图1所示,本发明方法,包括如下步骤:
[0024] 1)对于有多个合约相互调用的智能合约系统,如图2所示,使用树状模型逐级迁移合约数据,树状模型中父节点合约调用子节点合约;
[0025] 2)部署顶层节点的合约,迁移顶层合约除子节点合约地址以外的数据;
[0026] 3)判断当前合约所在节点是否为叶子节点,若当前节点不是叶子节点,则读取当前节点的子节点的合约地址,对子合约重复进行该判断;若当前节点是叶子节点,进入步骤4);
[0027] 4)部署叶子节点的新合约并迁移该合约的数据,存储叶子节点的合约地址;
[0028] 5)遍历所有合约节点,若合约所在节点的所有子节点的数据迁移完毕,开始部署新的当前合约,迁移合约数据并存储所有子节点合约的新地址;否则,读取没有完成数据迁移的子合约地址,进行步骤3);
[0029] 6)重复进行步骤3)到步骤5),直至当前合约所在节点为顶层节点,迁移顶层合约的所有子合约的合约地址参数。
[0030] 进一步地,所述的步骤1)中对于有相互调用的多个合约构造树状模型,首先应构造树状模型明确合约间的调用关系,其中父节点合约中有调用子节点合约方法,其中一个合约可以调用多个子合约,一个子合约可以被多个合约调用。
[0031] 进一步地,所述的步骤2)中,合约迁移时会部署新的合约,每一个合约都有唯一的合约地址。因此,迁移顶层合约数据时应当除去旧的合约地址,并且只有所有子节点合约数据全部迁移完毕后,父节点合约才开始数据迁移,合约地址的迁移应当以新部署的合约为主。
[0032] 进一步地,如图3所示,在调用合约方法前需要将私钥缓存,基于区块链本身的特性,每次调用智能合约方法时都需要私钥进行签名,而私钥通常被加密为一个私钥文件存在。因此,可以将私钥文件事先解密存放在缓存中,基于缓存文件的高效读取速度,调用合约方法时效率更高;
[0033] 进一步地,如图3所示,在迁移合约数据时采用多线程的方法执行合约方法,由于合约数据迁移时会不断执行合约的读写操作,可以采用多线程的方法来充分利用CPU的核心数。这样合约数据迁移方法可以支持区块链上的大数量级的数据迁移,并确保在新的合约系统中有效使用旧合约的相关数据。
[0034] 下面用一个具体的智能合约迁移实例来说明具体的实施方式:
[0035] 模拟一个面向多级区块链智能合约的数据迁移,如图2所示,合约1中有两个变量contract1Addrs[]和contract2Addrs[]分别存储了所有合约2的地址和所有合约3的地址。合约2中也有两个变量contract3Addrs[]和contract4Addrs[]分别存储了所有合约4的地址和所有合约5的地址。合约3中也有变量contract5Addrs[]存储所有合约5的地址。
[0036] 首先,在正式迁移合约数据前,我们判断该智能合约系统是一个有相互调用关系的多级智能合约系统。通过合约调用关系的树状模型(图2所示),可以知道合约1调用合约2和合约3,合约2调用合约4和合约5,合约3调用合约5。根据步骤2)、步骤3)、步骤4)和步骤5),首先部署新的合约4和合约5,并迁移合约数据,存储新合约的地址。此时,合约2和合约3的所有子节点合约已经迁移完毕,部署新的合约2和合约3,迁移除合约地址外的所有数据,最后存储新的合约4和合约5的地址。最后一步,合约1的所有子节点合约全部迁移完成,部署新的合约1,迁移除合约地址外的所有数据,存储新的合约2和合约3的地址。到此,该多级智能合约系统的数据迁移完毕。