13
13
# limitations under the License.
14
14
15
15
from enum import Enum
16
- from typing import Any , Callable , NamedTuple , Optional
16
+ from typing import Any , Callable , NamedTuple , Optional , TypeAlias
17
17
18
18
from structlog import get_logger
19
19
20
20
from hathor .checkpoint import Checkpoint
21
21
from hathor .conf .get_settings import get_settings
22
22
from hathor .conf .settings import HathorSettings as HathorSettingsType
23
23
from hathor .consensus import ConsensusAlgorithm
24
+ from hathor .daa import DifficultyAdjustmentAlgorithm
24
25
from hathor .event import EventManager
25
26
from hathor .event .storage import EventMemoryStorage , EventRocksDBStorage , EventStorage
26
27
from hathor .event .websocket import EventWebsocketFactory
@@ -70,6 +71,12 @@ class BuildArtifacts(NamedTuple):
70
71
stratum_factory : Optional [StratumFactory ]
71
72
72
73
74
+ _VertexVerifiersBuilder : TypeAlias = Callable [
75
+ [HathorSettingsType , DifficultyAdjustmentAlgorithm , FeatureService ],
76
+ VertexVerifiers
77
+ ]
78
+
79
+
73
80
class Builder :
74
81
"""Builder builds the core objects to run a full node.
75
82
@@ -103,8 +110,10 @@ def __init__(self) -> None:
103
110
self ._feature_service : Optional [FeatureService ] = None
104
111
self ._bit_signaling_service : Optional [BitSignalingService ] = None
105
112
113
+ self ._daa : Optional [DifficultyAdjustmentAlgorithm ] = None
114
+
106
115
self ._vertex_verifiers : Optional [VertexVerifiers ] = None
107
- self ._vertex_verifiers_builder : Callable [[ HathorSettingsType , FeatureService ], VertexVerifiers ] | None = None
116
+ self ._vertex_verifiers_builder : _VertexVerifiersBuilder | None = None
108
117
self ._verification_service : Optional [VerificationService ] = None
109
118
110
119
self ._rocksdb_path : Optional [str ] = None
@@ -164,6 +173,7 @@ def build(self) -> BuildArtifacts:
164
173
feature_service = self ._get_or_create_feature_service ()
165
174
bit_signaling_service = self ._get_or_create_bit_signaling_service ()
166
175
verification_service = self ._get_or_create_verification_service ()
176
+ daa = self ._get_or_create_daa ()
167
177
168
178
if self ._enable_address_index :
169
179
indexes .enable_address_index (pubsub )
@@ -188,6 +198,7 @@ def build(self) -> BuildArtifacts:
188
198
network = self ._network ,
189
199
pubsub = pubsub ,
190
200
consensus_algorithm = consensus_algorithm ,
201
+ daa = daa ,
191
202
peer_id = peer_id ,
192
203
tx_storage = tx_storage ,
193
204
p2p_manager = p2p_manager ,
@@ -459,17 +470,26 @@ def _get_or_create_vertex_verifiers(self) -> VertexVerifiers:
459
470
if self ._vertex_verifiers is None :
460
471
settings = self ._get_or_create_settings ()
461
472
feature_service = self ._get_or_create_feature_service ()
473
+ daa = self ._get_or_create_daa ()
462
474
463
475
if self ._vertex_verifiers_builder :
464
- self ._vertex_verifiers = self ._vertex_verifiers_builder (settings , feature_service )
476
+ self ._vertex_verifiers = self ._vertex_verifiers_builder (settings , daa , feature_service )
465
477
else :
466
478
self ._vertex_verifiers = VertexVerifiers .create_defaults (
467
479
settings = settings ,
468
- feature_service = feature_service
480
+ daa = daa ,
481
+ feature_service = feature_service ,
469
482
)
470
483
471
484
return self ._vertex_verifiers
472
485
486
+ def _get_or_create_daa (self ) -> DifficultyAdjustmentAlgorithm :
487
+ if self ._daa is None :
488
+ settings = self ._get_or_create_settings ()
489
+ self ._daa = DifficultyAdjustmentAlgorithm (settings = settings )
490
+
491
+ return self ._daa
492
+
473
493
def use_memory (self ) -> 'Builder' :
474
494
self .check_if_can_modify ()
475
495
self ._storage_type = StorageType .MEMORY
@@ -572,14 +592,16 @@ def set_vertex_verifiers(self, vertex_verifiers: VertexVerifiers) -> 'Builder':
572
592
self ._vertex_verifiers = vertex_verifiers
573
593
return self
574
594
575
- def set_vertex_verifiers_builder (
576
- self ,
577
- builder : Callable [[HathorSettingsType , FeatureService ], VertexVerifiers ]
578
- ) -> 'Builder' :
595
+ def set_vertex_verifiers_builder (self , builder : _VertexVerifiersBuilder ) -> 'Builder' :
579
596
self .check_if_can_modify ()
580
597
self ._vertex_verifiers_builder = builder
581
598
return self
582
599
600
+ def set_daa (self , daa : DifficultyAdjustmentAlgorithm ) -> 'Builder' :
601
+ self .check_if_can_modify ()
602
+ self ._daa = daa
603
+ return self
604
+
583
605
def set_reactor (self , reactor : Reactor ) -> 'Builder' :
584
606
self .check_if_can_modify ()
585
607
self ._reactor = reactor
0 commit comments