mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-05-29 18:26:41 +00:00

* Replaced the content of MsgIBDRootUTXOSetChunk with pairs of outpoint-utxo entry pairs. * Rename utxoIter to utxoIterator. * Add a big stinky TODO on an assert. * Replace pruningStore staging with a UTXO set iterator. * Reimplement receiveAndInsertIBDRootUTXOSet. * Extract OutpointAndUTXOEntryPairsToDomainOutpointAndUTXOEntryPairs into domainconverters.go. * Pass the outpoint and utxy entry pairs to the pruning store. * Implement InsertCandidatePruningPointUTXOs. * Implement ClearCandidatePruningPointUTXOs. * Implement UpdateCandidatePruningPointMultiset. * Use the candidate pruning point multiset in updatePruningPoint. * Implement CandidatePruningPointUTXOIterator. * Use the pruning point utxo set iterator for StageVirtualUTXOSet. * Defer ClearCandidatePruningPointUTXOs. * Implement OverwriteVirtualUTXOSet. * Implement CommitCandidatePruningPointUTXOSet. * Implement BeginOverwritingVirtualUTXOSet and FinishOverwritingVirtualUTXOSet. * Implement overwriteVirtualUTXOSetAndCommitPruningPointUTXOSet. * Rename ClearCandidatePruningPointUTXOs to ClearCandidatePruningPointData. * Add missing methods to dbManager. * Implement PruningPointUTXOs. * Implement RecoverUTXOIfRequired. * Delete the utxoserialization package. * Fix compilation errors in TestValidateAndInsertPruningPoint. * Switch order of operations in the if statements in PruningPointUTXOs so that Next() wouldn't be unnecessarily called. * Fix missing pruning point utxo set staging and bad slice length. * Fix no default multiset in InsertCandidatePruningPointUTXOs. * Make go vet happy. * Rename candidateXXX to importedXXX. * Do some more renaming. * Rename some more. * Fix bad MsgIBDRootNotFound logic. * Fix an error message. * Simplify receiveIBDRootBlock. * Fix error message in receiveAndInsertIBDRootUTXOSet. * Do some more renaming. * Fix merge errors. * Fix a bug caused by calling iterator.First() unnecessarily. * Remove databaseContext from stores and don't use a transaction in ClearXXX functions. * Simplify receiveAndInsertIBDRootUTXOSet. * Fix offset count in PruningPointUTXOs(). * Fix readOnlyUTXOIteratorWithDiff.First(). * Split handleRequestIBDRootUTXOSetAndBlockFlow into smaller methods. * Rename IbdRootNotFound to UnexpectedPruningPoint. * Rename requestIBDRootHash to requestPruningPointHash. * Rename IBDRootHash to PruningPointHash. * Rename RequestIBDRootUTXOSetAndBlock to RequestPruningPointUTXOSetAndBlock. * Rename IBDRootUTXOSetChunk to PruningPointUTXOSetChunk. * Rename RequestNextIBDRootUTXOSetChunk to RequestNextPruningPointUTXOSetChunk. * Rename DoneIBDRootUTXOSetChunks to DonePruningPointUTXOSetChunks. * Rename remaining references to IBD root. * Fix an error message. * Add a check for HadStartedImportingPruningPointUTXOSet in commitVirtualUTXODiff. * Add a check for HadStartedImportingPruningPointUTXOSet in ImportPruningPointUTXOSetIntoVirtualUTXOSet. * Move FinishImportingPruningPointUTXOSet closer to HadStartedImportingPruningPointUTXOSet. * Remove reference to pruningStore in utxoSetIterator. * Pointerify utxoSetIterator receivers. * Fix bad insert in CommitImportedPruningPointUTXOSet. * Rename commitImportedPruningPointUTXOSetAll to applyImportedPruningPointUTXOSet. * Simplify PruningPointUTXOs. * Add populateTransactionWithUTXOEntriesFromUTXOSet. * Fix a TODO comment. * Rename InsertImportedPruningPointUTXOs to AppendImportedPruningPointUTXOs. * Extract handleRequestPruningPointUTXOSetAndBlockMessage to a separate method. * Rename stuff in readOnlyUTXOIteratorWithDiff.First(). * Address toAddIterator in readOnlyUTXOIteratorWithDiff.First(). * Call First() before any full iteration on ReadOnlyUTXOSetIterator. * Call First() before any full iteration on a database Cursor. * Put StartImportingPruningPointUTXOSet inside the pruning point transaction. * Make serializeOutpoint and serializeUTXOEntry free functions in pruningStore. * Fix readOnlyUTXOIteratorWithDiff.First(). * Fix bad validations in importPruningPoint. * Remove superfluous call to validateBlockTransactionsAgainstPastUTXO.
236 lines
12 KiB
Go
236 lines
12 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
|
|
CmdRequestPruningPointUTXOSetAndBlock
|
|
CmdPruningPointUTXOSetChunk
|
|
CmdRequestIBDBlocks
|
|
CmdUnexpectedPruningPoint
|
|
CmdRequestPruningPointHash
|
|
CmdPruningPointHash
|
|
CmdIBDBlockLocator
|
|
CmdIBDBlockLocatorHighestHash
|
|
CmdBlockHeaders
|
|
CmdRequestNextPruningPointUTXOSetChunk
|
|
CmdDonePruningPointUTXOSetChunks
|
|
|
|
// rpc
|
|
CmdGetCurrentNetworkRequestMessage
|
|
CmdGetCurrentNetworkResponseMessage
|
|
CmdSubmitBlockRequestMessage
|
|
CmdSubmitBlockResponseMessage
|
|
CmdGetBlockTemplateRequestMessage
|
|
CmdGetBlockTemplateResponseMessage
|
|
CmdGetBlockTemplateTransactionMessage
|
|
CmdNotifyBlockAddedRequestMessage
|
|
CmdNotifyBlockAddedResponseMessage
|
|
CmdBlockAddedNotificationMessage
|
|
CmdGetPeerAddressesRequestMessage
|
|
CmdGetPeerAddressesResponseMessage
|
|
CmdGetSelectedTipHashRequestMessage
|
|
CmdGetSelectedTipHashResponseMessage
|
|
CmdGetMempoolEntryRequestMessage
|
|
CmdGetMempoolEntryResponseMessage
|
|
CmdGetConnectedPeerInfoRequestMessage
|
|
CmdGetConnectedPeerInfoResponseMessage
|
|
CmdAddPeerRequestMessage
|
|
CmdAddPeerResponseMessage
|
|
CmdSubmitTransactionRequestMessage
|
|
CmdSubmitTransactionResponseMessage
|
|
CmdNotifyVirtualSelectedParentChainChangedRequestMessage
|
|
CmdNotifyVirtualSelectedParentChainChangedResponseMessage
|
|
CmdVirtualSelectedParentChainChangedNotificationMessage
|
|
CmdGetBlockRequestMessage
|
|
CmdGetBlockResponseMessage
|
|
CmdGetSubnetworkRequestMessage
|
|
CmdGetSubnetworkResponseMessage
|
|
CmdGetVirtualSelectedParentChainFromBlockRequestMessage
|
|
CmdGetVirtualSelectedParentChainFromBlockResponseMessage
|
|
CmdGetBlocksRequestMessage
|
|
CmdGetBlocksResponseMessage
|
|
CmdGetBlockCountRequestMessage
|
|
CmdGetBlockCountResponseMessage
|
|
CmdGetBlockDAGInfoRequestMessage
|
|
CmdGetBlockDAGInfoResponseMessage
|
|
CmdResolveFinalityConflictRequestMessage
|
|
CmdResolveFinalityConflictResponseMessage
|
|
CmdNotifyFinalityConflictsRequestMessage
|
|
CmdNotifyFinalityConflictsResponseMessage
|
|
CmdFinalityConflictNotificationMessage
|
|
CmdFinalityConflictResolvedNotificationMessage
|
|
CmdGetMempoolEntriesRequestMessage
|
|
CmdGetMempoolEntriesResponseMessage
|
|
CmdShutDownRequestMessage
|
|
CmdShutDownResponseMessage
|
|
CmdGetHeadersRequestMessage
|
|
CmdGetHeadersResponseMessage
|
|
CmdNotifyUTXOsChangedRequestMessage
|
|
CmdNotifyUTXOsChangedResponseMessage
|
|
CmdUTXOsChangedNotificationMessage
|
|
CmdGetUTXOsByAddressesRequestMessage
|
|
CmdGetUTXOsByAddressesResponseMessage
|
|
CmdGetVirtualSelectedParentBlueScoreRequestMessage
|
|
CmdGetVirtualSelectedParentBlueScoreResponseMessage
|
|
CmdNotifyVirtualSelectedParentBlueScoreChangedRequestMessage
|
|
CmdNotifyVirtualSelectedParentBlueScoreChangedResponseMessage
|
|
CmdVirtualSelectedParentBlueScoreChangedNotificationMessage
|
|
)
|
|
|
|
// 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",
|
|
CmdRequestPruningPointUTXOSetAndBlock: "RequestPruningPointUTXOSetAndBlock",
|
|
CmdPruningPointUTXOSetChunk: "PruningPointUTXOSetChunk",
|
|
CmdRequestIBDBlocks: "RequestIBDBlocks",
|
|
CmdUnexpectedPruningPoint: "UnexpectedPruningPoint",
|
|
CmdRequestPruningPointHash: "RequestPruningPointHashHash",
|
|
CmdPruningPointHash: "PruningPointHash",
|
|
CmdIBDBlockLocator: "IBDBlockLocator",
|
|
CmdIBDBlockLocatorHighestHash: "IBDBlockLocatorHighestHash",
|
|
CmdBlockHeaders: "BlockHeaders",
|
|
CmdRequestNextPruningPointUTXOSetChunk: "RequestNextPruningPointUTXOSetChunk",
|
|
CmdDonePruningPointUTXOSetChunks: "DonePruningPointUTXOSetChunks",
|
|
}
|
|
|
|
// 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",
|
|
CmdNotifyVirtualSelectedParentChainChangedRequestMessage: "NotifyVirtualSelectedParentChainChangedRequest",
|
|
CmdNotifyVirtualSelectedParentChainChangedResponseMessage: "NotifyVirtualSelectedParentChainChangedResponse",
|
|
CmdVirtualSelectedParentChainChangedNotificationMessage: "VirtualSelectedParentChainChangedNotification",
|
|
CmdGetBlockRequestMessage: "GetBlockRequest",
|
|
CmdGetBlockResponseMessage: "GetBlockResponse",
|
|
CmdGetSubnetworkRequestMessage: "GetSubnetworkRequest",
|
|
CmdGetSubnetworkResponseMessage: "GetSubnetworkResponse",
|
|
CmdGetVirtualSelectedParentChainFromBlockRequestMessage: "GetVirtualSelectedParentChainFromBlockRequest",
|
|
CmdGetVirtualSelectedParentChainFromBlockResponseMessage: "GetVirtualSelectedParentChainFromBlockResponse",
|
|
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: "GetMempoolEntriesRequest",
|
|
CmdGetMempoolEntriesResponseMessage: "GetMempoolEntriesResponse",
|
|
CmdGetHeadersRequestMessage: "GetHeadersRequest",
|
|
CmdGetHeadersResponseMessage: "GetHeadersResponse",
|
|
CmdNotifyUTXOsChangedRequestMessage: "NotifyUTXOsChangedRequest",
|
|
CmdNotifyUTXOsChangedResponseMessage: "NotifyUTXOsChangedResponse",
|
|
CmdUTXOsChangedNotificationMessage: "UTXOsChangedNotification",
|
|
CmdGetUTXOsByAddressesRequestMessage: "GetUTXOsByAddressesRequest",
|
|
CmdGetUTXOsByAddressesResponseMessage: "GetUTXOsByAddressesResponse",
|
|
CmdGetVirtualSelectedParentBlueScoreRequestMessage: "GetVirtualSelectedParentBlueScoreRequest",
|
|
CmdGetVirtualSelectedParentBlueScoreResponseMessage: "GetVirtualSelectedParentBlueScoreResponse",
|
|
CmdNotifyVirtualSelectedParentBlueScoreChangedRequestMessage: "NotifyVirtualSelectedParentBlueScoreChangedRequest",
|
|
CmdNotifyVirtualSelectedParentBlueScoreChangedResponseMessage: "NotifyVirtualSelectedParentBlueScoreChangedResponse",
|
|
CmdVirtualSelectedParentBlueScoreChangedNotificationMessage: "VirtualSelectedParentBlueScoreChangedNotification",
|
|
}
|
|
|
|
// 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)
|
|
}
|