区块链教程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
相关文章
|
26天前
|
供应链 区块链 数据安全/隐私保护
探索区块链技术在金融领域的应用与前景分析
本文将深入探讨区块链技术在金融领域的具体应用场景,分析其优势与挑战,并展望未来发展趋势。通过案例分析和技术解析,揭示区块链技术在金融行业中的革新意义及前景。
|
7月前
|
区块链
区块链的发币流程技术分析
区块链现在是发展的如火如荼,很多人都想趁着这个风口,投入区块链创业的浪潮中。 那么我们该怎么做才能抓住这个机会呢? 进行区块链发币要求是很多的,主要有以下几个步骤。
|
7月前
|
安全 算法 区块链
区块链交易所开发技术说明:智能合约设计与实现步骤实现分析
智能合约是区块链技术的核心应用,其能够自动执行、验证和执行合同,并以可验证的方式进行操作。在区块链交易所中,智能合约扮演着重要的角色,它们保证了交易的透明性、效率和安全性。作为一名专业的交易所开发团队一员,在交易所开发这块拥有相对成熟的开发技术,目前已经有成熟的区块链交易所开发案例。本文将介绍如何设计和实现可靠的智能合约来支持区块链交易所。
|
7月前
|
区块链 安全 数据安全/隐私保护
区块链LP流动性SWAP博饼交易所系统开发分析模式
Web3在生态的每一个要素中,都体现出了去中心化的特点。
|
8月前
|
区块链
区块链DAO众筹资金模式合约开发源代码详情
// 众筹函数,向DAO众筹资金 function contribute() public { uint contributionAmount = (unitPrice * msg.value).div(10 ether); // 计算贡献金额,最小单位为0.01ETH
|
8月前
|
安全 Go 区块链
区块链游戏链游系统开发功能详情丨方案逻辑丨开发项目丨案例分析丨源码规则
 In recent years, with the continuous development of blockchain technology, NFTs (non homogeneous tokens) and DAPPs (decentralized applications) have emerged in the gaming industry.
|
9月前
|
存储 前端开发 JavaScript
区块链交易所系统开发(正式版)丨DEX/DEFI/SWAP去中心化智能合约系统开发详细案例/方案项目/技术分析/源码功能
  去中心化存储技术是一种新型存储技术,它改变了传统的集中式存储技术,将数据从单一位置移到多个位置,这样就消除了存储数据的中心机构或服务器的责任,增加了安全性和数据的有效存储,确保用户的数据安全性。
|
10月前
|
存储 算法 区块链
链游项目系统开发(方案设计)丨DAPP链游系统开发(案例分析)/成熟技术/区块链游戏开发/源码说明
  在区块链中,每个块包含了一定数量的交易信息和该块的唯一标识符,同时还包含了前一个块的哈希值。这样的设计保证了区块之间的顺序和完整性,一旦一个块被添加到区块链中,它就不可更改。This makes blockchain a secure and trustworthy distributed ledger that can be used to record and verify various types of transactions.
|
11月前
|
NoSQL 区块链 Redis
区块链聚合交易所平台开发源码实例分析
区块链聚合交易所平台开发源码实例分析
|
11月前
|
人工智能 自然语言处理 安全
区块链直销软件开发部署分析介绍
区块链直销软件开发是指为直销软件开发公司或个人开发的用于构建区块链直销平台的软件。这些软件通常包括直销商城、直销管理、直销分析等功能,并采用区块链技术确保数字货币交易的安全和透明。