联盟链是虚构的?没有用的?用FISCO BCOS来展示链委员这件事

前言

         当前区块链大都使用的是投票决定这种方法,但是如何使现实中的投票转换到区块链中,如何让举手表决变得更加智能,如何让投票透明、安全、权威,这是区块链的一大设计思路,有很多人觉得联盟链是个梦,是个虚无缥缈的东西,确实联盟链介于公链的开放和私链的自主中,一不小心就会更加偏向于另外一边,那么如何将这个1/2做的更加像1/2是一个挑战。

        本篇文章我们使用FISCO BCOS的委员会设计思想来介绍联盟链投票这件事情,话不多说,直接开始。文中多引用FISCO BCOS官网中的原话,再加上自己的实操与理解,以保证全篇文章的科学性。

环境:

Ubuntu20

FISCO BCOS

FISCO BCOS Console

正文

角色定义

分为治理方、运维方、监管方和业务方。考虑到权责分离,治理方、运维方和开发方权责分离,角色互斥。

治理方:拥有投票权,可以参与治理投票,可以增删节点、修改链配置、添加撤销运维、冻结解冻合约、对用户表的写权限控制。链级别的可变配置的权限。
运维方:由治理方添加运维账号,运维账号可以部署合约、创建表、管理合约版本、冻结解冻本账号部署的合约。
业务方:业务方账号由运维添加到某个合约,可以调用该合约的写接口。
监管方:监管方监管链的运行,能够获取链运行中权限变更的记录、能够获取需要审计的数据

权限

        以下简称治理账号为委员

        增删委员、修改委员权重、修改生效阈值三个操作,需要有效投票权重/总权重>生效阈值生效。其中总权重=SUM(委员权重)

        治理账号可以添加运维账号,但治理账号不拥有运维的权限

        运维账号可以为某个合约添加业务账号,但运维账号没有业务账号权限

6dcf211b630249e3ac67ea24715c4abf.jpeg

 (图片来源于FISCO BCOS官方文档)

 权限项

权限操作控制方式命名默认阈值修改方式
增删委员控制写权限表AUTH_ASSIGN_AUTH0.5委员投票
修改委员权重控制写权限表AUTH_ASSIGN_AUTH0.5委员投票
修改生效投票阈值(投票委员权重和大于该值)控制写权限表AUTH_ASSIGN_AUTH0.5委员投票
增删节点(观察/共识)控制写共识表AUTH_CTRL_NODE 委员可操作
修改链配置项控制写配置表AUTH_MODIFY_CONFIG 委员可操作
冻结解冻合约合约生命周期AUTH_CTRL_CONTRACT_LIFE 委员可操作
添加撤销运维 AUTH_CTRL_OPERATOR 委员可操作
用户表写权限 AUTH_CTRL_USER_TABLE 委员可操作
部署合约_sys_tables_的写权限AUTH_CREATE_TABLE 运维操作
创建表_sys_tables_的写权限AUTH_CREATE_TABLE 运维操作
合约版本管理CNSAUTH_CTRL_CNS 运维操作
冻结解冻本账号部署的合约修改合约状态  运维操作
调用合约合约表写权限  业务操作

计票与生效

  • 所有治理操作需要有效投票数/委员数>生效阈值才能生效

  • 每次投票操作,如果是委员投票,则记录操作内容和投票委员,不重复计票

  • 每次投票操作,计票结束后,计算有效投票数/委员数,如果大于此操作的生效阈值,则对应操作生效,写入

  • 投票设置过期时间,根据块高,blockLimit的10倍,固定不可改

 

功能列表

  1. 增删委员计票与生效

  2. 修改委员权重计票与生效

  3. 修改生效阈值计票与生效

  4. 委员增删运维

  5. 委员解冻冻结合约

  6. 委员增删节点

  7. 委员修改系统配置

  8. 权限项默认阈值存储

  9. 运维部署合约的权限

  10. 运维管理合约版本的权限

实操

这里对上文进行一些总结,那么首先先说权限控制这个概念:权限控制通过控制台(console)进行实现,首先登陆使用的是控制台的启动脚本进行登陆,使用-pem参数指定用户文件。

使用get_account.sh脚本进行文件生成,这里我们还是一样生成三个文件,去体验不同的权限控制

 

 新建三个用户

bash get_accounts.sh

之后创建文件
bash get_accounts 私钥

9ef3a18ed9dc4ee1a3d628af55db8f0a.png

2691f99bed054d6298c6a2475666ab75.png

 

进入控制台

./start.sh 1 -pem ./accounts/私钥

使用我们刚才所创建的私钥文件进入控制台 ,这样就可以指定用户体验权限控制

5f2dd8164b0949ec97fd4cba1a281585.png

重复这个操作,开三个窗口,登陆上一步我们所操作的三个用户 

 将用户1变成委员

grantCommitteeMember 私钥

// 附上私钥将用户加入委员会

listCommitteeMembers

//验证委员会列表中是否有当前用户

49d1ed824ed244d7b77e52c0bad9974e.png

 使用用户1将用户2任命为委员

grantCommitteeMember 私钥

// 附上私钥将用户加入委员会

listCommitteeMembers

//验证委员会列表中是否有当前用户

5486355953d947b6b0722eb4db0ef133.png

 验证是否有权限对区块链进行操作 

56f8ae8336c5419e8c03ef7720f26be4.png

  • tx_count_limit:区块最大打包交易数

  • tx_gas_limit:交易执行允许消耗的最大gas数

  • rpbft_epoch_sealer_num: rPBFT系统配置,一个共识周期内选取的共识节点数目

  • rpbft_epoch_block_num: rPBFT系统配置,一个共识周期出块数目

  • consensus_timeout:PBFT共识过程中,每个区块执行的超时时间,默认为3s,单位为秒

 用户1

ce8f7edf3e3b4d3a970f8035b9a16660.png

 用户2818d0537f3e74b38ba7bfaa6172b494b.png

 用户39ab6d945bc2943b587e643b5bd8e3a38.png

 最终我们发现权限控制是真实存在的,那么只需要在登陆区块链以及用户上链之前限定好权限即可

撤销某用户的权限

用户1撤销用户2的权限

fffec84cbe4440f0890ac399a8e0510a.png

 用户2撤销用户2的权限

af62b2f9e81047e7bc7195a922db057a.png 因为我们这里只有三个用户,其中两个用户有权限,所以我们的两个用户各持有50%的决定权,需要两个用户都同意才可以撤销

计算公式:有效票/总票数=2/2=1>0.5

 验证是否撤销成功

0d3b6f1a07a14003b2937188db1e8fe4.png

修改用户权重

首先先查看一下当前用户的权重,因为我们上一步撤销了用户2的权限,所以加入用户3进行对比

queryCommitteeMemberWeight 私钥

f82b3ab6d35045caa3755d74be35253a.png

 

grantCommitteeMember 私钥

listCommitteeMembers

0107df83b613446f9a61d0a355ffa13f.png

 

updateCommitteeMemberWeight 私钥 权重数

0f775314e0ca41f583f7846cd555f516.png

 

queryCommitteeMemberWeight 私钥

 这个时候我们查询后发现,投票的权重并没有更新,这是因为我们设置了用户3为委员,所以现在的投票机制还是五五开,因此我们还是需要去用户3哪里投票

439574385e544b74af40a9ad65bc3c0b.png

updateCommitteeMemberWeight 私钥 权重数
queryCommitteeMemberWeight 私钥

 在用户3这里更新一下我们的权重,在查询一下发现weight变成了2

5ed93699ca714960888953c5a1a3550f.png

修改阈值操作

我们发现不管是几个用户一直都是,五五开,或者是超过半数才可以,这个时候我们就会有疑问了,那么怎么样才可以不用五五开或者是46?73?这样的阈值呢

因为我们刚才将用户1的权重设置为了2,所以我们将用户2重新赋予权限

grantCommitteeMember 私钥

listCommiteeMembers

d96de82266b441bcbbdc97bc3c402f10.png

 使用用户1将我们的阈值更新为75,之后查询一下

updateThreshold 75
queryThreshold

b1a1b35e7a7d430ca849d6d0a5b61f67.png

 这个时候我们还是发现,所有的并没有改变,那是因为我们只是有一个用户进行了投票,那么我们切换到其他用户去进行投票 

f25412d169ba4a4ca05dea0acfe25380.png

这个时候,就有疑问了,不是75了吗,为什么两个用户投了票就更新了呀,这里呢是因为,在这之前的阈值是50,只需要两个用户投票即可,我们现在设置75也是因为用户1有了两票,当用户多起来了以后,我们就需要根据实际情况去设置权重以及阈值

运维委员设立

我们的委员职责是分开且独立的,不会存在一个人就可以管理整个区块链的情况发生

这里我们使用上面的方法再新建一个账户

bash get_account.sh

bash get_account.sh 私钥文件

在开始之前,我们先部署一下HelloWorld合约,没有任何问题

865d3a08f3a846b48f50c16b21986cd0.png

使用用户1控制台将用户4任命为运维委员

5d401719e2e94d63bc1b4dc50ab040e7.png

 这里我们部署HelloWorld合约

deploy HelloWorld

801688330db2417bae48019dd6b309b9.png

 发现部署失败了,这里的原因就是我们所说的,各司其职,只要有了运维人员,就不在具有运维的职责

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/12208.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络简史

ARPANET的发展 互联网最早的雏形 1931-ARPANET设计 互联网名人堂 1965-packet switching(分包交换) 1969 第一个RFC(Request for Comments)(开始通过APPANET发布)第一个接口信息处理单元(Interface Message Processor)(下图,节…

制造企业该如何选择MES生产管理系统?盘点四大生产管理系统软件

本文将介绍:1、如何选择MES(生产管理系统);2、盘点四款好用的生产管理系统 生产管理系统即MES(Manufacturing Execution System),制造执行系统。是面向车间生产的管理系统。在产品从工单发出到成品完工的过程中,MES系…

提取图像特征方法总结 是那种很传统的方法~

目录 写在前面 一、SIFT(尺度不变特征变换) 1.SIFT特征提取的实质 2.SIFT特征提取的方法 3.SIFT特征提取的优点 4.SIFT特征提取的缺点 5.SIFT特征提取可以解决的问题: 二、HOG(方向梯度直方图) 1.HOG特征提取…

webgl-图形非矩阵旋转

知识拓展 由(x1,y1)旋转β角度到(x2,y2) 根据圆极坐标方程 x1 r*cosα y1 r*sinα 可得 x2 r*cos(α β) r*cosα*cosβ - r*sinα*sinβ,因为x1 r*cosα,y1 r*sinα,所以x2 x1*cosβ -y1*sinβ…

Linux 提权学习

提权的目的是获取 root 权限 root 权限可获取 shadow 文件中的密码 Hash,若内网环境中存在「账户/密码复用」的情况,可用于横向扩展 暴力破解 suid 提权 内核漏洞提权 定时任务提权 sudo 提权 第三方服务提权(docker、mysql、redis、NFS提权…

【C++】结构体嵌套结构体

目录 1、缘起 2、结构体嵌套结构体 3、总结 1、缘起 结构体嵌套结构体 是一种数据组织方式,就像 俄罗斯套娃 一样,一个数据结构可以包含另一个数据结构。这种嵌套结构使得程序可以更加灵活地处理数据,从而更好地满足复杂的需求。类比生活中…

Can‘‘t connect to MySQL server on localhost (10061)解决方法

首先检查MySQL 服务没有启动》如果没有启动,则要启动这个服务。 有时候安装mysql后使用mysql命令时报错 Cant connect to MySQL server on localhost (10061),或者用net start mysql 时报服务名无效,一般是因为mysql服务没有启动。 打开 powe…

MySQL中使用IN()查询到底走不走索引?

MySQL中使用IN()查询到底走不走索引? 看数据量 EXPLAIN SELECT * from users WHERE is_doctor in (0,1); 很明显没走索引,下面再看一个sql。 EXPLAIN SELECT * from users WHERE is_doctor in (2,1);又走索引了,所以…

day81【leetcode】打家劫舍专题

文章目录前言一、打家劫舍(力扣198)【相邻两间房不能偷】二、打家劫舍 II(力扣213)【围成一圈 相邻两间房不能偷】三、打家劫舍 III(力扣337)【树形DP】每日一题day81:链表中的下一个更大节点&a…

Java:jdk的安装以及hello world

由于本人头发较多,常常被认为是不用功的程序员;故,我来学学Java,希望我变秃了也变强了! 首先是java的安装,根据我司java的建议,安装了jdk8与jdk17!因为在众多的版本中,只…

《Netty》从零开始学netty源码(三十九)之PoolSubPage的内存分配

目录 PoolSubPage.allocategetNextAvail方法toHandle方法removeFromPool方法 PoolSubPage.allocate 上一篇我们介绍了PoolSubPage的简单知识,当我们需要PoolSubPage的内存时可调用allocate方法查找可分配二进制的位置,具体的源码过程如下: …

vite .env.test环境使用ant design vue ,打包后a-date-picker控件无法选择日期

前端开发后台管理系统,常用的UI库当属Element UI和 Ant Design Vue,但是前段时间遇到一个奇葩问题,在这里记录一下,防止小伙伴们踩坑。 后台系统,大家肯定都用过时间控件,本期我们使用的是ant design vue&…

网络-IP地址(嵌入式学习)

IP地址基本概念IPv4 五类:A B C D E特殊地址子网掩码子网号概念IPv6优势举个栗子基本概念 IP地址是Internet中主机的标识 IP地址(Internet Protocol Address 互联网国际地址)是一种在Internet上的给主机编址的方式,它主要是为互…

piwigo安装及初步使用

一 摘要 本文主要介绍piwigo 安装及初步使用,nginx \php\mysql 等使用 docker 安装 二 环境信息 2.1 操作系统 CentOS Linux release 7.9.2009 (Core)2.2 piwigo piwigo-13.6.0.zip三 安装 3.1安装资源下载 piwigo 请到官网下载https://piwigo.org 安装步骤也…

js非常的混乱怎么学才能入门呢?

前言 ES5还是要学的喔,里面有很多重要的概念,跟ES6有着很强的关联性,大致上包括: 变量声明 ES5 使用var关键字来声明变量,而 ES6 引入了 let 和 const 关键字,用于声明块级作用域的变量和常量。这些新的关…

MobPush创建推送

功能说明 MobPush提供遵循REST规范的HTTP接口,适用各开发语言环境调用。 IP绑定 工作台可以绑定服务器IP地址,未绑定之前所有IP均可进行REST API的调用,绑定后进仅绑定的IP才有调用权限。 调用地址 POSThttp://api.push.mob.com/v3/push/c…

坚鹏:《银行业数字化转型指导意见》政策解读及银行数字化转型

中国银保监会《关于银行业保险业数字化转型的指导意见》政策解读及银行数字化转型 课程背景: 很多银行存在以下问题: 不知道如何准确理解中国银保监会《关于银行业保险业数字化转型的指导意见》相关政策 不清楚中国银保监会《关于银行业保险业数字化…

TensorFlow 深度学习第二版:1~5

原文:Deep Learning with TensorFlow Second Edition 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只…

L2-044 大众情人分数 25分

人与人之间总有一点距离感。我们假定两个人之间的亲密程度跟他们之间的距离感成反比,并且距离感是单向的。例如小蓝对小红患了单相思,从小蓝的眼中看去,他和小红之间的距离为 1,只差一层窗户纸;但在小红的眼里&#xf…

36岁大龄程序员被裁,找了2个月工作,年包从100万降到50万,要不要接?

为了找到工作,你愿意接受降薪多少? 一位36岁的杭州程序员问: 36岁被裁,找了2个月工作,年包从100万降到50万,真心纠结,要不要接? 网友们分成了旗帜鲜明的两派,一派人认为不…