CN115511622A - 一种智能合约的升级方法、装置、设备及存储介质 - Google Patents
一种智能合约的升级方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN115511622A CN115511622A CN202110692949.2A CN202110692949A CN115511622A CN 115511622 A CN115511622 A CN 115511622A CN 202110692949 A CN202110692949 A CN 202110692949A CN 115511622 A CN115511622 A CN 115511622A
- Authority
- CN
- China
- Prior art keywords
- contract
- service logic
- data
- forwarding
- old
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION 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/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Development Economics (AREA)
- General Business, Economics & Management (AREA)
- Technology Law (AREA)
- Strategic Management (AREA)
- Computer Security & Cryptography (AREA)
- Marketing (AREA)
- Economics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请公开了一种智能合约的升级方法,该智能合约包括业务逻辑合约和代理合约,代理合约进一步分为互相解耦的转发合约和数据合约;该转发合约用于转发用户对业务逻辑合约的调用请求,数据合约用于存储业务逻辑合约被调用时生成的业务数据;解除旧业务逻辑合约与转发合约的旧调用关系,建立新业务逻辑合约与转发合约的新调用关系,并将新业务逻辑合约的数据存储地址配置为数据合约的地址,以实现将旧业务逻辑合约升级为新业务逻辑合约;在该升级的过程中,转发合约的地址对用户保持不变,以便完成旧业务逻辑合约升级为新业务逻辑合约后,以转发合约为接口向用户提供新业务逻辑合约的调用。如此,无需对用户侧进行改动,减少改动量。
Description
技术领域
本申请涉及区块链技术领域,特别是涉及一种智能合约的升级方法、装置、设备及计算机可读存储介质。
背景技术
智能合约(smart contract)是区块链(blockchain)技术中的一种典型应用,智能合约可以部署于区块链上,其实质上是交易双方合约的代码化实例,基于可复制的、共享的分布式账本上,并按照交易合约的规定执行交易。
在一些情况下,需要对智能合约中负责业务逻辑的部分进行升级。例如,智能合约存在漏洞时,将会被黑客等不法分子入侵,进而会导致财产损失。然而在部署升级后得到新智能合约时,新智能合约的地址与旧智能合约的地址相比会发生变化,进而需要与全部的用户协调,使用户通过新智能合约的地址调用新智能合约。
业界为了减少对用户侧的改动,将智能合约分为代理合约和业务逻辑合约。其中,代理合约负责调用请求的转发以及数据存储,业务逻辑合约负责实现业务逻辑,即实现业务逻辑合约与代理合约的解耦。在一些示例中,用户可以通过代理合约调用业务逻辑合约,业务逻辑合约被调用时生成的业务数据存储到代理合约。如此升级智能合约过程中,仅需要对业务逻辑合约进行升级,无需对代理合约中的负责转发调用请求的相关逻辑进行改动,进而无需对代理合约进行升级,无需对用户侧进行改动。
但是,业务逻辑合约升级后,可能会导致业务逻辑合约被调用时生成的业务数据的数据结构发生变化,进而导致也需要对代理合约进行适应的改动,以便存储数据结构变化后的业务数据。因此,采用将智能合约分为代理合约和业务逻辑合约的方式,在智能合约升级过程中,还是会存在波及到对用户侧进行改动的情况,改动量较大。
发明内容
为了解决上述技术问题,本申请提供了一种智能合约的升级方法、装置、设备及存储介质。该方法在升级智能合约过程中,无需对用户侧进行改动,进而减少了改动量。
本申请实施例公开了如下技术方案:
第一方面,本申请提供了一种智能合约的升级方法,所述智能合约包括业务逻辑合约和代理合约;所述代理合约包括互相解耦的转发合约和数据合约;所述转发合约用于转发用户对所述业务逻辑合约的调用请求,所述数据合约用于存储所述业务逻辑合约被调用时生成的业务数据;所述方法包括:
接收对所述智能合约的升级请求,所述升级请求携带有旧业务逻辑合约升级后得到的新业务逻辑合约;
根据所述升级请求,解除所述旧业务逻辑合约与所述转发合约的旧调用关系,建立所述新业务逻辑合约与所述转发合约的新调用关系,并将所述新业务逻辑合约的数据存储地址配置为所述数据合约的地址,以实现将所述旧业务逻辑合约升级为所述新业务逻辑合约;
其中,在将所述旧业务逻辑合约升级为所述新业务逻辑合约的过程中,所述转发合约的地址对所述用户保持不变,以便完成所述旧业务逻辑合约升级为所述新业务逻辑合约后,以所述转发合约为接口向所述用户提供所述新业务逻辑合约的调用。
在一些可能的实现方式中,所述数据合约按照键值对的方式存储所述业务逻辑合约被调用时生成的业务数据。
在一些可能的实现方式中,所述业务请求包括数据存储请求,所述键值对包括主键和字段;所述方法还包括:
通过所述接口接收数据存储请求,所述数据存储请求携带有主键和字段;
在所述数据合约中新建所述主键与所述字段的关联关系;
根据所述关联关系,将所述业务逻辑合约被调用时生成的业务数据存储到所述主键对应的字段中。
在一些可能的实现方式中,所述业务请求包括数据获取请求,所述方法还包括:
通过所述接口接收数据获取请求,所述数据获取请求中携带有目标主键;
在所述数据合约中查找所述目标主键对应的目标关联关系;
根据所述目标关联关系,返回所述目标主键所对应的目标字段中存储的业务数据。
在一些可能的实现方式中,所述方法还包括:
确定所述新业务逻辑合约满足预设条件;
其中,所述预设条件为所述新业务逻辑合约通过测试。
在一些可能的实现方式中,所述数据合约还用于存储暂存类数据,所述暂存类数据为所述智能合约升级后可丢失的数据。
第二方面,本申请提供了一种智能合约的升级装置,所述智能合约包括业务逻辑合约和代理合约;所述代理合约包括互相解耦的转发合约和数据合约;所述转发合约用于转发用户对所述业务逻辑合约的调用请求,所述数据合约用于存储所述业务逻辑合约被调用时生成的业务数据;包括:
接收单元,用于接收对所述智能合约的升级请求,所述升级请求携带有旧业务逻辑合约升级后得到的新业务逻辑合约;
升级单元,用于根据所述升级请求,解除所述旧业务逻辑合约与所述转发合约的旧调用关系,建立所述新业务逻辑合约与所述转发合约的新调用关系,并将所述新业务逻辑合约的数据存储地址配置为所述数据合约的地址,以实现将所述旧业务逻辑合约升级为所述新业务逻辑合约;
其中,其中,在将所述旧业务逻辑合约升级为所述新业务逻辑合约的过程中,所述转发合约的地址对所述用户保持不变,以便完成所述旧业务逻辑合约升级为所述新业务逻辑合约后,以所述转发合约为接口向所述用户提供所述新业务逻辑合约的调用。
在一些可能的实现方式中,所述数据合约按照键值对的方式存储所述业务逻辑合约被调用时生成的业务数据。
在一些可能的实现方式中,所述业务请求包括数据存储请求,所述键值对包括主键和字段;所述装置还包括存储单元:
所述接收单元,还用于通过所述接口接收数据存储请求,所述数据存储请求携带有主键和字段;
所述存储单元,用于在所述数据合约中新建所述主键与所述字段的关联关系;根据所述关联关系,将所述业务逻辑合约被调用时生成的业务数据存储到所述主键对应的字段中。
在一些可能的实现方式中,所述业务请求包括数据获取请求,所述装置还包括读取单元;
所述接收单元,还用于通过所述接口接收数据获取请求,所述数据获取请求中携带有目标主键;
所述读取单元,用于在所述数据合约中查找所述目标主键对应的目标关联关系;根据所述目标关联关系,返回所述目标主键所对应的目标字段中存储的业务数据。
在一些可能的实现方式中,所述装置还包括测试单元;
所述测试单元,用于确定所述新业务逻辑合约满足预设条件;
其中,所述预设条件为所述新业务逻辑合约通过测试。
在一些可能的实现方式中,所述数据合约还用于存储暂存类数据,所述暂存类数据为所述智能合约升级后可丢失的数据。
第三方面,本申请提供了一种计算设备,包括:
存储器,用于存储计算机程序,并将所述计算机程序传输给所述处理器;
处理器,用于根据所述计算机程序中的指令执行上述第一方面中任一项所述的方法。
第四方面,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机软件指令,当所述计算机可读存储介质在计算机上运行时,使得计算机可以执行上述第一方面中任一项所述的方法。
由上述技术方案可以看出,本申请具有以下优点:
本申请提供的一种智能合约的升级方法。该方法将智能合约中的代理合约再次解耦,分为互相解耦的转发合约和数据合约。当接收到对智能合约的升级请求后,根据升级请求中携带旧业务逻辑合约升级后得到的新业务逻辑合约,解除旧业务逻辑合约与转发合约的旧调用关系,建立新业务逻辑合约与转发合约的新调用关系,并将新业务逻辑合约的数据存储地址配置为所述数据合约的地址。在将所述旧业务逻辑合约升级为所述新业务逻辑合约的过程中,所述转发合约的地址对所述用户保持不变,以便完成所述旧业务逻辑合约升级为所述新业务逻辑合约后,以所述转发合约为接口向所述用户提供所述新业务逻辑合约的调用。如此,将旧业务逻辑合约升级为新业务逻辑合约后,即使业务数据的数据结构发生变化时,由于数据合约与转发合约解耦,进而无需对转发合约进行改动,即转发合约的地址保持不变,进而无需对用户侧进行改动,极大地降低了改动量。
进一步的,该数据合约可以按照键值对的方式存储业务逻辑合约被调用时生成的业务数据,达到采用通用的数据结构来存储业务数据的效果。如此,即使业务数据的数据结构发生变化,也无需对数据合约进行改动。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种区块链系统的示意图;
图2为本申请实施例提供的一种智能合约的升级方法的流程图;
图3为本申请实施例提供的一种智能合约的升级装置的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了便于本领域技术人员理解,下面先对本申请涉及到的技术术语进行介绍。
智能合约是区块链技术中的一种典型用于,智能合约部署在区块链上,其实质是交易双方合约的代码化实例,基于可复制的、共享的分布式账本上,并按照交易合约的规定执行交易。
但是在一些情况中,需要对智能合约中负责业务逻辑的部分进行升级,从而修补智能合约存在的漏洞,避免黑客等不法分子的入侵。
在升级智能合约过程中,会涉及到智能合约的地址变化,进而需要对用户侧进行改动,以使用户使用新的地址调用智能合约。业界为了减少对用户侧的改动,将智能合约分为代理合约和业务逻辑合约。但是在该种方案中,当业务逻辑合约被调用时生成的业务数据的数据结构发生变化后,仍然需要对代理合约进行改动,进而还是会波及到对用户侧进行改动的情况,改动量较大。
有鉴于此,本申请实施例提供了一种智能合约的升级方法。该方法可以由区块链系统执行,该方法中智能合约包括业务逻辑合约和代理合约,代理合约包括互相解耦的转发合约和数据合约:转发合约用于转发用户对业务逻辑合约的调用请求,数据合约用于存储业务逻辑合约被调用时生成的业务数据;具体地,该方法包括:区块链系统接收智能合约的升级请求,升级请求中携带有旧业务逻辑合约升级后得到的新业务逻辑合约,区块链系统根据升级请求,解除旧业务逻辑合约与转发合约的旧调用关系,建立新业务逻辑合约与转发合约的调用关系,并将新业务逻辑合约的数据存储地址配置为所述数据合约的地址,以实现将所述旧业务逻辑合约升级为新业务逻辑合约;其中,在将旧业务逻辑合约升级为新业务逻辑合约的过程中,转发合约的地址对用户保持不变,以便完成旧业务逻辑合约升级为新业务逻辑合约后,以转发合约为接口向用户提供新业务逻辑合约的调用。如此,该方法能够在升级智能合约过程中,无需对用户侧进行改动,进而较少了改动量。
为了使得本申请的技术方案更加清楚,易于理解,下面先对本申请实施例提供的区块链系统进行介绍。
如图1所示区块链系统的示意图,该区块链系统100包括转发合约110、业务逻辑合约120和数据合约130。
其中,转发合约110和数据合约130解耦,转发合约110负责转发用户对业务逻辑合约120的调用请求,数据合约130用于存储业务逻辑合约120被调用时生成的业务数据。
当需要对区块链系统100中的业务逻辑合约进行升级时,例如将旧业务逻辑合约121升级为新业务逻辑合约122,区块链系统会解除旧业务逻辑合约121与转发合约110的旧调用关系,建立新业务逻辑合约122与转发合约110的新调用关系,并将新业务逻辑合约122的数据存储地址配置为数据合约130的地址。
由于转发合约110和数据合约130解耦,当旧业务逻辑合约121升级为新业务逻辑合约122,即使新业务逻辑合约122被调用时生成的业务数据的数据结构改变后,对数据合约130进行改动,也不会波及到转发合约110,即无需对用户侧进行改动,进而减少了智能合约升级的改动量。
为了使得本申请的技术方案更加清楚,易于理解,下面以区块链系统的角度对本申请实施例提供的智能合约的升级方法进行介绍。
如图2所示的智能合约的升级方法的流程图,该方法包括:
S201:区块链系统接收智能合约的升级请求,所述升级请求携带有旧业务逻辑合约升级后得到的新业务逻辑合约。
其中,智能合约包括业务逻辑合约和代理合约,该方法中将代理合约再次解耦,得到转发合约和数据合约。转发合约用于转发用户对业务逻辑合约调用请求,数据合约用于存储业务逻辑合约被调用时生成的业务数据。
旧业务逻辑合约可以是存在漏洞的业务逻辑合约,新业务逻辑合约可以是对该旧业务逻辑合约的漏洞进行修复后得到的业务逻辑合约。将该新业务逻辑合约携带在升级请求中,以便区块链系统根据该升级请求对智能合约中负责业务逻辑的部分进行升级。
S202:区块链系统根据升级请求,解除旧业务逻辑合约与转发合约的旧调用关系,建立新业务逻辑合约与转发合约的新调用关系,将新业务逻辑合约的数据存储地址配置为数据合约的地址,以实现将旧业务逻辑合约升级为新业务逻辑合约。
其中,解除旧业务逻辑合约与转发合约的旧调用关系就是不再使用旧业逻辑合约,转发合约再次接收到用户的调用请求时,不再将该调用请求转发给旧业务逻辑合约。建立新业务逻辑合约与转发合约的新调用关系就是,当转发合约再次接收到用户的调用请求时,将该调用请求转发给新业务逻辑合约,以实现用户对新业务逻辑合约的调用。
然后区块链系统将新业务逻辑合约的数据存储地址配置为数据合约的地址,如此,当新业务逻辑合约被调用时生成的业务数据可以存储到原数据合约中。
其中,在将旧业务逻辑合约升级为新业务逻辑合约的过程中,转发合约的地址对用户保持不变,如此无需对用户侧进行改动。当完成旧业务逻辑合约升级为新业务逻辑合约后,区块链系统以转发合约为接口,向用户提供新业务逻辑合约的调用。如此,用户通过转发合约即可对新业务逻辑合约进行调用。
在一些实现方式中,数据合约可以按照键值对的方式存储业务逻辑合约被调用时生成的业务数据。数据合约采用键值对的方式存储业务数据时,能够达到通用数据结构的效果,进而业务数据的数据结构发生变化,也无需对数据合约进行改动,仅需要选择适应的键值对即可。
例如旧数据结构为“姓名-性别”,新数据结构为“姓名-性别-年龄”,可见在数据结构中新增加了“年龄”字段。当数据合约采用键值对的方式存储业务数据时,可以预设主键和字段的关联关系,例如“1-姓名”、“2-性别”和“3-年龄”等。如此,当业务数据的数据结构发生变化后,仅需要选择对应的主键即可,无需对数据合约进行升级改动,进而降低了改动量。
在一些实现方式中,业务请求包括数据存储请求,键值对包括主键和字段,该方法进一步包括:区块链系统通过上述接口(即转发合约)接收数据存储请求,该数据存储请求中携带有主键和字段,在数据合约中新建主键与字段的关联关系;根据关联关系,将业务逻辑合约被调用时生成的业务数据存储到主键对应的字段中。
可见,即使业务数据的数据结构发生变化后,由于采用了键值对的方式存储业务数据,如此达到了通用数据结构的效果,进而无需对数据合约进行改动,进而进一步降低改动量。
在一些实现方式中,业务请求包括数据获取请求,该方法还包括:区块链系统通过所述接口接收数据获取请求,所述数据获取请求中携带有目标主键;在所述数据合约中查找所述目标主键对应的目标关联关系;根据所述目标关联关系,返回所述目标主键所对应的目标字段中存储的业务数据。如此,该方法实现了对数据合约中存储的业务数据的存储。
在一些实现方式中,该方法还包括:区块链系统确定新业务逻辑合约满足预设条件,其中,预设条件为新业务逻辑合约通过测试。
例如,区块链系统在区块链中部署新业务逻辑合约之前,还需要对新业务逻辑合约进行测试,以确定该新业务逻辑合约解决的旧业务逻辑合约存在的漏洞。
在一些实现方式中,该数据合约还用于存储暂存类数据,暂存类数据为智能合约升级后可以丢失的数据。在智能合约升级过程中,会存在丢失部分数据的情况,该部分数据可以存储在数据合约中。
本申请实施例提供了一种业务逻辑合约的实例,如下:
contract VIP180{
/**数据合约-可丢失数据*/
string public name;//代币全称
string public symbol;//代币符号
uint64 public totalSupply;//代币总发行量
event Transfer(address indexed_from,address indexed_to,uint256indexed_tokenId);
/**数据合约-通用数据结构*/
KVStorage public database;
function mintToken(uint256_tokenId,address_owner)external onlyOwner
whenNotPaused{
//solium-disable-next-line
require(mintable,"mintToken:mint token disabled");
require(ownerOf(_tokenId)==address(0),"mintToken:token alreadyexist");
_clearAndTransfer(address(0),_owner,_tokenId,"");
}
///@notice返回owner的代币数量
function balanceOf(address owner)
public
view
returns(uint256)
{
return database.getUInt256(keccak256(abi.encodePacked("balanceOf",owner)));
}
///@notice根据tokenId返回代币持有者address
function ownerOf(uint256 tokenId)
public
view
returns(address)
{
return database.getAddress(keccak256(abi.encodePacked("ownerOf",tokenId)));
}
//...
///@notice转移资产
function transfer(address to,uint256 tokenId)public whenNotPaused{
require(to!=address(0),"invalid to");
require(msg.sender!=to,"sender and to is the same");
require(_isApprovedOrOwner(msg.sender,tokenId),"permission denied");
_clearAndTransfer(msg.sender,to,tokenId,"");
}
///@notice从_from账户转移指定的Token至_to账户,并清空过期的授权信息
function_clearAndTransfer(address_from,address_to,uint256_tokenId,bytes
memory_data)
internal
{
require(_from!=address(0)||_to!=address(0),"must not be bothempty");
require(_checkOnVIP181Received(_from,_to,_tokenId,_data),"transfer tonon
VIP181Receiver implementer");
//181不需要使用SafeMath
//1.增发
if(_from==address(0)&&_to!=address(0)){
totalSupply++;
database.increaseBy(keccak256(abi.encodePacked("balanceOf",_to)),1);
}
//2.转移
else if(_from!=address(0)&&_to!=address(0)){
database.decreaseBy(keccak256(abi.encodePacked("balanceOf",_from)),1);
database.increaseBy(keccak256(abi.encodePacked("balanceOf",_to)),1);
}
//3.销毁
else if(_from!=address(0)&&_to==address(0)){
totalSupply--;
database.decreaseBy(keccak256(abi.encodePacked("balanceOf",_from)),1);
}
//清空approve授权信息
database.setAddress(keccak256(abi.encodePacked("approval",_tokenId)),
address(0));
database.setAddress(keccak256(abi.encodePacked("ownerOf",_tokenId)),_to);
emit Transfer(_from,_to,_tokenId);
}
}
基于上述内容描述,本申请实施例提供的智能合约的升级方法中,将智能合约中的代理合约再次解耦,分为互相解耦的转发合约和数据合约。当接收到对智能合约的升级请求后,根据升级请求中携带旧业务逻辑合约升级后得到的新业务逻辑合约,解除旧业务逻辑合约与转发合约的旧调用关系,建立新业务逻辑合约与转发合约的新调用关系,并将新业务逻辑合约的数据存储地址配置为所述数据合约的地址。在将所述旧业务逻辑合约升级为所述新业务逻辑合约的过程中,所述转发合约的地址对所述用户保持不变,以便完成所述旧业务逻辑合约升级为所述新业务逻辑合约后,以所述转发合约为接口向所述用户提供所述新业务逻辑合约的调用。如此,将旧业务逻辑合约升级为新业务逻辑合约后,即使业务数据的数据结构发生变化时,由于数据合约与转发合约解耦,进而无需对转发合约进行改动,即转发合约的地址保持不变,进而无需对用户侧进行改动,极大地降低了改动量。
进一步的,该数据合约可以按照键值对的方式存储业务逻辑合约被调用时生成的业务数据,达到采用通用的数据结构来存储业务数据的效果。如此,即使业务数据的数据结构发生变化,也无需对数据合约进行改动。
本申请实施例还提供了一种智能合约的升级装置,所述智能合约包括业务逻辑合约和代理合约;所述代理合约包括互相解耦的转发合约和数据合约;所述转发合约用于转发用户对所述业务逻辑合约的调用请求,所述数据合约用于存储所述业务逻辑合约被调用时生成的业务数据。如图3所示的智能合约的升级装置的示意图,该装置包括:
接收单元301,用于接收对所述智能合约的升级请求,所述升级请求携带有旧业务逻辑合约升级后得到的新业务逻辑合约;
升级单元302,用于根据所述升级请求,解除所述旧业务逻辑合约与所述转发合约的旧调用关系,建立所述新业务逻辑合约与所述转发合约的新调用关系,并将所述新业务逻辑合约的数据存储地址配置为所述数据合约的地址,以实现将所述旧业务逻辑合约升级为所述新业务逻辑合约;
其中,其中,在将所述旧业务逻辑合约升级为所述新业务逻辑合约的过程中,所述转发合约的地址对所述用户保持不变,以便完成所述旧业务逻辑合约升级为所述新业务逻辑合约后,以所述转发合约为接口向所述用户提供所述新业务逻辑合约的调用。
在一些可能的实现方式中,所述数据合约按照键值对的方式存储所述业务逻辑合约被调用时生成的业务数据。
在一些可能的实现方式中,所述业务请求包括数据存储请求,所述键值对包括主键和字段;所述装置还包括存储单元303:
所述接收单元301,还用于通过所述接口接收数据存储请求,所述数据存储请求携带有主键和字段;
所述存储单元303,用于在所述数据合约中新建所述主键与所述字段的关联关系;根据所述关联关系,将所述业务逻辑合约被调用时生成的业务数据存储到所述主键对应的字段中。
在一些可能的实现方式中,所述业务请求包括数据获取请求,所述装置还包括读取单元304;
所述接收单元301,还用于通过所述接口接收数据获取请求,所述数据获取请求中携带有目标主键;
所述读取单元304,用于在所述数据合约中查找所述目标主键对应的目标关联关系;根据所述目标关联关系,返回所述目标主键所对应的目标字段中存储的业务数据。
在一些可能的实现方式中,所述装置还包括测试单元305;
所述测试单元305,用于确定所述新业务逻辑合约满足预设条件;
其中,所述预设条件为所述新业务逻辑合约通过测试。
在一些可能的实现方式中,所述数据合约还用于存储暂存类数据,所述暂存类数据为所述智能合约升级后可丢失的数据。
本申请还提供了一种计算设备,包括:
存储器,用于存储计算机程序,并将所述计算机程序传输给所述处理器;
处理器,用于根据所述计算机程序中的指令执行以上介绍的智能合约的升级方法。
本申请还提供了一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机软件指令,当所述计算机可读存储介质在计算机上运行时,使得计算机可以执行上述介绍的智能合约升级的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元及模块可以是或者也可以不是物理上分开的。另外,还可以根据实际的需要选择其中的部分或者全部单元和模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
以上,仅是本申请的较佳实施例而已,并非对本申请作任何形式上的限制。虽然本申请已以较佳实施例揭露如上,然而并非用以限定本申请。任何熟悉本领域的技术人员,在不脱离本申请技术方案范围情况下,都可利用上述揭示的方法和技术内容对本申请技术方案做出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本申请技术方案的内容,依据本申请的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本申请技术方案保护的范围内。
Claims (10)
1.一种智能合约的升级方法,其特征在于,所述智能合约包括业务逻辑合约和代理合约;所述代理合约包括互相解耦的转发合约和数据合约;所述转发合约用于转发用户对所述业务逻辑合约的调用请求,所述数据合约用于存储所述业务逻辑合约被调用时生成的业务数据;所述方法包括:
接收对所述智能合约的升级请求,所述升级请求携带有旧业务逻辑合约升级后得到的新业务逻辑合约;
根据所述升级请求,解除所述旧业务逻辑合约与所述转发合约的旧调用关系,建立所述新业务逻辑合约与所述转发合约的新调用关系,并将所述新业务逻辑合约的数据存储地址配置为所述数据合约的地址,以实现将所述旧业务逻辑合约升级为所述新业务逻辑合约;
其中,在将所述旧业务逻辑合约升级为所述新业务逻辑合约的过程中,所述转发合约的地址对所述用户保持不变,以便完成所述旧业务逻辑合约升级为所述新业务逻辑合约后,以所述转发合约为接口向所述用户提供所述新业务逻辑合约的调用。
2.根据权利要求1所述的方法,其特征在于,所述数据合约按照键值对的方式存储所述业务逻辑合约被调用时生成的业务数据。
3.根据权利要求2所述的方法,其特征在于,所述业务请求包括数据存储请求,所述键值对包括主键和字段;所述方法还包括:
通过所述接口接收数据存储请求,所述数据存储请求携带有主键和字段;
在所述数据合约中新建所述主键与所述字段的关联关系;
根据所述关联关系,将所述业务逻辑合约被调用时生成的业务数据存储到所述主键对应的字段中。
4.根据权利要求3所述的方法,其特征在于,所述业务请求包括数据获取请求,所述方法还包括:
通过所述接口接收数据获取请求,所述数据获取请求中携带有目标主键;
在所述数据合约中查找所述目标主键对应的目标关联关系;
根据所述目标关联关系,返回所述目标主键所对应的目标字段中存储的业务数据。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
确定所述新业务逻辑合约满足预设条件;
其中,所述预设条件为所述新业务逻辑合约通过测试。
6.根据权利要求1至5任一项所述的方法,其特征在于,所述数据合约还用于存储暂存类数据,所述暂存类数据为所述智能合约升级后可丢失的数据。
7.一种智能合约的升级装置,其特征在于,所述智能合约包括业务逻辑合约和代理合约;所述代理合约包括互相解耦的转发合约和数据合约;所述转发合约用于转发用户对所述业务逻辑合约的调用请求,所述数据合约用于存储所述业务逻辑合约被调用时生成的业务数据;包括:
接收单元,用于接收对所述智能合约的升级请求,所述升级请求携带有旧业务逻辑合约升级后得到的新业务逻辑合约;
升级单元,用于根据所述升级请求,解除所述旧业务逻辑合约与所述转发合约的旧调用关系,建立所述新业务逻辑合约与所述转发合约的新调用关系,并将所述新业务逻辑合约的数据存储地址配置为所述数据合约的地址,以实现将所述旧业务逻辑合约升级为所述新业务逻辑合约;
其中,其中,在将所述旧业务逻辑合约升级为所述新业务逻辑合约的过程中,所述转发合约的地址对所述用户保持不变,以便完成所述旧业务逻辑合约升级为所述新业务逻辑合约后,以所述转发合约为接口向所述用户提供所述新业务逻辑合约的调用。
8.根据权利要求7所述的装置,其特征在于,所述数据合约按照键值对的方式存储所述业务逻辑合约被调用时生成的业务数据。
9.一种计算设备,其特征在于,包括:
存储器,用于存储计算机程序,并将所述计算机程序传输给所述处理器;
处理器,用于根据所述计算机程序中的指令执行权利要求1至6中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储计算机软件指令,当所述计算机可读存储介质在计算机上运行时,使得计算机可以执行上述权利要求1至6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110692949.2A CN115511622A (zh) | 2021-06-22 | 2021-06-22 | 一种智能合约的升级方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110692949.2A CN115511622A (zh) | 2021-06-22 | 2021-06-22 | 一种智能合约的升级方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115511622A true CN115511622A (zh) | 2022-12-23 |
Family
ID=84499635
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110692949.2A Pending CN115511622A (zh) | 2021-06-22 | 2021-06-22 | 一种智能合约的升级方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115511622A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117217761A (zh) * | 2023-09-27 | 2023-12-12 | 上海汇付支付有限公司 | 一种支持多商户合作营销的数字权益saas系统 |
-
2021
- 2021-06-22 CN CN202110692949.2A patent/CN115511622A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117217761A (zh) * | 2023-09-27 | 2023-12-12 | 上海汇付支付有限公司 | 一种支持多商户合作营销的数字权益saas系统 |
CN117217761B (zh) * | 2023-09-27 | 2024-08-13 | 上海汇付支付有限公司 | 一种支持多商户合作营销的数字权益saas系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110096857B (zh) | 区块链系统的权限管理方法、装置、设备和介质 | |
CN111782668B (zh) | 数据结构的读取及更新方法、装置、电子设备 | |
KR102024694B1 (ko) | 블록체인 기반의 다수의 서비스 노드를 사용하는 탈중앙화 서비스 플랫폼 | |
CN109146679A (zh) | 基于区块链的智能合约调用方法及装置、电子设备 | |
US20070254631A1 (en) | Secure Multi-Entity Access to Resources on Mobile Telephones | |
CN106503053A (zh) | Utxo查询方法及装置 | |
CN105389488B (zh) | 身份认证方法及装置 | |
CN102087615A (zh) | 消息队列中逻辑关联的消息的自动合并 | |
CN109784870A (zh) | 合同管理方法、装置、计算机设备及计算机可读存储介质 | |
CN108717466A (zh) | 征信数据存储方法、装置、计算机设备及存储介质 | |
CN101378396A (zh) | 网络钓鱼通知服务 | |
EP3974960B1 (en) | Method and system for automated testing of web service apis | |
CN110138767B (zh) | 事务请求的处理方法、装置、设备和存储介质 | |
CN110022315A (zh) | 一种块链式账本中的权重管理方法、装置及设备 | |
WO2022206439A1 (zh) | 提供跨链消息的方法和装置 | |
CN110247857A (zh) | 限流方法及装置 | |
CN109271564A (zh) | 保单查询方法及设备 | |
CN115511622A (zh) | 一种智能合约的升级方法、装置、设备及存储介质 | |
EP3407241B1 (en) | User authentication and authorization system for a mobile application | |
CN108228248A (zh) | 一种依赖关系的确定方法和装置 | |
CN117742843A (zh) | 一种交割服务业务表单生成方法和系统 | |
CN113742235A (zh) | 一种校验代码的方法和装置 | |
CN111930363B (zh) | 区块接口代码生成方法、及装置 | |
CN111324799B (zh) | 搜索请求的处理方法及装置 | |
CN110336872B (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 |