From 94c3f4b80c380fc5661c7d7353487825975b10dd Mon Sep 17 00:00:00 2001 From: stasatdaglabs Date: Thu, 28 Jan 2021 13:48:17 +0200 Subject: [PATCH] Begin implementing SerializeUTXODiff and DeserializeUTXODiff. --- .../binaryserialization/utxo_collection.go | 28 +++++++++++++++++++ .../database/binaryserialization/utxo_diff.go | 27 ++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 domain/consensus/database/binaryserialization/utxo_collection.go create mode 100644 domain/consensus/database/binaryserialization/utxo_diff.go diff --git a/domain/consensus/database/binaryserialization/utxo_collection.go b/domain/consensus/database/binaryserialization/utxo_collection.go new file mode 100644 index 000000000..d44467539 --- /dev/null +++ b/domain/consensus/database/binaryserialization/utxo_collection.go @@ -0,0 +1,28 @@ +package binaryserialization + +import ( + "github.com/kaspanet/kaspad/domain/consensus/model" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/kaspanet/kaspad/domain/consensus/utils/utxo" + "github.com/kaspanet/kaspad/util/binaryserializer" + "io" +) + +func SerializeUTXOCollection(writer io.Writer, utxoCollection model.UTXOCollection) error { + length := uint64(utxoCollection.Len()) + err := binaryserializer.PutUint64(writer, length) + if err != nil { + return err + } + return nil +} + +func DeserializeUTXOCollection(reader io.Reader) (model.UTXOCollection, error) { + length, err := binaryserializer.Uint64(reader) + if err != nil { + return nil, err + } + utxoMap := make(map[externalapi.DomainOutpoint]externalapi.UTXOEntry, length) + utxoCollection := utxo.NewUTXOCollection(utxoMap) + return utxoCollection, nil +} diff --git a/domain/consensus/database/binaryserialization/utxo_diff.go b/domain/consensus/database/binaryserialization/utxo_diff.go new file mode 100644 index 000000000..9bc28e7d2 --- /dev/null +++ b/domain/consensus/database/binaryserialization/utxo_diff.go @@ -0,0 +1,27 @@ +package binaryserialization + +import ( + "github.com/kaspanet/kaspad/domain/consensus/model" + "github.com/kaspanet/kaspad/domain/consensus/utils/utxo" + "io" +) + +func SerializeUTXODiff(writer io.Writer, utxoDiff model.UTXODiff) error { + err := SerializeUTXOCollection(writer, utxoDiff.ToAdd()) + if err != nil { + return err + } + return SerializeUTXOCollection(writer, utxoDiff.ToRemove()) +} + +func DeserializeUTXODiff(reader io.Reader) (model.UTXODiff, error) { + toAdd, err := DeserializeUTXOCollection(reader) + if err != nil { + return nil, err + } + toRemove, err := DeserializeUTXOCollection(reader) + if err != nil { + return nil, err + } + return utxo.NewUTXODiffFromCollections(toAdd, toRemove) +}