mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-11-24 06:25:55 +00:00
Finish implementing SerializeUTXODiff and DeserializeUTXODiff.
This commit is contained in:
parent
94c3f4b80c
commit
8588774837
@ -8,21 +8,45 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// SerializeUTXOCollection serializes the given utxoCollection into the given writer
|
||||||
func SerializeUTXOCollection(writer io.Writer, utxoCollection model.UTXOCollection) error {
|
func SerializeUTXOCollection(writer io.Writer, utxoCollection model.UTXOCollection) error {
|
||||||
length := uint64(utxoCollection.Len())
|
length := uint64(utxoCollection.Len())
|
||||||
err := binaryserializer.PutUint64(writer, length)
|
err := binaryserializer.PutUint64(writer, length)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
utxoIterator := utxoCollection.Iterator()
|
||||||
|
for ok := utxoIterator.First(); ok; ok = utxoIterator.Next() {
|
||||||
|
outpoint, utxoEntry, err := utxoIterator.Get()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = utxo.SerializeUTXOIntoWriter(writer, utxoEntry, outpoint)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeserializeUTXOCollection deserializes a utxoCollection out of the given reader
|
||||||
func DeserializeUTXOCollection(reader io.Reader) (model.UTXOCollection, error) {
|
func DeserializeUTXOCollection(reader io.Reader) (model.UTXOCollection, error) {
|
||||||
length, err := binaryserializer.Uint64(reader)
|
length, err := binaryserializer.Uint64(reader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
utxoMap := make(map[externalapi.DomainOutpoint]externalapi.UTXOEntry, length)
|
utxoMap := make(map[externalapi.DomainOutpoint]externalapi.UTXOEntry, length)
|
||||||
|
for i := uint64(0); i < length; i++ {
|
||||||
|
utxoEntry, outpoint, err := utxo.DeserializeUTXOOutOfReader(reader)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
utxoMap[*outpoint] = utxoEntry
|
||||||
|
}
|
||||||
|
|
||||||
utxoCollection := utxo.NewUTXOCollection(utxoMap)
|
utxoCollection := utxo.NewUTXOCollection(utxoMap)
|
||||||
return utxoCollection, nil
|
return utxoCollection, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,6 +6,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// SerializeUTXODiff serializes the given utxoDiff into the given writer
|
||||||
func SerializeUTXODiff(writer io.Writer, utxoDiff model.UTXODiff) error {
|
func SerializeUTXODiff(writer io.Writer, utxoDiff model.UTXODiff) error {
|
||||||
err := SerializeUTXOCollection(writer, utxoDiff.ToAdd())
|
err := SerializeUTXOCollection(writer, utxoDiff.ToAdd())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -14,6 +15,7 @@ func SerializeUTXODiff(writer io.Writer, utxoDiff model.UTXODiff) error {
|
|||||||
return SerializeUTXOCollection(writer, utxoDiff.ToRemove())
|
return SerializeUTXOCollection(writer, utxoDiff.ToRemove())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeserializeUTXODiff deserializes a utxoDiff out of the given reader
|
||||||
func DeserializeUTXODiff(reader io.Reader) (model.UTXODiff, error) {
|
func DeserializeUTXODiff(reader io.Reader) (model.UTXODiff, error) {
|
||||||
toAdd, err := DeserializeUTXOCollection(reader)
|
toAdd, err := DeserializeUTXOCollection(reader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@ -14,12 +14,7 @@ import (
|
|||||||
func SerializeUTXO(entry externalapi.UTXOEntry, outpoint *externalapi.DomainOutpoint) ([]byte, error) {
|
func SerializeUTXO(entry externalapi.UTXOEntry, outpoint *externalapi.DomainOutpoint) ([]byte, error) {
|
||||||
w := &bytes.Buffer{}
|
w := &bytes.Buffer{}
|
||||||
|
|
||||||
err := serializeOutpoint(w, outpoint)
|
err := SerializeUTXOIntoWriter(w, entry, outpoint)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = serializeUTXOEntry(w, entry)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -27,15 +22,30 @@ func SerializeUTXO(entry externalapi.UTXOEntry, outpoint *externalapi.DomainOutp
|
|||||||
return w.Bytes(), nil
|
return w.Bytes(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SerializeUTXOIntoWriter serializes the byte-slice representation for given UTXOEntry-outpoint pair into the given writer
|
||||||
|
func SerializeUTXOIntoWriter(writer io.Writer, entry externalapi.UTXOEntry, outpoint *externalapi.DomainOutpoint) error {
|
||||||
|
err := serializeOutpoint(writer, outpoint)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return serializeUTXOEntry(writer, entry)
|
||||||
|
}
|
||||||
|
|
||||||
// DeserializeUTXO deserializes the given byte slice to UTXOEntry-outpoint pair
|
// DeserializeUTXO deserializes the given byte slice to UTXOEntry-outpoint pair
|
||||||
func DeserializeUTXO(utxoBytes []byte) (entry externalapi.UTXOEntry, outpoint *externalapi.DomainOutpoint, err error) {
|
func DeserializeUTXO(utxoBytes []byte) (entry externalapi.UTXOEntry, outpoint *externalapi.DomainOutpoint, err error) {
|
||||||
r := bytes.NewReader(utxoBytes)
|
r := bytes.NewReader(utxoBytes)
|
||||||
outpoint, err = deserializeOutpoint(r)
|
return DeserializeUTXOOutOfReader(r)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeserializeUTXOOutOfReader deserializes a UTXOEntry-outpoint pair out of the given reader
|
||||||
|
func DeserializeUTXOOutOfReader(reader io.Reader) (entry externalapi.UTXOEntry, outpoint *externalapi.DomainOutpoint, err error) {
|
||||||
|
outpoint, err = deserializeOutpoint(reader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
entry, err = deserializeUTXOEntry(r)
|
entry, err = deserializeUTXOEntry(reader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user