Ori Newman 5566aaf95a
[NOD-1512] Implement utxo deserialization (#1003)
* [NOD-1512] Implement UTXO set deserialization

* [NOD-1512] Remove redundant file

* [NOD-1512] Don't use big endian for serialization

* [NOD-1512] Use Read/Write element

* [NOD-1512] Unexport ReadElement

* [NOD-1512] Fix StageVirtualUTXOSet

* [NOD-1512] Get rid of dagParams in consensusStateManager

* [NOD-1512] Get rid of dagParams in consensusStateManager
2020-11-05 10:59:49 +02:00

46 lines
1.3 KiB
Go

package consensusstatemanager
import (
"github.com/kaspanet/kaspad/domain/consensus/model"
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
)
func (csm *consensusStateManager) checkFinalityViolation(
blockHash *externalapi.DomainHash) error {
isViolatingFinality, err := csm.isViolatingFinality(blockHash)
if err != nil {
return err
}
if isViolatingFinality {
csm.blockStatusStore.Stage(blockHash, externalapi.StatusUTXOPendingVerification)
log.Warnf("Finality Violation Detected! Block %s violates finality!", blockHash)
}
return nil
}
func (csm *consensusStateManager) virtualFinalityPoint(virtualGHOSTDAGData *model.BlockGHOSTDAGData) (
*externalapi.DomainHash, error) {
return csm.dagTraversalManager.HighestChainBlockBelowBlueScore(
model.VirtualBlockHash, virtualGHOSTDAGData.BlueScore-csm.finalityDepth)
}
func (csm *consensusStateManager) isViolatingFinality(
blockHash *externalapi.DomainHash) (bool, error) {
virtualGHOSTDAGData, err := csm.ghostdagDataStore.Get(csm.databaseContext, model.VirtualBlockHash)
if err != nil {
return false, err
}
virtualFinalityPoint, err := csm.virtualFinalityPoint(virtualGHOSTDAGData)
if err != nil {
return false, err
}
return csm.dagTopologyManager.IsInSelectedParentChainOf(virtualFinalityPoint, blockHash)
}