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) +}