mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-05-31 03:06:44 +00:00

* [NOD-1579] Remove selected tip hash messages. * [NOD-1579] Start moving IBD stuff into blockrelay. * [NOD-1579] Rename relaytransactions to transactionrelay. * [NOD-1579] Move IBD files into blockrelay. * [NOD-1579] Remove flow stuff from ibd.go. * [NOD-1579] Bring back IsInIBD(). * [NOD-1579] Simplify block relay flow. * [NOD-1579] Check orphan pool for missing parents to avoid unnecessary processing. * [NOD-1579] Implement processOrphan. * [NOD-1579] Implement addToOrphanSetAndRequestMissingParents. * [NOD-1579] Fix TestIBD. * [NOD-1579] Implement isBlockInOrphanResolutionRange. * [NOD-1579] Implement limited block locators. * [NOD-1579] Add some comments. * [NOD-1579] Specifically check for StatusHeaderOnly in blockrelay. * [NOD-1579] Simplify runIBDIfNotRunning. * [NOD-1579] Don't run IBD if it is already running. * [NOD-1579] Fix a comment. * [NOD-1579] Rename mode to syncInfo. * [NOD-1579] Simplify validateAndInsertBlock. * [NOD-1579] Fix bad SyncStateSynced condition. * [NOD-1579] Implement validateAgainstSyncStateAndResolveInsertMode. * [NOD-1579] Use insertModeHeader. * [NOD-1579] Add logs to TrySetIBDRunning and UnsetIBDRunning. * [NOD-1579] Implement and use dequeueIncomingMessageAndSkipInvs. * [NOD-1579] Fix a log. * [NOD-1579] Fix a bug in createBlockLocator. * [NOD-1579] Rename a variable. * [NOD-1579] Fix a slew of bugs in missingBlockBodyHashes and selectedChildIterator. * [NOD-1579] Fix bad chunk size in syncMissingBlockBodies. * [NOD-1579] Remove maxOrphanBlueScoreDiff. * [NOD-1579] Fix merge errors. * [NOD-1579] Remove a debug log. * [NOD-1579] Add logs. * [NOD-1579] Make various go quality tools happy. * [NOD-1579] Fix a typo in a variable name. * [NOD-1579] Fix full blocks over header-only blocks not failing the missing-parents validation. * [NOD-1579] Add an error log about a condition that should never happen. * [NOD-1579] Check all antiPast hashes instead of just the lowHash's anticone to filter for header-only blocks. * [NOD-1579] Remove the nil stuff from GetBlockLocator. * [NOD-1579] Remove superfluous condition in handleRelayInvsFlow.start(). * [NOD-1579] Return a boolean from requestBlock instead of comparing to nil. * [NOD-1579] Fix a bad log.Debugf. * [NOD-1579] Remove a redundant check. * [NOD-1579] Change an info log to a warning log. * [NOD-1579] Move OnNewBlock out of relayBlock. * [NOD-1579] Remove redundant exists check from runIBDIfNotRunning. * [NOD-1579] Fix bad call to OnNewBlock. * [NOD-1579] Remove an impossible check. * [NOD-1579] Added a log. * [NOD-1579] Rename insertModeBlockWithoutUpdatingVirtual to insertModeBlockBody. * [NOD-1579] Add a check for duplicate headers. * [NOD-1579] Added a comment. * [NOD-1579] Tighten a stop condition. * [NOD-1579] Simplify a log. * [NOD-1579] Clarify a log. * [NOD-1579] Move a log.
202 lines
8.5 KiB
Go
202 lines
8.5 KiB
Go
// Copyright (c) 2013-2016 The btcsuite developers
|
|
// Use of this source code is governed by an ISC
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package appmessage
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
// MaxMessagePayload is the maximum bytes a message can be regardless of other
|
|
// individual limits imposed by messages themselves.
|
|
const MaxMessagePayload = 1024 * 1024 * 32 // 32MB
|
|
|
|
// MessageCommand is a number in the header of a message that represents its type.
|
|
type MessageCommand uint32
|
|
|
|
func (cmd MessageCommand) String() string {
|
|
cmdString, ok := ProtocolMessageCommandToString[cmd]
|
|
if !ok {
|
|
cmdString, ok = RPCMessageCommandToString[cmd]
|
|
}
|
|
if !ok {
|
|
cmdString = "unknown command"
|
|
}
|
|
return fmt.Sprintf("%s [code %d]", cmdString, uint8(cmd))
|
|
}
|
|
|
|
// Commands used in kaspa message headers which describe the type of message.
|
|
const (
|
|
// protocol
|
|
CmdVersion MessageCommand = iota
|
|
CmdVerAck
|
|
CmdRequestAddresses
|
|
CmdAddresses
|
|
CmdRequestHeaders
|
|
CmdBlock
|
|
CmdTx
|
|
CmdPing
|
|
CmdPong
|
|
CmdRequestBlockLocator
|
|
CmdBlockLocator
|
|
CmdInvRelayBlock
|
|
CmdRequestRelayBlocks
|
|
CmdInvTransaction
|
|
CmdRequestTransactions
|
|
CmdIBDBlock
|
|
CmdDoneHeaders
|
|
CmdTransactionNotFound
|
|
CmdReject
|
|
CmdHeader
|
|
CmdRequestNextHeaders
|
|
CmdRequestIBDRootUTXOSetAndBlock
|
|
CmdIBDRootUTXOSetAndBlock
|
|
CmdRequestIBDBlocks
|
|
CmdIBDRootNotFound
|
|
|
|
// rpc
|
|
CmdGetCurrentNetworkRequestMessage
|
|
CmdGetCurrentNetworkResponseMessage
|
|
CmdSubmitBlockRequestMessage
|
|
CmdSubmitBlockResponseMessage
|
|
CmdGetBlockTemplateRequestMessage
|
|
CmdGetBlockTemplateResponseMessage
|
|
CmdGetBlockTemplateTransactionMessage
|
|
CmdNotifyBlockAddedRequestMessage
|
|
CmdNotifyBlockAddedResponseMessage
|
|
CmdBlockAddedNotificationMessage
|
|
CmdGetPeerAddressesRequestMessage
|
|
CmdGetPeerAddressesResponseMessage
|
|
CmdGetSelectedTipHashRequestMessage
|
|
CmdGetSelectedTipHashResponseMessage
|
|
CmdGetMempoolEntryRequestMessage
|
|
CmdGetMempoolEntryResponseMessage
|
|
CmdGetConnectedPeerInfoRequestMessage
|
|
CmdGetConnectedPeerInfoResponseMessage
|
|
CmdAddPeerRequestMessage
|
|
CmdAddPeerResponseMessage
|
|
CmdSubmitTransactionRequestMessage
|
|
CmdSubmitTransactionResponseMessage
|
|
CmdNotifyChainChangedRequestMessage
|
|
CmdNotifyChainChangedResponseMessage
|
|
CmdChainChangedNotificationMessage
|
|
CmdGetBlockRequestMessage
|
|
CmdGetBlockResponseMessage
|
|
CmdGetSubnetworkRequestMessage
|
|
CmdGetSubnetworkResponseMessage
|
|
CmdGetChainFromBlockRequestMessage
|
|
CmdGetChainFromBlockResponseMessage
|
|
CmdGetBlocksRequestMessage
|
|
CmdGetBlocksResponseMessage
|
|
CmdGetBlockCountRequestMessage
|
|
CmdGetBlockCountResponseMessage
|
|
CmdGetBlockDAGInfoRequestMessage
|
|
CmdGetBlockDAGInfoResponseMessage
|
|
CmdResolveFinalityConflictRequestMessage
|
|
CmdResolveFinalityConflictResponseMessage
|
|
CmdNotifyFinalityConflictsRequestMessage
|
|
CmdNotifyFinalityConflictsResponseMessage
|
|
CmdFinalityConflictNotificationMessage
|
|
CmdFinalityConflictResolvedNotificationMessage
|
|
CmdGetMempoolEntriesRequestMessage
|
|
CmdGetMempoolEntriesResponseMessage
|
|
CmdShutDownRequestMessage
|
|
CmdShutDownResponseMessage
|
|
CmdGetHeadersRequestMessage
|
|
CmdGetHeadersResponseMessage
|
|
)
|
|
|
|
// ProtocolMessageCommandToString maps all MessageCommands to their string representation
|
|
var ProtocolMessageCommandToString = map[MessageCommand]string{
|
|
CmdVersion: "Version",
|
|
CmdVerAck: "VerAck",
|
|
CmdRequestAddresses: "RequestAddresses",
|
|
CmdAddresses: "Addresses",
|
|
CmdRequestHeaders: "RequestHeaders",
|
|
CmdBlock: "Block",
|
|
CmdTx: "Tx",
|
|
CmdPing: "Ping",
|
|
CmdPong: "Pong",
|
|
CmdRequestBlockLocator: "RequestBlockLocator",
|
|
CmdBlockLocator: "BlockLocator",
|
|
CmdInvRelayBlock: "InvRelayBlock",
|
|
CmdRequestRelayBlocks: "RequestRelayBlocks",
|
|
CmdInvTransaction: "InvTransaction",
|
|
CmdRequestTransactions: "RequestTransactions",
|
|
CmdIBDBlock: "IBDBlock",
|
|
CmdDoneHeaders: "DoneHeaders",
|
|
CmdTransactionNotFound: "TransactionNotFound",
|
|
CmdReject: "Reject",
|
|
CmdHeader: "Header",
|
|
CmdRequestNextHeaders: "RequestNextHeaders",
|
|
CmdRequestIBDRootUTXOSetAndBlock: "RequestPruningUTXOSetAndBlock",
|
|
CmdIBDRootUTXOSetAndBlock: "IBDRootUTXOSetAndBlock",
|
|
CmdRequestIBDBlocks: "RequestIBDBlocks",
|
|
CmdIBDRootNotFound: "IBDRootNotFound",
|
|
}
|
|
|
|
// RPCMessageCommandToString maps all MessageCommands to their string representation
|
|
var RPCMessageCommandToString = map[MessageCommand]string{
|
|
CmdGetCurrentNetworkRequestMessage: "GetCurrentNetworkRequest",
|
|
CmdGetCurrentNetworkResponseMessage: "GetCurrentNetworkResponse",
|
|
CmdSubmitBlockRequestMessage: "SubmitBlockRequest",
|
|
CmdSubmitBlockResponseMessage: "SubmitBlockResponse",
|
|
CmdGetBlockTemplateRequestMessage: "GetBlockTemplateRequest",
|
|
CmdGetBlockTemplateResponseMessage: "GetBlockTemplateResponse",
|
|
CmdGetBlockTemplateTransactionMessage: "CmdGetBlockTemplateTransaction",
|
|
CmdNotifyBlockAddedRequestMessage: "NotifyBlockAddedRequest",
|
|
CmdNotifyBlockAddedResponseMessage: "NotifyBlockAddedResponse",
|
|
CmdBlockAddedNotificationMessage: "BlockAddedNotification",
|
|
CmdGetPeerAddressesRequestMessage: "GetPeerAddressesRequest",
|
|
CmdGetPeerAddressesResponseMessage: "GetPeerAddressesResponse",
|
|
CmdGetSelectedTipHashRequestMessage: "GetSelectedTipHashRequest",
|
|
CmdGetSelectedTipHashResponseMessage: "GetSelectedTipHashResponse",
|
|
CmdGetMempoolEntryRequestMessage: "GetMempoolEntryRequest",
|
|
CmdGetMempoolEntryResponseMessage: "GetMempoolEntryResponse",
|
|
CmdGetConnectedPeerInfoRequestMessage: "GetConnectedPeerInfoRequest",
|
|
CmdGetConnectedPeerInfoResponseMessage: "GetConnectedPeerInfoResponse",
|
|
CmdAddPeerRequestMessage: "AddPeerRequest",
|
|
CmdAddPeerResponseMessage: "AddPeerResponse",
|
|
CmdSubmitTransactionRequestMessage: "SubmitTransactionRequest",
|
|
CmdSubmitTransactionResponseMessage: "SubmitTransactionResponse",
|
|
CmdNotifyChainChangedRequestMessage: "NotifyChainChangedRequest",
|
|
CmdNotifyChainChangedResponseMessage: "NotifyChainChangedResponse",
|
|
CmdChainChangedNotificationMessage: "ChainChangedNotification",
|
|
CmdGetBlockRequestMessage: "GetBlockRequest",
|
|
CmdGetBlockResponseMessage: "GetBlockResponse",
|
|
CmdGetSubnetworkRequestMessage: "GetSubnetworkRequest",
|
|
CmdGetSubnetworkResponseMessage: "GetSubnetworkResponse",
|
|
CmdGetChainFromBlockRequestMessage: "GetChainFromBlockRequest",
|
|
CmdGetChainFromBlockResponseMessage: "GetChainFromBlockResponse",
|
|
CmdGetBlocksRequestMessage: "GetBlocksRequest",
|
|
CmdGetBlocksResponseMessage: "GetBlocksResponse",
|
|
CmdGetBlockCountRequestMessage: "GetBlockCountRequest",
|
|
CmdGetBlockCountResponseMessage: "GetBlockCountResponse",
|
|
CmdGetBlockDAGInfoRequestMessage: "GetBlockDAGInfoRequest",
|
|
CmdGetBlockDAGInfoResponseMessage: "GetBlockDAGInfoResponse",
|
|
CmdResolveFinalityConflictRequestMessage: "ResolveFinalityConflictRequest",
|
|
CmdResolveFinalityConflictResponseMessage: "ResolveFinalityConflictResponse",
|
|
CmdNotifyFinalityConflictsRequestMessage: "NotifyFinalityConflictsRequest",
|
|
CmdNotifyFinalityConflictsResponseMessage: "NotifyFinalityConflictsResponse",
|
|
CmdFinalityConflictNotificationMessage: "FinalityConflictNotification",
|
|
CmdFinalityConflictResolvedNotificationMessage: "FinalityConflictResolvedNotification",
|
|
CmdGetMempoolEntriesRequestMessage: "GetMempoolEntriesRequestMessage",
|
|
CmdGetMempoolEntriesResponseMessage: "GetMempoolEntriesResponseMessage",
|
|
CmdGetHeadersRequestMessage: "GetHeadersRequest",
|
|
CmdGetHeadersResponseMessage: "GetHeadersResponse",
|
|
}
|
|
|
|
// Message is an interface that describes a kaspa message. A type that
|
|
// implements Message has complete control over the representation of its data
|
|
// and may therefore contain additional or fewer fields than those which
|
|
// are used directly in the protocol encoded message.
|
|
type Message interface {
|
|
Command() MessageCommand
|
|
MessageNumber() uint64
|
|
SetMessageNumber(index uint64)
|
|
ReceivedAt() time.Time
|
|
SetReceivedAt(receivedAt time.Time)
|
|
}
|