diff --git a/src/main/java/com/sparrowwallet/sparrow/net/BatchedElectrumServerRpc.java b/src/main/java/com/sparrowwallet/sparrow/net/BatchedElectrumServerRpc.java index 7d1f8775..c5a49272 100644 --- a/src/main/java/com/sparrowwallet/sparrow/net/BatchedElectrumServerRpc.java +++ b/src/main/java/com/sparrowwallet/sparrow/net/BatchedElectrumServerRpc.java @@ -228,7 +228,7 @@ public class BatchedElectrumServerRpc implements ElectrumServerRpc { try { return batchRequest.execute(); } catch(JsonRpcBatchException e) { - throw new ElectrumServerRpcException("Error getting fee estimates: " + e.getErrors(), e); + throw new ElectrumServerRpcException("Error getting fee estimates from connected server: " + e.getErrors(), e); } catch(Exception e) { throw new ElectrumServerRpcException("Error getting fee estimates for target blocks: " + targetBlocks, e); } diff --git a/src/main/java/com/sparrowwallet/sparrow/net/ElectrumServer.java b/src/main/java/com/sparrowwallet/sparrow/net/ElectrumServer.java index 4eba36bc..5ee63a09 100644 --- a/src/main/java/com/sparrowwallet/sparrow/net/ElectrumServer.java +++ b/src/main/java/com/sparrowwallet/sparrow/net/ElectrumServer.java @@ -813,6 +813,18 @@ public class ElectrumServer { } public Map getFeeEstimates(List targetBlocks) throws ServerException { + Map targetBlocksFeeRatesSats = getDefaultFeeEstimates(targetBlocks); + + FeeRatesSource feeRatesSource = Config.get().getFeeRatesSource(); + feeRatesSource = (feeRatesSource == null ? FeeRatesSource.MEMPOOL_SPACE : feeRatesSource); + if(Network.get().equals(Network.MAINNET)) { + targetBlocksFeeRatesSats.putAll(feeRatesSource.getBlockTargetFeeRates(targetBlocksFeeRatesSats)); + } + + return targetBlocksFeeRatesSats; + } + + public Map getDefaultFeeEstimates(List targetBlocks) throws ServerException { try { Map targetBlocksFeeRatesBtcKb = electrumServerRpc.getFeeEstimates(getTransport(), targetBlocks); @@ -825,15 +837,12 @@ public class ElectrumServer { targetBlocksFeeRatesSats.put(target, minFeeRateSatsKb / 1000d); } - FeeRatesSource feeRatesSource = Config.get().getFeeRatesSource(); - feeRatesSource = (feeRatesSource == null ? FeeRatesSource.MEMPOOL_SPACE : feeRatesSource); - if(Network.get().equals(Network.MAINNET)) { - targetBlocksFeeRatesSats.putAll(feeRatesSource.getBlockTargetFeeRates(targetBlocksFeeRatesSats)); - } - return targetBlocksFeeRatesSats; } catch(ElectrumServerRpcException e) { - throw new ServerException(e.getMessage(), e); + log.warn(e.getMessage()); + return targetBlocks.stream().collect(Collectors.toMap(java.util.function.Function.identity(), v -> AppServices.getFallbackFeeRate(), + (u, v) -> { throw new IllegalStateException("Duplicate target blocks"); }, + LinkedHashMap::new)); } }