Skip to content

Commit 1a598bc

Browse files
committed
refactor: create VertexHandler
1 parent e889e7a commit 1a598bc

File tree

9 files changed

+366
-205
lines changed

9 files changed

+366
-205
lines changed

hathor/builder/builder.py

+46-16
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
from hathor.util import Random, get_environment_info, not_none
5050
from hathor.verification.verification_service import VerificationService
5151
from hathor.verification.vertex_verifiers import VertexVerifiers
52+
from hathor.vertex_handler import VertexHandler
5253
from hathor.wallet import BaseWallet, Wallet
5354

5455
logger = get_logger()
@@ -156,6 +157,9 @@ def __init__(self) -> None:
156157
self._soft_voided_tx_ids: Optional[set[bytes]] = None
157158

158159
self._execution_manager: ExecutionManager | None = None
160+
self._vertex_handler: VertexHandler | None = None
161+
self._consensus: ConsensusAlgorithm | None = None
162+
self._p2p_manager: ConnectionsManager | None = None
159163

160164
def build(self) -> BuildArtifacts:
161165
if self.artifacts is not None:
@@ -171,10 +175,9 @@ def build(self) -> BuildArtifacts:
171175
peer_id = self._get_peer_id()
172176

173177
execution_manager = self._get_or_create_execution_manager()
174-
soft_voided_tx_ids = self._get_soft_voided_tx_ids()
175-
consensus_algorithm = ConsensusAlgorithm(soft_voided_tx_ids, pubsub, execution_manager=execution_manager)
178+
consensus_algorithm = self._get_or_create_consensus()
176179

177-
p2p_manager = self._get_p2p_manager()
180+
p2p_manager = self._get_or_create_p2p_manager()
178181

179182
wallet = self._get_or_create_wallet()
180183
event_manager = self._get_or_create_event_manager()
@@ -185,6 +188,7 @@ def build(self) -> BuildArtifacts:
185188
verification_service = self._get_or_create_verification_service()
186189
daa = self._get_or_create_daa()
187190
cpu_mining_service = self._get_or_create_cpu_mining_service()
191+
vertex_handler = self._get_or_create_vertex_handler()
188192

189193
if self._enable_address_index:
190194
indexes.enable_address_index(pubsub)
@@ -219,11 +223,11 @@ def build(self) -> BuildArtifacts:
219223
checkpoints=self._checkpoints,
220224
capabilities=self._capabilities,
221225
environment_info=get_environment_info(self._cmdline, peer_id.id),
222-
feature_service=feature_service,
223226
bit_signaling_service=bit_signaling_service,
224227
verification_service=verification_service,
225228
cpu_mining_service=cpu_mining_service,
226229
execution_manager=execution_manager,
230+
vertex_handler=vertex_handler,
227231
**kwargs
228232
)
229233

@@ -323,6 +327,15 @@ def _get_or_create_execution_manager(self) -> ExecutionManager:
323327

324328
return self._execution_manager
325329

330+
def _get_or_create_consensus(self) -> ConsensusAlgorithm:
331+
if self._consensus is None:
332+
soft_voided_tx_ids = self._get_soft_voided_tx_ids()
333+
pubsub = self._get_or_create_pubsub()
334+
execution_manager = self._get_or_create_execution_manager()
335+
self._consensus = ConsensusAlgorithm(soft_voided_tx_ids, pubsub, execution_manager=execution_manager)
336+
337+
return self._consensus
338+
326339
def _get_or_create_pubsub(self) -> PubSubManager:
327340
if self._pubsub is None:
328341
self._pubsub = PubSubManager(self._get_reactor())
@@ -351,7 +364,10 @@ def _get_or_create_rocksdb_storage(self) -> RocksDBStorage:
351364

352365
return self._rocksdb_storage
353366

354-
def _get_p2p_manager(self) -> ConnectionsManager:
367+
def _get_or_create_p2p_manager(self) -> ConnectionsManager:
368+
if self._p2p_manager:
369+
return self._p2p_manager
370+
355371
from hathor.p2p.sync_v1.factory import SyncV11Factory
356372
from hathor.p2p.sync_v2.factory import SyncV2Factory
357373
from hathor.p2p.sync_version import SyncVersion
@@ -362,7 +378,7 @@ def _get_p2p_manager(self) -> ConnectionsManager:
362378

363379
assert self._network is not None
364380

365-
p2p_manager = ConnectionsManager(
381+
self._p2p_manager = ConnectionsManager(
366382
reactor,
367383
network=self._network,
368384
my_peer=my_peer,
@@ -371,13 +387,13 @@ def _get_p2p_manager(self) -> ConnectionsManager:
371387
whitelist_only=False,
372388
rng=self._rng,
373389
)
374-
p2p_manager.add_sync_factory(SyncVersion.V1_1, SyncV11Factory(p2p_manager))
375-
p2p_manager.add_sync_factory(SyncVersion.V2, SyncV2Factory(p2p_manager))
390+
self._p2p_manager.add_sync_factory(SyncVersion.V1_1, SyncV11Factory(self._p2p_manager))
391+
self._p2p_manager.add_sync_factory(SyncVersion.V2, SyncV2Factory(self._p2p_manager))
376392
if self._enable_sync_v1:
377-
p2p_manager.enable_sync_version(SyncVersion.V1_1)
393+
self._p2p_manager.enable_sync_version(SyncVersion.V1_1)
378394
if self._enable_sync_v2:
379-
p2p_manager.enable_sync_version(SyncVersion.V2)
380-
return p2p_manager
395+
self._p2p_manager.enable_sync_version(SyncVersion.V2)
396+
return self._p2p_manager
381397

382398
def _get_or_create_indexes_manager(self) -> IndexesManager:
383399
if self._indexes_manager is not None:
@@ -536,6 +552,22 @@ def _get_or_create_cpu_mining_service(self) -> CpuMiningService:
536552

537553
return self._cpu_mining_service
538554

555+
def _get_or_create_vertex_handler(self) -> VertexHandler:
556+
if self._vertex_handler is None:
557+
self._vertex_handler = VertexHandler(
558+
reactor=self._get_reactor(),
559+
settings=self._get_or_create_settings(),
560+
tx_storage=self._get_or_create_tx_storage(),
561+
verification_service=self._get_or_create_verification_service(),
562+
consensus=self._get_or_create_consensus(),
563+
p2p_manager=self._get_or_create_p2p_manager(),
564+
feature_service=self._get_or_create_feature_service(),
565+
pubsub=self._get_or_create_pubsub(),
566+
wallet=self._get_or_create_wallet(),
567+
)
568+
569+
return self._vertex_handler
570+
539571
def use_memory(self) -> 'Builder':
540572
self.check_if_can_modify()
541573
self._storage_type = StorageType.MEMORY
@@ -565,16 +597,14 @@ def force_memory_index(self) -> 'Builder':
565597

566598
def _get_or_create_wallet(self) -> Optional[BaseWallet]:
567599
if self._wallet is not None:
568-
assert self._wallet_directory is None
569-
assert self._wallet_unlock is None
570600
return self._wallet
571601

572602
if self._wallet_directory is None:
573603
return None
574-
wallet = Wallet(directory=self._wallet_directory)
604+
self._wallet = Wallet(directory=self._wallet_directory)
575605
if self._wallet_unlock is not None:
576-
wallet.unlock(self._wallet_unlock)
577-
return wallet
606+
self._wallet.unlock(self._wallet_unlock)
607+
return self._wallet
578608

579609
def set_wallet(self, wallet: BaseWallet) -> 'Builder':
580610
self.check_if_can_modify()

hathor/builder/cli_builder.py

+14-1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
from hathor.util import Random, not_none
4444
from hathor.verification.verification_service import VerificationService
4545
from hathor.verification.vertex_verifiers import VertexVerifiers
46+
from hathor.vertex_handler import VertexHandler
4647
from hathor.wallet import BaseWallet, HDWallet, Wallet
4748

4849
logger = get_logger()
@@ -300,6 +301,18 @@ def create_manager(self, reactor: Reactor) -> HathorManager:
300301
if enable_sync_v2:
301302
p2p_manager.enable_sync_version(SyncVersion.V2)
302303

304+
vertex_handler = VertexHandler(
305+
reactor=reactor,
306+
settings=settings,
307+
tx_storage=tx_storage,
308+
verification_service=verification_service,
309+
consensus=consensus_algorithm,
310+
p2p_manager=p2p_manager,
311+
feature_service=self.feature_service,
312+
pubsub=pubsub,
313+
wallet=self.wallet,
314+
)
315+
303316
self.manager = HathorManager(
304317
reactor,
305318
settings=settings,
@@ -317,11 +330,11 @@ def create_manager(self, reactor: Reactor) -> HathorManager:
317330
environment_info=get_environment_info(args=str(self._args), peer_id=peer_id.id),
318331
full_verification=full_verification,
319332
enable_event_queue=self._args.x_enable_event_queue,
320-
feature_service=self.feature_service,
321333
bit_signaling_service=bit_signaling_service,
322334
verification_service=verification_service,
323335
cpu_mining_service=cpu_mining_service,
324336
execution_manager=execution_manager,
337+
vertex_handler=vertex_handler,
325338
)
326339

327340
if self._args.x_ipython_kernel:

hathor/cli/db_import.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ def _import_txs(self) -> Iterator['BaseTransaction']:
8888
assert tx is not None
8989
assert tx.hash is not None
9090
tx.storage = self.tx_storage
91-
self.manager.on_new_tx(tx, quiet=True, fails_silently=False, skip_block_weight_verification=True)
91+
self.manager.on_new_tx(tx, quiet=True, fails_silently=False)
9292
yield tx
9393

9494

hathor/cli/run_node.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ def prepare(self, *, register_resources: bool = True) -> None:
221221
wallet=self.manager.wallet,
222222
rocksdb_storage=getattr(builder, 'rocksdb_storage', None),
223223
stratum_factory=self.manager.stratum_factory,
224-
feature_service=self.manager._feature_service,
224+
feature_service=self.manager.vertex_handler._feature_service,
225225
bit_signaling_service=self.manager._bit_signaling_service,
226226
)
227227

0 commit comments

Comments
 (0)