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

2024-08-22 18:20

本文主要是介绍区块链知识体系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

这篇关于区块链知识体系fisco-bcos实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1097043

相关文章

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.