49
49
from hathor .util import Random , get_environment_info , not_none
50
50
from hathor .verification .verification_service import VerificationService
51
51
from hathor .verification .vertex_verifiers import VertexVerifiers
52
+ from hathor .vertex_handler import VertexHandler
52
53
from hathor .wallet import BaseWallet , Wallet
53
54
54
55
logger = get_logger ()
@@ -156,6 +157,9 @@ def __init__(self) -> None:
156
157
self ._soft_voided_tx_ids : Optional [set [bytes ]] = None
157
158
158
159
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
159
163
160
164
def build (self ) -> BuildArtifacts :
161
165
if self .artifacts is not None :
@@ -171,10 +175,9 @@ def build(self) -> BuildArtifacts:
171
175
peer_id = self ._get_peer_id ()
172
176
173
177
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 ()
176
179
177
- p2p_manager = self ._get_p2p_manager ()
180
+ p2p_manager = self ._get_or_create_p2p_manager ()
178
181
179
182
wallet = self ._get_or_create_wallet ()
180
183
event_manager = self ._get_or_create_event_manager ()
@@ -185,6 +188,7 @@ def build(self) -> BuildArtifacts:
185
188
verification_service = self ._get_or_create_verification_service ()
186
189
daa = self ._get_or_create_daa ()
187
190
cpu_mining_service = self ._get_or_create_cpu_mining_service ()
191
+ vertex_handler = self ._get_or_create_vertex_handler ()
188
192
189
193
if self ._enable_address_index :
190
194
indexes .enable_address_index (pubsub )
@@ -219,11 +223,11 @@ def build(self) -> BuildArtifacts:
219
223
checkpoints = self ._checkpoints ,
220
224
capabilities = self ._capabilities ,
221
225
environment_info = get_environment_info (self ._cmdline , peer_id .id ),
222
- feature_service = feature_service ,
223
226
bit_signaling_service = bit_signaling_service ,
224
227
verification_service = verification_service ,
225
228
cpu_mining_service = cpu_mining_service ,
226
229
execution_manager = execution_manager ,
230
+ vertex_handler = vertex_handler ,
227
231
** kwargs
228
232
)
229
233
@@ -323,6 +327,15 @@ def _get_or_create_execution_manager(self) -> ExecutionManager:
323
327
324
328
return self ._execution_manager
325
329
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
+
326
339
def _get_or_create_pubsub (self ) -> PubSubManager :
327
340
if self ._pubsub is None :
328
341
self ._pubsub = PubSubManager (self ._get_reactor ())
@@ -351,7 +364,10 @@ def _get_or_create_rocksdb_storage(self) -> RocksDBStorage:
351
364
352
365
return self ._rocksdb_storage
353
366
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
+
355
371
from hathor .p2p .sync_v1 .factory import SyncV11Factory
356
372
from hathor .p2p .sync_v2 .factory import SyncV2Factory
357
373
from hathor .p2p .sync_version import SyncVersion
@@ -362,7 +378,7 @@ def _get_p2p_manager(self) -> ConnectionsManager:
362
378
363
379
assert self ._network is not None
364
380
365
- p2p_manager = ConnectionsManager (
381
+ self . _p2p_manager = ConnectionsManager (
366
382
reactor ,
367
383
network = self ._network ,
368
384
my_peer = my_peer ,
@@ -371,13 +387,13 @@ def _get_p2p_manager(self) -> ConnectionsManager:
371
387
whitelist_only = False ,
372
388
rng = self ._rng ,
373
389
)
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 ))
376
392
if self ._enable_sync_v1 :
377
- p2p_manager .enable_sync_version (SyncVersion .V1_1 )
393
+ self . _p2p_manager .enable_sync_version (SyncVersion .V1_1 )
378
394
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
381
397
382
398
def _get_or_create_indexes_manager (self ) -> IndexesManager :
383
399
if self ._indexes_manager is not None :
@@ -536,6 +552,22 @@ def _get_or_create_cpu_mining_service(self) -> CpuMiningService:
536
552
537
553
return self ._cpu_mining_service
538
554
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
+
539
571
def use_memory (self ) -> 'Builder' :
540
572
self .check_if_can_modify ()
541
573
self ._storage_type = StorageType .MEMORY
@@ -565,16 +597,14 @@ def force_memory_index(self) -> 'Builder':
565
597
566
598
def _get_or_create_wallet (self ) -> Optional [BaseWallet ]:
567
599
if self ._wallet is not None :
568
- assert self ._wallet_directory is None
569
- assert self ._wallet_unlock is None
570
600
return self ._wallet
571
601
572
602
if self ._wallet_directory is None :
573
603
return None
574
- wallet = Wallet (directory = self ._wallet_directory )
604
+ self . _wallet = Wallet (directory = self ._wallet_directory )
575
605
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
578
608
579
609
def set_wallet (self , wallet : BaseWallet ) -> 'Builder' :
580
610
self .check_if_can_modify ()
0 commit comments