基于区块链的角色权限管理智能合约升级方法及系统与流程

文档序号:32134890发布日期:2022-11-09 12:39阅读:254来源:国知局
基于区块链的角色权限管理智能合约升级方法及系统与流程

1.本发明属于区块链的技术领域,特别是涉及基于区块链的角色权限管理智能合约升级方法及系统。


背景技术:

2.智能合约是以一套以计算机编程语言编写的可执行的承诺,包括合约参与方可以在上面执行这些承诺的协议,用计算机语言取代了合同语言记录条款运行于区块链中,程序自动执行的合约。由于区块链的去中心化、不可篡改、透明可追溯等特性,它实现了用户从信任第三方机构到信任合同本身,从信任参与方到信任代码的转变和自动执行。区块链智能合约的运作过程为智能合约编写-编译-部署到区块链-执行。
3.区块链借助智能合约来实现分布式数据源间数据的流通、共享、校验,由此必然会打破原有中心化数据管理的安全边界,增加了数据在共享过程中所面临的安全风险。数据的非授权共享不单会影响了链上用户自身的数据安全,更会对联盟链的机构造成严重的安全威。那么通过智能合约实现安全、可控的数据资源流通与共享,如果缺乏一个角色权限和操作可控的智能合约机制,那么数据很容易被链上非法的账户或者机构账户窃取和篡改。
4.此外,智能合约一旦部署后,将运行于区块链网络中的多个节点中,无法直接更改智能合约源码,无法灵活地实现类似中心化应用程序那样开发人员经常对程序进行更新,修复bug或引入新功能。


技术实现要素:

5.本发明为解决上述背景技术中存在的技术问题,提供了基于区块链的角色权限管理智能合约升级方法及系统。
6.本发明采用以下技术方案来实现:基于区块链的角色权限管理智能合约升级方法,至少包括以下步骤:创建角色管理逻辑智能合约:基于业务需求创建角色账户最小集,同时建立角色账户最小集内部元素相互之间的权限关系;将所述角色管理逻辑智能合约采用分层式设计,分为业务逻辑层合约和数据处理层合约;所述业务逻辑层合约为第三方智能合约的业务需求的处理接口,基于所述业务需求生成合约调用函数,对指定角色账户赋予对应的权限、以及账户地址;将合约调用函数以编译代码的形式编译到处理接口上,得到对应的链上合约地址;所述数据处理层合约基于合约调用函数定义数据结构,所述数据结构用于存储、查询合约调用函数;当业务需求发生变更时,处理接口基于变更后的供业务需求更新合约调用函数,基于更新合约调用函数以编译代码的形式再次编译到对应处理接口上,获取更新后的链上合约地址;第三方智能合约传入更新后的链上合约地址。
7.在进一步的实施例中,生成合约调用函数时还包括:创建权限检查函数;所述权限检查函数基于账户地址和所需的操作项目常量判断账户地址是否具有执行对应操作项目
的操作权限;如果具备权限,则允许合约调用函数继续执行,如果不具备权限,则禁止合约调用函数执行,并产生合约调用函数非法调用事件广播;其中所述账户地址为原始用户地址,表示为tx.origin。
8.在进一步的实施例中,所述角色账户最小集内至少包括:超级管理员账户、机构委员会账户、授权机构账户和普通账户;所述权限关系如下:超级管理员账户具有最高权限,被设置为基于业务需求指定主体机构和对应的授权机构,并定义为机构委员会账户和授权机构账户;对机构委员会账户和授权机构账户赋予操作权限的赋予、修改链上合约地址;机构委员会账户的权限为:对其名下的主体机构、与主体机构相对应的授权机构账户赋予操作权限、启动/禁用;授权机构账户的权限为:对其名下的授权机构赋予操作权限、启动/禁用。
9.在进一步的实施例中,所述合约调用函数由超级管理员账户生成,所述合约调用函数至少包括:对角色账户最小集内的角色赋予角色操作函数,对非角色账户最小集的角色赋予增加/删除角色函数,并配置对应的角色权限函数。
10.在进一步的实施例中,所述角色操作函数至少包括:关于机构委员会账户的操作函数、关于授权机构账户的操作函数;所述机构委员会账户的操作函数至少包括:判断是否为机构委员会账户函数、删除机构委员会账户函数、添加机构委员会账户函数、以及获取机构委员会账户数据数组长度函数和获取机构委员会账户地址索引函数。
11.在进一步的实施例中,所述授权机构账户的操作函数至少包括:判断是否为授权机构账户函数、添加授权机账户函数、删除授权机构账户函数以及获取授权机构账户数据长度函数、返回授权机构数据数组长度。
12.在进一步的实施例中,若业务所需的账户不属于当前的角色账户集,则超级管理员账户生成添加角色函数,使业务所需的账户以角色的形式添加到角色账户集;并输入相对应的账户地址、赋予角色权限常量;若当前的角色账户集中存在业务所需以外的账户,则超级管理员账户生成删除角色函数,使业务所需以外的账户、对应的账户地址和角色权限常量从当前的角色账户集中删除。
13.在进一步的实施例中,所述普通账户为区块链上的普通外部账户,由公钥私钥对组成。
14.基于区块链的角色权限管理智能合约升级系统,用于实现如上所述的智能合约升级方法,包括:第一模块,被设置为创建角色管理逻辑智能合约:基于业务需求创建角色账户最小集,同时建立角色账户最小集内部元素相互之间的权限关系;第二模块,被设置为将所述角色管理逻辑智能合约采用分层式设计,分为业务逻辑层合约和数据处理层合约;所述业务逻辑层合约为第三方智能合约的业务需求的处理接口,基于所述业务需求生成合约调用函数,对指定角色账户赋予对应的权限、以及账户地址;将合约调用函数以编译代码的形式编译到处理接口上,得到对应的链上合约地址;所述
数据处理层合约基于合约调用函数定义数据结构,所述数据结构用于存储、查询合约调用函数;第三模块,被设置为当业务需求发生变更时,处理接口基于变更后的供业务需求更新合约调用函数,基于更新合约调用函数以编译代码的形式再次编译到对应处理接口上,获取更新后的链上合约地址;第三方智能合约传入更新后的链上合约地址。
15.本发明的有益效果:本发明通过增设超级管理员账户、机构委员会账户、授权机构账户、以及普通账户的角色操作二元组,对每个角色赋予对应的职责和权限,并将每个角色的授权和管理操作以代码的方式编程到智能合约中提供接口给第三方智能合约外部调用,从而保证了区块链上数据存储和查询安全可控、可信共享。解决了区块链上的数据风险,保护了联盟链机构不受攻击。
16.将角色权限管理智能合约按照分层的思想,分为业务逻辑智能合约和数据逻辑智能合约,当遇到业务变更时只需要将调用地址更换为重新部署的业务逻辑智能合约链上地址,而不用更新数据逻辑智能合约,从而保证了数据操作的原子性,大大降低了智能合约在线更新迭代部署的成本和难度。解决了合约升级难的问题,并且具备很强的普适性和可升级性。
附图说明
17.图1为角色权限管理智能合约之间的各个依赖关系图。
18.图2为角色权限智能合约的部署和调用逻辑关系图。
19.图3为角色管理逻辑智能合约分层逻辑。
具体实施方式
20.著名的parity wallet事件,黑客盗取了150000个eth,在这次的攻击中,parity multisig钱包中一个智能合约的漏洞被黑客利用,盗取了钱包中的资金。如果在黑客攻击过程中,能够快速地部署修复漏洞的智能合约,那么将大大地减少损失。所以设计一个灵活的智能合约升级策略,将提高区块链的安全性以及扩展性。
21.截至目前业内已经有了对权限进行操作和维护的管理智能合约实现,比如dsauth和openzepplin的role智能合约库,但它们的权限管理逻辑可扩展性较差且不支持合约分层更新,并不能完美地解决灵活角色权限控制的同时又兼顾最低成本可升级智能合约策略。
22.实施例1本实施例公开一种基于角色和权限管理的智能合约代码库,并利用逻辑和数据分层的设计模式,帮助解决区块链数据共享和世界状态变更时权限可控,数据安全查询和写入区块链账本管理,对于业务变更可以迅速地最小成本实现区块链上智能合约快速更新迭代版本。
23.基于区块链的角色权限管理智能合约升级方法,如图1和图2所示至少包括以下步骤:步骤一、创建角色管理逻辑智能合约;步骤二、如图3所示,将所述角色管理逻辑智能合约采用分层式设计,分为业务逻
辑层合约和数据处理层合约;所述业务逻辑层合约为第三方智能合约的业务需求的处理接口,基于所述业务需求生成合约调用函数,对指定角色账户赋予对应的权限、以及账户地址;将合约调用函数以编译代码的形式编译到处理接口上,得到对应的链上合约地址;所述数据处理层合约基于合约调用函数定义数据结构,所述数据结构用于存储、查询合约调用函数;步骤三、当业务需求发生变更时,处理接口基于变更后的供业务需求更新合约调用函数,基于更新合约调用函数以编译代码的形式再次编译到对应处理接口上,获取更新后的链上合约地址;第三方智能合约传入更新后的链上合约地址。
24.其中,步骤一具体包括以下流程:创建角色账户最小集,包括以下四种:超级管理员账户、机构委员会账户、授权机构账户、以及普通账户。以上角色账户最小集为本实施例所需的最小集,可根据实际需求扩充角色,例如可根据需求增加只读用户角色,用于实现合约相关权限的分配和管控。以使用移动积分、联通积分、电信积分、超市积分兑换优惠券为例,通过传统的数据库技术实现,将类似移动积分、联通积分、电信积分、超市积分汇聚到平台上,与kfc、麦当劳等商家打通。移动、联通、电信、超市等主办机构与kfc、麦当劳等授权机构之间的内部合约数据是相关联的,并且分布在区块链网络中的不同节点中,数据安全不可控且当需要更改时灵活度低。
25.因此,使用本实施例中的方法,当前第三方智能合提出业务需求:使用电信运营商的积分可兑换餐饮类的使用券。基于上述业务需求创建角色管理逻辑智能合约,包括以下角色:超级管理员账户、机构委员会账户、授权机构账户、以及普通账户。其中超级管理员账户具有最高权限,并指定需要加入积分通兑的厂商(移动、联通、电信、超市等)为主办机构,定义为机构委员会账户。对应的,为了与该业务需求相匹配,超级管理员账户或被定义的机构委员会账户可同时还指定需要进行兑换积分的商户(如kfc、麦当劳)为授权机构账户。
26.进一步的,步骤二中的合约调用函数是基于每个角色账户生成的,即通过合约调用函数定义所述角色账户对应的数量、类型及权限,以满足业务需求。
27.基于上述描述,合约调用函数对超级管理员账户、机构委员会账户、授权机构账户、以及普通账户的权限、权限关系的定义如下:超级管理员账户具有最高权限,被设置为基于业务需求指定主体机构和对应的授权机构,并定义为机构委员会账户和授权机构账户;对机构委员会账户和授权机构账户赋予操作权限的赋予、修改链上合约地址;机构委员会账户的权限为:对其名下的主体机构、与主体机构相对应的授权机构账户赋予操作权限、启动/禁用;在进一步的实施例中,机构委员会账户由超级管理员账户通过角色管理逻辑智能合约进行添加,并由定义机构委员会账户/超级管理员账户定义移动、联通、电信、超市等为机构委员会账户。
28.授权机构账户的权限为:对其名下的授权机构赋予操作权限、启动/禁用。授权机构账户由超级管理员账户通过业务逻辑层合约进行添加,并由机构委员会账户定义kfc、麦当劳为授权机构账户,并授予指定的权限,即授权后的机构委员会账户(kfc、麦当劳)可通过务逻辑层合约实现积分厂商与商户之间的兑换逻辑,在数据处理层合约中保存积分数据。
29.所述普通账户为区块链上的普通外部账户,由公钥私钥对组成,没有指定的权限。
用户实体对应区块链上的普通账户,一般只调用数据处理层合约的获取方法获取数据查询结果,比如用户查询自己的积分余额和兑换情况等。
30.综上所述,每个角色账户的权限体现均为二次元,即具备/不具备。
31.因此对合约调用函数由超级管理员账户生成,其中,所述合约调用函数至少包括:对角色账户最小集内的角色赋予角色操作函数,对非角色账户最小集的角色赋予增加/删除角色函数,并配置对应的角色权限函数。
32.对非角色账户最小集的角色赋予增加/删除角色函数,并配置对应的角色权限函数具体表现为:若业务所需的账户不属于当前的角色账户集,则超级管理员账户生成添加角色函数,使业务所需的账户以角色的形式添加到角色账户集;并输入相对应的账户地址、赋予角色权限常量;若当前的角色账户集中存在业务所需以外的账户,则超级管理员账户生成删除角色函数,使业务所需以外的账户、对应的账户地址和角色权限常量从当前的角色账户集中删除。
33.换言之,添加角色操作函数则是通过输入的账户地址与角色常量进行对比,判断是否需要添加角色,若需要则执行对应的函数指令。
34.删除角色操作函数则是通过输入的账户地址与角色常量进行对比,判断是否需要删除角色,若需要则执行对应的函数指令。
35.账户-角色配对函数则是通过输入的账户地址与角色常量进行对比,判断检查账户是否属于某个角色函数。
36.对角色账户最小集内的角色赋予角色操作函数具体表现为:基于角色管理逻辑智能合约作为全局角色权限判断,所述角色操作函数至少包括:关于机构委员会账户的操作函数、关于授权机构账户的操作函数。换言之,在该步骤中角色管理逻辑智能合约作为和区块链上数据交互的接口,即对机构委员会账户、授权机构账户的增加、删除、修改的相关逻辑操作和数据变更均通过业务逻辑层合约实现。
37.进一步的,所述机构委员会账户的操作函数至少包括:判断是否为机构委员会账户函数、删除机构委员会账户函数、添加机构委员会账户函数、以及获取机构委员会账户数据数组长度函数和获取机构委员会账户地址索引函数。
38.需要说明的是,获取机构委员会账户数据数组长度函数的作用是在于获取机构委员会账户的数量;获取机构委员会账户地址索引函数目的在于获取机构委员会账户的链上合约地址。
39.所述授权机构账户的操作函数至少包括:判断是否为授权机构账户函数、添加授权机账户函数、删除授权机构账户函数以及获取授权机构账户数据长度函数、返回授权机构数据数组长度。对应的,获取授权机构账户数据数组长度函数的作用是在于获取授权机构账户的数量;获取授权机构账户地址索引函数目的在于获取授权机构账户的链上合约地址。
40.换言之,基于角色管理逻辑智能合约分为关于角色的业务逻辑层合约,和与业务逻辑层合约相对应的数据逻辑层合约。数据处理层合约基于合约调用函数定义数据结构用于存储、查询合约调用函数,不与第三方智能合约直接对接。角色权限管理智能合约之间的各个依赖关系如图1 所示。
41.将合约调用函数以编译代码的形式编程到处理接口上,得到对应的链上合约地址进一步表现为:搭建区块链应用网络,创建至少3个节点的区块链联盟链,保证各个节点之间通信、共识、数据同步都为健康正常状态。通过区块链提供的智能合约sdk工具,使用solidity或go语言编写角色管理逻辑智能合约,并部署到区块链网络节点中得到关于角色账户的链上合约地址。同时基于业务逻辑层合约内的角色账户对应的链上合约地址,使用solidity或go语言编写对应的地址将区块链溯源的业务需求编译为代码并部署到对应的节点中。比如区块链溯源业务智能合约,引入业务逻辑层合约的链上合约地址,作为外部调用,编译部署到区块链节点中。角色权限智能合约的部署和调用逻辑如图2 所示。
42.在本实施例中,智能合约的部署账户就是超级管理员账户,超级管理员账户通过调用角色管理逻辑智能合约初始化机构委员会角色账户及其操作权限,初始化授权机构角色账户及其操作权限。
43.综上所述,业务逻辑层合约(controller contract):对外提供业务逻辑处理接口,封装数据读写合约调用的方法,不直接访问和存储数据。
44.数据处理层合约(data contract):实现定义数据结构,对数据存储的逻辑处理并返回结果以及提供对数据查询逻辑并返回结果,提供合约方法给上层业务逻辑合约调用;角色管理逻辑智能合约(role contract):该合约作为调用业务逻辑合约的入口,判断不同调用方所属的角色是否拥有操作业务逻辑合约方法的操作权限。
45.基于上述实施例,采用角色权限管理智能合约升级方法的优势:1. 积分兑换的规则定义在controller contract里面,兑换规则多种多样并且经常性的变化和调整,传统的智能合约方式不够灵活,无法升级修改兑换规则。
46.2. 采用角色权限管理智能合约升级方法之后,只要通过升级controller contract就可以解决兑换规则修改的场景,而data contract保持不变,无需改动积分数据,只会改动积分兑换的权限和规则。
47.实施例2本实施例又公开一个实施例,基于实施例1的描述,还包括:生成合约调用函数时还包括:创建权限检查函数,在调用入口处作为用于全局检查操作权限。输入账户地址和操作项目常量,判断当前的输入账户地址是否具有执行对应操作项目的操作权限;如果具备权限,则允许合约调用函数继续执行,如果不具备权限,则禁止合约调用函数执行,并产生合约调用函数非法调用事件广播。其中,操作项目常量包括增加项目、删除项目、更改项目、以及查询项目。
48.其中所述账户地址为原始用户地址,表示为tx.origin。所有权限的验证以最原始用户tx.origin地址作为判断标准,不单纯地依赖msg.sender,保证追踪调用地址的真实权限;通过此种方式,实现用户权限的分配和控制,特定账户地址(tx.origin)的账户拥有特定的权限,实现权限分层,避免数据对所有用户都可见的情况,形成数据隔离机制,避免数据泄漏风险。
49.当角色管理逻辑智能合约发生变更时,基于业务需求,更改对应的编译代码,基于修改后的编译代码重新部署到区块链应用网络的节点中,得到更新后的角色管理逻辑智能合约新地址。业务合约和数据合约分层设计逻辑如 图3 所示。
50.具体升级过程如下:
1. 更新与角色管理逻辑智能合约相适配的合约调用函数代码,编译并部署到区块链,获得新的合约地址。
51.2. 业务逻辑层合约和数据处理层合约未变化,仍采用原合约地址存储,数据无变化。
52.3. 通过sdk等方式调用升级后的角色管理逻辑智能合约即合约调用函数,并访问业务逻辑层合约和数据处理层合约,实现权限与数据分离,在数据不变的情况下,修改访问权限。
53.实施例3本实施例公开了基于区块链的角色权限管理智能合约升级系统,用于实现实施例1至实施例2所述的智能合约升级方法,包括:第一模块,被设置为创建角色管理逻辑智能合约:基于业务需求创建角色账户最小集,同时建立角色账户最小集内部元素相互之间的权限关系;第二模块,被设置为将所述角色管理逻辑智能合约采用分层式设计,分为业务逻辑层合约和数据处理层合约;所述业务逻辑层合约为第三方智能合约的业务需求的处理接口,基于所述业务需求生成合约调用函数,对指定角色账户赋予对应的权限、以及账户地址;将合约调用函数以编译代码的形式编译到处理接口上,得到对应的链上合约地址;所述数据处理层合约基于合约调用函数定义数据结构,所述数据结构用于存储、查询合约调用函数;第三模块,被设置为当业务需求发生变更时,处理接口基于变更后的供业务需求更新合约调用函数,基于更新合约调用函数以编译代码的形式再次编译到对应处理接口上,获取更新后的链上合约地址;第三方智能合约传入更新后的链上合约地址。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1