区块链教程Fabric1.0源代码分析Peer-兄弟连区块链
区块链教程Fabric1.0源代码分析Peer,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。
Fabric 1.0源代码笔记 之 Peer
1、Peer概述
在Fabric中,Peer(节点)是指在网络中负责接收交易请求、维护一致账本的各个fabric-peer实例。节点之间彼此通过gRPC通信。
按角色划分,Peer包括两种类型:
- Endorser(背书者):负责对来自客户端的交易提案进行检查和背书。
- Committer(提交者):负责检查交易请求,执行交易并维护区块链和账本结构。
Peer核心代码在peer目录下,其他相关代码分布在core/peer和protos/peer目录下。目录结构如下:
- peer目录:
* main.go,peer命令入口。
* node目录,peer node命令及子命令peer node start和peer node status实现。
* node.go,peer node命令入口。
* start.go,peer node start子命令实现。
* status.go,peer node status子命令实现。
* channel目录,peer channel命令及子命令实现。
* chaincode目录,peer chaincode命令及子命令实现。
* clilogging目录,peer clilogging命令及子命令实现。
* version目录,peer version命令实现。
* common目录,peer相关通用代码。
* common.go,部分公共函数。
* ordererclient.go,BroadcastClient接口及实现。
* gossip目录,gossip最终一致性算法相关代码。
- core/peer目录:
* config.go,Peer配置相关工具函数。
* peer.go,Peer服务相关工具函数。
- core/endorser目录:背书服务端。
如下为分节说明Peer代码:
- Fabric 1.0源代码笔记 之 Peer #peer根命令入口及加载子命令
- Fabric 1.0源代码笔记 之 Peer #peer node start命令实现
- Fabric 1.0源代码笔记 之 Peer #peer channel命令及子命令实现
- Fabric 1.0源代码笔记 之 Peer #peer chaincode命令及子命令实现
- Fabric 1.0源代码笔记 之 Peer #EndorserClient(Endorser客户端)
- Fabric 1.0源代码笔记 之 Peer #EndorserServer(Endorser服务端)
- Fabric 1.0源代码笔记 之 Peer #BroadcastClient(Broadcast客户端)
- Fabric 1.0源代码笔记 之 Peer #committer(提交者)
2、Peer配置相关工具函数
//为全局变量localAddress和peerEndpoint赋值 func CacheConfiguration() (err error) func cacheConfiguration() //调用CacheConfiguration() //获取localAddress func GetLocalAddress() (string, error) //获取peerEndpoint func GetPeerEndpoint() (*pb.PeerEndpoint, error) //获取Peer安全配置 func GetSecureConfig() (comm.SecureServerConfig, error) //代码在core/peer/config.go
PeerEndpoint结构体定义如下:
type PeerID struct { Name string } type PeerEndpoint struct { Id *PeerID Address string } //代码在protos/peer/peer.pb.go
SecureServerConfig结构体定义如下:
type SecureServerConfig struct { ServerCertificate []byte //签名公钥,取自peer.tls.cert.file ServerKey []byte //签名私钥,取自peer.tls.key.file ServerRootCAs [][]byte //根CA证书,取自peer.tls.rootcert.file ClientRootCAs [][]byte UseTLS bool //是否启用TLS,取自peer.tls.enabled RequireClientCert bool } //代码在core/comm/server.go
3、Peer服务相关工具函数
func (cs *chainSupport) Ledger() ledger.PeerLedger func (cs *chainSupport) GetMSPIDs(cid string) []string func MockInitialize() func MockSetMSPIDGetter(mspIDGetter func(string) []string) func Initialize(init func(string)) //Peer初始化,并部署系统链码 func InitChain(cid string) func getCurrConfigBlockFromLedger(ledger ledger.PeerLedger) (*common.Block, error) func createChain(cid string, ledger ledger.PeerLedger, cb *common.Block) error func CreateChainFromBlock(cb *common.Block) error func MockCreateChain(cid string) error func GetLedger(cid string) ledger.PeerLedger func GetPolicyManager(cid string) policies.Manager func GetCurrConfigBlock(cid string) *common.Block func updateTrustedRoots(cm configtxapi.Manager) func buildTrustedRootsForChain(cm configtxapi.Manager) func GetMSPIDs(cid string) []string func SetCurrConfigBlock(block *common.Block, cid string) error func NewPeerClientConnection() (*grpc.ClientConn, error) func GetLocalIP() string func NewPeerClientConnectionWithAddress(peerAddress string) (*grpc.ClientConn, error) func GetChannelsInfo() []*pb.ChannelInfo //构造type channelPolicyManagerGetter struct{} func NewChannelPolicyManagerGetter() policies.ChannelPolicyManagerGetter func (c *channelPolicyManagerGetter) Manager(channelID string) (policies.Manager, bool) func CreatePeerServer(listenAddress string,secureConfig comm.SecureServerConfig) (comm.GRPCServer, error) func GetPeerServer() comm.GRPCServer //代码在core/peer/peer.go
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java容器深入浅出之PriorityQueue、ArrayDeque和LinkedList
Queue用于模拟一种FIFO(first in first out)的队列结构。一般来说,典型的队列结构不允许随机访问队列中的元素。队列包含的方法为: 1. 入队 void add(Object o): 指定元素加入队列尾部 boolean offer(Object o):同上,在有限容量队列中,此方法更好 2. 出队 Object poll():获取头部元素,并从队列中删除;如果队列为空,则返回null Object remove():获取头部元素,并从队列中删除; 3. 出队不删除 Object peek():获取头部元素,不删除;如果队列为空,则返回null Object element():获取头部元素,不删除; PriorityQueue PriorityQueue是Queue接口的实现类,但是它并不是一个FIFO的队列实现,具体表现在: 1. 保存顺序与FIFO无关,而是按照元素大小进行重排序;因此poll出来的是按照有小到大来取。 2. 不允许保存null,排序规则有自然排序和定制排序两种,规则与TreeSet一致。 Deque接口与ArrayDeque实现类 Dequ...
- 下一篇
条件竞争漏洞
参考文献:https://blog.csdn.net/u011377996/article/details/79511160 条件竞争漏洞: 一种服务器端的漏洞,是由于开发者设计应用程序并发处理时操作逻辑不合理而造成。当应用面临高并发的请求时未能同步好所有请求,导致请求与请求之间产生等待时出现逻辑缺陷。该漏洞一般出现在与数据库系统频繁交互的位置,例如金额同步、支付等较敏感操作处,也会出现在文件的操作的地方。 一个栗子 cumt平台上的 上传三 打开是个上传界面,先上传一张图片,得到路径以及提示需要可执行文件 直接上传php文件前端验证都不能过,抓包修改后缀名为php,又得到下个提示 尝试php1,php2直到phtml说这个被安全软件给杀死了。这里应该就是用到条件竞争了,应该就是指文件上传成功之后又被删除了,若是一直访问,服务器来不及删除就已经解析应该就可以了拿到最后一个flag了。 用burp上传phtml文件,再写脚本访问上传的文件 为了避免出现竞争条件,进入临界区要遵循: 任何两个进程不能同时进入访问同一临界资源的临界区 进程的个数,CPU个数性能等都是无序的,随机的 临界区之外...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker安装Oracle12C,快速搭建Oracle学习环境