mirror of
https://github.com/luxfi/node.git
synced 2026-07-27 03:39:39 +00:00
329 lines
8.3 KiB
Go
329 lines
8.3 KiB
Go
// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
// Package wire defines P2P message types for network communication.
|
|
// This package is wire-format agnostic - encoding is handled by the parent message package.
|
|
package wire
|
|
|
|
// EngineType represents the consensus engine type
|
|
type EngineType int32
|
|
|
|
const (
|
|
EngineType_UNSPECIFIED EngineType = 0
|
|
EngineType_CHAIN EngineType = 1
|
|
EngineType_DAG EngineType = 2
|
|
)
|
|
|
|
// Message is the top-level P2P message container
|
|
type Message struct {
|
|
// Only one of these should be set
|
|
CompressedZstd []byte
|
|
Ping *Ping
|
|
Pong *Pong
|
|
Handshake *Handshake
|
|
GetPeerList *GetPeerList
|
|
PeerList *PeerList
|
|
GetStateSummaryFrontier *GetStateSummaryFrontier
|
|
StateSummaryFrontier *StateSummaryFrontier
|
|
GetAcceptedStateSummary *GetAcceptedStateSummary
|
|
AcceptedStateSummary *AcceptedStateSummary
|
|
GetAcceptedFrontier *GetAcceptedFrontier
|
|
AcceptedFrontier *AcceptedFrontier
|
|
GetAccepted *GetAccepted
|
|
Accepted *Accepted
|
|
GetAncestors *GetAncestors
|
|
Ancestors *Ancestors
|
|
Get *Get
|
|
Put *Put
|
|
PushQuery *PushQuery
|
|
PullQuery *PullQuery
|
|
Chits *Chits
|
|
Request *Request
|
|
Response *Response
|
|
Gossip *Gossip
|
|
BFT *BFT
|
|
}
|
|
|
|
// Ping message
|
|
type Ping struct {
|
|
Uptime uint32
|
|
ChainIds []*ChainPingEntry
|
|
}
|
|
|
|
// ChainPingEntry is the per-chain payload in Ping/Pong.
|
|
// In Lux's chain model each chain is its own validator set, so the legacy
|
|
// (chain, network) pair collapses to a single chain identifier.
|
|
type ChainPingEntry struct {
|
|
ChainId []byte
|
|
}
|
|
|
|
// Pong message
|
|
type Pong struct {
|
|
Uptime uint32
|
|
ChainIds []*ChainPingEntry
|
|
}
|
|
|
|
// Handshake message
|
|
type Handshake struct {
|
|
NetworkId uint32
|
|
MyTime uint64
|
|
IpAddr []byte
|
|
IpPort uint32
|
|
IpSigningTime uint64
|
|
IpNodeIdSig []byte
|
|
TrackedChains [][]byte
|
|
Client *Client
|
|
SupportedAcps []uint32
|
|
ObjectedAcps []uint32
|
|
KnownPeers *BloomFilter
|
|
IpBlsSig []byte
|
|
}
|
|
|
|
// Client info in handshake
|
|
type Client struct {
|
|
Name string
|
|
Major uint32
|
|
Minor uint32
|
|
Patch uint32
|
|
}
|
|
|
|
// BloomFilter for peer discovery
|
|
type BloomFilter struct {
|
|
Filter []byte
|
|
Salt []byte
|
|
}
|
|
|
|
// GetPeerList message
|
|
type GetPeerList struct {
|
|
KnownPeers *BloomFilter
|
|
}
|
|
|
|
// PeerList message
|
|
type PeerList struct {
|
|
ClaimedIpPorts []*ClaimedIpPort
|
|
}
|
|
|
|
// ClaimedIpPort in peer list
|
|
type ClaimedIpPort struct {
|
|
X509Certificate []byte
|
|
IpAddr []byte
|
|
IpPort uint32
|
|
Timestamp uint64
|
|
Signature []byte
|
|
TxId []byte
|
|
}
|
|
|
|
// GetStateSummaryFrontier message
|
|
type GetStateSummaryFrontier struct {
|
|
ChainId []byte
|
|
RequestId uint32
|
|
Deadline uint64
|
|
}
|
|
|
|
func (m *GetStateSummaryFrontier) GetChainId() []byte { return m.ChainId }
|
|
func (m *GetStateSummaryFrontier) GetRequestId() uint32 { return m.RequestId }
|
|
func (m *GetStateSummaryFrontier) GetDeadline() uint64 { return m.Deadline }
|
|
|
|
// StateSummaryFrontier message
|
|
type StateSummaryFrontier struct {
|
|
ChainId []byte
|
|
RequestId uint32
|
|
Summary []byte
|
|
}
|
|
|
|
func (m *StateSummaryFrontier) GetChainId() []byte { return m.ChainId }
|
|
func (m *StateSummaryFrontier) GetRequestId() uint32 { return m.RequestId }
|
|
|
|
// GetAcceptedStateSummary message
|
|
type GetAcceptedStateSummary struct {
|
|
ChainId []byte
|
|
RequestId uint32
|
|
Deadline uint64
|
|
Heights []uint64
|
|
}
|
|
|
|
func (m *GetAcceptedStateSummary) GetChainId() []byte { return m.ChainId }
|
|
func (m *GetAcceptedStateSummary) GetRequestId() uint32 { return m.RequestId }
|
|
func (m *GetAcceptedStateSummary) GetDeadline() uint64 { return m.Deadline }
|
|
|
|
// AcceptedStateSummary message
|
|
type AcceptedStateSummary struct {
|
|
ChainId []byte
|
|
RequestId uint32
|
|
SummaryIds [][]byte
|
|
}
|
|
|
|
func (m *AcceptedStateSummary) GetChainId() []byte { return m.ChainId }
|
|
func (m *AcceptedStateSummary) GetRequestId() uint32 { return m.RequestId }
|
|
|
|
// GetAcceptedFrontier message
|
|
type GetAcceptedFrontier struct {
|
|
ChainId []byte
|
|
RequestId uint32
|
|
Deadline uint64
|
|
EngineType EngineType
|
|
}
|
|
|
|
func (m *GetAcceptedFrontier) GetChainId() []byte { return m.ChainId }
|
|
func (m *GetAcceptedFrontier) GetRequestId() uint32 { return m.RequestId }
|
|
func (m *GetAcceptedFrontier) GetDeadline() uint64 { return m.Deadline }
|
|
|
|
// AcceptedFrontier message
|
|
type AcceptedFrontier struct {
|
|
ChainId []byte
|
|
RequestId uint32
|
|
ContainerId []byte
|
|
}
|
|
|
|
func (m *AcceptedFrontier) GetChainId() []byte { return m.ChainId }
|
|
func (m *AcceptedFrontier) GetRequestId() uint32 { return m.RequestId }
|
|
|
|
// GetAccepted message
|
|
type GetAccepted struct {
|
|
ChainId []byte
|
|
RequestId uint32
|
|
Deadline uint64
|
|
ContainerIds [][]byte
|
|
EngineType EngineType
|
|
}
|
|
|
|
func (m *GetAccepted) GetChainId() []byte { return m.ChainId }
|
|
func (m *GetAccepted) GetRequestId() uint32 { return m.RequestId }
|
|
func (m *GetAccepted) GetDeadline() uint64 { return m.Deadline }
|
|
|
|
// Accepted message
|
|
type Accepted struct {
|
|
ChainId []byte
|
|
RequestId uint32
|
|
ContainerIds [][]byte
|
|
}
|
|
|
|
func (m *Accepted) GetChainId() []byte { return m.ChainId }
|
|
func (m *Accepted) GetRequestId() uint32 { return m.RequestId }
|
|
|
|
// GetAncestors message
|
|
type GetAncestors struct {
|
|
ChainId []byte
|
|
RequestId uint32
|
|
Deadline uint64
|
|
ContainerId []byte
|
|
EngineType EngineType
|
|
}
|
|
|
|
func (m *GetAncestors) GetChainId() []byte { return m.ChainId }
|
|
func (m *GetAncestors) GetRequestId() uint32 { return m.RequestId }
|
|
func (m *GetAncestors) GetDeadline() uint64 { return m.Deadline }
|
|
func (m *GetAncestors) GetEngineType() EngineType { return m.EngineType }
|
|
|
|
// Ancestors message
|
|
type Ancestors struct {
|
|
ChainId []byte
|
|
RequestId uint32
|
|
Containers [][]byte
|
|
}
|
|
|
|
func (m *Ancestors) GetChainId() []byte { return m.ChainId }
|
|
func (m *Ancestors) GetRequestId() uint32 { return m.RequestId }
|
|
|
|
// Get message
|
|
type Get struct {
|
|
ChainId []byte
|
|
RequestId uint32
|
|
Deadline uint64
|
|
ContainerId []byte
|
|
EngineType EngineType
|
|
}
|
|
|
|
func (m *Get) GetChainId() []byte { return m.ChainId }
|
|
func (m *Get) GetRequestId() uint32 { return m.RequestId }
|
|
func (m *Get) GetDeadline() uint64 { return m.Deadline }
|
|
|
|
// Put message
|
|
type Put struct {
|
|
ChainId []byte
|
|
RequestId uint32
|
|
Container []byte
|
|
EngineType EngineType
|
|
}
|
|
|
|
func (m *Put) GetChainId() []byte { return m.ChainId }
|
|
func (m *Put) GetRequestId() uint32 { return m.RequestId }
|
|
|
|
// PushQuery message
|
|
type PushQuery struct {
|
|
ChainId []byte
|
|
RequestId uint32
|
|
Deadline uint64
|
|
Container []byte
|
|
EngineType EngineType
|
|
RequestedHeight uint64
|
|
}
|
|
|
|
func (m *PushQuery) GetChainId() []byte { return m.ChainId }
|
|
func (m *PushQuery) GetRequestId() uint32 { return m.RequestId }
|
|
func (m *PushQuery) GetDeadline() uint64 { return m.Deadline }
|
|
|
|
// PullQuery message
|
|
type PullQuery struct {
|
|
ChainId []byte
|
|
RequestId uint32
|
|
Deadline uint64
|
|
ContainerId []byte
|
|
EngineType EngineType
|
|
RequestedHeight uint64
|
|
}
|
|
|
|
func (m *PullQuery) GetChainId() []byte { return m.ChainId }
|
|
func (m *PullQuery) GetRequestId() uint32 { return m.RequestId }
|
|
func (m *PullQuery) GetDeadline() uint64 { return m.Deadline }
|
|
|
|
// Chits message
|
|
type Chits struct {
|
|
ChainId []byte
|
|
RequestId uint32
|
|
PreferredId []byte
|
|
PreferredIdAtHeight []byte
|
|
AcceptedId []byte
|
|
}
|
|
|
|
func (m *Chits) GetChainId() []byte { return m.ChainId }
|
|
func (m *Chits) GetRequestId() uint32 { return m.RequestId }
|
|
|
|
// Request message (app-level)
|
|
type Request struct {
|
|
ChainId []byte
|
|
RequestId uint32
|
|
Deadline uint64
|
|
Request []byte
|
|
}
|
|
|
|
func (m *Request) GetChainId() []byte { return m.ChainId }
|
|
func (m *Request) GetRequestId() uint32 { return m.RequestId }
|
|
func (m *Request) GetDeadline() uint64 { return m.Deadline }
|
|
|
|
// Response message (app-level)
|
|
type Response struct {
|
|
ChainId []byte
|
|
RequestId uint32
|
|
Response []byte
|
|
}
|
|
|
|
func (m *Response) GetChainId() []byte { return m.ChainId }
|
|
func (m *Response) GetRequestId() uint32 { return m.RequestId }
|
|
|
|
// Gossip message (app-level)
|
|
type Gossip struct {
|
|
ChainId []byte
|
|
Gossip []byte
|
|
}
|
|
|
|
func (m *Gossip) GetChainId() []byte { return m.ChainId }
|
|
|
|
// BFT message
|
|
type BFT struct {
|
|
ChainId []byte
|
|
Message []byte
|
|
}
|
|
|
|
func (m *BFT) GetChainId() []byte { return m.ChainId }
|