mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-03-30 15:08:33 +00:00

* start * pass tests, (cannot get before put!) and clean up. * add rpc call. * create and pass tests, fix bugs. fully implement rpc * As always fmt * remover old test * clean up proto comment * put the logger back in place. * revert back to 10 sec limit. * migration, change utxoChanged removal to whole utxoEntryPair, add methods to update circulating supply, intialize circulating supply from reset. * Update utxoindex.go * ad * rename to max, change comment * one more total to max Co-authored-by: Ori Newman <orinewman1@gmail.com>
316 lines
17 KiB
Go
316 lines
17 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
|
|
CmdDoneHeaders
|
|
CmdTransactionNotFound
|
|
CmdReject
|
|
CmdRequestNextHeaders
|
|
CmdRequestPruningPointUTXOSet
|
|
CmdPruningPointUTXOSetChunk
|
|
CmdUnexpectedPruningPoint
|
|
CmdIBDBlockLocator
|
|
CmdIBDBlockLocatorHighestHash
|
|
CmdIBDBlockLocatorHighestHashNotFound
|
|
CmdBlockHeaders
|
|
CmdRequestNextPruningPointUTXOSetChunk
|
|
CmdDonePruningPointUTXOSetChunks
|
|
CmdBlockWithTrustedData
|
|
CmdDoneBlocksWithTrustedData
|
|
CmdRequestPruningPointAndItsAnticone
|
|
CmdIBDBlock
|
|
CmdRequestIBDBlocks
|
|
CmdPruningPoints
|
|
CmdRequestPruningPointProof
|
|
CmdPruningPointProof
|
|
CmdReady
|
|
CmdTrustedData
|
|
CmdBlockWithTrustedDataV4
|
|
CmdRequestNextPruningPointAndItsAnticoneBlocks
|
|
CmdRequestIBDChainBlockLocator
|
|
CmdIBDChainBlockLocator
|
|
CmdRequestAnticone
|
|
|
|
// 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
|
|
CmdStopNotifyingUTXOsChangedRequestMessage
|
|
CmdStopNotifyingUTXOsChangedResponseMessage
|
|
CmdGetUTXOsByAddressesRequestMessage
|
|
CmdGetUTXOsByAddressesResponseMessage
|
|
CmdGetBalanceByAddressRequestMessage
|
|
CmdGetBalanceByAddressResponseMessage
|
|
CmdGetVirtualSelectedParentBlueScoreRequestMessage
|
|
CmdGetVirtualSelectedParentBlueScoreResponseMessage
|
|
CmdNotifyVirtualSelectedParentBlueScoreChangedRequestMessage
|
|
CmdNotifyVirtualSelectedParentBlueScoreChangedResponseMessage
|
|
CmdVirtualSelectedParentBlueScoreChangedNotificationMessage
|
|
CmdBanRequestMessage
|
|
CmdBanResponseMessage
|
|
CmdUnbanRequestMessage
|
|
CmdUnbanResponseMessage
|
|
CmdGetInfoRequestMessage
|
|
CmdGetInfoResponseMessage
|
|
CmdNotifyPruningPointUTXOSetOverrideRequestMessage
|
|
CmdNotifyPruningPointUTXOSetOverrideResponseMessage
|
|
CmdPruningPointUTXOSetOverrideNotificationMessage
|
|
CmdStopNotifyingPruningPointUTXOSetOverrideRequestMessage
|
|
CmdStopNotifyingPruningPointUTXOSetOverrideResponseMessage
|
|
CmdEstimateNetworkHashesPerSecondRequestMessage
|
|
CmdEstimateNetworkHashesPerSecondResponseMessage
|
|
CmdNotifyVirtualDaaScoreChangedRequestMessage
|
|
CmdNotifyVirtualDaaScoreChangedResponseMessage
|
|
CmdVirtualDaaScoreChangedNotificationMessage
|
|
CmdGetBalancesByAddressesRequestMessage
|
|
CmdGetBalancesByAddressesResponseMessage
|
|
CmdNotifyNewBlockTemplateRequestMessage
|
|
CmdNotifyNewBlockTemplateResponseMessage
|
|
CmdNewBlockTemplateNotificationMessage
|
|
CmdGetMempoolEntriesByAddressesRequestMessage
|
|
CmdGetMempoolEntriesByAddressesResponseMessage
|
|
CmdGetCoinSupplyRequestMessage
|
|
CmdGetCoinSupplyResponseMessage
|
|
)
|
|
|
|
// ProtocolMessageCommandToString maps all MessageCommands to their string representation
|
|
var ProtocolMessageCommandToString = map[MessageCommand]string{
|
|
CmdVersion: "Version",
|
|
CmdVerAck: "VerAck",
|
|
CmdRequestAddresses: "RequestAddresses",
|
|
CmdAddresses: "Addresses",
|
|
CmdRequestHeaders: "CmdRequestHeaders",
|
|
CmdBlock: "Block",
|
|
CmdTx: "Tx",
|
|
CmdPing: "Ping",
|
|
CmdPong: "Pong",
|
|
CmdRequestBlockLocator: "RequestBlockLocator",
|
|
CmdBlockLocator: "BlockLocator",
|
|
CmdInvRelayBlock: "InvRelayBlock",
|
|
CmdRequestRelayBlocks: "RequestRelayBlocks",
|
|
CmdInvTransaction: "InvTransaction",
|
|
CmdRequestTransactions: "RequestTransactions",
|
|
CmdDoneHeaders: "DoneHeaders",
|
|
CmdTransactionNotFound: "TransactionNotFound",
|
|
CmdReject: "Reject",
|
|
CmdRequestNextHeaders: "RequestNextHeaders",
|
|
CmdRequestPruningPointUTXOSet: "RequestPruningPointUTXOSet",
|
|
CmdPruningPointUTXOSetChunk: "PruningPointUTXOSetChunk",
|
|
CmdUnexpectedPruningPoint: "UnexpectedPruningPoint",
|
|
CmdIBDBlockLocator: "IBDBlockLocator",
|
|
CmdIBDBlockLocatorHighestHash: "IBDBlockLocatorHighestHash",
|
|
CmdIBDBlockLocatorHighestHashNotFound: "IBDBlockLocatorHighestHashNotFound",
|
|
CmdBlockHeaders: "BlockHeaders",
|
|
CmdRequestNextPruningPointUTXOSetChunk: "RequestNextPruningPointUTXOSetChunk",
|
|
CmdDonePruningPointUTXOSetChunks: "DonePruningPointUTXOSetChunks",
|
|
CmdBlockWithTrustedData: "BlockWithTrustedData",
|
|
CmdDoneBlocksWithTrustedData: "DoneBlocksWithTrustedData",
|
|
CmdRequestPruningPointAndItsAnticone: "RequestPruningPointAndItsAnticoneHeaders",
|
|
CmdIBDBlock: "IBDBlock",
|
|
CmdRequestIBDBlocks: "RequestIBDBlocks",
|
|
CmdPruningPoints: "PruningPoints",
|
|
CmdRequestPruningPointProof: "RequestPruningPointProof",
|
|
CmdPruningPointProof: "PruningPointProof",
|
|
CmdReady: "Ready",
|
|
CmdTrustedData: "TrustedData",
|
|
CmdBlockWithTrustedDataV4: "BlockWithTrustedDataV4",
|
|
CmdRequestNextPruningPointAndItsAnticoneBlocks: "RequestNextPruningPointAndItsAnticoneBlocks",
|
|
CmdRequestIBDChainBlockLocator: "RequestIBDChainBlockLocator",
|
|
CmdIBDChainBlockLocator: "IBDChainBlockLocator",
|
|
CmdRequestAnticone: "RequestAnticone",
|
|
}
|
|
|
|
// 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",
|
|
CmdStopNotifyingUTXOsChangedRequestMessage: "StopNotifyingUTXOsChangedRequest",
|
|
CmdStopNotifyingUTXOsChangedResponseMessage: "StopNotifyingUTXOsChangedResponse",
|
|
CmdGetUTXOsByAddressesRequestMessage: "GetUTXOsByAddressesRequest",
|
|
CmdGetUTXOsByAddressesResponseMessage: "GetUTXOsByAddressesResponse",
|
|
CmdGetBalanceByAddressRequestMessage: "GetBalanceByAddressRequest",
|
|
CmdGetBalanceByAddressResponseMessage: "GetBalancesByAddressResponse",
|
|
CmdGetVirtualSelectedParentBlueScoreRequestMessage: "GetVirtualSelectedParentBlueScoreRequest",
|
|
CmdGetVirtualSelectedParentBlueScoreResponseMessage: "GetVirtualSelectedParentBlueScoreResponse",
|
|
CmdNotifyVirtualSelectedParentBlueScoreChangedRequestMessage: "NotifyVirtualSelectedParentBlueScoreChangedRequest",
|
|
CmdNotifyVirtualSelectedParentBlueScoreChangedResponseMessage: "NotifyVirtualSelectedParentBlueScoreChangedResponse",
|
|
CmdVirtualSelectedParentBlueScoreChangedNotificationMessage: "VirtualSelectedParentBlueScoreChangedNotification",
|
|
CmdBanRequestMessage: "BanRequest",
|
|
CmdBanResponseMessage: "BanResponse",
|
|
CmdUnbanRequestMessage: "UnbanRequest",
|
|
CmdUnbanResponseMessage: "UnbanResponse",
|
|
CmdGetInfoRequestMessage: "GetInfoRequest",
|
|
CmdGetInfoResponseMessage: "GeInfoResponse",
|
|
CmdNotifyPruningPointUTXOSetOverrideRequestMessage: "NotifyPruningPointUTXOSetOverrideRequest",
|
|
CmdNotifyPruningPointUTXOSetOverrideResponseMessage: "NotifyPruningPointUTXOSetOverrideResponse",
|
|
CmdPruningPointUTXOSetOverrideNotificationMessage: "PruningPointUTXOSetOverrideNotification",
|
|
CmdStopNotifyingPruningPointUTXOSetOverrideRequestMessage: "StopNotifyingPruningPointUTXOSetOverrideRequest",
|
|
CmdStopNotifyingPruningPointUTXOSetOverrideResponseMessage: "StopNotifyingPruningPointUTXOSetOverrideResponse",
|
|
CmdEstimateNetworkHashesPerSecondRequestMessage: "EstimateNetworkHashesPerSecondRequest",
|
|
CmdEstimateNetworkHashesPerSecondResponseMessage: "EstimateNetworkHashesPerSecondResponse",
|
|
CmdNotifyVirtualDaaScoreChangedRequestMessage: "NotifyVirtualDaaScoreChangedRequest",
|
|
CmdNotifyVirtualDaaScoreChangedResponseMessage: "NotifyVirtualDaaScoreChangedResponse",
|
|
CmdVirtualDaaScoreChangedNotificationMessage: "VirtualDaaScoreChangedNotification",
|
|
CmdGetBalancesByAddressesRequestMessage: "GetBalancesByAddressesRequest",
|
|
CmdGetBalancesByAddressesResponseMessage: "GetBalancesByAddressesResponse",
|
|
CmdNotifyNewBlockTemplateRequestMessage: "NotifyNewBlockTemplateRequest",
|
|
CmdNotifyNewBlockTemplateResponseMessage: "NotifyNewBlockTemplateResponse",
|
|
CmdNewBlockTemplateNotificationMessage: "NewBlockTemplateNotification",
|
|
CmdGetMempoolEntriesByAddressesRequestMessage: "GetMempoolEntriesByAddressesRequest",
|
|
CmdGetMempoolEntriesByAddressesResponseMessage: "GetMempoolEntriesByAddressesResponse",
|
|
CmdGetCoinSupplyRequestMessage: "GetCoinSupplyRequest",
|
|
CmdGetCoinSupplyResponseMessage: "GetCoinSupplyResponse",
|
|
}
|
|
|
|
// 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)
|
|
}
|