Skip to content

Commit 6d7db1f

Browse files
committed
refactor: create VertexHandler
1 parent e889e7a commit 6d7db1f

File tree

9 files changed

+354
-197
lines changed

9 files changed

+354
-197
lines changed

hathor/builder/builder.py

+34-8
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,8 @@ 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
159162

160163
def build(self) -> BuildArtifacts:
161164
if self.artifacts is not None:
@@ -171,8 +174,7 @@ def build(self) -> BuildArtifacts:
171174
peer_id = self._get_peer_id()
172175

173176
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)
177+
consensus_algorithm = self._get_or_create_consensus()
176178

177179
p2p_manager = self._get_p2p_manager()
178180

@@ -185,6 +187,7 @@ def build(self) -> BuildArtifacts:
185187
verification_service = self._get_or_create_verification_service()
186188
daa = self._get_or_create_daa()
187189
cpu_mining_service = self._get_or_create_cpu_mining_service()
190+
vertex_handler = self._get_or_create_vertex_handler()
188191

189192
if self._enable_address_index:
190193
indexes.enable_address_index(pubsub)
@@ -219,11 +222,11 @@ def build(self) -> BuildArtifacts:
219222
checkpoints=self._checkpoints,
220223
capabilities=self._capabilities,
221224
environment_info=get_environment_info(self._cmdline, peer_id.id),
222-
feature_service=feature_service,
223225
bit_signaling_service=bit_signaling_service,
224226
verification_service=verification_service,
225227
cpu_mining_service=cpu_mining_service,
226228
execution_manager=execution_manager,
229+
vertex_handler=vertex_handler,
227230
**kwargs
228231
)
229232

@@ -323,6 +326,15 @@ def _get_or_create_execution_manager(self) -> ExecutionManager:
323326

324327
return self._execution_manager
325328

329+
def _get_or_create_consensus(self) -> ConsensusAlgorithm:
330+
if self._consensus is None:
331+
soft_voided_tx_ids = self._get_soft_voided_tx_ids()
332+
pubsub = self._get_or_create_pubsub()
333+
execution_manager = self._get_or_create_execution_manager()
334+
self._consensus = ConsensusAlgorithm(soft_voided_tx_ids, pubsub, execution_manager=execution_manager)
335+
336+
return self._consensus
337+
326338
def _get_or_create_pubsub(self) -> PubSubManager:
327339
if self._pubsub is None:
328340
self._pubsub = PubSubManager(self._get_reactor())
@@ -536,6 +548,22 @@ def _get_or_create_cpu_mining_service(self) -> CpuMiningService:
536548

537549
return self._cpu_mining_service
538550

551+
def _get_or_create_vertex_handler(self) -> VertexHandler:
552+
if self._vertex_handler is None:
553+
self._vertex_handler = VertexHandler(
554+
reactor=self._get_reactor(),
555+
settings=self._get_or_create_settings(),
556+
tx_storage=self._get_or_create_tx_storage(),
557+
verification_service=self._get_or_create_verification_service(),
558+
consensus=self._get_or_create_consensus(),
559+
p2p_manager=self._get_p2p_manager(),
560+
feature_service=self._get_or_create_feature_service(),
561+
pubsub=self._get_or_create_pubsub(),
562+
wallet=self._get_or_create_wallet(),
563+
)
564+
565+
return self._vertex_handler
566+
539567
def use_memory(self) -> 'Builder':
540568
self.check_if_can_modify()
541569
self._storage_type = StorageType.MEMORY
@@ -565,16 +593,14 @@ def force_memory_index(self) -> 'Builder':
565593

566594
def _get_or_create_wallet(self) -> Optional[BaseWallet]:
567595
if self._wallet is not None:
568-
assert self._wallet_directory is None
569-
assert self._wallet_unlock is None
570596
return self._wallet
571597

572598
if self._wallet_directory is None:
573599
return None
574-
wallet = Wallet(directory=self._wallet_directory)
600+
self._wallet = Wallet(directory=self._wallet_directory)
575601
if self._wallet_unlock is not None:
576-
wallet.unlock(self._wallet_unlock)
577-
return wallet
602+
self._wallet.unlock(self._wallet_unlock)
603+
return self._wallet
578604

579605
def set_wallet(self, wallet: BaseWallet) -> 'Builder':
580606
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)