区块链的搭建和运维4
区块链的搭建和运维4
(1) 搭建基于MySQL分布式存储的区块链
1.构建单群组网络节点
使用开发部署工具构建单群组网络节点,命令如下:
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545

2. 启动 MySQL 并设置账户密码
输入如下命令,启动 MySQL 服务,右下角出现 [OK] 字样表示启动成功
service mysql start
MySQL 服务启动成功后,在终端输入如下命令,登录 mysql
mysql -uroot -p

输入如下命令,设置 root 账户的密码为 ”123456“
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

输入如下命令,退出 MySQL
quit;
3.配置 MySQL
在终端输入如下命令,编辑 MySQL 配置文件(/etc/mysql/my.cnf),并在键盘输 入”i“,进入输入模式
vim /etc/mysql/my.cnf
在文件末尾添加如下内容,输入完成后,在键盘左上角按 ”ESC“ 键,输入”:wq“ 保 存退出,如下图
[mysqld]
max_allowed_packet = 1024M
sql_mode = STRICT_TRANS_TABLES
ssl = 0
default_authentication_plugin = mysql_native_password

输入如下命令,重启 MySQL 服务
service mysql restart
1.7 验证参数
输入如下命令,登录 MySQL 数据库,需要输入之前设置的密码
mysql -uroot -p
输入如下命令,查看 max_allowed_packet 的值
show variables like 'max_allowed_packet%';
输入如下命令,查看 sql_mode 的值
show variables like 'sql_mode%';
输入如下命令,查看 default_authentication_plugin 的值
show variables like 'default_authentication_plugin';

Cb5.png&pos_id=img-wNAbqHJg-1723008968840)
输入如下命令,退出 MySQL 数据库
quit;
4.修改节点存储配置
修改 node0 的数据存储配置,输入以下命令,并在键盘输入”i“,当左下角出现 ”-- 插入–“ 时进入输入模式
vim nodes/127.0.0.1/node0/conf/group.1.ini

其他节点同样操作
5.启动节点
输入如下命令,启动所有节点
bash nodes/127.0.0.1/start_all.sh

(2) 配置控制台
再终端输入如下命令,解压控制台压缩包,
tar -zxvf console.tar.gz
在终端输入如下命令,将节点 sdk 证书拷贝到控制台 conf 目录下
cp nodes/127.0.0.1/sdk/* console/conf/
输入如下命令,将控制台 conf 目录下的 config-example.toml 文件重命名为 config.toml 文件
cp console/conf/config-example.toml console/conf/config.toml
输入如下命令,启动控制台
bash console/start.sh

(3) 委员账户权限操作
1.账户准备
在控制台输入如下命令,生成账户地址
newAccount

在新打开的终端输入如下命令(私钥文件根据实际情况输入),使用创建的账户启 动控制台
bash fisco/console/start.sh 1
fisco/console/account/ecdsa/0x742bceda913fdc79595198c86634b45802754
5bc.pem

在控制台再次输入如下命令,生成账户地址
newAccount

在新打开的终端输入如下命令(私钥文件根据实际情况输入),使用创建的账户启 动控制台

在第一个控制台输入如下命令,查看控制台加载的账户地址
listAccount

为方便理解,本实验规定如下:
加载 “0xa29f51b0…” 账户的为 1 号控制台,账户地址用 A 表示
加载 “0x742bceda…” 账户的为 2 号控制台,账户地址用 B 表示
加载 “0x3eddcbf7…” 账户的为 3 号控制台,账户地址用 C 表示
2.添加委员
在 1 号控制台输入如下命令,添加账户A为委员 需要注意的是,初始系统无权限设置记录,任何账户均可使用权限设置,一旦设置权限 后,只有委员才可授权委员账号;另外,添加委员操作需要投票决定,由于初始系统无 委员账户,任意地址投票即可生效
grantCommitteeMember 0xa29f51b088808a08497d04897da9700475a6716d

在 1 号控制台输入如下命令,可查看系统中的委员账户
listCommitteeMembers

在 2 号控制台中输入如下命令,尝试将账户B添加为委员
grantCommitteeMember 0x742bceda913fdc79595198c86634b458027545bc
在新打开的终端中输入如下命令,使用 root 账户登录 MySQL,并连接到 db_node0 数据库
mysql -uroot -p123456 -A db_node0

在 MySQL 输入如下命令,查看权限表(sys_table_access)
select * from _sys_table_access_;

可以看到,委员账户A 对 sys_config、sys_consensus、sys_table_access 三个 表具有写入权限。
在控制台 1 输入如下命令,将账户B添加为委员 添加委员操作需要投票决定,此时系统中只有一位委员(账户A),生效阈值=有效票/ 总票数=1/1=1>0.5,所以立即生效。
grantCommitteeMember 0x742bceda913fdc79595198c86634b458027545bc

在 1 号控制台输入如下命令,可查看系统中的委员账户
listCommitteeMembers

此时系统中已经有两个委员账户,分别为账户A和账户B。
在 MySQL 输入如下命令,再次查看权限表(sys_table_access)
select * from _sys_table_access_;

可以看到,委员账户(账户B)对 sys_config、sys_consensus、 sys_table_access 三个表具也具有写入权限。
3.撤销委员
在 1 号控制台输入如下命令,撤销账户B的委员角色
grantCommitteeMember 0x742bceda913fdc79595198c86634b458027545bc
在 1 号控制台输入如下命令,查看系统中的委员账户
listCommitteeMembers

此时系统中有两个委员账户(账户A和账户B),账户A账户投票后的生效阈值=有效票/ 总票数=1/2=0.5,而 FISCO BCOS 的默认有效阈值必须大于 0.5 才可生效,所以账户A 投票后, 账户B仍是委员。
在 2 号控制台输入如下命令,撤销账户B的委员角色
grantCommitteeMember 0x742bceda913fdc79595198c86634b458027545bc

在 1 号控制台输入如下命令,查看系统中的委员账户
listCommitteeMembers

当账户B也投票后,有效阈值=有效票/总票数=2/2=1>0.5,撤销账户B委员的提议通 过,因此再次查询委员账户列表只有账户A。
在 MySQL 输入如下命令,再次查看权限表(sys_table_access)变化情况
select * from _sys_table_access_;

撤销委员并不会删除权限表中的数据,而是以 status 字段来标注该账户是否可用,0 表示该账户地址可用,1 表示不可用。
4.修改委员权重
在 1 号控制台输入如下命令,添加账户C为委员
grantCommitteeMember 0x3eddcbf715b02701a1d061ade21fe938642f50a4
在 1 号控制台输入如下命令,可查看系统中的委员账户
listCommitteeMembers

此时系统中只有一位委员(账户A),生效阈值=有效票/总票数=1/1=1>0.5,所以立即 生效。
在 1 号控制台输入如下命令,修改账户A的权重为 2
updateCommitteeMemberWeight
0xa29f51b088808a08497d04897da9700475a6716d 2

此时系统中存在两个委员(账户A和账户C),因此账户A投票后不能立即生效,还需要 账户C进行投票才能生效。
在 3 号控制台输入如下命令,修改账户A的权重为 2
updateCommitteeMemberWeight
0xa29f51b088808a08497d04897da9700475a6716d 2

账户C投票后,有效阈值=有效票/总票数=2/2=1>0.5,立即生效,账户A的权重修改为 2。
在 1 号控制台输入如下命令,查看账户A的权重
queryCommitteeMemberWeight
0xa29f51b088808a08497d04897da9700475a6716d
在 1 号控制台输入如下命令,查看账户C的权重
queryCommitteeMemberWeight
0x3eddcbf715b02701a1d061ade21fe938642f50a4
在 1 号控制台输入如下命令,添加账户 B 为委员
grantCommitteeMember 0x742bceda913fdc79595198c86634b458027545bc
在 1 号控制台输入如下命令,可查看系统中的委员账户
listCommitteeMembers

修改权重后,账户A的权重为2,账户A投票后,有效阈值=有效票/总票数=2/3>0.5,立 即生效,即不需要账户C再进行投票。
5.修改生效阈值
在 1 号控制台输入如下命令,修改系统的有效阈值为75(默认为50)
updateThreshold 75

此时系统中有三个委员(账户A权重为2,账户B权重为1,账户C权重为1),生效阈值 =有效票/总票数=2/4=0.5=默认有效阈值(0.5),即还需要其他委员投票才能生效。
在 2 号控制台输入如下命令,修改系统的有效阈值为75(默认为50)
updateThreshold 75

在账户B投票成功后,生效阈值=有效票/总票数=3/4=0.75>0.5,修改系统有效阈值的 提议通过。
在 1 号控制台输入如下命令,查询系统有效阈值
queryThreshold
在 1 号控制台输入如下命令,撤销账户C的委员角色
revokeCommitteeMember 0x3eddcbf715b02701a1d061ade21fe938642f50a4

此时系统中有三个委员(账户A权重为2,账户B权重为1,账户C权重为1),生效阈值 =有效票/总票数=2/4=0.5<0.75,即还需要其他委员投票才能生效。
在 2 号控制台输入如下命令,撤销账户C的委员角色
revokeCommitteeMember 0x3eddcbf715b02701a1d061ade21fe938642f50a4
在账户B投票成功后,生效阈值=有效票/总票数=3/4=0.75=0.75,即还需要账户C投票 才能生效。
在 3 号控制台输入如下命令,撤销账户C的委员角色
revokeCommitteeMember 0x3eddcbf715b02701a1d061ade21fe938642f50a4
在账户C投票成功后,生效阈值=有效票/总票数=4/4=1>0.75,立即生效。
(4) 运维账户权限操作
1.新增运维
在 1 号控制台输入如下命令,新增账户C为运维账户
grantOperator 0x3eddcbf715b02701a1d061ade21fe938642f50a4

运维账户的新增和撤销不需要投票操作,由委员账户授权即可。
在 1 号控制台输入如下命令,查看运维账户列表
listOperators
2.部署调用合约
在 3 号控制台输入如下命令,使用运维账户部署合约
deploy HelloWorld
台输入如下命令,调用刚才部署的合约(合约地址根据自己的实际情 况输入)
call HelloWorld 0x0bbc3309b7eddb87f59c233d4e7dec5280934b21 get
3.冻结和解冻合约
在 3 号控制台输入如下命令,冻结刚才部署的合约(合约地址根据自己的实际情 况输入)
freezeContract 0x0bbc3309b7eddb87f59c233d4e7dec5280934b21
在 3 号控制台输入如下命令,尝试调用合约
call HelloWorld 0x0bbc3309b7eddb87f59c233d4e7dec5280934b21 get
在 3 号控制台输入如下命令,解冻合约(合约地址根据自己的实际情况输入)
unfreezeContract 0x0bbc3309b7eddb87f59c233d4e7dec5280934b21

4.撤销运维账户
在 1 号控制台输入如下命令,撤销账户C的运维权限
revokeOperator 0x3eddcbf715b02701a1d061ade21fe938642f50a4
在 1 号控制台输入如下命令,查看运维账户列表
listOperators

相关文章:
区块链的搭建和运维4
区块链的搭建和运维4 (1) 搭建基于MySQL分布式存储的区块链 1.构建单群组网络节点 使用开发部署工具构建单群组网络节点,命令如下: bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,85452. 启动 MySQL 并设置账户密码 输入如下命令,…...
数据驱动决策:内容数据产品经理的成长与价值
数据驱动决策:内容数据产品经理的成长与价值 内容数据产品经理以数据为媒介,在用户与决策之间搭建桥梁,通过理解分析模型和用户决策路径,设计产品以促成更多决策产出,创造用户价值。例如,在衡量数据产品经理…...
pyinstaller 打包python 提示 object has no attribute
参考: 错误:gi.repository.BlockDev’ object has no attribute plugin_specs_from_names 查看包路径 rpm -ql python3-blockdev/usr/lib64/python3.7/site-packages/gi/overrides/BlockDev.py /usr/lib64/python3.7/site-packages/gi/overrides/__pyca…...
ubuntu20.04搭建RUST开发环境并与C语言交互
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ubuntu20.04搭建RUST开发环境并与C语言交互 前言开战一、确认环境版本二、环境搭建三、hello world!四、跟c语言进行交互1.rust调用C静态库2.C调用rust库 总结参考…...
C语言 ——— 学习、使用memmove函数 并模拟实现
目录 memmvoe函数的功能 学习memmove函数编辑 模拟实现memmove函数 memmvoe函数的功能 memmvoe函数的功能类似于memcpy函数,都是内存拷贝,唯一的区别是memcpy函数不能成功拷贝原数据,而memmvoe函数可以 举例来说: [1, 2, 3…...
职场中必须明白的三个道理,不明白无出头之日,你越早知道越好
职场中有很多优秀的人才,他们工作能力出众,为人处事也非常的善良,但是有时候,这样的优点反而成了他们在职场中被欺负的原因,因为他们太善良,很容易被别人利用,为了自己的利益,有些人…...
做webserver项目的一些问题和思路总结
1.webserver是做什么的?这个项目最后想实现什么? 网络服务器,是一个处理HTTP请求并返回HTTP响应的程序。(socket实现的是网络编程,不一定是HTTP,还有其他协议,具体协议由端口来确定)…...
大数据-70 Kafka 高级特性 物理存储 日志存储 日志清理: 日志删除与日志压缩
点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...
基于S7-200 SMART实现PID控制仿真实验
关键字:Matalb;S7-200 SMART;Modbus TCP;PID控制 系列文章目录 基于S7-200 SMART实现一键启停 顺序功能图——(二)设计机组延时关机程序 基于S7-200 SMART实现Modbus TCP通信 基于S7-200 SMART实现MATLAB写…...
社交及时通讯平台完整版源码,uniapp技术,可打包成app
源码简介: 全原生,从底层开始结构就完全不一样,mongodb的库,uniapp混编手端,二开难度要比视酷或者酷信容易很多。全开源,带开发文档。前端用的是uniapp技术,所以是多端合一,可以做h…...
TensorFlow和Pytorch是什么?干什么用的?
TensorFlow和Pytorch都是机器学习框架,允许用户自定义开发机器学习模型(利用已经实现好的神经网络层)。 1. 加载和预处理数据 加载数据:使用合适的库(如 Pandas、Numpy 或 TensorFlow 的数据处理 API)从文…...
采购人可否自行选择采购方式?|数智化招采系统支持多种采购方式
采购人是否有权自行确定采购方式,主要取决于采购项目的性质和规模,特别是是否达到公开招标的数额标准。 一、达到公开招标数额标准以上的项目 《中华人民共和国政府采购法实施条例》第二十三条规定:“采购人采购公开招标数额标准以上的货物…...
ubuntu dde 改为中文
在 Ubuntu Deepin Desktop Environment (DDE) 中,如果已经将系统语言设置为中文,但系统菜单仍然显示英文,可以尝试以下步骤解决: 检查语言设置:确保你的系统语言已经正确设置为中文。你可以在“系统设置”->“区域和…...
Nginx配置小细节,location和proxy_pass 斜杠/ 问题
理解nginx的配置有助于理解前后端调用的过程,这里是location与proxy_pass需要注意的点 location 不带斜杠 的是模糊匹配,例如 location /abc 可以匹配 /abc/index.html,也可以匹配 /abcd/index.html location 带斜杠的是固定匹配,…...
java 解析 PDF OFD 发票 部分文字缺失
1、pdfbox https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox 到这里用最新的版本 最近碰到发票各式各样,千奇百怪:记录其中一个 解析出来是:缺少一个通字 发票好几处都缺少文字,解析出来的是 一个 圆点 原因&…...
C/C++数字与字符串互相转换
前言: 在C/C程序中,会需要把数字与字符串做出互相转换的操作,用于实现程序想要的效果。下面将介绍多种方法实现数字与字符串互相转换。 字符串转为数字 一、利用ASCII 我们知道每个字符都有一个ASCII码,利用这一点可以将字符-0…...
[Spring] Spring AOP
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...
鸿蒙 webview 实现顶部 Progress进度条
1, 先看效果 2, 直接cv代码 import web_webview from ohos.web.webview;interface PerUrl {url: string,age: number } Component export struct webviews {controller: web_webview.WebviewController new web_webview.WebviewController();ports: web_webview.WebMessageP…...
Pytest-BDD实现接口自动化测试,并附全部代码
引言 在之前的文章中简单的介绍了怎么使用Pytest-BDD进行接口测试,可以参考《pytest-bdd 行为驱动自动化测试》。本篇文章主要介绍使用Pytest-BDD实现接口自动化测试。后面的文章会介绍生成测试报告,和流程性接口测试。 feature文件 首先我们先整理好…...
Sqli-labs-master靶场--布尔盲注
目录 1、布尔盲注 2、布尔盲注的流程(以靶场less-8为例) 2.1输入id尝试是否存在注入点 2.1.1通过以上尝试,联想到可能是布尔盲注 2.2猜测数据库长度 2.3获取数据库名 2.3.1python脚本获取 代码: 获取结果为: …...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
