mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-09-13 13:00:10 +00:00

* [NOD-1191] Convert wire protocol to 100% protobuf * [NOD-1191] Simplify wire interface and remove redundant messages * [NOD-1191] Map all proto to wire conversions * [NOD-1203] Create netadapter outside of protocol manager * [NOD-1191] Fix nil errors * [NOD-1191] Fix comments * [NOD-1191] Add converter interface * [NOD-1191] Add missing GetBlockLocator message * [NOD-1191] Change message names that starts with 'get' to 'request' * [NOD-1191] Change message commands values * [NOD-1191] Remove redundant methods * [NOD-1191] Rename message constructors * [NOD-1191] Change message commands to use iota * [NOD-1191] Add missing outputs to protobuf conversion * [NOD-1191] Make block header a required field * [NOD-1191] Rename variables * [NOD-1212] Fix test names * [NOD-1191] Rename flow names * [NOD-1191] Fix infinite loop
71 lines
1.4 KiB
Go
71 lines
1.4 KiB
Go
package id
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/rand"
|
|
"encoding/hex"
|
|
"io"
|
|
)
|
|
|
|
// IDLength of array used to store the ID.
|
|
const IDLength = 16
|
|
|
|
// ID identifies a network connection
|
|
type ID struct {
|
|
bytes []byte
|
|
}
|
|
|
|
// GenerateID generates a new ID
|
|
func GenerateID() (*ID, error) {
|
|
id := new(ID)
|
|
err := id.Deserialize(rand.Reader)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return id, nil
|
|
}
|
|
|
|
// IsEqual returns whether id equals to other.
|
|
func (id *ID) IsEqual(other *ID) bool {
|
|
return bytes.Equal(id.bytes, other.bytes)
|
|
}
|
|
|
|
func (id *ID) String() string {
|
|
return hex.EncodeToString(id.bytes)
|
|
}
|
|
|
|
// Deserialize decodes a block from r into the receiver.
|
|
func (id *ID) Deserialize(r io.Reader) error {
|
|
id.bytes = make([]byte, IDLength)
|
|
_, err := io.ReadFull(r, id.bytes)
|
|
return err
|
|
}
|
|
|
|
// Serialize serializes the receiver into the given writer.
|
|
func (id *ID) Serialize(w io.Writer) error {
|
|
_, err := w.Write(id.bytes)
|
|
return err
|
|
}
|
|
|
|
// SerializeToBytes serializes the receiver and returns a byte slice of the serialized id.
|
|
func (id *ID) SerializeToBytes() ([]byte, error) {
|
|
w := &bytes.Buffer{}
|
|
err := id.Serialize(w)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return w.Bytes(), nil
|
|
}
|
|
|
|
// FromBytes returns an ID deserialized from the given byte slice.
|
|
func FromBytes(serializedID []byte) *ID {
|
|
r := bytes.NewReader(serializedID)
|
|
newID := new(ID)
|
|
err := newID.Deserialize(r)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return newID
|
|
}
|