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,8 @@ 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
159
162
160
163
def build (self ) -> BuildArtifacts :
161
164
if self .artifacts is not None :
@@ -171,8 +174,7 @@ def build(self) -> BuildArtifacts:
171
174
peer_id = self ._get_peer_id ()
172
175
173
176
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 ()
176
178
177
179
p2p_manager = self ._get_p2p_manager ()
178
180
@@ -185,6 +187,7 @@ def build(self) -> BuildArtifacts:
185
187
verification_service = self ._get_or_create_verification_service ()
186
188
daa = self ._get_or_create_daa ()
187
189
cpu_mining_service = self ._get_or_create_cpu_mining_service ()
190
+ vertex_handler = self ._get_or_create_vertex_handler ()
188
191
189
192
if self ._enable_address_index :
190
193
indexes .enable_address_index (pubsub )
@@ -219,11 +222,11 @@ def build(self) -> BuildArtifacts:
219
222
checkpoints = self ._checkpoints ,
220
223
capabilities = self ._capabilities ,
221
224
environment_info = get_environment_info (self ._cmdline , peer_id .id ),
222
- feature_service = feature_service ,
223
225
bit_signaling_service = bit_signaling_service ,
224
226
verification_service = verification_service ,
225
227
cpu_mining_service = cpu_mining_service ,
226
228
execution_manager = execution_manager ,
229
+ vertex_handler = vertex_handler ,
227
230
** kwargs
228
231
)
229
232
@@ -323,6 +326,15 @@ def _get_or_create_execution_manager(self) -> ExecutionManager:
323
326
324
327
return self ._execution_manager
325
328
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
+
326
338
def _get_or_create_pubsub (self ) -> PubSubManager :
327
339
if self ._pubsub is None :
328
340
self ._pubsub = PubSubManager (self ._get_reactor ())
@@ -536,6 +548,22 @@ def _get_or_create_cpu_mining_service(self) -> CpuMiningService:
536
548
537
549
return self ._cpu_mining_service
538
550
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
+
539
567
def use_memory (self ) -> 'Builder' :
540
568
self .check_if_can_modify ()
541
569
self ._storage_type = StorageType .MEMORY
@@ -565,16 +593,14 @@ def force_memory_index(self) -> 'Builder':
565
593
566
594
def _get_or_create_wallet (self ) -> Optional [BaseWallet ]:
567
595
if self ._wallet is not None :
568
- assert self ._wallet_directory is None
569
- assert self ._wallet_unlock is None
570
596
return self ._wallet
571
597
572
598
if self ._wallet_directory is None :
573
599
return None
574
- wallet = Wallet (directory = self ._wallet_directory )
600
+ self . _wallet = Wallet (directory = self ._wallet_directory )
575
601
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
578
604
579
605
def set_wallet (self , wallet : BaseWallet ) -> 'Builder' :
580
606
self .check_if_can_modify ()
0 commit comments