Versions in this module Expand all Collapse all v0 v0.8.14 Sep 15, 2021 Changes in this version + const MetricsSubsystem + const TestHost + func AddPeerToSwitchPeerSet(sw *Switch, peer Peer) + func Connect2Switches(switches []*Switch, i, j int) + func MConnConfig(cfg *config.P2PConfig) conn.MConnConfig + func StartSwitches(switches []*Switch) error + type AddrBook interface + AddAddress func(addr *NetAddress, src *NetAddress) error + AddOurAddress func(*NetAddress) + AddPrivateIDs func([]string) + HasAddress func(*NetAddress) bool + MarkGood func(types.NodeID) + OurAddress func(*NetAddress) bool + RemoveAddress func(*NetAddress) + Save func() + type AddrBookMock struct + Addrs map[string]struct{} + OurAddrs map[string]struct{} + PrivateAddrs map[string]struct{} + func (book *AddrBookMock) AddAddress(addr *NetAddress, src *NetAddress) error + func (book *AddrBookMock) AddOurAddress(addr *NetAddress) + func (book *AddrBookMock) AddPrivateIDs(addrs []string) + func (book *AddrBookMock) HasAddress(addr *NetAddress) bool + func (book *AddrBookMock) MarkGood(types.NodeID) + func (book *AddrBookMock) OurAddress(addr *NetAddress) bool + func (book *AddrBookMock) RemoveAddress(addr *NetAddress) + func (book *AddrBookMock) Save() + type BaseReactor struct + Switch *Switch + func NewBaseReactor(name string, impl Reactor) *BaseReactor + func (*BaseReactor) AddPeer(peer Peer) + func (*BaseReactor) GetChannels() []*conn.ChannelDescriptor + func (*BaseReactor) InitPeer(peer Peer) Peer + func (*BaseReactor) Receive(chID byte, peer Peer, msgBytes []byte) + func (*BaseReactor) RemovePeer(peer Peer, reason interface{}) + func (br *BaseReactor) SetSwitch(sw *Switch) + type Channel struct + Error chan<- PeerError + ID ChannelID + In <-chan Envelope + Out chan<- Envelope + func NewChannel(id ChannelID, messageType proto.Message, inCh <-chan Envelope, ...) *Channel + func (c *Channel) Close() + func (c *Channel) Done() <-chan struct{} + type ChannelDescriptor = conn.ChannelDescriptor + type ChannelDescriptorShim struct + Descriptor *ChannelDescriptor + MsgType proto.Message + type ChannelID uint16 + type ChannelShim struct + Channel *Channel + Descriptor *ChannelDescriptor + func NewChannelShim(cds *ChannelDescriptorShim, buf uint) *ChannelShim + type ConnFilterFunc func(ConnSet, net.Conn, []net.IP) error + var ConnDuplicateIPFilter ConnFilterFunc = func(cs ConnSet, c net.Conn, ips []net.IP) error { ... } + type ConnSet interface + Has func(net.Conn) bool + HasIP func(net.IP) bool + Remove func(net.Conn) + RemoveAddr func(net.Addr) + Set func(net.Conn, []net.IP) + func NewConnSet() ConnSet + type Connection interface + Close func() error + FlushClose func() error + Handshake func(context.Context, types.NodeInfo, crypto.PrivKey) (types.NodeInfo, crypto.PubKey, error) + LocalEndpoint func() Endpoint + ReceiveMessage func() (ChannelID, []byte, error) + RemoteEndpoint func() Endpoint + SendMessage func(ChannelID, []byte) (bool, error) + Status func() conn.ConnectionStatus + TrySendMessage func(ChannelID, []byte) (bool, error) + type ConnectionStatus = conn.ConnectionStatus + type Endpoint struct + IP net.IP + Path string + Port uint16 + Protocol Protocol + func NewEndpoint(na *types.NetAddress) Endpoint + func (e Endpoint) NodeAddress(nodeID types.NodeID) NodeAddress + func (e Endpoint) String() string + func (e Endpoint) Validate() error + type Envelope struct + Broadcast bool + From types.NodeID + Message proto.Message + To types.NodeID + type ErrCurrentlyDialingOrExistingAddress struct + Addr string + func (e ErrCurrentlyDialingOrExistingAddress) Error() string + type ErrFilterTimeout struct + func (e ErrFilterTimeout) Error() string + type ErrNetAddressInvalid struct + Addr string + Err error + func (e ErrNetAddressInvalid) Error() string + type ErrNetAddressNoID struct + Addr string + func (e ErrNetAddressNoID) Error() string + type ErrRejected struct + func (e ErrRejected) Addr() NetAddress + func (e ErrRejected) Error() string + func (e ErrRejected) IsAuthFailure() bool + func (e ErrRejected) IsDuplicate() bool + func (e ErrRejected) IsFiltered() bool + func (e ErrRejected) IsIncompatible() bool + func (e ErrRejected) IsNodeInfoInvalid() bool + func (e ErrRejected) IsSelf() bool + type ErrSwitchAuthenticationFailure struct + Dialed *NetAddress + Got types.NodeID + func (e ErrSwitchAuthenticationFailure) Error() string + type ErrSwitchConnectToSelf struct + Addr *NetAddress + func (e ErrSwitchConnectToSelf) Error() string + type ErrSwitchDuplicatePeerID struct + ID types.NodeID + func (e ErrSwitchDuplicatePeerID) Error() string + type ErrSwitchDuplicatePeerIP struct + IP net.IP + func (e ErrSwitchDuplicatePeerIP) Error() string + type ErrTransportClosed struct + func (e ErrTransportClosed) Error() string + type IPeerSet interface + Get func(key types.NodeID) Peer + Has func(key types.NodeID) bool + HasIP func(ip net.IP) bool + List func() []Peer + Size func() int + type MConnTransport struct + func NewMConnTransport(logger log.Logger, mConnConfig conn.MConnConfig, ...) *MConnTransport + func (m *MConnTransport) Accept() (Connection, error) + func (m *MConnTransport) AddChannelDescriptors(channelDesc []*ChannelDescriptor) + func (m *MConnTransport) Close() error + func (m *MConnTransport) Dial(ctx context.Context, endpoint Endpoint) (Connection, error) + func (m *MConnTransport) Endpoints() []Endpoint + func (m *MConnTransport) Listen(endpoint Endpoint) error + func (m *MConnTransport) Protocols() []Protocol + func (m *MConnTransport) String() string + type MConnTransportOptions struct + MaxAcceptedConnections uint32 + type MemoryConnection struct + func (c *MemoryConnection) Close() error + func (c *MemoryConnection) FlushClose() error + func (c *MemoryConnection) Handshake(ctx context.Context, nodeInfo types.NodeInfo, privKey crypto.PrivKey) (types.NodeInfo, crypto.PubKey, error) + func (c *MemoryConnection) LocalEndpoint() Endpoint + func (c *MemoryConnection) ReceiveMessage() (ChannelID, []byte, error) + func (c *MemoryConnection) RemoteEndpoint() Endpoint + func (c *MemoryConnection) SendMessage(chID ChannelID, msg []byte) (bool, error) + func (c *MemoryConnection) Status() conn.ConnectionStatus + func (c *MemoryConnection) String() string + func (c *MemoryConnection) TrySendMessage(chID ChannelID, msg []byte) (bool, error) + type MemoryNetwork struct + func NewMemoryNetwork(logger log.Logger, bufferSize int) *MemoryNetwork + func (n *MemoryNetwork) CreateTransport(nodeID types.NodeID) *MemoryTransport + func (n *MemoryNetwork) GetTransport(id types.NodeID) *MemoryTransport + func (n *MemoryNetwork) RemoveTransport(id types.NodeID) + func (n *MemoryNetwork) Size() int + type MemoryTransport struct + func (t *MemoryTransport) Accept() (Connection, error) + func (t *MemoryTransport) Close() error + func (t *MemoryTransport) Dial(ctx context.Context, endpoint Endpoint) (Connection, error) + func (t *MemoryTransport) Endpoints() []Endpoint + func (t *MemoryTransport) Protocols() []Protocol + func (t *MemoryTransport) String() string + type Metrics struct + PeerPendingSendBytes metrics.Gauge + PeerQueueDroppedMsgs metrics.Counter + PeerQueueMsgSize metrics.Gauge + PeerReceiveBytesTotal metrics.Counter + PeerSendBytesTotal metrics.Counter + Peers metrics.Gauge + RouterChannelQueueSend metrics.Histogram + RouterPeerQueueRecv metrics.Histogram + RouterPeerQueueSend metrics.Histogram + func NopMetrics() *Metrics + func PrometheusMetrics(namespace string, labelsAndValues ...string) *Metrics + type NetAddress = types.NetAddress + func CreateRoutableAddr() (addr string, netAddr *NetAddress) + func NewNetAddressStrings(addrs []string) ([]*NetAddress, []error) + type NodeAddress struct + Hostname string + NodeID types.NodeID + Path string + Port uint16 + Protocol Protocol + func ParseNodeAddress(urlString string) (NodeAddress, error) + func (a NodeAddress) Resolve(ctx context.Context) ([]Endpoint, error) + func (a NodeAddress) String() string + func (a NodeAddress) Validate() error + type Peer interface + CloseConn func() error + FlushStop func() + Get func(string) interface{} + ID func() types.NodeID + IsOutbound func() bool + IsPersistent func() bool + NodeInfo func() types.NodeInfo + RemoteAddr func() net.Addr + RemoteIP func() net.IP + Send func(byte, []byte) bool + Set func(string, interface{}) + SocketAddr func() *NetAddress + Status func() tmconn.ConnectionStatus + TrySend func(byte, []byte) bool + func CreateRandomPeer(outbound bool) Peer + type PeerError struct + Err error + NodeID types.NodeID + type PeerFilterFunc func(IPeerSet, Peer) error + type PeerManager struct + func NewPeerManager(selfID types.NodeID, peerDB dbm.DB, options PeerManagerOptions) (*PeerManager, error) + func (m *PeerManager) Accepted(peerID types.NodeID) error + func (m *PeerManager) Add(address NodeAddress) (bool, error) + func (m *PeerManager) Addresses(peerID types.NodeID) []NodeAddress + func (m *PeerManager) Advertise(peerID types.NodeID, limit uint16) []NodeAddress + func (m *PeerManager) Close() + func (m *PeerManager) DialFailed(address NodeAddress) error + func (m *PeerManager) DialNext(ctx context.Context) (NodeAddress, error) + func (m *PeerManager) Dialed(address NodeAddress) error + func (m *PeerManager) Disconnected(peerID types.NodeID) + func (m *PeerManager) Errored(peerID types.NodeID, err error) + func (m *PeerManager) EvictNext(ctx context.Context) (types.NodeID, error) + func (m *PeerManager) GetHeight(peerID types.NodeID) int64 + func (m *PeerManager) PeerRatio() float64 + func (m *PeerManager) Peers() []types.NodeID + func (m *PeerManager) Ready(peerID types.NodeID) + func (m *PeerManager) Register(peerUpdates *PeerUpdates) + func (m *PeerManager) Scores() map[types.NodeID]PeerScore + func (m *PeerManager) SetHeight(peerID types.NodeID, height int64) error + func (m *PeerManager) Status(id types.NodeID) PeerStatus + func (m *PeerManager) Subscribe() *PeerUpdates + func (m *PeerManager) TryDialNext() (NodeAddress, error) + func (m *PeerManager) TryEvictNext() (types.NodeID, error) + type PeerManagerOptions struct + MaxConnected uint16 + MaxConnectedUpgrade uint16 + MaxPeers uint16 + MaxRetryTime time.Duration + MaxRetryTimePersistent time.Duration + MinRetryTime time.Duration + PeerScores map[types.NodeID]PeerScore + PersistentPeers []types.NodeID + PrivatePeers map[types.NodeID]struct{} + RetryTimeJitter time.Duration + func (o *PeerManagerOptions) Validate() error + type PeerOption func(*peer) + func PeerMetrics(metrics *Metrics) PeerOption + type PeerScore uint8 + const PeerScorePersistent + type PeerSet struct + func NewPeerSet() *PeerSet + func (ps *PeerSet) Add(peer Peer) error + func (ps *PeerSet) Get(peerKey types.NodeID) Peer + func (ps *PeerSet) Has(peerKey types.NodeID) bool + func (ps *PeerSet) HasIP(peerIP net.IP) bool + func (ps *PeerSet) List() []Peer + func (ps *PeerSet) Remove(peer Peer) bool + func (ps *PeerSet) Size() int + type PeerStatus string + const PeerStatusBad + const PeerStatusDown + const PeerStatusGood + const PeerStatusUp + type PeerUpdate struct + NodeID types.NodeID + Status PeerStatus + type PeerUpdates struct + func NewPeerUpdates(updatesCh chan PeerUpdate, buf int) *PeerUpdates + func (pu *PeerUpdates) Close() + func (pu *PeerUpdates) Done() <-chan struct{} + func (pu *PeerUpdates) SendUpdate(update PeerUpdate) + func (pu *PeerUpdates) Updates() <-chan PeerUpdate + type Protocol string + const MConnProtocol + const MemoryProtocol + const TCPProtocol + type Reactor interface + AddPeer func(peer Peer) + GetChannels func() []*conn.ChannelDescriptor + InitPeer func(peer Peer) Peer + Receive func(chID byte, peer Peer, msgBytes []byte) + RemovePeer func(peer Peer, reason interface{}) + SetSwitch func(*Switch) + type ReactorShim struct + Channels map[ChannelID]*ChannelShim + Name string + PeerUpdates *PeerUpdates + func NewReactorShim(logger log.Logger, name string, ...) *ReactorShim + func (rs *ReactorShim) AddPeer(peer Peer) + func (rs *ReactorShim) GetChannel(cID ChannelID) *Channel + func (rs *ReactorShim) GetChannels() []*ChannelDescriptor + func (rs *ReactorShim) OnStart() error + func (rs *ReactorShim) Receive(chID byte, src Peer, msgBytes []byte) + func (rs *ReactorShim) RemovePeer(peer Peer, reason interface{}) + type Router struct + func NewRouter(logger log.Logger, metrics *Metrics, nodeInfo types.NodeInfo, ...) (*Router, error) + func (r *Router) NodeInfo() types.NodeInfo + func (r *Router) OnStart() error + func (r *Router) OnStop() + func (r *Router) OpenChannel(chDesc ChannelDescriptor, messageType proto.Message, size int) (*Channel, error) + type RouterOptions struct + DialSleep func(context.Context) + DialTimeout time.Duration + FilterPeerByID func(context.Context, types.NodeID) error + FilterPeerByIP func(context.Context, net.IP, uint16) error + HandshakeTimeout time.Duration + IncomingConnectionWindow time.Duration + MaxIncomingConnectionAttempts uint + NumConcurrentDials func() int + QueueType string + ResolveTimeout time.Duration + func (o *RouterOptions) Validate() error + type Switch struct + func MakeConnectedSwitches(cfg *config.P2PConfig, n int, initSwitch func(int, *Switch) *Switch, ...) []*Switch + func MakeSwitch(cfg *config.P2PConfig, i int, network, version string, ...) *Switch + func NewSwitch(cfg *config.P2PConfig, transport Transport, options ...SwitchOption) *Switch + func (sw *Switch) AddPersistentPeers(addrs []string) error + func (sw *Switch) AddPrivatePeerIDs(ids []string) error + func (sw *Switch) AddReactor(name string, reactor Reactor) Reactor + func (sw *Switch) AddUnconditionalPeerIDs(ids []string) error + func (sw *Switch) Broadcast(chID byte, msgBytes []byte) chan bool + func (sw *Switch) DialPeerWithAddress(addr *NetAddress) error + func (sw *Switch) DialPeersAsync(peers []string) error + func (sw *Switch) IsDialingOrExistingAddress(addr *NetAddress) bool + func (sw *Switch) IsPeerPersistent(na *NetAddress) bool + func (sw *Switch) IsPeerUnconditional(id types.NodeID) bool + func (sw *Switch) MarkPeerAsGood(peer Peer) + func (sw *Switch) MaxNumOutboundPeers() int + func (sw *Switch) NetAddress() *NetAddress + func (sw *Switch) NodeInfo() types.NodeInfo + func (sw *Switch) NumPeers() (outbound, inbound, dialing int) + func (sw *Switch) OnStart() error + func (sw *Switch) OnStop() + func (sw *Switch) Peers() IPeerSet + func (sw *Switch) Reactor(name string) Reactor + func (sw *Switch) Reactors() map[string]Reactor + func (sw *Switch) RemoveReactor(name string, reactor Reactor) + func (sw *Switch) SetAddrBook(addrBook AddrBook) + func (sw *Switch) SetNodeInfo(nodeInfo types.NodeInfo) + func (sw *Switch) SetNodeKey(nodeKey types.NodeKey) + func (sw *Switch) StopPeerForError(peer Peer, reason interface{}) + func (sw *Switch) StopPeerGracefully(peer Peer) + type SwitchOption func(*Switch) + func SwitchConnFilters(filters ...ConnFilterFunc) SwitchOption + func SwitchFilterTimeout(timeout time.Duration) SwitchOption + func SwitchPeerFilters(filters ...PeerFilterFunc) SwitchOption + func WithMetrics(metrics *Metrics) SwitchOption + type Transport interface + Accept func() (Connection, error) + Close func() error + Dial func(context.Context, Endpoint) (Connection, error) + Endpoints func() []Endpoint + Protocols func() []Protocol + type Wrapper interface + Unwrap func() (proto.Message, error) + Wrap func(proto.Message) error