diff --git a/drongo b/drongo index 832ca8f2..f00754b1 160000 --- a/drongo +++ b/drongo @@ -1 +1 @@ -Subproject commit 832ca8f257559864823c83d8d29dc2276f44fa51 +Subproject commit f00754b15779e94faa65c3de5c0a977cc51d865b diff --git a/src/main/java/com/sparrowwallet/sparrow/control/DateCell.java b/src/main/java/com/sparrowwallet/sparrow/control/DateCell.java index 9d301737..7d3a0bf4 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/DateCell.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/DateCell.java @@ -37,7 +37,8 @@ public class DateCell extends TreeTableCell { setText(date); setContextMenu(new DateContextMenu(date, utxoEntry.getHashIndex())); Tooltip tooltip = new Tooltip(); - tooltip.setText(Integer.toString(utxoEntry.getHashIndex().getHeight())); + int height = utxoEntry.getHashIndex().getHeight(); + tooltip.setText(height > 0 ? Integer.toString(height) : "Mempool"); setTooltip(tooltip); } setGraphic(null); @@ -58,7 +59,7 @@ public class DateCell extends TreeTableCell { copyHeight.setOnAction(AE -> { hide(); ClipboardContent content = new ClipboardContent(); - content.putString(Integer.toString(reference.getHeight())); + content.putString(reference.getHeight() > 0 ? Integer.toString(reference.getHeight()) : "Mempool"); Clipboard.getSystemClipboard().setContent(content); }); diff --git a/src/main/java/com/sparrowwallet/sparrow/control/EntryCell.java b/src/main/java/com/sparrowwallet/sparrow/control/EntryCell.java index 812710d0..8e9e4e20 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/EntryCell.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/EntryCell.java @@ -146,7 +146,7 @@ class EntryCell extends TreeTableCell { copyHeight.setOnAction(AE -> { hide(); ClipboardContent content = new ClipboardContent(); - content.putString(Integer.toString(blockTransaction.getHeight())); + content.putString(blockTransaction.getHeight() > 0 ? Integer.toString(blockTransaction.getHeight()) : "Mempool"); Clipboard.getSystemClipboard().setContent(content); }); diff --git a/src/main/java/com/sparrowwallet/sparrow/io/Config.java b/src/main/java/com/sparrowwallet/sparrow/io/Config.java index 622ece0c..033e789e 100644 --- a/src/main/java/com/sparrowwallet/sparrow/io/Config.java +++ b/src/main/java/com/sparrowwallet/sparrow/io/Config.java @@ -15,6 +15,8 @@ public class Config { private BitcoinUnit bitcoinUnit; private Currency fiatCurrency; private ExchangeSource exchangeSource; + private boolean groupByAddress = true; + private boolean includeMempoolChange = true; private Integer keyDerivationPeriod; private File hwi; private String electrumServer; @@ -99,6 +101,24 @@ public class Config { flush(); } + public boolean isGroupByAddress() { + return groupByAddress; + } + + public void setGroupByAddress(boolean groupByAddress) { + this.groupByAddress = groupByAddress; + flush(); + } + + public boolean isIncludeMempoolChange() { + return includeMempoolChange; + } + + public void setIncludeMempoolChange(boolean includeMempoolChange) { + this.includeMempoolChange = includeMempoolChange; + flush(); + } + public Integer getKeyDerivationPeriod() { return keyDerivationPeriod; } diff --git a/src/main/java/com/sparrowwallet/sparrow/io/ElectrumServer.java b/src/main/java/com/sparrowwallet/sparrow/io/ElectrumServer.java index f21d4906..5c2dcadf 100644 --- a/src/main/java/com/sparrowwallet/sparrow/io/ElectrumServer.java +++ b/src/main/java/com/sparrowwallet/sparrow/io/ElectrumServer.java @@ -299,7 +299,9 @@ public class ElectrumServer { try { Set blockHeights = new TreeSet<>(); for(BlockTransactionHash reference : references) { - blockHeights.add(reference.getHeight()); + if(reference.getHeight() > 0) { + blockHeights.add(reference.getHeight()); + } } JsonRpcClient client = new JsonRpcClient(getTransport()); @@ -378,14 +380,20 @@ public class ElectrumServer { } BlockTransactionHash reference = optionalReference.get(); - BlockHeader blockHeader = blockHeaderMap.get(reference.getHeight()); - if(blockHeader == null) { - transactionMap.put(hash, UNFETCHABLE_BLOCK_TRANSACTION); - checkReferences.removeIf(ref -> ref.getHash().equals(hash)); - continue; + Date blockDate; + if(reference.getHeight() > 0) { + BlockHeader blockHeader = blockHeaderMap.get(reference.getHeight()); + if(blockHeader == null) { + transactionMap.put(hash, UNFETCHABLE_BLOCK_TRANSACTION); + checkReferences.removeIf(ref -> ref.getHash().equals(hash)); + continue; + } + blockDate = blockHeader.getTimeAsDate(); + } else { + blockDate = new Date(); } - BlockTransaction blockchainTransaction = new BlockTransaction(reference.getHash(), reference.getHeight(), blockHeader.getTimeAsDate(), reference.getFee(), transaction); + BlockTransaction blockchainTransaction = new BlockTransaction(reference.getHash(), reference.getHeight(), blockDate, reference.getFee(), transaction); transactionMap.put(hash, blockchainTransaction); checkReferences.remove(reference); diff --git a/src/main/java/com/sparrowwallet/sparrow/wallet/HashIndexEntry.java b/src/main/java/com/sparrowwallet/sparrow/wallet/HashIndexEntry.java index 8aed3db5..045619aa 100644 --- a/src/main/java/com/sparrowwallet/sparrow/wallet/HashIndexEntry.java +++ b/src/main/java/com/sparrowwallet/sparrow/wallet/HashIndexEntry.java @@ -94,7 +94,7 @@ public class HashIndexEntry extends Entry implements Comparable } if(getHashIndex().getHeight() != o.getHashIndex().getHeight()) { - return o.getHashIndex().getHeight() - getHashIndex().getHeight(); + return (o.getHashIndex().getHeight() > 0 ? o.getHashIndex().getHeight() : Integer.MAX_VALUE) - (getHashIndex().getHeight() > 0 ? getHashIndex().getHeight() : Integer.MAX_VALUE); } return (int)o.getHashIndex().getIndex() - (int)getHashIndex().getIndex(); diff --git a/src/main/java/com/sparrowwallet/sparrow/wallet/SendController.java b/src/main/java/com/sparrowwallet/sparrow/wallet/SendController.java index c46e4d0b..b0120a6e 100644 --- a/src/main/java/com/sparrowwallet/sparrow/wallet/SendController.java +++ b/src/main/java/com/sparrowwallet/sparrow/wallet/SendController.java @@ -300,7 +300,9 @@ public class SendController extends WalletFormController implements Initializabl if(recipientAmount != null && recipientAmount > recipientDustThreshold && (!userFeeSet.get() || (getFeeValueSats() != null && getFeeValueSats() > 0))) { Wallet wallet = getWalletForm().getWallet(); Long userFee = userFeeSet.get() ? getFeeValueSats() : null; - WalletTransaction walletTransaction = wallet.createWalletTransaction(getUtxoSelectors(), recipientAddress, recipientAmount, getFeeRate(), getMinimumFeeRate(), userFee, sendAll); + boolean groupByAddress = Config.get().isGroupByAddress(); + boolean includeMempoolChange = Config.get().isIncludeMempoolChange(); + WalletTransaction walletTransaction = wallet.createWalletTransaction(getUtxoSelectors(), recipientAddress, recipientAmount, getFeeRate(), getMinimumFeeRate(), userFee, sendAll, groupByAddress, includeMempoolChange); walletTransactionProperty.setValue(walletTransaction); insufficientInputsProperty.set(false); diff --git a/src/main/java/com/sparrowwallet/sparrow/wallet/TransactionEntry.java b/src/main/java/com/sparrowwallet/sparrow/wallet/TransactionEntry.java index 550fb4cd..bee562f2 100644 --- a/src/main/java/com/sparrowwallet/sparrow/wallet/TransactionEntry.java +++ b/src/main/java/com/sparrowwallet/sparrow/wallet/TransactionEntry.java @@ -71,7 +71,7 @@ public class TransactionEntry extends Entry implements Comparable