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

* [NOD-1557] Add trace logs in add_block_to_virtual.go. * [NOD-1557] Add trace logs in resolve_block_status.go. * [NOD-1557] Add trace logs in calculate_past_utxo.go. * [NOD-1557] Add trace logs in finality.go. * [NOD-1557] Add trace logs in multisets.go. * [NOD-1557] Fix compilation errors. * [NOD-1557] Add trace logs to verify_and_build_utxo.go. * [NOD-1557] Add trace logs to update_virtual.go. * [NOD-1557] Add trace logs to set_pruning_utxo_set.go. * [NOD-1557] Add trace logs to populate_tx_with_utxo_entries.go. * [NOD-1557] Add trace logs to pick_virtual_parents.go. * [NOD-1557] Make go vet happy. * [NOD-1557] Clarify that some logic in AddBlockToVirtual is there for the sake of logging alone. * [NOD-1557] Call blockStatusStore directly in AddBlockToVirtual when refetching the block status.
72 lines
2.1 KiB
Go
72 lines
2.1 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 {
|
|
|
|
log.Tracef("checkFinalityViolation start for block %s", blockHash)
|
|
defer log.Tracef("checkFinalityViolation end for block %s", blockHash)
|
|
|
|
if *blockHash == *csm.genesisHash {
|
|
log.Tracef("Block %s is the genesis block, "+
|
|
"and does not violate finality by definition", blockHash)
|
|
return nil
|
|
}
|
|
|
|
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
|
|
}
|
|
log.Tracef("Block %s does not violate finality", blockHash)
|
|
|
|
return nil
|
|
}
|
|
|
|
func (csm *consensusStateManager) virtualFinalityPoint() (
|
|
*externalapi.DomainHash, error) {
|
|
|
|
log.Tracef("virtualFinalityPoint start")
|
|
defer log.Tracef("virtualFinalityPoint end")
|
|
|
|
virtualFinalityPoint, err := csm.dagTraversalManager.BlockAtDepth(
|
|
model.VirtualBlockHash, csm.finalityDepth)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
log.Tracef("The current virtual finality block is: %s", virtualFinalityPoint)
|
|
|
|
return virtualFinalityPoint, nil
|
|
}
|
|
|
|
func (csm *consensusStateManager) isViolatingFinality(
|
|
blockHash *externalapi.DomainHash) (bool, error) {
|
|
|
|
log.Tracef("isViolatingFinality start for block %s", blockHash)
|
|
defer log.Tracef("isViolatingFinality end for block %s", blockHash)
|
|
|
|
virtualFinalityPoint, err := csm.virtualFinalityPoint()
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
log.Tracef("The virtual finality point is: %s", virtualFinalityPoint)
|
|
|
|
isInSelectedParentChain, err := csm.dagTopologyManager.IsInSelectedParentChainOf(virtualFinalityPoint, blockHash)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
log.Tracef("Is the virtual finality point %s "+
|
|
"in the selected parent chain of %s: %t", virtualFinalityPoint, blockHash, isInSelectedParentChain)
|
|
|
|
return !isInSelectedParentChain, nil
|
|
}
|