当前位置: 首页 > news >正文

区块链知识体系fisco-bcos实战

文章目录

  • 一、区块链发展概述及类型和特征
    • 1.1 区块链的概念
    • 1.2 区块链的起源
    • 1.3 区块链的发展历程
    • 1.4 区块链的类型和特征
  • 二、区块链的常见技术架构
    • 2.1 技术架构
    • 2.2 核心技术
  • 三、区块链的常见应用
    • 3.1 生态环境监测
    • 3.2 医疗废弃物追踪解决
    • 3.3 区块链在电子政务领域的应用
    • 3.4 在物流与物流金融上的应用
    • 3.5 在大数据物联网结合的应用
  • 四、区块链的应用系统价值和趋势
    • 4.1 区块链应用系统的价值
    • 4.2 区块链的核心商业模式
    • 4.3 区块链的发展趋势和挑战
  • 五、密码学基础
    • 5.1 对称密码体系
    • 5.2 公钥密码体系
    • 5.3 哈希算法
  • 六、区块链中的英文专业术语
  • 七、FISCO BCOS 实战
    • 7.1 搭建单群组网络FISCO BCOS联盟链
    • 7.2 搭建星型拓扑网络FISCO BCOS联盟链
    • 7.3 搭建并行多组网络FISCO BCOS联盟链
    • 7.4 RPC 调用和配置及使用控制台
    • 7.5 区块链扩容和退出
    • 7.6 基于mysql分布式存储区块链
    • 7.7 基于控制台理解账户和角色
    • 7.8 共识异常模拟
    • 7.9 WeBASE管理平台

节选自b站内容和公司内部培训内容,并通过fisco-bcos实战,可初步了解区块链的一些技术体系

一、区块链发展概述及类型和特征

1.1 区块链的概念

在这里插入图片描述

在这里插入图片描述

区块链是黑科技,其实并没有发明新技术,是一系列技术的组合。区块链:信任的机器.

在这里插入图片描述在这里插入图片描述

1.2 区块链的起源

在这里插入图片描述

1.3 区块链的发展历程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.4 区块链的类型和特征

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、区块链的常见技术架构

2.1 技术架构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 核心技术

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

三、区块链的常见应用

3.1 生态环境监测

在这里插入图片描述

3.2 医疗废弃物追踪解决

在这里插入图片描述

3.3 区块链在电子政务领域的应用

在这里插入图片描述

3.4 在物流与物流金融上的应用

在这里插入图片描述

3.5 在大数据物联网结合的应用

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、区块链的应用系统价值和趋势

4.1 区块链应用系统的价值

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2 区块链的核心商业模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3 区块链的发展趋势和挑战

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
挑战
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

五、密码学基础

5.1 对称密码体系

对称密码是一种加密方法,其中使用相同的密钥进行加密和解密。这种加密方法的优点是速度快,适合大量数据的加密。但是,它的主要缺点是密钥的分发和管理非常困难,因为每个通信双方需要共享一个唯一的密钥,而且这个密钥必须保密。如果密钥被泄露,那么加密的数据就可能被破解。常见的对称加密算法有DES、AES、RC4等。谍战片中的密码

在这里插入图片描述

5.2 公钥密码体系

公钥密码体系是一种加密方法,其中使用一对密钥进行加密和解密。这对密钥由一个公钥和一个私钥组成,公钥用于加密数据,私钥用于解密数据。这种加密方法的优点是密钥的分发和管理相对容易,因为公钥可以公开,而私钥只需要保密。此外,它还提供了数字签名的功能,可以验证消息的来源和完整性。但是,它的主要缺点是加密和解密的速度相对较慢,不适合大量数据的加密。常见的公钥加密算法有RSA、ECC等

在这里插入图片描述

5.3 哈希算法

哈希算法是一种将任意长度的数据映射为固定长度的输出的算法,通常用于数据的完整性验证和密码存储。哈希算法的主要特性是:

确定性:相同的输入总是产生相同的输出。
快速计算:对任意给定的数据能够快速计算出其哈希值。
抗碰撞性:难以找到两个不同的输入,使得它们有相同的输出。
雪崩效应:输入的微小变化会导致输出的巨大变化。
哈希算法在密码学中有着广泛的应用,例如在数字签名、数据完整性验证和安全存储密码等领域。常见的哈希算法有MD5、SHA-1、SHA-256等

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、区块链中的英文专业术语

4a3e48f8b53c260ca10d824b.png)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、FISCO BCOS 实战

FISCO BCOS 2.0 技术文档
https://fisco-bcos-documentation.readthedocs.io/zh-cn/latest/
WeBASE 技术文档
https://webasedoc.readthedocs.io/zh-cn/latest/index.html
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.1 搭建单群组网络FISCO BCOS联盟链

 openssl versionwget --versionsudo apt install -y openssl curlmkdir fisco && cd fiscocurl -#LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v2.11.0/build_chain.sh && chmod u+x build_chain.shls0f -i:30300-30303lsof -i:20200-20203lsof -i:8545-8548bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545
pkill -9 fisco-bco
./nodes/127.0.0.1/start_all.sh 
ps -ef | grep -v grep | grep fisco-bcos
ss -ntlp |grep fisco-bcos
# 查看节点连接数
tail -f nodes/127.0.0.1/node0/log/log*  | grep connected
# 查看节点共识
tail -f nodes/127.0.0.1/node0/log/log*  | grep +++

7.2 搭建星型拓扑网络FISCO BCOS联盟链

区块链是一种分布式数据库技术,它通过去中心化的方式记录和验证交易信息。在区块链网络中,节点是参与网络的计算机或服务器,它们共同维护着整个区块链的状态。

机构通常指的是组织、公司或政府等实体,它们可以作为区块链网络中的参与者,拥有自己的节点,并参与到区块链的交易和共识过程中。这些机构可以通过区块链技术实现去中心化的数据交换、智能合约执行等功能。

群组是指一组具有共同目标或兴趣的人或实体,他们可以在区块链网络上形成一个子网络,共享信息和资源。群组可以是公开的,任何人都可以加入;也可以是私有的,只有特定的成员才能加入。群组的成员可以通过共识机制来达成共识,共同管理和维护群组内的区块链网络。

总的来说,区块链节点是区块链网络的基本组成部分,机构和群组则是区块链网络中的参与者和组织形式。通过这些参与者和组织,区块链可以实现去中心化的信任机制,确保数据的安全性和可靠性。

在这里插入图片描述

vim ipconf
......
127.0.0.1:1 A 1,2,3
127.0.0.1:1 B 1,
127.0.0.1:1 C 2
127.0.0.1:1 D 3
......
#p2p channel jsonrpc
bash build_chain.sh -f ipconf -p -30300,20200,8545
# 启动
bash nodes/127.0.0.1/start_all.sh 
# 查看进程
ps -ef | grep -v grep | grep fisco-bcos
# 查看节点连接数
tail -f nodes/127.0.0.1/node0/log/log*  | grep connected
# 查看节点共识
tail -f nodes/127.0.0.1/node0/log/log*  | grep +++

7.3 搭建并行多组网络FISCO BCOS联盟链

# -o 指定生成文件所在目录
bash build_chain.sh -l 127.0.0.1:4 -o multi_nodes -p 30300,20200,8545
bash multi_nodes/127.0.0.1/start_all.sh
# 查看节点共识
tail -f nodes/127.0.0.1/node0/log/log*  | grep +++
# 将群组2加入区块链.
# nodes/127.0.0.1/node0/conf/
# 并行多组区块链中,每个群组的ini文件相同,但genesisi中【group.id】不同,
# 减少路径输入麻烦,先进入路径
cd multi_nodes/127.0.0.1
# cp
cp node0/conf/group.1.genesisi node0/conf/group.2.genesisi
sed -i "s/id=1/id=2/g" node0/conf/group.2.genesisi
cp node0/conf/group.2.genesisi node1/conf/group.2.genesisi
cp node0/conf/group.2.genesisi node2/conf/group.2.genesisi
cp node0/conf/group.2.genesisi node3/conf/group.2.genesisicp node0/conf/group.1.ini node0/conf/group.2.ini
cp node0/conf/group.2.ini node1/conf/group.2.ini
cp node0/conf/group.2.ini node2/conf/group.2.ini
cp node0/conf/group.2.ini node3/conf/group.2.inistop_all.sh && start_all.sh
tail -f nodes/127.0.0.1/node0/log/log*  | grep +++

在这里插入图片描述

方法2

vim ipconf
.........
127.0.0.1:4 A 1,2
........
bash build_chain.sh  -o multi_nodes -f ipconf -p 30300,20200,8545

国密版FISCO BCOS联盟

bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545 -g -G

7.4 RPC 调用和配置及使用控制台

RPC(Remote ProcedureCall)是一种远程过程调用协议,它允许一台计算机上的程序调用另一台计算机上的程序的子程序或函数。
RPC的主要目的是让分布式系统中的各个节点能够像调用本地函数一样调用其他节点上的函数或服务

#创建一个 JSON-RPC 请求对象,包含以下字段: 
#jsonrpc: 协议版本,通常为 "2.0"。 
#method: 要调用的远程方法的名称。
#params: 传递给远程方法的参数(可选)
#2.0启用了多账本机制,本规范要求传入的第一个参数必须为群组ID。 
#id: 请求的唯一标识符(可选,但推荐使用)
#|jq:将curl命令的输出通过管道传递给jq命令进行处理。
#jq是一个轻量级且灵活的命令行JSON处理器,用于解析、过滤和格式化JSON数据。
# 获取节点版本信息
# 8545为node0的信息
curl  -X  POST --data '{"jsonrpc": "2.0",
"method": getClientVersion,"params":[1],"id":1}' 
http://127.0.0.1:8545 |jq
# 获取节点连接信息
getPeers
# 查看区块高度
getBlockNumber
# 查看区块信息
getBlockByNumber

配置和使用控制台

tar -xf consle.tar.gz
tree consle
#将节点sdk证书拷贝到控制台conf下
#-r 文件和文件夹
cp nodes/127.0.0.1/sdk/*  consle/conf/
cp -r nodes/127.0.0.1/sdk/* console/conf/
#将conf下config-example.toml文件重命名config.toml
#-n 不覆盖存在的
cp consle/conf/config.toml consle/conf/config.toml
cp -n console/conf/config-example.toml console/conf/config.toml
ls consle/conf/
# 启动控制台
bash console/start.sh

在这里插入图片描述

在FISCO-BCOS区块链系统中,有三种不同类型的节点,它们在网络中各自承担着不同的角色和功能。具体包括:

记账节点(共识节点):记账节点是网络中参与共识算法,并负责验证交易、打包区块的节点。这些节点通过共识算法来确认交易的有效性,并将有效的交易打包成区块添加到区块链上。记账节点的数量可以根据实际需求进行配置,但必须至少为一个。
观察节点:观察节点不参与共识流程,但它们可以同步区块信息和交易数据,起到观察和备份的作用。这种类型的节点适用于只需要查看链上数据,而不需要参与共识的场景。
群组节点:群组节点则是承载某个群组内多个相关联组织的节点集合,这些组织可能共享某些业务数据或需要在同一群组内进行协同工作。群组节点有助于实现跨组织的数据共享和业务合作。
在这里插入图片描述

#查看群组共识节点列表
getSealerList
#查看群组观察节点列表
getOberverList
#查看连接p2p节点的nodeID列表
getNodeIDList# 查看node0的nodeid
cat fisco/nodes/127.0.0.1/node0/conf/node.nodeid
# 获取节点连接信息中有id和端口
getPeers#设置共识节点
addSealer c1bd77e188cd07。。。。。。
#设置观察节点
addObserver c1bd77e188cd07。。。。。。
#设置游离节点
removeNode c1bd77e188cd07。。。。。。# 验证游离节点 quit
vim console/conf/config.toml
.........
peers=["127.0.0.1:20201"]
.........
# 启动控制台游离节点登录失败
bash console/start.sh

在这里插入图片描述

7.5 区块链扩容和退出

# -c 指定机构证书及私钥所在路径
# -o 输出到指定文件夹,其中node4/conf 中会保存机构agency新签的发证和私钥
bash gen_node_cert.sh -c nodes/cert/agency -o nodes/127.0.0.1/node4
tree nodes/127.0.0.1/node4
# 准备节点配置文件
cd nodes/127.0.0.1
cp node0/conf/group.1.genesis node0/conf/group.1.ins node4/conf/
cp node0/config.ini node0/start.sh node0/stop.sh node4/
vim node4/config.ini.........[rpc]channel_listen_port=20204jsonrpc_listen_port=8549[p2p]node.4=127.0.0.1:30304.........# 将新节点加入区块链bash node4/start.shtail -f node4/log/log*|grep connected# 将节点加入群组cat node4/conf/node.nodeidbash ../../console/start.sh#控制台输入addSealer  node.nodeid#查看getSealerList#退出
removeNode node.nodeid
quit
#分号注释掉
vim node4/config.ini
..........
[p2p];node.1=127.0.0.1:30301;node.2=127.0.0.1:30302;node.3=127.0.0.1:30303;node.4=127.0.0.1:30304
........
bash node4/stop.sh && bash node4/start.sh
# connect=0 退网成功
tail -f node4/log/log*|grep connected

7.6 基于mysql分布式存储区块链

# 安装nodes console后,安装配置mysql
apt install msyql-server mysql-client  libmysqlclient-dev
service mysql start 
systemctl start mysql.services
mysql -uroot -p
#用户密码存储在mysql数据库的user表中,对应的字段是authentication_string。authentication_string字段中存储的是经过加密的密码,不应直接对其进行修改。如果需要修改用户密码,请使用alter user命令进行修改
>ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
# 注意需要加WITH mysql_native_password
> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
>quit
vim /etc/msyql/my.cnf
.........22 [mysqld]23 max_allowed_packet = 1024M24 sql_mode = STRICT_TRANS_TABLES25 ssl = 026 default_authentication_plugin = mysql_native_password
.........
> show variables like 'max_allowed_packet';
vim nodes/127.0.0.1/node0/conf/group.1.ini
.........19 [storage]21     type=mysql35     db_ip=127.0.0.136     db_port=330637     db_username=root38     db_passwd=12345639     db_name=db_node0
........
# 启动
bash nodes/127.0.0.1/start_all.sh
#使用控制台操作curd
bash consele/start.sh
create table t_demo(name varchar,it_name varchar,it_id varchar primary key(name))
insert into t_demo(name,it_name,it_id) values (fruit,orage,1)

7.7 基于控制台理解账户和角色

# 脚本生成账户
# 生成pem格式存储的账户私钥
bash  ./console/get_account.sh
# 从私钥文件计算账户地址
bash ./console/get_account.sh -k account/*.pem
# 生成pkcs12格式存储的私钥
bash  ./console/get_account.sh -p
# 从私钥文件计算账户地址
bash ./console/get_account.sh -P account/*.12

在这里插入图片描述

newAccount
newAccount p12 123456
listAccount
loadAccount ...*...
# 按某用户启动
bash console/start.sh 1 console/account/ecdsa/*.pem
bash console/start.sh 1 -p12 console/account/ecdsa/*.p12

在这里插入图片描述

角色

#增加委员
grantCommitteeMember id
listCommitteeMember id
#撤销委员
revokeCommitteeMember id
#修改权重
updateCommitteeMemberWeight id 2
#查询权重
queryCommitteeMemberWeight id
#查询阈值
queryThreshold
#mysql中查询
>select*from _sys_table_access_;
#新增运维账户
grantOperator id
listOperator
revokeOperator id
# 部署合约
deploy HelloWorld
# 调用合约
call HelloWorld contractaddress get

在这里插入图片描述

黑白名单

#
cat nodes/127.0.0.1/node1/conf/node.node.id
vim nodes/127.0.0.1/node0/config.ini
# 黑名单能够拒绝与指定节点的配置,
# 白名单不配置,可与任意节点连接
#混合设置会在白名单的基础上拒绝黑名单里的节点连接
.........
[certificate_blacklist]
crl.0=
crl.1=
[certificate_whitelist]
crl.0=
.........
bash nodes/127.0.0.1/node0/stop.sh && start.sh
curl  -X  POST --data '{"jsonrpc": "2.0",
"method": "getPeers","params":[1],"id":1}' 
http://127.0.0.1:8545 |jq
# 或设置控制台只运行连接node0vim console/conf/config.toml
.........21 [network]22 #peers=["127.0.0.1:20200", "127.0.0.1:20201"]    # The peer list to connect23 peers=["127.0.0.1:20200"]    # The peer list to connect
.........
bash console/start.sh
getPeers
##SDK白名单设置
# 不通过
vim nodes/127.0.0.1/node0/conf/group.1.ini
.......
73 [sdk_allowlist]
77       public_key.0=b8acb51b9fe84f88d70646be36f31c52e67544ce56faf3dc8ea4cf1b0ebff0864c6b218fdcd9cf9891ebd414a995847911bd26a77of4293000    85f37e1131f36
.......
bash nodes/127.0.0.1/node0/scripts/reload_sdk_allowlist.sh
# 通过
cat nodes/127.0.0.1/node0/sdk/sdk.publikey
vim nodes/127.0.0.1/node0/conf/group.1.ini
bash nodes/127.0.0.1/node0/scripts/reload_sdk_allowlist.sh

7.8 共识异常模拟

关闭node2,node3后共识异常

在这里插入图片描述
将异常点改为观察点

# 关闭node0,node1
# 分别在node0 ,和node1上修改观察者。
update _sys_consensus_ set type='observer' where id ='10006'
# 重新再启动node0,node1后可以执行合约
#node2,node3恢复后,在node2,node3上将改为共识节点

在这里插入图片描述

7.9 WeBASE管理平台

#节点前置服务部署
unzip webase-front.zip
cp ../nodes/127.0.0.1/sdk/* ./conf/
bash start.sh
bash status.sh
tail -f log/WeBASE-Front.log |grep success
http://localhost:5002/WeBASE-Front
# 管理部署
unzip webase-deploy.zip
cd webase-deploy
vim common.properties
........
配置数据库
........
python3 deploy.py installALL
localhost:5800

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Nature同款富集分析结果条形图叠加基因
  • ros发布图像
  • nacos配置持久化到Mysql数据库
  • Gartner发布2024年应用安全成熟度曲线:26项应用安全最新技术发展及应用状况和趋势
  • 深入解析Python的Pandas库:数据分析的利器(二)
  • 解决STM32使用J-Link可以擦除和读取但是无法烧录问题
  • Linux文件编程(进阶)
  • 每日刷一刷力扣SQL(八)
  • 综合评价 | 基于层次-熵权-变异系数-正态云组合法的综合评价模型(Matlab)
  • java 使用 aws s3 sdk 通过分段下载来实现 html 页面 video 的断点播放、拖动进度播放
  • 小程序面试题一
  • 【SAM下游任务微调】TS-SAM: Fine-Tuning Segment-Anything Model for Downstream Tasks
  • DDoS攻击的应对策略
  • 小程序学习day13-API Promise化、全局数据共享(状态管理)、分包
  • 探索安全领域的新星:哈希函数SHA3-512
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [deviceone开发]-do_Webview的基本示例
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • ES6核心特性
  • ES6系列(二)变量的解构赋值
  • golang中接口赋值与方法集
  • javascript从右向左截取指定位数字符的3种方法
  • Java多线程(4):使用线程池执行定时任务
  • leetcode46 Permutation 排列组合
  • maven工程打包jar以及java jar命令的classpath使用
  • Vue 重置组件到初始状态
  • 百度地图API标注+时间轴组件
  • 构建二叉树进行数值数组的去重及优化
  • 解决iview多表头动态更改列元素发生的错误
  • 你真的知道 == 和 equals 的区别吗?
  • 探索 JS 中的模块化
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • $.each()与$(selector).each()
  • $L^p$ 调和函数恒为零
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (4)logging(日志模块)
  • (arch)linux 转换文件编码格式
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (ZT)一个美国文科博士的YardLife
  • (二)测试工具
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (万字长文)Spring的核心知识尽揽其中
  • (转)http协议
  • (轉)JSON.stringify 语法实例讲解
  • **PHP分步表单提交思路(分页表单提交)
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .net 程序发生了一个不可捕获的异常
  • .NET 解决重复提交问题