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

news2024/9/20 9:34:46

 

 苏泽

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

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


我前面有补充相关的区块链的知识 如果没有了解的话 可能部分概念或名词会不懂哦 建议先了解一波再来看~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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

灯塔:CSS笔记(4)

伪类选择器: 1.作用与优势: 1.作用:根据元素在HTML中的结构关系查找元素 2.优势:减少对于HTML中类的依赖,有利于保持代码的整洁 3.场景:常用于查找某父级选择器中的子元素 2.选择器 选择器说明E:first-c…

关于UE的相机震动CameraShake

创建CameraShake资源 CameraShake配置是个蓝图类,我们选择创建BlueprintClass,父类选择CameraShakeBase即可。 参数调整 目前主要用到了 LocationAmplitudeMultiplier 1 LocationFrequencyMultiplier 10 RotationAmplitudeMultiplier 1 Rotation…

【3月16日-云服务器推荐】京东云降价了!!4折变2折 阿里云 腾讯云最新价格对比 选购指南 搭建博客 游戏服务器均可多用

3月16日更新,京东云又双叒降价了! 《最新对比表》已更新在文章头部—腾讯云文档,文章具有时效性,请以腾讯文档为准! 【腾讯文档实时更新】云服务器1分钟教会你如何选择教程 https://docs.qq.com/document/DV0RCS0lGeH…

Leet code 179 最大数

解题思路 贪心算法 贪心算法就是走一步看一步 每一步都取当前位置的最优解 这题我们该如何贪呢? 我们先把int数组转换为string数组 以示例2为例 3 30 34 5 9 排序哪个在前哪个在后? 3 30 (330)> 30 3 (30…

免费阅读篇 | 芒果YOLOv8改进110:注意力机制GAM:用于保留信息以增强渠道空间互动

💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 该专栏完整目录链接: 芒果YOLOv8深度改进教程 该篇博客为免费阅读内容,直接改进即可🚀🚀&#x1f…

leetcode每日一题--矩阵中移动的最大次数

一.题目原型 二.思路解析 1.动态规划 这道题要求的是矩阵的最大移动次数。根据题目意思,从索引 0 列开始向右移动,每次移动一列,最多移动到 n - 1 列,也就是 n - 1次。其移动规则为:当前单元格可以移动到其右上方、正…

安装PYQT5 遇到Microsoft Visual C++ 14.0 is required解决方法

# Time: 2024/03/16 #Author: Xiaohong # 运行环境: OS: Windows 7 旗舰版 # Python: 3.7.9 Pyqt5 # 目的: 解决安装PYQT5 遇到Microsoft Visual C 14.0 is required 1.安装PYQT5时,遇到Microsoft Visual C 14.0 is required,如图 2.查Microsoft…

Yolo系列算法-理论部分-YOLOv1

0. 紧接上一篇目标检测算法的介绍 基于深度学习的目标检测算法概述-CSDN博客 本篇YOLO算法系列,参考优秀作者-AI菌,文章链接:YOLO系列算法精讲:从yolov1至yolov8的进阶之路(2万字超全整理)_yolov9-CSDN博…

MySQL:SQL优化

1. 插入优化 使用insert语句单条单条数据插入效率偏低,建议使用insert批量插入数据,批量控制在500-1000条数据较为合适,当面对数以百万的数据时,可以使用load指令,提升插入数据效率 相关指令 #客户端连接服务端加上参…

2.3 HTML5新增的常用标签

2.3.1 HTML5新增文档结构标签 在HTML5版本之前通常直接使用<div>标签进行网页整体布局&#xff0c;常见布局包括页眉、页脚、导航菜单和正文部分。为了区分文档结构中不同的<div>内容&#xff0c;一般会为其配上不同的id名称。例如&#xff1a; <div id"h…

145 Linux 网络编程1 ,协议,C/S B/S ,OSI 7层模型,TCP/IP 4层模型,

一 协议的概念 从应用的角度出发&#xff0c;协议可理解为“规则”&#xff0c;是数据传输和数据的解释的规则。 典型协议 传输层 常见协议有TCP/UDP协议。 应用层 常见的协议有HTTP协议&#xff0c;FTP协议。 网络层 常见协议有IP协议、ICMP协议、IGMP协议。 网络接口层 常…

关于振弦采集仪的应用编写

instruction&#xff1a; 1、本应用基于深圳市安传物联科技有限公司所生产的八通道振弦变送器产品。该产品为MAX485 信号的变送设备&#xff0c; 并以Modbus协议输出。 2、本应用采用python语言编写。 功能实现&#xff1a; 1、发送&#xff1a; 01 03 10 00 00 02 C0 CB并…

Android分区存储到底是怎么回事

文章目录 一、Android存储结构二、什么是分区存储&#xff1f;三、私有目录和公有目录三、存储权限和分区存储有什么关系&#xff1f;四、我们应该该怎么做适配&#xff1f;4.1、利用File进行操作4.2、使用MediaStore操作数据库 一、Android存储结构 Android存储分为内部存储和…

Linux安装vLLM模型推理框架问题总汇

简介 vLLM 是一个专为大规模语言模型&#xff08;Large Language Models, LLM&#xff09;推理优化的服务框架和推理引擎。它可以高效地管理和部署预先训练好的大型语言模型&#xff0c;尤其是那些具有极高参数数量和复杂度的模型&#xff0c;如GPT系列及其他基于Transformer架…

算法打卡day19|二叉树篇08|Leetcode 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

算法题 Leetcode 235. 二叉搜索树的最近公共祖先 题目链接:235. 二叉搜索树的最近公共祖先 大佬视频讲解&#xff1a;二叉搜索树的最近公共祖先视频讲解 个人思路 昨天做过一道二叉树的最近公共祖先&#xff0c;而这道是二叉搜索树&#xff0c;那就要好好利用这个有序的特点…

数据库-mysql安装

我们使用两种方式安装配置mysql数据库 一种采用无安装绿色版 一种采用官方提供的msi&#xff0c;windows安装版 亲测两种都可运行&#xff0c;有的电脑可能其中一种不能运行那可以尝试另外一种&#xff0c;有条件的同学可以试试docker版。 mysql安装 初次安装mysql之前建议大家…

代码随想录day18(2)二叉树:翻转二叉树(leetcode226)

题目要求&#xff1a;将一棵二叉树翻转 思路&#xff1a;若想要翻转二叉树&#xff0c;只需要用swap函数将左右孩子节点翻转即可。注意前序和后序遍历均可&#xff0c;但是对于中序来说会将某些结点的左右孩子翻转了两次&#xff08;画图很明显&#xff09;&#xff0c;硬要用…

工作总结!日志打印的11条建议

前言 大家好&#xff0c;我是 JavaPub。日志是我们定位问题的得力助手&#xff0c;也是我们团队间协作沟通&#xff08;甩锅&#xff09;、明确责任归属&#xff08;撕B&#xff09;的利器。没有日志的程序运行起来就如同脱缰的野&#x1f40e;。打印日志非常重要。今天我们来…

开发指南005-前端配置文件

平台要求无论前端还是后端&#xff0c;修改配置可以直接用记事本修改&#xff0c;无需重新打包或修改压缩包里文件。就前端而言&#xff0c;很多系统修改配置是在代码里修改&#xff0c;然后打包或者是修改编译环境来重新编译。 平台前端的配置文件为/static/js/下qlm_config.j…

家电工厂5G智能制造数字孪生可视化平台,推进家电工业数字化转型

家电5G智能制造工厂数字孪生可视化平台&#xff0c;推进家电工业数字化转型。随着科技的飞速发展&#xff0c;家电行业正迎来一场前所未有的数字化转型。在这场制造业数字化转型中&#xff0c;家电5G智能制造工厂数字孪生可视化平台扮演着至关重要的角色。本文将从数字孪生技术…