Skip to content

Commit 22c4e78

Browse files
committed
refactor(settings): change daa to use injected settings
1 parent a289460 commit 22c4e78

26 files changed

+283
-254
lines changed

hathor/builder/builder.py

+30-8
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,15 @@
1313
# limitations under the License.
1414

1515
from enum import Enum
16-
from typing import Any, Callable, NamedTuple, Optional
16+
from typing import Any, Callable, NamedTuple, Optional, TypeAlias
1717

1818
from structlog import get_logger
1919

2020
from hathor.checkpoint import Checkpoint
2121
from hathor.conf.get_settings import get_settings
2222
from hathor.conf.settings import HathorSettings as HathorSettingsType
2323
from hathor.consensus import ConsensusAlgorithm
24+
from hathor.daa import DifficultyAdjustmentAlgorithm
2425
from hathor.event import EventManager
2526
from hathor.event.storage import EventMemoryStorage, EventRocksDBStorage, EventStorage
2627
from hathor.event.websocket import EventWebsocketFactory
@@ -70,6 +71,12 @@ class BuildArtifacts(NamedTuple):
7071
stratum_factory: Optional[StratumFactory]
7172

7273

74+
_VertexVerifiersBuilder: TypeAlias = Callable[
75+
[HathorSettingsType, DifficultyAdjustmentAlgorithm, FeatureService],
76+
VertexVerifiers
77+
]
78+
79+
7380
class Builder:
7481
"""Builder builds the core objects to run a full node.
7582
@@ -103,8 +110,10 @@ def __init__(self) -> None:
103110
self._feature_service: Optional[FeatureService] = None
104111
self._bit_signaling_service: Optional[BitSignalingService] = None
105112

113+
self._daa: Optional[DifficultyAdjustmentAlgorithm] = None
114+
106115
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
108117
self._verification_service: Optional[VerificationService] = None
109118

110119
self._rocksdb_path: Optional[str] = None
@@ -164,6 +173,7 @@ def build(self) -> BuildArtifacts:
164173
feature_service = self._get_or_create_feature_service()
165174
bit_signaling_service = self._get_or_create_bit_signaling_service()
166175
verification_service = self._get_or_create_verification_service()
176+
daa = self._get_or_create_daa()
167177

168178
if self._enable_address_index:
169179
indexes.enable_address_index(pubsub)
@@ -188,6 +198,7 @@ def build(self) -> BuildArtifacts:
188198
network=self._network,
189199
pubsub=pubsub,
190200
consensus_algorithm=consensus_algorithm,
201+
daa=daa,
191202
peer_id=peer_id,
192203
tx_storage=tx_storage,
193204
p2p_manager=p2p_manager,
@@ -459,17 +470,26 @@ def _get_or_create_vertex_verifiers(self) -> VertexVerifiers:
459470
if self._vertex_verifiers is None:
460471
settings = self._get_or_create_settings()
461472
feature_service = self._get_or_create_feature_service()
473+
daa = self._get_or_create_daa()
462474

463475
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)
465477
else:
466478
self._vertex_verifiers = VertexVerifiers.create_defaults(
467479
settings=settings,
468-
feature_service=feature_service
480+
daa=daa,
481+
feature_service=feature_service,
469482
)
470483

471484
return self._vertex_verifiers
472485

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+
473493
def use_memory(self) -> 'Builder':
474494
self.check_if_can_modify()
475495
self._storage_type = StorageType.MEMORY
@@ -572,14 +592,16 @@ def set_vertex_verifiers(self, vertex_verifiers: VertexVerifiers) -> 'Builder':
572592
self._vertex_verifiers = vertex_verifiers
573593
return self
574594

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':
579596
self.check_if_can_modify()
580597
self._vertex_verifiers_builder = builder
581598
return self
582599

600+
def set_daa(self, daa: DifficultyAdjustmentAlgorithm) -> 'Builder':
601+
self.check_if_can_modify()
602+
self._daa = daa
603+
return self
604+
583605
def set_reactor(self, reactor: Reactor) -> 'Builder':
584606
self.check_if_can_modify()
585607
self._reactor = reactor

hathor/builder/cli_builder.py

+9-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
from hathor.cli.run_node import RunNodeArgs
2525
from hathor.consensus import ConsensusAlgorithm
26+
from hathor.daa import DifficultyAdjustmentAlgorithm
2627
from hathor.event import EventManager
2728
from hathor.exception import BuilderError
2829
from hathor.feature_activation.bit_signaling_service import BitSignalingService
@@ -207,7 +208,13 @@ def create_manager(self, reactor: Reactor) -> HathorManager:
207208
not_support_features=self._args.signal_not_support
208209
)
209210

210-
vertex_verifiers = VertexVerifiers.create_defaults(settings=settings, feature_service=self.feature_service)
211+
daa = DifficultyAdjustmentAlgorithm(settings=settings)
212+
213+
vertex_verifiers = VertexVerifiers.create_defaults(
214+
settings=settings,
215+
daa=daa,
216+
feature_service=self.feature_service
217+
)
211218
verification_service = VerificationService(verifiers=vertex_verifiers)
212219

213220
p2p_manager = ConnectionsManager(
@@ -230,6 +237,7 @@ def create_manager(self, reactor: Reactor) -> HathorManager:
230237
hostname=hostname,
231238
pubsub=pubsub,
232239
consensus_algorithm=consensus_algorithm,
240+
daa=daa,
233241
peer_id=peer_id,
234242
tx_storage=tx_storage,
235243
p2p_manager=p2p_manager,

hathor/cli/events_simulator/scenario.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ def simulate_single_chain_one_block(simulator: 'Simulator', manager: 'HathorMana
5050

5151

5252
def simulate_single_chain_blocks_and_transactions(simulator: 'Simulator', manager: 'HathorManager') -> None:
53-
from hathor import daa
5453
from hathor.conf.get_settings import get_settings
5554
from tests.utils import add_new_blocks, gen_new_tx
5655

@@ -62,13 +61,13 @@ def simulate_single_chain_blocks_and_transactions(simulator: 'Simulator', manage
6261
simulator.run(60)
6362

6463
tx = gen_new_tx(manager, address, 1000)
65-
tx.weight = daa.minimum_tx_weight(tx)
64+
tx.weight = manager.daa.minimum_tx_weight(tx)
6665
tx.update_hash()
6766
assert manager.propagate_tx(tx, fails_silently=False)
6867
simulator.run(60)
6968

7069
tx = gen_new_tx(manager, address, 2000)
71-
tx.weight = daa.minimum_tx_weight(tx)
70+
tx.weight = manager.daa.minimum_tx_weight(tx)
7271
tx.update_hash()
7372
assert manager.propagate_tx(tx, fails_silently=False)
7473
simulator.run(60)

hathor/cli/mining.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,11 @@ def execute(args: Namespace) -> None:
136136
block.nonce, block.weight))
137137

138138
try:
139+
from hathor.daa import DifficultyAdjustmentAlgorithm
139140
from hathor.verification.block_verifier import BlockVerifier
140141
settings = get_settings()
141-
verifier = BlockVerifier(settings=settings)
142+
daa = DifficultyAdjustmentAlgorithm(settings=settings)
143+
verifier = BlockVerifier(settings=settings, daa=daa)
142144
verifier.verify_without_storage(block)
143145
except HathorError:
144146
print('[{}] ERROR: Block has not been pushed because it is not valid.'.format(datetime.datetime.now()))

0 commit comments

Comments
 (0)