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

* [NOD-58] Replace lastBlock with selected tip in version message (#210) * [NOD-58] Replace lastBlock with selected tip in version message * [NOD-58] Fix typo in comment * [NOD-58] Add mutex to SelectedTipHash * [NOD-58] Remove redundant comment * [NOD-58] Remove wantStartingHeight from peerStats * [NOD-58] Remove lock from SelectedTipHash * Nod 53 change getheaders message to handle new block locator (#213) * [NOD-53] Change getheaders message to handle the new block locator mechanism * [NOD-53] Use heap in locateHeaders * [NOD-53] Create a constructor for each heap direction * [NOD-57] Check if a node is synced only by timestamps (#214) * [NOD-60] implement isSyncCandidate (#218) * [NOD-60] Implement isSyncCandidate * [NOD-60] Fix typo * [NOD-65] Fix netsync related tests and remove fields optionality from… (#220) * [NOD-65] Fix netsync related tests and remove fields optionality from msgversion * [NOD-65] gofmt rpcserver.go * [NOD-65] add missing test for verRelayTxFalse * [NOD-62] Change getblocks message to handle the new block locator mechanism (#219) * [NOD-62] Change getblocks message to handle the new block locator mechanism * [NOD-62] Add locateBlockNodes function * [NOD-68] Adjust orphan parents requesting for a DAG (#222) * [NOD-68] Adjust orphan parents requesting for a DAG * [NOD-68] add sendInvsFromRequestedQueue and trigger it when requested blocks slice is empty, or immediatly if we're not in sync mode * [NOD-68] Prevent duplicates from entering to state.requestQueue and add wrapping locks to addBlocksToRequestQueue * [NOD-68] Fix Lock -> Unlock in sendInvsFromRequestedQueue * [NOD-74] Starts syncing again when the current sync peer is done (#225) * [NOD-74] Starts syncing again when the current sync peer is done * [NOD-74] Unlock mtx before netsync is restarted * [NOD-74] Fix name isSyncPeerFree -> isWaitingForBlocks * [NOD-75] fixing netsync bugs (#227) * [NOD-74] Starts syncing again when the current sync peer is done * [NOD-74] Unlock mtx before netsync is restarted * [NOD-75] Fixing netsync bugs * [NOD-80] Request block data from block propagation just after you are… (#231) * [NOD-80] Request block data from block propagation just after you are current * [NOD-80] Fix adding to both queues in addInvToRequestQueue * [NOD-81] Start to mine on top of genesis iff all peers selected tip is genesis (#232) * [NOD-81] Start to mine on top of genesis only if all of your peers' selected tip is genesis * [NOD-81] Explain forAllPeers/forAllOutboundPeers shouldContinue behaviour in comments * [NOD-81] Add forAllInboundPeers and add return values for forAllPeers/forAllOutboundPeers/forAllInboundPeers functions * [NOD-16] Add pushSet to the BlockHeap type * [NOD-16] Fixed syntax error
88 lines
2.4 KiB
Go
88 lines
2.4 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 wire
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
|
|
"github.com/daglabs/btcd/dagconfig/daghash"
|
|
)
|
|
|
|
const (
|
|
// MaxInvPerMsg is the maximum number of inventory vectors that can be in a
|
|
// single bitcoin inv message.
|
|
MaxInvPerMsg = 50000
|
|
|
|
// Maximum payload size for an inventory vector.
|
|
maxInvVectPayload = 4 + daghash.HashSize
|
|
)
|
|
|
|
// InvType represents the allowed types of inventory vectors. See InvVect.
|
|
type InvType uint32
|
|
|
|
// These constants define the various supported inventory vector types.
|
|
const (
|
|
InvTypeError InvType = 0
|
|
InvTypeTx InvType = 1
|
|
InvTypeBlock InvType = 2
|
|
InvTypeFilteredBlock InvType = 3
|
|
InvTypeSyncBlock InvType = 4
|
|
)
|
|
|
|
// Map of service flags back to their constant names for pretty printing.
|
|
var ivStrings = map[InvType]string{
|
|
InvTypeError: "ERROR",
|
|
InvTypeTx: "MSG_TX",
|
|
InvTypeBlock: "MSG_BLOCK",
|
|
InvTypeFilteredBlock: "MSG_FILTERED_BLOCK",
|
|
InvTypeSyncBlock: "MSG_SYNC_BLOCK",
|
|
}
|
|
|
|
// String returns the InvType in human-readable form.
|
|
func (invtype InvType) String() string {
|
|
if s, ok := ivStrings[invtype]; ok {
|
|
return s
|
|
}
|
|
|
|
return fmt.Sprintf("Unknown InvType (%d)", uint32(invtype))
|
|
}
|
|
|
|
// InvVect defines a bitcoin inventory vector which is used to describe data,
|
|
// as specified by the Type field, that a peer wants, has, or does not have to
|
|
// another peer.
|
|
type InvVect struct {
|
|
Type InvType // Type of data
|
|
Hash daghash.Hash // Hash of the data
|
|
}
|
|
|
|
// NewInvVect returns a new InvVect using the provided type and hash.
|
|
func NewInvVect(typ InvType, hash *daghash.Hash) *InvVect {
|
|
return &InvVect{
|
|
Type: typ,
|
|
Hash: *hash,
|
|
}
|
|
}
|
|
|
|
// readInvVect reads an encoded InvVect from r depending on the protocol
|
|
// version.
|
|
func readInvVect(r io.Reader, pver uint32, iv *InvVect) error {
|
|
return readElements(r, &iv.Type, &iv.Hash)
|
|
}
|
|
|
|
// writeInvVect serializes an InvVect to w depending on the protocol version.
|
|
func writeInvVect(w io.Writer, pver uint32, iv *InvVect) error {
|
|
return writeElements(w, iv.Type, &iv.Hash)
|
|
}
|
|
|
|
func (iv *InvVect) String() string {
|
|
return fmt.Sprintf("{%s:%s}", iv.Type, iv.Hash)
|
|
}
|
|
|
|
// IsBlockOrSyncBlock returns true if the inv type is InvTypeBlock or InvTypeSyncBlock
|
|
func (iv *InvVect) IsBlockOrSyncBlock() bool {
|
|
return iv.Type == InvTypeBlock || iv.Type == InvTypeSyncBlock
|
|
}
|