mirror of
https://github.com/sparrowwallet/sparrow.git
synced 2024-11-02 20:36:44 +00:00
display effective fee rate next to transaction fee rate when constructing a cpfp tx
This commit is contained in:
parent
1d2081d2a6
commit
6fc52fdc0e
2 changed files with 12 additions and 6 deletions
|
@ -382,6 +382,7 @@ public class SendController extends WalletFormController implements Initializabl
|
||||||
});
|
});
|
||||||
|
|
||||||
walletTransactionProperty.addListener((observable, oldValue, walletTransaction) -> {
|
walletTransactionProperty.addListener((observable, oldValue, walletTransaction) -> {
|
||||||
|
setEffectiveFeeRate(walletTransaction);
|
||||||
if(walletTransaction != null) {
|
if(walletTransaction != null) {
|
||||||
setPayments(walletTransaction.getPayments().stream().filter(payment -> payment.getType() != Payment.Type.FAKE_MIX).collect(Collectors.toList()));
|
setPayments(walletTransaction.getPayments().stream().filter(payment -> payment.getType() != Payment.Type.FAKE_MIX).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
@ -395,7 +396,6 @@ public class SendController extends WalletFormController implements Initializabl
|
||||||
}
|
}
|
||||||
|
|
||||||
setFeeRate(feeRate);
|
setFeeRate(feeRate);
|
||||||
setEffectiveFeeRate(walletTransaction);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
transactionDiagram.update(walletTransaction);
|
transactionDiagram.update(walletTransaction);
|
||||||
|
@ -881,22 +881,27 @@ public class SendController extends WalletFormController implements Initializabl
|
||||||
|
|
||||||
private void setFeeRate(Double feeRateAmt) {
|
private void setFeeRate(Double feeRateAmt) {
|
||||||
UnitFormat format = Config.get().getUnitFormat() == null ? UnitFormat.DOT : Config.get().getUnitFormat();
|
UnitFormat format = Config.get().getUnitFormat() == null ? UnitFormat.DOT : Config.get().getUnitFormat();
|
||||||
feeRate.setText(format.getCurrencyFormat().format(feeRateAmt) + " sats/vB");
|
feeRate.setText(format.getCurrencyFormat().format(feeRateAmt) + (cpfpFeeRate.isVisible() ? "" : " sats/vB"));
|
||||||
setFeeRatePriority(feeRateAmt);
|
setFeeRatePriority(feeRateAmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setEffectiveFeeRate(WalletTransaction walletTransaction) {
|
private void setEffectiveFeeRate(WalletTransaction walletTransaction) {
|
||||||
List<BlockTransaction> unconfirmedUtxoTxs = walletTransaction.getSelectedUtxos().keySet().stream().filter(ref -> ref.getHeight() <= 0)
|
List<BlockTransaction> unconfirmedUtxoTxs = walletTransaction == null ? Collections.emptyList() :
|
||||||
.map(ref -> getWalletForm().getWallet().getWalletTransaction(ref.getHash())).filter(Objects::nonNull).distinct().collect(Collectors.toList());
|
walletTransaction.getSelectedUtxos().keySet().stream().filter(ref -> ref.getHeight() <= 0)
|
||||||
|
.map(ref -> getWalletForm().getWallet().getWalletTransaction(ref.getHash()))
|
||||||
|
.filter(Objects::nonNull).distinct().collect(Collectors.toList());
|
||||||
if(!unconfirmedUtxoTxs.isEmpty()) {
|
if(!unconfirmedUtxoTxs.isEmpty()) {
|
||||||
long utxoTxFee = unconfirmedUtxoTxs.stream().mapToLong(BlockTransaction::getFee).sum();
|
long utxoTxFee = unconfirmedUtxoTxs.stream().mapToLong(BlockTransaction::getFee).sum();
|
||||||
double utxoTxSize = unconfirmedUtxoTxs.stream().mapToDouble(blkTx -> blkTx.getTransaction().getVirtualSize()).sum();
|
double utxoTxSize = unconfirmedUtxoTxs.stream().mapToDouble(blkTx -> blkTx.getTransaction().getVirtualSize()).sum();
|
||||||
long thisFee = walletTransaction.getFee();
|
long thisFee = walletTransaction.getFee();
|
||||||
double thisSize = walletTransaction.getTransaction().getVirtualSize();
|
double thisSize = walletTransaction.getTransaction().getVirtualSize();
|
||||||
double effectiveRate = (utxoTxFee + thisFee) / (utxoTxSize + thisSize);
|
double effectiveRate = (utxoTxFee + thisFee) / (utxoTxSize + thisSize);
|
||||||
Tooltip tooltip = new Tooltip("Child Pays For Parent\n" + String.format("%.2f", effectiveRate) + " sats/vB effective rate");
|
UnitFormat format = Config.get().getUnitFormat() == null ? UnitFormat.DOT : Config.get().getUnitFormat();
|
||||||
|
String strEffectiveRate = format.getCurrencyFormat().format(effectiveRate);
|
||||||
|
Tooltip tooltip = new Tooltip("CPFP (Child Pays For Parent)\n" + strEffectiveRate + " sats/vB effective rate");
|
||||||
cpfpFeeRate.setTooltip(tooltip);
|
cpfpFeeRate.setTooltip(tooltip);
|
||||||
cpfpFeeRate.setVisible(true);
|
cpfpFeeRate.setVisible(true);
|
||||||
|
cpfpFeeRate.setText(strEffectiveRate + " sats/vB (CPFP)");
|
||||||
} else {
|
} else {
|
||||||
cpfpFeeRate.setVisible(false);
|
cpfpFeeRate.setVisible(false);
|
||||||
}
|
}
|
||||||
|
@ -1548,6 +1553,7 @@ public class SendController extends WalletFormController implements Initializabl
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void unitFormatChanged(UnitFormatChangedEvent event) {
|
public void unitFormatChanged(UnitFormatChangedEvent event) {
|
||||||
|
setEffectiveFeeRate(getWalletTransaction());
|
||||||
setFeeRate(getFeeRate());
|
setFeeRate(getFeeRate());
|
||||||
if(fee.getTextFormatter() instanceof CoinTextFormatter coinTextFormatter && coinTextFormatter.getUnitFormat() != event.getUnitFormat()) {
|
if(fee.getTextFormatter() instanceof CoinTextFormatter coinTextFormatter && coinTextFormatter.getUnitFormat() != event.getUnitFormat()) {
|
||||||
Long value = getFeeValueSats(coinTextFormatter.getUnitFormat(), feeAmountUnit.getSelectionModel().getSelectedItem());
|
Long value = getFeeValueSats(coinTextFormatter.getUnitFormat(), feeAmountUnit.getSelectionModel().getSelectedItem());
|
||||||
|
|
|
@ -98,7 +98,7 @@
|
||||||
<Glyph fontFamily="Font Awesome 5 Free Solid" fontSize="12" icon="SIGN_OUT_ALT" />
|
<Glyph fontFamily="Font Awesome 5 Free Solid" fontSize="12" icon="SIGN_OUT_ALT" />
|
||||||
</graphic>
|
</graphic>
|
||||||
<padding>
|
<padding>
|
||||||
<Insets left="10"/>
|
<Insets left="4"/>
|
||||||
</padding>
|
</padding>
|
||||||
</Label>
|
</Label>
|
||||||
<Region HBox.hgrow="ALWAYS" />
|
<Region HBox.hgrow="ALWAYS" />
|
||||||
|
|
Loading…
Reference in a new issue