深入浅出FISCO BCOS:区块链底层平台

 

 苏泽

大家好 这里是苏泽 一个钟爱区块链技术的后端开发者

本篇专栏 ←持续记录本人自学两年走过无数弯路的智能合约学习笔记和经验总结 如果喜欢拜托三连支持~


我前面有补充相关的区块链的知识 如果没有了解的话 可能部分概念或名词会不懂哦 建议先了解一波再来看~http://t.csdnimg.cn/0XPyA

目录

我前面有补充相关的区块链的知识 如果没有了解的话 可能部分概念或名词会不懂哦 建议先了解一波再来看~http://t.csdnimg.cn/0XPyA

FISCO BCOS是什么?

架构与设计

流程

发包

收包

接口层

调度层

模块1:共识(Consensus)模块

​编辑

模块2:同步(Sync)模块

如何启动!?

很简单! 一共就两步


FISCO BCOS是什么?

FISCO BCOS是一个金融级、国产安全可控的区块链底层平台,由深圳市金融区块链发展促进会(金链盟)开源工作组牵头研发。作为最早开源的国产联盟链底层平台之一,FISCO BCOS于2017年面向全球开源

架构与设计

大概就是分为那么几个层 往深了讲可以讲几天几夜 我就挑 作为一个应用级别的开发者哈需要关注的大概就是那么几个地方:

流程

发包

以node0的第一组向node1的第一组发送消息packetA为例:

  1. group1将消息packetA传递到网络层。

  2. 网络层模块对packetA进行编码,将本群组ID添加到packetA的包头,形成新的数据包{groupID(1) + packetA}。

  3. 网络层访问账本白名单,判断node0是否是group1的节点。如果node0不是group1的节点,网络层会拒绝发送数据包。但如果node0是group1的节点,网络层会将编码后的数据包发送给目标节点node1。

收包

当node1接收到来自node0的数据包{groupID(1) + packetA}时:

  1. 网络层会查询账本白名单,检查源节点node0是否是group1的成员。如果node0不是group1的成员,网络层会拒绝该数据包;如果node0是group1的成员,网络层会将数据包传递给解码模块。

  2. 解码模块会从数据包中提取出group ID为1和数据包packetA,并将数据包packetA发送到group1。

接口层

让我们以一个简单的比喻来解释接口层由交易池(TxPool)、区块链(BlockChain)和区块执行器(BlockVerifier)三个模块组成的含义:

假设你是一个公司的项目经理,负责处理公司内部的各种任务和请求。在这个比喻中,你就是调度层,而接口层由三个模块组成。

  1. 交易池(TxPool):交易池就像你的收件箱,它接收来自公司员工或其他部门的新任务和请求。员工们将任务发送到你的收件箱中,而你会将这些任务提供给相关的团队去处理。类似地,交易池接收来自客户端或其他节点的新交易,并将这些交易提供给共识模块进行打包处理。同时,同步模块也可以从交易池中获取新交易进行广播,就像你将任务分发给相关团队一样。

  2. 区块链(BlockChain):区块链就像你的公司档案室,它保存着所有任务的历史记录。当你需要查看过去某个时间点的任务或了解任务执行结果时,你可以向档案室查询相关信息。类似地,区块链模块是你访问底层存储和执行模块的唯一入口。你可以通过区块链模块提交新的区块和区块执行结果,查询历史区块等信息。

    此外,RPC模块可以通过区块链模块获取区块、块高以及交易执行结果等信息,就像你向档案室查询任务历史记录一样。

  3. 区块执行器(BlockVerifier):区块执行器就像你的执行团队,负责实际执行任务。当你将任务分配给执行团队时,他们会按照任务要求进行操作,并将执行结果反馈给你。类似地,区块执行器与调度层进行交互,负责执行调度层传入的区块,并将区块执行结果返回给调度层。它是核心层与调度层之间的重要组件,用于验证和执行区块中的交易逻辑,就像你的执行团队负责执行任务并将结果反馈给你一样。

调度层

模块1:共识(Consensus)模块

共识模块的作用就像是一群人一起决定做什么事情。假设有一个团队,他们需要决定在周末去哪里旅行。每个人都提出了自己的建议,然后大家一起讨论并达成共识。共识模块就像是团队成员,它主要负责执行客户端提交的交易,并确保每个人对交易执行结果的认可。

在共识模块中,有两个重要的部分:打包(Sealer)线程和共识(Engine)线程。打包线程负责从交易池中获取还没有被执行的交易,并将这些交易打包成一个区块。而共识线程则负责对区块执行结果进行共识,确保大家都达成一致意见。目前,常用的共识算法有PBFT和Raft。

共识模块的工作流程如下:

  1. 客户端提交的交易会先缓存到交易池(就像是大家提出的旅行建议被放在一个池子里)。

  2. 当有新的交易进入交易池时,打包线程会被唤醒。打包线程会根据当前最高的区块,从交易池中获取最新的交易,然后打包成一个新的区块。

  3. 打包线程将新的区块传递给共识线程,供共识过程使用。

  4. 共识线程收到新的区块后,启动共识流程。在共识过程中,会调用区块执行器执行区块中的每一笔交易,并确保大家对执行结果达成一致。

  5. 如果共识成功,就会调用区块链模块将新的区块和区块执行结果提交到底层数据库。

  6. 当新的区块成功上链后,交易池会删除已经被打包进区块的交易,并将交易执行结果发送给客户端。

模块2:同步(Sync)模块

同步模块的目标是确保每个团队成员都拥有完整的信息。假设有一个团队,其中的成员分布在不同的地方。为了保持大家的信息一致,每个人会定期向其他人汇报自己的进展。同步模块就像是团队成员之间的信息传递通道,它主要负责交易和区块的同步。

同步模块包括交易同步和区块同步。

交易同步的过程如下:

  1. 当客户端向特定团队的交易池提交新的交易时,交易同步线程会被唤醒。这个线程会将新的交易广播给其他团队的节点,以确保每个团队都有完整的交易信息。

  2. 假设客户端将交易A发送到团队1,将交易B发送到团队2。交易同步线程会将交易A广播给所有团队的节点,而将交易B广播给所有团队的节点。

区块同步的过程如下:

  1. 节点0、节点1和节点2的区块同步线程会定期广播最新区块的高度信息。

  2. 当节点1收到节点0和节点2的最新区块高度后,发现自己的区块高度是3,低于节点0和节点2的最新区块高度6。

  3. 为了保持负载均衡,节点1向节点2请求第4个区块,并向节点0请求第5和第6个区块。

  4. 节点0和节点2接收到节点1的区块请求后,分别将第5和6个区块返回给节点1,节点2还返回第4个区块。

  5. 节点1按照区块的顺序执行第4、5和6个区块,并将最新的区块按顺序提交到底层存储。这样,节点1就与其他节点保持了区块的同步。

如何启动!?

很简单! 一共就两步

  1. 学习如何编写智能合约(本专栏重点介绍solidity语言)相当于就是一门新的编程语言,只是引用了很多不一样的库 还有要学习新的语法
  2. 学习如何使用FISCO BCOS平台理解其部署、安装 、使用方法以及调试、优化等

本篇专栏就是围绕着这两条线进行展开讲解  学习记录的

然后就是最最激动的 实战部分(会随着项目进度陆续发出)

链接摆上、按需食用!:

智能合约:http://t.csdnimg.cn/Ll93z

FISCO BCOS:http://t.csdnimg.cn/a2uNa

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

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

相关文章

kkview远程控制: 内网远程桌面控制软件

内网远程桌面控制软件:高效、安全的远程管理方案 在信息技术日新月异的今天,内网远程桌面控制软件已成为许多企业和个人用户不可或缺的工具。这类软件允许用户通过内部网络,实现对其他计算机的远程访问和控制,从而大大提高工作效…

ARM 寄存器学习:(一)arm多种模式下得寄存器

一.ARM7种状态以及每种状态的寄存器: ARM 处理器共有 7 种不同的处理器模式,在每一种处理器模式中可见的寄存器包括 15 个通用寄存器( R0~R14)、一个或两个(User和Sys不是异常模式,没有spsr寄存器)状态寄存器(cpsr和spsr&…

环形链表2(C++), test ok

1. 题目 2. 思路分析: 与环形链表1一样,我们需要定义慢指针和快指针,确定链表是否有环,如果链表没有环的话,直接置空即可。如果链表有环,则需要向环形链表1一样,让快指针不断追赶慢指针&#x…

Python爬虫:原理与实战

引言 在当今的信息时代,互联网上的数据如同浩瀚的海洋,充满了无尽的宝藏。Python爬虫作为一种高效的数据抓取工具,能够帮助我们轻松地获取这些数据,并进行后续的分析和处理。本文将深入探讨Python爬虫的原理,并结合实战…

6.【Linux】进程间通信(管道命名管道||简易进程池||简易客户端服务端通信)

介绍 进程间通信的方式 1.Linux原生支持的管道----匿名和命名管道 2.System V-----共享内存、消息队列、信号量 3.Posix------多线程、网路通信 进程间通信目的 数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个进程之间共享同样的资源。…

最大异或对(trie树)

题目描述: 思路: 1、首先此题我们要知道异或的规则,这里不赘述了,可以百度 2、如果利用trie树去找到一个数字与其异或能得到最大值 比如二进制数:1010.....是一个很大的数 我们想要异或得到的值更大,就需…

AST解web控制流平坦化

此代码可以解决大部分 while if else 控制流平坦化原理: 先将 if 语句转为 switch 语句,再将 switch 分支合并,最后删除已合并的分支(具体看代码) 实现效果图 首先安装依赖: npm install babel/parser npm…

分布式文件存储与数据缓存(一)| FastDFS

目录 分布式文件系统FastDFS概述_简介FastDFS特性:分布式文件服务提供商 FastDFS概述_核心概念trackerstorageclientgroup FastDFS概述_上传机制内部机制如下 FastDFS概述_下载机制内部机制如下 FastDFS环境搭建_Linux下载安装gcc下载安装FastDFS下载安装FastDFS依赖…

c语言的字符串函数详解

文章目录 前言一、strlen求字符串长度的函数二、字符串拷贝函数strcpy三、链接或追加字符串函数strcat四、字符串比较函数strcmp五、长度受限制字符函数六、找字符串2在字符串1中第一次出现的位置函数strstr七、字符串切割函数strtok(可以切割分隔符)八、…

THM学习笔记—RootMe

nmap扫描,发现22端口和80端口打开 dirsearch扫描,注意到/panel和/uploads,在浏览器中打开 可以上传文件,尝试反弹shell 在尝试过程中发现网站不能上传.php文件,只需要将后缀更改为.php5之类即可 成功 查找文件&#x…

页面事件

下拉刷新事件 1. 什么是下拉刷新 下拉刷新是移动端的专有名词,指的是通过手指在屏幕上的下拉滑动操作,从而重新加载页面数据的行为。 2. 启用下拉刷新 启用下拉刷新有两种方式: ① 全局开启下拉刷新  在 app.json 的 window 节点中&…

Docker常用命令的使用及镜像的构建

1.docker的好处 在开发中可能会遇到一个问题,一个程序在自己电脑上能跑,但是换到服务器上就不行了。如果我们重新搭建环境,需要重新部署mysql,es,redis等组件很麻烦。有了docker之后,我们可以快速完成项目的部署。同时docker的隔…

MyBatis3源码深度解析(十二)MyBatis的核心组件(一)Configuration

文章目录 第四章 MyBatis的核心组件4.1 使用MyBatis操作数据库4.2 MyBatis核心组件4.3 Configuration组件4.3.1 属性4.3.2 设置4.3.3 类型别名4.3.3 类型处理器4.3.5 对象工厂4.3.6 插件4.3.7 配置环境4.3.8 映射器 第四章 MyBatis的核心组件 4.1 使用MyBatis操作数据库 在研…

《操作系统实践-基于Linux应用与内核编程》第10章-Linux综合应用

前言: 内容参考《操作系统实践-基于Linux应用与内核编程》一书的示例代码和教材内容,所做的读书笔记。本文记录再这里按照书中示例做一遍代码编程实践加深对操作系统的理解。 引用: 《操作系统实践-基于Linux应用与内核编程》 作者:房胜、李旭健、黄…

网络通信与网络协议

网络编程是指利用计算机网络实现程序之间通信的一种编程方式。在网络编程中,程序需要通过网络协议(如 TCP/IP)来进行通信,以实现不同计算机之间的数据传输和共享。在网络编程中,通常有三个基本要素 IP 地址:定位网络中某台计算机端口号port:定…

Pyqt5中,QGroupBox组件标题字样(标题和内容样式分开设置)相对于解除继承

Python代码示例: import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QGroupBox, QLabelclass MyApp(QWidget):def __init__(self):super().__init__()# 创建一个 QVBoxLayout 实例layout QVBoxLayout()# 创建 QGroupBox 实例self.grou…

【中等】保研/考研408机试-二叉树相关

目录 一、基本二叉树 1.1结构 1.2前序遍历(注意三种遍历中Visit所在的位置) 1.2中序遍历 1.3后序遍历 二、真题实战 2.1KY11 二叉树遍历(清华大学复试上机题)【较难】 2.2KY212 二叉树遍历二叉树遍历(华中科技大…

王道机试C++第8章递归与分治 Day35和蓝桥杯两道真题程序

第 8 章 递归与分治 递归是指:函数直接或间接调用自身的一种方法,通常可把一个复杂的大型问题层层转化为与原问题相似但规模较小的问题来求解。 递归策略只需少量的程序就可描述解题过程所需的多次重复计算,因此大大减少了程序的代码量。 8.…

OLED 菜单操作

本次介绍一款中景园带字库的OLED显示屏,并基于该模块描述一种菜单操作方法,能够极大的减少显示界面开发工作量。 使用的2.08寸OLED显示屏,字库芯片为GT30L32S4W,支持多种字号中英文。 官方提供了很完善的参考资料,包括…

结构体联合体枚举和位段

文章目录 结构体结构体类型的声明特殊的声明 结构的自引用结构体变量的定义和初始化结构体内存对齐为什么要内存对齐结构体传参结构体实现位段(位段的填充&可移植性)位段位段的内存分配空间如何开辟位段的跨平台问题位段的应用 枚举枚举类型的定义枚…