mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-05-22 23:07:04 +00:00

* Replaced the content of MsgIBDRootUTXOSetChunk with pairs of outpoint-utxo entry pairs. * Rename utxoIter to utxoIterator. * Add a big stinky TODO on an assert. * Replace pruningStore staging with a UTXO set iterator. * Reimplement receiveAndInsertIBDRootUTXOSet. * Extract OutpointAndUTXOEntryPairsToDomainOutpointAndUTXOEntryPairs into domainconverters.go. * Pass the outpoint and utxy entry pairs to the pruning store. * Implement InsertCandidatePruningPointUTXOs. * Implement ClearCandidatePruningPointUTXOs. * Implement UpdateCandidatePruningPointMultiset. * Use the candidate pruning point multiset in updatePruningPoint. * Implement CandidatePruningPointUTXOIterator. * Use the pruning point utxo set iterator for StageVirtualUTXOSet. * Defer ClearCandidatePruningPointUTXOs. * Implement OverwriteVirtualUTXOSet. * Implement CommitCandidatePruningPointUTXOSet. * Implement BeginOverwritingVirtualUTXOSet and FinishOverwritingVirtualUTXOSet. * Implement overwriteVirtualUTXOSetAndCommitPruningPointUTXOSet. * Rename ClearCandidatePruningPointUTXOs to ClearCandidatePruningPointData. * Add missing methods to dbManager. * Implement PruningPointUTXOs. * Implement RecoverUTXOIfRequired. * Delete the utxoserialization package. * Fix compilation errors in TestValidateAndInsertPruningPoint. * Switch order of operations in the if statements in PruningPointUTXOs so that Next() wouldn't be unnecessarily called. * Fix missing pruning point utxo set staging and bad slice length. * Fix no default multiset in InsertCandidatePruningPointUTXOs. * Make go vet happy. * Rename candidateXXX to importedXXX. * Do some more renaming. * Rename some more. * Fix bad MsgIBDRootNotFound logic. * Fix an error message. * Simplify receiveIBDRootBlock. * Fix error message in receiveAndInsertIBDRootUTXOSet. * Do some more renaming. * Fix merge errors. * Fix a bug caused by calling iterator.First() unnecessarily. * Remove databaseContext from stores and don't use a transaction in ClearXXX functions. * Simplify receiveAndInsertIBDRootUTXOSet. * Fix offset count in PruningPointUTXOs(). * Fix readOnlyUTXOIteratorWithDiff.First(). * Split handleRequestIBDRootUTXOSetAndBlockFlow into smaller methods. * Rename IbdRootNotFound to UnexpectedPruningPoint. * Rename requestIBDRootHash to requestPruningPointHash. * Rename IBDRootHash to PruningPointHash. * Rename RequestIBDRootUTXOSetAndBlock to RequestPruningPointUTXOSetAndBlock. * Rename IBDRootUTXOSetChunk to PruningPointUTXOSetChunk. * Rename RequestNextIBDRootUTXOSetChunk to RequestNextPruningPointUTXOSetChunk. * Rename DoneIBDRootUTXOSetChunks to DonePruningPointUTXOSetChunks. * Rename remaining references to IBD root. * Fix an error message. * Add a check for HadStartedImportingPruningPointUTXOSet in commitVirtualUTXODiff. * Add a check for HadStartedImportingPruningPointUTXOSet in ImportPruningPointUTXOSetIntoVirtualUTXOSet. * Move FinishImportingPruningPointUTXOSet closer to HadStartedImportingPruningPointUTXOSet. * Remove reference to pruningStore in utxoSetIterator. * Pointerify utxoSetIterator receivers. * Fix bad insert in CommitImportedPruningPointUTXOSet. * Rename commitImportedPruningPointUTXOSetAll to applyImportedPruningPointUTXOSet. * Simplify PruningPointUTXOs. * Add populateTransactionWithUTXOEntriesFromUTXOSet. * Fix a TODO comment. * Rename InsertImportedPruningPointUTXOs to AppendImportedPruningPointUTXOs. * Extract handleRequestPruningPointUTXOSetAndBlockMessage to a separate method. * Rename stuff in readOnlyUTXOIteratorWithDiff.First(). * Address toAddIterator in readOnlyUTXOIteratorWithDiff.First(). * Call First() before any full iteration on ReadOnlyUTXOSetIterator. * Call First() before any full iteration on a database Cursor. * Put StartImportingPruningPointUTXOSet inside the pruning point transaction. * Make serializeOutpoint and serializeUTXOEntry free functions in pruningStore. * Fix readOnlyUTXOIteratorWithDiff.First(). * Fix bad validations in importPruningPoint. * Remove superfluous call to validateBlockTransactionsAgainstPastUTXO.
100 lines
2.9 KiB
Go
100 lines
2.9 KiB
Go
package model
|
|
|
|
// DBCursor iterates over database entries given some bucket.
|
|
type DBCursor interface {
|
|
// Next moves the iterator to the next key/value pair. It returns whether the
|
|
// iterator is exhausted. Panics if the cursor is closed.
|
|
Next() bool
|
|
|
|
// First moves the iterator to the first key/value pair. It returns false if
|
|
// such a pair does not exist. Panics if the cursor is closed.
|
|
First() bool
|
|
|
|
// Seek moves the iterator to the first key/value pair whose key is greater
|
|
// than or equal to the given key. It returns ErrNotFound if such pair does not
|
|
// exist.
|
|
Seek(key DBKey) error
|
|
|
|
// Key returns the key of the current key/value pair, or ErrNotFound if done.
|
|
// The caller should not modify the contents of the returned key, and
|
|
// its contents may change on the next call to Next.
|
|
Key() (DBKey, error)
|
|
|
|
// Value returns the value of the current key/value pair, or ErrNotFound if done.
|
|
// The caller should not modify the contents of the returned slice, and its
|
|
// contents may change on the next call to Next.
|
|
Value() ([]byte, error)
|
|
|
|
// Close releases associated resources.
|
|
Close() error
|
|
}
|
|
|
|
// DBReader defines a proxy over domain data access
|
|
type DBReader interface {
|
|
// Get gets the value for the given key. It returns
|
|
// ErrNotFound if the given key does not exist.
|
|
Get(key DBKey) ([]byte, error)
|
|
|
|
// Has returns true if the database does contains the
|
|
// given key.
|
|
Has(key DBKey) (bool, error)
|
|
|
|
// Cursor begins a new cursor over the given bucket.
|
|
Cursor(bucket DBBucket) (DBCursor, error)
|
|
}
|
|
|
|
// DBWriter is an interface to write to the database
|
|
type DBWriter interface {
|
|
DBReader
|
|
|
|
// Put sets the value for the given key. It overwrites
|
|
// any previous value for that key.
|
|
Put(key DBKey, value []byte) error
|
|
|
|
// Delete deletes the value for the given key. Will not
|
|
// return an error if the key doesn't exist.
|
|
Delete(key DBKey) error
|
|
}
|
|
|
|
// DBTransaction is a proxy over domain data
|
|
// access that requires an open database transaction
|
|
type DBTransaction interface {
|
|
DBWriter
|
|
|
|
// Rollback rolls back whatever changes were made to the
|
|
// database within this transaction.
|
|
Rollback() error
|
|
|
|
// Commit commits whatever changes were made to the database
|
|
// within this transaction.
|
|
Commit() error
|
|
|
|
// RollbackUnlessClosed rolls back changes that were made to
|
|
// the database within the transaction, unless the transaction
|
|
// had already been closed using either Rollback or Commit.
|
|
RollbackUnlessClosed() error
|
|
}
|
|
|
|
// DBManager defines the interface of a database that can begin
|
|
// transactions and read data.
|
|
type DBManager interface {
|
|
DBWriter
|
|
|
|
// Begin begins a new database transaction.
|
|
Begin() (DBTransaction, error)
|
|
}
|
|
|
|
// DBKey is an interface for a database key
|
|
type DBKey interface {
|
|
Bytes() []byte
|
|
Bucket() DBBucket
|
|
Suffix() []byte
|
|
}
|
|
|
|
// DBBucket is an interface for a database bucket
|
|
type DBBucket interface {
|
|
Bucket(bucketBytes []byte) DBBucket
|
|
Key(suffix []byte) DBKey
|
|
Path() []byte
|
|
}
|