utils

package
v0.0.0-...-51fbea3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 22, 2024 License: Apache-2.0 Imports: 34 Imported by: 0

Documentation

Index

Constants

View Source
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 BytesToStrings(bzs [][]byte) []string

func ChannelToString

func ChannelToString(channel []byte) string

func ConnEstablishToString

func ConnEstablishToString(ce *pgossip.ConnEstablish) string

func Contains

func Contains(a string, b []string) bool

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 EnvelopeToString(envelope *pgossip.Envelope) string

func GenerateMAC

func GenerateMAC(pkiID PKIidType, channelID ChannelID) []byte

func GetBool

func GetBool(key string) bool

func GetDurationOrDefault

func GetDurationOrDefault(key string, defVal time.Duration) time.Duration

func GetIdentityUsageThreshold

func GetIdentityUsageThreshold() time.Duration

func GetIntOrDefault

func GetIntOrDefault(key string, defVal int) int

func GetLogger

func GetLogger(name string, peerID string, level mlog.Level, test bool, printPath bool) mlog.Logger

func GetPullMsgType

func GetPullMsgType(m *pgossip.GossipMessage) pgossip.PullMsgType

func GetRandomIndices

func GetRandomIndices(indiceCount, highestIndex int) []int

GetRandomIndices 随机获取区间 [0:highestIndex] 内 indiceCount 个整数。

func GetString

func GetString(key string) string

func GetStringSliceOrDefault

func GetStringSliceOrDefault(key string, defVal []string) []string

func GossipMessageToString

func GossipMessageToString(gm *pgossip.GossipMessage) string

func IndexInSlice

func IndexInSlice(array any, o any, equals Equals) int

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 MemberToString(m *pgossip.Member) string

func MembershipRequestToString

func MembershipRequestToString(mr *pgossip.MembershipRequest) string

TODO 弄清楚 MembershipRequest.SelfInformation 到底是什么

func MembershipResponseToString

func MembershipResponseToString(mr *pgossip.MembershipResponse) string

func PayloadToString

func PayloadToString(p *pgossip.Payload) string

func PeerTimeToString

func PeerTimeToString(pt *pgossip.PeerTime) string

func PrintStackTrace

func PrintStackTrace()

func PrivateRWSets

func PrivateRWSets(rwsets ...PrivateRWSet) [][]byte

func PropertiesToString

func PropertiesToString(properties *pgossip.Properties) string

func RandomIntn

func RandomIntn(n int) int

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 SetIdentityUsageThreshold

func SetIdentityUsageThreshold(threshold time.Duration)

func SignSecret

func SignSecret(envelope *pgossip.Envelope, signFunc SignFuncType, secret *pgossip.Secret) error

SignSecret 仅仅就是将 internal endpoint 作为签名信息进行签名,然后将签名信息和签名作为 SecretEnvelope 结构体的 两个字段。

func StateInfoPullRequestToString

func StateInfoPullRequestToString(sipr *pgossip.StateInfoPullRequest) string

func StateInfoSnapshotToString

func StateInfoSnapshotToString(sis *pgossip.StateInfoSnapshot) string

func StateInfoToString

func StateInfoToString(si *pgossip.StateInfo) string

func StringsToBytes

func StringsToBytes(strs []string) [][]byte

Types

type AnchorPeer

type AnchorPeer struct {
	Host string
	Port int
}

type AuthInfo

type AuthInfo struct {
	SignedData []byte
	Signature  []byte
}

type BatchingEmitter

type BatchingEmitter interface {
	Add(any)
	Size() int
	Stop()
}

BatchingEmitter 用于 gossip 推送/转发 阶段。消息被添加到 BatchingEmitter 中,它们被周期性地分批转发 T 次, 然后被丢弃。如果 BatchingEmitter 存储的消息计数达到一定容量,也会触发消息分派。

type ChannelID

type ChannelID []byte

func StringToChannelID

func StringToChannelID(idStr string) ChannelID

func (ChannelID) String

func (id ChannelID) String() string

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 Equals

type Equals func(a, b any) bool

Equals 判断 a 和 b 是否相同。

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) Filter

func (members Members) Filter(filter func(peer NetworkMember) bool) Members

func (Members) Intersect

func (members Members) Intersect(otherMembers Members) Members

Intersect 获得两个 Members 的交集。

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

type MessageAcceptor func(any) bool

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 是一个函数类型,此类函数用于比较两个消息之间是如何影响的:

  1. 如果返回的结果是 MessageNoAction,则表明两个消息之间互不影响;
  2. 如果返回的结果是 MessageInvalidates,则表示当前消息让另一个消息无效了;
  3. 如果返回的结果是 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 StringToPKIidType(idStr string) PKIidType

func (PKIidType) IsNotSameFilter

func (id PKIidType) IsNotSameFilter(that PKIidType) bool

IsNotSameFilter 如果给定的另一个 id 与本 id 不一样,则返回 true。

func (PKIidType) String

func (id PKIidType) String() string

type Payload

type Payload struct {
	ChannelID ChannelID
	Data      []byte
	Hash      string
	SeqNum    uint64 // SeqNum 是区块的序号。
}

Payload 用来存储一个一个区块。

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 PubSub

type PubSub struct {
	// contains filtered or unexported fields
}

func NewPubSub

func NewPubSub() *PubSub

func (*PubSub) Publish

func (ps *PubSub) Publish(topic string, item any) error

func (*PubSub) Subscribe

func (ps *PubSub) Subscribe(topic string, ttl time.Duration) Subscription

type PvtDataCollections

type PvtDataCollections []*ledger.TxPvtData

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

type RemotePeer struct {
	Endpoint string
	PKIID    PKIidType
}

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 Set

type Set struct {
	// contains filtered or unexported fields
}

func NewSet

func NewSet() *Set

func (*Set) Add

func (s *Set) Add(item interface{})

func (*Set) Clear

func (s *Set) Clear()

func (*Set) Exists

func (s *Set) Exists(item interface{}) bool

func (*Set) Remove

func (s *Set) Remove(item interface{})

func (*Set) Size

func (s *Set) Size() int

func (*Set) ToArray

func (s *Set) ToArray() []interface{}

type SignFuncType

type SignFuncType func(msg []byte) ([]byte, error)

type SignedGossipMessage

type SignedGossipMessage struct {
	*pgossip.Envelope
	*pgossip.GossipMessage
}

func EnvelopeToSignedGossipMessage

func EnvelopeToSignedGossipMessage(envelope *pgossip.Envelope) (*SignedGossipMessage, error)

func NoopSign

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 Subscription interface {
	Listen() (any, error)
}

type TLSCertificates

type TLSCertificates struct {
	TLSServerCert atomic.Value
	TLSClientCert atomic.Value
}

TLSCertificates 类型聚合了服务端和客户端的 TLS 证书。

type VerifyFuncType

type VerifyFuncType func(peerIdentity PeerIdentityType, signature, message []byte) error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL