mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-06-06 14:16:43 +00:00
Update the virtual after overriding the virtual UTXO set (#1811)
* Update the virtual after overriding the virtual utxo set * Put the updateVirtual inside importVirtualUTXOSetAndPruningPointUTXOSet * Add pruningPoint to importVirtualUTXOSetAndPruningPointUTXOSet * Remove sanity check
This commit is contained in:
parent
7d1071a9b1
commit
d748089a14
@ -25,14 +25,6 @@ func (css *consensusStateStore) StageVirtualUTXODiff(stagingArea *model.StagingA
|
||||
}
|
||||
|
||||
func (csss *consensusStateStagingShard) commitVirtualUTXODiff(dbTx model.DBTransaction) error {
|
||||
hadStartedImportingPruningPointUTXOSet, err := csss.store.HadStartedImportingPruningPointUTXOSet(dbTx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if hadStartedImportingPruningPointUTXOSet {
|
||||
return errors.New("cannot commit virtual UTXO diff after starting to import the pruning point UTXO set")
|
||||
}
|
||||
|
||||
if csss.virtualUTXODiffStaging == nil {
|
||||
return nil
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ import (
|
||||
"github.com/kaspanet/kaspad/domain/consensus/utils/transactionhelper"
|
||||
"github.com/kaspanet/kaspad/domain/consensus/utils/utxo"
|
||||
"github.com/kaspanet/kaspad/infrastructure/logger"
|
||||
"github.com/kaspanet/kaspad/util/staging"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
@ -20,7 +21,12 @@ func (csm *consensusStateManager) ImportPruningPoint(stagingArea *model.StagingA
|
||||
return err
|
||||
}
|
||||
|
||||
return csm.applyImportedPruningPointUTXOSet(stagingArea)
|
||||
err = csm.applyImportedPruningPointUTXOSet(stagingArea, newPruningPoint)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (csm *consensusStateManager) importPruningPoint(
|
||||
@ -124,16 +130,10 @@ func (csm *consensusStateManager) importPruningPoint(
|
||||
return err
|
||||
}
|
||||
|
||||
// Run update virtual to create acceptance data and any other missing data.
|
||||
_, _, err = csm.updateVirtual(stagingArea, newPruningPoint, []*externalapi.DomainHash{newPruningPoint})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (csm *consensusStateManager) applyImportedPruningPointUTXOSet(stagingArea *model.StagingArea) error {
|
||||
func (csm *consensusStateManager) applyImportedPruningPointUTXOSet(stagingArea *model.StagingArea, newPruningPoint *externalapi.DomainHash) error {
|
||||
dbTx, err := csm.databaseContext.Begin()
|
||||
if err != nil {
|
||||
return err
|
||||
@ -156,10 +156,10 @@ func (csm *consensusStateManager) applyImportedPruningPointUTXOSet(stagingArea *
|
||||
return err
|
||||
}
|
||||
|
||||
return csm.importVirtualUTXOSetAndPruningPointUTXOSet()
|
||||
return csm.importVirtualUTXOSetAndPruningPointUTXOSet(newPruningPoint)
|
||||
}
|
||||
|
||||
func (csm *consensusStateManager) importVirtualUTXOSetAndPruningPointUTXOSet() error {
|
||||
func (csm *consensusStateManager) importVirtualUTXOSetAndPruningPointUTXOSet(pruningPoint *externalapi.DomainHash) error {
|
||||
onEnd := logger.LogAndMeasureExecutionTime(log, "importVirtualUTXOSetAndPruningPointUTXOSet")
|
||||
defer onEnd()
|
||||
|
||||
@ -182,6 +182,18 @@ func (csm *consensusStateManager) importVirtualUTXOSetAndPruningPointUTXOSet() e
|
||||
return err
|
||||
}
|
||||
|
||||
// Run update virtual to create acceptance data and any other missing data.
|
||||
updateVirtualStagingArea := model.NewStagingArea()
|
||||
_, _, err = csm.updateVirtual(updateVirtualStagingArea, pruningPoint, []*externalapi.DomainHash{pruningPoint})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = staging.CommitAllChanges(csm.databaseContext, updateVirtualStagingArea)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
log.Debugf("Finishing to import virtual UTXO set and pruning point UTXO set")
|
||||
return csm.consensusStateStore.FinishImportingPruningPointUTXOSet(csm.databaseContext)
|
||||
}
|
||||
@ -196,7 +208,12 @@ func (csm *consensusStateManager) RecoverUTXOIfRequired() error {
|
||||
}
|
||||
|
||||
log.Warnf("Unimported pruning point UTXO set detected. Attempting to recover...")
|
||||
err = csm.importVirtualUTXOSetAndPruningPointUTXOSet()
|
||||
pruningPoint, err := csm.pruningStore.PruningPoint(csm.databaseContext, model.NewStagingArea())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = csm.importVirtualUTXOSetAndPruningPointUTXOSet(pruningPoint)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -75,7 +75,7 @@ func (csm *consensusStateManager) ResolveVirtual(maxBlocksToResolve uint64) (boo
|
||||
|
||||
if selectedTip == nil {
|
||||
log.Warnf("Non of the DAG tips are valid")
|
||||
return false, nil
|
||||
return true, nil
|
||||
}
|
||||
|
||||
updateVirtualStagingArea := model.NewStagingArea()
|
||||
|
@ -215,7 +215,7 @@ func (csm *consensusStateManager) resolveSingleBlockStatus(stagingArea *model.St
|
||||
err = csm.verifyUTXO(stagingArea, block, blockHash, pastUTXOSet, acceptanceData, multiset)
|
||||
if err != nil {
|
||||
if errors.As(err, &ruleerrors.RuleError{}) {
|
||||
log.Debugf("UTXO verification for block %s failed: %s", blockHash, err)
|
||||
log.Warnf("UTXO verification for block %s failed: %s", blockHash, err)
|
||||
return externalapi.StatusDisqualifiedFromChain, nil, nil
|
||||
}
|
||||
return 0, nil, err
|
||||
|
Loading…
x
Reference in New Issue
Block a user