24
24
from hathor .event import EventManager
25
25
from hathor .event .storage import EventMemoryStorage , EventRocksDBStorage , EventStorage
26
26
from hathor .event .websocket import EventWebsocketFactory
27
+ from hathor .execution_manager import ExecutionManager
27
28
from hathor .feature_activation .bit_signaling_service import BitSignalingService
28
29
from hathor .feature_activation .feature import Feature
29
30
from hathor .feature_activation .feature_service import FeatureService
@@ -137,6 +138,8 @@ def __init__(self) -> None:
137
138
138
139
self ._soft_voided_tx_ids : Optional [set [bytes ]] = None
139
140
141
+ self ._execution_manager : ExecutionManager | None = None
142
+
140
143
def build (self ) -> BuildArtifacts :
141
144
if self .artifacts is not None :
142
145
raise ValueError ('cannot call build twice' )
@@ -150,15 +153,17 @@ def build(self) -> BuildArtifacts:
150
153
151
154
peer_id = self ._get_peer_id ()
152
155
156
+ indexes = self ._get_or_create_indexes_manager ()
157
+ tx_storage = self ._get_or_create_tx_storage (indexes )
158
+
159
+ execution_manager = self ._get_or_create_execution_manager (tx_storage )
153
160
soft_voided_tx_ids = self ._get_soft_voided_tx_ids ()
154
- consensus_algorithm = ConsensusAlgorithm (soft_voided_tx_ids , pubsub )
161
+ consensus_algorithm = ConsensusAlgorithm (soft_voided_tx_ids , pubsub , execution_manager = execution_manager )
155
162
156
163
p2p_manager = self ._get_p2p_manager ()
157
164
158
165
wallet = self ._get_or_create_wallet ()
159
166
event_manager = self ._get_or_create_event_manager ()
160
- indexes = self ._get_or_create_indexes_manager ()
161
- tx_storage = self ._get_or_create_tx_storage (indexes )
162
167
feature_service = self ._get_or_create_feature_service (tx_storage )
163
168
bit_signaling_service = self ._get_or_create_bit_signaling_service (tx_storage )
164
169
verification_service = self ._get_or_create_verification_service ()
@@ -287,6 +292,16 @@ def _get_peer_id(self) -> PeerId:
287
292
return self ._peer_id
288
293
raise ValueError ('peer_id not set' )
289
294
295
+ def _get_or_create_execution_manager (self , tx_storage : TransactionStorage ) -> ExecutionManager :
296
+ if self ._execution_manager is None :
297
+ event_manager = self ._get_or_create_event_manager ()
298
+ self ._execution_manager = ExecutionManager (
299
+ tx_storage = tx_storage ,
300
+ event_manager = event_manager ,
301
+ )
302
+
303
+ return self ._execution_manager
304
+
290
305
def _get_or_create_pubsub (self ) -> PubSubManager :
291
306
if self ._pubsub is None :
292
307
self ._pubsub = PubSubManager (self ._get_reactor ())
0 commit comments