苏泽
大家好 这里是苏泽 一个钟爱区块链技术的后端开发者
本篇专栏 ←持续记录本人自学两年走过无数弯路的智能合约学习笔记和经验总结 如果喜欢拜托三连支持~
我前面有补充相关的区块链的知识 如果没有了解的话 可能部分概念或名词会不懂哦 建议先了解一波再来看~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为例:
-
group1将消息packetA传递到网络层。
-
网络层模块对packetA进行编码,将本群组ID添加到packetA的包头,形成新的数据包{groupID(1) + packetA}。
-
网络层访问账本白名单,判断node0是否是group1的节点。如果node0不是group1的节点,网络层会拒绝发送数据包。但如果node0是group1的节点,网络层会将编码后的数据包发送给目标节点node1。
收包
当node1接收到来自node0的数据包{groupID(1) + packetA}时:
-
网络层会查询账本白名单,检查源节点node0是否是group1的成员。如果node0不是group1的成员,网络层会拒绝该数据包;如果node0是group1的成员,网络层会将数据包传递给解码模块。
-
解码模块会从数据包中提取出group ID为1和数据包packetA,并将数据包packetA发送到group1。
接口层
让我们以一个简单的比喻来解释接口层由交易池(TxPool)、区块链(BlockChain)和区块执行器(BlockVerifier)三个模块组成的含义:
假设你是一个公司的项目经理,负责处理公司内部的各种任务和请求。在这个比喻中,你就是调度层,而接口层由三个模块组成。
交易池(TxPool):交易池就像你的收件箱,它接收来自公司员工或其他部门的新任务和请求。员工们将任务发送到你的收件箱中,而你会将这些任务提供给相关的团队去处理。类似地,交易池接收来自客户端或其他节点的新交易,并将这些交易提供给共识模块进行打包处理。同时,同步模块也可以从交易池中获取新交易进行广播,就像你将任务分发给相关团队一样。
区块链(BlockChain):区块链就像你的公司档案室,它保存着所有任务的历史记录。当你需要查看过去某个时间点的任务或了解任务执行结果时,你可以向档案室查询相关信息。类似地,区块链模块是你访问底层存储和执行模块的唯一入口。你可以通过区块链模块提交新的区块和区块执行结果,查询历史区块等信息。
此外,RPC模块可以通过区块链模块获取区块、块高以及交易执行结果等信息,就像你向档案室查询任务历史记录一样。区块执行器(BlockVerifier):区块执行器就像你的执行团队,负责实际执行任务。当你将任务分配给执行团队时,他们会按照任务要求进行操作,并将执行结果反馈给你。类似地,区块执行器与调度层进行交互,负责执行调度层传入的区块,并将区块执行结果返回给调度层。它是核心层与调度层之间的重要组件,用于验证和执行区块中的交易逻辑,就像你的执行团队负责执行任务并将结果反馈给你一样。
调度层
模块1:共识(Consensus)模块
共识模块的作用就像是一群人一起决定做什么事情。假设有一个团队,他们需要决定在周末去哪里旅行。每个人都提出了自己的建议,然后大家一起讨论并达成共识。共识模块就像是团队成员,它主要负责执行客户端提交的交易,并确保每个人对交易执行结果的认可。
在共识模块中,有两个重要的部分:打包(Sealer)线程和共识(Engine)线程。打包线程负责从交易池中获取还没有被执行的交易,并将这些交易打包成一个区块。而共识线程则负责对区块执行结果进行共识,确保大家都达成一致意见。目前,常用的共识算法有PBFT和Raft。
共识模块的工作流程如下:
客户端提交的交易会先缓存到交易池(就像是大家提出的旅行建议被放在一个池子里)。
当有新的交易进入交易池时,打包线程会被唤醒。打包线程会根据当前最高的区块,从交易池中获取最新的交易,然后打包成一个新的区块。
打包线程将新的区块传递给共识线程,供共识过程使用。
共识线程收到新的区块后,启动共识流程。在共识过程中,会调用区块执行器执行区块中的每一笔交易,并确保大家对执行结果达成一致。
如果共识成功,就会调用区块链模块将新的区块和区块执行结果提交到底层数据库。
当新的区块成功上链后,交易池会删除已经被打包进区块的交易,并将交易执行结果发送给客户端。
模块2:同步(Sync)模块
同步模块的目标是确保每个团队成员都拥有完整的信息。假设有一个团队,其中的成员分布在不同的地方。为了保持大家的信息一致,每个人会定期向其他人汇报自己的进展。同步模块就像是团队成员之间的信息传递通道,它主要负责交易和区块的同步。
同步模块包括交易同步和区块同步。
交易同步的过程如下:
当客户端向特定团队的交易池提交新的交易时,交易同步线程会被唤醒。这个线程会将新的交易广播给其他团队的节点,以确保每个团队都有完整的交易信息。
假设客户端将交易A发送到团队1,将交易B发送到团队2。交易同步线程会将交易A广播给所有团队的节点,而将交易B广播给所有团队的节点。
区块同步的过程如下:
节点0、节点1和节点2的区块同步线程会定期广播最新区块的高度信息。
当节点1收到节点0和节点2的最新区块高度后,发现自己的区块高度是3,低于节点0和节点2的最新区块高度6。
为了保持负载均衡,节点1向节点2请求第4个区块,并向节点0请求第5和第6个区块。
节点0和节点2接收到节点1的区块请求后,分别将第5和6个区块返回给节点1,节点2还返回第4个区块。
节点1按照区块的顺序执行第4、5和6个区块,并将最新的区块按顺序提交到底层存储。这样,节点1就与其他节点保持了区块的同步。
如何启动!?
很简单! 一共就两步
- 学习如何编写智能合约(本专栏重点介绍solidity语言)相当于就是一门新的编程语言,只是引用了很多不一样的库 还有要学习新的语法
- 学习如何使用FISCO BCOS平台理解其部署、安装 、使用方法以及调试、优化等
本篇专栏就是围绕着这两条线进行展开讲解 学习记录的
然后就是最最激动的 实战部分(会随着项目进度陆续发出)
链接摆上、按需食用!:
智能合约:http://t.csdnimg.cn/Ll93z
FISCO BCOS:http://t.csdnimg.cn/a2uNa