【权限专栏】联盟链的“圆桌会议”
【导读】
在前文《谁允许你访问了?》中,介绍了区块链中的权限层级、基于提案投票的权限管理模型,那么基于提案投票的权限管理模型在区块链中是如何使用的呢?下文将进行介绍。
随着区块链系统的运行,节点网络拓扑、用户数量会不断的变化,运行在区块链系统上的业务系统的形态与规模也会发生不断的变化。区块链系统的用户会逐渐认识到现有的区块链系统无法满足需求,需要加以升级调整,以解决运行时遇到的问题并满足一些新需求。
治理就是用户对区块链系统进行调整、决策,使系统整体发生相应改变。这里就提出了三个问题:谁可以参与决策?如何进行决策?如何执行决策?
【联盟自治】
根据决策系统的所处位置,可将区块链治理分成:链下治理、链上治理。
▲链下治理
链下治理:依赖于区块链系统以外的机制来完成治理。
大多时候依托于基金会,由核心开发者在社区中牵头发起某项提案,经过一定讨论后,在区块链系统中引入一些新的机制来达成某项目的,但这种机制往往和旧版系统不兼容,无法平滑过渡。
注意:这种方式往往会导致硬分叉,因为用户对于新机制的引入存在支持和反对两种观点,而这种模式的治理需要更新区块链程序,反对派可以选择不更新加以抵制,就会导致用户群体的割裂出现硬分叉,比较出名的事件就是以太坊的DAO事件,DAO之后以太坊也就分裂成了ETH和ETC两个系统。
▲链上治理
链上治理:依赖于区块链系统内部的机制来完成治理。
相比于链下治理,链上治理所提供的可调整能力是预定义的、有限的,但链上治理一般可以保证节点之间做统一、同步变更,不易导致用户社群分裂,产生硬分叉,总结而言就是安全、受限。同时,通过链上治理可以来改变一些区块链系统的运行时参数、共识的各种参数(例如出块时间、区块内交易数量等)、区块链系统公共组件的配置参数(例如区块链账号黑名单、域名服务等)。
【链上治理提案投票模型】
前文提出三个问题:谁可以参与决策?如何进行决策?如何执行决策?基于提案投票的权限管理模型对其分别回答。
谁能参与:基于提案投票的权限管理模型中,维护角色系统、具有特定角色的用户可以参与。
如何决策:去中心化决策。能参与决策的用户可以发起提案,所有能参与决策的用户在一定规则限制下进行投票,当投票超过一定阀值时出发执行。
如何执行:通过RPC的提案基准来序列化提案,基于提案进行决策,决策完成后通过反序列化、反射RPC请求的方式执行。
▲角色系统
角色系统:基于区块链的公钥密码学账号系统,为账号增加角色属性,同时使用编写的内置合约来进行账号角色的管理。
由于区块链账本采用了键值对存储的方式进行存储设计,为了方便查询,在各个账号中保存了账号到角色的映射关系,在内置合约状态数据中保存了角色到账号的映射关系。
通过内置的一些角色来进行核心权限控制,当前最核心的内置角色是admin,在第一次调用内置合约时给特定的账号赋予admin角色。一般情况下,这些被赋予admin角色的账号是创世区块中写入的账号,所谓的创世账号admin账号可以发起提案交易、投票交易和执行交易。node账号可以发起提案和执行提案。
▲合约类型
自治相关的合约都封装在了内置合约中,内置合约采用一个统一的前端合约来封装提案状态机,后端则是不直接暴露合约接口的功能合约,包括负责权限合约、配置合约、节点合约,以后还会进行扩展。
权限合约:提供角色增加、删除的功能,以及赋予用户角色和回收用户角色的功能。如果要对角色系统进行维护,则需要通过提案调用权限合约。
配置合约:提供修改链级配置的功能。如果要对链级配置做统一更改,需要通过提案调用配置合约更改共识配置,例如batch_size等来修改打包参数,也可以更改拦截器配置,打开拦截器,配置相应规则可以禁止具有某些角色的用户调用某些合约,或者只允许具有某些角色的用户调用某些合约,还可以变更提案配置,修改提案的超时时间、投票通过阈值等。
节点合约:提供增加、删除节点的功能。如果要对网络拓扑进行更改,需要通过提案调用节点合约,节点合约提供对分布式CA证书的支持,另外也提供共识节点集合变更的支持。
使用自治合约,可以通过四类交易进行,分别是提案交易、投票交易、撤销交易、执行交易。
提案交易:封装功能合约调用的多个方法名、参数构成的操作列表,用于创建提案。
投票交易:对提案进行投票,有权投票的用户可以通过投票交易对提案进行投票。同意此提案的操作内容,则投支持票,不同意则投反对票。
撤销交易:撤销提案,通过提案交易创建提案的用户,在提案没有被执行时,可以通过撤销交易撤销此提案。
执行交易:执行投票通过的交易,通过提案交易创建提案的用户,通过执行交易来执行提案,执行交易可能会导致配置变更,也称为配置交易。
▲业务流程
对于单个提案,有提案发起、提案审批、提案超时、提案禁止、提案通过、提案生效、提案销毁这几种状态。其状态的流转如下图所示:
引发提案状态发生变更的交易则是上文介绍到的提案交易、投票交易、执行交易、撤销交易。
注意:系统中只能有一个提案。当一个提案交易在提案合约中处理时,首先检查已有提案是否达到终止状态(所谓终止状态指的是超时、禁止或生效三个状态)。如果已有提案已经达到终止状态,那么已有提案的数据会被从状态数据中移除,取而代之的是新提案的数据,新提案进入审批状态。
经过一段时间投票,如果支持票超过阈值则进入通过状态,如果反对票超过阈值则进入禁止状态。达到通过状态的提案都可以通过执行提案交易来变更到生效状态。在任何状态下,一旦提案相关交易的打包时间超过一定范围,就会导致提案超时。
当提案状态发生变更时,会通过mq通知到客户端。客户端也可以主动使用轮询的方式来主动查询提案。
【总结】
本篇介绍了联盟自治的链上、链下治理,讲解了区块链系统机制是如何完成治理的、链上治理提案投票模型部分角色系统是如何运作的、合约类型以及一条业务交易是如何流转的等内容。联盟自治是为了满足灵活多变、迭代更替的业务规则而提出的一种具备联盟协商、迭代升级的技术。
综上所述,链上自治主要作用帮助使用角色系统来控制谁可以参与决策,通过内置合约来管理决策系统,完善控制如何进行决策以及如何执行决策的机制。
作者简介
刘明美
趣链科技基础平台部 区块链网络研究小组
参考文献
[1] 《区块链技术指南》
【权限专栏】联盟链的“圆桌会议”相关推荐
- 联盟链FISCO BCOS权限控制一览
FISCO BCOS是完全开源的联盟区块链底层技术平台,由金融区块链合作联盟(深圳)(简称金链盟)成立开源工作组通力打造.开源工作组成员包括博彦科技.华为.深证通.神州数码.四方精创.腾讯.微众银行. ...
- 一文读懂公有链、私有链、联盟链
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 区块链中公有链.私有链.联盟链都是区块链技术的一个细分,而技术仅仅是一种工具,怎么在不同的场景应用好不同的工具才是技术进 ...
- 区块链BaaS云服务(40) 泰岳联盟链
1. 系统框架设计 1.1 关注点 区块链底层互链协议.共识算法.隐私计算.并行计算.多方安全计算 1.2 整体架构 泰岳链划分成基础数据层.核心共识层.应用管理层和接口层等: 存储层: 提供区块链数 ...
- 联盟链赛道上,微众、蚂蚁、百度、京东等“正规军”能崛起吗?
来源 | 螳螂观察 文 | 隐南 DeFi和NFT爆火. 投资者也动了起来,把全球加密货币总市值推到2万亿美元左右(截止2021年9月).相比之下,专注于机构之间应用落地的联盟链受到的关注就较少. 随 ...
- 公有链、私有链、联盟链、许可链,这些区块链又分别代表着什么意思?
想知道更多区块链技术知识,请百度[链客区块链技术问答社区] 链客,有问必答!不同的区块链,有着不同的内涵和功能.在区块链领域经常出现的公有链.私有链.联盟链.许可链,这些区块链又分别代表着什么意思?1 ...
- 寺库商用区块链落地,联盟链为每件奢侈品发“×××”
2018年6月,整个世界奢侈品行业都把目光集中到了两件事情上:在欧洲,历峰集团宣布,旗下的Yoox Net-a-porter Group SpA (YNAP.MI)(下称YNAP)在完成私有化后,正式 ...
- 联盟链中的Hyperledger Fabric、FISCO BCOS和CITA
本文援引自链接:https://mp.weixin.qq.com/s/4JAZGwI32bZNlxBqPfkihg 一.摘要 第 46 届世界经济论坛达沃斯年会将区块链与人工智能.自动驾驶等一并列入& ...
- 联盟链系统开发 联盟链开发多钱
联盟链,只应对某一特殊人群的组员和不足的第三方,其內部特定好几个选号牌连接点为记帐人,每一个块的转化成由全部的选号牌连接点一同决策.依据联盟链互联网去中心化水平的不一样,我们团队作为一家专业的区块链服 ...
- 区块链入门教程(4)--搭建单机四节点FISCO BCOS联盟链
文章目录 1. 任务背景 2. 任务目标 3. 相关知识点 4. 任务实操 4.1 切换root用户 4.2 安装依赖 4.3 创建目录,下载安装脚本 4.4 搭建单群组4节点联盟链 4.5 启动FI ...
最新文章
- 隔壁大爷都会网络布线啦、搞起来搞起来
- asp.net 2中的图片上传
- 数据库查询经常卡死?面对亿级大数据量,我是这么展示分析的
- Leetcode —— 208. 实现 Trie (前缀树)(Python)
- python定义变量字符串_Python学习笔记二(变量和字符串)
- JNA-Java跨平台调用的利器
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_1_缓冲流的原理...
- 判断 失效_复合材料渐进失效Hashin模型及参数详解
- python数据建模优缺点_Python数据分析\建模入门建议
- Unity 动态修改鼠标指针
- 如何解决 U盘 文件变成.exe文件
- linux bond服务是什么,linux 查看bond
- 参考文献中文刊名的英文缩写对照表
- 上传图片格式一句话木马
- jadx卡死解决方案
- Glib基础——版本信息
- MPLS LDP原理
- c语言程序设计迷宫问题,C语言迷宫问题
- Tensorflow2.0 自定义网络
- 实体知识+字典树辅助jieba的分词(并对三国演义进行简单分析)
热门文章
- python人脸识别实验报告总结_Python 使用 face_recognition 人脸识别
- Scyther形式化验证工具简单教程
- 校招前几个月,如何高效地进行复习?
- 在Linux下安装配置蒲公英 私网环境轻松实现异地SSH远程管理
- 数据脱敏d18n之一-podman安装
- Angular显示图片示例
- HCIA-数通学习总结4
- 离群点检测——局部离群因子(Local Outlier Factor,LOF)算法
- python图片分类技术介绍_手把手教你用Python构建你的第一个多标签图像分类模型(附案例)!...
- previous_sibling和next_sibling的理解