@@ -172,13 +172,14 @@ public void startNode(final BesuNode node) {
172172
173173 node .getGenesisConfig ().map (GenesisConfig ::fromConfig ).ifPresent (builder ::genesisConfig );
174174
175- final BesuController besuController = component .besuController ();
176-
177- InProcessRpcConfiguration inProcessRpcConfiguration = node .inProcessRpcConfiguration ();
178-
179175 final BesuPluginContextImpl besuPluginContext =
180176 besuPluginContextMap .computeIfAbsent (node , n -> component .getBesuPluginContext ());
181177
178+ builder .besuComponent (component );
179+
180+ final BesuController besuController = component .besuController ();
181+ InProcessRpcConfiguration inProcessRpcConfiguration = node .inProcessRpcConfiguration ();
182+
182183 final RunnerBuilder runnerBuilder = new RunnerBuilder ();
183184 runnerBuilder .permissioningConfiguration (node .getPermissioningConfiguration ());
184185 runnerBuilder .apiConfiguration (node .getApiConfiguration ());
@@ -212,19 +213,7 @@ public void startNode(final BesuNode node) {
212213
213214 runner .startExternalServices ();
214215
215- besuPluginContext .addService (
216- BesuEvents .class ,
217- new BesuEventsImpl (
218- besuController .getProtocolContext ().getBlockchain (),
219- besuController .getProtocolManager ().getBlockBroadcaster (),
220- besuController .getTransactionPool (),
221- besuController .getSyncState (),
222- besuController .getProtocolContext ().getBadBlockManager ()));
223- besuPluginContext .addService (
224- TransactionPoolService .class ,
225- new TransactionPoolServiceImpl (besuController .getTransactionPool ()));
226- besuPluginContext .addService (
227- MiningService .class , new MiningServiceImpl (besuController .getMiningCoordinator ()));
216+ loadAdditionalServices (besuController , besuPluginContext );
228217
229218 component .rpcEndpointService ().init (runner .getInProcessRpcMethods ());
230219
@@ -261,6 +250,32 @@ public boolean isActive(final String nodeName) {
261250 return besuRunners .containsKey (nodeName );
262251 }
263252
253+ private void loadAdditionalServices (
254+ final BesuController besuController , final BesuPluginContextImpl besuPluginContext ) {
255+ final TraceServiceImpl traceService =
256+ new TraceServiceImpl (
257+ new BlockchainQueries (
258+ besuController .getProtocolSchedule (),
259+ besuController .getProtocolContext ().getBlockchain (),
260+ besuController .getProtocolContext ().getWorldStateArchive (),
261+ besuController .getMiningParameters ()),
262+ besuController .getProtocolSchedule ());
263+ besuPluginContext .addService (TraceService .class , traceService );
264+ besuPluginContext .addService (
265+ BesuEvents .class ,
266+ new BesuEventsImpl (
267+ besuController .getProtocolContext ().getBlockchain (),
268+ besuController .getProtocolManager ().getBlockBroadcaster (),
269+ besuController .getTransactionPool (),
270+ besuController .getSyncState (),
271+ besuController .getProtocolContext ().getBadBlockManager ()));
272+ besuPluginContext .addService (
273+ TransactionPoolService .class ,
274+ new TransactionPoolServiceImpl (besuController .getTransactionPool ()));
275+ besuPluginContext .addService (
276+ MiningService .class , new MiningServiceImpl (besuController .getMiningCoordinator ()));
277+ }
278+
264279 private void killRunner (final String name ) {
265280 LOG .info ("Killing " + name + " runner" );
266281
@@ -336,12 +351,8 @@ RpcEndpointServiceImpl provideRpcEndpointService() {
336351
337352 @ Provides
338353 @ Singleton
339- BlockchainServiceImpl provideBlockchainService (final BesuController besuController ) {
340- BlockchainServiceImpl retval = new BlockchainServiceImpl ();
341- retval .init (
342- besuController .getProtocolContext ().getBlockchain (),
343- besuController .getProtocolSchedule ());
344- return retval ;
354+ BlockchainServiceImpl provideBlockchainService () {
355+ return new BlockchainServiceImpl ();
345356 }
346357
347358 @ Provides
@@ -373,22 +384,14 @@ TransactionPoolValidatorServiceImpl provideTransactionPoolValidatorService() {
373384 }
374385
375386 @ Provides
376- @ Singleton
377- TransactionSelectionServiceImpl provideTransactionSelectionService () {
378- return new TransactionSelectionServiceImpl ();
387+ DataStorageConfiguration provideDataStorageConfiguration (final BesuNode node ) {
388+ return node .getDataStorageConfiguration ();
379389 }
380390
381391 @ Provides
382392 @ Singleton
383- TraceServiceImpl provideTraceService (
384- final BesuController besuController , final MiningConfiguration miningConfiguration ) {
385- return new TraceServiceImpl (
386- new BlockchainQueries (
387- besuController .getProtocolSchedule (),
388- besuController .getProtocolContext ().getBlockchain (),
389- besuController .getProtocolContext ().getWorldStateArchive (),
390- miningConfiguration ),
391- besuController .getProtocolSchedule ());
393+ TransactionSelectionServiceImpl provideTransactionSelectionService () {
394+ return new TransactionSelectionServiceImpl ();
392395 }
393396
394397 @ Provides
@@ -424,11 +427,8 @@ TransactionSimulator provideTransactionSimulator(
424427
425428 @ Provides
426429 @ Singleton
427- TransactionSimulationServiceImpl provideTransactionSimulationService (
428- final Blockchain blockchain , final TransactionSimulator transactionSimulator ) {
429- TransactionSimulationServiceImpl retval = new TransactionSimulationServiceImpl ();
430- retval .init (blockchain , transactionSimulator );
431- return retval ;
430+ TransactionSimulationServiceImpl provideTransactionSimulationService () {
431+ return new TransactionSimulationServiceImpl ();
432432 }
433433
434434 @ Provides
@@ -470,12 +470,14 @@ public SynchronizerConfiguration provideSynchronizationConfiguration() {
470470 public BesuControllerBuilder provideBesuControllerBuilder (
471471 final EthNetworkConfig ethNetworkConfig ,
472472 final SynchronizerConfiguration synchronizerConfiguration ,
473- final TransactionPoolConfiguration transactionPoolConfiguration ) {
473+ final TransactionPoolConfiguration transactionPoolConfiguration ,
474+ final DataStorageConfiguration dataStorageConfiguration ) {
474475
475476 final BesuControllerBuilder builder =
476477 new BesuController .Builder ()
477478 .fromEthNetworkConfig (ethNetworkConfig , synchronizerConfiguration .getSyncMode ());
478479 builder .transactionPoolConfiguration (transactionPoolConfiguration );
480+ builder .dataStorageConfiguration (dataStorageConfiguration );
479481 return builder ;
480482 }
481483
@@ -487,12 +489,27 @@ public BesuController provideBesuController(
487489 final MetricsSystem metricsSystem ,
488490 final KeyValueStorageProvider storageProvider ,
489491 final MiningConfiguration miningConfiguration ,
490- final ApiConfiguration apiConfiguration ) {
492+ final ApiConfiguration apiConfiguration ,
493+ final StorageServiceImpl storageService ,
494+ final BlockchainServiceImpl blockchainServiceImpl ,
495+ final SecurityModuleServiceImpl securityModuleService ,
496+ final RpcEndpointServiceImpl rpcEndpointServiceImpl ,
497+ final BesuConfiguration commonPluginConfiguration ,
498+ final PermissioningServiceImpl permissioningService ,
499+ final TransactionSelectionServiceImpl transactionSelectionServiceImpl ,
500+ final TransactionPoolValidatorServiceImpl transactionPoolValidatorServiceImpl ,
501+ final TransactionSimulationServiceImpl transactionSimulationServiceImpl ,
502+ final MetricsConfiguration metricsConfiguration ,
503+ final MetricCategoryRegistryImpl metricCategoryRegistry ,
504+ final @ Named ("ExtraCLIOptions" ) List <String > extraCLIOptions ,
505+ final @ Named ("RequestedPlugins" ) List <String > requestedPlugins ,
506+ final BesuPluginContextImpl besuPluginContext ,
507+ final DataStorageConfiguration dataStorageConfiguration ) {
491508
492509 builder
493510 .synchronizerConfiguration (synchronizerConfiguration )
494511 .metricsSystem ((ObservableMetricsSystem ) metricsSystem )
495- .dataStorageConfiguration (DataStorageConfiguration . DEFAULT_FOREST_CONFIG )
512+ .dataStorageConfiguration (dataStorageConfiguration )
496513 .ethProtocolConfiguration (EthProtocolConfiguration .defaultConfig ())
497514 .clock (Clock .systemUTC ())
498515 .storageProvider (storageProvider )
@@ -501,9 +518,32 @@ public BesuController provideBesuController(
501518 .maxRemotelyInitiatedPeers (15 )
502519 .miningParameters (miningConfiguration )
503520 .randomPeerPriority (false )
504- .apiConfiguration (apiConfiguration )
505- .besuComponent (null );
506- return builder .build ();
521+ .apiConfiguration (apiConfiguration );
522+ loadPluginContext (
523+ storageService ,
524+ securityModuleService ,
525+ rpcEndpointServiceImpl ,
526+ blockchainServiceImpl ,
527+ commonPluginConfiguration ,
528+ permissioningService ,
529+ transactionSelectionServiceImpl ,
530+ transactionPoolValidatorServiceImpl ,
531+ transactionSimulationServiceImpl ,
532+ metricsConfiguration ,
533+ metricCategoryRegistry ,
534+ metricsSystem ,
535+ extraCLIOptions ,
536+ requestedPlugins ,
537+ besuPluginContext );
538+ final BesuController besuController = builder .build ();
539+ blockchainServiceImpl .init (
540+ besuController .getProtocolContext ().getBlockchain (),
541+ besuController .getProtocolSchedule ());
542+ transactionSimulationServiceImpl .init (
543+ besuController .getProtocolContext ().getBlockchain (),
544+ besuController .getTransactionSimulator ());
545+
546+ return besuController ;
507547 }
508548
509549 @ Provides
@@ -522,42 +562,44 @@ public EthNetworkConfig provideEthNetworkConfig(
522562 return ethNetworkConfig ;
523563 }
524564
565+ @ Singleton
525566 @ Provides
526- public BesuPluginContextImpl providePluginContext (
567+ public BesuPluginContextImpl providePluginContext () {
568+ return new BesuPluginContextImpl ();
569+ }
570+
571+ public void loadPluginContext (
527572 final StorageServiceImpl storageService ,
528573 final SecurityModuleServiceImpl securityModuleService ,
529- final TransactionSimulationServiceImpl transactionSimulationServiceImpl ,
530- final TransactionSelectionServiceImpl transactionSelectionServiceImpl ,
531- final TransactionPoolValidatorServiceImpl transactionPoolValidatorServiceImpl ,
532- final BlockchainServiceImpl blockchainServiceImpl ,
533574 final RpcEndpointServiceImpl rpcEndpointServiceImpl ,
575+ final BlockchainServiceImpl blockchainServiceImpl ,
534576 final BesuConfiguration commonPluginConfiguration ,
535577 final PermissioningServiceImpl permissioningService ,
578+ final TransactionSelectionServiceImpl transactionSelectionServiceImpl ,
579+ final TransactionPoolValidatorServiceImpl transactionPoolValidatorServiceImpl ,
580+ final TransactionSimulationServiceImpl transactionSimulationServiceImpl ,
536581 final MetricsConfiguration metricsConfiguration ,
537582 final MetricCategoryRegistryImpl metricCategoryRegistry ,
538583 final MetricsSystem metricsSystem ,
539- final TraceServiceImpl traceService ,
540584 final @ Named ("ExtraCLIOptions" ) List <String > extraCLIOptions ,
541- final @ Named ("RequestedPlugins" ) List <String > requestedPlugins ) {
585+ final @ Named ("RequestedPlugins" ) List <String > requestedPlugins ,
586+ final BesuPluginContextImpl besuPluginContext ) {
542587 final CommandLine commandLine = new CommandLine (CommandSpec .create ());
543- final BesuPluginContextImpl besuPluginContext = new BesuPluginContextImpl ();
544588 besuPluginContext .addService (StorageService .class , storageService );
545589 besuPluginContext .addService (SecurityModuleService .class , securityModuleService );
546590 besuPluginContext .addService (PicoCLIOptions .class , new PicoCLIOptionsImpl (commandLine ));
591+ besuPluginContext .addService (BlockchainService .class , blockchainServiceImpl );
547592 besuPluginContext .addService (RpcEndpointService .class , rpcEndpointServiceImpl );
593+ besuPluginContext .addService (BesuConfiguration .class , commonPluginConfiguration );
594+ metricCategoryRegistry .setMetricsConfiguration (metricsConfiguration );
595+ besuPluginContext .addService (MetricCategoryRegistry .class , metricCategoryRegistry );
596+ besuPluginContext .addService (MetricsSystem .class , metricsSystem );
548597 besuPluginContext .addService (
549598 TransactionSelectionService .class , transactionSelectionServiceImpl );
550599 besuPluginContext .addService (
551600 TransactionPoolValidatorService .class , transactionPoolValidatorServiceImpl );
552601 besuPluginContext .addService (
553602 TransactionSimulationService .class , transactionSimulationServiceImpl );
554- besuPluginContext .addService (BlockchainService .class , blockchainServiceImpl );
555- besuPluginContext .addService (BesuConfiguration .class , commonPluginConfiguration );
556- metricCategoryRegistry .setMetricsConfiguration (metricsConfiguration );
557- besuPluginContext .addService (MetricCategoryRegistry .class , metricCategoryRegistry );
558- besuPluginContext .addService (MetricsSystem .class , metricsSystem );
559- besuPluginContext .addService (TraceService .class , traceService );
560-
561603 final Path pluginsPath ;
562604 final String pluginDir = System .getProperty ("besu.plugins.dir" );
563605 if (pluginDir == null || pluginDir .isEmpty ()) {
@@ -586,7 +628,6 @@ public BesuPluginContextImpl providePluginContext(
586628
587629 // register built-in plugins
588630 new RocksDBPlugin ().register (besuPluginContext );
589- return besuPluginContext ;
590631 }
591632
592633 @ Provides
0 commit comments