neo-go/pkg/network/payload/inventory.go

71 lines
1.8 KiB
Go
Raw Permalink Normal View History

2018-01-28 07:05:35 +00:00
package payload
import (
"github.com/nspcc-dev/neo-go/pkg/io"
"github.com/nspcc-dev/neo-go/pkg/util"
2018-01-28 07:05:35 +00:00
)
// The node can broadcast the object information it owns by this message.
// The message can be sent automatically or can be used to answer getblock messages.
2018-01-28 07:05:35 +00:00
// InventoryType is the type of an object in the Inventory message.
type InventoryType uint8
// String implements the Stringer interface.
func (i InventoryType) String() string {
switch i {
case TXType:
2018-01-28 07:05:35 +00:00
return "TX"
case BlockType:
return "block"
case ExtensibleType:
return "extensible"
2020-11-27 10:55:48 +00:00
case P2PNotaryRequestType:
return "p2pNotaryRequest"
2018-01-28 07:05:35 +00:00
default:
return "unknown inventory type"
}
}
2018-01-30 10:56:36 +00:00
// Valid returns true if the inventory (type) is known.
2020-11-27 10:55:48 +00:00
func (i InventoryType) Valid(p2pSigExtensionsEnabled bool) bool {
return i == BlockType || i == TXType || i == ExtensibleType || (p2pSigExtensionsEnabled && i == P2PNotaryRequestType)
2018-01-30 10:56:36 +00:00
}
2018-01-28 07:05:35 +00:00
// List of valid InventoryTypes.
const (
2020-11-27 10:55:48 +00:00
TXType InventoryType = 0x2b
BlockType InventoryType = 0x2c
ExtensibleType InventoryType = 0x2e
2020-11-27 10:55:48 +00:00
P2PNotaryRequestType InventoryType = 0x50
2018-01-28 07:05:35 +00:00
)
2019-10-22 14:56:03 +00:00
// Inventory payload.
2018-01-28 07:05:35 +00:00
type Inventory struct {
// Type if the object hash.
Type InventoryType
// A list of hashes.
Hashes []util.Uint256
2018-01-30 10:56:36 +00:00
}
// NewInventory return a pointer to an Inventory.
func NewInventory(typ InventoryType, hashes []util.Uint256) *Inventory {
2018-01-30 10:56:36 +00:00
return &Inventory{
Type: typ,
Hashes: hashes,
}
2018-01-28 07:05:35 +00:00
}
// DecodeBinary implements Serializable interface.
func (p *Inventory) DecodeBinary(br *io.BinReader) {
p.Type = InventoryType(br.ReadB())
br.ReadArray(&p.Hashes, MaxHashesCount)
2018-01-28 07:05:35 +00:00
}
// EncodeBinary implements Serializable interface.
func (p *Inventory) EncodeBinary(bw *io.BinWriter) {
bw.WriteB(byte(p.Type))
bw.WriteArray(p.Hashes)
2018-01-28 07:05:35 +00:00
}