一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种区块链合约原地址升级的方法和装置与流程

2021-11-30 21:57:00 来源:中国专利 TAG:


1.本说明书涉及计算机软件技术领域,尤其涉及一种区块链合约原地址升级的方法、装置和电子设备。


背景技术:

2.在软件工程中,当发现新的bug和安全风险时,通常会对它们进行修补,并实时推送更新的版本。在区块链的智能合约开发中,可升级性并不是那么简单,也就是说智能合约一旦部署之后,就再也无法改变源码。尽管想升级已经部署的智能合约中的代码是不可能的,但是其可升级性仍然是研究的活跃领域,特别是区块链的evm合约一直以来都面临着合约逻辑改变,需要进行升级的问题。既有的智能合约升级方法包括使用注册合约、代理合约、存储合约等方法。其中,代理合约是可以通过设计一个代理合约结构,这个结构可以让你可以通过新部署一个合约的方式,并通过代理合约重定向发送给原合约的交易,得到新的合约地址,来实现升级主要的处理逻辑的目的。然后,上述方法都可能由于滥用或新发现的漏洞而导致智能合约失败,特别是无法进行原地升级,导致升级流程繁琐,这降低了合约调用的效率和灵活性。


技术实现要素:

3.本说明书实施例的目的是针对区块链智能合约升级的问题,提供一种区块链合约原地址升级的方法和装置。
4.为解决上述技术问题,本说明书实施例是这样实现的:
5.第一方面,提出了区块链合约原地址升级的方法,区块链合约账户包括合约代码哈希值字段code_hash;当合约代码发生变化时,包括:
6.创建合约升级交易,所述合约升级交易包括合约地址字段address和合约代码字段content;
7.执行所述合约升级交易;
8.当有普通交易发送至所述区块链时,根据原合约地址调用升级后的合约。
9.第二方面,提出了一种区块链合约原地址升级的装置,包括:
10.区块链账户管理模块,用于管理区块链合约账户,所述区块链合约账户包括合约代码哈希值字段code_hash;
11.合约升级交易创建模块,用于创建合约升级的交易,所述交易包括合约地址字段address和合约代码字段content;
12.合约升级交易执行模块,用于执行合约升级交易更新区块链合约账户和合约代码。
13.第三方面,提出了一种电子设备,包括:处理器;以及
14.被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行第一方面所述的方法。
15.第四方面,提出了一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行第一方面所述的方法。
16.本说明书可以达到至少以下技术效果:
17.发明通过创建并发送特殊的区块链交易,对智能合约进行原地升级,不需要进行重定向的操作,并且能够利用原合约的存储内容,避免了繁琐的合约升级流程,提高了合约调用的效率和灵活性。
附图说明
18.为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
19.图1为本说明书实施例提供的区块链合约原地址升级方法步骤示意图之一。
20.图2为本说明书实施例提供的区块链合约原地址升级方法步骤示意图之二。
21.图3为本说明书实施例提供的区块链合约原地址升级方法步骤示意图之三。
22.图4为本说明书的一个实施例提供的区块链合约原地址升级的装置结构示意图。
23.图5为本说明书的一个实施例提供的电子设备的结构示意图。
具体实施方式
24.为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
25.关键术语
26.区块链技术:是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。从本质上讲,它是一个共享数据库,存储于其中的数据或信息,具有不可伪造、全程留痕、可以追溯、公开透明、集体维护”等特征。基于这些特征,区块链技术奠定了坚实的信任基础,创造了可靠的合作机制,具有广阔的运用前景。按照准入机制分类,区块链分为公有链、联盟链和私有链。
27.以太坊虚拟机evm:是一个轻量级的虚拟机,以太坊虚拟机evm的作用是将智能合约代码编译成可在以太坊上执行的机器码,并提供智能合约的运行环境。其功能与传统操作系统稍有不同,evm的构建是除了为了模拟可由物理cpu执行的操作,还负责以太坊的许多关键功能。它是一个对外完全隔离的沙盒环境,在运行期间不能访问网络、文件,即使不同合约之间也有有限的访问权限。尽管区块链是可编程的,但是由于其脚本系统支持的功能有限,基于区块链做应用开发是一件很有难度的事情。而以太坊是基于区块链底层技术
进行封装,完善,其中很重要的一个革新就是以太坊虚拟机及面向合约的高级编程语言,这使得开发者可以专注于应用本身,更方便、快捷的开发去中心化应用程序,同时也大大降低了开发难度。
28.区块链账户:包括外部账户和和合约账户。其中,外部账户是由以太坊网络的人类用户创建的帐户,其与公钥、私钥对相关,他是通过对公钥进行二次哈希后结果的最后20个字节导出的;合约账户,由智能合约的代码控制,只有合约账户才有代码,其中存储的是合约代码哈希值,即这个账户的以太坊虚拟机代码的哈希值,这个字段在生成后是不可修改的,这意味着智能合约代码是不可修改的。本发明实施例中涉及的即为区块链合约账户。通常合约账户字段一般包括:账户的字段包括一个随机数nonce、账户的余额balance、合约代码codehash、存储。合约的字段的存储跟它在合约内声明的顺序有关。
29.智能合约及合约代码:智能合约是一段程序,它以计算机指令的方式实现了传统合约的自动化处理。简单讲,就是双方在区块链资产上交易时,触发执行的一段代码,这段代码就是智能合约。智能合约程序不只是一个可以自动执行的计算机程序,它本身就是一个系统参与者,对接收到的信息进行回应,可以接收和储存价值,也可以向外发送信息和价值,总是按照事先的规则执行操作。智能合约的代码是以合约代码的哈希值,作为索引存储在节点上的。
30.代理合约:虽然无法更新已部署的智能合约代码,但是可以通过设置一个代理合约架构,进而部署新的合约,以实现合约升级的目的。代理模式使得所有消息调用都通过代理合约,代理合约会将调用请求重定向到最新部署的合约中。如要升级时,将升级后新合约地址更新到代理合约中即可。
31.默克尔树:区块链作为分布式账本,原则上网络中的每个节点都应包含整个区块链中全部区块,随着区块链越来越长,节点的硬盘有可能放不下。区块链中引入了默克尔树解决这个问题。具体来说,一个区块中的所有交易都会求取哈希值,得到的哈希值,再两两组合成新文本求取哈希值,以此类推,直到生成最后一个哈希值,即根哈希值state_root,这些哈希值组成的二叉树就是默克尔树。
32.下面通过具体的实例对本说明书所涉及的一种区块链中使用静态默克尔树的方案进行详述。
33.实施例一
34.针对默克尔树哈希计算量大特别是在联盟链应用场景下哈希计算性能要求更高的问题,本实施例提供一种区块链中使用静态默克尔树方法,参照图1所示为本实施例步骤。首先,区块链合约账户包括合约代码哈希值字段code_hash。这里需要说明的是创建合约或者是升级合约,由于合约代码改变,因此该字段也会改变,根据默克尔树的原理,这样合约代码的修改,就能反映到默克尔树的根节点state_root中。
35.因此,当合约代码发生变化时,包括:
36.步骤101:创建合约升级交易,所述合约升级交易包括合约地址字段address和合约代码字段content。
37.可选地,所述合约升级交易的地址字段address用于保存待升级的原合约地址;所述合约升级交易的合约代码字段content用于保存修改后的合约代码。
38.这里需要说明的是,通常情况下区块链交易包括两类数据:交易输入和交易输出。
而本发明实施例中,使用的是一种特殊交易结构,是利用交易的工作流程即交易的生成、交易的传播、工作量证明、全节点验证、区块链记录等工作流程,来实现根据指定地址即待升级的原合约地址与修改后的合约代码的对应关系。
39.步骤102:执行所述合约升级交易。
40.可选地,如图2所示,执行所述合约升级交易包括:
41.步骤121:修改所述区块链合约账户的合约代码哈希值字段code_hash为新的合约代码哈希值;
42.步骤122:根据所述新的合约代码哈希值字段code_hash,将新的合约代码存入相应区块链节点;
43.步骤123:更新区块链合约账户的默克尔树根哈希值state_root。
44.这里需要说明的是,code_hash字段值的变化,会直接导致和余额账户默克尔树根哈希值state_root发生变化,这是由合约账户的默克尔树定义所决定的。特别是在合约账户地址未变的情况下,合约代码一旦发生变化,代码哈希code_hash就会发生变化,进而达到原地址下发现合约代码发生变化进而实现升级的目的。
45.步骤103:当有普通交易发送至所述区块链时,根据原合约地址调用升级后的合约。
46.可选地,如图3所示,根据原合约地址调用升级后的合约包括:
47.步骤131:从所述区块链合约账户的默克尔树根哈希值state_root开始,获取到该合约账户各个字段的值;
48.步骤132:根据所述合约账户的合约代码哈希值字段code_hash,找到新的合约代码;
49.步骤133:加载并执行新的合约代码。
50.既有代理合约模式下,所有消息通过一个代理合约来间接调用最新部署的逻辑合约。如果想要升级的话,只需要部署一个新的合约,然后在代理合约中更新引用新的合约地址就可以了。而本发明的实施例中,取代代理合约的仅是一个特殊交易,特别是在以太坊区块链中,特殊交易的用途就是注册合约,而本发明实施例中,通过仍然使用原合约地址的方式进行所谓“合约注册”,实质上达到了利用原合约地址升级合约代码的目的。
51.实施例二
52.图4为本说明书的一个实施例提供的一种区块链合约原地址升级装置400的结构示意图。请参考图4,在一种实施方式中区块链合约原地址升级装置包括:
53.区块链账户管理模块401,用于管理区块链合约账户,所述区块链合约账户包括合约代码哈希值字段code_hash。
54.合约升级交易创建模块402,用于创建合约升级的交易,所述交易包括合约地址字段address和合约代码字段content。
55.可选地,所述合约升级交易创建模块创建的交易地址字段address用于保存待升级的原合约地址,交易合约代码字段content用于保存修改后的合约代码。
56.合约升级交易执行模块403,用于执行合约升级交易更新区块链合约账户和合约代码。
57.可选地,所述合约升级交易执行模块包括:
58.修改所述区块链合约账户的合约代码哈希值字段code_hash为新的合约代码哈希值;
59.根据所述新的合约代码哈希值字段code_hash,将新的合约代码存入相应区块链节点;
60.更新区块链合约账户的默克尔树根哈希值state_root。
61.可选地,区块链合约原地址升级装置还包括合约调用模块404用于根据原地址调用升级后的合约,包括:
62.从所述区块链合约账户的默克尔树根哈希值state_root开始,获取到该合约账户各个字段的值;
63.根据所述合约账户的合约代码哈希值字段code_hash,找到新的合约代码;
64.加载并执行新的合约代码。
65.应理解,本说明书实施例的区块链合约原地址升级装置还可执行图1至图3中区块链合约原地址升级装置(或设备)执行的方法,并实现区块链合约原地址升级装置(或设备)在图1至图3所示实施例的功能,在此不再赘述。
66.实施例三
67.图5是本说明书的一个实施例电子设备的结构示意图。请参考图5,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(random

access memory,ram),也可能还包括非易失性存储器(non

volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
68.处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是isa(industry standard architecture,工业标准体系结构)总线、pci(peripheral component interconnect,外设部件互连标准)总线或eisa(extended industry standard architecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
69.存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
70.处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成共享资源访问控制装置。处理器,执行存储器所存放的程序,并具体用于执行以下操作:
71.区块链合约账户包括合约代码哈希值字段code_hash;当合约代码发生变化时,包括:
72.创建合约升级交易,所述合约升级交易包括合约地址字段address和合约代码字段content;
73.执行所述合约升级交易;
74.当有普通交易发送至所述区块链时,根据原合约地址调用升级后的合约。
75.上述如本说明书图1至图3所示实施例揭示的一种区块链合约原地址升级方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理
能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(central processing unit,cpu)、网络处理器(network processor,np)等;还可以是数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本说明书实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本说明书实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
76.当然,除了软件实现方式之外,本说明书实施例的电子设备并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
77.实施例四
78.本说明书实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的便携式电子设备执行时,能够使该便携式电子设备执行图1至图3所示实施例的方法,并具体用于执行以下方法:
79.区块链合约账户包括合约代码哈希值字段code_hash;当合约代码发生变化时,包括:
80.创建合约升级交易,所述合约升级交易包括合约地址字段address和合约代码字段content;
81.执行所述合约升级交易;
82.当有普通交易发送至所述区块链时,根据原合约地址调用升级后的合约。
83.总之,以上所述仅为本说明书的较佳实施例而已,并非用于限定本说明书的保护范围。凡在本说明书的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本说明书的保护范围之内。
84.上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
85.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd

rom)、
数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
86.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
87.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献