difficulty

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 13, 2025 License: MIT Imports: 4 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// AlgorithmFixed represents a fixed difficulty calculator
	AlgorithmFixed = "fixed"

	// AlgorithmAdjustable represents an adjustable difficulty calculator
	AlgorithmAdjustable = "adjustable"

	// AlgorithmBitcoin represents a Bitcoin-style difficulty calculator
	AlgorithmBitcoin = "bitcoin"

	// AlgorithmAdaptive represents an adaptive difficulty calculator
	AlgorithmAdaptive = "adaptive"
)

Algorithm name constants

Variables

This section is empty.

Functions

This section is empty.

Types

type AdaptiveDifficultyCalculator

type AdaptiveDifficultyCalculator struct {
	// contains filtered or unexported fields
}

AdaptiveDifficultyCalculator implements a more responsive difficulty adjustment that can handle sudden large changes in hashing power (e.g., quantum computing breakthrough)

func NewAdaptiveDifficultyCalculator

func NewAdaptiveDifficultyCalculator(config *interfaces.DifficultyAdjustmentConfig) *AdaptiveDifficultyCalculator

NewAdaptiveDifficultyCalculator creates an adaptive difficulty calculator. This calculator can respond to extreme hashing power changes better than Bitcoin's algorithm, but at the cost of potential instability.

func (*AdaptiveDifficultyCalculator) CalculateNextDifficulty

func (c *AdaptiveDifficultyCalculator) CalculateNextDifficulty(currentDifficulty uint64, blocks []interfaces.Block) (uint64, error)

CalculateNextDifficulty calculates difficulty with emergency adjustments

func (*AdaptiveDifficultyCalculator) EstimateNextDifficulty

func (c *AdaptiveDifficultyCalculator) EstimateNextDifficulty(currentDifficulty uint64, blocks []interfaces.Block) uint64

EstimateNextDifficulty provides an estimate

func (*AdaptiveDifficultyCalculator) GetAlgorithmName

func (c *AdaptiveDifficultyCalculator) GetAlgorithmName() string

GetAlgorithmName returns the algorithm name

func (*AdaptiveDifficultyCalculator) GetMaxDifficulty

func (c *AdaptiveDifficultyCalculator) GetMaxDifficulty() uint64

GetMaxDifficulty returns the maximum difficulty

func (*AdaptiveDifficultyCalculator) GetMinDifficulty

func (c *AdaptiveDifficultyCalculator) GetMinDifficulty() uint64

GetMinDifficulty returns the minimum difficulty

func (*AdaptiveDifficultyCalculator) GetTargetBlockTime

func (c *AdaptiveDifficultyCalculator) GetTargetBlockTime() time.Duration

GetTargetBlockTime returns the target block time

func (*AdaptiveDifficultyCalculator) SetEmergencyAdjustment

func (c *AdaptiveDifficultyCalculator) SetEmergencyAdjustment(enabled bool)

SetEmergencyAdjustment enables or disables emergency adjustments

func (*AdaptiveDifficultyCalculator) SetEmergencyThreshold

func (c *AdaptiveDifficultyCalculator) SetEmergencyThreshold(threshold float64)

SetEmergencyThreshold sets the threshold for triggering emergency adjustments

func (*AdaptiveDifficultyCalculator) ValidateDifficulty

func (c *AdaptiveDifficultyCalculator) ValidateDifficulty(difficulty uint64) error

ValidateDifficulty checks if difficulty is within bounds

type AdjustableDifficultyCalculator

type AdjustableDifficultyCalculator struct {
	// contains filtered or unexported fields
}

AdjustableDifficultyCalculator implements difficulty adjustment based on block times

func NewAdjustableDifficultyCalculator

func NewAdjustableDifficultyCalculator(config *interfaces.DifficultyAdjustmentConfig) *AdjustableDifficultyCalculator

NewAdjustableDifficultyCalculator creates a new adjustable difficulty calculator

func (*AdjustableDifficultyCalculator) CalculateNextDifficulty

func (c *AdjustableDifficultyCalculator) CalculateNextDifficulty(currentDifficulty uint64, blocks []interfaces.Block) (uint64, error)

CalculateNextDifficulty calculates difficulty based on recent block times

func (*AdjustableDifficultyCalculator) EstimateNextDifficulty

func (c *AdjustableDifficultyCalculator) EstimateNextDifficulty(currentDifficulty uint64, blocks []interfaces.Block) uint64

EstimateNextDifficulty provides an estimate without validation

func (*AdjustableDifficultyCalculator) GetAlgorithmName

func (c *AdjustableDifficultyCalculator) GetAlgorithmName() string

GetAlgorithmName returns the algorithm name

func (*AdjustableDifficultyCalculator) GetMaxDifficulty

func (c *AdjustableDifficultyCalculator) GetMaxDifficulty() uint64

GetMaxDifficulty returns the maximum difficulty

func (*AdjustableDifficultyCalculator) GetMinDifficulty

func (c *AdjustableDifficultyCalculator) GetMinDifficulty() uint64

GetMinDifficulty returns the minimum difficulty

func (*AdjustableDifficultyCalculator) GetTargetBlockTime

func (c *AdjustableDifficultyCalculator) GetTargetBlockTime() time.Duration

GetTargetBlockTime returns the target block time

func (*AdjustableDifficultyCalculator) ValidateDifficulty

func (c *AdjustableDifficultyCalculator) ValidateDifficulty(difficulty uint64) error

ValidateDifficulty checks if difficulty is within bounds

type BitcoinStyleCalculator

type BitcoinStyleCalculator struct {
	// contains filtered or unexported fields
}

BitcoinStyleCalculator implements Bitcoin's difficulty adjustment algorithm

func NewBitcoinStyleCalculator

func NewBitcoinStyleCalculator(minDifficulty, maxDifficulty uint64) *BitcoinStyleCalculator

NewBitcoinStyleCalculator creates a Bitcoin-style difficulty calculator Adjusts difficulty every 2016 blocks to target 10-minute block times

func (*BitcoinStyleCalculator) CalculateNextDifficulty

func (c *BitcoinStyleCalculator) CalculateNextDifficulty(currentDifficulty uint64, blocks []interfaces.Block) (uint64, error)

CalculateNextDifficulty implements Bitcoin's difficulty adjustment

func (*BitcoinStyleCalculator) EstimateNextDifficulty

func (c *BitcoinStyleCalculator) EstimateNextDifficulty(currentDifficulty uint64, blocks []interfaces.Block) uint64

EstimateNextDifficulty provides an estimate

func (*BitcoinStyleCalculator) GetAlgorithmName

func (c *BitcoinStyleCalculator) GetAlgorithmName() string

GetAlgorithmName returns the algorithm name

func (*BitcoinStyleCalculator) GetMaxDifficulty

func (c *BitcoinStyleCalculator) GetMaxDifficulty() uint64

GetMaxDifficulty returns the maximum difficulty

func (*BitcoinStyleCalculator) GetMinDifficulty

func (c *BitcoinStyleCalculator) GetMinDifficulty() uint64

GetMinDifficulty returns the minimum difficulty

func (*BitcoinStyleCalculator) GetTargetBlockTime

func (c *BitcoinStyleCalculator) GetTargetBlockTime() time.Duration

GetTargetBlockTime returns the target block time

func (*BitcoinStyleCalculator) ValidateDifficulty

func (c *BitcoinStyleCalculator) ValidateDifficulty(difficulty uint64) error

ValidateDifficulty checks if difficulty is within bounds

type DifficultyStats

type DifficultyStats struct {
	CurrentDifficulty uint64
	MinDifficulty     uint64
	MaxDifficulty     uint64
	NextDifficulty    uint64
	ChangeRatio       float64
	IsAdjustmentBlock bool
}

DifficultyStats provides statistics about difficulty

type FixedDifficultyCalculator

type FixedDifficultyCalculator struct {
	// contains filtered or unexported fields
}

FixedDifficultyCalculator implements a fixed difficulty that never changes

func NewFixedDifficultyCalculator

func NewFixedDifficultyCalculator(difficulty uint64, targetBlockTime time.Duration) *FixedDifficultyCalculator

NewFixedDifficultyCalculator creates a new fixed difficulty calculator

func (*FixedDifficultyCalculator) CalculateNextDifficulty

func (c *FixedDifficultyCalculator) CalculateNextDifficulty(currentDifficulty uint64, blocks []interfaces.Block) (uint64, error)

CalculateNextDifficulty returns the fixed difficulty value

func (*FixedDifficultyCalculator) EstimateNextDifficulty

func (c *FixedDifficultyCalculator) EstimateNextDifficulty(currentDifficulty uint64, blocks []interfaces.Block) uint64

EstimateNextDifficulty returns the fixed difficulty

func (*FixedDifficultyCalculator) GetAlgorithmName

func (c *FixedDifficultyCalculator) GetAlgorithmName() string

GetAlgorithmName returns the algorithm name

func (*FixedDifficultyCalculator) GetMaxDifficulty

func (c *FixedDifficultyCalculator) GetMaxDifficulty() uint64

GetMaxDifficulty returns the fixed difficulty

func (*FixedDifficultyCalculator) GetMinDifficulty

func (c *FixedDifficultyCalculator) GetMinDifficulty() uint64

GetMinDifficulty returns the fixed difficulty

func (*FixedDifficultyCalculator) GetTargetBlockTime

func (c *FixedDifficultyCalculator) GetTargetBlockTime() time.Duration

GetTargetBlockTime returns the target block time

func (*FixedDifficultyCalculator) ValidateDifficulty

func (c *FixedDifficultyCalculator) ValidateDifficulty(difficulty uint64) error

ValidateDifficulty checks if difficulty matches the fixed value

type Validator

type Validator struct {
	// contains filtered or unexported fields
}

Validator provides difficulty validation utilities

func NewValidator

func NewValidator(calculator interfaces.DifficultyCalculator) *Validator

NewValidator creates a new difficulty validator

func (*Validator) EstimateDifficulty

func (v *Validator) EstimateDifficulty(currentDifficulty uint64, blocks []interfaces.Block) uint64

EstimateDifficulty provides a difficulty estimate

func (*Validator) GetDifficultyStats

func (v *Validator) GetDifficultyStats(currentDifficulty uint64, blocks []interfaces.Block) (*DifficultyStats, error)

GetDifficultyStats returns difficulty statistics

func (*Validator) GetExpectedDifficulty

func (v *Validator) GetExpectedDifficulty(currentDifficulty uint64, blocks []interfaces.Block) (uint64, error)

GetExpectedDifficulty returns the expected difficulty for the next block

func (*Validator) ValidateBlockDifficulty

func (v *Validator) ValidateBlockDifficulty(block interfaces.Block, previousBlocks []interfaces.Block) error

ValidateBlockDifficulty validates that a block's difficulty is correct

func (*Validator) ValidateDifficultyRange

func (v *Validator) ValidateDifficultyRange(difficulty uint64) error

ValidateDifficultyRange checks if difficulty is within min/max bounds

func (*Validator) ValidateDifficultyTransition

func (v *Validator) ValidateDifficultyTransition(oldDifficulty, newDifficulty uint64, blocks []interfaces.Block) error

ValidateDifficultyTransition validates a difficulty change is legitimate

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL