github.com/BlockABC/godash@v0.0.0-20191112120524-f4aa3a32c566/wire/invvect.go (about) 1 // Copyright (c) 2013-2015 The btcsuite developers 2 // Copyright (c) 2016 The Dash developers 3 // Use of this source code is governed by an ISC 4 // license that can be found in the LICENSE file. 5 6 package wire 7 8 import ( 9 "fmt" 10 "io" 11 ) 12 13 const ( 14 // MaxInvPerMsg is the maximum number of inventory vectors that can be in a 15 // single bitcoin inv message. 16 MaxInvPerMsg = 50000 17 18 // Maximum payload size for an inventory vector. 19 maxInvVectPayload = 4 + HashSize 20 ) 21 22 // InvType represents the allowed types of inventory vectors. See InvVect. 23 type InvType uint32 24 25 // These constants define the various supported inventory vector types. 26 const ( 27 InvTypeError InvType = 0 28 InvTypeTx InvType = 1 29 InvTypeBlock InvType = 2 30 InvTypeFilteredBlock InvType = 3 31 ) 32 33 // Map of service flags back to their constant names for pretty printing. 34 var ivStrings = map[InvType]string{ 35 InvTypeError: "ERROR", 36 InvTypeTx: "MSG_TX", 37 InvTypeBlock: "MSG_BLOCK", 38 InvTypeFilteredBlock: "MSG_FILTERED_BLOCK", 39 } 40 41 // String returns the InvType in human-readable form. 42 func (invtype InvType) String() string { 43 if s, ok := ivStrings[invtype]; ok { 44 return s 45 } 46 47 return fmt.Sprintf("Unknown InvType (%d)", uint32(invtype)) 48 } 49 50 // InvVect defines a bitcoin inventory vector which is used to describe data, 51 // as specified by the Type field, that a peer wants, has, or does not have to 52 // another peer. 53 type InvVect struct { 54 Type InvType // Type of data 55 Hash ShaHash // Hash of the data 56 } 57 58 // NewInvVect returns a new InvVect using the provided type and hash. 59 func NewInvVect(typ InvType, hash *ShaHash) *InvVect { 60 return &InvVect{ 61 Type: typ, 62 Hash: *hash, 63 } 64 } 65 66 // readInvVect reads an encoded InvVect from r depending on the protocol 67 // version. 68 func readInvVect(r io.Reader, pver uint32, iv *InvVect) error { 69 err := readElements(r, &iv.Type, &iv.Hash) 70 if err != nil { 71 return err 72 } 73 return nil 74 } 75 76 // writeInvVect serializes an InvVect to w depending on the protocol version. 77 func writeInvVect(w io.Writer, pver uint32, iv *InvVect) error { 78 err := writeElements(w, iv.Type, &iv.Hash) 79 if err != nil { 80 return err 81 } 82 return nil 83 }