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 ()
@@ -155,6 +156,8 @@ def __init__(self) -> None:
155
156
self ._soft_voided_tx_ids : Optional [set [bytes ]] = None
156
157
157
158
self ._execution_manager : ExecutionManager | None = None
159
+ self ._vertex_handler : VertexHandler | None = None
160
+ self ._consensus : ConsensusAlgorithm | None = None
158
161
159
162
def build (self ) -> BuildArtifacts :
160
163
if self .artifacts is not None :
@@ -170,8 +173,7 @@ def build(self) -> BuildArtifacts:
170
173
peer_id = self ._get_peer_id ()
171
174
172
175
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 ()
175
177
176
178
p2p_manager = self ._get_p2p_manager ()
177
179
@@ -184,6 +186,7 @@ def build(self) -> BuildArtifacts:
184
186
verification_service = self ._get_or_create_verification_service ()
185
187
daa = self ._get_or_create_daa ()
186
188
cpu_mining_service = self ._get_or_create_cpu_mining_service ()
189
+ vertex_handler = self ._get_or_create_vertex_handler ()
187
190
188
191
if self ._enable_address_index :
189
192
indexes .enable_address_index (pubsub )
@@ -218,11 +221,11 @@ def build(self) -> BuildArtifacts:
218
221
checkpoints = self ._checkpoints ,
219
222
capabilities = self ._capabilities ,
220
223
environment_info = get_environment_info (self ._cmdline , peer_id .id ),
221
- feature_service = feature_service ,
222
224
bit_signaling_service = bit_signaling_service ,
223
225
verification_service = verification_service ,
224
226
cpu_mining_service = cpu_mining_service ,
225
227
execution_manager = execution_manager ,
228
+ vertex_handler = vertex_handler ,
226
229
** kwargs
227
230
)
228
231
@@ -321,6 +324,15 @@ def _get_or_create_execution_manager(self) -> ExecutionManager:
321
324
322
325
return self ._execution_manager
323
326
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
+
324
336
def _get_or_create_pubsub (self ) -> PubSubManager :
325
337
if self ._pubsub is None :
326
338
self ._pubsub = PubSubManager (self ._get_reactor ())
@@ -534,6 +546,22 @@ def _get_or_create_cpu_mining_service(self) -> CpuMiningService:
534
546
535
547
return self ._cpu_mining_service
536
548
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
+
537
565
def use_memory (self ) -> 'Builder' :
538
566
self .check_if_can_modify ()
539
567
self ._storage_type = StorageType .MEMORY
@@ -563,16 +591,14 @@ def force_memory_index(self) -> 'Builder':
563
591
564
592
def _get_or_create_wallet (self ) -> Optional [BaseWallet ]:
565
593
if self ._wallet is not None :
566
- assert self ._wallet_directory is None
567
- assert self ._wallet_unlock is None
568
594
return self ._wallet
569
595
570
596
if self ._wallet_directory is None :
571
597
return None
572
- wallet = Wallet (directory = self ._wallet_directory )
598
+ self . _wallet = Wallet (directory = self ._wallet_directory )
573
599
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
576
602
577
603
def set_wallet (self , wallet : BaseWallet ) -> 'Builder' :
578
604
self .check_if_can_modify ()
0 commit comments