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

* resolveSingleBlockStatus: If the block being resolved is not going to be the next selectedTip - set it's diffParent to be the old selectedTip * resolveSingleBlockStatus: If the block being resolved is going to be the next selectedTip - set it as old selectedTip's diffChild * Remove any mentions of virtualDiffParents * If block is genesis - don't do all the mumbo-jumbo with oldSelectedTip * Check an unchecked error * Write a better log message
51 lines
1.2 KiB
Go
51 lines
1.2 KiB
Go
package consensusstatestore
|
|
|
|
import (
|
|
"github.com/kaspanet/kaspad/domain/consensus/model"
|
|
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
|
|
"github.com/kaspanet/kaspad/domain/consensus/utils/utxolrucache"
|
|
)
|
|
|
|
// consensusStateStore represents a store for the current consensus state
|
|
type consensusStateStore struct {
|
|
tipsStaging []*externalapi.DomainHash
|
|
virtualUTXODiffStaging externalapi.UTXODiff
|
|
|
|
virtualUTXOSetCache *utxolrucache.LRUCache
|
|
|
|
tipsCache []*externalapi.DomainHash
|
|
}
|
|
|
|
// New instantiates a new ConsensusStateStore
|
|
func New(utxoSetCacheSize int, preallocate bool) model.ConsensusStateStore {
|
|
return &consensusStateStore{
|
|
virtualUTXOSetCache: utxolrucache.New(utxoSetCacheSize, preallocate),
|
|
}
|
|
}
|
|
|
|
func (css *consensusStateStore) Discard() {
|
|
css.tipsStaging = nil
|
|
css.virtualUTXODiffStaging = nil
|
|
}
|
|
|
|
func (css *consensusStateStore) Commit(dbTx model.DBTransaction) error {
|
|
err := css.commitTips(dbTx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = css.commitVirtualUTXODiff(dbTx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
css.Discard()
|
|
|
|
return nil
|
|
}
|
|
|
|
func (css *consensusStateStore) IsStaged() bool {
|
|
return css.tipsStaging != nil ||
|
|
css.virtualUTXODiffStaging != nil
|
|
}
|