【FISCO-BCOS】十七、角色的权限控制

本文详细介绍了FISCO-BCOS区块链平台的角色定义和账户权限控制,包括治理方、运维方、监管方和业务方的权责,以及委员的新增、撤销、权重修改和投票生效阈值调整等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、角色定义

二、账户权限控制

        1.委员新增、撤销与查询

        2.委员权重修改 

        3.委员投票生效阈值修改 

        4. 运维新增、撤销与查询


一、角色定义

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

  • 治理方:拥有投票权,可以参与治理投票(AUTH_ASSIGN_AUTH),可以增删节点、修改链配置、添加撤销运维、冻结解冻合约、对用户表的写权限控制。链级别的可变配置的权限。

  • 运维方:由治理方添加运维账号,运维账号可以部署合约、创建表、管理合约版本、冻结解冻本账号部署的合约。

  • 业务方:业务方账号由运维添加到某个合约,可以调用该合约的写接口。

  • 监管方:监管方监管链的运行,能够获取链运行中权限变更的记录、能够获取需要审计的数据

二、账户权限控制

        现拥有账户:A:0xa767a4206ef39a17e40773d694051434bf557e24,B:0xba0bc02599215aff47357bc7c764a1132c52b355,C:0xd3f18300cfc68ef9fe17798fd7b36436ee252792,分别使用其私钥进入控制台,具体操作可参见这里:【FISCO-BCOS】十五、创建和使用账户_奈何不吃鱼的博客-优快云博客

        1.委员新增、撤销与查询

        新增A账户为委员,由于目前只要A账户为委员,因此只需要一票即可通过

         如果我们再新增B账户为委员,此时由于只有账号1是委员,所以账号1投票即可生效。

        使用listCommitteeMembers查看委员列表

        如果此时要撤销账号B的委员,由于此时系统中有两个委员,默认投票生效阈值50%,所以需要两个委员都投票撤销账号B的委员权限

        此时查看委员列表,撤销权限成功

        2.委员权重修改 

        先添加账户A、账户C为委员,使用账号A的控制台投票更新账号A的票数为2

        由于账户C也是委员,所以权重修改也需要在C账户的控制台执行

        3.委员投票生效阈值修改 

        账户A和账户C为委员,账号A有2票,账号C有1票,使用账号A添加账号B为委员,由于2/3>0.5所以直接生效。使用账号A和账号B,更新生效阈值为75%。

        使用账户A控制台投票更新生效阈值为75%

         使用账户B控制台投票更新生效阈值为75%

        4. 运维新增、撤销与查询

        委员可以添加运维,运维角色的权限包括部署合约、创建表、冻结解冻所部署的合约、使用CNS服务,先使用get_account脚本再生成一个新的账户D:0xdbb5445316fd2b1690a1ebeee62d12aab9cf7b46

        添加账号D为运维角色

        使用账号D部署HelloWorld,成功

        使用账号A部署HelloWorld,失败 

        撤销账号D的运维权限 

按照下列描述,给出核心账单信息上链的详细流程,所用到的技术和功能 家庭理财记账系统(Financial Management System)是一个基于Spring Boot和FISCO-BCOS区块链技术的家庭财务管理平台。系统旨在帮助家庭成员记录日常收支,并通过区块链技术保证财务数据的安全性、可追溯性和不可篡改性。 ### 1.1 系统特点 - **多用户角色管理**:支持系统管理员、家主和普通用户三种角色,不同角色拥有不同权限 - **收支记录管理**:详细记录家庭收入和支出,支持多种支付方式 - **区块链数据存储**:核心财务数据上链存储,确保数据安全和可信 - **数据可视化**:提供数据统计和图表展示功能 - **响应式设计**:适配多种屏幕尺寸,提供良好的用户体验 ## 2. 技术架构 ### 2.1 技术栈 - **后端**:Spring Boot 2.1.1, MyBatis 1.3.2 - **前端**:HTML5, CSS3, JavaScript, jQuery, Layui - **数据库**:MySQL - **区块链**:FISCO-BCOS (模拟模式和真实模式) - **构建工具**:Maven ### 2.2 系统架构 系统采用典型的三层架构: 1. **表示层**:基于Thymeleaf模板引擎的Web界面 2. **业务逻辑层**:Spring Boot控制器和服务 3. **数据访问层**:MyBatis与MySQL数据库交互 同时,系统集成了FISCO-BCOS区块链作为可信数据存储: - 支持真实区块链连接模式 - 支持区块链模拟模式(用于开发和测试) ## 3. 核心功能模块 ### 3.1 用户管理模块 - 用户注册与登录 - 角色权限管理(系统管理员、家主、普通用户- 用户信息维护 ### 3.2 账单管理模块 - 收入记录管理 - 支出记录管理 - 账单分类与标签 - 支付方式管理 - 账单查询与筛选 ### 3.3 区块链上链模块 - 账单信息自动上链 - 区块链信息查询 - 账单信息验证 - 区块链数据展示 ### 4.1 区块链架构 系统集成了FISCFISCO-BCOS联盟链平台,实现了两种模式: - `GET /bills/blockchain/{blockchainId}`:查询区块链记录 - `
05-08
### Spring Boot 和 FISCO-BCOS 核心账单信息上链的实现流程及技术功能详解 #### 一、核心概念和技术背景 FISCO-BCOS 是一个高性能的企业级区块链开源框架,支持联盟链场景下的多种业务需求[^1]。其主要特点包括高吞吐量、低延迟以及丰富的隐私保护机制。Spring Boot 则是一个用于快速开发微服务应用的 Java 框架,通过集成 Web3 SDK 可以方便地与 FISCO-BCOS 链交互[^2]。 #### 二、目录结构简介 FISCO-BCOS 的项目目录通常包含以下几个重要部分: - **config/**:存储节点配置文件及相关参数设置- **contracts/**:存放智能合约源码及其编译后的 ABI 文件。 - **logs/**:记录运行日志以便调试和监控。 - **build_chain.sh**:一键部署脚本,简化环境搭建过程[^1]。 #### 三、实现流程分析 以下是基于 Spring Boot 连接并上传核心账单信息至 FISCO-BCOS 的具体步骤: ##### 1. 引入依赖项 为了使 Spring Boot 应用能够访问区块链网络,在 `pom.xml` 中需加入官方提供的 Web3 SDK 插件[^2]: ```xml <dependency> <groupId>org.fisco-bcos</groupId> <artifactId>web3sdk</artifactId> <version>2.6.1</version> </dependency> ``` ##### 2. 初始化客户端连接 创建一个类来初始化与区块链节点之间的通信通道。此操作涉及加载证书路径、指定 IP 地址端口等必要属性[^2]: ```java import org.fisco.bcos.web3j.crypto.Credentials; import org.fisco.bcos.web3j.protocol.Web3j; public class BcosClient { private static final String GROUP_ID = "group_id"; private static final String NODE_URL = "http://localhost:20200"; public static Web3j buildWeb3j() throws Exception { Credentials credentials = ... ; // 加载私钥生成凭证对象 return Web3j.build(new HttpService(NODE_URL), Integer.parseInt(GROUP_ID)); } } ``` ##### 3. 编写智能合约逻辑 定义一份 Solidity 合约用来接收账单数据字段(如金额、时间戳、交易方ID),并将这些值永久保存于区块之中: ```solidity pragma solidity ^0.8.0; contract BillRecord { struct BillInfo { uint amount; string timestamp; address partyA; address partyB; } mapping(uint => BillInfo) public bills; function addBill( uint _id, uint _amount, string memory _timestamp, address _partyA, address _partyB ) external { require(_partyA != address(0) && _partyB != address(0)); bills[_id].amount = _amount; bills[_id].timestamp = _timestamp; bills[_id].partyA = _partyA; bills[_id].partyB = _partyB; } } ``` ##### 4. 调用接口完成存证动作 最后一步是在控制器层暴露 RESTful API 给前端调用者提交待处理的数据包,并借助前述方法将其同步到分布式账本之上: ```java @RestController @RequestMapping("/api/v1/bill") public class BillController { @Autowired private BillContract billContract; @PostMapping("/upload") public ResponseEntity<String> upload(@RequestBody Map<String, Object> payload){ try{ int id = (int)payload.get("id"); BigInteger amount = new BigInteger((String)payload.get("amount")); String timeStr = (String)payload.get("time"); Address senderAddr = Address.fromString((String)payload.get("senderAddress")); Address receiverAddr = Address.fromString((String)payload.get("receiverAddress")); TransactionReceipt receipt = this.billContract.addBill(id, amount, timeStr, senderAddr, receiverAddr).send(); if(receipt.getStatus().equals("0x0")){ return ResponseEntity.ok("Success!"); }else{ throw new RuntimeException("Transaction failed."); } }catch(Exception e){ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage()); } } } ``` #### 四、关键技术点说明 - **安全性保障**:利用非对称加密算法确保只有合法参与者才能发起请求;同时采用国密标准 SM2 替代传统 ECC 提升抗量子攻击能力。 - **性能优化措施**:针对高频次读写的热点账户设计缓存策略减少不必要的跨网查询开销;另外还支持批量事务打包提交进一步降低单位成本。 - **可扩展架构**:允许开发者自定义共识协议类型(PBFT/Raft)、调整分片规模满足不同行业领域特殊诉求。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奈何不吃鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值