3535from hathor .manager import HathorManager
3636from hathor .mining .cpu_mining_service import CpuMiningService
3737from hathor .nanocontracts import NCRocksDBStorageFactory , NCStorageFactory
38- from hathor .nanocontracts .catalog import NCBlueprintCatalog
38+ from hathor .nanocontracts .blueprint_service import BlueprintService
3939from hathor .nanocontracts .nc_exec_logs import NCLogConfig , NCLogStorage
4040from hathor .nanocontracts .runner .runner import RunnerFactory
4141from hathor .nanocontracts .sorter .types import NCSorterCallable
@@ -110,7 +110,7 @@ class BuildArtifacts(NamedTuple):
110110
111111
112112_VertexVerifiersBuilder : TypeAlias = Callable [
113- [Reactor , HathorSettingsType , DifficultyAdjustmentAlgorithm , FeatureService , TransactionStorage ],
113+ [Reactor , HathorSettingsType , DifficultyAdjustmentAlgorithm , FeatureService , TransactionStorage , BlueprintService ],
114114 VertexVerifiers
115115]
116116
@@ -199,6 +199,7 @@ def __init__(self) -> None:
199199 self ._nc_log_config : NCLogConfig = NCLogConfig .NONE
200200
201201 self ._vertex_json_serializer : VertexJsonSerializer | None = None
202+ self ._blueprint_service : BlueprintService | None = None
202203
203204 def build (self ) -> BuildArtifacts :
204205 if self .artifacts is not None :
@@ -233,9 +234,7 @@ def build(self) -> BuildArtifacts:
233234 poa_block_producer = self ._get_or_create_poa_block_producer ()
234235 runner_factory = self ._get_or_create_runner_factory ()
235236 vertex_json_serializer = self ._get_or_create_vertex_json_serializer ()
236-
237- if settings .ENABLE_NANO_CONTRACTS :
238- tx_storage .nc_catalog = self ._get_nc_catalog ()
237+ blueprint_service = self ._get_or_create_blueprint_service ()
239238
240239 if self ._enable_address_index :
241240 indexes .enable_address_index (pubsub )
@@ -279,6 +278,7 @@ def build(self) -> BuildArtifacts:
279278 runner_factory = runner_factory ,
280279 feature_service = feature_service ,
281280 vertex_json_serializer = vertex_json_serializer ,
281+ blueprint_service = blueprint_service ,
282282 ** kwargs
283283 )
284284
@@ -426,18 +426,14 @@ def _get_or_create_consensus(self) -> ConsensusAlgorithm:
426426
427427 return self ._consensus
428428
429- def _get_nc_catalog (self ) -> NCBlueprintCatalog :
430- from hathor .nanocontracts .catalog import generate_catalog_from_settings
431- settings = self ._get_or_create_settings ()
432- return generate_catalog_from_settings (settings )
433-
434429 def _get_or_create_runner_factory (self ) -> RunnerFactory :
435430 if self ._runner_factory is None :
436431 self ._runner_factory = RunnerFactory (
437432 reactor = self ._get_reactor (),
438433 settings = self ._get_or_create_settings (),
439434 tx_storage = self ._get_or_create_tx_storage (),
440435 nc_storage_factory = self ._get_or_create_nc_storage_factory (),
436+ blueprint_service = self ._get_or_create_blueprint_service (),
441437 )
442438 return self ._runner_factory
443439
@@ -611,14 +607,16 @@ def _get_or_create_vertex_verifiers(self) -> VertexVerifiers:
611607 feature_service = self ._get_or_create_feature_service ()
612608 daa = self ._get_or_create_daa ()
613609 tx_storage = self ._get_or_create_tx_storage ()
610+ blueprint_service = self ._get_or_create_blueprint_service ()
614611
615612 if self ._vertex_verifiers_builder :
616613 self ._vertex_verifiers = self ._vertex_verifiers_builder (
617614 reactor ,
618615 settings ,
619616 daa ,
620617 feature_service ,
621- tx_storage
618+ tx_storage ,
619+ blueprint_service ,
622620 )
623621 else :
624622 self ._vertex_verifiers = VertexVerifiers .create_defaults (
@@ -627,6 +625,7 @@ def _get_or_create_vertex_verifiers(self) -> VertexVerifiers:
627625 daa = daa ,
628626 feature_service = feature_service ,
629627 tx_storage = tx_storage ,
628+ blueprint_service = blueprint_service ,
630629 )
631630
632631 return self ._vertex_verifiers
@@ -684,13 +683,25 @@ def _get_or_create_vertex_json_serializer(self) -> VertexJsonSerializer:
684683 if self ._vertex_json_serializer is None :
685684 tx_storage = self ._get_or_create_tx_storage ()
686685 nc_log_storage = self ._get_or_create_nc_log_storage ()
686+ blueprint_service = self ._get_or_create_blueprint_service ()
687687 self ._vertex_json_serializer = VertexJsonSerializer (
688688 storage = tx_storage ,
689689 nc_log_storage = nc_log_storage ,
690+ blueprint_service = blueprint_service ,
690691 )
691692
692693 return self ._vertex_json_serializer
693694
695+ def _get_or_create_blueprint_service (self ) -> BlueprintService :
696+ if self ._blueprint_service is None :
697+ self ._blueprint_service = BlueprintService (
698+ settings = self ._get_or_create_settings (),
699+ tx_storage = self ._get_or_create_tx_storage (),
700+ feature_service = self ._get_or_create_feature_service (),
701+ )
702+
703+ return self ._blueprint_service
704+
694705 def set_rocksdb_path (self , path : str | tempfile .TemporaryDirectory ) -> 'Builder' :
695706 if self ._tx_storage :
696707 raise ValueError ('cannot set rocksdb path after tx storage is set' )
0 commit comments