Documentation
¶
Index ¶
- Constants
- func AliveMessageToString(am *pgossip.AliveMessage) string
- func BytesToStrings(bzs [][]byte) []string
- func ChannelToString(channel []byte) string
- func ConnEstablishToString(ce *pgossip.ConnEstablish) string
- func Contains(a string, b []string) bool
- func CreateGRPCLayer() (port int, gRPCServer *comm.GRPCServer, certs *TLSCertificates, ...)
- func DataDigestToString(dd *pgossip.DataDigest) string
- func DataMessageToString(dm *pgossip.DataMessage) string
- func DataRequestToString(dr *pgossip.DataRequest) string
- func DataUpdateToString(du *pgossip.DataUpdate) string
- func EnvelopeToString(envelope *pgossip.Envelope) string
- func GenerateMAC(pkiID PKIidType, channelID ChannelID) []byte
- func GetBool(key string) bool
- func GetDurationOrDefault(key string, defVal time.Duration) time.Duration
- func GetIdentityUsageThreshold() time.Duration
- func GetIntOrDefault(key string, defVal int) int
- func GetLogger(name string, peerID string, level mlog.Level, test bool, printPath bool) mlog.Logger
- func GetPullMsgType(m *pgossip.GossipMessage) pgossip.PullMsgType
- func GetRandomIndices(indiceCount, highestIndex int) []int
- func GetString(key string) string
- func GetStringSliceOrDefault(key string, defVal []string) []string
- func GossipMessageToString(gm *pgossip.GossipMessage) string
- func IndexInSlice(array any, o any, equals Equals) int
- func InternalEndpoint(se *pgossip.SecretEnvelope) string
- func IsChannelRestricted(m *pgossip.GossipMessage) bool
- func IsOrgRestricted(m *pgossip.GossipMessage) bool
- func IsPrivateDataMsg(m *pgossip.GossipMessage) bool
- func IsPullMsg(m *pgossip.GossipMessage) bool
- func IsTagValid(msg *pgossip.GossipMessage) error
- func LeadershipMessageToString(lm *pgossip.LeadershipMessage) string
- func MemberToString(m *pgossip.Member) string
- func MembershipRequestToString(mr *pgossip.MembershipRequest) string
- func MembershipResponseToString(mr *pgossip.MembershipResponse) string
- func PayloadToString(p *pgossip.Payload) string
- func PeerTimeToString(pt *pgossip.PeerTime) string
- func PrintStackTrace()
- func PrivateRWSets(rwsets ...PrivateRWSet) [][]byte
- func PropertiesToString(properties *pgossip.Properties) string
- func RandomIntn(n int) int
- func RandomUint64() uint64
- func RemotePvtDataResponseToString(rpdr *pgossip.RemotePvtDataResponse) string
- func RemoteStateResponseToString(rsr *pgossip.RemoteStateResponse) string
- func SecretEnvelopeToString(se *pgossip.SecretEnvelope) string
- func SetIdentityUsageThreshold(threshold time.Duration)
- func SignSecret(envelope *pgossip.Envelope, signFunc SignFuncType, secret *pgossip.Secret) error
- func StateInfoPullRequestToString(sipr *pgossip.StateInfoPullRequest) string
- func StateInfoSnapshotToString(sis *pgossip.StateInfoSnapshot) string
- func StateInfoToString(si *pgossip.StateInfo) string
- func StringsToBytes(strs []string) [][]byte
- type AnchorPeer
- type AuthInfo
- type BatchingEmitter
- type ChannelID
- type ConnectionInfo
- type EmittedGossipMessage
- type Equals
- type IdentityMapper
- type InfluenceResult
- type JoinChannelMessage
- type Members
- type MembershipStore
- type MessageAcceptor
- type MessageCryptoService
- type MessageReplacingPolicy
- type NetworkMember
- type OrgIdentityType
- type PKIidType
- type Payload
- type PeerIdentityInfo
- type PeerIdentitySet
- type PeerIdentityType
- type PeerSecureDialOpts
- type PeerSignature
- type PeerSuspector
- type PrivateRWSet
- type PrivateRWSetWithConfig
- type PubSub
- type PvtDataCollections
- type ReceivedMessage
- type RemotePeer
- type RoutingFilter
- type SecurityAdvisor
- type Set
- type SignFuncType
- type SignedGossipMessage
- type SubChannelSelectionRule
- type Subscription
- type TLSCertificates
- type VerifyFuncType
Constants ¶
const ( CommLogger = "gossip.comm" DiscoveryLogger = "gossip.discovery" ElectionLogger = "gossip.election" PullLogger = "gossip.pull" ChannelLogger = "gossip.channel" GossipLogger = "gossip" )
Variables ¶
This section is empty.
Functions ¶
func AliveMessageToString ¶
func AliveMessageToString(am *pgossip.AliveMessage) string
func BytesToStrings ¶
func ChannelToString ¶
func ConnEstablishToString ¶
func ConnEstablishToString(ce *pgossip.ConnEstablish) string
func CreateGRPCLayer ¶
func CreateGRPCLayer() (port int, gRPCServer *comm.GRPCServer, certs *TLSCertificates, secureDialOpts PeerSecureDialOpts, dialOpts []grpc.DialOption)
CreateGRPCLayer certs 里存有 client 和 server 的 TLS 证书。client 和 server 的证书都是由 CA 生成的,secureDialOpts 是一个函数, 返回 client 的拨号凭证。
func DataDigestToString ¶
func DataDigestToString(dd *pgossip.DataDigest) string
func DataMessageToString ¶
func DataMessageToString(dm *pgossip.DataMessage) string
func DataRequestToString ¶
func DataRequestToString(dr *pgossip.DataRequest) string
func DataUpdateToString ¶
func DataUpdateToString(du *pgossip.DataUpdate) string
func EnvelopeToString ¶
func GenerateMAC ¶
func GetDurationOrDefault ¶
func GetIntOrDefault ¶
func GetPullMsgType ¶
func GetPullMsgType(m *pgossip.GossipMessage) pgossip.PullMsgType
func GetRandomIndices ¶
GetRandomIndices 随机获取区间 [0:highestIndex] 内 indiceCount 个整数。
func GetStringSliceOrDefault ¶
func GossipMessageToString ¶
func GossipMessageToString(gm *pgossip.GossipMessage) string
func IndexInSlice ¶
IndexInSlice 给定一个数组 array 和一个可能存在于 array 中的一个元素 o, 返回 o 在 array 中的索引位置,如果给定的元素不存在,则返回 -1。
func InternalEndpoint ¶
func InternalEndpoint(se *pgossip.SecretEnvelope) string
func IsChannelRestricted ¶
func IsChannelRestricted(m *pgossip.GossipMessage) bool
func IsOrgRestricted ¶
func IsOrgRestricted(m *pgossip.GossipMessage) bool
func IsPrivateDataMsg ¶
func IsPrivateDataMsg(m *pgossip.GossipMessage) bool
func IsPullMsg ¶
func IsPullMsg(m *pgossip.GossipMessage) bool
func IsTagValid ¶
func IsTagValid(msg *pgossip.GossipMessage) error
func LeadershipMessageToString ¶
func LeadershipMessageToString(lm *pgossip.LeadershipMessage) string
func MemberToString ¶
func MembershipRequestToString ¶
func MembershipRequestToString(mr *pgossip.MembershipRequest) string
TODO 弄清楚 MembershipRequest.SelfInformation 到底是什么
func MembershipResponseToString ¶
func MembershipResponseToString(mr *pgossip.MembershipResponse) string
func PayloadToString ¶
func PeerTimeToString ¶
func PrintStackTrace ¶
func PrintStackTrace()
func PrivateRWSets ¶
func PrivateRWSets(rwsets ...PrivateRWSet) [][]byte
func PropertiesToString ¶
func PropertiesToString(properties *pgossip.Properties) string
func RandomIntn ¶
func RandomUint64 ¶
func RandomUint64() uint64
func RemotePvtDataResponseToString ¶
func RemotePvtDataResponseToString(rpdr *pgossip.RemotePvtDataResponse) string
func RemoteStateResponseToString ¶
func RemoteStateResponseToString(rsr *pgossip.RemoteStateResponse) string
func SecretEnvelopeToString ¶
func SecretEnvelopeToString(se *pgossip.SecretEnvelope) string
func SignSecret ¶
SignSecret 仅仅就是将 internal endpoint 作为签名信息进行签名,然后将签名信息和签名作为 SecretEnvelope 结构体的 两个字段。
func StateInfoPullRequestToString ¶
func StateInfoPullRequestToString(sipr *pgossip.StateInfoPullRequest) string
func StateInfoSnapshotToString ¶
func StateInfoSnapshotToString(sis *pgossip.StateInfoSnapshot) string
func StateInfoToString ¶
func StringsToBytes ¶
Types ¶
type AnchorPeer ¶
type BatchingEmitter ¶
BatchingEmitter 用于 gossip 推送/转发 阶段。消息被添加到 BatchingEmitter 中,它们被周期性地分批转发 T 次, 然后被丢弃。如果 BatchingEmitter 存储的消息计数达到一定容量,也会触发消息分派。
type ConnectionInfo ¶
type ConnectionInfo struct { PkiID PKIidType AuthInfo *AuthInfo Identity PeerIdentityType Endpoint string }
func (*ConnectionInfo) String ¶
func (info *ConnectionInfo) String() string
type EmittedGossipMessage ¶
type EmittedGossipMessage struct { *SignedGossipMessage // contains filtered or unexported fields }
EmittedGossipMessage 封装了签名的 gossip 消息,并在消息转发时使用路由过滤器
func NewEmittedGossipMessage ¶
func NewEmittedGossipMessage(sgm *SignedGossipMessage, filter func(PKIidType) bool) *EmittedGossipMessage
func (*EmittedGossipMessage) Filter ¶
func (egm *EmittedGossipMessage) Filter(pkiID PKIidType) bool
type IdentityMapper ¶
type IdentityMapper interface { Put(id PKIidType, identity PeerIdentityType) error Get(id PKIidType) (PeerIdentityType, error) Sign(msg []byte) ([]byte, error) Verify(id, signature, message []byte) error GetPKIidOfCert(PeerIdentityType) PKIidType // TODO 将来改一下函数名:TidyUpPeers // SuspectPeers 检测 peer 的身份证书或者其上的 CA 证书是否被撤销。 SuspectPeers(isSuspected PeerSuspector) // IdentityInfo 返回本地存储的所有 peer 节点的信息。 IdentityInfo() PeerIdentitySet Stop() }
func NewIdentityMapper ¶
func NewIdentityMapper(mcs MessageCryptoService, selfIdentity PeerIdentityType, onPurge purgeTrigger, advisor SecurityAdvisor) IdentityMapper
type InfluenceResult ¶
type InfluenceResult int
const ( MessageNoAction InfluenceResult = iota // MessageInvalidates 表示当前消息让另一个消息无效。 MessageInvalidates // MessageInvalidated 表示另一个消息让当前消息无效。 MessageInvalidated )
type JoinChannelMessage ¶
type JoinChannelMessage interface { SequenceNumber() uint64 Orgs() []OrgIdentityType AnchorPeersOf(OrgIdentityType) []AnchorPeer }
type Members ¶
type Members []NetworkMember
func (Members) ByID ¶
func (members Members) ByID() map[string]NetworkMember
ByID 将 Members ([]NetworkMember) 转化成 mapper: PKI-ID => NetworkMember。
func (Members) Map ¶
func (members Members) Map(f func(NetworkMember) NetworkMember) Members
Map 对 Members 里的每个 NetworkMember 调用一次给定的函数。
type MembershipStore ¶
type MembershipStore struct {
// contains filtered or unexported fields
}
MembershipStore 存储的数据结构:pkiID => *SignedGossipMessage。
func NewMembershipStore ¶
func NewMembershipStore() *MembershipStore
func (*MembershipStore) MsgByID ¶
func (ms *MembershipStore) MsgByID(pkiID PKIidType) *SignedGossipMessage
MsgByID 返回由给定的 PKIidType 对应的 SignedGossipMessage。
func (*MembershipStore) Put ¶
func (ms *MembershipStore) Put(pkiID PKIidType, sgm *SignedGossipMessage)
func (*MembershipStore) Remove ¶
func (ms *MembershipStore) Remove(pkiID PKIidType)
func (*MembershipStore) Size ¶
func (ms *MembershipStore) Size() int
func (*MembershipStore) ToSlice ¶
func (ms *MembershipStore) ToSlice() []*SignedGossipMessage
type MessageAcceptor ¶
MessageAcceptor 是一个谓词,用于确定创建 MessageAcceptor 的订阅者对哪些消息感兴趣。
type MessageCryptoService ¶
type MessageCryptoService interface { GetPKIidOfCert(identity PeerIdentityType) PKIidType VerifyBlock(channelID ChannelID, seqNum uint64, block *pcommon.Block) error // VerifyBlockAttestation 与 VerifyBlock 做同样的事情,除了它假设 block.data = nil。因此,它不会计算 block.Data.Hash() // 并将其与 block.Header.DataHash 进行比较。当 orderer 交付一个只有 header 和 metadata 的 block 时使用,作为 block 存在的证明。 VerifyBlockAttestation(channelID ChannelID, block *pcommon.Block) error Sign(msg []byte) ([]byte, error) Verify(identity PeerIdentityType, signature, message []byte) error VerifyByChannel(channelID ChannelID, identity PeerIdentityType, signature, message []byte) error ValidateIdentity(identity PeerIdentityType) error Expiration(identity PeerIdentityType) (time.Time, error) }
type MessageReplacingPolicy ¶
type MessageReplacingPolicy func(this, that any) InfluenceResult
MessageReplacingPolicy 是一个函数类型,此类函数用于比较两个消息之间是如何影响的:
- 如果返回的结果是 MessageNoAction,则表明两个消息之间互不影响;
- 如果返回的结果是 MessageInvalidates,则表示当前消息让另一个消息无效了;
- 如果返回的结果是 MessageInvalidated,则表示另一个消息让当前消息无效了。
func NewGossipMessageComparator ¶
func NewGossipMessageComparator(blockStorageSize int) MessageReplacingPolicy
type NetworkMember ¶
type NetworkMember struct { Endpoint string InternalEndpoint string Metadata []byte PKIid PKIidType Properties *pgossip.Properties *pgossip.Envelope // 存储着 StateInfo 信息 }
func AnyMatch ¶
func AnyMatch(peers []NetworkMember, filters ...RoutingFilter) []NetworkMember
AnyMatch 给定多个 peer 节点 peers,过滤掉不满足任何给定过滤规则 filters 的 peer 节点,返回剩下的 peer 节点。
func First ¶
func First(peers []NetworkMember, filter RoutingFilter) *NetworkMember
First 从给定的 peers 中选出第一个满足给定过滤规则 filter 的 peer 节点。
func SelectMembers ¶
func SelectMembers(k int, peers []NetworkMember, filter RoutingFilter) []*NetworkMember
SelectMembers 从给定的 peers 随机选出 k 个满足给定过滤规则 filter 的 peer。
func (NetworkMember) Clone ¶
func (nm NetworkMember) Clone() NetworkMember
func (NetworkMember) HasExternalEndpoint ¶
func (nm NetworkMember) HasExternalEndpoint() bool
func (NetworkMember) PreferredEndpoint ¶
func (nm NetworkMember) PreferredEndpoint() string
func (NetworkMember) SimpleString ¶
func (nm NetworkMember) SimpleString() string
func (NetworkMember) String ¶
func (nm NetworkMember) String() string
type OrgIdentityType ¶
type OrgIdentityType []byte
func StringToOrgIdentityType ¶
func StringToOrgIdentityType(idStr string) OrgIdentityType
func (OrgIdentityType) String ¶
func (o OrgIdentityType) String() string
type PKIidType ¶
type PKIidType []byte
PKIidType 用于标识 peer 节点的身份标识符。
func StringToPKIidType ¶
func (PKIidType) IsNotSameFilter ¶
IsNotSameFilter 如果给定的另一个 id 与本 id 不一样,则返回 true。
type PeerIdentityInfo ¶
type PeerIdentityInfo struct { PKIid PKIidType Identity PeerIdentityType Organization OrgIdentityType }
type PeerIdentitySet ¶
type PeerIdentitySet []PeerIdentityInfo
type PeerIdentityType ¶
type PeerIdentityType []byte
PeerIdentityType 存储了 peer 节点的证书信息。
func (PeerIdentityType) String ¶
func (pit PeerIdentityType) String() string
type PeerSecureDialOpts ¶
type PeerSecureDialOpts func() []grpc.DialOption
PeerSecureDialOpts 返回 gRPC 拨号的安全选项。
type PeerSignature ¶
type PeerSignature struct { Signature []byte Message []byte PeerIdentity PeerIdentityType }
type PeerSuspector ¶
type PeerSuspector func(identity PeerIdentityType) bool
PeerSuspector 检测 peer 的身份证书或者其上的 CA 证书是否被撤销。
type PrivateRWSet ¶
type PrivateRWSet []byte
func (PrivateRWSet) Digest ¶
func (prws PrivateRWSet) Digest() string
type PrivateRWSetWithConfig ¶
type PrivateRWSetWithConfig struct { RWSet []PrivateRWSet CollectionConfig *ppeer.CollectionConfig }
type PvtDataCollections ¶
PvtDataCollections 类型封装了私有数据集合。
func (*PvtDataCollections) Marshal ¶
func (pdc *PvtDataCollections) Marshal() ([][]byte, error)
func (*PvtDataCollections) Unmarshal ¶
func (pdc *PvtDataCollections) Unmarshal(data [][]byte) error
type ReceivedMessage ¶
type ReceivedMessage interface { // Respond 给发送此 ReceivedMessage 消息的人发送一个 GossipMessage。 Respond(msg *pgossip.GossipMessage) // GetSignedGossipMessage 返回此 ReceivedMessage 底层的 GossipMessage。 GetSignedGossipMessage() *SignedGossipMessage // GetSourceEnvelope 返回此 ReceivedMessage 内部的 Envelope。 GetSourceEnvelope() *pgossip.Envelope // GetConnectionInfo 返回远程 peer 节点的信息。 GetConnectionInfo() *ConnectionInfo // Ack 向发送方返回对消息的确认。 Ack(err error) }
type RemotePeer ¶
func SelectPeers ¶
func SelectPeers(k int, peers []NetworkMember, filter RoutingFilter) []*RemotePeer
func (*RemotePeer) String ¶
func (rp *RemotePeer) String() string
type RoutingFilter ¶
type RoutingFilter func(NetworkMember) bool
var SelectAllPolicy RoutingFilter = func(nm NetworkMember) bool { return true }
SelectAllPolicy 无论如何都返回 true。
var SelectNonePolicy RoutingFilter = func(nm NetworkMember) bool { return false }
SelectNonePolicy 无论如何都返回 false。
func CombineRoutingFilters ¶
func CombineRoutingFilters(filters ...RoutingFilter) RoutingFilter
CombineRoutingFilters 根据给定的多个过滤规则 filters 构造一个复合的过滤规则,此过滤规则要求 peer 节点必须满足 所有给定的过滤规则才会返回 true。
type SecurityAdvisor ¶
type SecurityAdvisor interface { // OrgByPeerIdentity 返回对应 peer 节点的组织信息。 OrgByPeerIdentity(PeerIdentityType) OrgIdentityType }
SecurityAdvisor 定义了一个提供安全和身份相关功能的外部辅助对象。
type SignFuncType ¶
type SignedGossipMessage ¶
type SignedGossipMessage struct { *pgossip.Envelope *pgossip.GossipMessage }
func EnvelopeToSignedGossipMessage ¶
func EnvelopeToSignedGossipMessage(envelope *pgossip.Envelope) (*SignedGossipMessage, error)
func NoopSign ¶
func NoopSign(gm *pgossip.GossipMessage) (*SignedGossipMessage, error)
NoopSign 一般来说,gossip 广播 DataMsg 前,会调用此方法对 DataMsg 进行一次虚假的签名,实际上也就是说, DataMsg 不需要被签名。
func (*SignedGossipMessage) IsSigned ¶
func (sgm *SignedGossipMessage) IsSigned() bool
func (*SignedGossipMessage) Sign ¶
func (sgm *SignedGossipMessage) Sign(signFunc SignFuncType) (*pgossip.Envelope, error)
func (*SignedGossipMessage) String ¶
func (sgm *SignedGossipMessage) String() string
func (*SignedGossipMessage) Verify ¶
func (sgm *SignedGossipMessage) Verify(peerIdentity PeerIdentityType, verifyFunc VerifyFuncType) error
type SubChannelSelectionRule ¶
type SubChannelSelectionRule func(signature PeerSignature) bool
type Subscription ¶
type TLSCertificates ¶
TLSCertificates 类型聚合了服务端和客户端的 TLS 证书。
type VerifyFuncType ¶
type VerifyFuncType func(peerIdentity PeerIdentityType, signature, message []byte) error