Versions in this module Expand all Collapse all v1 v1.37.3 Sep 9, 2026 v1.37.2 Sep 9, 2026 v1.37.1 Sep 8, 2026 Changes in this version + const DefaultMaxMessages + const DefaultMaxQueueSize + const IdentityPublicKeySize + const IdentitySignatureSize + const MaxMessageSize + var ErrCurveMismatch = errors.New("only P256 is allowed for ECDSA") + var ErrEmptyCert = errors.New("certificate sent by peer is empty") + var ErrEmptyPublicKey = errors.New("no public key sent by peer") + var ErrHandshakeBadIdentity = errors.New("peer: PQ handshake identity invalid") + var ErrHandshakeBadVersion = errors.New("peer: PQ handshake protocol version not understood") + var ErrHandshakeChainMismatch = errors.New("peer: PQ handshake chain ID mismatch") + var ErrHandshakeClassicalKEM = errors.New("peer: PQ handshake refused classical KEM") + var ErrHandshakeKEMScheme = errors.New("peer: PQ handshake KEM scheme not admissible") + var ErrHandshakeNodeIDZero = errors.New("peer: PQ handshake peer NodeID is zero") + var ErrHandshakeProfileMismatch = errors.New("peer: PQ handshake profile mismatch") + var ErrIPLiteralNotAllowed = errors.New("IP literals are not allowed") + var ErrInvalidHost = errors.New("invalid host") + var ErrMessageTooBig = errors.New("message exceeds maximum size") + var ErrNoCertsSent = errors.New("no certificates sent by peer") + var ErrQueueClosed = errors.New("message queue is closed") + var ErrQueueFull = errors.New("message queue is full") + var ErrSchemeGateConfig = errors.New("peer: SchemeGate misconfigured") + var ErrSchemeGateMismatch = errors.New("peer: NodeIDScheme refused by SchemeGate") + var ErrSchemeGateUnknownScheme = errors.New("peer: NodeIDScheme byte is unknown") + var ErrTLS13Required = errors.New("TLS 1.3 is required") + var ErrUnsupportedKeyType = errors.New("key type is not supported") + func CanonicalHost(host string) (string, error) + func GenesisDigest(record []byte) [32]byte + func IPEndpointFromAddrPort(addr netip.AddrPort) endpoints.Endpoint + func NoPrecondition(Peer) bool + func RespondHandshake(cfg *HandshakeConfig, local *LocalIdentity, init *HandshakeInit) (*HandshakeResp, *HandshakeResult, error) + func RulesDigest(upgrade []byte) [32]byte + func RunPQHandshakeConn(conn net.Conn, hs *HandshakeConfig, local *LocalIdentity, isIngress bool, ...) (ids.NodeID, [32]byte, error) + func TLSConfig(cert tls.Certificate, keyLogWriter io.Writer) *tls.Config + func ValidateCertificate(cs tls.ConnectionState) error + func ValidatePQConnection(cs tls.ConnectionState) error + type BoundedMessageQueue struct + func NewBoundedMessageQueue(maxSize int64, maxMessages int, log log.Logger) *BoundedMessageQueue + func (q *BoundedMessageQueue) ByteSize() int64 + func (q *BoundedMessageQueue) Close() + func (q *BoundedMessageQueue) Dequeue() (message.OutboundMessage, error) + func (q *BoundedMessageQueue) DequeueBatch(n int) []message.OutboundMessage + func (q *BoundedMessageQueue) Enqueue(msg message.OutboundMessage) error + func (q *BoundedMessageQueue) Metrics() QueueMetrics + func (q *BoundedMessageQueue) Reset() + func (q *BoundedMessageQueue) Size() int + func (q *BoundedMessageQueue) TryDequeue() (message.OutboundMessage, bool) + func (q *BoundedMessageQueue) TryEnqueue(msg message.OutboundMessage) bool + type ChainIdentity struct + ChainID ids.ID + Genesis [32]byte + NetworkID uint32 + Rules [32]byte + VMID ids.ID + func (c ChainIdentity) Agrees(o ChainIdentity) bool + func (c ChainIdentity) Disagreement(o ChainIdentity) string + type ChainState uint8 + const ChainCompatible + const ChainIncompatible + const ChainUnknown + func (s ChainState) String() string + type Chains struct + func (c *Chains) Add(id ChainIdentity) + func (c *Chains) Get(chainID ids.ID) (ChainIdentity, bool) + func (c *Chains) List() []ChainIdentity + type Config struct + Beacons validators.Manager + Clock mockable.Clock + IPSigner *IPSigner + InboundMsgThrottler throttling.InboundMsgThrottler + IngressConnectionCount atomic.Int64 + LastReceived int64 + LastSent int64 + Log log.Logger + MaxClockDifference time.Duration + MessageCreator message.Creator + Metrics *Metrics + MyChainIdentities *Chains + MyChains set.Set[ids.ID] + MyNodeID ids.NodeID + Network Network + NetworkID uint32 + ObjectedLPs []uint32 + PQHandshakeConfig *HandshakeConfig + PQLocalIdentity *LocalIdentity + PingFrequency time.Duration + PongTimeout time.Duration + ReadBufferSize int + ResourceTracker tracker.ResourceTracker + Router InboundHandler + SupportedLPs []uint32 + UptimeCalculator uptime.Calculator + Validators validators.Manager + VersionCompatibility version.Compatibility + WriteBufferSize int + type EndpointSigner struct + func NewEndpointSigner(endpoint *utils.Atomic[endpoints.Endpoint], tlsSigner crypto.Signer, ...) *EndpointSigner + func (s *EndpointSigner) GetSignedEndpoint() (*SignedEndpoint, error) + func (s *EndpointSigner) GetSignedIP() (*SignedIP, error) + func (s *EndpointSigner) SupportsHostname() bool + type GossipTracker interface + AddKnown func(peerID ids.NodeID, knownTxIDs []ids.ID, txIDs []ids.ID) ([]ids.ID, bool) + AddValidator func(validator ValidatorID) bool + GetNodeID func(txID ids.ID) (ids.NodeID, bool) + GetUnknown func(peerID ids.NodeID) ([]ValidatorID, bool) + RemoveValidator func(validatorID ids.NodeID) bool + ResetValidator func(validatorID ids.NodeID) bool + StartTrackingPeer func(peerID ids.NodeID) bool + StopTrackingPeer func(peerID ids.NodeID) bool + Tracked func(peerID ids.NodeID) bool + func NewGossipTracker(registerer metric.Registerer, namespace string) (GossipTracker, error) + type GossipTrackerCallback struct + GossipTracker GossipTracker + Log log.Logger + func (*GossipTrackerCallback) OnValidatorLightChanged(ids.NodeID, uint64, uint64) + func (g *GossipTrackerCallback) OnValidatorAdded(nodeID ids.NodeID, _ uint64) + func (g *GossipTrackerCallback) OnValidatorRemoved(nodeID ids.NodeID, _ uint64) + type HandshakeConfig struct + ChainID [chainIDSize]byte + ForbidClassicalKEM bool + KEMScheme kem.KeyExchangeID + Profile ProfileID + type HandshakeInit struct + ChainID [chainIDSize]byte + KEMPub []byte + KEMScheme kem.KeyExchangeID + MLDSAPub []byte + NodeID ids.NodeID + Profile ProfileID + ProtocolVersion uint8 + Sig []byte + func InitiateHandshake(cfg *HandshakeConfig, local *LocalIdentity) (*HandshakeInit, []byte, error) + type HandshakeResp struct + ChainID [chainIDSize]byte + KEMCiphertext []byte + KEMScheme kem.KeyExchangeID + MLDSAPub []byte + NodeID ids.NodeID + Profile ProfileID + ProtocolVersion uint8 + Sig []byte + type HandshakeResult struct + AEADKey [kem.AEADKeySize]byte + KEMSession *kem.KEMSession + Local *LocalIdentity + PeerMLDSA *mldsa65.PublicKey + PeerNodeID ids.NodeID + func FinishInitiatorHandshake(cfg *HandshakeConfig, local *LocalIdentity, init *HandshakeInit, ...) (*HandshakeResult, error) + type HandshakeRole uint8 + func (r HandshakeRole) String() string + type IPSigner struct + func NewIPSigner(ip *utils.Atomic[netip.AddrPort], tlsSigner crypto.Signer, ...) *IPSigner + func NewIPSignerPQ(ip *utils.Atomic[netip.AddrPort], tlsSigner crypto.Signer, ...) *IPSigner + func (s *IPSigner) GetSignedIP() (*SignedIP, error) + func (s *IPSigner) PublicKey() *bls.PublicKey + type InboundHandler interface + HandleInbound func(ctx context.Context, msg message.InboundMessage) + type InboundHandlerFunc func(context.Context, message.InboundMessage) + func (f InboundHandlerFunc) HandleInbound(ctx context.Context, msg message.InboundMessage) + type Info struct + ID ids.NodeID + IP netip.AddrPort + LastReceived time.Time + LastSent time.Time + ObjectedLPs set.Set[uint32] + ObservedUptime json.Uint32 + PublicIP netip.AddrPort + SupportedLPs set.Set[uint32] + TrackedChains set.Set[ids.ID] + Version string + type LocalIdentity struct + NodeID ids.NodeID + Public *mldsa65.PublicKey + Secret *mldsa65.PrivateKey + func NewLocalIdentity(nodeID ids.NodeID) (*LocalIdentity, error) + func NewLocalIdentityFromStakingKey(nodeID ids.NodeID, pubBytes, privBytes []byte) (*LocalIdentity, error) + type MessageQueue interface + Close func() + Pop func() (message.OutboundMessage, bool) + PopNow func() (message.OutboundMessage, bool) + Push func(ctx context.Context, msg message.OutboundMessage) bool + func NewBlockingMessageQueue(onFailed SendFailedCallback, log log.Logger, bufferSize int) MessageQueue + func NewThrottledMessageQueue(onFailed SendFailedCallback, id ids.NodeID, log log.Logger, ...) MessageQueue + type Metrics struct + Bytes metric.CounterVec + BytesSaved metric.GaugeVec + ChainDivergentMsgs metric.Counter + ChainIdentityMismatch metric.GaugeVec + ChainRulesDiffer metric.Counter + ClockSkewCount metric.Counter + ClockSkewSum metric.Gauge + Messages metric.CounterVec + NumFailedToParse metric.Counter + NumSendFailed metric.CounterVec + func NewMetrics(registerer metric.Registerer) (*Metrics, error) + func (m *Metrics) MultipleSendsFailed(op message.Op, count int) + func (m *Metrics) Received(msg message.InboundMessage, msgLen uint32) + func (m *Metrics) SendFailed(msg message.OutboundMessage) + func (m *Metrics) Sent(msg message.OutboundMessage) + type MockGossipTracker struct + func NewMockGossipTracker(ctrl *gomock.Controller) *MockGossipTracker + func (m *MockGossipTracker) AddKnown(arg0 ids.NodeID, arg1, arg2 []ids.ID) ([]ids.ID, bool) + func (m *MockGossipTracker) AddValidator(arg0 ValidatorID) bool + func (m *MockGossipTracker) EXPECT() *MockGossipTrackerMockRecorder + func (m *MockGossipTracker) GetNodeID(arg0 ids.ID) (ids.NodeID, bool) + func (m *MockGossipTracker) GetUnknown(arg0 ids.NodeID) ([]ValidatorID, bool) + func (m *MockGossipTracker) RemoveValidator(arg0 ids.NodeID) bool + func (m *MockGossipTracker) ResetValidator(arg0 ids.NodeID) bool + func (m *MockGossipTracker) StartTrackingPeer(arg0 ids.NodeID) bool + func (m *MockGossipTracker) StopTrackingPeer(arg0 ids.NodeID) bool + func (m *MockGossipTracker) Tracked(arg0 ids.NodeID) bool + type MockGossipTrackerMockRecorder struct + func (mr *MockGossipTrackerMockRecorder) AddKnown(arg0, arg1, arg2 interface{}) *gomock.Call + func (mr *MockGossipTrackerMockRecorder) AddValidator(arg0 interface{}) *gomock.Call + func (mr *MockGossipTrackerMockRecorder) GetNodeID(arg0 interface{}) *gomock.Call + func (mr *MockGossipTrackerMockRecorder) GetUnknown(arg0 interface{}) *gomock.Call + func (mr *MockGossipTrackerMockRecorder) RemoveValidator(arg0 interface{}) *gomock.Call + func (mr *MockGossipTrackerMockRecorder) ResetValidator(arg0 interface{}) *gomock.Call + func (mr *MockGossipTrackerMockRecorder) StartTrackingPeer(arg0 interface{}) *gomock.Call + func (mr *MockGossipTrackerMockRecorder) StopTrackingPeer(arg0 interface{}) *gomock.Call + func (mr *MockGossipTrackerMockRecorder) Tracked(arg0 interface{}) *gomock.Call + type Network interface + AllowConnection func(peerID ids.NodeID) bool + Connected func(peerID ids.NodeID) + Disconnected func(peerID ids.NodeID) + KnownPeers func() (bloomFilter []byte, salt []byte) + Peers func(peerID ids.NodeID, trackedNets set.Set[ids.ID], requestAllPeers bool, ...) []*endpoints.ClaimedIPPort + Track func(ips []*endpoints.ClaimedIPPort) error + var TestNetwork Network = testNetwork{} + type PQPreHandshake struct + AEADKey [32]byte + PeerNodeID ids.NodeID + type Peer interface + AwaitClosed func(ctx context.Context) error + AwaitReady func(ctx context.Context) error + Cert func() *staking.Certificate + ChainState func(chainID ids.ID) ChainState + Closed func() bool + ID func() ids.NodeID + IP func() *SignedIP + Info func() Info + LastReceived func() time.Time + LastSent func() time.Time + ObservedUptime func() uint32 + Ready func() bool + Send func(ctx context.Context, msg message.OutboundMessage) bool + StartClose func() + StartSendGetPeerList func() + TrackedChains func() set.Set[ids.ID] + Version func() *version.Application + func Start(config *Config, conn net.Conn, cert *staking.Certificate, id ids.NodeID, ...) Peer + func StartTestPeer(ctx context.Context, ip netip.AddrPort, networkID uint32, ...) (Peer, error) + type ProfileID uint8 + const ProfileFIPS + const ProfileNone + const ProfilePermissive + const ProfileStrictPQ + func (p ProfileID) IsStrict() bool + func (p ProfileID) String() string + type QueueMetrics struct + ByteSize int64 + Dequeued uint64 + Dropped uint64 + Enqueued uint64 + HighWater int64 + Size int + type SchemeGate struct + ActivationHeight uint64 + Profile *consensusconfig.ChainSecurityProfile + func NewSchemeGate(profile *consensusconfig.ChainSecurityProfile, activationHeight uint64) (*SchemeGate, error) + func (g *SchemeGate) Classify(nodeID ids.NodeID, derivedScheme ids.NodeIDScheme, height uint64, site string) (ids.TypedNodeID, error) + type SendFailedCallback interface + SendFailed func(message.OutboundMessage) + type SendFailedFunc func(message.OutboundMessage) + func (f SendFailedFunc) SendFailed(msg message.OutboundMessage) + type Set interface + Add func(peer Peer) + AllInfo func() []Info + GetByID func(nodeID ids.NodeID) (Peer, bool) + GetByIndex func(index int) (Peer, bool) + Info func(nodeIDs []ids.NodeID) []Info + Len func() int + Remove func(nodeID ids.NodeID) + Sample func(n int, precondition func(Peer) bool) []Peer + func NewSet() Set + type SignedEndpoint struct + BLSSignature *bls.Signature + BLSSignatureBytes []byte + TLSSignature []byte + func (e *SignedEndpoint) ToSignedIP() *SignedIP + func (e *SignedEndpoint) Verify(cert *staking.Certificate, maxTimestamp time.Time) error + type SignedIP struct + BLSSignature *bls.Signature + BLSSignatureBytes []byte + MLDSASignature []byte + TLSSignature []byte + func (ip *SignedIP) Verify(cert *staking.Certificate, maxTimestamp time.Time) error + func (ip *SignedIP) VerifyUnderProfile(cert *staking.Certificate, mldsaPubKey *mldsa.PublicKey, ...) error + type UnsignedEndpoint struct + Endpoint endpoints.Endpoint + Timestamp uint64 + func (e *UnsignedEndpoint) Sign(tlsSigner crypto.Signer, blsSigner bls.Signer) (*SignedEndpoint, error) + type UnsignedHost struct + Host string + Port uint16 + Timestamp uint64 + type UnsignedIP struct + AddrPort netip.AddrPort + Timestamp uint64 + func (ip *UnsignedIP) Sign(tlsSigner crypto.Signer, blsSigner bls.Signer) (*SignedIP, error) + func (ip *UnsignedIP) SignPQ(tlsSigner crypto.Signer, blsSigner bls.Signer, mldsaSigner *mldsa.PrivateKey) (*SignedIP, error) + type Upgrader interface + Upgrade func(net.Conn) (ids.NodeID, net.Conn, *staking.Certificate, error) + func NewTLSClientUpgrader(config *tls.Config, invalidCerts metric.Counter, gate *SchemeGate) Upgrader + func NewTLSServerUpgrader(config *tls.Config, invalidCerts metric.Counter, gate *SchemeGate) Upgrader + type ValidatorID struct + NodeID ids.NodeID + TxID ids.ID