What changed, and why it matters
This commit adds bitview.space as a new optional source for Bitcoin transaction fee estimates in Sparrow Wallet. It is a feature addition, not a fix. The new source is one of several fee-rate providers users can choose from. There is no direct evidence in the commit or supplied references that this change is a security patch or addresses a vulnerability.
Treat as a routine feature addition. If reviewing for security, verify that bitview.space is a trustworthy provider, that responses are validated consistently with other sources, and that HTTPS/TLS behavior is unchanged. No urgent action is indicated by the diff alone.
Security signals we found
New third-party HTTPS API added as a fee-rate data source
No commit message or diff indicating vulnerability fix
No supplied vendor or researcher references describing security relevance
Evidence from the diff
The change introduces a new FeeRatesSource enum constant BITVIEW_SPACE backed by https://bitview.space/api/. It implements the same interface methods as existing sources (precise fees, mempool blocks, block summary, recent blocks, recent mempool transactions) and is wired into the settings UI. The source only supports mainnet. No TLS/certificate pinning, authentication, or response-validation changes are visible in the diff.
Changed components
Sparrow Wallet fee estimation subsystemsrc/main/java/com/sparrowwallet/sparrow/net/FeeRatesSource.javasrc/main/resources/com/sparrowwallet/sparrow/settings/general.fxmlsrc/main/resources/image/feeratesource/bitview.space-icon.svgInspect captured patch +47 / −0
diff --git a/src/main/java/com/sparrowwallet/sparrow/net/FeeRatesSource.java b/src/main/java/com/sparrowwallet/sparrow/net/FeeRatesSource.java
index 275bc86..c02117b 100644
--- a/src/main/java/com/sparrowwallet/sparrow/net/FeeRatesSource.java
+++ b/src/main/java/com/sparrowwallet/sparrow/net/FeeRatesSource.java
@@ -72,6 +72,46 @@ public enum FeeRatesSource {
return network == Network.MAINNET || network == Network.TESTNET || network == Network.TESTNET4 || network == Network.SIGNET;
}
},
+ BITVIEW_SPACE("bitview.space", true) {
+ @Override
+ public Map<Integer, Double> getBlockTargetFeeRates(Map<Integer, Double> defaultblockTargetFeeRates) {
+ String url = getApiUrl() + "v1/fees/precise";
+ return getThreeTierFeeRates(this, defaultblockTargetFeeRates, url);
+ }
+
+ @Override
+ public Double getNextBlockMedianFeeRate() throws Exception {
+ String url = getApiUrl() + "v1/fees/mempool-blocks";
+ return requestNextBlockMedianFeeRate(this, url);
+ }
+
+ @Override
+ public BlockSummary getBlockSummary(Sha256Hash blockId) throws Exception {
+ String url = getApiUrl() + "v1/block/" + Utils.bytesToHex(blockId.getReversedBytes());
+ return requestBlockSummary(this, url);
+ }
+
+ @Override
+ public Map<Integer, BlockSummary> getRecentBlockSummaries() throws Exception {
+ String url = getApiUrl() + "v1/blocks";
+ return requestBlockSummaries(this, url);
+ }
+
+ @Override
+ public List<BlockTransactionHash> getRecentMempoolTransactions() throws Exception {
+ String url = getApiUrl() + "mempool/recent";
+ return requestRecentMempoolTransactions(this, url);
+ }
+
+ private String getApiUrl() {
+ return "https://bitview.space/api/";
+ }
+
+ @Override
+ public boolean supportsNetwork(Network network) {
+ return network == Network.MAINNET;
+ }
+ },
BLOCK_XYZ("block.xyz", true) {
/*
https://engineering.block.xyz/blog/augur-an-open-source-bitcoin-fee-estimation-library
diff --git a/src/main/resources/com/sparrowwallet/sparrow/settings/general.fxml b/src/main/resources/com/sparrowwallet/sparrow/settings/general.fxml
index 67e0b35..5a33f62 100644
--- a/src/main/resources/com/sparrowwallet/sparrow/settings/general.fxml
+++ b/src/main/resources/com/sparrowwallet/sparrow/settings/general.fxml
@@ -36,6 +36,7 @@
<FXCollections fx:factory="observableArrayList">
<FeeRatesSource fx:constant="ELECTRUM_SERVER" />
<FeeRatesSource fx:constant="MEMPOOL_SPACE" />
+ <FeeRatesSource fx:constant="BITVIEW_SPACE" />
<FeeRatesSource fx:constant="BLOCK_XYZ" />
<FeeRatesSource fx:constant="MINIMUM" />
</FXCollections>
diff --git a/src/main/resources/image/feeratesource/bitview.space-icon.svg b/src/main/resources/image/feeratesource/bitview.space-icon.svg
new file mode 100644
index 0000000..801f111
--- /dev/null
+++ b/src/main/resources/image/feeratesource/bitview.space-icon.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14px" height="14px" viewBox="0 0 14 14" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(50.980395%,50.980395%,50.980395%);fill-opacity:1;" d="M 1.640625 2.085938 C 1.640625 1.839844 1.839844 1.636719 2.089844 1.636719 L 12.164062 1.636719 C 12.414062 1.636719 12.613281 1.839844 12.613281 2.085938 L 12.613281 12.167969 C 12.613281 12.417969 12.414062 12.617188 12.164062 12.617188 L 2.089844 12.617188 C 1.839844 12.617188 1.640625 12.417969 1.640625 12.167969 Z M 1.640625 2.085938 "/>
+</g>
+</svg>
Why this scored 24/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.