Skip to content

Commit bc6608a

Browse files
committed
refactor: create VertexHandler
1 parent 881c5ff commit bc6608a

File tree

9 files changed

+354
-197
lines changed

9 files changed

+354
-197
lines changed

hathor/builder/builder.py

Lines changed: 34 additions & 8 deletions
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()
@@ -155,6 +156,8 @@ def __init__(self) -> None:
155156
self._soft_voided_tx_ids: Optional[set[bytes]] = None
156157

157158
self._execution_manager: ExecutionManager | None = None
159+
self._vertex_handler: VertexHandler | None = None
160+
self._consensus: ConsensusAlgorithm | None = None
158161

159162
def build(self) -> BuildArtifacts:
160163
if self.artifacts is not None:
@@ -170,8 +173,7 @@ def build(self) -> BuildArtifacts:
170173
peer_id = self._get_peer_id()
171174

172175
execution_manager = self._get_or_create_execution_manager()
173-
soft_voided_tx_ids = self._get_soft_voided_tx_ids()
174-
consensus_algorithm = ConsensusAlgorithm(soft_voided_tx_ids, pubsub, execution_manager=execution_manager)
176+
consensus_algorithm = self._get_or_create_consensus()
175177

176178
p2p_manager = self._get_p2p_manager()
177179

@@ -184,6 +186,7 @@ def build(self) -> BuildArtifacts:
184186
verification_service = self._get_or_create_verification_service()
185187
daa = self._get_or_create_daa()
186188
cpu_mining_service = self._get_or_create_cpu_mining_service()
189+
vertex_handler = self._get_or_create_vertex_handler()
187190

188191
if self._enable_address_index:
189192
indexes.enable_address_index(pubsub)
@@ -218,11 +221,11 @@ def build(self) -> BuildArtifacts:
218221
checkpoints=self._checkpoints,
219222
capabilities=self._capabilities,
220223
environment_info=get_environment_info(self._cmdline, peer_id.id),
221-
feature_service=feature_service,
222224
bit_signaling_service=bit_signaling_service,
223225
verification_service=verification_service,
224226
cpu_mining_service=cpu_mining_service,
225227
execution_manager=execution_manager,
228+
vertex_handler=vertex_handler,
226229
**kwargs
227230
)
228231

@@ -321,6 +324,15 @@ def _get_or_create_execution_manager(self) -> ExecutionManager:
321324

322325
return self._execution_manager
323326

327+
def _get_or_create_consensus(self) -> ConsensusAlgorithm:
328+
if self._consensus is None:
329+
soft_voided_tx_ids = self._get_soft_voided_tx_ids()
330+
pubsub = self._get_or_create_pubsub()
331+
execution_manager = self._get_or_create_execution_manager()
332+
self._consensus = ConsensusAlgorithm(soft_voided_tx_ids, pubsub, execution_manager=execution_manager)
333+
334+
return self._consensus
335+
324336
def _get_or_create_pubsub(self) -> PubSubManager:
325337
if self._pubsub is None:
326338
self._pubsub = PubSubManager(self._get_reactor())
@@ -534,6 +546,22 @@ def _get_or_create_cpu_mining_service(self) -> CpuMiningService:
534546

535547
return self._cpu_mining_service
536548

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

564592
def _get_or_create_wallet(self) -> Optional[BaseWallet]:
565593
if self._wallet is not None:
566-
assert self._wallet_directory is None
567-
assert self._wallet_unlock is None
568594
return self._wallet
569595

570596
if self._wallet_directory is None:
571597
return None
572-
wallet = Wallet(directory=self._wallet_directory)
598+
self._wallet = Wallet(directory=self._wallet_directory)
573599
if self._wallet_unlock is not None:
574-
wallet.unlock(self._wallet_unlock)
575-
return wallet
600+
self._wallet.unlock(self._wallet_unlock)
601+
return self._wallet
576602

577603
def set_wallet(self, wallet: BaseWallet) -> 'Builder':
578604
self.check_if_can_modify()

hathor/builder/cli_builder.py

Lines changed: 14 additions & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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
)
226226

227227
def start_sentry_if_possible(self) -> None:

0 commit comments

Comments
 (0)