public static AccountabilityManager getAccountabilityManager(Properties accountabilityConfiguration) throws AccountabilityException { boolean requiresRecreation = false; // if any of the relevant configurations is changed, we need a new instance! if (activeProperties != null) { requiresRecreation = checkIfChanged(accountabilityConfiguration); } if (Objects.isNull(accountabilityManager) || requiresRecreation) { BlockchainFactory.reset(); ImmutableStorageProviderFactory.reset(); // if there is an older accountability manager, we should shut it down if (!Objects.isNull(accountabilityManager)) { accountabilityManager.close(); } try { BlockchainAccess blockchain = BlockchainFactory.getBlockchainAccess(BlockchainFactory.AvailableBlockchains.ETHEREUM, accountabilityConfiguration); ImmutableStorageProvider storageProvider = ImmutableStorageProviderFactory.getStorageProvider(ImmutableStorageProviderFactory.AvailableImmutableStorages.SWARM, accountabilityConfiguration); accountabilityManager = new AccountabilityManagerImpl(blockchain, storageProvider); copyProperties(accountabilityConfiguration); } catch (BlockchainException e) { String msg = "Could not instantiate accountability layer: " + e.getMessage(); LOGGER.error(msg, e); throw new AccountabilityException(msg, e); } } return accountabilityManager; }