Search in sources :

Example 1 with Runner

use of org.hyperledger.besu.Runner in project besu by hyperledger.

the class BesuCommand method synchronize.

// Blockchain synchronization from peers.
private Runner synchronize(final BesuController controller, final boolean p2pEnabled, final Optional<TLSConfiguration> p2pTLSConfiguration, final boolean peerDiscoveryEnabled, final EthNetworkConfig ethNetworkConfig, final int maxPeers, final String p2pAdvertisedHost, final String p2pListenInterface, final int p2pListenPort, final GraphQLConfiguration graphQLConfiguration, final JsonRpcConfiguration jsonRpcConfiguration, final JsonRpcConfiguration engineJsonRpcConfiguration, final WebSocketConfiguration webSocketConfiguration, final WebSocketConfiguration engineWebSocketConfiguration, final ApiConfiguration apiConfiguration, final MetricsConfiguration metricsConfiguration, final Optional<PermissioningConfiguration> permissioningConfiguration, final Collection<EnodeURL> staticNodes, final Path pidPath) {
    checkNotNull(runnerBuilder);
    p2pTLSConfiguration.ifPresent(runnerBuilder::p2pTLSConfiguration);
    final ObservableMetricsSystem metricsSystem = this.metricsSystem.get();
    final Runner runner = runnerBuilder.vertx(vertx).besuController(controller).p2pEnabled(p2pEnabled).natMethod(natMethod).natManagerServiceName(unstableNatOptions.getNatManagerServiceName()).natMethodFallbackEnabled(unstableNatOptions.getNatMethodFallbackEnabled()).discovery(peerDiscoveryEnabled).ethNetworkConfig(ethNetworkConfig).permissioningConfiguration(permissioningConfiguration).p2pAdvertisedHost(p2pAdvertisedHost).p2pListenInterface(p2pListenInterface).p2pListenPort(p2pListenPort).maxPeers(maxPeers).limitRemoteWireConnectionsEnabled(isLimitRemoteWireConnectionsEnabled).fractionRemoteConnectionsAllowed(Fraction.fromPercentage(maxRemoteConnectionsPercentage).getValue()).randomPeerPriority(randomPeerPriority).networkingConfiguration(unstableNetworkingOptions.toDomainObject()).graphQLConfiguration(graphQLConfiguration).jsonRpcConfiguration(jsonRpcConfiguration).engineJsonRpcConfiguration(engineJsonRpcConfiguration).webSocketConfiguration(webSocketConfiguration).engineWebSocketConfiguration(engineWebSocketConfiguration).apiConfiguration(apiConfiguration).pidPath(pidPath).dataDir(dataDir()).bannedNodeIds(bannedNodeIds).metricsSystem(metricsSystem).permissioningService(permissioningService).metricsConfiguration(metricsConfiguration).staticNodes(staticNodes).identityString(identityString).besuPluginContext(besuPluginContext).autoLogBloomCaching(autoLogBloomCachingEnabled).ethstatsUrl(ethstatsOptions.getEthstatsUrl()).ethstatsContact(ethstatsOptions.getEthstatsContact()).storageProvider(keyValueStorageProvider(keyValueStorageName)).forkIdSupplier(() -> besuController.getProtocolManager().getForkIdAsBytesList()).rpcEndpointService(rpcEndpointServiceImpl).build();
    addShutdownHook(runner);
    return runner;
}
Also used : Runner(org.hyperledger.besu.Runner) PreSynchronizationTaskRunner(org.hyperledger.besu.cli.presynctasks.PreSynchronizationTaskRunner) ObservableMetricsSystem(org.hyperledger.besu.metrics.ObservableMetricsSystem)

Example 2 with Runner

use of org.hyperledger.besu.Runner in project besu by hyperledger.

the class ThreadBesuNodeRunner method startNode.

@Override
public void startNode(final BesuNode node) {
    if (MDC.get("node") != null) {
        LOG.error("ThreadContext node is already set to {}", MDC.get("node"));
    }
    MDC.put("node", node.getName());
    if (!node.getRunCommand().isEmpty()) {
        throw new UnsupportedOperationException("commands are not supported with thread runner");
    }
    final StorageServiceImpl storageService = new StorageServiceImpl();
    final SecurityModuleServiceImpl securityModuleService = new SecurityModuleServiceImpl();
    final Path dataDir = node.homeDirectory();
    final BesuConfiguration commonPluginConfiguration = new BesuConfigurationImpl(dataDir, dataDir.resolve(DATABASE_PATH));
    final BesuPluginContextImpl besuPluginContext = besuPluginContextMap.computeIfAbsent(node, n -> buildPluginContext(node, storageService, securityModuleService, commonPluginConfiguration));
    final ObservableMetricsSystem metricsSystem = MetricsSystemFactory.create(node.getMetricsConfiguration());
    final List<EnodeURL> bootnodes = node.getConfiguration().getBootnodes().stream().map(EnodeURLImpl::fromURI).collect(Collectors.toList());
    final NetworkName network = node.getNetwork() == null ? NetworkName.DEV : node.getNetwork();
    final EthNetworkConfig.Builder networkConfigBuilder = new EthNetworkConfig.Builder(EthNetworkConfig.getNetworkConfig(network)).setBootNodes(bootnodes);
    node.getConfiguration().getGenesisConfig().ifPresent(networkConfigBuilder::setGenesisConfig);
    final EthNetworkConfig ethNetworkConfig = networkConfigBuilder.build();
    final BesuControllerBuilder builder = new BesuController.Builder().fromEthNetworkConfig(ethNetworkConfig);
    final KeyValueStorageProvider storageProvider = new KeyValueStorageProviderBuilder().withStorageFactory(storageService.getByName("rocksdb").get()).withCommonConfiguration(commonPluginConfiguration).withMetricsSystem(metricsSystem).build();
    final TransactionPoolConfiguration txPoolConfig = ImmutableTransactionPoolConfiguration.builder().strictTransactionReplayProtectionEnabled(node.isStrictTxReplayProtectionEnabled()).build();
    final int maxPeers = 25;
    builder.synchronizerConfiguration(new SynchronizerConfiguration.Builder().build()).dataDirectory(node.homeDirectory()).miningParameters(node.getMiningParameters()).privacyParameters(node.getPrivacyParameters()).nodeKey(new NodeKey(new KeyPairSecurityModule(KeyPairUtil.loadKeyPair(dataDir)))).metricsSystem(metricsSystem).transactionPoolConfiguration(txPoolConfig).ethProtocolConfiguration(EthProtocolConfiguration.defaultConfig()).clock(Clock.systemUTC()).isRevertReasonEnabled(node.isRevertReasonEnabled()).storageProvider(storageProvider).gasLimitCalculator(GasLimitCalculator.constant()).pkiBlockCreationConfiguration(node.getPkiKeyStoreConfiguration().map(pkiConfig -> new PkiBlockCreationConfigurationProvider().load(pkiConfig))).evmConfiguration(EvmConfiguration.DEFAULT).maxPeers(maxPeers);
    node.getGenesisConfig().map(GenesisConfigFile::fromConfig).ifPresent(builder::genesisConfigFile);
    final BesuController besuController = builder.build();
    final RunnerBuilder runnerBuilder = new RunnerBuilder();
    runnerBuilder.permissioningConfiguration(node.getPermissioningConfiguration());
    final Runner runner = runnerBuilder.vertx(Vertx.vertx()).besuController(besuController).ethNetworkConfig(ethNetworkConfig).discovery(node.isDiscoveryEnabled()).p2pAdvertisedHost(node.getHostName()).p2pListenPort(0).maxPeers(maxPeers).networkingConfiguration(node.getNetworkingConfiguration()).jsonRpcConfiguration(node.jsonRpcConfiguration()).webSocketConfiguration(node.webSocketConfiguration()).jsonRpcIpcConfiguration(node.jsonRpcIpcConfiguration()).dataDir(node.homeDirectory()).metricsSystem(metricsSystem).permissioningService(new PermissioningServiceImpl()).metricsConfiguration(node.getMetricsConfiguration()).p2pEnabled(node.isP2pEnabled()).p2pTLSConfiguration(node.getTLSConfiguration()).graphQLConfiguration(GraphQLConfiguration.createDefault()).staticNodes(node.getStaticNodes().stream().map(EnodeURLImpl::fromString).collect(Collectors.toList())).besuPluginContext(new BesuPluginContextImpl()).autoLogBloomCaching(false).storageProvider(storageProvider).forkIdSupplier(() -> besuController.getProtocolManager().getForkIdAsBytesList()).rpcEndpointService(new RpcEndpointServiceImpl()).build();
    besuPluginContext.beforeExternalServices();
    runner.startExternalServices();
    besuPluginContext.addService(BesuEvents.class, new BesuEventsImpl(besuController.getProtocolContext().getBlockchain(), besuController.getProtocolManager().getBlockBroadcaster(), besuController.getTransactionPool(), besuController.getSyncState()));
    besuPluginContext.startPlugins();
    runner.startEthereumMainLoop();
    besuRunners.put(node.getName(), runner);
    MDC.remove("node");
}
Also used : BesuPluginContextImpl(org.hyperledger.besu.services.BesuPluginContextImpl) KeyPairUtil(org.hyperledger.besu.crypto.KeyPairUtil) EnodeURLImpl(org.hyperledger.besu.ethereum.p2p.peers.EnodeURLImpl) LoggerFactory(org.slf4j.LoggerFactory) RocksDBPlugin(org.hyperledger.besu.plugin.services.storage.rocksdb.RocksDBPlugin) Runner(org.hyperledger.besu.Runner) NetworkName(org.hyperledger.besu.cli.config.NetworkName) GenesisConfigFile(org.hyperledger.besu.config.GenesisConfigFile) Map(java.util.Map) BesuPluginContextImpl(org.hyperledger.besu.services.BesuPluginContextImpl) Path(java.nio.file.Path) CommandLine(picocli.CommandLine) SecurityModuleService(org.hyperledger.besu.plugin.services.SecurityModuleService) EthProtocolConfiguration(org.hyperledger.besu.ethereum.eth.EthProtocolConfiguration) PkiBlockCreationConfigurationProvider(org.hyperledger.besu.consensus.qbft.pki.PkiBlockCreationConfigurationProvider) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) PicoCLIOptions(org.hyperledger.besu.plugin.services.PicoCLIOptions) DATABASE_PATH(org.hyperledger.besu.controller.BesuController.DATABASE_PATH) EvmConfiguration(org.hyperledger.besu.evm.internal.EvmConfiguration) Collectors(java.util.stream.Collectors) BesuConfigurationImpl(org.hyperledger.besu.services.BesuConfigurationImpl) List(java.util.List) TransactionPoolConfiguration(org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration) KeyValueStorageProvider(org.hyperledger.besu.ethereum.storage.keyvalue.KeyValueStorageProvider) BesuConfiguration(org.hyperledger.besu.plugin.services.BesuConfiguration) BesuEventsImpl(org.hyperledger.besu.services.BesuEventsImpl) GasLimitCalculator(org.hyperledger.besu.ethereum.GasLimitCalculator) NodeKey(org.hyperledger.besu.crypto.NodeKey) BesuEvents(org.hyperledger.besu.plugin.services.BesuEvents) KeyPairSecurityModule(org.hyperledger.besu.crypto.KeyPairSecurityModule) ImmutableTransactionPoolConfiguration(org.hyperledger.besu.ethereum.eth.transactions.ImmutableTransactionPoolConfiguration) EthNetworkConfig(org.hyperledger.besu.cli.config.EthNetworkConfig) BesuControllerBuilder(org.hyperledger.besu.controller.BesuControllerBuilder) HashMap(java.util.HashMap) SynchronizerConfiguration(org.hyperledger.besu.ethereum.eth.sync.SynchronizerConfiguration) RunnerBuilder(org.hyperledger.besu.RunnerBuilder) BesuController(org.hyperledger.besu.controller.BesuController) StorageService(org.hyperledger.besu.plugin.services.StorageService) HashSet(java.util.HashSet) PermissioningServiceImpl(org.hyperledger.besu.services.PermissioningServiceImpl) RpcEndpointServiceImpl(org.hyperledger.besu.services.RpcEndpointServiceImpl) Logger(org.slf4j.Logger) MetricsSystemFactory(org.hyperledger.besu.metrics.MetricsSystemFactory) SecurityModuleServiceImpl(org.hyperledger.besu.services.SecurityModuleServiceImpl) StorageServiceImpl(org.hyperledger.besu.services.StorageServiceImpl) KeyValueStorageProviderBuilder(org.hyperledger.besu.ethereum.storage.keyvalue.KeyValueStorageProviderBuilder) Vertx(io.vertx.core.Vertx) GraphQLConfiguration(org.hyperledger.besu.ethereum.api.graphql.GraphQLConfiguration) File(java.io.File) EnodeURL(org.hyperledger.besu.plugin.data.EnodeURL) PicoCLIOptionsImpl(org.hyperledger.besu.services.PicoCLIOptionsImpl) ObservableMetricsSystem(org.hyperledger.besu.metrics.ObservableMetricsSystem) MDC(org.slf4j.MDC) Clock(java.time.Clock) CommandSpec(picocli.CommandLine.Model.CommandSpec) Runner(org.hyperledger.besu.Runner) NetworkName(org.hyperledger.besu.cli.config.NetworkName) BesuController(org.hyperledger.besu.controller.BesuController) KeyValueStorageProvider(org.hyperledger.besu.ethereum.storage.keyvalue.KeyValueStorageProvider) TransactionPoolConfiguration(org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration) ImmutableTransactionPoolConfiguration(org.hyperledger.besu.ethereum.eth.transactions.ImmutableTransactionPoolConfiguration) BesuControllerBuilder(org.hyperledger.besu.controller.BesuControllerBuilder) RunnerBuilder(org.hyperledger.besu.RunnerBuilder) KeyValueStorageProviderBuilder(org.hyperledger.besu.ethereum.storage.keyvalue.KeyValueStorageProviderBuilder) BesuEventsImpl(org.hyperledger.besu.services.BesuEventsImpl) BesuControllerBuilder(org.hyperledger.besu.controller.BesuControllerBuilder) KeyValueStorageProviderBuilder(org.hyperledger.besu.ethereum.storage.keyvalue.KeyValueStorageProviderBuilder) EnodeURL(org.hyperledger.besu.plugin.data.EnodeURL) RunnerBuilder(org.hyperledger.besu.RunnerBuilder) SecurityModuleServiceImpl(org.hyperledger.besu.services.SecurityModuleServiceImpl) NodeKey(org.hyperledger.besu.crypto.NodeKey) StorageServiceImpl(org.hyperledger.besu.services.StorageServiceImpl) Path(java.nio.file.Path) PkiBlockCreationConfigurationProvider(org.hyperledger.besu.consensus.qbft.pki.PkiBlockCreationConfigurationProvider) RpcEndpointServiceImpl(org.hyperledger.besu.services.RpcEndpointServiceImpl) BesuConfiguration(org.hyperledger.besu.plugin.services.BesuConfiguration) EnodeURLImpl(org.hyperledger.besu.ethereum.p2p.peers.EnodeURLImpl) PermissioningServiceImpl(org.hyperledger.besu.services.PermissioningServiceImpl) ObservableMetricsSystem(org.hyperledger.besu.metrics.ObservableMetricsSystem) KeyPairSecurityModule(org.hyperledger.besu.crypto.KeyPairSecurityModule) EthNetworkConfig(org.hyperledger.besu.cli.config.EthNetworkConfig) BesuConfigurationImpl(org.hyperledger.besu.services.BesuConfigurationImpl)

Example 3 with Runner

use of org.hyperledger.besu.Runner in project besu by hyperledger.

the class BesuCommand method synchronize.

// Blockchain synchronization from peers.
private Runner synchronize(final BesuController controller, final boolean p2pEnabled, final Optional<TLSConfiguration> p2pTLSConfiguration, final boolean peerDiscoveryEnabled, final EthNetworkConfig ethNetworkConfig, final int maxPeers, final String p2pAdvertisedHost, final String p2pListenInterface, final int p2pListenPort, final GraphQLConfiguration graphQLConfiguration, final JsonRpcConfiguration jsonRpcConfiguration, final JsonRpcConfiguration engineJsonRpcConfiguration, final WebSocketConfiguration webSocketConfiguration, final JsonRpcIpcConfiguration jsonRpcIpcConfiguration, final ApiConfiguration apiConfiguration, final MetricsConfiguration metricsConfiguration, final Optional<PermissioningConfiguration> permissioningConfiguration, final Collection<EnodeURL> staticNodes, final Path pidPath) {
    checkNotNull(runnerBuilder);
    p2pTLSConfiguration.ifPresent(runnerBuilder::p2pTLSConfiguration);
    final ObservableMetricsSystem metricsSystem = this.metricsSystem.get();
    final Runner runner = runnerBuilder.vertx(vertx).besuController(controller).p2pEnabled(p2pEnabled).natMethod(natMethod).natManagerServiceName(unstableNatOptions.getNatManagerServiceName()).natMethodFallbackEnabled(unstableNatOptions.getNatMethodFallbackEnabled()).discovery(peerDiscoveryEnabled).ethNetworkConfig(ethNetworkConfig).permissioningConfiguration(permissioningConfiguration).p2pAdvertisedHost(p2pAdvertisedHost).p2pListenInterface(p2pListenInterface).p2pListenPort(p2pListenPort).maxPeers(maxPeers).limitRemoteWireConnectionsEnabled(p2PDiscoveryOptionGroup.isLimitRemoteWireConnectionsEnabled).fractionRemoteConnectionsAllowed(Fraction.fromPercentage(p2PDiscoveryOptionGroup.maxRemoteConnectionsPercentage).getValue()).randomPeerPriority(p2PDiscoveryOptionGroup.randomPeerPriority).networkingConfiguration(unstableNetworkingOptions.toDomainObject()).graphQLConfiguration(graphQLConfiguration).jsonRpcConfiguration(jsonRpcConfiguration).engineJsonRpcConfiguration(engineJsonRpcConfiguration).webSocketConfiguration(webSocketConfiguration).jsonRpcIpcConfiguration(jsonRpcIpcConfiguration).apiConfiguration(apiConfiguration).pidPath(pidPath).dataDir(dataDir()).bannedNodeIds(p2PDiscoveryOptionGroup.bannedNodeIds).metricsSystem(metricsSystem).permissioningService(permissioningService).metricsConfiguration(metricsConfiguration).staticNodes(staticNodes).identityString(identityString).besuPluginContext(besuPluginContext).autoLogBloomCaching(autoLogBloomCachingEnabled).ethstatsUrl(ethstatsOptions.getEthstatsUrl()).ethstatsContact(ethstatsOptions.getEthstatsContact()).storageProvider(keyValueStorageProvider(keyValueStorageName)).forkIdSupplier(() -> besuController.getProtocolManager().getForkIdAsBytesList()).rpcEndpointService(rpcEndpointServiceImpl).build();
    addShutdownHook(runner);
    return runner;
}
Also used : Runner(org.hyperledger.besu.Runner) PreSynchronizationTaskRunner(org.hyperledger.besu.cli.presynctasks.PreSynchronizationTaskRunner) ObservableMetricsSystem(org.hyperledger.besu.metrics.ObservableMetricsSystem)

Aggregations

Runner (org.hyperledger.besu.Runner)3 ObservableMetricsSystem (org.hyperledger.besu.metrics.ObservableMetricsSystem)3 PreSynchronizationTaskRunner (org.hyperledger.besu.cli.presynctasks.PreSynchronizationTaskRunner)2 Vertx (io.vertx.core.Vertx)1 File (java.io.File)1 Path (java.nio.file.Path)1 Clock (java.time.Clock)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Map (java.util.Map)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 Collectors (java.util.stream.Collectors)1 RunnerBuilder (org.hyperledger.besu.RunnerBuilder)1 EthNetworkConfig (org.hyperledger.besu.cli.config.EthNetworkConfig)1 NetworkName (org.hyperledger.besu.cli.config.NetworkName)1 GenesisConfigFile (org.hyperledger.besu.config.GenesisConfigFile)1 PkiBlockCreationConfigurationProvider (org.hyperledger.besu.consensus.qbft.pki.PkiBlockCreationConfigurationProvider)1 BesuController (org.hyperledger.besu.controller.BesuController)1 DATABASE_PATH (org.hyperledger.besu.controller.BesuController.DATABASE_PATH)1