class NodeLocalConfigPermissioningController implements NodePermissioningProvider {

  public NodesAllowlistResult removeNodes(final List<String> enodeURLs) {
    final NodesAllowlistResult inputValidationResult = validInput(enodeURLs);
    if (inputValidationResult.result() != AllowlistOperationResult.SUCCESS) {
      return inputValidationResult;
    }
    final List<EnodeURL> peers =
        enodeURLs.stream()
            .map(url -> EnodeURL.fromString(url, configuration.getEnodeDnsConfiguration()))
            .collect(Collectors.toList());

    boolean anyBootnode = peers.stream().anyMatch(fixedNodes::contains);
    if (anyBootnode) {
      return new NodesAllowlistResult(AllowlistOperationResult.ERROR_FIXED_NODE_CANNOT_BE_REMOVED);
    }

    for (EnodeURL peer : peers) {
      if (!(nodesAllowlist.contains(peer))) {
        return new NodesAllowlistResult(
            AllowlistOperationResult.ERROR_ABSENT_ENTRY,
            String.format("Specified peer: %s does not exist in allowlist.", peer.getNodeId()));
      }
    }

    final List<EnodeURL> oldAllowlist = new ArrayList<>(this.nodesAllowlist);
    peers.forEach(this::removeNode);
    notifyListUpdatedSubscribers(new NodeAllowlistUpdatedEvent(Collections.emptyList(), peers));

    final NodesAllowlistResult updateConfigFileResult = updateAllowlistInConfigFile(oldAllowlist);
    if (updateConfigFileResult.result() != AllowlistOperationResult.SUCCESS) {
      return updateConfigFileResult;
    }

    return new NodesAllowlistResult(AllowlistOperationResult.SUCCESS);
  }

  public  NodeLocalConfigPermissioningController(
      final LocalPermissioningConfiguration permissioningConfiguration,
      final List<EnodeURL> fixedNodes,
      final Bytes localNodeId,
      final MetricsSystem metricsSystem);
  public  NodeLocalConfigPermissioningController(
      final LocalPermissioningConfiguration configuration,
      final List<EnodeURL> fixedNodes,
      final Bytes localNodeId,
      final AllowlistPersistor allowlistPersistor,
      final MetricsSystem metricsSystem);

}