Versions in this module Expand all Collapse all v1 v1.37.5 Sep 11, 2026 v1.37.4 Sep 11, 2026 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